]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot-mpc83xx
authorWolfgang Denk <wd@denx.de>
Wed, 7 Dec 2011 22:01:26 +0000 (23:01 +0100)
committerWolfgang Denk <wd@denx.de>
Wed, 7 Dec 2011 22:01:26 +0000 (23:01 +0100)
* 'master' of git://git.denx.de/u-boot-mpc83xx:
  powerpc/83xx: fix sdram initialization for keymile boards
  powerpc/mpc83xx: cleanup makefile for mpc83xx

816 files changed:
.checkpatch.conf [new file with mode: 0644]
.gitignore
CREDITS
MAINTAINERS
MAKEALL
Makefile
README
api/Makefile
api/api.c
api/api_display.c [new file with mode: 0644]
api/api_private.h
arch/arm/cpu/arm1136/mx31/devices.c
arch/arm/cpu/arm1136/mx31/generic.c
arch/arm/cpu/arm920t/a320/timer.c
arch/arm/cpu/arm920t/at91/at91rm9200_devices.c
arch/arm/cpu/arm926ejs/Makefile
arch/arm/cpu/arm926ejs/at91/at91cap9_devices.c
arch/arm/cpu/arm926ejs/at91/at91sam9260_devices.c
arch/arm/cpu/arm926ejs/at91/at91sam9261_devices.c
arch/arm/cpu/arm926ejs/at91/at91sam9263_devices.c
arch/arm/cpu/arm926ejs/at91/at91sam9m10g45_devices.c
arch/arm/cpu/arm926ejs/at91/at91sam9rl_devices.c
arch/arm/cpu/arm926ejs/at91/led.c
arch/arm/cpu/arm926ejs/at91/reset.c
arch/arm/cpu/arm926ejs/at91/timer.c
arch/arm/cpu/arm926ejs/cache.c [new file with mode: 0644]
arch/arm/cpu/arm926ejs/davinci/Makefile
arch/arm/cpu/arm926ejs/davinci/am1808_lowlevel.c [deleted file]
arch/arm/cpu/arm926ejs/davinci/da850_lowlevel.c [new file with mode: 0644]
arch/arm/cpu/arm926ejs/davinci/da850_pinmux.c [new file with mode: 0644]
arch/arm/cpu/arm926ejs/davinci/dm365_lowlevel.c
arch/arm/cpu/arm926ejs/davinci/dp83848.c
arch/arm/cpu/arm926ejs/davinci/et1011c.c
arch/arm/cpu/arm926ejs/davinci/ksz8873.c
arch/arm/cpu/arm926ejs/davinci/lxt972.c
arch/arm/cpu/arm926ejs/davinci/misc.c [moved from board/davinci/common/misc.c with 90% similarity]
arch/arm/cpu/arm926ejs/davinci/pinmux.c [moved from board/davinci/common/davinci_pinmux.c with 100% similarity]
arch/arm/cpu/arm926ejs/mb86r0x/timer.c
arch/arm/cpu/arm926ejs/mx28/Makefile [moved from board/pleb2/Makefile with 86% similarity]
arch/arm/cpu/arm926ejs/mx28/clock.c [new file with mode: 0644]
arch/arm/cpu/arm926ejs/mx28/iomux.c [new file with mode: 0644]
arch/arm/cpu/arm926ejs/mx28/mx28.c [new file with mode: 0644]
arch/arm/cpu/arm926ejs/mx28/timer.c [new file with mode: 0644]
arch/arm/cpu/arm926ejs/omap/cpuinfo.c
arch/arm/cpu/arm926ejs/start.S
arch/arm/cpu/armv7/Makefile
arch/arm/cpu/armv7/cpu.c
arch/arm/cpu/armv7/mx5/clock.c
arch/arm/cpu/armv7/omap-common/Makefile
arch/arm/cpu/armv7/omap-common/clocks-common.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap-common/emif-common.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap-common/hwinit-common.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap-common/lowlevel_init.S [moved from arch/arm/cpu/armv7/omap4/lowlevel_init.S with 76% similarity]
arch/arm/cpu/armv7/omap-common/mem-common.c [moved from arch/arm/cpu/armv7/omap4/mem.c with 100% similarity]
arch/arm/cpu/armv7/omap-common/spl.c
arch/arm/cpu/armv7/omap3/Makefile
arch/arm/cpu/armv7/omap3/board.c
arch/arm/cpu/armv7/omap3/emac.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap3/lowlevel_init.S
arch/arm/cpu/armv7/omap3/mem.c
arch/arm/cpu/armv7/omap3/sdrc.c
arch/arm/cpu/armv7/omap3/spl_id_nand.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap4/Makefile
arch/arm/cpu/armv7/omap4/board.c [deleted file]
arch/arm/cpu/armv7/omap4/clocks.c
arch/arm/cpu/armv7/omap4/emif.c
arch/arm/cpu/armv7/omap4/hwinit.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap4/omap4_mux_data.h [deleted file]
arch/arm/cpu/armv7/omap4/sdram_elpida.c
arch/arm/cpu/armv7/omap5/Makefile [new file with mode: 0644]
arch/arm/cpu/armv7/omap5/clocks.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap5/config.mk [moved from board/ti/evm/config.mk with 66% similarity]
arch/arm/cpu/armv7/omap5/emif.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap5/hwinit.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap5/sdram_elpida.c [new file with mode: 0644]
arch/arm/cpu/armv7/s5p-common/pwm.c
arch/arm/cpu/armv7/start.S
arch/arm/cpu/pxa/Makefile
arch/arm/cpu/pxa/cpuinfo.c [new file with mode: 0644]
arch/arm/cpu/pxa/pxa2xx.c [moved from arch/arm/cpu/pxa/cpu.c with 76% similarity]
arch/arm/cpu/pxa/start.S
arch/arm/cpu/pxa/timer.c
arch/arm/cpu/pxa/u-boot.lds
arch/arm/cpu/pxa/usb.c
arch/arm/include/asm/arch-at91/at91_common.h
arch/arm/include/asm/arch-at91/at91cap9.h
arch/arm/include/asm/arch-at91/at91cap9_matrix.h
arch/arm/include/asm/arch-at91/clk.h
arch/arm/include/asm/arch-at91/hardware.h
arch/arm/include/asm/arch-davinci/aintc_defs.h
arch/arm/include/asm/arch-davinci/da850_lowlevel.h [moved from arch/arm/include/asm/arch-davinci/am1808_lowlevel.h with 63% similarity]
arch/arm/include/asm/arch-davinci/davinci_misc.h
arch/arm/include/asm/arch-davinci/ddr2_defs.h
arch/arm/include/asm/arch-davinci/emac_defs.h
arch/arm/include/asm/arch-davinci/emif_defs.h
arch/arm/include/asm/arch-davinci/hardware.h
arch/arm/include/asm/arch-davinci/pinmux_defs.h [new file with mode: 0644]
arch/arm/include/asm/arch-davinci/pll_defs.h
arch/arm/include/asm/arch-mx25/imx-regs.h
arch/arm/include/asm/arch-mx27/imx-regs.h
arch/arm/include/asm/arch-mx28/clock.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/dma.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/gpio.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/imx-regs.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/iomux-mx28.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/iomux.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-apbh.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-base.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-bch.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-clkctrl.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-common.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-gpmi.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-i2c.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-ocotp.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-pinctrl.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-power.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-rtc.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-ssp.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-timrot.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-usb.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/regs-usbphy.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx28/sys_proto.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx31/imx-regs.h
arch/arm/include/asm/arch-mx35/imx-regs.h
arch/arm/include/asm/arch-mx5/imx-regs.h
arch/arm/include/asm/arch-omap3/am35x_def.h
arch/arm/include/asm/arch-omap3/emac_defs.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap3/mem.h
arch/arm/include/asm/arch-omap3/mmc_host_def.h
arch/arm/include/asm/arch-omap3/mux.h
arch/arm/include/asm/arch-omap3/omap3.h
arch/arm/include/asm/arch-omap3/sys_proto.h
arch/arm/include/asm/arch-omap4/clocks.h
arch/arm/include/asm/arch-omap4/emif.h [deleted file]
arch/arm/include/asm/arch-omap4/mmc_host_def.h
arch/arm/include/asm/arch-omap4/omap.h [moved from arch/arm/include/asm/arch-omap4/omap4.h with 87% similarity]
arch/arm/include/asm/arch-omap4/sys_proto.h
arch/arm/include/asm/arch-omap5/clocks.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap5/cpu.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap5/gpio.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap5/i2c.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap5/mmc_host_def.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap5/mux_omap5.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap5/omap.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap5/sys_proto.h [new file with mode: 0644]
arch/arm/include/asm/arch-pxa/pxa-regs.h
arch/arm/include/asm/arch-pxa/pxa.h [moved from arch/arm/cpu/armv7/omap4/sys_info.c with 60% similarity]
arch/arm/include/asm/arch-pxa/regs-uart.h [new file with mode: 0644]
arch/arm/include/asm/armv7.h
arch/arm/include/asm/dma-mapping.h
arch/arm/include/asm/emif.h [new file with mode: 0644]
arch/arm/include/asm/mach-types.h
arch/arm/include/asm/omap_common.h
arch/arm/lib/board.c
arch/arm/lib/eabi_compat.c
arch/blackfin/config.mk
arch/blackfin/cpu/traps.c
arch/blackfin/lib/board.c
arch/m68k/cpu/mcf52x2/cpu_init.c
arch/nds32/cpu/n1213/ag101/cpu.c
arch/nds32/cpu/n1213/ag101/timer.c
arch/nds32/cpu/n1213/u-boot.lds
arch/nds32/include/asm/io.h
arch/nds32/include/asm/mach-types.h
arch/nds32/lib/board.c
arch/nios2/cpu/Makefile
arch/nios2/cpu/cpu.c
arch/nios2/cpu/fdt.c [new file with mode: 0644]
arch/nios2/include/asm/gpio.h
arch/powerpc/cpu/mpc512x/i2c.c
arch/powerpc/cpu/mpc512x/pci.c
arch/powerpc/cpu/mpc83xx/spd_sdram.c
arch/powerpc/cpu/mpc85xx/cmd_errata.c
arch/powerpc/cpu/mpc85xx/cpu.c
arch/powerpc/cpu/mpc85xx/cpu_init.c
arch/powerpc/cpu/mpc85xx/cpu_init_early.c
arch/powerpc/cpu/mpc85xx/ddr-gen3.c
arch/powerpc/cpu/mpc85xx/fdt.c
arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c
arch/powerpc/cpu/mpc85xx/release.S
arch/powerpc/cpu/mpc85xx/start.S
arch/powerpc/cpu/mpc85xx/tlb.c
arch/powerpc/cpu/mpc86xx/cpu.c
arch/powerpc/cpu/mpc8xx/video.c
arch/powerpc/cpu/mpc8xxx/ddr/ctrl_regs.c
arch/powerpc/cpu/mpc8xxx/ddr/ddr3_dimm_params.c
arch/powerpc/cpu/mpc8xxx/ddr/interactive.c
arch/powerpc/cpu/mpc8xxx/ddr/options.c
arch/powerpc/cpu/mpc8xxx/fdt.c
arch/powerpc/cpu/mpc8xxx/fsl_lbc.c
arch/powerpc/cpu/ppc4xx/40x_spd_sdram.c
arch/powerpc/cpu/ppc4xx/44x_spd_ddr.c
arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c
arch/powerpc/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c
arch/powerpc/cpu/ppc4xx/4xx_pcie.c
arch/powerpc/cpu/ppc4xx/Makefile
arch/powerpc/cpu/ppc4xx/cmd_ecctest.c
arch/powerpc/cpu/ppc4xx/iop480_uart.c
arch/powerpc/cpu/ppc4xx/usb.c
arch/powerpc/cpu/ppc4xx/usb_ohci.c
arch/powerpc/cpu/ppc4xx/usbdev.c [deleted file]
arch/powerpc/cpu/ppc4xx/usbdev.h [deleted file]
arch/powerpc/include/asm/config_mpc85xx.h
arch/powerpc/include/asm/immap_85xx.h
arch/powerpc/include/asm/mmu.h
arch/powerpc/include/asm/processor.h
arch/sh/cpu/sh2/config.mk
arch/sh/cpu/sh4/cache.c
arch/sh/include/asm/cache.h
arch/sh/include/asm/cpu_sh4.h
arch/sh/include/asm/cpu_sh7724.h [new file with mode: 0644]
arch/sh/lib/Makefile
arch/sh/lib/ashrsi3.S [new file with mode: 0644]
arch/sparc/lib/board.c
arch/sparc/lib/bootm.c
arch/x86/config.mk
arch/x86/cpu/cpu.c
arch/x86/cpu/interrupts.c
arch/x86/cpu/sc520/asm-offsets.c [new file with mode: 0644]
arch/x86/cpu/sc520/sc520.c
arch/x86/cpu/sc520/sc520_car.S
arch/x86/cpu/sc520/sc520_pci.c
arch/x86/cpu/sc520/sc520_sdram.c
arch/x86/cpu/sc520/sc520_ssi.c
arch/x86/cpu/sc520/sc520_timer.c
arch/x86/cpu/start.S
arch/x86/cpu/start16.S
arch/x86/include/asm/arch-sc520/sc520.h
arch/x86/include/asm/global_data.h
arch/x86/include/asm/pci.h
arch/x86/include/asm/realmode.h
arch/x86/include/asm/string.h
arch/x86/include/asm/u-boot-x86.h
arch/x86/lib/Makefile
arch/x86/lib/bios.h
arch/x86/lib/bios_pci.S
arch/x86/lib/bios_setup.c
arch/x86/lib/board.c
arch/x86/lib/bootm.c
arch/x86/lib/gcc.c [new file with mode: 0644]
arch/x86/lib/interrupts.c
arch/x86/lib/pcat_interrupts.c
arch/x86/lib/pcat_timer.c
arch/x86/lib/pci.c
arch/x86/lib/pci_type1.c
arch/x86/lib/realmode.c
arch/x86/lib/string.c [new file with mode: 0644]
arch/x86/lib/timer.c
arch/x86/lib/video.c
arch/x86/lib/video_bios.c
arch/x86/lib/zimage.c
board/AndesTech/adp-ag101p/Makefile [moved from board/cradle/Makefile with 78% similarity]
board/AndesTech/adp-ag101p/adp-ag101p.c [new file with mode: 0644]
board/CarMediaLab/flea3/flea3.c
board/LaCie/common/common.c [new file with mode: 0644]
board/LaCie/common/common.h [new file with mode: 0644]
board/LaCie/edminiv2/Makefile
board/LaCie/edminiv2/edminiv2.c
board/LaCie/net2big_v2/Makefile [new file with mode: 0644]
board/LaCie/net2big_v2/kwbimage.cfg [new file with mode: 0644]
board/LaCie/net2big_v2/net2big_v2.c [new file with mode: 0644]
board/LaCie/net2big_v2/net2big_v2.h [moved from board/LaCie/edminiv2/edminiv2.h with 50% similarity]
board/LaCie/netspace_v2/Makefile
board/LaCie/netspace_v2/netspace_v2.c
board/LaCie/netspace_v2/netspace_v2.h
board/Marvell/db64360/db64360.c
board/Marvell/db64360/mv_eth.c
board/Marvell/db64360/sdram_init.c
board/Marvell/db64460/db64460.c
board/Marvell/db64460/mv_eth.c
board/Marvell/db64460/sdram_init.c
board/afeb9260/Makefile
board/afeb9260/afeb9260.c
board/ait/cam_enc_4xx/cam_enc_4xx.c
board/altera/nios2-generic/Makefile
board/altera/nios2-generic/custom_fpga.h
board/altera/nios2-generic/gpio.c [deleted file]
board/altera/nios2-generic/nios2-generic.c
board/amcc/common/flash.c
board/amcc/taihu/flash.c
board/amcc/yucca/cmd_yucca.c
board/amcc/yucca/flash.c
board/amirix/ap1000/flash.c
board/armltd/integrator/arm-ebi.h [new file with mode: 0644]
board/armltd/integrator/config.mk [deleted file]
board/armltd/integrator/integrator-sc.h [new file with mode: 0644]
board/armltd/integrator/integrator.c
board/atmel/at91sam9260ek/Makefile
board/atmel/at91sam9260ek/at91sam9260ek.c
board/atmel/at91sam9260ek/led.c
board/atmel/at91sam9261ek/Makefile
board/atmel/at91sam9261ek/at91sam9261ek.c
board/atmel/at91sam9261ek/led.c
board/atmel/at91sam9263ek/Makefile
board/atmel/at91sam9263ek/at91sam9263ek.c
board/atmel/at91sam9263ek/led.c
board/atmel/at91sam9m10g45ek/Makefile
board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c
board/atmel/at91sam9m10g45ek/led.c
board/atmel/at91sam9rlek/Makefile
board/atmel/at91sam9rlek/at91sam9rlek.c
board/atmel/at91sam9rlek/led.c
board/balloon3/balloon3.c
board/calao/sbc35_a9g20/Makefile
board/calao/sbc35_a9g20/sbc35_a9g20.c
board/calao/tny_a9260/Makefile
board/calao/tny_a9260/tny_a9260.c
board/cerf250/cerf250.c [deleted file]
board/cerf250/flash.c [deleted file]
board/cm4008/flash.c
board/cm41xx/flash.c
board/cradle/cradle.c [deleted file]
board/cradle/flash.c [deleted file]
board/cray/L1/flash.c
board/csb226/csb226.c [deleted file]
board/csb226/flash.c [deleted file]
board/davedenx/qong/qong.c
board/davinci/da8xxevm/da830evm.c
board/davinci/da8xxevm/da850evm.c
board/davinci/da8xxevm/hawkboard.c
board/davinci/da8xxevm/hawkboard_nand_spl.c
board/davinci/dm6467evm/dm6467evm.c
board/davinci/ea20/ea20.c
board/davinci/schmoogie/schmoogie.c
board/davinci/sonata/sonata.c
board/denx/m28evk/Makefile [moved from board/innokom/Makefile with 85% similarity]
board/denx/m28evk/m28_init.h [moved from onenand_ipl/board/vpac270/vpac270.c with 64% similarity]
board/denx/m28evk/m28evk.c [new file with mode: 0644]
board/denx/m28evk/mem_init.c [new file with mode: 0644]
board/denx/m28evk/mmc_boot.c [new file with mode: 0644]
board/denx/m28evk/power_init.c [new file with mode: 0644]
board/denx/m28evk/start.S [new file with mode: 0644]
board/denx/m28evk/u-boot-spl.lds [new file with mode: 0644]
board/denx/m28evk/u-boot.bd [new file with mode: 0644]
board/eNET/eNET.c
board/eNET/eNET_pci.c
board/eNET/eNET_start16.S
board/efikamx/efikamx.c
board/egnite/ethernut5/Makefile [new file with mode: 0644]
board/egnite/ethernut5/ethernut5.c [new file with mode: 0644]
board/egnite/ethernut5/ethernut5_pwrman.c [new file with mode: 0644]
board/egnite/ethernut5/ethernut5_pwrman.h [new file with mode: 0644]
board/eltec/bab7xx/misc.c
board/eltec/elppc/misc.c
board/eltec/mhpc/mhpc.c
board/emk/top860/top860.c
board/emk/top9000/top9000.c
board/enbw/enbw_cmc/Makefile [moved from board/davinci/common/Makefile with 88% similarity]
board/enbw/enbw_cmc/enbw_cmc.c [new file with mode: 0644]
board/esd/common/auto_update.c
board/esd/common/xilinx_jtag/micro.c
board/esd/cpci405/cpci405.c
board/esd/cpci750/cpci750.c
board/esd/cpci750/sdram_init.c
board/esd/dasa_sim/cmd_dasa_sim.c
board/esd/dasa_sim/flash.c
board/esd/meesc/Makefile
board/esd/meesc/meesc.c
board/esd/otc570/Makefile
board/esd/otc570/otc570.c
board/esd/pci405/cmd_pci405.c
board/esd/pmc440/cmd_pmc440.c
board/esd/pmc440/pmc440.c
board/eukrea/cpu9260/Makefile
board/eukrea/cpu9260/cpu9260.c
board/evb64260/eth.c
board/evb64260/evb64260.c
board/evb64260/i2c.c
board/evb64260/sdram_init.c
board/evb64260/zuma_pbb_mbox.c
board/faraday/a320evb/a320evb.c
board/freescale/common/Makefile
board/freescale/common/cds_pci_ft.c
board/freescale/common/ics307_clk.c
board/freescale/common/ics307_clk.h
board/freescale/common/ngpixis.c
board/freescale/common/pixis.c
board/freescale/common/qixis.c [new file with mode: 0644]
board/freescale/common/qixis.h [new file with mode: 0644]
board/freescale/corenet_ds/eth_hydra.c
board/freescale/corenet_ds/eth_p4080.c
board/freescale/mpc8360emds/mpc8360emds.c
board/freescale/mpc8548cds/mpc8548cds.c
board/freescale/mpc8568mds/mpc8568mds.c
board/freescale/mpc8569mds/mpc8569mds.c
board/freescale/mpc8572ds/tlb.c
board/freescale/mpc8610hpcd/mpc8610hpcd.c
board/freescale/mx51evk/mx51evk.c
board/freescale/mx53ard/mx53ard.c
board/freescale/mx53evk/mx53evk.c
board/freescale/mx53loco/mx53loco.c
board/freescale/mx53smd/mx53smd.c
board/freescale/p1010rdb/p1010rdb.c
board/freescale/p1_p2_rdb/p1_p2_rdb.c
board/freescale/p1_p2_rdb_pc/law.c
board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c
board/freescale/p2020come/Makefile [new file with mode: 0644]
board/freescale/p2020come/ddr.c [moved from onenand_ipl/board/vpac270/u-boot.onenand.lds with 56% similarity]
board/freescale/p2020come/law.c [new file with mode: 0644]
board/freescale/p2020come/p2020come.c [new file with mode: 0644]
board/freescale/p2020come/tlb.c [new file with mode: 0644]
board/freescale/p2041rdb/eth.c
board/freescale/p2041rdb/p2041rdb.c
board/freescale/p3060qds/Makefile [new file with mode: 0644]
board/freescale/p3060qds/ddr.c [new file with mode: 0644]
board/freescale/p3060qds/eth.c [new file with mode: 0644]
board/freescale/p3060qds/fixed_ddr.c [new file with mode: 0644]
board/freescale/p3060qds/p3060qds.c [new file with mode: 0644]
board/freescale/p3060qds/p3060qds.h [new file with mode: 0644]
board/freescale/p3060qds/p3060qds_qixis.h [new file with mode: 0644]
board/gdsys/405ep/dlvision-10g.c
board/gdsys/405ex/405ex.c [new file with mode: 0644]
board/gdsys/405ex/405ex.h [new file with mode: 0644]
board/gdsys/405ex/Makefile [new file with mode: 0644]
board/gdsys/405ex/chip_config.c [new file with mode: 0644]
board/gdsys/405ex/io64.c [new file with mode: 0644]
board/gdsys/common/Makefile
board/gdsys/common/miiphybb.c
board/hymod/input.c
board/innokom/flash.c [deleted file]
board/innokom/innokom.c [deleted file]
board/keymile/km83xx/km83xx_i2c.c
board/logicpd/am3517evm/am3517evm.c
board/logicpd/am3517evm/am3517evm.h
board/logicpd/am3517evm/config.mk [deleted file]
board/lubbock/flash.c
board/lubbock/lubbock.c
board/matrix_vision/common/mv_common.c
board/matrix_vision/mvblx/Makefile
board/mcc200/lcd.c
board/mpl/common/flash.c
board/mpl/mip405/mip405.c
board/mpl/pip405/pip405.c
board/mpl/vcma9/vcma9.c
board/mx1ads/mx1ads.c
board/mx1ads/syncflash.c
board/palmld/palmld.c
board/palmtc/palmtc.c
board/pleb2/flash.c [deleted file]
board/pleb2/pleb2.c [deleted file]
board/prodrive/alpr/fpga.c
board/prodrive/alpr/nand.c
board/pxa255_idp/pxa_idp.c
board/renesas/ecovec/Makefile [moved from board/xm250/Makefile with 74% similarity]
board/renesas/ecovec/ecovec.c [new file with mode: 0644]
board/renesas/ecovec/lowlevel_init.S [new file with mode: 0644]
board/renesas/sh7757lcr/lowlevel_init.S
board/ronetix/pm9261/Makefile
board/ronetix/pm9261/led.c
board/ronetix/pm9261/pm9261.c
board/ronetix/pm9263/Makefile
board/ronetix/pm9263/led.c
board/ronetix/pm9263/pm9263.c
board/ronetix/pm9g45/Makefile
board/ronetix/pm9g45/pm9g45.c
board/sandburst/common/flash.c
board/sbc405/strataflash.c
board/sbc8548/sbc8548.c
board/sbc8560/sbc8560.c
board/syteco/jadecpu/Makefile
board/syteco/zmx25/zmx25.c
board/ti/am3517crane/am3517crane.c
board/ti/am3517crane/am3517crane.h
board/ti/am3517crane/config.mk [deleted file]
board/ti/beagle/beagle.c
board/ti/beagle/config.mk [deleted file]
board/ti/evm/evm.c
board/ti/omap5_evm/Makefile [moved from board/cerf250/Makefile with 86% similarity]
board/ti/omap5_evm/evm.c [new file with mode: 0644]
board/ti/omap5_evm/mux_data.h [new file with mode: 0644]
board/ti/panda/Makefile
board/ti/panda/panda.c
board/ti/panda/panda_mux_data.h
board/ti/sdp4430/Makefile
board/ti/sdp4430/sdp.c
board/ti/sdp4430/sdp4430_mux_data.h
board/timll/devkit8000/devkit8000.c
board/toradex/colibri_pxa270/Makefile [moved from board/colibri_pxa270/Makefile with 100% similarity]
board/toradex/colibri_pxa270/colibri_pxa270.c [moved from board/colibri_pxa270/colibri_pxa270.c with 81% similarity]
board/trizepsiv/conxs.c
board/vpac270/Makefile
board/vpac270/onenand.c [new file with mode: 0644]
board/vpac270/u-boot-spl.lds [new file with mode: 0644]
board/vpac270/vpac270.c
board/xaeniax/flash.c
board/xaeniax/xaeniax.c
board/xm250/flash.c [deleted file]
board/xm250/xm250.c [deleted file]
board/zeus/zeus.c
board/zipitz2/zipitz2.c
boards.cfg
common/Makefile
common/cmd_bdinfo.c
common/cmd_bedbug.c
common/cmd_bmp.c
common/cmd_bootm.c
common/cmd_dcr.c
common/cmd_fdc.c
common/cmd_i2c.c
common/cmd_mem.c
common/cmd_nvedit.c
common/cmd_pci.c
common/cmd_pxe.c
common/cmd_tpm.c [new file with mode: 0644]
common/cmd_tsi148.c
common/cmd_universe.c
common/env_common.c
common/env_dataflash.c
common/env_eeprom.c
common/env_embedded.c
common/env_flash.c
common/env_mgdisk.c
common/env_mmc.c
common/env_nand.c
common/env_nowhere.c
common/env_nvram.c
common/env_onenand.c
common/env_sf.c
common/exports.c
common/fdt_support.c
common/hush.c
common/image.c
common/lcd.c
common/menu.c
common/miiphyutil.c
common/modem.c
common/serial.c
common/usb.c
disk/part_efi.c
doc/README.m28 [new file with mode: 0644]
doc/README.p3060qds [new file with mode: 0644]
doc/README.scrapyard
doc/README.sh7757lcr
doc/feature-removal-schedule.txt
doc/git-mailrc [new file with mode: 0644]
drivers/bios_emulator/x86emu/ops.c
drivers/bios_emulator/x86emu/ops2.c
drivers/block/ahci.c
drivers/block/fsl_sata.c
drivers/block/fsl_sata.h
drivers/block/ftide020.c
drivers/block/mvsata_ide.c
drivers/block/sata_dwc.c
drivers/block/sata_sil3114.c
drivers/block/sym53c8xx.c
drivers/dma/Makefile
drivers/dma/apbh_dma.c [new file with mode: 0644]
drivers/fpga/ivm_core.c
drivers/gpio/Makefile
drivers/gpio/altera_pio.c [new file with mode: 0644]
drivers/gpio/mxs_gpio.c [new file with mode: 0644]
drivers/gpio/pca9698.c
drivers/i2c/Makefile
drivers/i2c/davinci_i2c.c
drivers/i2c/fsl_i2c.c
drivers/i2c/mxs_i2c.c [new file with mode: 0644]
drivers/i2c/sh_i2c.c [new file with mode: 0644]
drivers/input/i8042.c
drivers/mmc/Makefile
drivers/mmc/arm_pl180_mmci.c
drivers/mmc/davinci_mmc.c
drivers/mmc/mmc.c
drivers/mmc/mv_sdhci.c
drivers/mmc/mxsmmc.c [new file with mode: 0644]
drivers/mmc/omap_hsmmc.c
drivers/mmc/pxa_mmc.c
drivers/mmc/pxa_mmc_gen.c
drivers/mmc/tegra2_mmc.c
drivers/mmc/tegra2_mmc.h
drivers/mtd/dataflash.c
drivers/mtd/nand/Makefile
drivers/mtd/nand/atmel_nand.c
drivers/mtd/nand/mxs_nand.c [new file with mode: 0644]
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/nand_ecc.c
drivers/mtd/nand/nand_spl_simple.c
drivers/mtd/nand/omap_gpmc.c
drivers/mtd/nand/s3c64xx.c
drivers/mtd/onenand/Makefile
drivers/mtd/onenand/onenand_base.c
drivers/mtd/onenand/onenand_spl.c [new file with mode: 0644]
drivers/mtd/onenand/samsung.c
drivers/mtd/spi/spi_flash.c
drivers/net/4xx_enet.c
drivers/net/Makefile
drivers/net/armada100_fec.c
drivers/net/at91_emac.c
drivers/net/cs8900.c
drivers/net/davinci_emac.c
drivers/net/davinci_emac.h [new file with mode: 0644]
drivers/net/dnet.c
drivers/net/e1000.c
drivers/net/e1000.h
drivers/net/enc28j60.c
drivers/net/fec_mxc.c
drivers/net/fm/fm.c
drivers/net/lan91c96.c
drivers/net/lan91c96.h
drivers/net/mvgbe.c
drivers/net/phy/Makefile
drivers/net/phy/marvell.c
drivers/net/phy/phy.c
drivers/net/phy/smsc.c [new file with mode: 0644]
drivers/net/rtl8019.c [deleted file]
drivers/net/rtl8019.h [deleted file]
drivers/net/sh_eth.c
drivers/net/sh_eth.h
drivers/net/smc91111.h
drivers/net/smc911x.h
drivers/net/tsec.c
drivers/pci/Makefile
drivers/pci/pci_ftpci100.c [new file with mode: 0644]
drivers/pci/pci_ftpci100.h [new file with mode: 0644]
drivers/qe/qe.c
drivers/qe/uec.c
drivers/rtc/Makefile
drivers/rtc/davinci.c
drivers/rtc/mxsrtc.c [new file with mode: 0644]
drivers/rtc/s3c24x0_rtc.c
drivers/serial/serial_mxc.c
drivers/serial/serial_pxa.c
drivers/serial/usbtty.h
drivers/spi/Makefile
drivers/spi/atmel_spi.c
drivers/spi/mxs_spi.c [new file with mode: 0644]
drivers/tpm/Makefile [moved from board/csb226/Makefile with 84% similarity]
drivers/tpm/generic_lpc_tpm.c [new file with mode: 0644]
drivers/usb/eth/smsc95xx.c
drivers/usb/gadget/Makefile
drivers/usb/host/Makefile
drivers/usb/host/ehci-fsl.c
drivers/usb/host/ehci-mxs.c [new file with mode: 0644]
drivers/usb/host/sl811-hcd.c
drivers/usb/musb/musb_hcd.c
drivers/video/bus_vcxk.c
drivers/video/cfb_console.c
drivers/video/ct69000.c
drivers/video/da8xx-fb.c
drivers/video/fsl_diu_fb.c
drivers/video/mx3fb.c
drivers/video/sed156x.c
examples/api/demo.c
examples/api/glue.c
examples/api/glue.h
examples/standalone/atmel_df_pow2.c
examples/standalone/stubs.c
fs/yaffs2/yaffs_guts.c
fs/yaffs2/yaffs_tagscompat.c
include/.gitignore
include/andestech/andes_pcu.h [new file with mode: 0644]
include/api_public.h
include/command.h
include/common.h
include/compiler.h
include/config_phylib_all_drivers.h
include/configs/MPC8536DS.h
include/configs/MPC8548CDS.h
include/configs/MPC8569MDS.h
include/configs/MPC8572DS.h
include/configs/P1022DS.h
include/configs/P1023RDS.h
include/configs/P1_P2_RDB.h
include/configs/P2020COME.h [new file with mode: 0644]
include/configs/P2041RDB.h
include/configs/P3041DS.h
include/configs/P3060QDS.h [new file with mode: 0644]
include/configs/P5020DS.h
include/configs/PMC440.h
include/configs/VCMA9.h
include/configs/a320evb.h
include/configs/adp-ag101p.h [new file with mode: 0644]
include/configs/am3517_crane.h
include/configs/am3517_evm.h
include/configs/apollon.h
include/configs/at91sam9260ek.h
include/configs/at91sam9261ek.h
include/configs/at91sam9263ek.h
include/configs/at91sam9m10g45ek.h
include/configs/at91sam9rlek.h
include/configs/balloon3.h
include/configs/cerf250.h [deleted file]
include/configs/cm_t35.h
include/configs/colibri_pxa270.h
include/configs/corenet_ds.h
include/configs/cpu9260.h
include/configs/cradle.h [deleted file]
include/configs/csb226.h [deleted file]
include/configs/da850_am18xxevm.h [new file with mode: 0644]
include/configs/da850evm.h
include/configs/davinci_dm6467Tevm.h [new file with mode: 0644]
include/configs/davinci_dm6467evm.h
include/configs/davinci_schmoogie.h
include/configs/davinci_sonata.h
include/configs/devkit8000.h
include/configs/dig297.h
include/configs/eNET.h
include/configs/ecovec.h [new file with mode: 0644]
include/configs/efikamx.h
include/configs/enbw_cmc.h [new file with mode: 0644]
include/configs/espt.h
include/configs/ethernut5.h [new file with mode: 0644]
include/configs/flea3.h
include/configs/gr_cpci_ax2000.h
include/configs/gr_ep2s60.h
include/configs/gr_xc3s_1500.h
include/configs/grsim.h
include/configs/grsim_leon2.h
include/configs/hawkboard.h
include/configs/igep0020.h
include/configs/igep0030.h
include/configs/imx27lite-common.h
include/configs/imx31_litekit.h
include/configs/imx31_phycore.h
include/configs/innokom.h [deleted file]
include/configs/integratorap.h
include/configs/integratorcp.h
include/configs/io64.h [new file with mode: 0644]
include/configs/lacie_kw.h [moved from include/configs/netspace_v2.h with 88% similarity]
include/configs/lubbock.h
include/configs/m28evk.h [new file with mode: 0644]
include/configs/meesc.h
include/configs/microblaze-generic.h
include/configs/mx25pdk.h
include/configs/mx31ads.h
include/configs/mx31pdk.h
include/configs/mx35pdk.h
include/configs/mx51evk.h
include/configs/mx53ard.h
include/configs/mx53evk.h
include/configs/mx53loco.h
include/configs/mx53smd.h
include/configs/nios2-generic.h
include/configs/omap3_beagle.h
include/configs/omap3_evm.h
include/configs/omap3_evm_common.h
include/configs/omap3_evm_quick_mmc.h
include/configs/omap3_evm_quick_nand.h
include/configs/omap3_mvblx.h
include/configs/omap3_overo.h
include/configs/omap3_pandora.h
include/configs/omap3_sdp3430.h
include/configs/omap3_zoom1.h
include/configs/omap3_zoom2.h
include/configs/omap4_common.h
include/configs/omap5_evm.h [new file with mode: 0644]
include/configs/otc570.h
include/configs/p1_p2_rdb_pc.h
include/configs/palmld.h
include/configs/palmtc.h
include/configs/pleb2.h [deleted file]
include/configs/pm9261.h
include/configs/pm9263.h
include/configs/pm9g45.h
include/configs/pxa-common.h [new file with mode: 0644]
include/configs/pxa255_idp.h
include/configs/qong.h
include/configs/sh7757lcr.h
include/configs/sh7763rdp.h
include/configs/tny_a9260.h
include/configs/trizepsiv.h
include/configs/tt01.h
include/configs/tx25.h
include/configs/vision2.h
include/configs/vpac270.h
include/configs/xaeniax.h
include/configs/xm250.h [deleted file]
include/configs/zipitz2.h
include/configs/zmx25.h
include/dataflash.h
include/ddr_spd.h
include/environment.h
include/exports.h
include/fdt_support.h
include/gdsys_fpga.h
include/image.h
include/lcd.h
include/linux/mtd/nand.h
include/mc13892.h
include/nand.h
include/net.h
include/onenand_uboot.h
include/pca9698.h
include/sdhci.h
include/search.h
include/serial.h
include/synopsys/dwcddr21mctl.h [new file with mode: 0644]
include/tpm.h [new file with mode: 0644]
include/video_font.h
include/video_font_data.h [new file with mode: 0644]
lib/hashtable.c
lib/qsort.c
nand_spl/board/davinci/da8xxevm/Makefile
nand_spl/board/samsung/smdk6400/Makefile
nand_spl/nand_boot.c
net/bootp.c
net/net.c
net/nfs.c
net/tftp.c
onenand_ipl/board/vpac270/Makefile [deleted file]
onenand_ipl/board/vpac270/config.mk [deleted file]
post/board/lwmon5/gdc.c
post/lib_powerpc/fpu/20001122-1.c
spl/Makefile
tools/.gitignore
tools/Makefile
tools/aisimage.c
tools/bmp_logo.c
tools/checkpatch.pl [new file with mode: 0755]
tools/default_image.c
tools/env/Makefile
tools/envcrc.c
tools/mkenvimage.c [new file with mode: 0644]
tools/mxsboot.c [new file with mode: 0644]
tools/omap/clocks_get_m_n.c
tools/os_support.c
tools/os_support.h

diff --git a/.checkpatch.conf b/.checkpatch.conf
new file mode 100644 (file)
index 0000000..977db9e
--- /dev/null
@@ -0,0 +1,14 @@
+# Not Linux, so don't expect a Linux tree.
+--no-tree
+
+# Temporary for false positive in checkpatch
+--ignore COMPLEX_MACRO
+
+# For CONFIG_SYS_I2C_NOPROBES
+--ignore MULTISTATEMENT_MACRO_USE_DO_WHILE
+
+# For simple_strtoul
+--ignore CONSIDER_KSTRTO
+
+# For min/max
+--ignore MINMAX
index 70a11f7850f363f23bc30092be685d16e763e701..ff4bae008137c7a62b226c01b810aa39acaf7e48 100644 (file)
@@ -36,6 +36,7 @@
 /u-boot.lds
 /u-boot.ubl
 /u-boot.dtb
+/u-boot.sb
 
 #
 # Generated files
diff --git a/CREDITS b/CREDITS
index e8e923a64410b3a407574fffe97626bf366f7e9d..dead57d6aa4e59a92c3dd66f7d0c750d1dca70fd 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -376,7 +376,7 @@ D: Support for the Wind River sbc405, sbc8240 board
 W: http://www.windriver.com
 
 N: Stelian Pop
-E: stelian.pop@leadtechdesign.com
+E: stelian@popies.net
 D: Atmel AT91CAP9ADK support
 
 N: Ricardo Ribalda Delgado
index 030fe4aad9ace71f3ed7dbf8f84a1844298d6c27..2ecc6644ccafce4788f6ff6e6bac793307d723e4 100644 (file)
@@ -142,6 +142,10 @@ Phil Edworthy <phil.edworthy@renesas.com>
 
        rsk7264         SH7264
 
+egnite GmbH <info@egnite.de>
+
+       ethernut5       ARM926EJS (AT91SAM9XE SoC)
+
 Dirk Eibach <eibach@gdsys.de>
 
        devconcenter    PPC460EX
@@ -150,6 +154,7 @@ Dirk Eibach <eibach@gdsys.de>
        gdppc440etx     PPC440EP/GR
        intip           PPC460EX
        io              PPC405EP
+       io64            PPC405EX
        iocon           PPC405EP
        neo             PPC405EP
 
@@ -305,10 +310,6 @@ Ryan Mallon <ryan@bluewatersys.com>
        snapper9260             ARM926EJS (AT91SAM9260 SoC)
        snapper9g20             ARM926EJS (AT91SAM9G20 SoC)
 
-Eran Man <eran@nbase.co.il>
-
-       EVB64260_750CX  MPC750CX
-
 Andrea "llandre" Marson <andrea.marson@dave-tech.it>
 
        PPChameleonEVB  PPC405EP
@@ -454,6 +455,10 @@ Jon Smirl <jonsmirl@gmail.com>
 
        pcm030          MPC5200
 
+Ira W. Snyder <iws@ovro.caltech.edu>
+
+       P2020COME       P2020
+
 Timur Tabi <timur@freescale.com>
 
        MPC8349E-mITX   MPC8349
@@ -543,10 +548,10 @@ Unknown / orphaned boards:
        rsdproto        MPC8260
 
        EVB64260        MPC7xx_74xx
+       EVB64260_750CX  MPC750CX        [Eran Man <eran@nbase.co.il>]
 
        versatile       ARM926EJ-S
 
-
 #########################################################################
 # ARM Systems:                                                         #
 #                                                                      #
@@ -650,6 +655,7 @@ Simon Guinot <simon.guinot@sequanux.org>
        inetspace_v2    ARM926EJS (Kirkwood SoC)
        netspace_v2     ARM926EJS (Kirkwood SoC)
        netspace_max_v2 ARM926EJS (Kirkwood SoC)
+       net2big_v2      ARM926EJS (Kirkwood SoC)
 
 Igor Grinberg <grinberg@compulab.co.il>
 
@@ -700,20 +706,12 @@ Chander Kashyap <k.chander@samsung.com>
 Torsten Koschorrek <koschorrek@synertronixx.de>
        scb9328         ARM920T (i.MXL)
 
-Frederik Kriewitz <frederik@kriewitz.eu>
-
-       devkit8000      ARM ARMV7 (OMAP3530 SoC)
-
 Sergey Kubushyn <ksi@koi8.net>
 
        DV-EVM          ARM926EJS
        SONATA          ARM926EJS
        SCHMOOGIE       ARM926EJS
 
-Prakash Kumar <prakash@embedx.com>
-
-       cerf250         xscale/pxa
-
 Vipin Kumar <vipin.kumar@st.com>
 
        spear300        ARM926EJS (spear300 Soc)
@@ -775,17 +773,17 @@ Dave Peverley <dpeverley@mpc-data.co.uk>
 
        omap730p2       ARM926EJS
 
-Manikandan Pillai <mani.pillai@ti.com>
-
-       omap3_evm       ARM ARMV7 (OMAP3xx SoC)
-
-Stelian Pop <stelian.pop@leadtechdesign.com>
+Stelian Pop <stelian@popies.net>
 
        at91sam9260ek   ARM926EJS (AT91SAM9260 SoC)
        at91sam9261ek   ARM926EJS (AT91SAM9261 SoC)
        at91sam9263ek   ARM926EJS (AT91SAM9263 SoC)
        at91sam9rlek    ARM926EJS (AT91SAM9RL SoC)
 
+Tom Rini <trini@ti.com>
+
+       omap3_evm       ARM ARMV7 (OMAP3xx SoC)
+
 Tom Rix <Tom.Rix@windriver.com>
 
        omap3_zoom2     ARM ARMV7 (OMAP3xx SoC)
@@ -814,14 +812,10 @@ Jens Scharsig <esw@bus-elektronik.de>
 
 Heiko Schocher <hs@denx.de>
 
+       enbw_cmc        ARM926EJS (AM1808 SoC)
        magnesium       i.MX27
        mgcoge3un       ARM926EJS (Kirkwood SoC)
 
-Robert Schwebel <r.schwebel@pengutronix.de>
-
-       csb226          xscale/pxa
-       innokom         xscale/pxa
-
 Michael Schwingen <michael@schwingen.org>
 
        actux1          xscale/ixp
@@ -850,6 +844,7 @@ Aneesh V <aneesh@ti.com>
 
        omap4_panda     ARM ARMV7 (OMAP4xx SoC)
        omap4_sdp4430   ARM ARMV7 (OMAP4xx SoC)
+       omap5_evm       ARM ARMV7 (OMAP5xx Soc)
 
 Marek Vasut <marek.vasut@gmail.com>
 
@@ -859,6 +854,7 @@ Marek Vasut <marek.vasut@gmail.com>
        palmtc          xscale/pxa
        vpac270         xscale/pxa
        zipitz2         xscale/pxa
+       m28evk          i.MX28
        efikamx         i.MX51
        efikasb         i.MX51
 
@@ -883,6 +879,10 @@ Tom Warren <twarren@nvidia.com>
        harmony         Tegra2 (ARM7 & A9 Dual Core)
        seaboard        Tegra2 (ARM7 & A9 Dual Core)
 
+Thomas Weber <weber@corscience.de>
+
+       devkit8000      ARM ARMV7 (OMAP3530 SoC)
+
 Lei Wen <leiwen@marvell.com>
 
        dkb             ARM926EJS (PANTHEON 88AP920 SOC)
@@ -906,7 +906,6 @@ Sughosh Ganu <urwithsughosh@gmail.com>
 Unknown / orphaned boards:
        Board           CPU     Last known maintainer / Comment
 .........................................................................
-       cradle          xscale/pxa      Kyle Harris <kharris@nexus-tech.net> / dead address
        lubbock         xscale/pxa      Kyle Harris <kharris@nexus-tech.net> / dead address
 
        imx31_phycore_eet i.MX31  Guennadi Liakhovetski <g.liakhovetski@gmx.de> / resigned
@@ -1056,6 +1055,7 @@ Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
        RSK7203         SH7203
        AP325RXA        SH7723
        SHMIN           SH7706
+       ECOVEC          SH7724
 
 Mark Jonas <mark.jonas@de.bosch.com>
 
@@ -1151,6 +1151,7 @@ Chong Huang <chuang@ucrobotics.com>
 Macpaul Lin <macpaul@andestech.com>
 
        ADP-AG101       N1213 (AG101 SoC)
+       ADP-AG101P      N1213 (AG101P XC5 FPGA)
 
 #########################################################################
 # End of MAINTAINERS list                                              #
diff --git a/MAKEALL b/MAKEALL
index 95b7cd3110fb62c308c98ca547be204d3082fcae..fa0121ced26a4a6a811bbe6e2b3d41ac4152a55a 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -16,6 +16,7 @@ usage()
          -c CPU,    --cpu CPU         Build all boards with cpu CPU
          -v VENDOR, --vendor VENDOR   Build all boards with vendor VENDOR
          -s SOC,    --soc SOC         Build all boards with soc SOC
+         -l,        --list            List all targets to be built
          -h,        --help            This help output
 
        Selections by these options are logically ANDed; if the same option
@@ -47,8 +48,8 @@ usage()
        exit ${ret}
 }
 
-SHORT_OPTS="ha:c:v:s:"
-LONG_OPTS="help,arch:,cpu:,vendor:,soc:"
+SHORT_OPTS="ha:c:v:s:l"
+LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list"
 
 # Option processing based on util-linux-2.13/getopt-parse.bash
 
@@ -65,6 +66,7 @@ TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \
 eval set -- "$TEMP"
 
 SELECTED=''
+ONLY_LIST=''
 
 while true ; do
        case "$1" in
@@ -104,6 +106,9 @@ while true ; do
                fi
                SELECTED='y'
                shift 2 ;;
+       -l|--list)
+               ONLY_LIST='y'
+               shift ;;
        -h|--help)
                usage ;;
        --)
@@ -316,7 +321,6 @@ LIST_ARM11="$(boards_by_cpu arm1136)        \
        imx31_phycore           \
        imx31_phycore_eet       \
        mx31pdk                 \
-       mx31pdk_nand            \
        smdk6400                \
 "
 
@@ -488,6 +492,11 @@ LIST_nds32="$(boards_by_arch nds32)"
 build_target() {
        target=$1
 
+       if [ "$ONLY_LIST" == 'y' ] ; then
+               echo "$target"
+               return
+       fi
+
        ${MAKE} distclean >/dev/null
        ${MAKE} -s ${target}_config
 
@@ -531,6 +540,7 @@ build_targets() {
 #-----------------------------------------------------------------------
 
 print_stats() {
+       if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
        echo ""
        echo "--------------------- SUMMARY ----------------------------"
        echo "Boards compiled: ${TOTAL_CNT}"
index 5017f3b10bf2da1d0df72d390b5985dd6fb0c10e..de65a173c62ad44cec944e671e5fcdf247f9b31c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -277,6 +277,9 @@ LIBS += arch/powerpc/cpu/mpc8xxx/lib8xxx.o
 endif
 LIBS += drivers/rtc/librtc.o
 LIBS += drivers/serial/libserial.o
+ifeq ($(CONFIG_GENERIC_LPC_TPM),y)
+LIBS += drivers/tpm/libtpm.o
+endif
 LIBS += drivers/twserial/libtws.o
 LIBS += drivers/usb/eth/libusb_eth.o
 LIBS += drivers/usb/gadget/libusb_gadget.o
@@ -290,16 +293,9 @@ LIBS += lib/libfdt/libfdt.o
 LIBS += api/libapi.o
 LIBS += post/libpost.o
 
-ifeq ($(SOC),am33xx)
-LIBS += $(CPUDIR)/omap-common/libomap-common.o
-endif
-ifeq ($(SOC),omap3)
-LIBS += $(CPUDIR)/omap-common/libomap-common.o
-endif
-ifeq ($(SOC),omap4)
+ifneq ($(CONFIG_AM335X)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
 LIBS += $(CPUDIR)/omap-common/libomap-common.o
 endif
-
 ifeq ($(SOC),s5pc1xx)
 LIBS += $(CPUDIR)/s5p-common/libs5p-common.o
 endif
@@ -424,6 +420,10 @@ $(obj)u-boot.ubl:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
                rm $(obj)u-boot-ubl.bin
                rm $(obj)spl/u-boot-spl-pad.bin
 
+$(obj)u-boot.sb:       $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
+               elftosb -zdf imx28 -c $(TOPDIR)/board/$(BOARDDIR)/u-boot.bd \
+                       -o $(obj)u-boot.sb
+
 ifeq ($(CONFIG_SANDBOX),y)
 GEN_UBOOT = \
                cd $(LNDIR) && $(CC) $(SYMS) -T $(obj)u-boot.lds \
@@ -486,7 +486,7 @@ mmc_spl:    $(TIMESTAMP_FILE) $(VERSION_FILE) depend
 
 $(obj)mmc_spl/u-boot-mmc-spl.bin:      mmc_spl
 
-$(obj)spl/u-boot-spl.bin:              depend
+$(obj)spl/u-boot-spl.bin:      $(SUBDIR_TOOLS) depend
                $(MAKE) -C spl all
 
 updater:
@@ -754,7 +754,7 @@ clean:
               $(obj)tools/envcrc                                         \
               $(obj)tools/gdb/{astest,gdbcont,gdbsend}                   \
               $(obj)tools/gen_eth_addr    $(obj)tools/img2srec           \
-              $(obj)tools/mkimage         $(obj)tools/mpc86x_clk         \
+              $(obj)tools/mk{env,}image   $(obj)tools/mpc86x_clk         \
               $(obj)tools/ncb             $(obj)tools/ubsha1
        @rm -f $(obj)board/cray/L1/{bootscript.c,bootscript.image}        \
               $(obj)board/matrix_vision/*/bootscript.img                 \
@@ -763,6 +763,7 @@ clean:
               $(obj)arch/blackfin/cpu/bootrom-asm-offsets.[chs]          \
               $(obj)arch/blackfin/cpu/init.{lds,elf}
        @rm -f $(obj)include/bmp_logo.h
+       @rm -f $(obj)include/bmp_logo_data.h
        @rm -f $(obj)lib/asm-offsets.s
        @rm -f $(obj)include/generated/asm-offsets.h
        @rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
@@ -779,11 +780,14 @@ clean:
                -o -name '*.o'  -o -name '*.a' -o -name '*.exe' \) -print \
                | xargs rm -f
 
-clobber:       clean
-       @find $(OBJTREE) -type f \( -name '*.depend*' \
-               -o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \
-               -print0 \
-               | xargs -0 rm -f
+# Removes everything not needed for testing u-boot
+tidy:  clean
+       @find $(OBJTREE) -type f \( -name '*.depend*' \) -print | xargs rm -f
+
+clobber:       tidy
+       @find $(OBJTREE) -type f \( -name '*.srec' \
+               -o -name '*.bin' -o -name u-boot.img \) \
+               -print0 | xargs -0 rm -f
        @rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS \
                $(obj)cscope.* $(obj)*.*~
        @rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL-y)
@@ -791,7 +795,8 @@ clobber:    clean
        @rm -f $(obj)u-boot.imx
        @rm -f $(obj)u-boot.ubl
        @rm -f $(obj)u-boot.dtb
-       @rm -f $(obj)tools/{env/crc32.c,inca-swap-bytes}
+       @rm -f $(obj)u-boot.sb
+       @rm -f $(obj)tools/inca-swap-bytes
        @rm -f $(obj)arch/powerpc/cpu/mpc824x/bedbug_603e.c
        @rm -f $(obj)arch/powerpc/cpu/mpc83xx/ddr-gen?.c
        @rm -fr $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
diff --git a/README b/README
index 73ca042f68c33627a3e109b623401d08ed958e85..3ddec77980a896984fefdde712ba057d658d970a 100644 (file)
--- a/README
+++ b/README
@@ -1027,6 +1027,12 @@ The following options need to be configured:
                        Define this to use i/o functions instead of macros
                        (some hardware wont work with macros)
 
+               CONFIG_DRIVER_TI_EMAC
+               Support for davinci emac
+
+                       CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT
+                       Define this if you have more then 3 PHYs.
+
                CONFIG_FTGMAC100
                Support for Faraday's FTGMAC100 Gigabit SoC Ethernet
 
@@ -1066,6 +1072,16 @@ The following options need to be configured:
                        CONFIG_SH_ETHER_CACHE_WRITEBACK
                        If this option is set, the driver enables cache flush.
 
+- TPM Support:
+               CONFIG_GENERIC_LPC_TPM
+               Support for generic parallel port TPM devices. Only one device
+               per system is supported at this time.
+
+                       CONFIG_TPM_TIS_BASE_ADDRESS
+                       Base address where the generic TPM device is mapped
+                       to. Contemporary x86 systems usually map it at
+                       0xfed40000.
+
 - USB Support:
                At the moment only the UHCI host controller is
                supported (PIP405, MIP405, MPC5200); define
@@ -3268,6 +3284,44 @@ Low Level (hardware related) configuration options:
                be used if available. These functions may be faster under some
                conditions but may increase the binary size.
 
+Freescale QE/FMAN Firmware Support:
+-----------------------------------
+
+The Freescale QUICCEngine (QE) and Frame Manager (FMAN) both support the
+loading of "firmware", which is encoded in the QE firmware binary format.
+This firmware often needs to be loaded during U-Boot booting, so macros
+are used to identify the storage device (NOR flash, SPI, etc) and the address
+within that device.
+
+- CONFIG_SYS_QE_FMAN_FW_ADDR
+       The address in the storage device where the firmware is located.  The
+       meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro
+       is also specified.
+
+- CONFIG_SYS_QE_FMAN_FW_LENGTH
+       The maximum possible size of the firmware.  The firmware binary format
+       has a field that specifies the actual size of the firmware, but it
+       might not be possible to read any part of the firmware unless some
+       local storage is allocated to hold the entire firmware first.
+
+- CONFIG_SYS_QE_FMAN_FW_IN_NOR
+       Specifies that QE/FMAN firmware is located in NOR flash, mapped as
+       normal addressable memory via the LBC.  CONFIG_SYS_FMAN_FW_ADDR is the
+       virtual address in NOR flash.
+
+- CONFIG_SYS_QE_FMAN_FW_IN_NAND
+       Specifies that QE/FMAN firmware is located in NAND flash.
+       CONFIG_SYS_FMAN_FW_ADDR is the offset within NAND flash.
+
+- CONFIG_SYS_QE_FMAN_FW_IN_MMC
+       Specifies that QE/FMAN firmware is located on the primary SD/MMC
+       device.  CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
+
+- CONFIG_SYS_QE_FMAN_FW_IN_SPIFLASH
+       Specifies that QE/FMAN firmware is located on the primary SPI
+       device.  CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
+
+
 Building the Software:
 ======================
 
index 2a64c4ddf6fea109c56f741a7405f5e779afa12e..0e99f741b7890f1e84776b6fca903807cd4251ba 100644 (file)
@@ -24,7 +24,8 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)libapi.o
 
-COBJS-$(CONFIG_API) += api.o api_net.o api_storage.o api_platform-$(ARCH).o
+COBJS-$(CONFIG_API) += api.o api_display.o api_net.o api_storage.o \
+                      api_platform-$(ARCH).o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
index 853f010fee93c6c321cf418f3920b9ec62b0724a..a3bf60ad6280d0b90cdc030f595166d583370752 100644 (file)
--- a/api/api.c
+++ b/api/api.c
@@ -553,6 +553,50 @@ static int API_env_enum(va_list ap)
        return 0;
 }
 
+/*
+ * pseudo signature:
+ *
+ * int API_display_get_info(int type, struct display_info *di)
+ */
+static int API_display_get_info(va_list ap)
+{
+       int type;
+       struct display_info *di;
+
+       type = va_arg(ap, int);
+       di = va_arg(ap, struct display_info *);
+
+       return display_get_info(type, di);
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_display_draw_bitmap(ulong bitmap, int x, int y)
+ */
+static int API_display_draw_bitmap(va_list ap)
+{
+       ulong bitmap;
+       int x, y;
+
+       bitmap = va_arg(ap, ulong);
+       x = va_arg(ap, int);
+       y = va_arg(ap, int);
+
+       return display_draw_bitmap(bitmap, x, y);
+}
+
+/*
+ * pseudo signature:
+ *
+ * void API_display_clear(void)
+ */
+static int API_display_clear(va_list ap)
+{
+       display_clear();
+       return 0;
+}
+
 static cfp_t calls_table[API_MAXCALL] = { NULL, };
 
 /*
@@ -616,6 +660,9 @@ void api_init(void)
        calls_table[API_ENV_GET] = &API_env_get;
        calls_table[API_ENV_SET] = &API_env_set;
        calls_table[API_ENV_ENUM] = &API_env_enum;
+       calls_table[API_DISPLAY_GET_INFO] = &API_display_get_info;
+       calls_table[API_DISPLAY_DRAW_BITMAP] = &API_display_draw_bitmap;
+       calls_table[API_DISPLAY_CLEAR] = &API_display_clear;
        calls_no = API_MAXCALL;
 
        debugf("API initialized with %d calls\n", calls_no);
diff --git a/api/api_display.c b/api/api_display.c
new file mode 100644 (file)
index 0000000..6439170
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <api_public.h>
+#include <lcd.h>
+#include <video_font.h> /* Get font width and height */
+
+/* lcd.h needs BMP_LOGO_HEIGHT to calculate CONSOLE_ROWS */
+#if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO)
+#include <bmp_logo.h>
+#endif
+
+/* TODO(clchiou): add support of video device */
+
+int display_get_info(int type, struct display_info *di)
+{
+       if (!di)
+               return API_EINVAL;
+
+       switch (type) {
+       default:
+               debug("%s: unsupport display device type: %d\n",
+                               __FILE__, type);
+               return API_ENODEV;
+#ifdef CONFIG_LCD
+       case DISPLAY_TYPE_LCD:
+               di->pixel_width  = panel_info.vl_col;
+               di->pixel_height = panel_info.vl_row;
+               di->screen_rows = CONSOLE_ROWS;
+               di->screen_cols = CONSOLE_COLS;
+               break;
+#endif
+       }
+
+       di->type = type;
+       return 0;
+}
+
+int display_draw_bitmap(ulong bitmap, int x, int y)
+{
+       if (!bitmap)
+               return API_EINVAL;
+#ifdef CONFIG_LCD
+       return lcd_display_bitmap(bitmap, x, y);
+#else
+       return API_ENODEV;
+#endif
+}
+
+void display_clear(void)
+{
+#ifdef CONFIG_LCD
+       lcd_clear();
+#endif
+}
index 94a7fc509c720ba184a6a53a678948319368c587..988f702356ea0812aeb1402183cd41df75ccf56a 100644 (file)
@@ -45,4 +45,8 @@ int           dev_write_net(void *, void *, int);
 
 void dev_stor_init(void);
 
+int display_get_info(int type, struct display_info *di);
+int display_draw_bitmap(ulong bitmap, int x, int y);
+void display_clear(void);
+
 #endif /* _API_PRIVATE_H_ */
index b42dac3fbedc35c1767ac9b676efdcaec81a5374..2ebee2e96028f9b760508e6bf9a0ac51843e6273 100644 (file)
@@ -27,7 +27,6 @@
 #include <asm/arch/imx-regs.h>
 #include <asm/arch/clock.h>
 
-#ifdef CONFIG_SYS_MX31_UART1
 void mx31_uart1_hw_init(void)
 {
        /* setup pins for UART1 */
@@ -36,9 +35,7 @@ void mx31_uart1_hw_init(void)
        mx31_gpio_mux(MUX_RTS1__UART1_RTS_B);
        mx31_gpio_mux(MUX_CTS1__UART1_CTS_B);
 }
-#endif
 
-#ifdef CONFIG_SYS_MX31_UART2
 void mx31_uart2_hw_init(void)
 {
        /* setup pins for UART2 */
@@ -47,7 +44,6 @@ void mx31_uart2_hw_init(void)
        mx31_gpio_mux(MUX_RTS2__UART2_RTS_B);
        mx31_gpio_mux(MUX_CTS2__UART2_CTS_B);
 }
-#endif
 
 #ifdef CONFIG_MXC_SPI
 /*
index 4f27e250bd9c78d5e77c69af99db842b99b93843..f45828141e6013ecdcc67de2382ebb54716dcd0d 100644 (file)
@@ -27,8 +27,6 @@
 #include <asm/io.h>
 #include <asm/arch/sys_proto.h>
 
-#define IOMUXGPR       (IOMUXC_BASE + 0x008)
-
 static u32 mx31_decode_pll(u32 reg, u32 infreq)
 {
        u32 mfi = GET_PLL_MFI(reg);
@@ -89,7 +87,7 @@ static u32 mx31_get_hsp_clk(void)
 void mx31_dump_clocks(void)
 {
        u32 cpufreq = mx31_get_mcu_main_clk();
-       printf("mx31 cpu clock: %dMHz\n",cpufreq / 1000000);
+       printf("mx31 cpu clock: %dMHz\n", cpufreq / 1000000);
        printf("ipg clock     : %dHz\n", mx31_get_ipg_clk());
        printf("hsp clock     : %dHz\n", mx31_get_hsp_clk());
 }
@@ -146,14 +144,15 @@ void mx31_set_pad(enum iomux_pins pin, u32 config)
 void mx31_set_gpr(enum iomux_gp_func gp, char en)
 {
        u32 l;
+       struct iomuxc_regs *iomuxc = (struct iomuxc_regs *)IOMUXC_BASE;
 
-       l = readl(IOMUXGPR);
+       l = readl(&iomuxc->gpr);
        if (en)
                l |= gp;
        else
                l &= ~gp;
 
-       writel(l, IOMUXGPR);
+       writel(l, &iomuxc->gpr);
 }
 
 void mxc_setup_weimcs(int cs, const struct mxc_weimcs *weimcs)
@@ -216,7 +215,7 @@ static char *get_reset_cause(void)
 }
 
 #if defined(CONFIG_DISPLAY_CPUINFO)
-int print_cpuinfo (void)
+int print_cpuinfo(void)
 {
        u32 srev = get_cpu_rev();
 
index 443d31d221e95e11762fb250430ecf3ea6afbc68..4bfcef2379b456ac645ce4d659c44b735a914765 100644 (file)
  */
 
 #include <common.h>
+#include <div64.h>
 #include <asm/io.h>
 #include <faraday/ftpmu010.h>
 #include <faraday/fttmr010.h>
 
-static ulong timestamp;
-static ulong lastdec;
-
-static struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+DECLARE_GLOBAL_DATA_PTR;
 
 #define TIMER_CLOCK    32768
 #define TIMER_LOAD_VAL 0xffffffff
 
+static inline unsigned long long tick_to_time(unsigned long long tick)
+{
+       tick *= CONFIG_SYS_HZ;
+       do_div(tick, gd->timer_rate_hz);
+
+       return tick;
+}
+
+static inline unsigned long long usec_to_tick(unsigned long long usec)
+{
+       usec *= gd->timer_rate_hz;
+       do_div(usec, 1000000);
+
+       return usec;
+}
+
 int timer_init(void)
 {
+       struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
        unsigned int cr;
 
        debug("%s()\n", __func__);
@@ -59,106 +74,57 @@ int timer_init(void)
        cr |= FTTMR010_TM3_ENABLE;
        writel(cr, &tmr->cr);
 
-       /* init the timestamp and lastdec value */
-       reset_timer_masked();
+       gd->timer_rate_hz = TIMER_CLOCK;
+       gd->tbu = gd->tbl = 0;
 
        return 0;
 }
 
 /*
- * timer without interrupts
- */
-
-/*
- * reset time
- */
-void reset_timer_masked(void)
-{
-       /* capure current decrementer value time */
-       lastdec = readl(&tmr->timer3_counter) / (TIMER_CLOCK / CONFIG_SYS_HZ);
-       timestamp = 0;          /* start "advancing" time stamp from 0 */
-
-       debug("%s(): lastdec = %lx\n", __func__, lastdec);
-}
-
-/*
- * return timer ticks
- */
-ulong get_timer_masked(void)
-{
-       /* current tick value */
-       ulong now = readl(&tmr->timer3_counter) / (TIMER_CLOCK / CONFIG_SYS_HZ);
-
-       debug("%s(): now = %lx, lastdec = %lx\n", __func__, now, lastdec);
-
-       if (lastdec >= now) {
-               /*
-                * normal mode (non roll)
-                * move stamp fordward with absoulte diff ticks
-                */
-               timestamp += lastdec - now;
-       } 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;
-
-       debug("%s() returns %lx\n", __func__, timestamp);
-
-       return timestamp;
-}
-
-/*
- * return difference between timer ticks and base
+ * Get the current 64 bit timer tick count
  */
-ulong get_timer(ulong base)
+unsigned long long get_ticks(void)
 {
-       debug("%s(%lx)\n", __func__, base);
-       return get_timer_masked() - base;
+       struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+       ulong now = TIMER_LOAD_VAL - readl(&tmr->timer3_counter);
+
+       /* increment tbu if tbl has rolled over */
+       if (now < gd->tbl)
+               gd->tbu++;
+       gd->tbl = now;
+       return (((unsigned long long)gd->tbu) << 32) | gd->tbl;
 }
 
-/* delay x useconds AND preserve advance timestamp value */
 void __udelay(unsigned long usec)
 {
-       long tmo = usec * (TIMER_CLOCK / 1000) / 1000;
-       unsigned long now, last = readl(&tmr->timer3_counter);
-
-       debug("%s(%lu)\n", __func__, usec);
-       while (tmo > 0) {
-               now = readl(&tmr->timer3_counter);
-               if (now > last) /* count down timer overflow */
-                       tmo -= TIMER_LOAD_VAL + last - now;
-               else
-                       tmo -= last - now;
-               last = now;
-       }
+       unsigned long long start;
+       ulong tmo;
+
+       start = get_ticks();            /* get current timestamp */
+       tmo = usec_to_tick(usec);       /* convert usecs to ticks */
+       while ((get_ticks() - start) < tmo)
+               ;                       /* loop till time has passed */
 }
 
 /*
- * This function is derived from PowerPC code (read timebase as long long).
- * On ARM it just returns the timer value.
+ * get_timer(base) can be used to check for timeouts or
+ * to measure elasped time relative to an event:
+ *
+ * ulong start_time = get_timer(0) sets start_time to the current
+ * time value.
+ * get_timer(start_time) returns the time elapsed since then.
+ *
+ * The time is used in CONFIG_SYS_HZ units!
  */
-unsigned long long get_ticks(void)
+ulong get_timer(ulong base)
 {
-       debug("%s()\n", __func__);
-       return get_timer(0);
+       return tick_to_time(get_ticks()) - base;
 }
 
 /*
- * This function is derived from PowerPC code (timebase clock frequency).
- * On ARM it returns the number of timer ticks per second.
+ * Return the number of timer ticks per second.
  */
 ulong get_tbclk(void)
 {
-       debug("%s()\n", __func__);
-       return CONFIG_SYS_HZ;
+       return gd->timer_rate_hz;
 }
index 412f502c36b7fc20d41a3876da3309fe0047c664..4caa1579db76c68c5b5978b3fc63428ecc194e16 100644 (file)
@@ -5,7 +5,7 @@
  * Andreas Bießmann <andreas.devel@googlemail.com>
  *
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 930e0d1bfc5d32fee79f3772508d0f1882433578..5923e6548f5da5a347d026e3ee55adb9054e4291 100644 (file)
@@ -26,7 +26,13 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(CPU).o
 
 START  = start.o
-COBJS  = cpu.o
+COBJS  = cpu.o cache.o
+
+ifdef  CONFIG_SPL_BUILD
+ifdef  CONFIG_SPL_NO_CPU_SUPPORT_CODE
+START  :=
+endif
+endif
 
 SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
index 2d878fdde6d98ed79505837302f047c2807d7111..db2ecb8c8123c69fd531ec20820429e18c5cd7a2 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * (C) Copyright 2009
index 65b8d516fd828ae666e284af9d89635b5db86ac5..a4e9f09f0c6467f6279be3c0003b1204fce03d42 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index edc797214c93fca1a4cda0b9027f244a0b064b84..ae8cd56c5ad89014bb3ac93a0a14b0869ed833ae 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 6eb0f305b7238d534657ce39fa125f4d5b397437..7191db26ade3c50ea016c99419ff9e5a11880242 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * (C) Copyright 2009-2011
index 5ff32e3749e792a328da208ab80c2562856ba0cf..f31c364374654344daca13ea3d71f9cbfa14ba22 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index b0a16874d6ec8373021915458c8ff61bc84fccb6..ca44cf5a3321e79321aca5e3200873c0eac9725c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 6e59c8667589dd4bd8197000ac0493e98c08c5e7..a1bb28d72f48f6edb94f376f709a8d7bac1f5b97 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 023719a683472638f95de264ec868d410e042412..f6a7cb7a86a3a6b602f7852d5f24075da9551422 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index a0876879d3907af553d832bea187a062a22b9bd4..f70ce83f08391e5378e96f5269a52f86ce4e984a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
diff --git a/arch/arm/cpu/arm926ejs/cache.c b/arch/arm/cpu/arm926ejs/cache.c
new file mode 100644 (file)
index 0000000..4415642
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * (C) Copyright 2011
+ * Ilya Yanok, EmCraft Systems
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc.
+ */
+#include <linux/types.h>
+#include <common.h>
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+static inline void dcache_noop(void)
+{
+       if (dcache_status()) {
+               puts("WARNING: cache operations are not implemented!\n"
+                    "WARNING: disabling D-Cache now, you can re-enable it"
+                    "later with 'dcache on' command\n");
+               dcache_disable();
+       }
+}
+
+void invalidate_dcache_all(void)
+{
+       dcache_noop();
+}
+
+void flush_dcache_all(void)
+{
+       dcache_noop();
+}
+
+void invalidate_dcache_range(unsigned long start, unsigned long stop)
+{
+       dcache_noop();
+}
+
+void flush_dcache_range(unsigned long start, unsigned long stop)
+{
+       dcache_noop();
+}
+#else /* #ifndef CONFIG_SYS_DCACHE_OFF */
+void invalidate_dcache_all(void)
+{
+}
+
+void flush_dcache_all(void)
+{
+}
+
+void invalidate_dcache_range(unsigned long start, unsigned long stop)
+{
+}
+
+void flush_dcache_range(unsigned long start, unsigned long stop)
+{
+}
+
+void  flush_cache(unsigned long start, unsigned long size)
+{
+}
+#endif /* #ifndef CONFIG_SYS_DCACHE_OFF */
index 98c7e55c40b788ca84dd9bc2ee04e96798dc536a..5ae89df5dbac2b8611cfd14c7e0e7cb184315d00 100644 (file)
@@ -27,12 +27,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(SOC).o
 
-COBJS-y                                += cpu.o timer.o psc.o
-COBJS-$(CONFIG_AM18018_LOWLEVEL)       += am1808_lowlevel.o
+COBJS-y                                += cpu.o misc.o timer.o psc.o pinmux.o
+COBJS-$(CONFIG_DA850_LOWLEVEL) += da850_lowlevel.o
 COBJS-$(CONFIG_SOC_DM355)      += dm355.o
 COBJS-$(CONFIG_SOC_DM365)      += dm365.o
 COBJS-$(CONFIG_SOC_DM644X)     += dm644x.o
 COBJS-$(CONFIG_SOC_DM646X)     += dm646x.o
+COBJS-$(CONFIG_SOC_DA850)      += da850_pinmux.o
 COBJS-$(CONFIG_DRIVER_TI_EMAC) += lxt972.o dp83848.o et1011c.o ksz8873.o
 
 ifdef CONFIG_SPL_BUILD
diff --git a/arch/arm/cpu/arm926ejs/davinci/am1808_lowlevel.c b/arch/arm/cpu/arm926ejs/davinci/am1808_lowlevel.c
deleted file mode 100644 (file)
index 1ea4a9f..0000000
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * SoC-specific lowlevel code for AM1808 and similar chips
- *
- * Copyright (C) 2011
- * Heiko Schocher, DENX Software Engineering, hs@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-#include <common.h>
-#include <nand.h>
-#include <ns16550.h>
-#include <post.h>
-#include <asm/arch/am1808_lowlevel.h>
-#include <asm/arch/hardware.h>
-#include <asm/arch/ddr2_defs.h>
-#include <asm/arch/emif_defs.h>
-
-void am1808_waitloop(unsigned long loopcnt)
-{
-       unsigned long   i;
-
-       for (i = 0; i < loopcnt; i++)
-               asm("   NOP");
-}
-
-int am1808_pll_init(struct davinci_pllc_regs *reg, unsigned long pllmult)
-{
-       if (reg == davinci_pllc0_regs)
-               /* Unlock PLL registers. */
-               clrbits_le32(&davinci_syscfg_regs->cfgchip0, 0x00000010);
-
-       /*
-        * Set PLLENSRC '0',bit 5, PLL Enable(PLLEN) selection is controlled
-        * through MMR
-        */
-       clrbits_le32(&reg->pllctl, 0x00000020);
-       /* PLLCTL.EXTCLKSRC bit 9 should be left at 0 for Freon */
-       clrbits_le32(&reg->pllctl, 0x00000200);
-
-       /* Set PLLEN=0 => PLL BYPASS MODE */
-       clrbits_le32(&reg->pllctl, 0x00000001);
-
-       am1808_waitloop(150);
-
-       if (reg == davinci_pllc0_regs) {
-               /*
-                * Select the Clock Mode bit 8 as External Clock or On Chip
-                * Oscilator
-                */
-               dv_maskbits(&reg->pllctl, 0xFFFFFEFF);
-               setbits_le32(&reg->pllctl, (CONFIG_SYS_DV_CLKMODE << 8));
-       }
-
-       /* Clear PLLRST bit to reset the PLL */
-       clrbits_le32(&reg->pllctl, 0x00000008);
-
-       /* Disable the PLL output */
-       setbits_le32(&reg->pllctl, 0x00000010);
-
-       /* PLL initialization sequence */
-       /*
-        * Power up the PLL- PWRDN bit set to 0 to bring the PLL out of
-        * power down bit
-        */
-       clrbits_le32(&reg->pllctl, 0x00000002);
-
-       /* Enable the PLL from Disable Mode PLLDIS bit to 0 */
-       clrbits_le32(&reg->pllctl, 0x00000010);
-
-       /* Program the required multiplier value in PLLM */
-       writel(pllmult, &reg->pllm);
-
-       /* program the postdiv */
-       if (reg == davinci_pllc0_regs)
-               writel((0x8000 | CONFIG_SYS_AM1808_PLL0_POSTDIV),
-                       &reg->postdiv);
-       else
-               writel((0x8000 | CONFIG_SYS_AM1808_PLL1_POSTDIV),
-                       &reg->postdiv);
-
-       /*
-        * Check for the GOSTAT bit in PLLSTAT to clear to 0 to indicate that
-        * no GO operation is currently in progress
-        */
-       while ((readl(&reg->pllstat) & 0x1) == 1)
-               ;
-
-       if (reg == davinci_pllc0_regs) {
-               writel(CONFIG_SYS_AM1808_PLL0_PLLDIV1, &reg->plldiv1);
-               writel(CONFIG_SYS_AM1808_PLL0_PLLDIV2, &reg->plldiv2);
-               writel(CONFIG_SYS_AM1808_PLL0_PLLDIV3, &reg->plldiv3);
-               writel(CONFIG_SYS_AM1808_PLL0_PLLDIV4, &reg->plldiv4);
-               writel(CONFIG_SYS_AM1808_PLL0_PLLDIV5, &reg->plldiv5);
-               writel(CONFIG_SYS_AM1808_PLL0_PLLDIV6, &reg->plldiv6);
-               writel(CONFIG_SYS_AM1808_PLL0_PLLDIV7, &reg->plldiv7);
-       } else {
-               writel(CONFIG_SYS_AM1808_PLL1_PLLDIV1, &reg->plldiv1);
-               writel(CONFIG_SYS_AM1808_PLL1_PLLDIV2, &reg->plldiv2);
-               writel(CONFIG_SYS_AM1808_PLL1_PLLDIV3, &reg->plldiv3);
-       }
-
-       /*
-        * Set the GOSET bit in PLLCMD to 1 to initiate a new divider
-        * transition.
-        */
-       setbits_le32(&reg->pllcmd, 0x01);
-
-       /*
-        * Wait for the GOSTAT bit in PLLSTAT to clear to 0
-        * (completion of phase alignment).
-        */
-       while ((readl(&reg->pllstat) & 0x1) == 1)
-               ;
-
-       /* Wait for PLL to reset properly. See PLL spec for PLL reset time */
-       am1808_waitloop(200);
-
-       /* Set the PLLRST bit in PLLCTL to 1 to bring the PLL out of reset */
-       setbits_le32(&reg->pllctl, 0x00000008);
-
-       /* Wait for PLL to lock. See PLL spec for PLL lock time */
-       am1808_waitloop(2400);
-
-       /*
-        * Set the PLLEN bit in PLLCTL to 1 to remove the PLL from bypass
-        * mode
-        */
-       setbits_le32(&reg->pllctl, 0x00000001);
-
-
-       /*
-        * clear EMIFA and EMIFB clock source settings, let them
-        * run off SYSCLK
-        */
-       if (reg == davinci_pllc0_regs)
-               dv_maskbits(&davinci_syscfg_regs->cfgchip3, 0xFFFFFFF8);
-
-       return 0;
-}
-
-void am1808_lpc_transition(unsigned char pscnum, unsigned char module,
-               unsigned char domain, unsigned char state)
-{
-       struct davinci_psc_regs *reg;
-       dv_reg_p mdstat, mdctl;
-
-       if (pscnum == 0) {
-               reg = davinci_psc0_regs;
-               mdstat = &reg->psc0.mdstat[module];
-               mdctl = &reg->psc0.mdctl[module];
-       } else {
-               reg = davinci_psc1_regs;
-               mdstat = &reg->psc1.mdstat[module];
-               mdctl = &reg->psc1.mdctl[module];
-       }
-
-       /* Wait for any outstanding transition to complete */
-       while ((readl(&reg->ptstat) & (0x00000001 << domain)))
-               ;
-
-       /* If we are already in that state, just return */
-       if ((readl(mdstat) & 0x1F) == state)
-               return;
-
-       /* Perform transition */
-       writel((readl(mdctl) & 0xFFFFFFE0) | state, mdctl);
-       setbits_le32(&reg->ptcmd, (0x00000001 << domain));
-
-       /* Wait for transition to complete */
-       while (readl(&reg->ptstat) & (0x00000001 << domain))
-               ;
-
-       /* Wait and verify the state */
-       while ((readl(mdstat) & 0x1F) != state)
-               ;
-}
-
-int am1808_ddr_setup(unsigned int freq)
-{
-       unsigned long   tmp;
-
-       /* Enable the Clock to DDR2/mDDR */
-       am1808_lpc_transition(1, 6, 0, PSC_ENABLE);
-
-       tmp = readl(&davinci_syscfg1_regs->vtpio_ctl);
-       if ((tmp & VTP_POWERDWN) == VTP_POWERDWN) {
-               /* Begin VTP Calibration */
-               clrbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_POWERDWN);
-               clrbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_LOCK);
-               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_CLKRZ);
-               clrbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_CLKRZ);
-               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_CLKRZ);
-
-               /* Polling READY bit to see when VTP calibration is done */
-               tmp = readl(&davinci_syscfg1_regs->vtpio_ctl);
-               while ((tmp & VTP_READY) != VTP_READY)
-                       tmp = readl(&davinci_syscfg1_regs->vtpio_ctl);
-
-               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_LOCK);
-               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_POWERDWN);
-
-               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_IOPWRDWN);
-       }
-
-       writel(CONFIG_SYS_AM1808_DDR2_DDRPHYCR, &dv_ddr2_regs_ctrl->ddrphycr);
-       clrbits_le32(&davinci_syscfg1_regs->ddr_slew,
-               (1 << DDR_SLEW_CMOSEN_BIT));
-
-       setbits_le32(&dv_ddr2_regs_ctrl->sdbcr, DV_DDR_BOOTUNLOCK);
-
-       writel((CONFIG_SYS_AM1808_DDR2_SDBCR & ~0xf0000000) |
-               (readl(&dv_ddr2_regs_ctrl->sdbcr) & 0xf0000000), /*rsv Bytes*/
-               &dv_ddr2_regs_ctrl->sdbcr);
-       writel(CONFIG_SYS_AM1808_DDR2_SDBCR2, &dv_ddr2_regs_ctrl->sdbcr2);
-
-       writel(CONFIG_SYS_AM1808_DDR2_SDTIMR, &dv_ddr2_regs_ctrl->sdtimr);
-       writel(CONFIG_SYS_AM1808_DDR2_SDTIMR2, &dv_ddr2_regs_ctrl->sdtimr2);
-
-       clrbits_le32(&dv_ddr2_regs_ctrl->sdbcr,
-               (1 << DV_DDR_SDCR_TIMUNLOCK_SHIFT));
-
-       /*
-        * LPMODEN and MCLKSTOPEN must be set!
-        * Without this bits set, PSC don;t switch states !!
-        */
-       writel(CONFIG_SYS_AM1808_DDR2_SDRCR |
-               (1 << DV_DDR_SRCR_LPMODEN_SHIFT) |
-               (1 << DV_DDR_SRCR_MCLKSTOPEN_SHIFT),
-               &dv_ddr2_regs_ctrl->sdrcr);
-
-       /* SyncReset the Clock to EMIF3A SDRAM */
-       am1808_lpc_transition(1, 6, 0, PSC_SYNCRESET);
-       /* Enable the Clock to EMIF3A SDRAM */
-       am1808_lpc_transition(1, 6, 0, PSC_ENABLE);
-
-       /* disable self refresh */
-       clrbits_le32(&dv_ddr2_regs_ctrl->sdrcr, 0xc0000000);
-       writel(0x30, &dv_ddr2_regs_ctrl->pbbpr);
-
-       return 0;
-}
-
-static void am1808_set_mdctl(dv_reg_p mdctl)
-{
-       if ((readl(mdctl) & 0x1F) != PSC_ENABLE)
-               writel(((readl(mdctl) & 0xFFFFFFE0) | PSC_ENABLE), mdctl);
-}
-
-void am1808_psc_init(void)
-{
-       struct davinci_psc_regs *reg;
-       int i;
-
-       /* PSC 0 domain 0 init */
-       reg = davinci_psc0_regs;
-       while ((readl(&reg->ptstat) & 0x00000001))
-               ;
-
-       for (i = 3; i <= 4 ; i++)
-               am1808_set_mdctl(&reg->psc0.mdctl[i]);
-
-       for (i = 7; i <= 12 ; i++)
-               am1808_set_mdctl(&reg->psc0.mdctl[i]);
-
-       /* Do Always-On Power Domain Transitions */
-       setbits_le32(&reg->ptcmd, 0x00000001);
-       while (readl(&reg->ptstat) & 0x00000001)
-               ;
-
-       /* PSC1, domain 1 init */
-       reg = davinci_psc1_regs;
-       while ((readl(&reg->ptstat) & 0x00000001))
-               ;
-
-       am1808_set_mdctl(&reg->psc1.mdctl[3]);
-       am1808_set_mdctl(&reg->psc1.mdctl[6]);
-
-       /* UART1 + UART2 */
-       for (i = 12 ; i <= 13 ; i++)
-               am1808_set_mdctl(&reg->psc1.mdctl[i]);
-
-       am1808_set_mdctl(&reg->psc1.mdctl[26]);
-       am1808_set_mdctl(&reg->psc1.mdctl[31]);
-
-       /* Do Always-On Power Domain Transitions */
-       setbits_le32(&reg->ptcmd, 0x00000001);
-       while (readl(&reg->ptstat) & 0x00000001)
-               ;
-}
-
-void am1808_pinmux_ctl(unsigned long offset, unsigned long mask,
-       unsigned long value)
-{
-       clrbits_le32(&davinci_syscfg_regs->pinmux[offset], mask);
-       setbits_le32(&davinci_syscfg_regs->pinmux[offset], (mask & value));
-}
-
-__attribute__((weak))
-void board_gpio_init(void)
-{
-       return;
-}
-
-#if defined(CONFIG_NAND_SPL)
-void nand_boot(void)
-{
-       __attribute__((noreturn)) void (*uboot)(void);
-
-       /* copy image from NOR to RAM */
-       memcpy((void *)CONFIG_SYS_NAND_U_BOOT_DST,
-               (void *)CONFIG_SYS_NAND_U_BOOT_OFFS,
-               CONFIG_SYS_NAND_U_BOOT_SIZE);
-
-       /* and jump to it ... */
-       uboot = (void *)CONFIG_SYS_NAND_U_BOOT_START;
-       (*uboot)();
-}
-#endif
-
-#if defined(CONFIG_NAND_SPL)
-void board_init_f(ulong bootflag)
-#else
-int arch_cpu_init(void)
-#endif
-{
-       /*
-        * copied from arch/arm/cpu/arm926ejs/start.S
-        *
-        * flush v4 I/D caches
-        */
-       asm("mov        r0, #0");
-       asm("mcr        p15, 0, r0, c7, c7, 0");        /* flush v3/v4 cache */
-       asm("mcr        p15, 0, r0, c8, c7, 0");        /* flush v4 TLB */
-
-       /*
-        * disable MMU stuff and caches
-        */
-       asm("mrc        p15, 0, r0, c1, c0, 0");
-       /* clear bits 13, 9:8 (--V- --RS) */
-       asm("bic        r0, r0, #0x00002300");
-       /* clear bits 7, 2:0 (B--- -CAM) */
-       asm("bic        r0, r0, #0x00000087");
-       /* set bit 2 (A) Align */
-       asm("orr        r0, r0, #0x00000002");
-       /* set bit 12 (I) I-Cache */
-       asm("orr        r0, r0, #0x00001000");
-       asm("mcr        p15, 0, r0, c1, c0, 0");
-
-       /* Unlock kick registers */
-       writel(0x83e70b13, &davinci_syscfg_regs->kick0);
-       writel(0x95a4f1e0, &davinci_syscfg_regs->kick1);
-
-       dv_maskbits(&davinci_syscfg_regs->suspsrc,
-               ((1 << 27) | (1 << 22) | (1 << 20) | (1 << 5) | (1 << 16)));
-
-       /* System PSC setup - enable all */
-       am1808_psc_init();
-
-       /* Setup Pinmux */
-       am1808_pinmux_ctl(0, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX0);
-       am1808_pinmux_ctl(1, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX1);
-       am1808_pinmux_ctl(2, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX2);
-       am1808_pinmux_ctl(3, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX3);
-       am1808_pinmux_ctl(4, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX4);
-       am1808_pinmux_ctl(5, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX5);
-       am1808_pinmux_ctl(6, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX6);
-       am1808_pinmux_ctl(7, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX7);
-       am1808_pinmux_ctl(8, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX8);
-       am1808_pinmux_ctl(9, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX9);
-       am1808_pinmux_ctl(10, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX10);
-       am1808_pinmux_ctl(11, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX11);
-       am1808_pinmux_ctl(12, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX12);
-       am1808_pinmux_ctl(13, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX13);
-       am1808_pinmux_ctl(14, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX14);
-       am1808_pinmux_ctl(15, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX15);
-       am1808_pinmux_ctl(16, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX16);
-       am1808_pinmux_ctl(17, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX17);
-       am1808_pinmux_ctl(18, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX18);
-       am1808_pinmux_ctl(19, 0xFFFFFFFF, CONFIG_SYS_AM1808_PINMUX19);
-
-       /* PLL setup */
-       am1808_pll_init(davinci_pllc0_regs, CONFIG_SYS_AM1808_PLL0_PLLM);
-       am1808_pll_init(davinci_pllc1_regs, CONFIG_SYS_AM1808_PLL1_PLLM);
-
-       /* GPIO setup */
-       board_gpio_init();
-
-       /* setup CSn config */
-       writel(CONFIG_SYS_AM1808_CS2CFG, &davinci_emif_regs->ab1cr);
-       writel(CONFIG_SYS_AM1808_CS3CFG, &davinci_emif_regs->ab2cr);
-
-       am1808_lpc_transition(1, 13, 0, PSC_ENABLE);
-       NS16550_init((NS16550_t)(CONFIG_SYS_NS16550_COM1),
-                       CONFIG_SYS_NS16550_CLK / 16 / CONFIG_BAUDRATE);
-
-       /*
-        * Fix Power and Emulation Management Register
-        * see sprufw3a.pdf page 37 Table 24
-        */
-       writel(readl((CONFIG_SYS_NS16550_COM1 + 0x30)) | 0x00006001,
-               (CONFIG_SYS_NS16550_COM1 + 0x30));
-#if defined(CONFIG_NAND_SPL)
-       puts("ddr init\n");
-       am1808_ddr_setup(132);
-
-       puts("boot u-boot ...\n");
-
-       nand_boot();
-#else
-       am1808_ddr_setup(132);
-       return 0;
-#endif
-}
diff --git a/arch/arm/cpu/arm926ejs/davinci/da850_lowlevel.c b/arch/arm/cpu/arm926ejs/davinci/da850_lowlevel.c
new file mode 100644 (file)
index 0000000..a532f8a
--- /dev/null
@@ -0,0 +1,291 @@
+/*
+ * SoC-specific lowlevel code for DA850
+ *
+ * Copyright (C) 2011
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#include <common.h>
+#include <nand.h>
+#include <ns16550.h>
+#include <post.h>
+#include <asm/arch/da850_lowlevel.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/davinci_misc.h>
+#include <asm/arch/ddr2_defs.h>
+#include <asm/arch/emif_defs.h>
+#include <asm/arch/pll_defs.h>
+
+void da850_waitloop(unsigned long loopcnt)
+{
+       unsigned long   i;
+
+       for (i = 0; i < loopcnt; i++)
+               asm("   NOP");
+}
+
+int da850_pll_init(struct davinci_pllc_regs *reg, unsigned long pllmult)
+{
+       if (reg == davinci_pllc0_regs)
+               /* Unlock PLL registers. */
+               clrbits_le32(&davinci_syscfg_regs->cfgchip0, PLL_MASTER_LOCK);
+
+       /*
+        * Set PLLENSRC '0',bit 5, PLL Enable(PLLEN) selection is controlled
+        * through MMR
+        */
+       clrbits_le32(&reg->pllctl, PLLCTL_PLLENSRC);
+       /* PLLCTL.EXTCLKSRC bit 9 should be left at 0 for Freon */
+       clrbits_le32(&reg->pllctl, PLLCTL_EXTCLKSRC);
+
+       /* Set PLLEN=0 => PLL BYPASS MODE */
+       clrbits_le32(&reg->pllctl, PLLCTL_PLLEN);
+
+       da850_waitloop(150);
+
+       if (reg == davinci_pllc0_regs) {
+               /*
+                * Select the Clock Mode bit 8 as External Clock or On Chip
+                * Oscilator
+                */
+               dv_maskbits(&reg->pllctl, ~PLLCTL_RES_9);
+               setbits_le32(&reg->pllctl,
+                       (CONFIG_SYS_DV_CLKMODE << PLLCTL_CLOCK_MODE_SHIFT));
+       }
+
+       /* Clear PLLRST bit to reset the PLL */
+       clrbits_le32(&reg->pllctl, PLLCTL_PLLRST);
+
+       /* Disable the PLL output */
+       setbits_le32(&reg->pllctl, PLLCTL_PLLDIS);
+
+       /* PLL initialization sequence */
+       /*
+        * Power up the PLL- PWRDN bit set to 0 to bring the PLL out of
+        * power down bit
+        */
+       clrbits_le32(&reg->pllctl, PLLCTL_PLLPWRDN);
+
+       /* Enable the PLL from Disable Mode PLLDIS bit to 0 */
+       clrbits_le32(&reg->pllctl, PLLCTL_PLLDIS);
+
+       /* Program the required multiplier value in PLLM */
+       writel(pllmult, &reg->pllm);
+
+       /* program the postdiv */
+       if (reg == davinci_pllc0_regs)
+               writel((PLL_POSTDEN | CONFIG_SYS_DA850_PLL0_POSTDIV),
+                       &reg->postdiv);
+       else
+               writel((PLL_POSTDEN | CONFIG_SYS_DA850_PLL1_POSTDIV),
+                       &reg->postdiv);
+
+       /*
+        * Check for the GOSTAT bit in PLLSTAT to clear to 0 to indicate that
+        * no GO operation is currently in progress
+        */
+       while ((readl(&reg->pllstat) & PLLCMD_GOSTAT) == PLLCMD_GOSTAT)
+               ;
+
+       if (reg == davinci_pllc0_regs) {
+               writel(CONFIG_SYS_DA850_PLL0_PLLDIV1, &reg->plldiv1);
+               writel(CONFIG_SYS_DA850_PLL0_PLLDIV2, &reg->plldiv2);
+               writel(CONFIG_SYS_DA850_PLL0_PLLDIV3, &reg->plldiv3);
+               writel(CONFIG_SYS_DA850_PLL0_PLLDIV4, &reg->plldiv4);
+               writel(CONFIG_SYS_DA850_PLL0_PLLDIV5, &reg->plldiv5);
+               writel(CONFIG_SYS_DA850_PLL0_PLLDIV6, &reg->plldiv6);
+               writel(CONFIG_SYS_DA850_PLL0_PLLDIV7, &reg->plldiv7);
+       } else {
+               writel(CONFIG_SYS_DA850_PLL1_PLLDIV1, &reg->plldiv1);
+               writel(CONFIG_SYS_DA850_PLL1_PLLDIV2, &reg->plldiv2);
+               writel(CONFIG_SYS_DA850_PLL1_PLLDIV3, &reg->plldiv3);
+       }
+
+       /*
+        * Set the GOSET bit in PLLCMD to 1 to initiate a new divider
+        * transition.
+        */
+       setbits_le32(&reg->pllcmd, PLLCMD_GOSTAT);
+
+       /*
+        * Wait for the GOSTAT bit in PLLSTAT to clear to 0
+        * (completion of phase alignment).
+        */
+       while ((readl(&reg->pllstat) & PLLCMD_GOSTAT) == PLLCMD_GOSTAT)
+               ;
+
+       /* Wait for PLL to reset properly. See PLL spec for PLL reset time */
+       da850_waitloop(200);
+
+       /* Set the PLLRST bit in PLLCTL to 1 to bring the PLL out of reset */
+       setbits_le32(&reg->pllctl, PLLCTL_PLLRST);
+
+       /* Wait for PLL to lock. See PLL spec for PLL lock time */
+       da850_waitloop(2400);
+
+       /*
+        * Set the PLLEN bit in PLLCTL to 1 to remove the PLL from bypass
+        * mode
+        */
+       setbits_le32(&reg->pllctl, PLLCTL_PLLEN);
+
+
+       /*
+        * clear EMIFA and EMIFB clock source settings, let them
+        * run off SYSCLK
+        */
+       if (reg == davinci_pllc0_regs)
+               dv_maskbits(&davinci_syscfg_regs->cfgchip3,
+                       ~(PLL_SCSCFG3_DIV45PENA | PLL_SCSCFG3_EMA_CLKSRC));
+
+       return 0;
+}
+
+int da850_ddr_setup(void)
+{
+       unsigned long   tmp;
+
+       /* Enable the Clock to DDR2/mDDR */
+       lpsc_on(DAVINCI_LPSC_DDR_EMIF);
+
+       tmp = readl(&davinci_syscfg1_regs->vtpio_ctl);
+       if ((tmp & VTP_POWERDWN) == VTP_POWERDWN) {
+               /* Begin VTP Calibration */
+               clrbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_POWERDWN);
+               clrbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_LOCK);
+               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_CLKRZ);
+               clrbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_CLKRZ);
+               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_CLKRZ);
+
+               /* Polling READY bit to see when VTP calibration is done */
+               tmp = readl(&davinci_syscfg1_regs->vtpio_ctl);
+               while ((tmp & VTP_READY) != VTP_READY)
+                       tmp = readl(&davinci_syscfg1_regs->vtpio_ctl);
+
+               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_LOCK);
+               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_POWERDWN);
+
+               setbits_le32(&davinci_syscfg1_regs->vtpio_ctl, VTP_IOPWRDWN);
+       }
+
+       writel(CONFIG_SYS_DA850_DDR2_DDRPHYCR, &dv_ddr2_regs_ctrl->ddrphycr);
+       clrbits_le32(&davinci_syscfg1_regs->ddr_slew,
+               (1 << DDR_SLEW_CMOSEN_BIT));
+
+       /*
+        * SDRAM Configuration Register (SDCR):
+        * First set the BOOTUNLOCK bit to make configuration bits
+        * writeable.
+        */
+       setbits_le32(&dv_ddr2_regs_ctrl->sdbcr, DV_DDR_BOOTUNLOCK);
+
+       /*
+        * Write the new value of these bits and clear BOOTUNLOCK.
+        * At the same time, set the TIMUNLOCK bit to allow changing
+        * the timing registers
+        */
+       tmp = CONFIG_SYS_DA850_DDR2_SDBCR;
+       tmp &= ~DV_DDR_BOOTUNLOCK;
+       tmp |= DV_DDR_TIMUNLOCK;
+       writel(tmp, &dv_ddr2_regs_ctrl->sdbcr);
+
+       /* write memory configuration and timing */
+       writel(CONFIG_SYS_DA850_DDR2_SDBCR2, &dv_ddr2_regs_ctrl->sdbcr2);
+       writel(CONFIG_SYS_DA850_DDR2_SDTIMR, &dv_ddr2_regs_ctrl->sdtimr);
+       writel(CONFIG_SYS_DA850_DDR2_SDTIMR2, &dv_ddr2_regs_ctrl->sdtimr2);
+
+       /* clear the TIMUNLOCK bit and write the value of the CL field */
+       tmp &= ~DV_DDR_TIMUNLOCK;
+       writel(tmp, &dv_ddr2_regs_ctrl->sdbcr);
+
+       /*
+        * LPMODEN and MCLKSTOPEN must be set!
+        * Without this bits set, PSC don;t switch states !!
+        */
+       writel(CONFIG_SYS_DA850_DDR2_SDRCR |
+               (1 << DV_DDR_SRCR_LPMODEN_SHIFT) |
+               (1 << DV_DDR_SRCR_MCLKSTOPEN_SHIFT),
+               &dv_ddr2_regs_ctrl->sdrcr);
+
+       /* SyncReset the Clock to EMIF3A SDRAM */
+       lpsc_syncreset(DAVINCI_LPSC_DDR_EMIF);
+       /* Enable the Clock to EMIF3A SDRAM */
+       lpsc_on(DAVINCI_LPSC_DDR_EMIF);
+
+       /* disable self refresh */
+       clrbits_le32(&dv_ddr2_regs_ctrl->sdrcr,
+               DV_DDR_SDRCR_LPMODEN | DV_DDR_SDRCR_LPMODEN);
+       writel(CONFIG_SYS_DA850_DDR2_PBBPR, &dv_ddr2_regs_ctrl->pbbpr);
+
+       return 0;
+}
+
+__attribute__((weak))
+void board_gpio_init(void)
+{
+       return;
+}
+
+/* pinmux_resource[] vector is defined in the board specific file */
+extern const struct pinmux_resource pinmuxes[];
+extern const int pinmuxes_size;
+
+int arch_cpu_init(void)
+{
+       /* Unlock kick registers */
+       writel(DV_SYSCFG_KICK0_UNLOCK, &davinci_syscfg_regs->kick0);
+       writel(DV_SYSCFG_KICK1_UNLOCK, &davinci_syscfg_regs->kick1);
+
+       dv_maskbits(&davinci_syscfg_regs->suspsrc,
+               CONFIG_SYS_DA850_SYSCFG_SUSPSRC);
+
+       /* configure pinmux settings */
+       if (davinci_configure_pin_mux_items(pinmuxes, pinmuxes_size))
+               return 1;
+
+       /* PLL setup */
+       da850_pll_init(davinci_pllc0_regs, CONFIG_SYS_DA850_PLL0_PLLM);
+       da850_pll_init(davinci_pllc1_regs, CONFIG_SYS_DA850_PLL1_PLLM);
+
+       /* GPIO setup */
+       board_gpio_init();
+
+       /* setup CSn config */
+#if defined(CONFIG_SYS_DA850_CS2CFG)
+       writel(CONFIG_SYS_DA850_CS2CFG, &davinci_emif_regs->ab1cr);
+#endif
+#if defined(CONFIG_SYS_DA850_CS3CFG)
+       writel(CONFIG_SYS_DA850_CS3CFG, &davinci_emif_regs->ab2cr);
+#endif
+
+       lpsc_on(CONFIG_SYS_DA850_LPSC_UART);
+       NS16550_init((NS16550_t)(CONFIG_SYS_NS16550_COM1),
+                       CONFIG_SYS_NS16550_CLK / 16 / CONFIG_BAUDRATE);
+
+       /*
+        * Fix Power and Emulation Management Register
+        * see sprufw3a.pdf page 37 Table 24
+        */
+       writel((DAVINCI_UART_PWREMU_MGMT_FREE | DAVINCI_UART_PWREMU_MGMT_URRST |
+               DAVINCI_UART_PWREMU_MGMT_UTRST),
+              &davinci_uart2_ctrl_regs->pwremu_mgmt);
+
+       da850_ddr_setup();
+       return 0;
+}
diff --git a/arch/arm/cpu/arm926ejs/davinci/da850_pinmux.c b/arch/arm/cpu/arm926ejs/davinci/da850_pinmux.c
new file mode 100644 (file)
index 0000000..fa07fb5
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * Pinmux configurations for the DA850 SoCs
+ *
+ * Copyright (C) 2011 OMICRON electronics GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <common.h>
+#include <asm/arch/davinci_misc.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/pinmux_defs.h>
+
+/* SPI pin muxer settings */
+const struct pinmux_config spi1_pins_base[] = {
+       { pinmux(5), 1, 2 }, /* SPI1_CLK */
+       { pinmux(5), 1, 4 }, /* SPI1_SOMI */
+       { pinmux(5), 1, 5 }, /* SPI1_SIMO */
+};
+
+const struct pinmux_config spi1_pins_scs0[] = {
+       { pinmux(5), 1, 1 }, /* SPI1_SCS[0] */
+};
+
+/* UART pin muxer settings */
+const struct pinmux_config uart1_pins_txrx[] = {
+       { pinmux(4), 2, 6 }, /* UART1_RXD */
+       { pinmux(4), 2, 7 }, /* UART1_TXD */
+};
+
+const struct pinmux_config uart2_pins_txrx[] = {
+       { pinmux(4), 2, 4 }, /* UART2_RXD */
+       { pinmux(4), 2, 5 }, /* UART2_TXD */
+};
+
+const struct pinmux_config uart2_pins_rtscts[] = {
+       { pinmux(0), 4, 6 }, /* UART2_RTS */
+       { pinmux(0), 4, 7 }, /* UART2_CTS */
+};
+
+/* EMAC pin muxer settings*/
+const struct pinmux_config emac_pins_rmii[] = {
+       { pinmux(14), 8, 2 }, /* RMII_TXD[1] */
+       { pinmux(14), 8, 3 }, /* RMII_TXD[0] */
+       { pinmux(14), 8, 4 }, /* RMII_TXEN */
+       { pinmux(14), 8, 5 }, /* RMII_RXD[1] */
+       { pinmux(14), 8, 6 }, /* RMII_RXD[0] */
+       { pinmux(14), 8, 7 }, /* RMII_RXER */
+       { pinmux(15), 8, 1 }, /* RMII_CRS_DV */
+};
+
+const struct pinmux_config emac_pins_mii[] = {
+       { pinmux(2), 8, 1 }, /* MII_TXEN */
+       { pinmux(2), 8, 2 }, /* MII_TXCLK */
+       { pinmux(2), 8, 3 }, /* MII_COL */
+       { pinmux(2), 8, 4 }, /* MII_TXD[3] */
+       { pinmux(2), 8, 5 }, /* MII_TXD[2] */
+       { pinmux(2), 8, 6 }, /* MII_TXD[1] */
+       { pinmux(2), 8, 7 }, /* MII_TXD[0] */
+       { pinmux(3), 8, 0 }, /* MII_RXCLK */
+       { pinmux(3), 8, 1 }, /* MII_RXDV */
+       { pinmux(3), 8, 2 }, /* MII_RXER */
+       { pinmux(3), 8, 3 }, /* MII_CRS */
+       { pinmux(3), 8, 4 }, /* MII_RXD[3] */
+       { pinmux(3), 8, 5 }, /* MII_RXD[2] */
+       { pinmux(3), 8, 6 }, /* MII_RXD[1] */
+       { pinmux(3), 8, 7 }, /* MII_RXD[0] */
+};
+
+const struct pinmux_config emac_pins_mdio[] = {
+       { pinmux(4), 8, 0 }, /* MDIO_CLK */
+       { pinmux(4), 8, 1 }, /* MDIO_D */
+};
+
+/* I2C pin muxer settings */
+const struct pinmux_config i2c0_pins[] = {
+       { pinmux(4), 2, 2 }, /* I2C0_SCL */
+       { pinmux(4), 2, 3 }, /* I2C0_SDA */
+};
+
+const struct pinmux_config i2c1_pins[] = {
+       { pinmux(4), 4, 4 }, /* I2C1_SCL */
+       { pinmux(4), 4, 5 }, /* I2C1_SDA */
+};
+
+/* EMIFA pin muxer settings */
+const struct pinmux_config emifa_pins_cs2[] = {
+       { pinmux(7), 1, 0 }, /* EMA_CS2 */
+};
+
+const struct pinmux_config emifa_pins_cs3[] = {
+       { pinmux(7), 1, 1 }, /* EMA_CS[3] */
+};
+
+const struct pinmux_config emifa_pins_cs4[] = {
+       { pinmux(7), 1, 2 }, /* EMA_CS[4] */
+};
+
+const struct pinmux_config emifa_pins_nand[] = {
+       { pinmux(7), 1, 4 },  /* EMA_WE */
+       { pinmux(7), 1, 5 },  /* EMA_OE */
+       { pinmux(9), 1, 0 },  /* EMA_D[7] */
+       { pinmux(9), 1, 1 },  /* EMA_D[6] */
+       { pinmux(9), 1, 2 },  /* EMA_D[5] */
+       { pinmux(9), 1, 3 },  /* EMA_D[4] */
+       { pinmux(9), 1, 4 },  /* EMA_D[3] */
+       { pinmux(9), 1, 5 },  /* EMA_D[2] */
+       { pinmux(9), 1, 6 },  /* EMA_D[1] */
+       { pinmux(9), 1, 7 },  /* EMA_D[0] */
+       { pinmux(12), 1, 5 }, /* EMA_A[2] */
+       { pinmux(12), 1, 6 }, /* EMA_A[1] */
+};
+
+/* NOR pin muxer settings */
+const struct pinmux_config emifa_pins_nor[] = {
+       { pinmux(5), 1, 6 },  /* EMA_BA[1] */
+       { pinmux(6), 1, 6 },  /* EMA_WAIT[1] */
+       { pinmux(7), 1, 4 },  /* EMA_WE */
+       { pinmux(7), 1, 5 },  /* EMA_OE */
+       { pinmux(8), 1, 0 },  /* EMA_D[15] */
+       { pinmux(8), 1, 1 },  /* EMA_D[14] */
+       { pinmux(8), 1, 2 },  /* EMA_D[13] */
+       { pinmux(8), 1, 3 },  /* EMA_D[12] */
+       { pinmux(8), 1, 4 },  /* EMA_D[11] */
+       { pinmux(8), 1, 5 },  /* EMA_D[10] */
+       { pinmux(8), 1, 6 },  /* EMA_D[9] */
+       { pinmux(8), 1, 7 },  /* EMA_D[8] */
+       { pinmux(9), 1, 0 },  /* EMA_D[7] */
+       { pinmux(9), 1, 1 },  /* EMA_D[6] */
+       { pinmux(9), 1, 2 },  /* EMA_D[5] */
+       { pinmux(9), 1, 3 },  /* EMA_D[4] */
+       { pinmux(9), 1, 4 },  /* EMA_D[3] */
+       { pinmux(9), 1, 5 },  /* EMA_D[2] */
+       { pinmux(9), 1, 6 },  /* EMA_D[1] */
+       { pinmux(9), 1, 7 },  /* EMA_D[0] */
+       { pinmux(10), 1, 1 }, /* EMA_A[22] */
+       { pinmux(10), 1, 2 }, /* EMA_A[21] */
+       { pinmux(10), 1, 3 }, /* EMA_A[20] */
+       { pinmux(10), 1, 4 }, /* EMA_A[19] */
+       { pinmux(10), 1, 5 }, /* EMA_A[18] */
+       { pinmux(10), 1, 6 }, /* EMA_A[17] */
+       { pinmux(10), 1, 7 }, /* EMA_A[16] */
+       { pinmux(11), 1, 0 }, /* EMA_A[15] */
+       { pinmux(11), 1, 1 }, /* EMA_A[14] */
+       { pinmux(11), 1, 2 }, /* EMA_A[13] */
+       { pinmux(11), 1, 3 }, /* EMA_A[12] */
+       { pinmux(11), 1, 4 }, /* EMA_A[11] */
+       { pinmux(11), 1, 5 }, /* EMA_A[10] */
+       { pinmux(11), 1, 6 }, /* EMA_A[9] */
+       { pinmux(11), 1, 7 }, /* EMA_A[8] */
+       { pinmux(12), 1, 0 }, /* EMA_A[7] */
+       { pinmux(12), 1, 1 }, /* EMA_A[6] */
+       { pinmux(12), 1, 2 }, /* EMA_A[5] */
+       { pinmux(12), 1, 3 }, /* EMA_A[4] */
+       { pinmux(12), 1, 4 }, /* EMA_A[3] */
+       { pinmux(12), 1, 5 }, /* EMA_A[2] */
+       { pinmux(12), 1, 6 }, /* EMA_A[1] */
+       { pinmux(12), 1, 7 }, /* EMA_A[0] */
+};
index 3772e64cc4f23fa44ec993960f947c6bff15584f..6e998ded99e7cf7609d2a841f178b81d4cf723a4 100644 (file)
@@ -45,7 +45,8 @@ int dm365_pll1_init(unsigned long pllmult, unsigned long prediv)
        clrbits_le32(&dv_pll0_regs->pllctl, PLLCTL_PLLPWRDN);
 
        clrbits_le32(&dv_pll0_regs->pllctl, PLLCTL_RES_9);
-       setbits_le32(&dv_pll0_regs->pllctl, clksrc << 8);
+       setbits_le32(&dv_pll0_regs->pllctl,
+               clksrc << PLLCTL_CLOCK_MODE_SHIFT);
 
        /*
         * Set PLLENSRC '0', PLL Enable(PLLEN) selection is controlled
@@ -82,7 +83,7 @@ int dm365_pll1_init(unsigned long pllmult, unsigned long prediv)
        writel(PLLSECCTL_STOPMODE | PLLSECCTL_TINITZ, &dv_pll0_regs->secctl);
 
        /* Program the PostDiv for PLL1 */
-       writel(0x8000, &dv_pll0_regs->postdiv);
+       writel(PLL_POSTDEN, &dv_pll0_regs->postdiv);
 
        /* Post divider setting for PLL1 */
        writel(CONFIG_SYS_DM36x_PLL1_PLLDIV1, &dv_pll0_regs->plldiv1);
@@ -126,7 +127,8 @@ int dm365_pll2_init(unsigned long pllm, unsigned long prediv)
         * VDB has input on MXI pin
         */
        clrbits_le32(&dv_pll1_regs->pllctl, PLLCTL_RES_9);
-       setbits_le32(&dv_pll1_regs->pllctl, clksrc << 8);
+       setbits_le32(&dv_pll1_regs->pllctl,
+               clksrc << PLLCTL_CLOCK_MODE_SHIFT);
 
        /*
         * Set PLLENSRC '0', PLL Enable(PLLEN) selection is controlled
@@ -151,7 +153,7 @@ int dm365_pll2_init(unsigned long pllm, unsigned long prediv)
        writel(pllm, &dv_pll1_regs->pllm);
        writel(prediv, &dv_pll1_regs->prediv);
 
-       writel(0x8000, &dv_pll1_regs->postdiv);
+       writel(PLL_POSTDEN, &dv_pll1_regs->postdiv);
 
        /* Assert TENABLE = 1, TENABLEDIV = 1, TINITZ = 1 */
        writel(PLLSECCTL_STOPMODE | PLLSECCTL_TENABLEDIV | PLLSECCTL_TENABLE |
@@ -261,21 +263,23 @@ void dm365_vpss_sync_reset(void)
                VPSS_CLK_CTL_VPSS_CLKMD);
 
        /* LPSC SyncReset DDR Clock Enable */
-       writel(((readl(&dv_psc_regs->mdctl[47]) & ~PSC_MD_STATE_MSK) |
-               PSC_SYNCRESET), &dv_psc_regs->mdctl[47]);
+       writel(((readl(&dv_psc_regs->mdctl[DAVINCI_LPSC_VPSSMASTER]) &
+               ~PSC_MD_STATE_MSK) | PSC_SYNCRESET),
+               &dv_psc_regs->mdctl[DAVINCI_LPSC_VPSSMASTER]);
 
        writel((1 << PdNum), &dv_psc_regs->ptcmd);
 
        while (!(((readl(&dv_psc_regs->ptstat) >> PdNum) & PSC_GOSTAT) == 0))
                ;
-       while (!((readl(&dv_psc_regs->mdstat[47]) &  PSC_MD_STATE_MSK) ==
-               PSC_SYNCRESET))
+       while (!((readl(&dv_psc_regs->mdstat[DAVINCI_LPSC_VPSSMASTER]) &
+               PSC_MD_STATE_MSK) == PSC_SYNCRESET))
                ;
 }
 
 void dm365_por_reset(void)
 {
-       if (readl(&dv_pll0_regs->rstype) & 3)
+       if (readl(&dv_pll0_regs->rstype) &
+               (PLL_RSTYPE_POR | PLL_RSTYPE_XWRST))
                dm365_vpss_sync_reset();
 }
 
@@ -291,19 +295,20 @@ void dm365_psc_init(void)
 
        for (lpscgroup = lpscmin; lpscgroup <= lpscmax; lpscgroup++) {
                if (lpscgroup == 0) {
-                       lpsc_start = 0; /* Enabling LPSC 3 to 28 SCR first */
-                       lpsc_end   = 28;
+                       /* Enabling LPSC 3 to 28 SCR first */
+                       lpsc_start = DAVINCI_LPSC_VPSSMSTR;
+                       lpsc_end   = DAVINCI_LPSC_TIMER1;
                } else if (lpscgroup == 1) { /* Skip locked LPSCs [29-37] */
-                       lpsc_start = 38;
-                       lpsc_end   = 47;
+                       lpsc_start = DAVINCI_LPSC_CFG5;
+                       lpsc_end   = DAVINCI_LPSC_VPSSMASTER;
                } else {
-                       lpsc_start = 50;
-                       lpsc_end   = 51;
+                       lpsc_start = DAVINCI_LPSC_MJCP;
+                       lpsc_end   = DAVINCI_LPSC_HDVICP;
                }
 
                /* NEXT=0x3, Enable LPSC's */
                for (i = lpsc_start; i <= lpsc_end; i++)
-                       setbits_le32(&dv_psc_regs->mdctl[i], 0x3);
+                       setbits_le32(&dv_psc_regs->mdctl[i], PSC_ENABLE);
 
                /*
                 * Program goctl to start transition sequence for LPSCs
@@ -322,7 +327,7 @@ void dm365_psc_init(void)
                /* Wait for MODSTAT = ENABLE from LPSC's */
                for (i = lpsc_start; i <= lpsc_end; i++)
                        while (!((readl(&dv_psc_regs->mdstat[i]) &
-                               PSC_MD_STATE_MSK) == 0x3))
+                               PSC_MD_STATE_MSK) == PSC_ENABLE))
                                ;
        }
 }
@@ -332,7 +337,7 @@ static void dm365_emif_init(void)
        writel(CONFIG_SYS_DM36x_AWCCR, &davinci_emif_regs->awccr);
        writel(CONFIG_SYS_DM36x_AB1CR, &davinci_emif_regs->ab1cr);
 
-       setbits_le32(&davinci_emif_regs->nandfcr, 1);
+       setbits_le32(&davinci_emif_regs->nandfcr, DAVINCI_NANDFCR_CS2NAND);
 
        writel(CONFIG_SYS_DM36x_AB2CR, &davinci_emif_regs->ab2cr);
 
@@ -361,31 +366,12 @@ int post_log(char *format, ...)
 
 void dm36x_lowlevel_init(ulong bootflag)
 {
-       /*
-        * copied from arch/arm/cpu/arm926ejs/start.S
-        *
-        * flush v4 I/D caches
-        */
-       asm("mov        r0, #0");
-       asm("mcr        p15, 0, r0, c7, c7, 0");        /* flush v3/v4 cache */
-       asm("mcr        p15, 0, r0, c8, c7, 0");        /* flush v4 TLB */
-
-       /*
-        * disable MMU stuff and caches
-        */
-       asm("mrc        p15, 0, r0, c1, c0, 0");
-       /* clear bits 13, 9:8 (--V- --RS) */
-       asm("bic        r0, r0, #0x00002300");
-       /* clear bits 7, 2:0 (B--- -CAM) */
-       asm("bic        r0, r0, #0x00000087");
-       /* set bit 2 (A) Align */
-       asm("orr        r0, r0, #0x00000002");
-       /* set bit 12 (I) I-Cache */
-       asm("orr        r0, r0, #0x00001000");
-       asm("mcr        p15, 0, r0, c1, c0, 0");
+       struct davinci_uart_ctrl_regs *davinci_uart_ctrl_regs =
+               (struct davinci_uart_ctrl_regs *)(CONFIG_SYS_NS16550_COM1 +
+               DAVINCI_UART_CTRL_BASE);
 
        /* Mask all interrupts */
-       writel(0x04, &dv_aintc_regs->intctl);
+       writel(DV_AINTC_INTCTL_IDMODE, &dv_aintc_regs->intctl);
        writel(0x0, &dv_aintc_regs->eabase);
        writel(0x0, &dv_aintc_regs->eint0);
        writel(0x0, &dv_aintc_regs->eint1);
@@ -422,7 +408,10 @@ void dm36x_lowlevel_init(ulong bootflag)
         * Fix Power and Emulation Management Register
         * see sprufh2.pdf page 38 Table 22
         */
-       writel(0x0000e003, (CONFIG_SYS_NS16550_COM1 + 0x30));
+       writel((DAVINCI_UART_PWREMU_MGMT_FREE | DAVINCI_UART_PWREMU_MGMT_URRST |
+               DAVINCI_UART_PWREMU_MGMT_UTRST),
+              &davinci_uart_ctrl_regs->pwremu_mgmt);
+
        puts("ddr init\n");
        dm365_ddr_setup();
 
index c71c685f72b61d8cf2a706a6205fd27acece42b0..d435e4bed728b7e00756b41385e1a4988bc49c63 100644 (file)
@@ -29,6 +29,7 @@
 #include <net.h>
 #include <dp83848.h>
 #include <asm/arch/emac_defs.h>
+#include "../../../../../drivers/net/davinci_emac.h"
 
 #ifdef CONFIG_DRIVER_TI_EMAC
 
index df35e44d138aca279688cf297555f2cf2708fcfc..68650e5a625ae3ee815a68b52a341d7a3dbfbb58 100644 (file)
@@ -22,6 +22,7 @@
 #include <net.h>
 #include <miiphy.h>
 #include <asm/arch/emac_defs.h>
+#include "../../../../../drivers/net/davinci_emac.h"
 
 #ifdef CONFIG_DRIVER_TI_EMAC
 
index 634eda0a02b739468b4b27f6c7f1653e0a03b92f..3546e7fe2a091154c4e1c674be40425ddec817c7 100644 (file)
@@ -36,6 +36,7 @@
 #include <net.h>
 #include <asm/arch/emac_defs.h>
 #include <asm/io.h>
+#include "../../../../../drivers/net/davinci_emac.h"
 
 int ksz8873_is_phy_connected(int phy_addr)
 {
index 733d41372941d45d87dcc043da342c42a3a7d2c4..cce1fe4cb23fb2c0bae9c61cfb07b01b77bffb46 100644 (file)
@@ -30,6 +30,7 @@
 #include <miiphy.h>
 #include <lxt971a.h>
 #include <asm/arch/emac_defs.h>
+#include "../../../../../drivers/net/davinci_emac.h"
 
 #ifdef CONFIG_DRIVER_TI_EMAC
 
similarity index 90%
rename from board/davinci/common/misc.c
rename to arch/arm/cpu/arm926ejs/davinci/misc.c
index 5aa7605f005e2d7795858b0bd61f0b66bf611a9f..5f510b61dbdd2425a370098ea80a05537f23e718 100644 (file)
@@ -51,16 +51,16 @@ void dram_init_banksize(void)
 #endif
 
 #ifdef CONFIG_DRIVER_TI_EMAC
-
-/* Read ethernet MAC address from EEPROM for DVEVM compatible boards.
+/*
+ * Read ethernet MAC address from EEPROM for DVEVM compatible boards.
  * Returns 1 if found, 0 otherwise.
  */
 int dvevm_read_mac_address(uint8_t *buf)
 {
 #ifdef CONFIG_SYS_I2C_EEPROM_ADDR
        /* Read MAC address. */
-       if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00, CONFIG_SYS_I2C_EEPROM_ADDR_LEN,
-                    (uint8_t *) &buf[0], 6))
+       if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00,
+               CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (uint8_t *) &buf[0], 6))
                goto i2cerr;
 
        /* Check that MAC address is valid. */
@@ -70,7 +70,8 @@ int dvevm_read_mac_address(uint8_t *buf)
        return 1; /* Found */
 
 i2cerr:
-       printf("Read from EEPROM @ 0x%02x failed\n", CONFIG_SYS_I2C_EEPROM_ADDR);
+       printf("Read from EEPROM @ 0x%02x failed\n",
+               CONFIG_SYS_I2C_EEPROM_ADDR);
 err:
 #endif /* CONFIG_SYS_I2C_EEPROM_ADDR */
 
@@ -103,15 +104,16 @@ void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr)
 
        eth_getenv_enetaddr_by_index("eth", 0, env_enetaddr);
        if (!memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) {
-               /* There is no MAC address in the environment, so we initialize
-                * it from the value in the EEPROM. */
+               /*
+                * There is no MAC address in the environment, so we
+                * initialize it from the value in the EEPROM.
+                */
                debug("### Setting environment from EEPROM MAC address = "
                        "\"%pM\"\n",
                        env_enetaddr);
                eth_setenv_enetaddr("ethaddr", rom_enetaddr);
        }
 }
-
 #endif /* CONFIG_DRIVER_TI_EMAC */
 
 #if defined(CONFIG_SOC_DA8XX)
@@ -122,7 +124,6 @@ void irq_init(void)
         * Mask all IRQs by clearing the global enable and setting
         * the enable clear for all the 90 interrupts.
         */
-
        writel(0, &davinci_aintc_regs->ger);
 
        writel(0, &davinci_aintc_regs->hier);
index 8f38056455abf2d74fb65f864600275f56ee24dd..75314b91b3fbd0f5fab4c690fdffee8b69d7665d 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * (C) Copyright 2010
similarity index 86%
rename from board/pleb2/Makefile
rename to arch/arm/cpu/arm926ejs/mx28/Makefile
index bc296107bfa0dc7016b32e36f34eb8531fef3394..7845310cfec12493245d9a20df5a454248275dcf 100644 (file)
@@ -1,4 +1,3 @@
-
 #
 # (C) Copyright 2000-2006
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 
 include $(TOPDIR)/config.mk
 
-LIB    = $(obj)lib$(BOARD).o
+LIB    = $(obj)lib$(SOC).o
 
-COBJS  := pleb2.o flash.o
+COBJS  = clock.o mx28.o iomux.o timer.o
 
-SRCS   := $(COBJS:.o=.c)
+SRCS   := $(START:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
+START  := $(addprefix $(obj),$(START))
+
+all:   $(obj).depend $(LIB)
 
-$(LIB):        $(obj).depend $(OBJS)
+$(LIB):        $(OBJS)
        $(call cmd_link_o_target, $(OBJS))
 
 #########################################################################
diff --git a/arch/arm/cpu/arm926ejs/mx28/clock.c b/arch/arm/cpu/arm926ejs/mx28/clock.c
new file mode 100644 (file)
index 0000000..f698506
--- /dev/null
@@ -0,0 +1,355 @@
+/*
+ * Freescale i.MX28 clock setup code
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright (C) 2010 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+
+/* The PLL frequency is always 480MHz, see section 10.2 in iMX28 datasheet. */
+#define        PLL_FREQ_KHZ    480000
+#define        PLL_FREQ_COEF   18
+/* The XTAL frequency is always 24MHz, see section 10.2 in iMX28 datasheet. */
+#define        XTAL_FREQ_KHZ   24000
+
+#define        PLL_FREQ_MHZ    (PLL_FREQ_KHZ / 1000)
+#define        XTAL_FREQ_MHZ   (XTAL_FREQ_KHZ / 1000)
+
+static uint32_t mx28_get_pclk(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       uint32_t clkctrl, clkseq, clkfrac;
+       uint32_t frac, div;
+
+       clkctrl = readl(&clkctrl_regs->hw_clkctrl_cpu);
+
+       /* No support of fractional divider calculation */
+       if (clkctrl &
+               (CLKCTRL_CPU_DIV_XTAL_FRAC_EN | CLKCTRL_CPU_DIV_CPU_FRAC_EN)) {
+               return 0;
+       }
+
+       clkseq = readl(&clkctrl_regs->hw_clkctrl_clkseq);
+
+       /* XTAL Path */
+       if (clkseq & CLKCTRL_CLKSEQ_BYPASS_CPU) {
+               div = (clkctrl & CLKCTRL_CPU_DIV_XTAL_MASK) >>
+                       CLKCTRL_CPU_DIV_XTAL_OFFSET;
+               return XTAL_FREQ_MHZ / div;
+       }
+
+       /* REF Path */
+       clkfrac = readl(&clkctrl_regs->hw_clkctrl_frac0);
+       frac = clkfrac & CLKCTRL_FRAC0_CPUFRAC_MASK;
+       div = clkctrl & CLKCTRL_CPU_DIV_CPU_MASK;
+       return (PLL_FREQ_MHZ * PLL_FREQ_COEF / frac) / div;
+}
+
+static uint32_t mx28_get_hclk(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       uint32_t div;
+       uint32_t clkctrl;
+
+       clkctrl = readl(&clkctrl_regs->hw_clkctrl_hbus);
+
+       /* No support of fractional divider calculation */
+       if (clkctrl & CLKCTRL_HBUS_DIV_FRAC_EN)
+               return 0;
+
+       div = clkctrl & CLKCTRL_HBUS_DIV_MASK;
+       return mx28_get_pclk() / div;
+}
+
+static uint32_t mx28_get_emiclk(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       uint32_t frac, div;
+       uint32_t clkctrl, clkseq, clkfrac;
+
+       clkseq = readl(&clkctrl_regs->hw_clkctrl_clkseq);
+       clkctrl = readl(&clkctrl_regs->hw_clkctrl_emi);
+
+       /* XTAL Path */
+       if (clkseq & CLKCTRL_CLKSEQ_BYPASS_EMI) {
+               div = (clkctrl & CLKCTRL_EMI_DIV_XTAL_MASK) >>
+                       CLKCTRL_EMI_DIV_XTAL_OFFSET;
+               return XTAL_FREQ_MHZ / div;
+       }
+
+       clkfrac = readl(&clkctrl_regs->hw_clkctrl_frac0);
+
+       /* REF Path */
+       frac = (clkfrac & CLKCTRL_FRAC0_EMIFRAC_MASK) >>
+               CLKCTRL_FRAC0_EMIFRAC_OFFSET;
+       div = clkctrl & CLKCTRL_EMI_DIV_EMI_MASK;
+       return (PLL_FREQ_MHZ * PLL_FREQ_COEF / frac) / div;
+}
+
+static uint32_t mx28_get_gpmiclk(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       uint32_t frac, div;
+       uint32_t clkctrl, clkseq, clkfrac;
+
+       clkseq = readl(&clkctrl_regs->hw_clkctrl_clkseq);
+       clkctrl = readl(&clkctrl_regs->hw_clkctrl_gpmi);
+
+       /* XTAL Path */
+       if (clkseq & CLKCTRL_CLKSEQ_BYPASS_GPMI) {
+               div = clkctrl & CLKCTRL_GPMI_DIV_MASK;
+               return XTAL_FREQ_MHZ / div;
+       }
+
+       clkfrac = readl(&clkctrl_regs->hw_clkctrl_frac1);
+
+       /* REF Path */
+       frac = (clkfrac & CLKCTRL_FRAC1_GPMIFRAC_MASK) >>
+               CLKCTRL_FRAC1_GPMIFRAC_OFFSET;
+       div = clkctrl & CLKCTRL_GPMI_DIV_MASK;
+       return (PLL_FREQ_MHZ * PLL_FREQ_COEF / frac) / div;
+}
+
+/*
+ * Set IO clock frequency, in kHz
+ */
+void mx28_set_ioclk(enum mxs_ioclock io, uint32_t freq)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+       uint32_t div;
+
+       if (freq == 0)
+               return;
+
+       if (io > MXC_IOCLK1)
+               return;
+
+       div = (PLL_FREQ_KHZ * PLL_FREQ_COEF) / freq;
+
+       if (div < 18)
+               div = 18;
+
+       if (div > 35)
+               div = 35;
+
+       if (io == MXC_IOCLK0) {
+               writel(CLKCTRL_FRAC0_CLKGATEIO0,
+                       &clkctrl_regs->hw_clkctrl_frac0_set);
+               clrsetbits_le32(&clkctrl_regs->hw_clkctrl_frac0,
+                               CLKCTRL_FRAC0_IO0FRAC_MASK,
+                               div << CLKCTRL_FRAC0_IO0FRAC_OFFSET);
+               writel(CLKCTRL_FRAC0_CLKGATEIO0,
+                       &clkctrl_regs->hw_clkctrl_frac0_clr);
+       } else {
+               writel(CLKCTRL_FRAC0_CLKGATEIO1,
+                       &clkctrl_regs->hw_clkctrl_frac0_set);
+               clrsetbits_le32(&clkctrl_regs->hw_clkctrl_frac0,
+                               CLKCTRL_FRAC0_IO1FRAC_MASK,
+                               div << CLKCTRL_FRAC0_IO1FRAC_OFFSET);
+               writel(CLKCTRL_FRAC0_CLKGATEIO1,
+                       &clkctrl_regs->hw_clkctrl_frac0_clr);
+       }
+}
+
+/*
+ * Get IO clock, returns IO clock in kHz
+ */
+static uint32_t mx28_get_ioclk(enum mxs_ioclock io)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+       uint32_t tmp, ret;
+
+       if (io > MXC_IOCLK1)
+               return 0;
+
+       tmp = readl(&clkctrl_regs->hw_clkctrl_frac0);
+
+       if (io == MXC_IOCLK0)
+               ret = (tmp & CLKCTRL_FRAC0_IO0FRAC_MASK) >>
+                       CLKCTRL_FRAC0_IO0FRAC_OFFSET;
+       else
+               ret = (tmp & CLKCTRL_FRAC0_IO1FRAC_MASK) >>
+                       CLKCTRL_FRAC0_IO1FRAC_OFFSET;
+
+       return (PLL_FREQ_KHZ * PLL_FREQ_COEF) / ret;
+}
+
+/*
+ * Configure SSP clock frequency, in kHz
+ */
+void mx28_set_sspclk(enum mxs_sspclock ssp, uint32_t freq, int xtal)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+       uint32_t clk, clkreg;
+
+       if (ssp > MXC_SSPCLK3)
+               return;
+
+       clkreg = (uint32_t)(&clkctrl_regs->hw_clkctrl_ssp0) +
+                       (ssp * sizeof(struct mx28_register));
+
+       clrbits_le32(clkreg, CLKCTRL_SSP_CLKGATE);
+       while (readl(clkreg) & CLKCTRL_SSP_CLKGATE)
+               ;
+
+       if (xtal)
+               clk = XTAL_FREQ_KHZ;
+       else
+               clk = mx28_get_ioclk(ssp >> 1);
+
+       if (freq > clk)
+               return;
+
+       /* Calculate the divider and cap it if necessary */
+       clk /= freq;
+       if (clk > CLKCTRL_SSP_DIV_MASK)
+               clk = CLKCTRL_SSP_DIV_MASK;
+
+       clrsetbits_le32(clkreg, CLKCTRL_SSP_DIV_MASK, clk);
+       while (readl(clkreg) & CLKCTRL_SSP_BUSY)
+               ;
+
+       if (xtal)
+               writel(CLKCTRL_CLKSEQ_BYPASS_SSP0 << ssp,
+                       &clkctrl_regs->hw_clkctrl_clkseq_set);
+       else
+               writel(CLKCTRL_CLKSEQ_BYPASS_SSP0 << ssp,
+                       &clkctrl_regs->hw_clkctrl_clkseq_clr);
+}
+
+/*
+ * Return SSP frequency, in kHz
+ */
+static uint32_t mx28_get_sspclk(enum mxs_sspclock ssp)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+       uint32_t clkreg;
+       uint32_t clk, tmp;
+
+       if (ssp > MXC_SSPCLK3)
+               return 0;
+
+       tmp = readl(&clkctrl_regs->hw_clkctrl_clkseq);
+       if (tmp & (CLKCTRL_CLKSEQ_BYPASS_SSP0 << ssp))
+               return XTAL_FREQ_KHZ;
+
+       clkreg = (uint32_t)(&clkctrl_regs->hw_clkctrl_ssp0) +
+                       (ssp * sizeof(struct mx28_register));
+
+       tmp = readl(clkreg) & CLKCTRL_SSP_DIV_MASK;
+
+       if (tmp == 0)
+               return 0;
+
+       clk = mx28_get_ioclk(ssp >> 1);
+
+       return clk / tmp;
+}
+
+/*
+ * Set SSP/MMC bus frequency, in kHz)
+ */
+void mx28_set_ssp_busclock(unsigned int bus, uint32_t freq)
+{
+       struct mx28_ssp_regs *ssp_regs;
+       const uint32_t sspclk = mx28_get_sspclk(bus);
+       uint32_t reg;
+       uint32_t divide, rate, tgtclk;
+
+       ssp_regs = (struct mx28_ssp_regs *)(MXS_SSP0_BASE + (bus * 0x2000));
+
+       /*
+        * SSP bit rate = SSPCLK / (CLOCK_DIVIDE * (1 + CLOCK_RATE)),
+        * CLOCK_DIVIDE has to be an even value from 2 to 254, and
+        * CLOCK_RATE could be any integer from 0 to 255.
+        */
+       for (divide = 2; divide < 254; divide += 2) {
+               rate = sspclk / freq / divide;
+               if (rate <= 256)
+                       break;
+       }
+
+       tgtclk = sspclk / divide / rate;
+       while (tgtclk > freq) {
+               rate++;
+               tgtclk = sspclk / divide / rate;
+       }
+       if (rate > 256)
+               rate = 256;
+
+       /* Always set timeout the maximum */
+       reg = SSP_TIMING_TIMEOUT_MASK |
+               (divide << SSP_TIMING_CLOCK_DIVIDE_OFFSET) |
+               ((rate - 1) << SSP_TIMING_CLOCK_RATE_OFFSET);
+       writel(reg, &ssp_regs->hw_ssp_timing);
+
+       debug("SPI%d: Set freq rate to %d KHz (requested %d KHz)\n",
+               bus, tgtclk, freq);
+}
+
+uint32_t mxc_get_clock(enum mxc_clock clk)
+{
+       switch (clk) {
+       case MXC_ARM_CLK:
+               return mx28_get_pclk() * 1000000;
+       case MXC_GPMI_CLK:
+               return mx28_get_gpmiclk() * 1000000;
+       case MXC_AHB_CLK:
+       case MXC_IPG_CLK:
+               return mx28_get_hclk() * 1000000;
+       case MXC_EMI_CLK:
+               return mx28_get_emiclk();
+       case MXC_IO0_CLK:
+               return mx28_get_ioclk(MXC_IOCLK0);
+       case MXC_IO1_CLK:
+               return mx28_get_ioclk(MXC_IOCLK1);
+       case MXC_SSP0_CLK:
+               return mx28_get_sspclk(MXC_SSPCLK0);
+       case MXC_SSP1_CLK:
+               return mx28_get_sspclk(MXC_SSPCLK1);
+       case MXC_SSP2_CLK:
+               return mx28_get_sspclk(MXC_SSPCLK2);
+       case MXC_SSP3_CLK:
+               return mx28_get_sspclk(MXC_SSPCLK3);
+       }
+
+       return 0;
+}
diff --git a/arch/arm/cpu/arm926ejs/mx28/iomux.c b/arch/arm/cpu/arm926ejs/mx28/iomux.c
new file mode 100644 (file)
index 0000000..9ea411f
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2004-2006,2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de>
+ * Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH,
+ *                       <armlinux@phytec.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <common.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/iomux.h>
+#include <asm/arch/imx-regs.h>
+
+#if    defined(CONFIG_MX23)
+#define        DRIVE_OFFSET    0x200
+#define        PULL_OFFSET     0x400
+#elif  defined(CONFIG_MX28)
+#define        DRIVE_OFFSET    0x300
+#define        PULL_OFFSET     0x600
+#else
+#error "Please select CONFIG_MX23 or CONFIG_MX28"
+#endif
+
+/*
+ * configures a single pad in the iomuxer
+ */
+int mxs_iomux_setup_pad(iomux_cfg_t pad)
+{
+       u32 reg, ofs, bp, bm;
+       void *iomux_base = (void *)MXS_PINCTRL_BASE;
+       struct mx28_register *mxs_reg;
+
+       /* muxsel */
+       ofs = 0x100;
+       ofs += PAD_BANK(pad) * 0x20 + PAD_PIN(pad) / 16 * 0x10;
+       bp = PAD_PIN(pad) % 16 * 2;
+       bm = 0x3 << bp;
+       reg = readl(iomux_base + ofs);
+       reg &= ~bm;
+       reg |= PAD_MUXSEL(pad) << bp;
+       writel(reg, iomux_base + ofs);
+
+       /* drive */
+       ofs = DRIVE_OFFSET;
+       ofs += PAD_BANK(pad) * 0x40 + PAD_PIN(pad) / 8 * 0x10;
+       /* mA */
+       if (PAD_MA_VALID(pad)) {
+               bp = PAD_PIN(pad) % 8 * 4;
+               bm = 0x3 << bp;
+               reg = readl(iomux_base + ofs);
+               reg &= ~bm;
+               reg |= PAD_MA(pad) << bp;
+               writel(reg, iomux_base + ofs);
+       }
+       /* vol */
+       if (PAD_VOL_VALID(pad)) {
+               bp = PAD_PIN(pad) % 8 * 4 + 2;
+               mxs_reg = (struct mx28_register *)(iomux_base + ofs);
+               if (PAD_VOL(pad))
+                       writel(1 << bp, &mxs_reg->reg_set);
+               else
+                       writel(1 << bp, &mxs_reg->reg_clr);
+       }
+
+       /* pull */
+       if (PAD_PULL_VALID(pad)) {
+               ofs = PULL_OFFSET;
+               ofs += PAD_BANK(pad) * 0x10;
+               bp = PAD_PIN(pad);
+               mxs_reg = (struct mx28_register *)(iomux_base + ofs);
+               if (PAD_PULL(pad))
+                       writel(1 << bp, &mxs_reg->reg_set);
+               else
+                       writel(1 << bp, &mxs_reg->reg_clr);
+       }
+
+       return 0;
+}
+
+int mxs_iomux_setup_multiple_pads(const iomux_cfg_t *pad_list, unsigned count)
+{
+       const iomux_cfg_t *p = pad_list;
+       int i;
+       int ret;
+
+       for (i = 0; i < count; i++) {
+               ret = mxs_iomux_setup_pad(*p);
+               if (ret)
+                       return ret;
+               p++;
+       }
+
+       return 0;
+}
diff --git a/arch/arm/cpu/arm926ejs/mx28/mx28.c b/arch/arm/cpu/arm926ejs/mx28/mx28.c
new file mode 100644 (file)
index 0000000..088c019
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+ * Freescale i.MX28 common code
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright (C) 2010 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/iomux.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* 1 second delay should be plenty of time for block reset. */
+#define        RESET_MAX_TIMEOUT       1000000
+
+#define        MX28_BLOCK_SFTRST       (1 << 31)
+#define        MX28_BLOCK_CLKGATE      (1 << 30)
+
+/* Lowlevel init isn't used on i.MX28, so just have a dummy here */
+inline void lowlevel_init(void) {}
+
+void reset_cpu(ulong ignored) __attribute__((noreturn));
+
+void reset_cpu(ulong ignored)
+{
+
+       struct mx28_rtc_regs *rtc_regs =
+               (struct mx28_rtc_regs *)MXS_RTC_BASE;
+
+       /* Wait 1 uS before doing the actual watchdog reset */
+       writel(1, &rtc_regs->hw_rtc_watchdog);
+       writel(RTC_CTRL_WATCHDOGEN, &rtc_regs->hw_rtc_ctrl_set);
+
+       /* Endless loop, reset will exit from here */
+       for (;;)
+               ;
+}
+
+int mx28_wait_mask_set(struct mx28_register *reg, uint32_t mask, int timeout)
+{
+       while (--timeout) {
+               if ((readl(&reg->reg) & mask) == mask)
+                       break;
+               udelay(1);
+       }
+
+       return !timeout;
+}
+
+int mx28_wait_mask_clr(struct mx28_register *reg, uint32_t mask, int timeout)
+{
+       while (--timeout) {
+               if ((readl(&reg->reg) & mask) == 0)
+                       break;
+               udelay(1);
+       }
+
+       return !timeout;
+}
+
+int mx28_reset_block(struct mx28_register *reg)
+{
+       /* Clear SFTRST */
+       writel(MX28_BLOCK_SFTRST, &reg->reg_clr);
+
+       if (mx28_wait_mask_clr(reg, MX28_BLOCK_SFTRST, RESET_MAX_TIMEOUT))
+               return 1;
+
+       /* Clear CLKGATE */
+       writel(MX28_BLOCK_CLKGATE, &reg->reg_clr);
+
+       /* Set SFTRST */
+       writel(MX28_BLOCK_SFTRST, &reg->reg_set);
+
+       /* Wait for CLKGATE being set */
+       if (mx28_wait_mask_set(reg, MX28_BLOCK_CLKGATE, RESET_MAX_TIMEOUT))
+               return 1;
+
+       /* Clear SFTRST */
+       writel(MX28_BLOCK_SFTRST, &reg->reg_clr);
+
+       if (mx28_wait_mask_clr(reg, MX28_BLOCK_SFTRST, RESET_MAX_TIMEOUT))
+               return 1;
+
+       /* Clear CLKGATE */
+       writel(MX28_BLOCK_CLKGATE, &reg->reg_clr);
+
+       if (mx28_wait_mask_clr(reg, MX28_BLOCK_CLKGATE, RESET_MAX_TIMEOUT))
+               return 1;
+
+       return 0;
+}
+
+void mx28_fixup_vt(uint32_t start_addr)
+{
+       uint32_t *vt = (uint32_t *)0x20;
+       int i;
+
+       for (i = 0; i < 8; i++)
+               vt[i] = start_addr + (4 * i);
+}
+
+#ifdef CONFIG_ARCH_MISC_INIT
+int arch_misc_init(void)
+{
+       mx28_fixup_vt(gd->relocaddr);
+       return 0;
+}
+#endif
+
+#ifdef CONFIG_ARCH_CPU_INIT
+int arch_cpu_init(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+       extern uint32_t _start;
+
+       mx28_fixup_vt((uint32_t)&_start);
+
+       /*
+        * Enable NAND clock
+        */
+       /* Clear bypass bit */
+       writel(CLKCTRL_CLKSEQ_BYPASS_GPMI,
+               &clkctrl_regs->hw_clkctrl_clkseq_set);
+
+       /* Set GPMI clock to ref_gpmi / 12 */
+       clrsetbits_le32(&clkctrl_regs->hw_clkctrl_gpmi,
+               CLKCTRL_GPMI_CLKGATE | CLKCTRL_GPMI_DIV_MASK, 1);
+
+       udelay(1000);
+
+       /*
+        * Configure GPIO unit
+        */
+       mxs_gpio_init();
+
+       return 0;
+}
+#endif
+
+#if defined(CONFIG_DISPLAY_CPUINFO)
+int print_cpuinfo(void)
+{
+       printf("Freescale i.MX28 family\n");
+       return 0;
+}
+#endif
+
+int do_mx28_showclocks(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+       printf("CPU:   %3d MHz\n", mxc_get_clock(MXC_ARM_CLK) / 1000000);
+       printf("BUS:   %3d MHz\n", mxc_get_clock(MXC_AHB_CLK) / 1000000);
+       printf("EMI:   %3d MHz\n", mxc_get_clock(MXC_EMI_CLK));
+       printf("GPMI:  %3d MHz\n", mxc_get_clock(MXC_GPMI_CLK) / 1000000);
+       return 0;
+}
+
+/*
+ * Initializes on-chip ethernet controllers.
+ */
+#ifdef CONFIG_CMD_NET
+int cpu_eth_init(bd_t *bis)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       /* Turn on ENET clocks */
+       clrbits_le32(&clkctrl_regs->hw_clkctrl_enet,
+               CLKCTRL_ENET_SLEEP | CLKCTRL_ENET_DISABLE);
+
+       /* Set up ENET PLL for 50 MHz */
+       /* Power on ENET PLL */
+       writel(CLKCTRL_PLL2CTRL0_POWER,
+               &clkctrl_regs->hw_clkctrl_pll2ctrl0_set);
+
+       udelay(10);
+
+       /* Gate on ENET PLL */
+       writel(CLKCTRL_PLL2CTRL0_CLKGATE,
+               &clkctrl_regs->hw_clkctrl_pll2ctrl0_clr);
+
+       /* Enable pad output */
+       setbits_le32(&clkctrl_regs->hw_clkctrl_enet, CLKCTRL_ENET_CLK_OUT_EN);
+
+       return 0;
+}
+#endif
+
+U_BOOT_CMD(
+       clocks, CONFIG_SYS_MAXARGS, 1, do_mx28_showclocks,
+       "display clocks",
+       ""
+);
diff --git a/arch/arm/cpu/arm926ejs/mx28/timer.c b/arch/arm/cpu/arm926ejs/mx28/timer.c
new file mode 100644 (file)
index 0000000..dbc904d
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+ * Freescale i.MX28 timer driver
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * (C) Copyright 2009-2010 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+/* Maximum fixed count */
+#define TIMER_LOAD_VAL 0xffffffff
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define timestamp (gd->tbl)
+#define lastdec (gd->lastinc)
+
+/*
+ * This driver uses 1kHz clock source.
+ */
+#define        MX28_INCREMENTER_HZ             1000
+
+static inline unsigned long tick_to_time(unsigned long tick)
+{
+       return tick / (MX28_INCREMENTER_HZ / CONFIG_SYS_HZ);
+}
+
+static inline unsigned long time_to_tick(unsigned long time)
+{
+       return time * (MX28_INCREMENTER_HZ / CONFIG_SYS_HZ);
+}
+
+/* Calculate how many ticks happen in "us" microseconds */
+static inline unsigned long us_to_tick(unsigned long us)
+{
+       return (us * MX28_INCREMENTER_HZ) / 1000000;
+}
+
+int timer_init(void)
+{
+       struct mx28_timrot_regs *timrot_regs =
+               (struct mx28_timrot_regs *)MXS_TIMROT_BASE;
+
+       /* Reset Timers and Rotary Encoder module */
+       mx28_reset_block(&timrot_regs->hw_timrot_rotctrl_reg);
+
+       /* Set fixed_count to 0 */
+       writel(0, &timrot_regs->hw_timrot_fixed_count0);
+
+       /* Set UPDATE bit and 1Khz frequency */
+       writel(TIMROT_TIMCTRLn_UPDATE | TIMROT_TIMCTRLn_RELOAD |
+               TIMROT_TIMCTRLn_SELECT_1KHZ_XTAL,
+               &timrot_regs->hw_timrot_timctrl0);
+
+       /* Set fixed_count to maximal value */
+       writel(TIMER_LOAD_VAL, &timrot_regs->hw_timrot_fixed_count0);
+
+       return 0;
+}
+
+ulong get_timer(ulong base)
+{
+       struct mx28_timrot_regs *timrot_regs =
+               (struct mx28_timrot_regs *)MXS_TIMROT_BASE;
+
+       /* Current tick value */
+       uint32_t now = readl(&timrot_regs->hw_timrot_running_count0);
+
+       if (lastdec >= now) {
+               /*
+                * normal mode (non roll)
+                * move stamp forward with absolut diff ticks
+                */
+               timestamp += (lastdec - now);
+       } else {
+               /* we have rollover of decrementer */
+               timestamp += (TIMER_LOAD_VAL - now) + lastdec;
+
+       }
+       lastdec = now;
+
+       return tick_to_time(timestamp) - base;
+}
+
+/* We use the HW_DIGCTL_MICROSECONDS register for sub-millisecond timer. */
+#define        MX28_HW_DIGCTL_MICROSECONDS     0x8001c0c0
+
+void __udelay(unsigned long usec)
+{
+       uint32_t old, new, incr;
+       uint32_t counter = 0;
+
+       old = readl(MX28_HW_DIGCTL_MICROSECONDS);
+
+       while (counter < usec) {
+               new = readl(MX28_HW_DIGCTL_MICROSECONDS);
+
+               /* Check if the timer wrapped. */
+               if (new < old) {
+                       incr = 0xffffffff - old;
+                       incr += new;
+               } else {
+                       incr = new - old;
+               }
+
+               /*
+                * Check if we are close to the maximum time and the counter
+                * would wrap if incremented. If that's the case, break out
+                * from the loop as the requested delay time passed.
+                */
+               if (counter + incr < counter)
+                       break;
+
+               counter += incr;
+               old = new;
+       }
+}
index 0052daba8ee8070183a306b69efea72d1a444903..02332eee0e13fa514234288fe7405f4e79d6bff4 100644 (file)
@@ -11,6 +11,7 @@
 
 #include <common.h>
 #include <command.h>
+#include <linux/compiler.h>
 
 #if defined(CONFIG_DISPLAY_CPUINFO) && defined(CONFIG_OMAP)
 
@@ -151,8 +152,8 @@ int print_cpuinfo (void)
        u8 die_rev;
        u32 omap_id;
        u8 cpu_type;
-       u32 system_serial_high;
-       u32 system_serial_low;
+       __maybe_unused u32 system_serial_high;
+       __maybe_unused u32 system_serial_low;
        u32 system_rev = 0;
 
        jtag_id = omap_get_jtag_id();
index 339c5ed6bdcac328acaffb4c56301ea3c962104f..6a09c028e45357f68cbac3aa3502c3a5af9a737a 100644 (file)
@@ -194,9 +194,7 @@ reset:
         * we do sys-critical inits only at reboot,
         * not when booting from ram!
         */
-#ifndef CONFIG_SKIP_LOWLEVEL_INIT
        bl      cpu_init_crit
-#endif
 
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
@@ -301,10 +299,12 @@ clear_bss:
 #endif
        mov     r2, #0x00000000         /* clear                            */
 
-clbss_l:str    r2, [r0]                /* clear loop...                    */
+clbss_l:cmp    r0, r1                  /* clear loop... */
+       bhs     clbss_e                 /* if reached end of bss, exit */
+       str     r2, [r0]
        add     r0, r0, #4
-       cmp     r0, r1
-       bne     clbss_l
+       b       clbss_l
+clbss_e:
 
 #ifndef CONFIG_SPL_BUILD
        bl coloured_LED_init
@@ -353,7 +353,6 @@ _dynsym_start_ofs:
  *
  *************************************************************************
  */
-#ifndef CONFIG_SKIP_LOWLEVEL_INIT
 cpu_init_crit:
        /*
         * flush v4 I/D caches
@@ -372,14 +371,15 @@ cpu_init_crit:
        orr     r0, r0, #0x00001000     /* set bit 12 (I) I-Cache */
        mcr     p15, 0, r0, c1, c0, 0
 
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
        /*
         * Go setup Memory and board specific bits prior to relocation.
         */
        mov     ip, lr          /* perserve link reg across call */
        bl      lowlevel_init   /* go setup pll,mux,memory */
        mov     lr, ip          /* restore link */
-       mov     pc, lr          /* back to my caller */
 #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
+       mov     pc, lr          /* back to my caller */
 
 #ifndef CONFIG_SPL_BUILD
 /*
index 92a5a968006327deaa8b6706f4956b01de6db4f8..f97fa3d44824c7fb442d927d3e1fe223f362f4a2 100644 (file)
@@ -29,10 +29,10 @@ START       := start.o
 
 ifndef CONFIG_SPL_BUILD
 COBJS  += cache_v7.o
-COBJS  += cpu.o
 endif
 
-COBJS  += syslib.o
+COBJS  += cpu.o
+COBJS  += syslib.o
 
 SRCS   := $(START:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
index 091e3e0842d5506b2b6351a404ee06e8cb75d594..662c4962e6e3994a66240ceb442a70cd5303a129 100644 (file)
@@ -65,6 +65,7 @@ int cleanup_before_linux(void)
         * dcache_disable() in turn flushes the d-cache and disables MMU
         */
        dcache_disable();
+       v7_outer_cache_disable();
 
        /*
         * After D-cache is flushed and before it is disabled there may
index 0769a645c3910f384ddc8c9765fe87f73eba4378..933ce05b767e5b19804e380d1bf6b750a868b8ab 100644 (file)
@@ -91,7 +91,7 @@ static uint32_t decode_pll(struct mxc_pll_reg *pll, uint32_t infreq)
        if (ctrl & MXC_DPLLC_CTL_DPDCK0_2_EN)
                refclk *= 2;
 
-       refclk /= pdf + 1;
+       do_div(refclk, pdf + 1);
        temp = refclk * mfn_abs;
        do_div(temp, mfd + 1);
        ret = refclk * mfi;
index 1dee81f22ae02ef315420900bc96aa126a72205a..a684611265c6110e16956e136d16efda2403e104 100644 (file)
@@ -33,6 +33,13 @@ ifdef CONFIG_OMAP
 COBJS  += gpio.o
 endif
 
+ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
+COBJS  += hwinit-common.o
+COBJS  += clocks-common.o
+COBJS  += emif-common.o
+SOBJS  += lowlevel_init.o
+endif
+
 ifdef CONFIG_SPL_BUILD
 COBJS  += spl.o
 ifdef CONFIG_SPL_NAND_SUPPORT
@@ -43,6 +50,12 @@ COBJS        += spl_mmc.o
 endif
 endif
 
+ifndef CONFIG_SPL_BUILD
+ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
+COBJS  += mem-common.o
+endif
+endif
+
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
 
diff --git a/arch/arm/cpu/armv7/omap-common/clocks-common.c b/arch/arm/cpu/armv7/omap-common/clocks-common.c
new file mode 100644 (file)
index 0000000..1da90a4
--- /dev/null
@@ -0,0 +1,599 @@
+/*
+ *
+ * Clock initialization for OMAP4
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Aneesh V <aneesh@ti.com>
+ *
+ * Based on previous work by:
+ *     Santosh Shilimkar <santosh.shilimkar@ti.com>
+ *     Rajendra Nayak <rnayak@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 <common.h>
+#include <asm/omap_common.h>
+#include <asm/gpio.h>
+#include <asm/arch/clocks.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/utils.h>
+#include <asm/omap_gpio.h>
+
+#ifndef CONFIG_SPL_BUILD
+/*
+ * printing to console doesn't work unless
+ * this code is executed from SPL
+ */
+#define printf(fmt, args...)
+#define puts(s)
+#endif
+
+static inline u32 __get_sys_clk_index(void)
+{
+       u32 ind;
+       /*
+        * For ES1 the ROM code calibration of sys clock is not reliable
+        * due to hw issue. So, use hard-coded value. If this value is not
+        * correct for any board over-ride this function in board file
+        * From ES2.0 onwards you will get this information from
+        * CM_SYS_CLKSEL
+        */
+       if (omap_revision() == OMAP4430_ES1_0)
+               ind = OMAP_SYS_CLK_IND_38_4_MHZ;
+       else {
+               /* SYS_CLKSEL - 1 to match the dpll param array indices */
+               ind = (readl(&prcm->cm_sys_clksel) &
+                       CM_SYS_CLKSEL_SYS_CLKSEL_MASK) - 1;
+       }
+       return ind;
+}
+
+u32 get_sys_clk_index(void)
+       __attribute__ ((weak, alias("__get_sys_clk_index")));
+
+u32 get_sys_clk_freq(void)
+{
+       u8 index = get_sys_clk_index();
+       return sys_clk_array[index];
+}
+
+static inline void do_bypass_dpll(u32 *const base)
+{
+       struct dpll_regs *dpll_regs = (struct dpll_regs *)base;
+
+       clrsetbits_le32(&dpll_regs->cm_clkmode_dpll,
+                       CM_CLKMODE_DPLL_DPLL_EN_MASK,
+                       DPLL_EN_FAST_RELOCK_BYPASS <<
+                       CM_CLKMODE_DPLL_EN_SHIFT);
+}
+
+static inline void wait_for_bypass(u32 *const base)
+{
+       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
+
+       if (!wait_on_value(ST_DPLL_CLK_MASK, 0, &dpll_regs->cm_idlest_dpll,
+                               LDELAY)) {
+               printf("Bypassing DPLL failed %p\n", base);
+       }
+}
+
+static inline void do_lock_dpll(u32 *const base)
+{
+       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
+
+       clrsetbits_le32(&dpll_regs->cm_clkmode_dpll,
+                     CM_CLKMODE_DPLL_DPLL_EN_MASK,
+                     DPLL_EN_LOCK << CM_CLKMODE_DPLL_EN_SHIFT);
+}
+
+static inline void wait_for_lock(u32 *const base)
+{
+       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
+
+       if (!wait_on_value(ST_DPLL_CLK_MASK, ST_DPLL_CLK_MASK,
+               &dpll_regs->cm_idlest_dpll, LDELAY)) {
+               printf("DPLL locking failed for %p\n", base);
+               hang();
+       }
+}
+
+inline u32 check_for_lock(u32 *const base)
+{
+       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
+       u32 lock = readl(&dpll_regs->cm_idlest_dpll) & ST_DPLL_CLK_MASK;
+
+       return lock;
+}
+
+static void do_setup_dpll(u32 *const base, const struct dpll_params *params,
+                               u8 lock, char *dpll)
+{
+       u32 temp, M, N;
+       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
+
+       temp = readl(&dpll_regs->cm_clksel_dpll);
+
+       if (check_for_lock(base)) {
+               /*
+                * The Dpll has already been locked by rom code using CH.
+                * Check if M,N are matching with Ideal nominal opp values.
+                * If matches, skip the rest otherwise relock.
+                */
+               M = (temp & CM_CLKSEL_DPLL_M_MASK) >> CM_CLKSEL_DPLL_M_SHIFT;
+               N = (temp & CM_CLKSEL_DPLL_N_MASK) >> CM_CLKSEL_DPLL_N_SHIFT;
+               if ((M != (params->m)) || (N != (params->n))) {
+                       debug("\n %s Dpll locked, but not for ideal M = %d,"
+                               "N = %d values, current values are M = %d,"
+                               "N= %d" , dpll, params->m, params->n,
+                               M, N);
+               } else {
+                       /* Dpll locked with ideal values for nominal opps. */
+                       debug("\n %s Dpll already locked with ideal"
+                                               "nominal opp values", dpll);
+                       goto setup_post_dividers;
+               }
+       }
+
+       bypass_dpll(base);
+
+       /* Set M & N */
+       temp &= ~CM_CLKSEL_DPLL_M_MASK;
+       temp |= (params->m << CM_CLKSEL_DPLL_M_SHIFT) & CM_CLKSEL_DPLL_M_MASK;
+
+       temp &= ~CM_CLKSEL_DPLL_N_MASK;
+       temp |= (params->n << CM_CLKSEL_DPLL_N_SHIFT) & CM_CLKSEL_DPLL_N_MASK;
+
+       writel(temp, &dpll_regs->cm_clksel_dpll);
+
+       /* Lock */
+       if (lock)
+               do_lock_dpll(base);
+
+setup_post_dividers:
+       setup_post_dividers(base, params);
+
+       /* Wait till the DPLL locks */
+       if (lock)
+               wait_for_lock(base);
+}
+
+u32 omap_ddr_clk(void)
+{
+       u32 ddr_clk, sys_clk_khz, omap_rev, divider;
+       const struct dpll_params *core_dpll_params;
+
+       omap_rev = omap_revision();
+       sys_clk_khz = get_sys_clk_freq() / 1000;
+
+       core_dpll_params = get_core_dpll_params();
+
+       debug("sys_clk %d\n ", sys_clk_khz * 1000);
+
+       /* Find Core DPLL locked frequency first */
+       ddr_clk = sys_clk_khz * 2 * core_dpll_params->m /
+                       (core_dpll_params->n + 1);
+
+       if (omap_rev < OMAP5430_ES1_0) {
+               /*
+                * DDR frequency is PHY_ROOT_CLK/2
+                * PHY_ROOT_CLK = Fdpll/2/M2
+                */
+               divider = 4;
+       } else {
+               /*
+                * DDR frequency is PHY_ROOT_CLK
+                * PHY_ROOT_CLK = Fdpll/2/M2
+                */
+               divider = 2;
+       }
+
+       ddr_clk = ddr_clk / divider / core_dpll_params->m2;
+       ddr_clk *= 1000;        /* convert to Hz */
+       debug("ddr_clk %d\n ", ddr_clk);
+
+       return ddr_clk;
+}
+
+/*
+ * Lock MPU dpll
+ *
+ * Resulting MPU frequencies:
+ * 4430 ES1.0  : 600 MHz
+ * 4430 ES2.x  : 792 MHz (OPP Turbo)
+ * 4460                : 920 MHz (OPP Turbo) - DCC disabled
+ */
+void configure_mpu_dpll(void)
+{
+       const struct dpll_params *params;
+       struct dpll_regs *mpu_dpll_regs;
+       u32 omap_rev;
+       omap_rev = omap_revision();
+
+       /*
+        * DCC and clock divider settings for 4460.
+        * DCC is required, if more than a certain frequency is required.
+        * For, 4460 > 1GHZ.
+        *     5430 > 1.4GHZ.
+        */
+       if ((omap_rev >= OMAP4460_ES1_0) && (omap_rev < OMAP5430_ES1_0)) {
+               mpu_dpll_regs =
+                       (struct dpll_regs *)&prcm->cm_clkmode_dpll_mpu;
+               bypass_dpll(&prcm->cm_clkmode_dpll_mpu);
+               clrbits_le32(&prcm->cm_mpu_mpu_clkctrl,
+                       MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK);
+               setbits_le32(&prcm->cm_mpu_mpu_clkctrl,
+                       MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK);
+               clrbits_le32(&mpu_dpll_regs->cm_clksel_dpll,
+                       CM_CLKSEL_DCC_EN_MASK);
+       }
+
+       params = get_mpu_dpll_params();
+
+       do_setup_dpll(&prcm->cm_clkmode_dpll_mpu, params, DPLL_LOCK, "mpu");
+       debug("MPU DPLL locked\n");
+}
+
+static void setup_dplls(void)
+{
+       u32 temp;
+       const struct dpll_params *params;
+
+       debug("setup_dplls\n");
+
+       /* CORE dpll */
+       params = get_core_dpll_params();        /* default - safest */
+       /*
+        * Do not lock the core DPLL now. Just set it up.
+        * Core DPLL will be locked after setting up EMIF
+        * using the FREQ_UPDATE method(freq_update_core())
+        */
+       do_setup_dpll(&prcm->cm_clkmode_dpll_core, params, DPLL_NO_LOCK,
+                                                               "core");
+       /* Set the ratios for CORE_CLK, L3_CLK, L4_CLK */
+       temp = (CLKSEL_CORE_X2_DIV_1 << CLKSEL_CORE_SHIFT) |
+           (CLKSEL_L3_CORE_DIV_2 << CLKSEL_L3_SHIFT) |
+           (CLKSEL_L4_L3_DIV_2 << CLKSEL_L4_SHIFT);
+       writel(temp, &prcm->cm_clksel_core);
+       debug("Core DPLL configured\n");
+
+       /* lock PER dpll */
+       params = get_per_dpll_params();
+       do_setup_dpll(&prcm->cm_clkmode_dpll_per,
+                       params, DPLL_LOCK, "per");
+       debug("PER DPLL locked\n");
+
+       /* MPU dpll */
+       configure_mpu_dpll();
+}
+
+#ifdef CONFIG_SYS_CLOCKS_ENABLE_ALL
+static void setup_non_essential_dplls(void)
+{
+       u32 sys_clk_khz, abe_ref_clk;
+       u32 sd_div, num, den;
+       const struct dpll_params *params;
+
+       sys_clk_khz = get_sys_clk_freq() / 1000;
+
+       /* IVA */
+       clrsetbits_le32(&prcm->cm_bypclk_dpll_iva,
+               CM_BYPCLK_DPLL_IVA_CLKSEL_MASK, DPLL_IVA_CLKSEL_CORE_X2_DIV_2);
+
+       params = get_iva_dpll_params();
+       do_setup_dpll(&prcm->cm_clkmode_dpll_iva, params, DPLL_LOCK, "iva");
+
+       /*
+        * USB:
+        * USB dpll is J-type. Need to set DPLL_SD_DIV for jitter correction
+        * DPLL_SD_DIV = CEILING ([DPLL_MULT/(DPLL_DIV+1)]* CLKINP / 250)
+        *      - where CLKINP is sys_clk in MHz
+        * Use CLKINP in KHz and adjust the denominator accordingly so
+        * that we have enough accuracy and at the same time no overflow
+        */
+       params = get_usb_dpll_params();
+       num = params->m * sys_clk_khz;
+       den = (params->n + 1) * 250 * 1000;
+       num += den - 1;
+       sd_div = num / den;
+       clrsetbits_le32(&prcm->cm_clksel_dpll_usb,
+                       CM_CLKSEL_DPLL_DPLL_SD_DIV_MASK,
+                       sd_div << CM_CLKSEL_DPLL_DPLL_SD_DIV_SHIFT);
+
+       /* Now setup the dpll with the regular function */
+       do_setup_dpll(&prcm->cm_clkmode_dpll_usb, params, DPLL_LOCK, "usb");
+
+       /* Configure ABE dpll */
+       params = get_abe_dpll_params();
+#ifdef CONFIG_SYS_OMAP_ABE_SYSCK
+       abe_ref_clk = CM_ABE_PLL_REF_CLKSEL_CLKSEL_SYSCLK;
+#else
+       abe_ref_clk = CM_ABE_PLL_REF_CLKSEL_CLKSEL_32KCLK;
+       /*
+        * We need to enable some additional options to achieve
+        * 196.608MHz from 32768 Hz
+        */
+       setbits_le32(&prcm->cm_clkmode_dpll_abe,
+                       CM_CLKMODE_DPLL_DRIFTGUARD_EN_MASK|
+                       CM_CLKMODE_DPLL_RELOCK_RAMP_EN_MASK|
+                       CM_CLKMODE_DPLL_LPMODE_EN_MASK|
+                       CM_CLKMODE_DPLL_REGM4XEN_MASK);
+       /* Spend 4 REFCLK cycles at each stage */
+       clrsetbits_le32(&prcm->cm_clkmode_dpll_abe,
+                       CM_CLKMODE_DPLL_RAMP_RATE_MASK,
+                       1 << CM_CLKMODE_DPLL_RAMP_RATE_SHIFT);
+#endif
+
+       /* Select the right reference clk */
+       clrsetbits_le32(&prcm->cm_abe_pll_ref_clksel,
+                       CM_ABE_PLL_REF_CLKSEL_CLKSEL_MASK,
+                       abe_ref_clk << CM_ABE_PLL_REF_CLKSEL_CLKSEL_SHIFT);
+       /* Lock the dpll */
+       do_setup_dpll(&prcm->cm_clkmode_dpll_abe, params, DPLL_LOCK, "abe");
+}
+#endif
+
+void do_scale_tps62361(u32 reg, u32 volt_mv)
+{
+       u32 temp, step;
+
+       step = volt_mv - TPS62361_BASE_VOLT_MV;
+       step /= 10;
+
+       temp = TPS62361_I2C_SLAVE_ADDR |
+           (reg << PRM_VC_VAL_BYPASS_REGADDR_SHIFT) |
+           (step << PRM_VC_VAL_BYPASS_DATA_SHIFT) |
+           PRM_VC_VAL_BYPASS_VALID_BIT;
+       debug("do_scale_tps62361: volt - %d step - 0x%x\n", volt_mv, step);
+
+       writel(temp, &prcm->prm_vc_val_bypass);
+       if (!wait_on_value(PRM_VC_VAL_BYPASS_VALID_BIT, 0,
+                               &prcm->prm_vc_val_bypass, LDELAY)) {
+               puts("Scaling voltage failed for vdd_mpu from TPS\n");
+       }
+}
+
+void do_scale_vcore(u32 vcore_reg, u32 volt_mv)
+{
+       u32 temp, offset_code;
+       u32 step = 12660; /* 12.66 mV represented in uV */
+       u32 offset = volt_mv;
+
+       /* convert to uV for better accuracy in the calculations */
+       offset *= 1000;
+
+       if (omap_revision() == OMAP4430_ES1_0)
+               offset -= PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV;
+       else
+               offset -= PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV;
+
+       offset_code = (offset + step - 1) / step;
+       /* The code starts at 1 not 0 */
+       offset_code++;
+
+       debug("do_scale_vcore: volt - %d offset_code - 0x%x\n", volt_mv,
+               offset_code);
+
+       temp = SMPS_I2C_SLAVE_ADDR |
+           (vcore_reg << PRM_VC_VAL_BYPASS_REGADDR_SHIFT) |
+           (offset_code << PRM_VC_VAL_BYPASS_DATA_SHIFT) |
+           PRM_VC_VAL_BYPASS_VALID_BIT;
+       writel(temp, &prcm->prm_vc_val_bypass);
+       if (!wait_on_value(PRM_VC_VAL_BYPASS_VALID_BIT, 0,
+                               &prcm->prm_vc_val_bypass, LDELAY)) {
+               printf("Scaling voltage failed for 0x%x\n", vcore_reg);
+       }
+}
+
+static inline void enable_clock_domain(u32 *const clkctrl_reg, u32 enable_mode)
+{
+       clrsetbits_le32(clkctrl_reg, CD_CLKCTRL_CLKTRCTRL_MASK,
+                       enable_mode << CD_CLKCTRL_CLKTRCTRL_SHIFT);
+       debug("Enable clock domain - %p\n", clkctrl_reg);
+}
+
+static inline void wait_for_clk_enable(u32 *clkctrl_addr)
+{
+       u32 clkctrl, idlest = MODULE_CLKCTRL_IDLEST_DISABLED;
+       u32 bound = LDELAY;
+
+       while ((idlest == MODULE_CLKCTRL_IDLEST_DISABLED) ||
+               (idlest == MODULE_CLKCTRL_IDLEST_TRANSITIONING)) {
+
+               clkctrl = readl(clkctrl_addr);
+               idlest = (clkctrl & MODULE_CLKCTRL_IDLEST_MASK) >>
+                        MODULE_CLKCTRL_IDLEST_SHIFT;
+               if (--bound == 0) {
+                       printf("Clock enable failed for 0x%p idlest 0x%x\n",
+                               clkctrl_addr, clkctrl);
+                       return;
+               }
+       }
+}
+
+static inline void enable_clock_module(u32 *const clkctrl_addr, u32 enable_mode,
+                               u32 wait_for_enable)
+{
+       clrsetbits_le32(clkctrl_addr, MODULE_CLKCTRL_MODULEMODE_MASK,
+                       enable_mode << MODULE_CLKCTRL_MODULEMODE_SHIFT);
+       debug("Enable clock module - %p\n", clkctrl_addr);
+       if (wait_for_enable)
+               wait_for_clk_enable(clkctrl_addr);
+}
+
+void freq_update_core(void)
+{
+       u32 freq_config1 = 0;
+       const struct dpll_params *core_dpll_params;
+
+       core_dpll_params = get_core_dpll_params();
+       /* Put EMIF clock domain in sw wakeup mode */
+       enable_clock_domain(&prcm->cm_memif_clkstctrl,
+                               CD_CLKCTRL_CLKTRCTRL_SW_WKUP);
+       wait_for_clk_enable(&prcm->cm_memif_emif_1_clkctrl);
+       wait_for_clk_enable(&prcm->cm_memif_emif_2_clkctrl);
+
+       freq_config1 = SHADOW_FREQ_CONFIG1_FREQ_UPDATE_MASK |
+           SHADOW_FREQ_CONFIG1_DLL_RESET_MASK;
+
+       freq_config1 |= (DPLL_EN_LOCK << SHADOW_FREQ_CONFIG1_DPLL_EN_SHIFT) &
+                               SHADOW_FREQ_CONFIG1_DPLL_EN_MASK;
+
+       freq_config1 |= (core_dpll_params->m2 <<
+                       SHADOW_FREQ_CONFIG1_M2_DIV_SHIFT) &
+                       SHADOW_FREQ_CONFIG1_M2_DIV_MASK;
+
+       writel(freq_config1, &prcm->cm_shadow_freq_config1);
+       if (!wait_on_value(SHADOW_FREQ_CONFIG1_FREQ_UPDATE_MASK, 0,
+                               &prcm->cm_shadow_freq_config1, LDELAY)) {
+               puts("FREQ UPDATE procedure failed!!");
+               hang();
+       }
+
+       /* Put EMIF clock domain back in hw auto mode */
+       enable_clock_domain(&prcm->cm_memif_clkstctrl,
+                               CD_CLKCTRL_CLKTRCTRL_HW_AUTO);
+       wait_for_clk_enable(&prcm->cm_memif_emif_1_clkctrl);
+       wait_for_clk_enable(&prcm->cm_memif_emif_2_clkctrl);
+}
+
+void bypass_dpll(u32 *const base)
+{
+       do_bypass_dpll(base);
+       wait_for_bypass(base);
+}
+
+void lock_dpll(u32 *const base)
+{
+       do_lock_dpll(base);
+       wait_for_lock(base);
+}
+
+void setup_clocks_for_console(void)
+{
+       /* Do not add any spl_debug prints in this function */
+       clrsetbits_le32(&prcm->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK,
+                       CD_CLKCTRL_CLKTRCTRL_SW_WKUP <<
+                       CD_CLKCTRL_CLKTRCTRL_SHIFT);
+
+       /* Enable all UARTs - console will be on one of them */
+       clrsetbits_le32(&prcm->cm_l4per_uart1_clkctrl,
+                       MODULE_CLKCTRL_MODULEMODE_MASK,
+                       MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
+                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
+
+       clrsetbits_le32(&prcm->cm_l4per_uart2_clkctrl,
+                       MODULE_CLKCTRL_MODULEMODE_MASK,
+                       MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
+                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
+
+       clrsetbits_le32(&prcm->cm_l4per_uart3_clkctrl,
+                       MODULE_CLKCTRL_MODULEMODE_MASK,
+                       MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
+                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
+
+       clrsetbits_le32(&prcm->cm_l4per_uart3_clkctrl,
+                       MODULE_CLKCTRL_MODULEMODE_MASK,
+                       MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
+                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
+
+       clrsetbits_le32(&prcm->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK,
+                       CD_CLKCTRL_CLKTRCTRL_HW_AUTO <<
+                       CD_CLKCTRL_CLKTRCTRL_SHIFT);
+}
+
+void setup_sri2c(void)
+{
+       u32 sys_clk_khz, cycles_hi, cycles_low, temp;
+
+       sys_clk_khz = get_sys_clk_freq() / 1000;
+
+       /*
+        * Setup the dedicated I2C controller for Voltage Control
+        * I2C clk - high period 40% low period 60%
+        */
+       cycles_hi = sys_clk_khz * 4 / PRM_VC_I2C_CHANNEL_FREQ_KHZ / 10;
+       cycles_low = sys_clk_khz * 6 / PRM_VC_I2C_CHANNEL_FREQ_KHZ / 10;
+       /* values to be set in register - less by 5 & 7 respectively */
+       cycles_hi -= 5;
+       cycles_low -= 7;
+       temp = (cycles_hi << PRM_VC_CFG_I2C_CLK_SCLH_SHIFT) |
+              (cycles_low << PRM_VC_CFG_I2C_CLK_SCLL_SHIFT);
+       writel(temp, &prcm->prm_vc_cfg_i2c_clk);
+
+       /* Disable high speed mode and all advanced features */
+       writel(0x0, &prcm->prm_vc_cfg_i2c_mode);
+}
+
+void do_enable_clocks(u32 *const *clk_domains,
+                           u32 *const *clk_modules_hw_auto,
+                           u32 *const *clk_modules_explicit_en,
+                           u8 wait_for_enable)
+{
+       u32 i, max = 100;
+
+       /* Put the clock domains in SW_WKUP mode */
+       for (i = 0; (i < max) && clk_domains[i]; i++) {
+               enable_clock_domain(clk_domains[i],
+                                   CD_CLKCTRL_CLKTRCTRL_SW_WKUP);
+       }
+
+       /* Clock modules that need to be put in HW_AUTO */
+       for (i = 0; (i < max) && clk_modules_hw_auto[i]; i++) {
+               enable_clock_module(clk_modules_hw_auto[i],
+                                   MODULE_CLKCTRL_MODULEMODE_HW_AUTO,
+                                   wait_for_enable);
+       };
+
+       /* Clock modules that need to be put in SW_EXPLICIT_EN mode */
+       for (i = 0; (i < max) && clk_modules_explicit_en[i]; i++) {
+               enable_clock_module(clk_modules_explicit_en[i],
+                                   MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN,
+                                   wait_for_enable);
+       };
+
+       /* Put the clock domains in HW_AUTO mode now */
+       for (i = 0; (i < max) && clk_domains[i]; i++) {
+               enable_clock_domain(clk_domains[i],
+                                   CD_CLKCTRL_CLKTRCTRL_HW_AUTO);
+       }
+}
+
+void prcm_init(void)
+{
+       switch (omap_hw_init_context()) {
+       case OMAP_INIT_CONTEXT_SPL:
+       case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR:
+       case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH:
+               enable_basic_clocks();
+               scale_vcores();
+               setup_dplls();
+#ifdef CONFIG_SYS_CLOCKS_ENABLE_ALL
+               setup_non_essential_dplls();
+               enable_non_essential_clocks();
+#endif
+               break;
+       default:
+               break;
+       }
+
+       if (OMAP_INIT_CONTEXT_SPL != omap_hw_init_context())
+               enable_basic_uboot_clocks();
+}
diff --git a/arch/arm/cpu/armv7/omap-common/emif-common.c b/arch/arm/cpu/armv7/omap-common/emif-common.c
new file mode 100644 (file)
index 0000000..62678ff
--- /dev/null
@@ -0,0 +1,1140 @@
+/*
+ * EMIF programming
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Aneesh V <aneesh@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 <common.h>
+#include <asm/emif.h>
+#include <asm/arch/clocks.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/omap_common.h>
+#include <asm/utils.h>
+
+inline u32 emif_num(u32 base)
+{
+       if (base == EMIF1_BASE)
+               return 1;
+       else if (base == EMIF2_BASE)
+               return 2;
+       else
+               return 0;
+}
+
+
+static inline u32 get_mr(u32 base, u32 cs, u32 mr_addr)
+{
+       u32 mr;
+       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
+
+       mr_addr |= cs << EMIF_REG_CS_SHIFT;
+       writel(mr_addr, &emif->emif_lpddr2_mode_reg_cfg);
+       if (omap_revision() == OMAP4430_ES2_0)
+               mr = readl(&emif->emif_lpddr2_mode_reg_data_es2);
+       else
+               mr = readl(&emif->emif_lpddr2_mode_reg_data);
+       debug("get_mr: EMIF%d cs %d mr %08x val 0x%x\n", emif_num(base),
+             cs, mr_addr, mr);
+       return mr;
+}
+
+static inline void set_mr(u32 base, u32 cs, u32 mr_addr, u32 mr_val)
+{
+       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
+
+       mr_addr |= cs << EMIF_REG_CS_SHIFT;
+       writel(mr_addr, &emif->emif_lpddr2_mode_reg_cfg);
+       writel(mr_val, &emif->emif_lpddr2_mode_reg_data);
+}
+
+void emif_reset_phy(u32 base)
+{
+       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
+       u32 iodft;
+
+       iodft = readl(&emif->emif_iodft_tlgc);
+       iodft |= EMIF_REG_RESET_PHY_MASK;
+       writel(iodft, &emif->emif_iodft_tlgc);
+}
+
+static void do_lpddr2_init(u32 base, u32 cs)
+{
+       u32 mr_addr;
+
+       /* Wait till device auto initialization is complete */
+       while (get_mr(base, cs, LPDDR2_MR0) & LPDDR2_MR0_DAI_MASK)
+               ;
+       set_mr(base, cs, LPDDR2_MR10, MR10_ZQ_ZQINIT);
+       /*
+        * tZQINIT = 1 us
+        * Enough loops assuming a maximum of 2GHz
+        */
+       sdelay(2000);
+       set_mr(base, cs, LPDDR2_MR1, MR1_BL_8_BT_SEQ_WRAP_EN_NWR_3);
+       set_mr(base, cs, LPDDR2_MR16, MR16_REF_FULL_ARRAY);
+       /*
+        * Enable refresh along with writing MR2
+        * Encoding of RL in MR2 is (RL - 2)
+        */
+       mr_addr = LPDDR2_MR2 | EMIF_REG_REFRESH_EN_MASK;
+       set_mr(base, cs, mr_addr, RL_FINAL - 2);
+}
+
+static void lpddr2_init(u32 base, const struct emif_regs *regs)
+{
+       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
+
+       /* Not NVM */
+       clrbits_le32(&emif->emif_lpddr2_nvm_config, EMIF_REG_CS1NVMEN_MASK);
+
+       /*
+        * Keep REG_INITREF_DIS = 1 to prevent re-initialization of SDRAM
+        * when EMIF_SDRAM_CONFIG register is written
+        */
+       setbits_le32(&emif->emif_sdram_ref_ctrl, EMIF_REG_INITREF_DIS_MASK);
+
+       /*
+        * Set the SDRAM_CONFIG and PHY_CTRL for the
+        * un-locked frequency & default RL
+        */
+       writel(regs->sdram_config_init, &emif->emif_sdram_config);
+       writel(regs->emif_ddr_phy_ctlr_1_init, &emif->emif_ddr_phy_ctrl_1);
+
+       do_lpddr2_init(base, CS0);
+       if (regs->sdram_config & EMIF_REG_EBANK_MASK)
+               do_lpddr2_init(base, CS1);
+
+       writel(regs->sdram_config, &emif->emif_sdram_config);
+       writel(regs->emif_ddr_phy_ctlr_1, &emif->emif_ddr_phy_ctrl_1);
+
+       /* Enable refresh now */
+       clrbits_le32(&emif->emif_sdram_ref_ctrl, EMIF_REG_INITREF_DIS_MASK);
+
+}
+
+void emif_update_timings(u32 base, const struct emif_regs *regs)
+{
+       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
+
+       writel(regs->ref_ctrl, &emif->emif_sdram_ref_ctrl_shdw);
+       writel(regs->sdram_tim1, &emif->emif_sdram_tim_1_shdw);
+       writel(regs->sdram_tim2, &emif->emif_sdram_tim_2_shdw);
+       writel(regs->sdram_tim3, &emif->emif_sdram_tim_3_shdw);
+       if (omap_revision() == OMAP4430_ES1_0) {
+               /* ES1 bug EMIF should be in force idle during freq_update */
+               writel(0, &emif->emif_pwr_mgmt_ctrl);
+       } else {
+               writel(EMIF_PWR_MGMT_CTRL, &emif->emif_pwr_mgmt_ctrl);
+               writel(EMIF_PWR_MGMT_CTRL_SHDW, &emif->emif_pwr_mgmt_ctrl_shdw);
+       }
+       writel(regs->read_idle_ctrl, &emif->emif_read_idlectrl_shdw);
+       writel(regs->zq_config, &emif->emif_zq_config);
+       writel(regs->temp_alert_config, &emif->emif_temp_alert_config);
+       writel(regs->emif_ddr_phy_ctlr_1, &emif->emif_ddr_phy_ctrl_1_shdw);
+
+       if (omap_revision() == OMAP5430_ES1_0) {
+               writel(EMIF_L3_CONFIG_VAL_SYS_10_MPU_5_LL_0,
+                       &emif->emif_l3_config);
+       } else if (omap_revision() >= OMAP4460_ES1_0) {
+               writel(EMIF_L3_CONFIG_VAL_SYS_10_MPU_3_LL_0,
+                       &emif->emif_l3_config);
+       } else {
+               writel(EMIF_L3_CONFIG_VAL_SYS_10_LL_0,
+                       &emif->emif_l3_config);
+       }
+}
+
+#ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+#define print_timing_reg(reg) debug(#reg" - 0x%08x\n", (reg))
+
+/*
+ * Organization and refresh requirements for LPDDR2 devices of different
+ * types and densities. Derived from JESD209-2 section 2.4
+ */
+const struct lpddr2_addressing addressing_table[] = {
+       /* Banks tREFIx10     rowx32,rowx16      colx32,colx16  density */
+       {BANKS4, T_REFI_15_6, {ROW_12, ROW_12}, {COL_7, COL_8} },/*64M */
+       {BANKS4, T_REFI_15_6, {ROW_12, ROW_12}, {COL_8, COL_9} },/*128M */
+       {BANKS4, T_REFI_7_8, {ROW_13, ROW_13}, {COL_8, COL_9} },/*256M */
+       {BANKS4, T_REFI_7_8, {ROW_13, ROW_13}, {COL_9, COL_10} },/*512M */
+       {BANKS8, T_REFI_7_8, {ROW_13, ROW_13}, {COL_9, COL_10} },/*1GS4 */
+       {BANKS8, T_REFI_3_9, {ROW_14, ROW_14}, {COL_9, COL_10} },/*2GS4 */
+       {BANKS8, T_REFI_3_9, {ROW_14, ROW_14}, {COL_10, COL_11} },/*4G */
+       {BANKS8, T_REFI_3_9, {ROW_15, ROW_15}, {COL_10, COL_11} },/*8G */
+       {BANKS4, T_REFI_7_8, {ROW_14, ROW_14}, {COL_9, COL_10} },/*1GS2 */
+       {BANKS4, T_REFI_3_9, {ROW_15, ROW_15}, {COL_9, COL_10} },/*2GS2 */
+};
+
+static const u32 lpddr2_density_2_size_in_mbytes[] = {
+       8,                      /* 64Mb */
+       16,                     /* 128Mb */
+       32,                     /* 256Mb */
+       64,                     /* 512Mb */
+       128,                    /* 1Gb   */
+       256,                    /* 2Gb   */
+       512,                    /* 4Gb   */
+       1024,                   /* 8Gb   */
+       2048,                   /* 16Gb  */
+       4096                    /* 32Gb  */
+};
+
+/*
+ * Calculate the period of DDR clock from frequency value and set the
+ * denominator and numerator in global variables for easy access later
+ */
+static void set_ddr_clk_period(u32 freq)
+{
+       /*
+        * period = 1/freq
+        * period_in_ns = 10^9/freq
+        */
+       *T_num = 1000000000;
+       *T_den = freq;
+       cancel_out(T_num, T_den, 200);
+
+}
+
+/*
+ * Convert time in nano seconds to number of cycles of DDR clock
+ */
+static inline u32 ns_2_cycles(u32 ns)
+{
+       return ((ns * (*T_den)) + (*T_num) - 1) / (*T_num);
+}
+
+/*
+ * ns_2_cycles with the difference that the time passed is 2 times the actual
+ * value(to avoid fractions). The cycles returned is for the original value of
+ * the timing parameter
+ */
+static inline u32 ns_x2_2_cycles(u32 ns)
+{
+       return ((ns * (*T_den)) + (*T_num) * 2 - 1) / ((*T_num) * 2);
+}
+
+/*
+ * Find addressing table index based on the device's type(S2 or S4) and
+ * density
+ */
+s8 addressing_table_index(u8 type, u8 density, u8 width)
+{
+       u8 index;
+       if ((density > LPDDR2_DENSITY_8Gb) || (width == LPDDR2_IO_WIDTH_8))
+               return -1;
+
+       /*
+        * Look at the way ADDR_TABLE_INDEX* values have been defined
+        * in emif.h compared to LPDDR2_DENSITY_* values
+        * The table is layed out in the increasing order of density
+        * (ignoring type). The exceptions 1GS2 and 2GS2 have been placed
+        * at the end
+        */
+       if ((type == LPDDR2_TYPE_S2) && (density == LPDDR2_DENSITY_1Gb))
+               index = ADDR_TABLE_INDEX1GS2;
+       else if ((type == LPDDR2_TYPE_S2) && (density == LPDDR2_DENSITY_2Gb))
+               index = ADDR_TABLE_INDEX2GS2;
+       else
+               index = density;
+
+       debug("emif: addressing table index %d\n", index);
+
+       return index;
+}
+
+/*
+ * Find the the right timing table from the array of timing
+ * tables of the device using DDR clock frequency
+ */
+static const struct lpddr2_ac_timings *get_timings_table(const struct
+                       lpddr2_ac_timings const *const *device_timings,
+                       u32 freq)
+{
+       u32 i, temp, freq_nearest;
+       const struct lpddr2_ac_timings *timings = 0;
+
+       emif_assert(freq <= MAX_LPDDR2_FREQ);
+       emif_assert(device_timings);
+
+       /*
+        * Start with the maximum allowed frequency - that is always safe
+        */
+       freq_nearest = MAX_LPDDR2_FREQ;
+       /*
+        * Find the timings table that has the max frequency value:
+        *   i.  Above or equal to the DDR frequency - safe
+        *   ii. The lowest that satisfies condition (i) - optimal
+        */
+       for (i = 0; (i < MAX_NUM_SPEEDBINS) && device_timings[i]; i++) {
+               temp = device_timings[i]->max_freq;
+               if ((temp >= freq) && (temp <= freq_nearest)) {
+                       freq_nearest = temp;
+                       timings = device_timings[i];
+               }
+       }
+       debug("emif: timings table: %d\n", freq_nearest);
+       return timings;
+}
+
+/*
+ * Finds the value of emif_sdram_config_reg
+ * All parameters are programmed based on the device on CS0.
+ * If there is a device on CS1, it will be same as that on CS0 or
+ * it will be NVM. We don't support NVM yet.
+ * If cs1_device pointer is NULL it is assumed that there is no device
+ * on CS1
+ */
+static u32 get_sdram_config_reg(const struct lpddr2_device_details *cs0_device,
+                               const struct lpddr2_device_details *cs1_device,
+                               const struct lpddr2_addressing *addressing,
+                               u8 RL)
+{
+       u32 config_reg = 0;
+
+       config_reg |=  (cs0_device->type + 4) << EMIF_REG_SDRAM_TYPE_SHIFT;
+       config_reg |=  EMIF_INTERLEAVING_POLICY_MAX_INTERLEAVING <<
+                       EMIF_REG_IBANK_POS_SHIFT;
+
+       config_reg |= cs0_device->io_width << EMIF_REG_NARROW_MODE_SHIFT;
+
+       config_reg |= RL << EMIF_REG_CL_SHIFT;
+
+       config_reg |= addressing->row_sz[cs0_device->io_width] <<
+                       EMIF_REG_ROWSIZE_SHIFT;
+
+       config_reg |= addressing->num_banks << EMIF_REG_IBANK_SHIFT;
+
+       config_reg |= (cs1_device ? EBANK_CS1_EN : EBANK_CS1_DIS) <<
+                       EMIF_REG_EBANK_SHIFT;
+
+       config_reg |= addressing->col_sz[cs0_device->io_width] <<
+                       EMIF_REG_PAGESIZE_SHIFT;
+
+       return config_reg;
+}
+
+static u32 get_sdram_ref_ctrl(u32 freq,
+                             const struct lpddr2_addressing *addressing)
+{
+       u32 ref_ctrl = 0, val = 0, freq_khz;
+       freq_khz = freq / 1000;
+       /*
+        * refresh rate to be set is 'tREFI * freq in MHz
+        * division by 10000 to account for khz and x10 in t_REFI_us_x10
+        */
+       val = addressing->t_REFI_us_x10 * freq_khz / 10000;
+       ref_ctrl |= val << EMIF_REG_REFRESH_RATE_SHIFT;
+
+       return ref_ctrl;
+}
+
+static u32 get_sdram_tim_1_reg(const struct lpddr2_ac_timings *timings,
+                              const struct lpddr2_min_tck *min_tck,
+                              const struct lpddr2_addressing *addressing)
+{
+       u32 tim1 = 0, val = 0;
+       val = max(min_tck->tWTR, ns_x2_2_cycles(timings->tWTRx2)) - 1;
+       tim1 |= val << EMIF_REG_T_WTR_SHIFT;
+
+       if (addressing->num_banks == BANKS8)
+               val = (timings->tFAW * (*T_den) + 4 * (*T_num) - 1) /
+                                                       (4 * (*T_num)) - 1;
+       else
+               val = max(min_tck->tRRD, ns_2_cycles(timings->tRRD)) - 1;
+
+       tim1 |= val << EMIF_REG_T_RRD_SHIFT;
+
+       val = ns_2_cycles(timings->tRASmin + timings->tRPab) - 1;
+       tim1 |= val << EMIF_REG_T_RC_SHIFT;
+
+       val = max(min_tck->tRAS_MIN, ns_2_cycles(timings->tRASmin)) - 1;
+       tim1 |= val << EMIF_REG_T_RAS_SHIFT;
+
+       val = max(min_tck->tWR, ns_2_cycles(timings->tWR)) - 1;
+       tim1 |= val << EMIF_REG_T_WR_SHIFT;
+
+       val = max(min_tck->tRCD, ns_2_cycles(timings->tRCD)) - 1;
+       tim1 |= val << EMIF_REG_T_RCD_SHIFT;
+
+       val = max(min_tck->tRP_AB, ns_2_cycles(timings->tRPab)) - 1;
+       tim1 |= val << EMIF_REG_T_RP_SHIFT;
+
+       return tim1;
+}
+
+static u32 get_sdram_tim_2_reg(const struct lpddr2_ac_timings *timings,
+                              const struct lpddr2_min_tck *min_tck)
+{
+       u32 tim2 = 0, val = 0;
+       val = max(min_tck->tCKE, timings->tCKE) - 1;
+       tim2 |= val << EMIF_REG_T_CKE_SHIFT;
+
+       val = max(min_tck->tRTP, ns_x2_2_cycles(timings->tRTPx2)) - 1;
+       tim2 |= val << EMIF_REG_T_RTP_SHIFT;
+
+       /*
+        * tXSRD = tRFCab + 10 ns. XSRD and XSNR should have the
+        * same value
+        */
+       val = ns_2_cycles(timings->tXSR) - 1;
+       tim2 |= val << EMIF_REG_T_XSRD_SHIFT;
+       tim2 |= val << EMIF_REG_T_XSNR_SHIFT;
+
+       val = max(min_tck->tXP, ns_x2_2_cycles(timings->tXPx2)) - 1;
+       tim2 |= val << EMIF_REG_T_XP_SHIFT;
+
+       return tim2;
+}
+
+static u32 get_sdram_tim_3_reg(const struct lpddr2_ac_timings *timings,
+                              const struct lpddr2_min_tck *min_tck,
+                              const struct lpddr2_addressing *addressing)
+{
+       u32 tim3 = 0, val = 0;
+       val = min(timings->tRASmax * 10 / addressing->t_REFI_us_x10 - 1, 0xF);
+       tim3 |= val << EMIF_REG_T_RAS_MAX_SHIFT;
+
+       val = ns_2_cycles(timings->tRFCab) - 1;
+       tim3 |= val << EMIF_REG_T_RFC_SHIFT;
+
+       val = ns_x2_2_cycles(timings->tDQSCKMAXx2) - 1;
+       tim3 |= val << EMIF_REG_T_TDQSCKMAX_SHIFT;
+
+       val = ns_2_cycles(timings->tZQCS) - 1;
+       tim3 |= val << EMIF_REG_ZQ_ZQCS_SHIFT;
+
+       val = max(min_tck->tCKESR, ns_2_cycles(timings->tCKESR)) - 1;
+       tim3 |= val << EMIF_REG_T_CKESR_SHIFT;
+
+       return tim3;
+}
+
+static u32 get_zq_config_reg(const struct lpddr2_device_details *cs1_device,
+                            const struct lpddr2_addressing *addressing,
+                            u8 volt_ramp)
+{
+       u32 zq = 0, val = 0;
+       if (volt_ramp)
+               val =
+                   EMIF_ZQCS_INTERVAL_DVFS_IN_US * 10 /
+                   addressing->t_REFI_us_x10;
+       else
+               val =
+                   EMIF_ZQCS_INTERVAL_NORMAL_IN_US * 10 /
+                   addressing->t_REFI_us_x10;
+       zq |= val << EMIF_REG_ZQ_REFINTERVAL_SHIFT;
+
+       zq |= (REG_ZQ_ZQCL_MULT - 1) << EMIF_REG_ZQ_ZQCL_MULT_SHIFT;
+
+       zq |= (REG_ZQ_ZQINIT_MULT - 1) << EMIF_REG_ZQ_ZQINIT_MULT_SHIFT;
+
+       zq |= REG_ZQ_SFEXITEN_ENABLE << EMIF_REG_ZQ_SFEXITEN_SHIFT;
+
+       /*
+        * Assuming that two chipselects have a single calibration resistor
+        * If there are indeed two calibration resistors, then this flag should
+        * be enabled to take advantage of dual calibration feature.
+        * This data should ideally come from board files. But considering
+        * that none of the boards today have calibration resistors per CS,
+        * it would be an unnecessary overhead.
+        */
+       zq |= REG_ZQ_DUALCALEN_DISABLE << EMIF_REG_ZQ_DUALCALEN_SHIFT;
+
+       zq |= REG_ZQ_CS0EN_ENABLE << EMIF_REG_ZQ_CS0EN_SHIFT;
+
+       zq |= (cs1_device ? 1 : 0) << EMIF_REG_ZQ_CS1EN_SHIFT;
+
+       return zq;
+}
+
+static u32 get_temp_alert_config(const struct lpddr2_device_details *cs1_device,
+                                const struct lpddr2_addressing *addressing,
+                                u8 is_derated)
+{
+       u32 alert = 0, interval;
+       interval =
+           TEMP_ALERT_POLL_INTERVAL_MS * 10000 / addressing->t_REFI_us_x10;
+       if (is_derated)
+               interval *= 4;
+       alert |= interval << EMIF_REG_TA_REFINTERVAL_SHIFT;
+
+       alert |= TEMP_ALERT_CONFIG_DEVCT_1 << EMIF_REG_TA_DEVCNT_SHIFT;
+
+       alert |= TEMP_ALERT_CONFIG_DEVWDT_32 << EMIF_REG_TA_DEVWDT_SHIFT;
+
+       alert |= 1 << EMIF_REG_TA_SFEXITEN_SHIFT;
+
+       alert |= 1 << EMIF_REG_TA_CS0EN_SHIFT;
+
+       alert |= (cs1_device ? 1 : 0) << EMIF_REG_TA_CS1EN_SHIFT;
+
+       return alert;
+}
+
+static u32 get_read_idle_ctrl_reg(u8 volt_ramp)
+{
+       u32 idle = 0, val = 0;
+       if (volt_ramp)
+               val = ns_2_cycles(READ_IDLE_INTERVAL_DVFS) / 64 - 1;
+       else
+               /*Maximum value in normal conditions - suggested by hw team */
+               val = 0x1FF;
+       idle |= val << EMIF_REG_READ_IDLE_INTERVAL_SHIFT;
+
+       idle |= EMIF_REG_READ_IDLE_LEN_VAL << EMIF_REG_READ_IDLE_LEN_SHIFT;
+
+       return idle;
+}
+
+static u32 get_ddr_phy_ctrl_1(u32 freq, u8 RL)
+{
+       u32 phy = 0, val = 0;
+
+       phy |= (RL + 2) << EMIF_REG_READ_LATENCY_SHIFT;
+
+       if (freq <= 100000000)
+               val = EMIF_DLL_SLAVE_DLY_CTRL_100_MHZ_AND_LESS;
+       else if (freq <= 200000000)
+               val = EMIF_DLL_SLAVE_DLY_CTRL_200_MHZ;
+       else
+               val = EMIF_DLL_SLAVE_DLY_CTRL_400_MHZ;
+       phy |= val << EMIF_REG_DLL_SLAVE_DLY_CTRL_SHIFT;
+
+       /* Other fields are constant magic values. Hardcode them together */
+       phy |= EMIF_DDR_PHY_CTRL_1_BASE_VAL <<
+               EMIF_EMIF_DDR_PHY_CTRL_1_BASE_VAL_SHIFT;
+
+       return phy;
+}
+
+static u32 get_emif_mem_size(struct emif_device_details *devices)
+{
+       u32 size_mbytes = 0, temp;
+
+       if (!devices)
+               return 0;
+
+       if (devices->cs0_device_details) {
+               temp = devices->cs0_device_details->density;
+               size_mbytes += lpddr2_density_2_size_in_mbytes[temp];
+       }
+
+       if (devices->cs1_device_details) {
+               temp = devices->cs1_device_details->density;
+               size_mbytes += lpddr2_density_2_size_in_mbytes[temp];
+       }
+       /* convert to bytes */
+       return size_mbytes << 20;
+}
+
+/* Gets the encoding corresponding to a given DMM section size */
+u32 get_dmm_section_size_map(u32 section_size)
+{
+       /*
+        * Section size mapping:
+        * 0x0: 16-MiB section
+        * 0x1: 32-MiB section
+        * 0x2: 64-MiB section
+        * 0x3: 128-MiB section
+        * 0x4: 256-MiB section
+        * 0x5: 512-MiB section
+        * 0x6: 1-GiB section
+        * 0x7: 2-GiB section
+        */
+       section_size >>= 24; /* divide by 16 MB */
+       return log_2_n_round_down(section_size);
+}
+
+static void emif_calculate_regs(
+               const struct emif_device_details *emif_dev_details,
+               u32 freq, struct emif_regs *regs)
+{
+       u32 temp, sys_freq;
+       const struct lpddr2_addressing *addressing;
+       const struct lpddr2_ac_timings *timings;
+       const struct lpddr2_min_tck *min_tck;
+       const struct lpddr2_device_details *cs0_dev_details =
+                                       emif_dev_details->cs0_device_details;
+       const struct lpddr2_device_details *cs1_dev_details =
+                                       emif_dev_details->cs1_device_details;
+       const struct lpddr2_device_timings *cs0_dev_timings =
+                                       emif_dev_details->cs0_device_timings;
+
+       emif_assert(emif_dev_details);
+       emif_assert(regs);
+       /*
+        * You can not have a device on CS1 without one on CS0
+        * So configuring EMIF without a device on CS0 doesn't
+        * make sense
+        */
+       emif_assert(cs0_dev_details);
+       emif_assert(cs0_dev_details->type != LPDDR2_TYPE_NVM);
+       /*
+        * If there is a device on CS1 it should be same type as CS0
+        * (or NVM. But NVM is not supported in this driver yet)
+        */
+       emif_assert((cs1_dev_details == NULL) ||
+                   (cs1_dev_details->type == LPDDR2_TYPE_NVM) ||
+                   (cs0_dev_details->type == cs1_dev_details->type));
+       emif_assert(freq <= MAX_LPDDR2_FREQ);
+
+       set_ddr_clk_period(freq);
+
+       /*
+        * The device on CS0 is used for all timing calculations
+        * There is only one set of registers for timings per EMIF. So, if the
+        * second CS(CS1) has a device, it should have the same timings as the
+        * device on CS0
+        */
+       timings = get_timings_table(cs0_dev_timings->ac_timings, freq);
+       emif_assert(timings);
+       min_tck = cs0_dev_timings->min_tck;
+
+       temp = addressing_table_index(cs0_dev_details->type,
+                                     cs0_dev_details->density,
+                                     cs0_dev_details->io_width);
+
+       emif_assert((temp >= 0));
+       addressing = &(addressing_table[temp]);
+       emif_assert(addressing);
+
+       sys_freq = get_sys_clk_freq();
+
+       regs->sdram_config_init = get_sdram_config_reg(cs0_dev_details,
+                                                       cs1_dev_details,
+                                                       addressing, RL_BOOT);
+
+       regs->sdram_config = get_sdram_config_reg(cs0_dev_details,
+                                               cs1_dev_details,
+                                               addressing, RL_FINAL);
+
+       regs->ref_ctrl = get_sdram_ref_ctrl(freq, addressing);
+
+       regs->sdram_tim1 = get_sdram_tim_1_reg(timings, min_tck, addressing);
+
+       regs->sdram_tim2 = get_sdram_tim_2_reg(timings, min_tck);
+
+       regs->sdram_tim3 = get_sdram_tim_3_reg(timings, min_tck, addressing);
+
+       regs->read_idle_ctrl = get_read_idle_ctrl_reg(LPDDR2_VOLTAGE_STABLE);
+
+       regs->temp_alert_config =
+           get_temp_alert_config(cs1_dev_details, addressing, 0);
+
+       regs->zq_config = get_zq_config_reg(cs1_dev_details, addressing,
+                                           LPDDR2_VOLTAGE_STABLE);
+
+       regs->emif_ddr_phy_ctlr_1_init =
+                       get_ddr_phy_ctrl_1(sys_freq / 2, RL_BOOT);
+
+       regs->emif_ddr_phy_ctlr_1 =
+                       get_ddr_phy_ctrl_1(freq, RL_FINAL);
+
+       regs->freq = freq;
+
+       print_timing_reg(regs->sdram_config_init);
+       print_timing_reg(regs->sdram_config);
+       print_timing_reg(regs->ref_ctrl);
+       print_timing_reg(regs->sdram_tim1);
+       print_timing_reg(regs->sdram_tim2);
+       print_timing_reg(regs->sdram_tim3);
+       print_timing_reg(regs->read_idle_ctrl);
+       print_timing_reg(regs->temp_alert_config);
+       print_timing_reg(regs->zq_config);
+       print_timing_reg(regs->emif_ddr_phy_ctlr_1);
+       print_timing_reg(regs->emif_ddr_phy_ctlr_1_init);
+}
+#endif /* CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS */
+
+#ifdef CONFIG_SYS_AUTOMATIC_SDRAM_DETECTION
+const char *get_lpddr2_type(u8 type_id)
+{
+       switch (type_id) {
+       case LPDDR2_TYPE_S4:
+               return "LPDDR2-S4";
+       case LPDDR2_TYPE_S2:
+               return "LPDDR2-S2";
+       default:
+               return NULL;
+       }
+}
+
+const char *get_lpddr2_io_width(u8 width_id)
+{
+       switch (width_id) {
+       case LPDDR2_IO_WIDTH_8:
+               return "x8";
+       case LPDDR2_IO_WIDTH_16:
+               return "x16";
+       case LPDDR2_IO_WIDTH_32:
+               return "x32";
+       default:
+               return NULL;
+       }
+}
+
+const char *get_lpddr2_manufacturer(u32 manufacturer)
+{
+       switch (manufacturer) {
+       case LPDDR2_MANUFACTURER_SAMSUNG:
+               return "Samsung";
+       case LPDDR2_MANUFACTURER_QIMONDA:
+               return "Qimonda";
+       case LPDDR2_MANUFACTURER_ELPIDA:
+               return "Elpida";
+       case LPDDR2_MANUFACTURER_ETRON:
+               return "Etron";
+       case LPDDR2_MANUFACTURER_NANYA:
+               return "Nanya";
+       case LPDDR2_MANUFACTURER_HYNIX:
+               return "Hynix";
+       case LPDDR2_MANUFACTURER_MOSEL:
+               return "Mosel";
+       case LPDDR2_MANUFACTURER_WINBOND:
+               return "Winbond";
+       case LPDDR2_MANUFACTURER_ESMT:
+               return "ESMT";
+       case LPDDR2_MANUFACTURER_SPANSION:
+               return "Spansion";
+       case LPDDR2_MANUFACTURER_SST:
+               return "SST";
+       case LPDDR2_MANUFACTURER_ZMOS:
+               return "ZMOS";
+       case LPDDR2_MANUFACTURER_INTEL:
+               return "Intel";
+       case LPDDR2_MANUFACTURER_NUMONYX:
+               return "Numonyx";
+       case LPDDR2_MANUFACTURER_MICRON:
+               return "Micron";
+       default:
+               return NULL;
+       }
+}
+
+static void display_sdram_details(u32 emif_nr, u32 cs,
+                                 struct lpddr2_device_details *device)
+{
+       const char *mfg_str;
+       const char *type_str;
+       char density_str[10];
+       u32 density;
+
+       debug("EMIF%d CS%d\t", emif_nr, cs);
+
+       if (!device) {
+               debug("None\n");
+               return;
+       }
+
+       mfg_str = get_lpddr2_manufacturer(device->manufacturer);
+       type_str = get_lpddr2_type(device->type);
+
+       density = lpddr2_density_2_size_in_mbytes[device->density];
+       if ((density / 1024 * 1024) == density) {
+               density /= 1024;
+               sprintf(density_str, "%d GB", density);
+       } else
+               sprintf(density_str, "%d MB", density);
+       if (mfg_str && type_str)
+               debug("%s\t\t%s\t%s\n", mfg_str, type_str, density_str);
+}
+
+static u8 is_lpddr2_sdram_present(u32 base, u32 cs,
+                                 struct lpddr2_device_details *lpddr2_device)
+{
+       u32 mr = 0, temp;
+
+       mr = get_mr(base, cs, LPDDR2_MR0);
+       if (mr > 0xFF) {
+               /* Mode register value bigger than 8 bit */
+               return 0;
+       }
+
+       temp = (mr & LPDDR2_MR0_DI_MASK) >> LPDDR2_MR0_DI_SHIFT;
+       if (temp) {
+               /* Not SDRAM */
+               return 0;
+       }
+       temp = (mr & LPDDR2_MR0_DNVI_MASK) >> LPDDR2_MR0_DNVI_SHIFT;
+
+       if (temp) {
+               /* DNV supported - But DNV is only supported for NVM */
+               return 0;
+       }
+
+       mr = get_mr(base, cs, LPDDR2_MR4);
+       if (mr > 0xFF) {
+               /* Mode register value bigger than 8 bit */
+               return 0;
+       }
+
+       mr = get_mr(base, cs, LPDDR2_MR5);
+       if (mr >= 0xFF) {
+               /* Mode register value bigger than 8 bit */
+               return 0;
+       }
+
+       if (!get_lpddr2_manufacturer(mr)) {
+               /* Manufacturer not identified */
+               return 0;
+       }
+       lpddr2_device->manufacturer = mr;
+
+       mr = get_mr(base, cs, LPDDR2_MR6);
+       if (mr >= 0xFF) {
+               /* Mode register value bigger than 8 bit */
+               return 0;
+       }
+
+       mr = get_mr(base, cs, LPDDR2_MR7);
+       if (mr >= 0xFF) {
+               /* Mode register value bigger than 8 bit */
+               return 0;
+       }
+
+       mr = get_mr(base, cs, LPDDR2_MR8);
+       if (mr >= 0xFF) {
+               /* Mode register value bigger than 8 bit */
+               return 0;
+       }
+
+       temp = (mr & MR8_TYPE_MASK) >> MR8_TYPE_SHIFT;
+       if (!get_lpddr2_type(temp)) {
+               /* Not SDRAM */
+               return 0;
+       }
+       lpddr2_device->type = temp;
+
+       temp = (mr & MR8_DENSITY_MASK) >> MR8_DENSITY_SHIFT;
+       if (temp > LPDDR2_DENSITY_32Gb) {
+               /* Density not supported */
+               return 0;
+       }
+       lpddr2_device->density = temp;
+
+       temp = (mr & MR8_IO_WIDTH_MASK) >> MR8_IO_WIDTH_SHIFT;
+       if (!get_lpddr2_io_width(temp)) {
+               /* IO width unsupported value */
+               return 0;
+       }
+       lpddr2_device->io_width = temp;
+
+       /*
+        * If all the above tests pass we should
+        * have a device on this chip-select
+        */
+       return 1;
+}
+
+struct lpddr2_device_details *emif_get_device_details(u32 emif_nr, u8 cs,
+                       struct lpddr2_device_details *lpddr2_dev_details)
+{
+       u32 phy;
+       u32 base = (emif_nr == 1) ? EMIF1_BASE : EMIF2_BASE;
+
+       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
+
+       if (!lpddr2_dev_details)
+               return NULL;
+
+       /* Do the minimum init for mode register accesses */
+       if (!running_from_sdram()) {
+               phy = get_ddr_phy_ctrl_1(get_sys_clk_freq() / 2, RL_BOOT);
+               writel(phy, &emif->emif_ddr_phy_ctrl_1);
+       }
+
+       if (!(is_lpddr2_sdram_present(base, cs, lpddr2_dev_details)))
+               return NULL;
+
+       display_sdram_details(emif_num(base), cs, lpddr2_dev_details);
+
+       return lpddr2_dev_details;
+}
+#endif /* CONFIG_SYS_AUTOMATIC_SDRAM_DETECTION */
+
+static void do_sdram_init(u32 base)
+{
+       const struct emif_regs *regs;
+       u32 in_sdram, emif_nr;
+
+       debug(">>do_sdram_init() %x\n", base);
+
+       in_sdram = running_from_sdram();
+       emif_nr = (base == EMIF1_BASE) ? 1 : 2;
+
+#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+       emif_get_reg_dump(emif_nr, &regs);
+       if (!regs) {
+               debug("EMIF: reg dump not provided\n");
+               return;
+       }
+#else
+       /*
+        * The user has not provided the register values. We need to
+        * calculate it based on the timings and the DDR frequency
+        */
+       struct emif_device_details dev_details;
+       struct emif_regs calculated_regs;
+
+       /*
+        * Get device details:
+        * - Discovered if CONFIG_SYS_AUTOMATIC_SDRAM_DETECTION is set
+        * - Obtained from user otherwise
+        */
+       struct lpddr2_device_details cs0_dev_details, cs1_dev_details;
+       emif_reset_phy(base);
+       dev_details.cs0_device_details = emif_get_device_details(emif_nr, CS0,
+                                               &cs0_dev_details);
+       dev_details.cs1_device_details = emif_get_device_details(emif_nr, CS1,
+                                               &cs1_dev_details);
+       emif_reset_phy(base);
+
+       /* Return if no devices on this EMIF */
+       if (!dev_details.cs0_device_details &&
+           !dev_details.cs1_device_details) {
+               emif_sizes[emif_nr - 1] = 0;
+               return;
+       }
+
+       if (!in_sdram)
+               emif_sizes[emif_nr - 1] = get_emif_mem_size(&dev_details);
+
+       /*
+        * Get device timings:
+        * - Default timings specified by JESD209-2 if
+        *   CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS is set
+        * - Obtained from user otherwise
+        */
+       emif_get_device_timings(emif_nr, &dev_details.cs0_device_timings,
+                               &dev_details.cs1_device_timings);
+
+       /* Calculate the register values */
+       emif_calculate_regs(&dev_details, omap_ddr_clk(), &calculated_regs);
+       regs = &calculated_regs;
+#endif /* CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS */
+
+       /*
+        * Initializing the LPDDR2 device can not happen from SDRAM.
+        * Changing the timing registers in EMIF can happen(going from one
+        * OPP to another)
+        */
+       if (!in_sdram)
+               lpddr2_init(base, regs);
+
+       /* Write to the shadow registers */
+       emif_update_timings(base, regs);
+
+       debug("<<do_sdram_init() %x\n", base);
+}
+
+void emif_post_init_config(u32 base)
+{
+       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
+       u32 omap_rev = omap_revision();
+
+       if (omap_rev == OMAP5430_ES1_0)
+               return;
+
+       /* reset phy on ES2.0 */
+       if (omap_rev == OMAP4430_ES2_0)
+               emif_reset_phy(base);
+
+       /* Put EMIF back in smart idle on ES1.0 */
+       if (omap_rev == OMAP4430_ES1_0)
+               writel(0x80000000, &emif->emif_pwr_mgmt_ctrl);
+}
+
+void dmm_init(u32 base)
+{
+       const struct dmm_lisa_map_regs *lisa_map_regs;
+
+#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+       emif_get_dmm_regs(&lisa_map_regs);
+#else
+       u32 emif1_size, emif2_size, mapped_size, section_map = 0;
+       u32 section_cnt, sys_addr;
+       struct dmm_lisa_map_regs lis_map_regs_calculated = {0};
+
+       mapped_size = 0;
+       section_cnt = 3;
+       sys_addr = CONFIG_SYS_SDRAM_BASE;
+       emif1_size = emif_sizes[0];
+       emif2_size = emif_sizes[1];
+       debug("emif1_size 0x%x emif2_size 0x%x\n", emif1_size, emif2_size);
+
+       if (!emif1_size && !emif2_size)
+               return;
+
+       /* symmetric interleaved section */
+       if (emif1_size && emif2_size) {
+               mapped_size = min(emif1_size, emif2_size);
+               section_map = DMM_LISA_MAP_INTERLEAVED_BASE_VAL;
+               section_map |= 0 << EMIF_SDRC_ADDR_SHIFT;
+               /* only MSB */
+               section_map |= (sys_addr >> 24) <<
+                               EMIF_SYS_ADDR_SHIFT;
+               section_map |= get_dmm_section_size_map(mapped_size * 2)
+                               << EMIF_SYS_SIZE_SHIFT;
+               lis_map_regs_calculated.dmm_lisa_map_3 = section_map;
+               emif1_size -= mapped_size;
+               emif2_size -= mapped_size;
+               sys_addr += (mapped_size * 2);
+               section_cnt--;
+       }
+
+       /*
+        * Single EMIF section(we can have a maximum of 1 single EMIF
+        * section- either EMIF1 or EMIF2 or none, but not both)
+        */
+       if (emif1_size) {
+               section_map = DMM_LISA_MAP_EMIF1_ONLY_BASE_VAL;
+               section_map |= get_dmm_section_size_map(emif1_size)
+                               << EMIF_SYS_SIZE_SHIFT;
+               /* only MSB */
+               section_map |= (mapped_size >> 24) <<
+                               EMIF_SDRC_ADDR_SHIFT;
+               /* only MSB */
+               section_map |= (sys_addr >> 24) << EMIF_SYS_ADDR_SHIFT;
+               section_cnt--;
+       }
+       if (emif2_size) {
+               section_map = DMM_LISA_MAP_EMIF2_ONLY_BASE_VAL;
+               section_map |= get_dmm_section_size_map(emif2_size) <<
+                               EMIF_SYS_SIZE_SHIFT;
+               /* only MSB */
+               section_map |= mapped_size >> 24 << EMIF_SDRC_ADDR_SHIFT;
+               /* only MSB */
+               section_map |= sys_addr >> 24 << EMIF_SYS_ADDR_SHIFT;
+               section_cnt--;
+       }
+
+       if (section_cnt == 2) {
+               /* Only 1 section - either symmetric or single EMIF */
+               lis_map_regs_calculated.dmm_lisa_map_3 = section_map;
+               lis_map_regs_calculated.dmm_lisa_map_2 = 0;
+               lis_map_regs_calculated.dmm_lisa_map_1 = 0;
+       } else {
+               /* 2 sections - 1 symmetric, 1 single EMIF */
+               lis_map_regs_calculated.dmm_lisa_map_2 = section_map;
+               lis_map_regs_calculated.dmm_lisa_map_1 = 0;
+       }
+
+       /* TRAP for invalid TILER mappings in section 0 */
+       lis_map_regs_calculated.dmm_lisa_map_0 = DMM_LISA_MAP_0_INVAL_ADDR_TRAP;
+
+       lisa_map_regs = &lis_map_regs_calculated;
+#endif
+       struct dmm_lisa_map_regs *hw_lisa_map_regs =
+           (struct dmm_lisa_map_regs *)base;
+
+       writel(0, &hw_lisa_map_regs->dmm_lisa_map_3);
+       writel(0, &hw_lisa_map_regs->dmm_lisa_map_2);
+       writel(0, &hw_lisa_map_regs->dmm_lisa_map_1);
+       writel(0, &hw_lisa_map_regs->dmm_lisa_map_0);
+
+       writel(lisa_map_regs->dmm_lisa_map_3,
+               &hw_lisa_map_regs->dmm_lisa_map_3);
+       writel(lisa_map_regs->dmm_lisa_map_2,
+               &hw_lisa_map_regs->dmm_lisa_map_2);
+       writel(lisa_map_regs->dmm_lisa_map_1,
+               &hw_lisa_map_regs->dmm_lisa_map_1);
+       writel(lisa_map_regs->dmm_lisa_map_0,
+               &hw_lisa_map_regs->dmm_lisa_map_0);
+
+       if (omap_revision() >= OMAP4460_ES1_0) {
+               hw_lisa_map_regs =
+                   (struct dmm_lisa_map_regs *)MA_BASE;
+
+               writel(lisa_map_regs->dmm_lisa_map_3,
+                       &hw_lisa_map_regs->dmm_lisa_map_3);
+               writel(lisa_map_regs->dmm_lisa_map_2,
+                       &hw_lisa_map_regs->dmm_lisa_map_2);
+               writel(lisa_map_regs->dmm_lisa_map_1,
+                       &hw_lisa_map_regs->dmm_lisa_map_1);
+               writel(lisa_map_regs->dmm_lisa_map_0,
+                       &hw_lisa_map_regs->dmm_lisa_map_0);
+       }
+}
+
+/*
+ * SDRAM initialization:
+ * SDRAM initialization has two parts:
+ * 1. Configuring the SDRAM device
+ * 2. Update the AC timings related parameters in the EMIF module
+ * (1) should be done only once and should not be done while we are
+ * running from SDRAM.
+ * (2) can and should be done more than once if OPP changes.
+ * Particularly, this may be needed when we boot without SPL and
+ * and using Configuration Header(CH). ROM code supports only at 50% OPP
+ * at boot (low power boot). So u-boot has to switch to OPP100 and update
+ * the frequency. So,
+ * Doing (1) and (2) makes sense - first time initialization
+ * Doing (2) and not (1) makes sense - OPP change (when using CH)
+ * Doing (1) and not (2) doen't make sense
+ * See do_sdram_init() for the details
+ */
+void sdram_init(void)
+{
+       u32 in_sdram, size_prog, size_detect;
+
+       debug(">>sdram_init()\n");
+
+       if (omap_hw_init_context() == OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL)
+               return;
+
+       in_sdram = running_from_sdram();
+       debug("in_sdram = %d\n", in_sdram);
+
+       if (!in_sdram)
+               bypass_dpll(&prcm->cm_clkmode_dpll_core);
+
+
+       do_sdram_init(EMIF1_BASE);
+       do_sdram_init(EMIF2_BASE);
+
+       if (!in_sdram) {
+               dmm_init(DMM_BASE);
+               emif_post_init_config(EMIF1_BASE);
+               emif_post_init_config(EMIF2_BASE);
+       }
+
+       /* for the shadow registers to take effect */
+       freq_update_core();
+
+       /* Do some testing after the init */
+       if (!in_sdram) {
+               size_prog = omap_sdram_size();
+               size_detect = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
+                                               size_prog);
+               /* Compare with the size programmed */
+               if (size_detect != size_prog) {
+                       printf("SDRAM: identified size not same as expected"
+                               " size identified: %x expected: %x\n",
+                               size_detect,
+                               size_prog);
+               } else
+                       debug("get_ram_size() successful");
+       }
+
+       debug("<<sdram_init()\n");
+}
diff --git a/arch/arm/cpu/armv7/omap-common/hwinit-common.c b/arch/arm/cpu/armv7/omap-common/hwinit-common.c
new file mode 100644 (file)
index 0000000..f65705d
--- /dev/null
@@ -0,0 +1,267 @@
+/*
+ *
+ * Common functions for OMAP4/5 based boards
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Author :
+ *     Aneesh V        <aneesh@ti.com>
+ *     Steve Sakoman   <steve@sakoman.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/sys_proto.h>
+#include <asm/sizes.h>
+#include <asm/emif.h>
+#include <asm/omap_common.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * This is used to verify if the configuration header
+ * was executed by rom code prior to control of transfer
+ * to the bootloader. SPL is responsible for saving and
+ * passing the boot_params pointer to the u-boot.
+ */
+struct omap_boot_parameters boot_params __attribute__ ((section(".data")));
+
+#ifdef CONFIG_SPL_BUILD
+/*
+ * We use static variables because global data is not ready yet.
+ * Initialized data is available in SPL right from the beginning.
+ * We would not typically need to save these parameters in regular
+ * U-Boot. This is needed only in SPL at the moment.
+ */
+u32 omap_bootmode = MMCSD_MODE_FAT;
+
+u32 omap_boot_device(void)
+{
+       return (u32) (boot_params.omap_bootdevice);
+}
+
+u32 omap_boot_mode(void)
+{
+       return omap_bootmode;
+}
+#endif
+
+void do_set_mux(u32 base, struct pad_conf_entry const *array, int size)
+{
+       int i;
+       struct pad_conf_entry *pad = (struct pad_conf_entry *) array;
+
+       for (i = 0; i < size; i++, pad++)
+               writew(pad->val, base + pad->offset);
+}
+
+static void set_mux_conf_regs(void)
+{
+       switch (omap_hw_init_context()) {
+       case OMAP_INIT_CONTEXT_SPL:
+               set_muxconf_regs_essential();
+               break;
+       case OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL:
+#ifdef CONFIG_SYS_ENABLE_PADS_ALL
+               set_muxconf_regs_non_essential();
+#endif
+               break;
+       case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR:
+       case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH:
+               set_muxconf_regs_essential();
+#ifdef CONFIG_SYS_ENABLE_PADS_ALL
+               set_muxconf_regs_non_essential();
+#endif
+               break;
+       }
+}
+
+u32 cortex_rev(void)
+{
+
+       unsigned int rev;
+
+       /* Read Main ID Register (MIDR) */
+       asm ("mrc p15, 0, %0, c0, c0, 0" : "=r" (rev));
+
+       return rev;
+}
+
+void omap_rev_string(char *omap_rev_string)
+{
+       u32 omap_rev = omap_revision();
+       u32 omap_variant = (omap_rev & 0xFFFF0000) >> 16;
+       u32 major_rev = (omap_rev & 0x00000F00) >> 8;
+       u32 minor_rev = (omap_rev & 0x000000F0) >> 4;
+
+       sprintf(omap_rev_string, "OMAP%x ES%x.%x", omap_variant, major_rev,
+               minor_rev);
+}
+
+#ifdef CONFIG_SPL_BUILD
+static void init_boot_params(void)
+{
+       boot_params_ptr = (u32 *) &boot_params;
+}
+#endif
+
+/*
+ * Routine: s_init
+ * Description: Does early system init of watchdog, muxing,  andclocks
+ * Watchdog disable is done always. For the rest what gets done
+ * depends on the boot mode in which this function is executed
+ *   1. s_init of SPL running from SRAM
+ *   2. s_init of U-Boot running from FLASH
+ *   3. s_init of U-Boot loaded to SDRAM by SPL
+ *   4. s_init of U-Boot loaded to SDRAM by ROM code using the
+ *     Configuration Header feature
+ * Please have a look at the respective functions to see what gets
+ * done in each of these cases
+ * This function is called with SRAM stack.
+ */
+void s_init(void)
+{
+       init_omap_revision();
+       watchdog_init();
+       set_mux_conf_regs();
+#ifdef CONFIG_SPL_BUILD
+       setup_clocks_for_console();
+       preloader_console_init();
+       do_io_settings();
+#endif
+       prcm_init();
+#ifdef CONFIG_SPL_BUILD
+       /* For regular u-boot sdram_init() is called from dram_init() */
+       sdram_init();
+       init_boot_params();
+#endif
+}
+
+/*
+ * Routine: wait_for_command_complete
+ * Description: Wait for posting to finish on watchdog
+ */
+void wait_for_command_complete(struct watchdog *wd_base)
+{
+       int pending = 1;
+       do {
+               pending = readl(&wd_base->wwps);
+       } while (pending);
+}
+
+/*
+ * Routine: watchdog_init
+ * Description: Shut down watch dogs
+ */
+void watchdog_init(void)
+{
+       struct watchdog *wd2_base = (struct watchdog *)WDT2_BASE;
+
+       writel(WD_UNLOCK1, &wd2_base->wspr);
+       wait_for_command_complete(wd2_base);
+       writel(WD_UNLOCK2, &wd2_base->wspr);
+}
+
+
+/*
+ * This function finds the SDRAM size available in the system
+ * based on DMM section configurations
+ * This is needed because the size of memory installed may be
+ * different on different versions of the board
+ */
+u32 omap_sdram_size(void)
+{
+       u32 section, i, total_size = 0, size, addr;
+
+       for (i = 0; i < 4; i++) {
+               section = __raw_readl(DMM_BASE + i*4);
+               addr = section & EMIF_SYS_ADDR_MASK;
+               /* See if the address is valid */
+               if ((addr >= DRAM_ADDR_SPACE_START) &&
+                   (addr < DRAM_ADDR_SPACE_END)) {
+                       size = ((section & EMIF_SYS_SIZE_MASK) >>
+                                  EMIF_SYS_SIZE_SHIFT);
+                       size = 1 << size;
+                       size *= SZ_16M;
+                       total_size += size;
+               }
+       }
+
+       return total_size;
+}
+
+
+/*
+ * Routine: dram_init
+ * Description: sets uboots idea of sdram size
+ */
+int dram_init(void)
+{
+       sdram_init();
+       gd->ram_size = omap_sdram_size();
+       return 0;
+}
+
+/*
+ * Print board information
+ */
+int checkboard(void)
+{
+       puts(sysinfo.board_string);
+       return 0;
+}
+
+/*
+* This function is called by start_armboot. You can reliably use static
+* data. Any boot-time function that require static data should be
+* called from here
+*/
+int arch_cpu_init(void)
+{
+       return 0;
+}
+
+/*
+ *  get_device_type(): tell if GP/HS/EMU/TST
+ */
+u32 get_device_type(void)
+{
+       return 0;
+}
+
+/*
+ * Print CPU information
+ */
+int print_cpuinfo(void)
+{
+       char rev_string_buffer[50];
+
+       omap_rev_string(rev_string_buffer);
+       printf("CPU  : %s\n", rev_string_buffer);
+
+       return 0;
+}
+#ifndef CONFIG_SYS_DCACHE_OFF
+void enable_caches(void)
+{
+       /* Enable D-cache. I-cache is already enabled in start.S */
+       dcache_enable();
+}
+#endif
similarity index 76%
rename from arch/arm/cpu/armv7/omap4/lowlevel_init.S
rename to arch/arm/cpu/armv7/omap-common/lowlevel_init.S
index 91525ecd466c241209ea88cb90dd4c22140f8d5e..35f38acf5d09c83cba4b0bc04f62124950584055 100644 (file)
@@ -26,8 +26,8 @@
  * MA 02111-1307 USA
  */
 
-#include <asm/arch/omap4.h>
-#ifdef CONFIG_SPL_BUILD
+#include <asm/arch/omap.h>
+
 .global save_boot_params
 save_boot_params:
        /*
@@ -43,21 +43,40 @@ save_boot_params:
        cmp     r2, r0
        blt     1f
 
-       /* Store the boot device in omap4_boot_device */
-       ldr     r2, [r0, #BOOT_DEVICE_OFFSET]   @ r1 <- value of boot device
+       /*
+        * store the boot params passed from rom code or saved
+        * and passed by SPL
+        */
+       cmp     r0, #0
+       beq     1f
+       ldr     r1, =boot_params
+       str     r0, [r1]
+#ifdef CONFIG_SPL_BUILD
+       /* Store the boot device in omap_boot_device */
+       ldrb    r2, [r0, #BOOT_DEVICE_OFFSET]   @ r1 <- value of boot device
        and     r2, #BOOT_DEVICE_MASK
-       ldr     r3, =omap4_boot_device
-       str     r2, [r3]                        @ omap4_boot_device <- r1
+       ldr     r3, =boot_params
+       strb    r2, [r3, #BOOT_DEVICE_OFFSET]   @ omap_boot_device <- r1
 
-       /* Store the boot mode (raw/FAT) in omap4_boot_mode */
+       /* boot mode is passed only for devices that can raw/fat mode */
+       cmp     r2, #2
+       blt     2f
+       cmp     r2, #7
+       bgt     2f
+       /* Store the boot mode (raw/FAT) in omap_boot_mode */
        ldr     r2, [r0, #DEV_DESC_PTR_OFFSET]  @ get the device descriptor ptr
        ldr     r2, [r2, #DEV_DATA_PTR_OFFSET]  @ get the pDeviceData ptr
        ldr     r2, [r2, #BOOT_MODE_OFFSET]     @ get the boot mode
-       ldr     r3, =omap4_boot_mode
+       ldr     r3, =omap_bootmode
        str     r2, [r3]
+#endif
+2:
+       ldrb    r2, [r0, #CH_FLAGS_OFFSET]
+       ldr     r3, =boot_params
+       strb    r2, [r3, #CH_FLAGS_OFFSET]
 1:
        bx      lr
-#endif
+
 
 .globl lowlevel_init
 lowlevel_init:
index 2c59d2b36bd515936c0afd68bfd671e4f8b1985e..9c35a090381127d4e593327a0caff192b9e79f75 100644 (file)
@@ -38,6 +38,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+u32* boot_params_ptr = NULL;
 struct spl_image_info spl_image;
 
 /* Define global data structure pointer to it*/
@@ -92,12 +93,17 @@ void spl_parse_image_header(const struct image_header *header)
 
 static void jump_to_image_no_args(void)
 {
-       typedef void (*image_entry_noargs_t)(void)__attribute__ ((noreturn));
+       typedef void (*image_entry_noargs_t)(u32 *)__attribute__ ((noreturn));
        image_entry_noargs_t image_entry =
                        (image_entry_noargs_t) spl_image.entry_point;
 
        debug("image entry point: 0x%X\n", spl_image.entry_point);
-       image_entry();
+       /* Pass the saved boot_params from rom code */
+#if defined(CONFIG_VIRTIO) || defined(CONFIG_ZEBU)
+       image_entry = (image_entry_noargs_t)0x80100000;
+#endif
+       u32 boot_params_ptr_addr = (u32)&boot_params_ptr;
+       image_entry((u32 *)boot_params_ptr_addr);
 }
 
 void jump_to_image_no_args(void) __attribute__ ((noreturn));
@@ -110,7 +116,10 @@ void board_init_r(gd_t *id, ulong dummy)
                        CONFIG_SYS_SPL_MALLOC_SIZE);
 
        timer_init();
-       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+
+#ifdef CONFIG_SPL_BOARD_INIT
+       spl_board_init();
+#endif
 
        boot_device = omap_boot_device();
        debug("boot device - %d\n", boot_device);
index 8e8589157c18782cc67172bf8a9c4bcfa3211328..ac597be25aaebe8557057d86e7b8cd483ce0dade 100644 (file)
@@ -31,7 +31,11 @@ COBJS        += board.o
 COBJS  += clock.o
 COBJS  += mem.o
 COBJS  += sys_info.o
+ifdef CONFIG_SPL_BUILD
+COBJS-$(CONFIG_SPL_OMAP3_ID_NAND)      += spl_id_nand.o
+endif
 
+COBJS-$(CONFIG_DRIVER_TI_EMAC) += emac.o
 COBJS-$(CONFIG_EMIF4)  += emif4.o
 COBJS-$(CONFIG_SDRC)   += sdrc.o
 
index a9fdb4f8ed918f22516f0ab3e064052d6f011c08..1f33c6398c106776d6163eb2bac9a22e02523abd 100644 (file)
@@ -40,6 +40,7 @@
 #include <asm/armv7.h>
 #include <asm/arch/gpio.h>
 #include <asm/omap_common.h>
+#include <i2c.h>
 
 /* Declarations */
 extern omap3_sysinfo sysinfo;
@@ -89,18 +90,12 @@ u32 omap_boot_device(void)
        return omap3_boot_device;
 }
 
-#endif /* CONFIG_SPL_BUILD */
-
-
-/******************************************************************************
- * Routine: delay
- * Description: spinning delay to use before udelay works
- *****************************************************************************/
-static inline void delay(unsigned long loops)
+void spl_board_init(void)
 {
-       __asm__ volatile ("1:\n" "subs %0, %1, #1\n"
-                         "bne 1b":"=r" (loops):"0"(loops));
+       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
 }
+#endif /* CONFIG_SPL_BUILD */
+
 
 /******************************************************************************
  * Routine: secure_unlock
@@ -227,7 +222,7 @@ void s_init(void)
 #endif
 
        set_muxconf_regs();
-       delay(100);
+       sdelay(100);
 
        prcm_init();
 
diff --git a/arch/arm/cpu/armv7/omap3/emac.c b/arch/arm/cpu/armv7/omap3/emac.c
new file mode 100644 (file)
index 0000000..14667f1
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ *
+ * DaVinci EMAC initialization.
+ *
+ * (C) Copyright 2011, Ilya Yanok, Emcraft Systems
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc.
+ */
+
+#include <common.h>
+#include <netdev.h>
+#include <asm/io.h>
+#include <asm/arch/am35x_def.h>
+
+/*
+ * Initializes on-chip ethernet controllers.
+ * to override, implement board_eth_init()
+ */
+int cpu_eth_init(bd_t *bis)
+{
+       u32 reset;
+
+       /* ensure that the module is out of reset */
+       reset = readl(&am35x_scm_general_regs->ip_sw_reset);
+       reset &= ~CPGMACSS_SW_RST;
+       writel(reset, &am35x_scm_general_regs->ip_sw_reset);
+
+       return davinci_emac_initialize();
+}
index a308ebdb6a37d10d9540652c80ffc1dc0d8e1beb..2f6930b22d1bed85e40bed1407a07952c2b631b3 100644 (file)
@@ -216,6 +216,14 @@ lowlevel_init:
        ldr     sp, SRAM_STACK
        str     ip, [sp]        /* stash old link register */
        mov     ip, lr          /* save link reg across call */
+#if !defined(CONFIG_SYS_NAND_BOOT) && !defined(CONFIG_SYS_ONENAND_BOOT)
+/*
+ * No need to copy/exec the clock code - DPLL adjust already done
+ * in NAND/oneNAND Boot.
+ */
+       ldr     r1, =SRAM_CLK_CODE
+       bl      cpy_clk_code
+#endif /* NAND Boot */
        bl      s_init          /* go setup pll, mux, memory */
        ldr     ip, [sp]        /* restore save ip */
        mov     lr, ip          /* restore link reg */
index a01c303e719afd71b5153a519119b522726908a1..2fe5ac7c3946d4a8f4b09d7dcc85ce441c47bfce 100644 (file)
@@ -86,6 +86,7 @@ u32 mem_ok(u32 cs)
        writel(0x0, addr + 4);          /* remove pattern off the bus */
        val1 = readl(addr + 0x400);     /* get pos A value */
        val2 = readl(addr);             /* get val2 */
+       writel(0x0, addr + 0x400);      /* clear pos A */
 
        if ((val1 != 0) || (val2 != pattern))   /* see if pos A val changed */
                return 0;
@@ -105,9 +106,15 @@ void enable_gpmc_cs_config(const u32 *gpmc_config, struct gpmc_cs *cs, u32 base,
        writel(gpmc_config[3], &cs->config4);
        writel(gpmc_config[4], &cs->config5);
        writel(gpmc_config[5], &cs->config6);
-       /* Enable the config */
-       writel((((size & 0xF) << 8) | ((base >> 24) & 0x3F) |
-               (1 << 6)), &cs->config7);
+
+       /*
+        * Enable the config.  size is the CS size and goes in
+        * bits 11:8.  We set bit 6 to enable this CS and the base
+        * address goes into bits 5:0.
+        */
+        writel((size << 8) | (GPMC_CS_ENABLE << 6) |
+                                ((base >> 24) & GPMC_BASEADDR_MASK),
+                                &cs->config7);
        sdelay(2000);
 }
 
index 0dd1955431dc89787a9c70289e328fae483881ce..a27b4b124e7c4c1726d28c3eca3e051921e9e9da 100644 (file)
@@ -58,10 +58,9 @@ u32 is_mem_sdr(void)
 
 /*
  * make_cs1_contiguous -
- *  - For es2 and above remap cs1 behind cs0 to allow command line
- *    mem=xyz use all memory with out discontinuous support compiled in.
- *    Could do it at the ATAG, but there really is two banks...
- *  - Called as part of 2nd phase DDR init.
+ * - When we have CS1 populated we want to have it mapped after cs0 to allow
+ *   command line mem=xyz use all memory with out discontinuous support
+ *   compiled in.  We could do it in the ATAG, but there really is two banks...
  */
 void make_cs1_contiguous(void)
 {
@@ -108,16 +107,59 @@ u32 get_sdr_cs_offset(u32 cs)
        return offset;
 }
 
+/*
+ * write_sdrc_timings -
+ *  - Takes CS and associated timings and initalize SDRAM
+ *  - Test CS to make sure it's OK for use
+ */
+static void write_sdrc_timings(u32 cs, struct sdrc_actim *sdrc_actim_base,
+               u32 mcfg, u32 ctrla, u32 ctrlb, u32 rfr_ctrl, u32 mr)
+{
+       /* Setup timings we got from the board. */
+       writel(mcfg, &sdrc_base->cs[cs].mcfg);
+       writel(ctrla, &sdrc_actim_base->ctrla);
+       writel(ctrlb, &sdrc_actim_base->ctrlb);
+       writel(rfr_ctrl, &sdrc_base->cs[cs].rfr_ctrl);
+       writel(CMD_NOP, &sdrc_base->cs[cs].manual);
+       writel(CMD_PRECHARGE, &sdrc_base->cs[cs].manual);
+       writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual);
+       writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual);
+       writel(mr, &sdrc_base->cs[cs].mr);
+
+       /*
+        * Test ram in this bank
+        * Disable if bad or not present
+        */
+       if (!mem_ok(cs))
+               writel(0, &sdrc_base->cs[cs].mcfg);
+}
+
 /*
  * do_sdrc_init -
- *  - Initialize the SDRAM for use.
- *  - code called once in C-Stack only context for CS0 and a possible 2nd
- *    time depending on memory configuration from stack+global context
+ *  - Code called once in C-Stack only context for CS0 and with early being
+ *    true and a possible 2nd time depending on memory configuration from
+ *    stack+global context.
  */
 void do_sdrc_init(u32 cs, u32 early)
 {
        struct sdrc_actim *sdrc_actim_base0, *sdrc_actim_base1;
+       u32 mcfg, ctrla, ctrlb, rfr_ctrl, mr;
+
+       sdrc_actim_base0 = (struct sdrc_actim *)SDRC_ACTIM_CTRL0_BASE;
+       sdrc_actim_base1 = (struct sdrc_actim *)SDRC_ACTIM_CTRL1_BASE;
 
+       /*
+        * When called in the early context this may be SPL and we will
+        * need to set all of the timings.  This ends up being board
+        * specific so we call a helper function to take care of this
+        * for us.  Otherwise, to be safe, we need to copy the settings
+        * from the first bank to the second.  We will setup CS0,
+        * then set cs_cfg to the appropriate value then try and
+        * setup CS1.
+        */
+#ifdef CONFIG_SPL_BUILD
+       get_board_mem_timings(&mcfg, &ctrla, &ctrlb, &rfr_ctrl, &mr);
+#endif
        if (early) {
                /* reset sdrc controller */
                writel(SOFTRESET, &sdrc_base->sysconfig);
@@ -128,73 +170,38 @@ void do_sdrc_init(u32 cs, u32 early)
                /* setup sdrc to ball mux */
                writel(SDRC_SHARING, &sdrc_base->sharing);
 
-               /* Disable Power Down of CKE cuz of 1 CKE on combo part */
+               /* Disable Power Down of CKE because of 1 CKE on combo part */
                writel(WAKEUPPROC | SRFRONRESET | PAGEPOLICY_HIGH,
                                &sdrc_base->power);
 
                writel(ENADLL | DLLPHASE_90, &sdrc_base->dlla_ctrl);
                sdelay(0x20000);
-       }
-
-/* As long as V_MCFG and V_RFR_CTRL is not defined for all OMAP3 boards we need
- * to prevent this to be build in non-SPL build */
 #ifdef CONFIG_SPL_BUILD
-       /* If we use a SPL there is no x-loader nor config header so we have
-        * to do the job ourselfs
-        */
-       if (cs == CS0) {
-               sdrc_actim_base0 = (struct sdrc_actim *)SDRC_ACTIM_CTRL0_BASE;
-
-               /* General SDRC config */
-               writel(V_MCFG, &sdrc_base->cs[cs].mcfg);
-               writel(V_RFR_CTRL, &sdrc_base->cs[cs].rfr_ctrl);
-
-               /* AC timings */
-               writel(V_ACTIMA_165, &sdrc_actim_base0->ctrla);
-               writel(V_ACTIMB_165, &sdrc_actim_base0->ctrlb);
-
-               /* Initialize */
-               writel(CMD_NOP, &sdrc_base->cs[cs].manual);
-               writel(CMD_PRECHARGE, &sdrc_base->cs[cs].manual);
-               writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual);
-               writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual);
+               write_sdrc_timings(CS0, sdrc_actim_base0, mcfg, ctrla, ctrlb,
+                               rfr_ctrl, mr);
+               make_cs1_contiguous();
+               write_sdrc_timings(CS0, sdrc_actim_base1, mcfg, ctrla, ctrlb,
+                               rfr_ctrl, mr);
+#endif
 
-               writel(V_MR, &sdrc_base->cs[cs].mr);
        }
-#endif
 
        /*
-        * SDRC timings are set up by x-load or config header
-        * We don't need to redo them here.
-        * Older x-loads configure only CS0
-        * configure CS1 to handle this ommission
+        * If we aren't using SPL we have been loaded by some
+        * other means which may not have correctly initialized
+        * both CS0 and CS1 (such as some older versions of x-loader)
+        * so we may be asked now to setup CS1.
         */
        if (cs == CS1) {
-               sdrc_actim_base0 = (struct sdrc_actim *)SDRC_ACTIM_CTRL0_BASE;
-               sdrc_actim_base1 = (struct sdrc_actim *)SDRC_ACTIM_CTRL1_BASE;
-               writel(readl(&sdrc_base->cs[CS0].mcfg),
-                       &sdrc_base->cs[CS1].mcfg);
-               writel(readl(&sdrc_base->cs[CS0].rfr_ctrl),
-                       &sdrc_base->cs[CS1].rfr_ctrl);
-               writel(readl(&sdrc_actim_base0->ctrla),
-                       &sdrc_actim_base1->ctrla);
-               writel(readl(&sdrc_actim_base0->ctrlb),
-                       &sdrc_actim_base1->ctrlb);
-
-               writel(CMD_NOP, &sdrc_base->cs[cs].manual);
-               writel(CMD_PRECHARGE, &sdrc_base->cs[cs].manual);
-               writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual);
-               writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual);
-               writel(readl(&sdrc_base->cs[CS0].mr),
-                       &sdrc_base->cs[CS1].mr);
-       }
+               mcfg = readl(&sdrc_base->cs[CS0].mcfg),
+               rfr_ctrl = readl(&sdrc_base->cs[CS0].rfr_ctrl);
+               ctrla = readl(&sdrc_actim_base0->ctrla),
+               ctrlb = readl(&sdrc_actim_base0->ctrlb);
+               mr = readl(&sdrc_base->cs[CS0].mr);
+               write_sdrc_timings(cs, sdrc_actim_base1, mcfg, ctrla, ctrlb,
+                               rfr_ctrl, mr);
 
-       /*
-        * Test ram in this bank
-        * Disable if bad or not present
-        */
-       if (!mem_ok(cs))
-               writel(0, &sdrc_base->cs[cs].mcfg);
+       }
 }
 
 /*
@@ -207,16 +214,16 @@ int dram_init(void)
 
        size0 = get_sdr_cs_size(CS0);
        /*
-        * If a second bank of DDR is attached to CS1 this is
-        * where it can be started.  Early init code will init
-        * memory on CS0.
+        * We always need to have cs_cfg point at where the second
+        * bank would be, if present.  Failure to do so can lead to
+        * strange situations where memory isn't detected and
+        * configured correctly.  CS0 will already have been setup
+        * at this point.
         */
-       if ((sysinfo.mtype == DDR_COMBO) || (sysinfo.mtype == DDR_STACKED)) {
-               do_sdrc_init(CS1, NOT_EARLY);
-               make_cs1_contiguous();
+       make_cs1_contiguous();
+       do_sdrc_init(CS1, NOT_EARLY);
+       size1 = get_sdr_cs_size(CS1);
 
-               size1 = get_sdr_cs_size(CS1);
-       }
        gd->ram_size = size0 + size1;
 
        return 0;
diff --git a/arch/arm/cpu/armv7/omap3/spl_id_nand.c b/arch/arm/cpu/armv7/omap3/spl_id_nand.c
new file mode 100644 (file)
index 0000000..0871fc9
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * (C) Copyright 2011
+ * Texas Instruments, <www.ti.com>
+ *
+ * Author :
+ *     Tom Rini <trini@ti.com>
+ *
+ * Initial Code from:
+ *     Richard Woodruff <r-woodruff2@ti.com>
+ *     Jian Zhang <jzhang@ti.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 <linux/mtd/nand.h>
+#include <asm/io.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/mem.h>
+
+static struct gpmc *gpmc_config = (struct gpmc *)GPMC_BASE;
+
+/* nand_command: Send a flash command to the flash chip */
+static void nand_command(u8 command)
+{
+       writeb(command, &gpmc_config->cs[0].nand_cmd);
+
+       if (command == NAND_CMD_RESET) {
+               unsigned char ret_val;
+               writeb(NAND_CMD_STATUS, &gpmc_config->cs[0].nand_cmd);
+               do {
+                       /* Wait until ready */
+                       ret_val = readl(&gpmc_config->cs[0].nand_dat);
+               } while ((ret_val & NAND_STATUS_READY) != NAND_STATUS_READY);
+       }
+}
+
+/*
+ * Many boards will want to know the results of the NAND_CMD_READID command
+ * in order to decide what to do about DDR initialization.  This function
+ * allows us to do that very early and to pass those results back to the
+ * board so it can make whatever decisions need to be made.
+ */
+void identify_nand_chip(int *mfr, int *id)
+{
+       /* Make sure that we have setup GPMC for NAND correctly. */
+       writel(M_NAND_GPMC_CONFIG1, &gpmc_config->cs[0].config1);
+       writel(M_NAND_GPMC_CONFIG2, &gpmc_config->cs[0].config2);
+       writel(M_NAND_GPMC_CONFIG3, &gpmc_config->cs[0].config3);
+       writel(M_NAND_GPMC_CONFIG4, &gpmc_config->cs[0].config4);
+       writel(M_NAND_GPMC_CONFIG5, &gpmc_config->cs[0].config5);
+       writel(M_NAND_GPMC_CONFIG6, &gpmc_config->cs[0].config6);
+
+       /*
+        * Enable the config.  The CS size goes in bits 11:8.  We set
+        * bit 6 to enable the CS and the base address goes into bits 5:0.
+        */
+       writel((GPMC_SIZE_128M << 8) | (GPMC_CS_ENABLE << 6) |
+                               ((NAND_BASE >> 24) & GPMC_BASEADDR_MASK),
+                       &gpmc_config->cs[0].config7);
+
+       sdelay(2000);
+
+       /* Issue a RESET and then READID */
+       nand_command(NAND_CMD_RESET);
+       nand_command(NAND_CMD_READID);
+
+       /* Set the address to read to 0x0 */
+       writeb(0x0, &gpmc_config->cs[0].nand_adr);
+
+       /* Read off the manufacturer and device id. */
+       *mfr = readb(&gpmc_config->cs[0].nand_dat);
+       *id = readb(&gpmc_config->cs[0].nand_dat);
+}
index e7ee0b8c0ab838d2c21843376359a492d0bd714c..83160a28f36a195cd71b6adede731f455be7a16a 100644 (file)
@@ -25,17 +25,10 @@ include $(TOPDIR)/config.mk
 
 LIB    =  $(obj)lib$(SOC).o
 
-SOBJS  += lowlevel_init.o
-
-COBJS  += board.o
+COBJS  += sdram_elpida.o
+COBJS  += hwinit.o
 COBJS  += clocks.o
 COBJS  += emif.o
-COBJS  += sdram_elpida.o
-
-ifndef CONFIG_SPL_BUILD
-COBJS  += mem.o
-COBJS  += sys_info.o
-endif
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
diff --git a/arch/arm/cpu/armv7/omap4/board.c b/arch/arm/cpu/armv7/omap4/board.c
deleted file mode 100644 (file)
index 2497e3e..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- *
- * Common functions for OMAP4 based boards
- *
- * (C) Copyright 2010
- * Texas Instruments, <www.ti.com>
- *
- * Author :
- *     Aneesh V        <aneesh@ti.com>
- *     Steve Sakoman   <steve@sakoman.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/armv7.h>
-#include <asm/arch/cpu.h>
-#include <asm/arch/sys_proto.h>
-#include <asm/sizes.h>
-#include <asm/arch/emif.h>
-#include <asm/arch/gpio.h>
-#include "omap4_mux_data.h"
-
-DECLARE_GLOBAL_DATA_PTR;
-
-u32 *const omap4_revision = (u32 *)OMAP4_SRAM_SCRATCH_OMAP4_REV;
-
-static const struct gpio_bank gpio_bank_44xx[6] = {
-       { (void *)OMAP44XX_GPIO1_BASE, METHOD_GPIO_24XX },
-       { (void *)OMAP44XX_GPIO2_BASE, METHOD_GPIO_24XX },
-       { (void *)OMAP44XX_GPIO3_BASE, METHOD_GPIO_24XX },
-       { (void *)OMAP44XX_GPIO4_BASE, METHOD_GPIO_24XX },
-       { (void *)OMAP44XX_GPIO5_BASE, METHOD_GPIO_24XX },
-       { (void *)OMAP44XX_GPIO6_BASE, METHOD_GPIO_24XX },
-};
-
-const struct gpio_bank *const omap_gpio_bank = gpio_bank_44xx;
-
-#ifdef CONFIG_SPL_BUILD
-/*
- * We use static variables because global data is not ready yet.
- * Initialized data is available in SPL right from the beginning.
- * We would not typically need to save these parameters in regular
- * U-Boot. This is needed only in SPL at the moment.
- */
-u32 omap4_boot_device = BOOT_DEVICE_MMC1;
-u32 omap4_boot_mode = MMCSD_MODE_FAT;
-
-u32 omap_boot_device(void)
-{
-       return omap4_boot_device;
-}
-
-u32 omap_boot_mode(void)
-{
-       return omap4_boot_mode;
-}
-
-/*
- * Some tuning of IOs for optimal power and performance
- */
-static void do_io_settings(void)
-{
-       u32 lpddr2io;
-       struct control_lpddr2io_regs *lpddr2io_regs =
-               (struct control_lpddr2io_regs *)LPDDR2_IO_REGS_BASE;
-       struct omap4_sys_ctrl_regs *const ctrl =
-               (struct omap4_sys_ctrl_regs *)SYSCTRL_GENERAL_CORE_BASE;
-
-       u32 omap4_rev = omap_revision();
-
-       if (omap4_rev == OMAP4430_ES1_0)
-               lpddr2io = CONTROL_LPDDR2IO_SLEW_125PS_DRV8_PULL_DOWN;
-       else if (omap4_rev == OMAP4430_ES2_0)
-               lpddr2io = CONTROL_LPDDR2IO_SLEW_325PS_DRV8_GATE_KEEPER;
-       else
-               lpddr2io = CONTROL_LPDDR2IO_SLEW_315PS_DRV12_PULL_DOWN;
-
-       /* EMIF1 */
-       writel(lpddr2io, &lpddr2io_regs->control_lpddr2io1_0);
-       writel(lpddr2io, &lpddr2io_regs->control_lpddr2io1_1);
-       /* No pull for GR10 as per hw team's recommendation */
-       writel(lpddr2io & ~LPDDR2IO_GR10_WD_MASK,
-               &lpddr2io_regs->control_lpddr2io1_2);
-       writel(CONTROL_LPDDR2IO_3_VAL, &lpddr2io_regs->control_lpddr2io1_3);
-
-       /* EMIF2 */
-       writel(lpddr2io, &lpddr2io_regs->control_lpddr2io2_0);
-       writel(lpddr2io, &lpddr2io_regs->control_lpddr2io2_1);
-       /* No pull for GR10 as per hw team's recommendation */
-       writel(lpddr2io & ~LPDDR2IO_GR10_WD_MASK,
-               &lpddr2io_regs->control_lpddr2io2_2);
-       writel(CONTROL_LPDDR2IO_3_VAL, &lpddr2io_regs->control_lpddr2io2_3);
-
-       /*
-        * Some of these settings (TRIM values) come from eFuse and are
-        * in turn programmed in the eFuse at manufacturing time after
-        * calibration of the device. Do the software over-ride only if
-        * the device is not correctly trimmed
-        */
-       if (!(readl(&ctrl->control_std_fuse_opp_bgap) & 0xFFFF)) {
-
-               writel(LDOSRAM_VOLT_CTRL_OVERRIDE,
-                       &ctrl->control_ldosram_iva_voltage_ctrl);
-
-               writel(LDOSRAM_VOLT_CTRL_OVERRIDE,
-                       &ctrl->control_ldosram_mpu_voltage_ctrl);
-
-               writel(LDOSRAM_VOLT_CTRL_OVERRIDE,
-                       &ctrl->control_ldosram_core_voltage_ctrl);
-       }
-
-       if (!readl(&ctrl->control_efuse_1))
-               writel(CONTROL_EFUSE_1_OVERRIDE, &ctrl->control_efuse_1);
-
-       if (!readl(&ctrl->control_efuse_2))
-               writel(CONTROL_EFUSE_2_OVERRIDE, &ctrl->control_efuse_2);
-}
-#endif
-
-void do_set_mux(u32 base, struct pad_conf_entry const *array, int size)
-{
-       int i;
-       struct pad_conf_entry *pad = (struct pad_conf_entry *) array;
-
-       for (i = 0; i < size; i++, pad++)
-               writew(pad->val, base + pad->offset);
-}
-
-static void set_muxconf_regs_essential(void)
-{
-       do_set_mux(CONTROL_PADCONF_CORE, core_padconf_array_essential,
-                  sizeof(core_padconf_array_essential) /
-                  sizeof(struct pad_conf_entry));
-
-       do_set_mux(CONTROL_PADCONF_WKUP, wkup_padconf_array_essential,
-                  sizeof(wkup_padconf_array_essential) /
-                  sizeof(struct pad_conf_entry));
-
-       if (omap_revision() >= OMAP4460_ES1_0)
-               do_set_mux(CONTROL_PADCONF_WKUP,
-                                wkup_padconf_array_essential_4460,
-                                sizeof(wkup_padconf_array_essential_4460) /
-                                sizeof(struct pad_conf_entry));
-}
-
-static void set_mux_conf_regs(void)
-{
-       switch (omap4_hw_init_context()) {
-       case OMAP_INIT_CONTEXT_SPL:
-               set_muxconf_regs_essential();
-               break;
-       case OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL:
-               set_muxconf_regs_non_essential();
-               break;
-       case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR:
-       case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH:
-               set_muxconf_regs_essential();
-               set_muxconf_regs_non_essential();
-               break;
-       }
-}
-
-static u32 cortex_a9_rev(void)
-{
-
-       unsigned int rev;
-
-       /* Read Main ID Register (MIDR) */
-       asm ("mrc p15, 0, %0, c0, c0, 0" : "=r" (rev));
-
-       return rev;
-}
-
-static void init_omap4_revision(void)
-{
-       /*
-        * For some of the ES2/ES1 boards ID_CODE is not reliable:
-        * Also, ES1 and ES2 have different ARM revisions
-        * So use ARM revision for identification
-        */
-       unsigned int arm_rev = cortex_a9_rev();
-
-       switch (arm_rev) {
-       case MIDR_CORTEX_A9_R0P1:
-               *omap4_revision = OMAP4430_ES1_0;
-               break;
-       case MIDR_CORTEX_A9_R1P2:
-               switch (readl(CONTROL_ID_CODE)) {
-               case OMAP4430_CONTROL_ID_CODE_ES2_0:
-                       *omap4_revision = OMAP4430_ES2_0;
-                       break;
-               case OMAP4430_CONTROL_ID_CODE_ES2_1:
-                       *omap4_revision = OMAP4430_ES2_1;
-                       break;
-               case OMAP4430_CONTROL_ID_CODE_ES2_2:
-                       *omap4_revision = OMAP4430_ES2_2;
-                       break;
-               default:
-                       *omap4_revision = OMAP4430_ES2_0;
-                       break;
-               }
-               break;
-       case MIDR_CORTEX_A9_R1P3:
-               *omap4_revision = OMAP4430_ES2_3;
-               break;
-       case MIDR_CORTEX_A9_R2P10:
-               switch (readl(CONTROL_ID_CODE)) {
-               case OMAP4460_CONTROL_ID_CODE_ES1_0:
-                       *omap4_revision = OMAP4460_ES1_0;
-                       break;
-               case OMAP4460_CONTROL_ID_CODE_ES1_1:
-                       *omap4_revision = OMAP4460_ES1_1;
-                       break;
-               default:
-                       *omap4_revision = OMAP4460_ES1_0;
-                       break;
-               }
-               break;
-       default:
-               *omap4_revision = OMAP4430_SILICON_ID_INVALID;
-               break;
-       }
-}
-
-void omap_rev_string(char *omap4_rev_string)
-{
-       u32 omap4_rev = omap_revision();
-       u32 omap4_variant = (omap4_rev & 0xFFFF0000) >> 16;
-       u32 major_rev = (omap4_rev & 0x00000F00) >> 8;
-       u32 minor_rev = (omap4_rev & 0x000000F0) >> 4;
-
-       sprintf(omap4_rev_string, "OMAP%x ES%x.%x", omap4_variant, major_rev,
-               minor_rev);
-}
-
-/*
- * Routine: s_init
- * Description: Does early system init of watchdog, muxing,  andclocks
- * Watchdog disable is done always. For the rest what gets done
- * depends on the boot mode in which this function is executed
- *   1. s_init of SPL running from SRAM
- *   2. s_init of U-Boot running from FLASH
- *   3. s_init of U-Boot loaded to SDRAM by SPL
- *   4. s_init of U-Boot loaded to SDRAM by ROM code using the
- *     Configuration Header feature
- * Please have a look at the respective functions to see what gets
- * done in each of these cases
- * This function is called with SRAM stack.
- */
-void s_init(void)
-{
-       init_omap4_revision();
-       watchdog_init();
-       set_mux_conf_regs();
-#ifdef CONFIG_SPL_BUILD
-       setup_clocks_for_console();
-       preloader_console_init();
-       do_io_settings();
-#endif
-       prcm_init();
-#ifdef CONFIG_SPL_BUILD
-       /* For regular u-boot sdram_init() is called from dram_init() */
-       sdram_init();
-#endif
-}
-
-/*
- * Routine: wait_for_command_complete
- * Description: Wait for posting to finish on watchdog
- */
-void wait_for_command_complete(struct watchdog *wd_base)
-{
-       int pending = 1;
-       do {
-               pending = readl(&wd_base->wwps);
-       } while (pending);
-}
-
-/*
- * Routine: watchdog_init
- * Description: Shut down watch dogs
- */
-void watchdog_init(void)
-{
-       struct watchdog *wd2_base = (struct watchdog *)WDT2_BASE;
-
-       writel(WD_UNLOCK1, &wd2_base->wspr);
-       wait_for_command_complete(wd2_base);
-       writel(WD_UNLOCK2, &wd2_base->wspr);
-}
-
-
-/*
- * This function finds the SDRAM size available in the system
- * based on DMM section configurations
- * This is needed because the size of memory installed may be
- * different on different versions of the board
- */
-u32 omap4_sdram_size(void)
-{
-       u32 section, i, total_size = 0, size, addr;
-       for (i = 0; i < 4; i++) {
-               section = __raw_readl(OMAP44XX_DMM_LISA_MAP_BASE + i*4);
-               addr = section & OMAP44XX_SYS_ADDR_MASK;
-               /* See if the address is valid */
-               if ((addr >= OMAP44XX_DRAM_ADDR_SPACE_START) &&
-                   (addr < OMAP44XX_DRAM_ADDR_SPACE_END)) {
-                       size    = ((section & OMAP44XX_SYS_SIZE_MASK) >>
-                                  OMAP44XX_SYS_SIZE_SHIFT);
-                       size    = 1 << size;
-                       size    *= SZ_16M;
-                       total_size += size;
-               }
-       }
-       return total_size;
-}
-
-
-/*
- * Routine: dram_init
- * Description: sets uboots idea of sdram size
- */
-int dram_init(void)
-{
-       sdram_init();
-       gd->ram_size = omap4_sdram_size();
-
-       return 0;
-}
-
-/*
- * Print board information
- */
-int checkboard(void)
-{
-       puts(sysinfo.board_string);
-       return 0;
-}
-
-/*
-* This function is called by start_armboot. You can reliably use static
-* data. Any boot-time function that require static data should be
-* called from here
-*/
-int arch_cpu_init(void)
-{
-       return 0;
-}
-
-#ifndef CONFIG_SYS_L2CACHE_OFF
-void v7_outer_cache_enable(void)
-{
-       set_pl310_ctrl_reg(1);
-}
-
-void v7_outer_cache_disable(void)
-{
-       set_pl310_ctrl_reg(0);
-}
-#endif
-
-#ifndef CONFIG_SYS_DCACHE_OFF
-void enable_caches(void)
-{
-       /* Enable D-cache. I-cache is already enabled in start.S */
-       dcache_enable();
-}
-#endif
index 095ba39aebea1b7785dca92028169eb8c76236ed..0886f92431ad87ace2cd2823196580b8cd3693e7 100644 (file)
@@ -50,7 +50,7 @@
 
 struct omap4_prcm_regs *const prcm = (struct omap4_prcm_regs *)0x4A004100;
 
-static const u32 sys_clk_array[8] = {
+const u32 sys_clk_array[8] = {
        12000000,              /* 12 MHz */
        13000000,              /* 13 MHz */
        16800000,              /* 16.8 MHz */
@@ -79,14 +79,14 @@ static const struct dpll_params mpu_dpll_params_1840mhz[NUM_SYS_CLKS] = {
 };
 
 /* dpll locked at 1584 MHz - MPU clk at 792 MHz(OPP Turbo 4430) */
-static const struct dpll_params mpu_dpll_params_1584mhz[NUM_SYS_CLKS] = {
-       {66, 0, 1, -1, -1, -1, -1, -1},         /* 12 MHz   */
-       {792, 12, 1, -1, -1, -1, -1, -1},       /* 13 MHz   */
-       {330, 6, 1, -1, -1, -1, -1, -1},        /* 16.8 MHz */
-       {165, 3, 1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
-       {396, 12, 1, -1, -1, -1, -1, -1},       /* 26 MHz   */
-       {88, 2, 1, -1, -1, -1, -1, -1},         /* 27 MHz   */
-       {165, 7, 1, -1, -1, -1, -1, -1}         /* 38.4 MHz */
+static const struct dpll_params mpu_dpll_params_1600mhz[NUM_SYS_CLKS] = {
+       {200, 2, 1, -1, -1, -1, -1, -1},        /* 12 MHz   */
+       {800, 12, 1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {619, 12, 1, -1, -1, -1, -1, -1},       /* 16.8 MHz */
+       {125, 2, 1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
+       {400, 12, 1, -1, -1, -1, -1, -1},       /* 26 MHz   */
+       {800, 26, 1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {125, 5, 1, -1, -1, -1, -1, -1}         /* 38.4 MHz */
 };
 
 /* dpll locked at 1200 MHz - MPU clk at 600 MHz */
@@ -168,7 +168,6 @@ static const struct dpll_params abe_dpll_params_32k_196608khz = {
        750, 0, 1, 1, -1, -1, -1, -1
 };
 
-
 static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
        {80, 0, 2, -1, -1, -1, -1, -1},         /* 12 MHz   */
        {960, 12, 2, -1, -1, -1, -1, -1},       /* 13 MHz   */
@@ -179,98 +178,10 @@ static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
        {25, 0, 2, -1, -1, -1, -1, -1}          /* 38.4 MHz */
 };
 
-static inline u32 __get_sys_clk_index(void)
-{
-       u32 ind;
-       /*
-        * For ES1 the ROM code calibration of sys clock is not reliable
-        * due to hw issue. So, use hard-coded value. If this value is not
-        * correct for any board over-ride this function in board file
-        * From ES2.0 onwards you will get this information from
-        * CM_SYS_CLKSEL
-        */
-       if (omap_revision() == OMAP4430_ES1_0)
-               ind = OMAP_SYS_CLK_IND_38_4_MHZ;
-       else {
-               /* SYS_CLKSEL - 1 to match the dpll param array indices */
-               ind = (readl(&prcm->cm_sys_clksel) &
-                       CM_SYS_CLKSEL_SYS_CLKSEL_MASK) - 1;
-       }
-       return ind;
-}
-
-u32 get_sys_clk_index(void)
-       __attribute__ ((weak, alias("__get_sys_clk_index")));
-
-u32 get_sys_clk_freq(void)
-{
-       u8 index = get_sys_clk_index();
-       return sys_clk_array[index];
-}
-
-static inline void do_bypass_dpll(u32 *const base)
-{
-       struct dpll_regs *dpll_regs = (struct dpll_regs *)base;
-
-       clrsetbits_le32(&dpll_regs->cm_clkmode_dpll,
-                       CM_CLKMODE_DPLL_DPLL_EN_MASK,
-                       DPLL_EN_FAST_RELOCK_BYPASS <<
-                       CM_CLKMODE_DPLL_EN_SHIFT);
-}
-
-static inline void wait_for_bypass(u32 *const base)
-{
-       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
-
-       if (!wait_on_value(ST_DPLL_CLK_MASK, 0, &dpll_regs->cm_idlest_dpll,
-                               LDELAY)) {
-               printf("Bypassing DPLL failed %p\n", base);
-       }
-}
-
-static inline void do_lock_dpll(u32 *const base)
+void setup_post_dividers(u32 *const base, const struct dpll_params *params)
 {
        struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
 
-       clrsetbits_le32(&dpll_regs->cm_clkmode_dpll,
-                     CM_CLKMODE_DPLL_DPLL_EN_MASK,
-                     DPLL_EN_LOCK << CM_CLKMODE_DPLL_EN_SHIFT);
-}
-
-static inline void wait_for_lock(u32 *const base)
-{
-       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
-
-       if (!wait_on_value(ST_DPLL_CLK_MASK, ST_DPLL_CLK_MASK,
-               &dpll_regs->cm_idlest_dpll, LDELAY)) {
-               printf("DPLL locking failed for %p\n", base);
-               hang();
-       }
-}
-
-static void do_setup_dpll(u32 *const base, const struct dpll_params *params,
-                               u8 lock)
-{
-       u32 temp;
-       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
-
-       bypass_dpll(base);
-
-       /* Set M & N */
-       temp = readl(&dpll_regs->cm_clksel_dpll);
-
-       temp &= ~CM_CLKSEL_DPLL_M_MASK;
-       temp |= (params->m << CM_CLKSEL_DPLL_M_SHIFT) & CM_CLKSEL_DPLL_M_MASK;
-
-       temp &= ~CM_CLKSEL_DPLL_N_MASK;
-       temp |= (params->n << CM_CLKSEL_DPLL_N_SHIFT) & CM_CLKSEL_DPLL_N_MASK;
-
-       writel(temp, &dpll_regs->cm_clksel_dpll);
-
-       /* Lock */
-       if (lock)
-               do_lock_dpll(base);
-
        /* Setup post-dividers */
        if (params->m2 >= 0)
                writel(params->m2, &dpll_regs->cm_div_m2_dpll);
@@ -284,10 +195,29 @@ static void do_setup_dpll(u32 *const base, const struct dpll_params *params,
                writel(params->m6, &dpll_regs->cm_div_m6_dpll);
        if (params->m7 >= 0)
                writel(params->m7, &dpll_regs->cm_div_m7_dpll);
+}
+
+/*
+ * Lock MPU dpll
+ *
+ * Resulting MPU frequencies:
+ * 4430 ES1.0  : 600 MHz
+ * 4430 ES2.x  : 792 MHz (OPP Turbo)
+ * 4460                : 920 MHz (OPP Turbo) - DCC disabled
+ */
+const struct dpll_params *get_mpu_dpll_params(void)
+{
+       u32 omap_rev, sysclk_ind;
 
-       /* Wait till the DPLL locks */
-       if (lock)
-               wait_for_lock(base);
+       omap_rev = omap_revision();
+       sysclk_ind = get_sys_clk_index();
+
+       if (omap_rev == OMAP4430_ES1_0)
+               return &mpu_dpll_params_1200mhz[sysclk_ind];
+       else if (omap_rev < OMAP4460_ES1_0)
+               return &mpu_dpll_params_1600mhz[sysclk_ind];
+       else
+               return &mpu_dpll_params_1840mhz[sysclk_ind];
 }
 
 const struct dpll_params *get_core_dpll_params(void)
@@ -306,228 +236,33 @@ const struct dpll_params *get_core_dpll_params(void)
        }
 }
 
-u32 omap4_ddr_clk(void)
-{
-       u32 ddr_clk, sys_clk_khz;
-       const struct dpll_params *core_dpll_params;
-
-       sys_clk_khz = get_sys_clk_freq() / 1000;
-
-       core_dpll_params = get_core_dpll_params();
 
-       debug("sys_clk %d\n ", sys_clk_khz * 1000);
-
-       /* Find Core DPLL locked frequency first */
-       ddr_clk = sys_clk_khz * 2 * core_dpll_params->m /
-                       (core_dpll_params->n + 1);
-       /*
-        * DDR frequency is PHY_ROOT_CLK/2
-        * PHY_ROOT_CLK = Fdpll/2/M2
-        */
-       ddr_clk = ddr_clk / 4 / core_dpll_params->m2;
-
-       ddr_clk *= 1000;        /* convert to Hz */
-       debug("ddr_clk %d\n ", ddr_clk);
-
-       return ddr_clk;
+const struct dpll_params *get_per_dpll_params(void)
+{
+       u32 sysclk_ind = get_sys_clk_index();
+       return &per_dpll_params_1536mhz[sysclk_ind];
 }
 
-/*
- * Lock MPU dpll
- *
- * Resulting MPU frequencies:
- * 4430 ES1.0  : 600 MHz
- * 4430 ES2.x  : 792 MHz (OPP Turbo)
- * 4460                : 920 MHz (OPP Turbo) - DCC disabled
- */
-void configure_mpu_dpll(void)
+const struct dpll_params *get_iva_dpll_params(void)
 {
-       const struct dpll_params *params;
-       struct dpll_regs *mpu_dpll_regs;
-       u32 omap4_rev, sysclk_ind;
-
-       omap4_rev = omap_revision();
-       sysclk_ind = get_sys_clk_index();
-
-       if (omap4_rev == OMAP4430_ES1_0)
-               params = &mpu_dpll_params_1200mhz[sysclk_ind];
-       else if (omap4_rev < OMAP4460_ES1_0)
-               params = &mpu_dpll_params_1584mhz[sysclk_ind];
-       else
-               params = &mpu_dpll_params_1840mhz[sysclk_ind];
-
-       /* DCC and clock divider settings for 4460 */
-       if (omap4_rev >= OMAP4460_ES1_0) {
-               mpu_dpll_regs =
-                       (struct dpll_regs *)&prcm->cm_clkmode_dpll_mpu;
-               bypass_dpll(&prcm->cm_clkmode_dpll_mpu);
-               clrbits_le32(&prcm->cm_mpu_mpu_clkctrl,
-                       MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK);
-               setbits_le32(&prcm->cm_mpu_mpu_clkctrl,
-                       MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK);
-               clrbits_le32(&mpu_dpll_regs->cm_clksel_dpll,
-                       CM_CLKSEL_DCC_EN_MASK);
-       }
-
-       do_setup_dpll(&prcm->cm_clkmode_dpll_mpu, params, DPLL_LOCK);
-       debug("MPU DPLL locked\n");
+       u32 sysclk_ind = get_sys_clk_index();
+       return &iva_dpll_params_1862mhz[sysclk_ind];
 }
 
-static void setup_dplls(void)
+const struct dpll_params *get_usb_dpll_params(void)
 {
-       u32 sysclk_ind, temp;
-       const struct dpll_params *params;
-       debug("setup_dplls\n");
-
-       sysclk_ind = get_sys_clk_index();
-
-       /* CORE dpll */
-       params = get_core_dpll_params();        /* default - safest */
-       /*
-        * Do not lock the core DPLL now. Just set it up.
-        * Core DPLL will be locked after setting up EMIF
-        * using the FREQ_UPDATE method(freq_update_core())
-        */
-       do_setup_dpll(&prcm->cm_clkmode_dpll_core, params, DPLL_NO_LOCK);
-       /* Set the ratios for CORE_CLK, L3_CLK, L4_CLK */
-       temp = (CLKSEL_CORE_X2_DIV_1 << CLKSEL_CORE_SHIFT) |
-           (CLKSEL_L3_CORE_DIV_2 << CLKSEL_L3_SHIFT) |
-           (CLKSEL_L4_L3_DIV_2 << CLKSEL_L4_SHIFT);
-       writel(temp, &prcm->cm_clksel_core);
-       debug("Core DPLL configured\n");
-
-       /* lock PER dpll */
-       do_setup_dpll(&prcm->cm_clkmode_dpll_per,
-                       &per_dpll_params_1536mhz[sysclk_ind], DPLL_LOCK);
-       debug("PER DPLL locked\n");
-
-       /* MPU dpll */
-       configure_mpu_dpll();
+       u32 sysclk_ind = get_sys_clk_index();
+       return &usb_dpll_params_1920mhz[sysclk_ind];
 }
 
-static void setup_non_essential_dplls(void)
+const struct dpll_params *get_abe_dpll_params(void)
 {
-       u32 sys_clk_khz, abe_ref_clk;
-       u32 sysclk_ind, sd_div, num, den;
-       const struct dpll_params *params;
-
-       sysclk_ind = get_sys_clk_index();
-       sys_clk_khz = get_sys_clk_freq() / 1000;
-
-       /* IVA */
-       clrsetbits_le32(&prcm->cm_bypclk_dpll_iva,
-               CM_BYPCLK_DPLL_IVA_CLKSEL_MASK, DPLL_IVA_CLKSEL_CORE_X2_DIV_2);
-
-       do_setup_dpll(&prcm->cm_clkmode_dpll_iva,
-                       &iva_dpll_params_1862mhz[sysclk_ind], DPLL_LOCK);
-
-       /*
-        * USB:
-        * USB dpll is J-type. Need to set DPLL_SD_DIV for jitter correction
-        * DPLL_SD_DIV = CEILING ([DPLL_MULT/(DPLL_DIV+1)]* CLKINP / 250)
-        *      - where CLKINP is sys_clk in MHz
-        * Use CLKINP in KHz and adjust the denominator accordingly so
-        * that we have enough accuracy and at the same time no overflow
-        */
-       params = &usb_dpll_params_1920mhz[sysclk_ind];
-       num = params->m * sys_clk_khz;
-       den = (params->n + 1) * 250 * 1000;
-       num += den - 1;
-       sd_div = num / den;
-       clrsetbits_le32(&prcm->cm_clksel_dpll_usb,
-                       CM_CLKSEL_DPLL_DPLL_SD_DIV_MASK,
-                       sd_div << CM_CLKSEL_DPLL_DPLL_SD_DIV_SHIFT);
-
-       /* Now setup the dpll with the regular function */
-       do_setup_dpll(&prcm->cm_clkmode_dpll_usb, params, DPLL_LOCK);
-
-#ifdef CONFIG_SYS_OMAP4_ABE_SYSCK
-       params = &abe_dpll_params_sysclk_196608khz[sysclk_ind];
-       abe_ref_clk = CM_ABE_PLL_REF_CLKSEL_CLKSEL_SYSCLK;
+#ifdef CONFIG_SYS_OMAP_ABE_SYSCK
+       u32 sysclk_ind = get_sys_clk_index();
+       return &abe_dpll_params_sysclk_196608khz[sysclk_ind];
 #else
-       params = &abe_dpll_params_32k_196608khz;
-       abe_ref_clk = CM_ABE_PLL_REF_CLKSEL_CLKSEL_32KCLK;
-       /*
-        * We need to enable some additional options to achieve
-        * 196.608MHz from 32768 Hz
-        */
-       setbits_le32(&prcm->cm_clkmode_dpll_abe,
-                       CM_CLKMODE_DPLL_DRIFTGUARD_EN_MASK|
-                       CM_CLKMODE_DPLL_RELOCK_RAMP_EN_MASK|
-                       CM_CLKMODE_DPLL_LPMODE_EN_MASK|
-                       CM_CLKMODE_DPLL_REGM4XEN_MASK);
-       /* Spend 4 REFCLK cycles at each stage */
-       clrsetbits_le32(&prcm->cm_clkmode_dpll_abe,
-                       CM_CLKMODE_DPLL_RAMP_RATE_MASK,
-                       1 << CM_CLKMODE_DPLL_RAMP_RATE_SHIFT);
+       return &abe_dpll_params_32k_196608khz;
 #endif
-
-       /* Select the right reference clk */
-       clrsetbits_le32(&prcm->cm_abe_pll_ref_clksel,
-                       CM_ABE_PLL_REF_CLKSEL_CLKSEL_MASK,
-                       abe_ref_clk << CM_ABE_PLL_REF_CLKSEL_CLKSEL_SHIFT);
-       /* Lock the dpll */
-       do_setup_dpll(&prcm->cm_clkmode_dpll_abe, params, DPLL_LOCK);
-}
-
-static void do_scale_tps62361(u32 reg, u32 volt_mv)
-{
-       u32 temp, step;
-
-       step = volt_mv - TPS62361_BASE_VOLT_MV;
-       step /= 10;
-
-       /*
-        * Select SET1 in TPS62361:
-        * VSEL1 is grounded on board. So the following selects
-        * VSEL1 = 0 and VSEL0 = 1
-        */
-       gpio_direction_output(TPS62361_VSEL0_GPIO, 0);
-       gpio_set_value(TPS62361_VSEL0_GPIO, 1);
-
-       temp = TPS62361_I2C_SLAVE_ADDR |
-           (reg << PRM_VC_VAL_BYPASS_REGADDR_SHIFT) |
-           (step << PRM_VC_VAL_BYPASS_DATA_SHIFT) |
-           PRM_VC_VAL_BYPASS_VALID_BIT;
-       debug("do_scale_tps62361: volt - %d step - 0x%x\n", volt_mv, step);
-
-       writel(temp, &prcm->prm_vc_val_bypass);
-       if (!wait_on_value(PRM_VC_VAL_BYPASS_VALID_BIT, 0,
-                               &prcm->prm_vc_val_bypass, LDELAY)) {
-               puts("Scaling voltage failed for vdd_mpu from TPS\n");
-       }
-}
-
-static void do_scale_vcore(u32 vcore_reg, u32 volt_mv)
-{
-       u32 temp, offset_code;
-       u32 step = 12660; /* 12.66 mV represented in uV */
-       u32 offset = volt_mv;
-
-       /* convert to uV for better accuracy in the calculations */
-       offset *= 1000;
-
-       if (omap_revision() == OMAP4430_ES1_0)
-               offset -= PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV;
-       else
-               offset -= PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV;
-
-       offset_code = (offset + step - 1) / step;
-       /* The code starts at 1 not 0 */
-       offset_code++;
-
-       debug("do_scale_vcore: volt - %d offset_code - 0x%x\n", volt_mv,
-               offset_code);
-
-       temp = SMPS_I2C_SLAVE_ADDR |
-           (vcore_reg << PRM_VC_VAL_BYPASS_REGADDR_SHIFT) |
-           (offset_code << PRM_VC_VAL_BYPASS_DATA_SHIFT) |
-           PRM_VC_VAL_BYPASS_VALID_BIT;
-       writel(temp, &prcm->prm_vc_val_bypass);
-       if (!wait_on_value(PRM_VC_VAL_BYPASS_VALID_BIT, 0,
-                               &prcm->prm_vc_val_bypass, LDELAY)) {
-               printf("Scaling voltage failed for 0x%x\n", vcore_reg);
-       }
 }
 
 /*
@@ -536,32 +271,16 @@ static void do_scale_vcore(u32 vcore_reg, u32 volt_mv)
  * enabled in bootloader. Voltage initialization in the kernel will set
  * these to the nominal values after enabling Smart-Reflex
  */
-static void scale_vcores(void)
+void scale_vcores(void)
 {
-       u32 volt, sys_clk_khz, cycles_hi, cycles_low, temp, omap4_rev;
+       u32 volt, omap_rev;
 
-       sys_clk_khz = get_sys_clk_freq() / 1000;
+       setup_sri2c();
 
-       /*
-        * Setup the dedicated I2C controller for Voltage Control
-        * I2C clk - high period 40% low period 60%
-        */
-       cycles_hi = sys_clk_khz * 4 / PRM_VC_I2C_CHANNEL_FREQ_KHZ / 10;
-       cycles_low = sys_clk_khz * 6 / PRM_VC_I2C_CHANNEL_FREQ_KHZ / 10;
-       /* values to be set in register - less by 5 & 7 respectively */
-       cycles_hi -= 5;
-       cycles_low -= 7;
-       temp = (cycles_hi << PRM_VC_CFG_I2C_CLK_SCLH_SHIFT) |
-              (cycles_low << PRM_VC_CFG_I2C_CLK_SCLL_SHIFT);
-       writel(temp, &prcm->prm_vc_cfg_i2c_clk);
-
-       /* Disable high speed mode and all advanced features */
-       writel(0x0, &prcm->prm_vc_cfg_i2c_mode);
-
-       omap4_rev = omap_revision();
+       omap_rev = omap_revision();
        /* TPS - supplies vdd_mpu on 4460 */
-       if (omap4_rev >= OMAP4460_ES1_0) {
-               volt = 1430;
+       if (omap_rev >= OMAP4460_ES1_0) {
+               volt = 1313;
                do_scale_tps62361(TPS62361_REG_ADDR_SET1, volt);
        }
 
@@ -576,8 +295,8 @@ static void scale_vcores(void)
         *
         * 4460 : supplies vdd_core
         */
-       if (omap4_rev < OMAP4460_ES1_0) {
-               volt = 1417;
+       if (omap_rev < OMAP4460_ES1_0) {
+               volt = 1325;
                do_scale_vcore(SMPS_REG_ADDR_VCORE1, volt);
        } else {
                volt = 1200;
@@ -593,55 +312,18 @@ static void scale_vcores(void)
         * 4430 : supplies vdd_core
         * 4460 : not connected
         */
-       if (omap4_rev < OMAP4460_ES1_0) {
+       if (omap_rev < OMAP4460_ES1_0) {
                volt = 1200;
                do_scale_vcore(SMPS_REG_ADDR_VCORE3, volt);
        }
 }
 
-static inline void enable_clock_domain(u32 *const clkctrl_reg, u32 enable_mode)
-{
-       clrsetbits_le32(clkctrl_reg, CD_CLKCTRL_CLKTRCTRL_MASK,
-                       enable_mode << CD_CLKCTRL_CLKTRCTRL_SHIFT);
-       debug("Enable clock domain - %p\n", clkctrl_reg);
-}
-
-static inline void wait_for_clk_enable(u32 *clkctrl_addr)
-{
-       u32 clkctrl, idlest = MODULE_CLKCTRL_IDLEST_DISABLED;
-       u32 bound = LDELAY;
-
-       while ((idlest == MODULE_CLKCTRL_IDLEST_DISABLED) ||
-               (idlest == MODULE_CLKCTRL_IDLEST_TRANSITIONING)) {
-
-               clkctrl = readl(clkctrl_addr);
-               idlest = (clkctrl & MODULE_CLKCTRL_IDLEST_MASK) >>
-                        MODULE_CLKCTRL_IDLEST_SHIFT;
-               if (--bound == 0) {
-                       printf("Clock enable failed for 0x%p idlest 0x%x\n",
-                               clkctrl_addr, clkctrl);
-                       return;
-               }
-       }
-}
-
-static inline void enable_clock_module(u32 *const clkctrl_addr, u32 enable_mode,
-                               u32 wait_for_enable)
-{
-       clrsetbits_le32(clkctrl_addr, MODULE_CLKCTRL_MODULEMODE_MASK,
-                       enable_mode << MODULE_CLKCTRL_MODULEMODE_SHIFT);
-       debug("Enable clock module - %p\n", clkctrl_addr);
-       if (wait_for_enable)
-               wait_for_clk_enable(clkctrl_addr);
-}
-
 /*
  * Enable essential clock domains, modules and
  * do some additional special settings needed
  */
-static void enable_basic_clocks(void)
+void enable_basic_clocks(void)
 {
-       u32 i, max = 100, wait_for_enable = 1;
        u32 *const clk_domains_essential[] = {
                &prcm->cm_l4per_clkstctrl,
                &prcm->cm_l3init_clkstctrl,
@@ -651,30 +333,23 @@ static void enable_basic_clocks(void)
        };
 
        u32 *const clk_modules_hw_auto_essential[] = {
+               &prcm->cm_memif_emif_1_clkctrl,
+               &prcm->cm_memif_emif_2_clkctrl,
+               &prcm->cm_l4cfg_l4_cfg_clkctrl,
                &prcm->cm_wkup_gpio1_clkctrl,
                &prcm->cm_l4per_gpio2_clkctrl,
                &prcm->cm_l4per_gpio3_clkctrl,
                &prcm->cm_l4per_gpio4_clkctrl,
                &prcm->cm_l4per_gpio5_clkctrl,
                &prcm->cm_l4per_gpio6_clkctrl,
-               &prcm->cm_memif_emif_1_clkctrl,
-               &prcm->cm_memif_emif_2_clkctrl,
-               &prcm->cm_l3init_hsusbotg_clkctrl,
-               &prcm->cm_l3init_usbphy_clkctrl,
-               &prcm->cm_l4cfg_l4_cfg_clkctrl,
                0
        };
 
        u32 *const clk_modules_explicit_en_essential[] = {
-               &prcm->cm_l4per_gptimer2_clkctrl,
+               &prcm->cm_wkup_gptimer1_clkctrl,
                &prcm->cm_l3init_hsmmc1_clkctrl,
                &prcm->cm_l3init_hsmmc2_clkctrl,
-               &prcm->cm_l4per_mcspi1_clkctrl,
-               &prcm->cm_wkup_gptimer1_clkctrl,
-               &prcm->cm_l4per_i2c1_clkctrl,
-               &prcm->cm_l4per_i2c2_clkctrl,
-               &prcm->cm_l4per_i2c3_clkctrl,
-               &prcm->cm_l4per_i2c4_clkctrl,
+               &prcm->cm_l4per_gptimer2_clkctrl,
                &prcm->cm_wkup_wdtimer2_clkctrl,
                &prcm->cm_l4per_uart3_clkctrl,
                0
@@ -698,40 +373,45 @@ static void enable_basic_clocks(void)
        setbits_le32(&prcm->cm_l3init_usbphy_clkctrl,
                        USBPHY_CLKCTRL_OPTFCLKEN_PHY_48M_MASK);
 
-       /* Put the clock domains in SW_WKUP mode */
-       for (i = 0; (i < max) && clk_domains_essential[i]; i++) {
-               enable_clock_domain(clk_domains_essential[i],
-                                   CD_CLKCTRL_CLKTRCTRL_SW_WKUP);
-       }
+       do_enable_clocks(clk_domains_essential,
+                        clk_modules_hw_auto_essential,
+                        clk_modules_explicit_en_essential,
+                        1);
+}
+
+void enable_basic_uboot_clocks(void)
+{
+       u32 *const clk_domains_essential[] = {
+               0
+       };
 
-       /* Clock modules that need to be put in HW_AUTO */
-       for (i = 0; (i < max) && clk_modules_hw_auto_essential[i]; i++) {
-               enable_clock_module(clk_modules_hw_auto_essential[i],
-                                   MODULE_CLKCTRL_MODULEMODE_HW_AUTO,
-                                   wait_for_enable);
+       u32 *const clk_modules_hw_auto_essential[] = {
+               &prcm->cm_l3init_hsusbotg_clkctrl,
+               &prcm->cm_l3init_usbphy_clkctrl,
+               0
        };
 
-       /* Clock modules that need to be put in SW_EXPLICIT_EN mode */
-       for (i = 0; (i < max) && clk_modules_explicit_en_essential[i]; i++) {
-               enable_clock_module(clk_modules_explicit_en_essential[i],
-                                   MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN,
-                                   wait_for_enable);
+       u32 *const clk_modules_explicit_en_essential[] = {
+               &prcm->cm_l4per_mcspi1_clkctrl,
+               &prcm->cm_l4per_i2c1_clkctrl,
+               &prcm->cm_l4per_i2c2_clkctrl,
+               &prcm->cm_l4per_i2c3_clkctrl,
+               &prcm->cm_l4per_i2c4_clkctrl,
+               0
        };
 
-       /* Put the clock domains in HW_AUTO mode now */
-       for (i = 0; (i < max) && clk_domains_essential[i]; i++) {
-               enable_clock_domain(clk_domains_essential[i],
-                                   CD_CLKCTRL_CLKTRCTRL_HW_AUTO);
-       }
+       do_enable_clocks(clk_domains_essential,
+                        clk_modules_hw_auto_essential,
+                        clk_modules_explicit_en_essential,
+                        1);
 }
 
 /*
  * Enable non-essential clock domains, modules and
  * do some additional special settings needed
  */
-static void enable_non_essential_clocks(void)
+void enable_non_essential_clocks(void)
 {
-       u32 i, max = 100, wait_for_enable = 0;
        u32 *const clk_domains_non_essential[] = {
                &prcm->cm_mpu_m3_clkstctrl,
                &prcm->cm_ivahd_clkstctrl,
@@ -807,135 +487,13 @@ static void enable_non_essential_clocks(void)
        /* Enable all optional functional clocks of DSS */
        setbits_le32(&prcm->cm_dss_dss_clkctrl, DSS_CLKCTRL_OPTFCLKEN_MASK);
 
-
-       /* Put the clock domains in SW_WKUP mode */
-       for (i = 0; (i < max) && clk_domains_non_essential[i]; i++) {
-               enable_clock_domain(clk_domains_non_essential[i],
-                                   CD_CLKCTRL_CLKTRCTRL_SW_WKUP);
-       }
-
-       /* Clock modules that need to be put in HW_AUTO */
-       for (i = 0; (i < max) && clk_modules_hw_auto_non_essential[i]; i++) {
-               enable_clock_module(clk_modules_hw_auto_non_essential[i],
-                                   MODULE_CLKCTRL_MODULEMODE_HW_AUTO,
-                                   wait_for_enable);
-       };
-
-       /* Clock modules that need to be put in SW_EXPLICIT_EN mode */
-       for (i = 0; (i < max) && clk_modules_explicit_en_non_essential[i];
-            i++) {
-               enable_clock_module(clk_modules_explicit_en_non_essential[i],
-                                   MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN,
-                                   wait_for_enable);
-       };
-
-       /* Put the clock domains in HW_AUTO mode now */
-       for (i = 0; (i < max) && clk_domains_non_essential[i]; i++) {
-               enable_clock_domain(clk_domains_non_essential[i],
-                                   CD_CLKCTRL_CLKTRCTRL_HW_AUTO);
-       }
+       do_enable_clocks(clk_domains_non_essential,
+                        clk_modules_hw_auto_non_essential,
+                        clk_modules_explicit_en_non_essential,
+                        0);
 
        /* Put camera module in no sleep mode */
        clrsetbits_le32(&prcm->cm_cam_clkstctrl, MODULE_CLKCTRL_MODULEMODE_MASK,
                        CD_CLKCTRL_CLKTRCTRL_NO_SLEEP <<
                        MODULE_CLKCTRL_MODULEMODE_SHIFT);
 }
-
-
-void freq_update_core(void)
-{
-       u32 freq_config1 = 0;
-       const struct dpll_params *core_dpll_params;
-
-       core_dpll_params = get_core_dpll_params();
-       /* Put EMIF clock domain in sw wakeup mode */
-       enable_clock_domain(&prcm->cm_memif_clkstctrl,
-                               CD_CLKCTRL_CLKTRCTRL_SW_WKUP);
-       wait_for_clk_enable(&prcm->cm_memif_emif_1_clkctrl);
-       wait_for_clk_enable(&prcm->cm_memif_emif_2_clkctrl);
-
-       freq_config1 = SHADOW_FREQ_CONFIG1_FREQ_UPDATE_MASK |
-           SHADOW_FREQ_CONFIG1_DLL_RESET_MASK;
-
-       freq_config1 |= (DPLL_EN_LOCK << SHADOW_FREQ_CONFIG1_DPLL_EN_SHIFT) &
-                               SHADOW_FREQ_CONFIG1_DPLL_EN_MASK;
-
-       freq_config1 |= (core_dpll_params->m2 <<
-                       SHADOW_FREQ_CONFIG1_M2_DIV_SHIFT) &
-                       SHADOW_FREQ_CONFIG1_M2_DIV_MASK;
-
-       writel(freq_config1, &prcm->cm_shadow_freq_config1);
-       if (!wait_on_value(SHADOW_FREQ_CONFIG1_FREQ_UPDATE_MASK, 0,
-                               &prcm->cm_shadow_freq_config1, LDELAY)) {
-               puts("FREQ UPDATE procedure failed!!");
-               hang();
-       }
-
-       /* Put EMIF clock domain back in hw auto mode */
-       enable_clock_domain(&prcm->cm_memif_clkstctrl,
-                               CD_CLKCTRL_CLKTRCTRL_HW_AUTO);
-       wait_for_clk_enable(&prcm->cm_memif_emif_1_clkctrl);
-       wait_for_clk_enable(&prcm->cm_memif_emif_2_clkctrl);
-}
-
-void bypass_dpll(u32 *const base)
-{
-       do_bypass_dpll(base);
-       wait_for_bypass(base);
-}
-
-void lock_dpll(u32 *const base)
-{
-       do_lock_dpll(base);
-       wait_for_lock(base);
-}
-
-void setup_clocks_for_console(void)
-{
-       /* Do not add any spl_debug prints in this function */
-       clrsetbits_le32(&prcm->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK,
-                       CD_CLKCTRL_CLKTRCTRL_SW_WKUP <<
-                       CD_CLKCTRL_CLKTRCTRL_SHIFT);
-
-       /* Enable all UARTs - console will be on one of them */
-       clrsetbits_le32(&prcm->cm_l4per_uart1_clkctrl,
-                       MODULE_CLKCTRL_MODULEMODE_MASK,
-                       MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
-                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
-
-       clrsetbits_le32(&prcm->cm_l4per_uart2_clkctrl,
-                       MODULE_CLKCTRL_MODULEMODE_MASK,
-                       MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
-                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
-
-       clrsetbits_le32(&prcm->cm_l4per_uart3_clkctrl,
-                       MODULE_CLKCTRL_MODULEMODE_MASK,
-                       MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
-                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
-
-       clrsetbits_le32(&prcm->cm_l4per_uart3_clkctrl,
-                       MODULE_CLKCTRL_MODULEMODE_MASK,
-                       MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<
-                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
-
-       clrsetbits_le32(&prcm->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK,
-                       CD_CLKCTRL_CLKTRCTRL_HW_AUTO <<
-                       CD_CLKCTRL_CLKTRCTRL_SHIFT);
-}
-
-void prcm_init(void)
-{
-       switch (omap4_hw_init_context()) {
-       case OMAP_INIT_CONTEXT_SPL:
-       case OMAP_INIT_CONTEXT_UBOOT_FROM_NOR:
-       case OMAP_INIT_CONTEXT_UBOOT_AFTER_CH:
-               enable_basic_clocks();
-               scale_vcores();
-               setup_dplls();
-               setup_non_essential_dplls();
-               enable_non_essential_clocks();
-               break;
-       default:
-               break;
-       }
-}
index 988b2050fa833f8cf6cb9cc59aeeff7acf8bea8b..ca4823dd79e1177c2a5f6f1d7a69763d4f65054c 100644 (file)
  */
 
 #include <common.h>
-#include <asm/arch/emif.h>
-#include <asm/arch/clocks.h>
+#include <asm/emif.h>
 #include <asm/arch/sys_proto.h>
-#include <asm/omap_common.h>
 #include <asm/utils.h>
 
-static inline u32 emif_num(u32 base)
-{
-       if (base == OMAP44XX_EMIF1)
-               return 1;
-       else if (base == OMAP44XX_EMIF2)
-               return 2;
-       else
-               return 0;
-}
-
-static inline u32 get_mr(u32 base, u32 cs, u32 mr_addr)
-{
-       u32 mr;
-       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
-
-       mr_addr |= cs << OMAP44XX_REG_CS_SHIFT;
-       writel(mr_addr, &emif->emif_lpddr2_mode_reg_cfg);
-       if (omap_revision() == OMAP4430_ES2_0)
-               mr = readl(&emif->emif_lpddr2_mode_reg_data_es2);
-       else
-               mr = readl(&emif->emif_lpddr2_mode_reg_data);
-       debug("get_mr: EMIF%d cs %d mr %08x val 0x%x\n", emif_num(base),
-             cs, mr_addr, mr);
-       return mr;
-}
-
-static inline void set_mr(u32 base, u32 cs, u32 mr_addr, u32 mr_val)
-{
-       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
-
-       mr_addr |= cs << OMAP44XX_REG_CS_SHIFT;
-       writel(mr_addr, &emif->emif_lpddr2_mode_reg_cfg);
-       writel(mr_val, &emif->emif_lpddr2_mode_reg_data);
-}
-
-void emif_reset_phy(u32 base)
-{
-       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
-       u32 iodft;
-
-       iodft = readl(&emif->emif_iodft_tlgc);
-       iodft |= OMAP44XX_REG_RESET_PHY_MASK;
-       writel(iodft, &emif->emif_iodft_tlgc);
-}
-
-static void do_lpddr2_init(u32 base, u32 cs)
-{
-       u32 mr_addr;
-
-       /* Wait till device auto initialization is complete */
-       while (get_mr(base, cs, LPDDR2_MR0) & LPDDR2_MR0_DAI_MASK)
-               ;
-       set_mr(base, cs, LPDDR2_MR10, MR10_ZQ_ZQINIT);
-       /*
-        * tZQINIT = 1 us
-        * Enough loops assuming a maximum of 2GHz
-        */
-       sdelay(2000);
-       set_mr(base, cs, LPDDR2_MR1, MR1_BL_8_BT_SEQ_WRAP_EN_NWR_3);
-       set_mr(base, cs, LPDDR2_MR16, MR16_REF_FULL_ARRAY);
-       /*
-        * Enable refresh along with writing MR2
-        * Encoding of RL in MR2 is (RL - 2)
-        */
-       mr_addr = LPDDR2_MR2 | OMAP44XX_REG_REFRESH_EN_MASK;
-       set_mr(base, cs, mr_addr, RL_FINAL - 2);
-}
-
-static void lpddr2_init(u32 base, const struct emif_regs *regs)
-{
-       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
-
-       /* Not NVM */
-       clrbits_le32(&emif->emif_lpddr2_nvm_config, OMAP44XX_REG_CS1NVMEN_MASK);
-
-       /*
-        * Keep REG_INITREF_DIS = 1 to prevent re-initialization of SDRAM
-        * when EMIF_SDRAM_CONFIG register is written
-        */
-       setbits_le32(&emif->emif_sdram_ref_ctrl, OMAP44XX_REG_INITREF_DIS_MASK);
-
-       /*
-        * Set the SDRAM_CONFIG and PHY_CTRL for the
-        * un-locked frequency & default RL
-        */
-       writel(regs->sdram_config_init, &emif->emif_sdram_config);
-       writel(regs->emif_ddr_phy_ctlr_1_init, &emif->emif_ddr_phy_ctrl_1);
-
-       do_lpddr2_init(base, CS0);
-       if (regs->sdram_config & OMAP44XX_REG_EBANK_MASK)
-               do_lpddr2_init(base, CS1);
-
-       writel(regs->sdram_config, &emif->emif_sdram_config);
-       writel(regs->emif_ddr_phy_ctlr_1, &emif->emif_ddr_phy_ctrl_1);
-
-       /* Enable refresh now */
-       clrbits_le32(&emif->emif_sdram_ref_ctrl, OMAP44XX_REG_INITREF_DIS_MASK);
-
-}
-
-static void emif_update_timings(u32 base, const struct emif_regs *regs)
-{
-       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
-
-       writel(regs->ref_ctrl, &emif->emif_sdram_ref_ctrl_shdw);
-       writel(regs->sdram_tim1, &emif->emif_sdram_tim_1_shdw);
-       writel(regs->sdram_tim2, &emif->emif_sdram_tim_2_shdw);
-       writel(regs->sdram_tim3, &emif->emif_sdram_tim_3_shdw);
-       if (omap_revision() == OMAP4430_ES1_0) {
-               /* ES1 bug EMIF should be in force idle during freq_update */
-               writel(0, &emif->emif_pwr_mgmt_ctrl);
-       } else {
-               writel(EMIF_PWR_MGMT_CTRL, &emif->emif_pwr_mgmt_ctrl);
-               writel(EMIF_PWR_MGMT_CTRL_SHDW, &emif->emif_pwr_mgmt_ctrl_shdw);
-       }
-       writel(regs->read_idle_ctrl, &emif->emif_read_idlectrl_shdw);
-       writel(regs->zq_config, &emif->emif_zq_config);
-       writel(regs->temp_alert_config, &emif->emif_temp_alert_config);
-       writel(regs->emif_ddr_phy_ctlr_1, &emif->emif_ddr_phy_ctrl_1_shdw);
-
-       if (omap_revision() >= OMAP4460_ES1_0) {
-               writel(EMIF_L3_CONFIG_VAL_SYS_10_MPU_3_LL_0,
-                       &emif->emif_l3_config);
-       } else {
-               writel(EMIF_L3_CONFIG_VAL_SYS_10_LL_0,
-                       &emif->emif_l3_config);
-       }
-}
-
 #ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
-#define print_timing_reg(reg) debug(#reg" - 0x%08x\n", (reg))
-
-static u32 *const T_num = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_T_NUM;
-static u32 *const T_den = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_T_DEN;
-static u32 *const emif_sizes = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_SIZE;
-
-/*
- * Organization and refresh requirements for LPDDR2 devices of different
- * types and densities. Derived from JESD209-2 section 2.4
- */
-const struct lpddr2_addressing addressing_table[] = {
-       /* Banks tREFIx10     rowx32,rowx16      colx32,colx16  density */
-       {BANKS4, T_REFI_15_6, {ROW_12, ROW_12}, {COL_7, COL_8} },/*64M */
-       {BANKS4, T_REFI_15_6, {ROW_12, ROW_12}, {COL_8, COL_9} },/*128M */
-       {BANKS4, T_REFI_7_8, {ROW_13, ROW_13}, {COL_8, COL_9} },/*256M */
-       {BANKS4, T_REFI_7_8, {ROW_13, ROW_13}, {COL_9, COL_10} },/*512M */
-       {BANKS8, T_REFI_7_8, {ROW_13, ROW_13}, {COL_9, COL_10} },/*1GS4 */
-       {BANKS8, T_REFI_3_9, {ROW_14, ROW_14}, {COL_9, COL_10} },/*2GS4 */
-       {BANKS8, T_REFI_3_9, {ROW_14, ROW_14}, {COL_10, COL_11} },/*4G */
-       {BANKS8, T_REFI_3_9, {ROW_15, ROW_15}, {COL_10, COL_11} },/*8G */
-       {BANKS4, T_REFI_7_8, {ROW_14, ROW_14}, {COL_9, COL_10} },/*1GS2 */
-       {BANKS4, T_REFI_3_9, {ROW_15, ROW_15}, {COL_9, COL_10} },/*2GS2 */
-};
-
-static const u32 lpddr2_density_2_size_in_mbytes[] = {
-       8,                      /* 64Mb */
-       16,                     /* 128Mb */
-       32,                     /* 256Mb */
-       64,                     /* 512Mb */
-       128,                    /* 1Gb   */
-       256,                    /* 2Gb   */
-       512,                    /* 4Gb   */
-       1024,                   /* 8Gb   */
-       2048,                   /* 16Gb  */
-       4096                    /* 32Gb  */
-};
-
-/*
- * Calculate the period of DDR clock from frequency value and set the
- * denominator and numerator in global variables for easy access later
- */
-static void set_ddr_clk_period(u32 freq)
-{
-       /*
-        * period = 1/freq
-        * period_in_ns = 10^9/freq
-        */
-       *T_num = 1000000000;
-       *T_den = freq;
-       cancel_out(T_num, T_den, 200);
-
-}
-
-/*
- * Convert time in nano seconds to number of cycles of DDR clock
- */
-static inline u32 ns_2_cycles(u32 ns)
-{
-       return ((ns * (*T_den)) + (*T_num) - 1) / (*T_num);
-}
-
-/*
- * ns_2_cycles with the difference that the time passed is 2 times the actual
- * value(to avoid fractions). The cycles returned is for the original value of
- * the timing parameter
- */
-static inline u32 ns_x2_2_cycles(u32 ns)
-{
-       return ((ns * (*T_den)) + (*T_num) * 2 - 1) / ((*T_num) * 2);
-}
-
-/*
- * Find addressing table index based on the device's type(S2 or S4) and
- * density
- */
-s8 addressing_table_index(u8 type, u8 density, u8 width)
-{
-       u8 index;
-       if ((density > LPDDR2_DENSITY_8Gb) || (width == LPDDR2_IO_WIDTH_8))
-               return -1;
-
-       /*
-        * Look at the way ADDR_TABLE_INDEX* values have been defined
-        * in emif.h compared to LPDDR2_DENSITY_* values
-        * The table is layed out in the increasing order of density
-        * (ignoring type). The exceptions 1GS2 and 2GS2 have been placed
-        * at the end
-        */
-       if ((type == LPDDR2_TYPE_S2) && (density == LPDDR2_DENSITY_1Gb))
-               index = ADDR_TABLE_INDEX1GS2;
-       else if ((type == LPDDR2_TYPE_S2) && (density == LPDDR2_DENSITY_2Gb))
-               index = ADDR_TABLE_INDEX2GS2;
-       else
-               index = density;
-
-       debug("emif: addressing table index %d\n", index);
-
-       return index;
-}
-
-/*
- * Find the the right timing table from the array of timing
- * tables of the device using DDR clock frequency
- */
-static const struct lpddr2_ac_timings *get_timings_table(const struct
-                       lpddr2_ac_timings const *const *device_timings,
-                       u32 freq)
-{
-       u32 i, temp, freq_nearest;
-       const struct lpddr2_ac_timings *timings = 0;
-
-       emif_assert(freq <= MAX_LPDDR2_FREQ);
-       emif_assert(device_timings);
-
-       /*
-        * Start with the maximum allowed frequency - that is always safe
-        */
-       freq_nearest = MAX_LPDDR2_FREQ;
-       /*
-        * Find the timings table that has the max frequency value:
-        *   i.  Above or equal to the DDR frequency - safe
-        *   ii. The lowest that satisfies condition (i) - optimal
-        */
-       for (i = 0; (i < MAX_NUM_SPEEDBINS) && device_timings[i]; i++) {
-               temp = device_timings[i]->max_freq;
-               if ((temp >= freq) && (temp <= freq_nearest)) {
-                       freq_nearest = temp;
-                       timings = device_timings[i];
-               }
-       }
-       debug("emif: timings table: %d\n", freq_nearest);
-       return timings;
-}
-
-/*
- * Finds the value of emif_sdram_config_reg
- * All parameters are programmed based on the device on CS0.
- * If there is a device on CS1, it will be same as that on CS0 or
- * it will be NVM. We don't support NVM yet.
- * If cs1_device pointer is NULL it is assumed that there is no device
- * on CS1
- */
-static u32 get_sdram_config_reg(const struct lpddr2_device_details *cs0_device,
-                               const struct lpddr2_device_details *cs1_device,
-                               const struct lpddr2_addressing *addressing,
-                               u8 RL)
-{
-       u32 config_reg = 0;
-
-       config_reg |=  (cs0_device->type + 4) << OMAP44XX_REG_SDRAM_TYPE_SHIFT;
-       config_reg |=  EMIF_INTERLEAVING_POLICY_MAX_INTERLEAVING <<
-                       OMAP44XX_REG_IBANK_POS_SHIFT;
-
-       config_reg |= cs0_device->io_width << OMAP44XX_REG_NARROW_MODE_SHIFT;
-
-       config_reg |= RL << OMAP44XX_REG_CL_SHIFT;
-
-       config_reg |= addressing->row_sz[cs0_device->io_width] <<
-                       OMAP44XX_REG_ROWSIZE_SHIFT;
-
-       config_reg |= addressing->num_banks << OMAP44XX_REG_IBANK_SHIFT;
-
-       config_reg |= (cs1_device ? EBANK_CS1_EN : EBANK_CS1_DIS) <<
-                       OMAP44XX_REG_EBANK_SHIFT;
-
-       config_reg |= addressing->col_sz[cs0_device->io_width] <<
-                       OMAP44XX_REG_PAGESIZE_SHIFT;
-
-       return config_reg;
-}
-
-static u32 get_sdram_ref_ctrl(u32 freq,
-                             const struct lpddr2_addressing *addressing)
-{
-       u32 ref_ctrl = 0, val = 0, freq_khz;
-       freq_khz = freq / 1000;
-       /*
-        * refresh rate to be set is 'tREFI * freq in MHz
-        * division by 10000 to account for khz and x10 in t_REFI_us_x10
-        */
-       val = addressing->t_REFI_us_x10 * freq_khz / 10000;
-       ref_ctrl |= val << OMAP44XX_REG_REFRESH_RATE_SHIFT;
-
-       return ref_ctrl;
-}
-
-static u32 get_sdram_tim_1_reg(const struct lpddr2_ac_timings *timings,
-                              const struct lpddr2_min_tck *min_tck,
-                              const struct lpddr2_addressing *addressing)
-{
-       u32 tim1 = 0, val = 0;
-       val = max(min_tck->tWTR, ns_x2_2_cycles(timings->tWTRx2)) - 1;
-       tim1 |= val << OMAP44XX_REG_T_WTR_SHIFT;
-
-       if (addressing->num_banks == BANKS8)
-               val = (timings->tFAW * (*T_den) + 4 * (*T_num) - 1) /
-                                                       (4 * (*T_num)) - 1;
-       else
-               val = max(min_tck->tRRD, ns_2_cycles(timings->tRRD)) - 1;
-
-       tim1 |= val << OMAP44XX_REG_T_RRD_SHIFT;
-
-       val = ns_2_cycles(timings->tRASmin + timings->tRPab) - 1;
-       tim1 |= val << OMAP44XX_REG_T_RC_SHIFT;
-
-       val = max(min_tck->tRAS_MIN, ns_2_cycles(timings->tRASmin)) - 1;
-       tim1 |= val << OMAP44XX_REG_T_RAS_SHIFT;
-
-       val = max(min_tck->tWR, ns_2_cycles(timings->tWR)) - 1;
-       tim1 |= val << OMAP44XX_REG_T_WR_SHIFT;
-
-       val = max(min_tck->tRCD, ns_2_cycles(timings->tRCD)) - 1;
-       tim1 |= val << OMAP44XX_REG_T_RCD_SHIFT;
-
-       val = max(min_tck->tRP_AB, ns_2_cycles(timings->tRPab)) - 1;
-       tim1 |= val << OMAP44XX_REG_T_RP_SHIFT;
-
-       return tim1;
-}
-
-static u32 get_sdram_tim_2_reg(const struct lpddr2_ac_timings *timings,
-                              const struct lpddr2_min_tck *min_tck)
-{
-       u32 tim2 = 0, val = 0;
-       val = max(min_tck->tCKE, timings->tCKE) - 1;
-       tim2 |= val << OMAP44XX_REG_T_CKE_SHIFT;
-
-       val = max(min_tck->tRTP, ns_x2_2_cycles(timings->tRTPx2)) - 1;
-       tim2 |= val << OMAP44XX_REG_T_RTP_SHIFT;
-
-       /*
-        * tXSRD = tRFCab + 10 ns. XSRD and XSNR should have the
-        * same value
-        */
-       val = ns_2_cycles(timings->tXSR) - 1;
-       tim2 |= val << OMAP44XX_REG_T_XSRD_SHIFT;
-       tim2 |= val << OMAP44XX_REG_T_XSNR_SHIFT;
-
-       val = max(min_tck->tXP, ns_x2_2_cycles(timings->tXPx2)) - 1;
-       tim2 |= val << OMAP44XX_REG_T_XP_SHIFT;
-
-       return tim2;
-}
-
-static u32 get_sdram_tim_3_reg(const struct lpddr2_ac_timings *timings,
-                              const struct lpddr2_min_tck *min_tck,
-                              const struct lpddr2_addressing *addressing)
-{
-       u32 tim3 = 0, val = 0;
-       val = min(timings->tRASmax * 10 / addressing->t_REFI_us_x10 - 1, 0xF);
-       tim3 |= val << OMAP44XX_REG_T_RAS_MAX_SHIFT;
-
-       val = ns_2_cycles(timings->tRFCab) - 1;
-       tim3 |= val << OMAP44XX_REG_T_RFC_SHIFT;
-
-       val = ns_x2_2_cycles(timings->tDQSCKMAXx2) - 1;
-       tim3 |= val << OMAP44XX_REG_T_TDQSCKMAX_SHIFT;
-
-       val = ns_2_cycles(timings->tZQCS) - 1;
-       tim3 |= val << OMAP44XX_REG_ZQ_ZQCS_SHIFT;
-
-       val = max(min_tck->tCKESR, ns_2_cycles(timings->tCKESR)) - 1;
-       tim3 |= val << OMAP44XX_REG_T_CKESR_SHIFT;
-
-       return tim3;
-}
-
-static u32 get_zq_config_reg(const struct lpddr2_device_details *cs1_device,
-                            const struct lpddr2_addressing *addressing,
-                            u8 volt_ramp)
-{
-       u32 zq = 0, val = 0;
-       if (volt_ramp)
-               val =
-                   EMIF_ZQCS_INTERVAL_DVFS_IN_US * 10 /
-                   addressing->t_REFI_us_x10;
-       else
-               val =
-                   EMIF_ZQCS_INTERVAL_NORMAL_IN_US * 10 /
-                   addressing->t_REFI_us_x10;
-       zq |= val << OMAP44XX_REG_ZQ_REFINTERVAL_SHIFT;
-
-       zq |= (REG_ZQ_ZQCL_MULT - 1) << OMAP44XX_REG_ZQ_ZQCL_MULT_SHIFT;
-
-       zq |= (REG_ZQ_ZQINIT_MULT - 1) << OMAP44XX_REG_ZQ_ZQINIT_MULT_SHIFT;
-
-       zq |= REG_ZQ_SFEXITEN_ENABLE << OMAP44XX_REG_ZQ_SFEXITEN_SHIFT;
-
-       /*
-        * Assuming that two chipselects have a single calibration resistor
-        * If there are indeed two calibration resistors, then this flag should
-        * be enabled to take advantage of dual calibration feature.
-        * This data should ideally come from board files. But considering
-        * that none of the boards today have calibration resistors per CS,
-        * it would be an unnecessary overhead.
-        */
-       zq |= REG_ZQ_DUALCALEN_DISABLE << OMAP44XX_REG_ZQ_DUALCALEN_SHIFT;
-
-       zq |= REG_ZQ_CS0EN_ENABLE << OMAP44XX_REG_ZQ_CS0EN_SHIFT;
-
-       zq |= (cs1_device ? 1 : 0) << OMAP44XX_REG_ZQ_CS1EN_SHIFT;
-
-       return zq;
-}
-
-static u32 get_temp_alert_config(const struct lpddr2_device_details *cs1_device,
-                                const struct lpddr2_addressing *addressing,
-                                u8 is_derated)
-{
-       u32 alert = 0, interval;
-       interval =
-           TEMP_ALERT_POLL_INTERVAL_MS * 10000 / addressing->t_REFI_us_x10;
-       if (is_derated)
-               interval *= 4;
-       alert |= interval << OMAP44XX_REG_TA_REFINTERVAL_SHIFT;
-
-       alert |= TEMP_ALERT_CONFIG_DEVCT_1 << OMAP44XX_REG_TA_DEVCNT_SHIFT;
-
-       alert |= TEMP_ALERT_CONFIG_DEVWDT_32 << OMAP44XX_REG_TA_DEVWDT_SHIFT;
-
-       alert |= 1 << OMAP44XX_REG_TA_SFEXITEN_SHIFT;
-
-       alert |= 1 << OMAP44XX_REG_TA_CS0EN_SHIFT;
-
-       alert |= (cs1_device ? 1 : 0) << OMAP44XX_REG_TA_CS1EN_SHIFT;
-
-       return alert;
-}
-
-static u32 get_read_idle_ctrl_reg(u8 volt_ramp)
-{
-       u32 idle = 0, val = 0;
-       if (volt_ramp)
-               val = ns_2_cycles(READ_IDLE_INTERVAL_DVFS) / 64 - 1;
-       else
-               /*Maximum value in normal conditions - suggested by hw team */
-               val = 0x1FF;
-       idle |= val << OMAP44XX_REG_READ_IDLE_INTERVAL_SHIFT;
-
-       idle |= EMIF_REG_READ_IDLE_LEN_VAL << OMAP44XX_REG_READ_IDLE_LEN_SHIFT;
-
-       return idle;
-}
-
-static u32 get_ddr_phy_ctrl_1(u32 freq, u8 RL)
-{
-       u32 phy = 0, val = 0;
-
-       phy |= (RL + 2) << OMAP44XX_REG_READ_LATENCY_SHIFT;
-
-       if (freq <= 100000000)
-               val = EMIF_DLL_SLAVE_DLY_CTRL_100_MHZ_AND_LESS;
-       else if (freq <= 200000000)
-               val = EMIF_DLL_SLAVE_DLY_CTRL_200_MHZ;
-       else
-               val = EMIF_DLL_SLAVE_DLY_CTRL_400_MHZ;
-       phy |= val << OMAP44XX_REG_DLL_SLAVE_DLY_CTRL_SHIFT;
-
-       /* Other fields are constant magic values. Hardcode them together */
-       phy |= EMIF_DDR_PHY_CTRL_1_BASE_VAL <<
-               OMAP44XX_EMIF_DDR_PHY_CTRL_1_BASE_VAL_SHIFT;
-
-       return phy;
-}
-
-static u32 get_emif_mem_size(struct emif_device_details *devices)
-{
-       u32 size_mbytes = 0, temp;
-
-       if (!devices)
-               return 0;
-
-       if (devices->cs0_device_details) {
-               temp = devices->cs0_device_details->density;
-               size_mbytes += lpddr2_density_2_size_in_mbytes[temp];
-       }
-
-       if (devices->cs1_device_details) {
-               temp = devices->cs1_device_details->density;
-               size_mbytes += lpddr2_density_2_size_in_mbytes[temp];
-       }
-       /* convert to bytes */
-       return size_mbytes << 20;
-}
-
-/* Gets the encoding corresponding to a given DMM section size */
-u32 get_dmm_section_size_map(u32 section_size)
-{
-       /*
-        * Section size mapping:
-        * 0x0: 16-MiB section
-        * 0x1: 32-MiB section
-        * 0x2: 64-MiB section
-        * 0x3: 128-MiB section
-        * 0x4: 256-MiB section
-        * 0x5: 512-MiB section
-        * 0x6: 1-GiB section
-        * 0x7: 2-GiB section
-        */
-       section_size >>= 24; /* divide by 16 MB */
-       return log_2_n_round_down(section_size);
-}
-
-static void emif_calculate_regs(
-               const struct emif_device_details *emif_dev_details,
-               u32 freq, struct emif_regs *regs)
-{
-       u32 temp, sys_freq;
-       const struct lpddr2_addressing *addressing;
-       const struct lpddr2_ac_timings *timings;
-       const struct lpddr2_min_tck *min_tck;
-       const struct lpddr2_device_details *cs0_dev_details =
-                                       emif_dev_details->cs0_device_details;
-       const struct lpddr2_device_details *cs1_dev_details =
-                                       emif_dev_details->cs1_device_details;
-       const struct lpddr2_device_timings *cs0_dev_timings =
-                                       emif_dev_details->cs0_device_timings;
-
-       emif_assert(emif_dev_details);
-       emif_assert(regs);
-       /*
-        * You can not have a device on CS1 without one on CS0
-        * So configuring EMIF without a device on CS0 doesn't
-        * make sense
-        */
-       emif_assert(cs0_dev_details);
-       emif_assert(cs0_dev_details->type != LPDDR2_TYPE_NVM);
-       /*
-        * If there is a device on CS1 it should be same type as CS0
-        * (or NVM. But NVM is not supported in this driver yet)
-        */
-       emif_assert((cs1_dev_details == NULL) ||
-                   (cs1_dev_details->type == LPDDR2_TYPE_NVM) ||
-                   (cs0_dev_details->type == cs1_dev_details->type));
-       emif_assert(freq <= MAX_LPDDR2_FREQ);
-
-       set_ddr_clk_period(freq);
-
-       /*
-        * The device on CS0 is used for all timing calculations
-        * There is only one set of registers for timings per EMIF. So, if the
-        * second CS(CS1) has a device, it should have the same timings as the
-        * device on CS0
-        */
-       timings = get_timings_table(cs0_dev_timings->ac_timings, freq);
-       emif_assert(timings);
-       min_tck = cs0_dev_timings->min_tck;
-
-       temp = addressing_table_index(cs0_dev_details->type,
-                                     cs0_dev_details->density,
-                                     cs0_dev_details->io_width);
-
-       emif_assert((temp >= 0));
-       addressing = &(addressing_table[temp]);
-       emif_assert(addressing);
-
-       sys_freq = get_sys_clk_freq();
-
-       regs->sdram_config_init = get_sdram_config_reg(cs0_dev_details,
-                                                       cs1_dev_details,
-                                                       addressing, RL_BOOT);
-
-       regs->sdram_config = get_sdram_config_reg(cs0_dev_details,
-                                               cs1_dev_details,
-                                               addressing, RL_FINAL);
-
-       regs->ref_ctrl = get_sdram_ref_ctrl(freq, addressing);
-
-       regs->sdram_tim1 = get_sdram_tim_1_reg(timings, min_tck, addressing);
-
-       regs->sdram_tim2 = get_sdram_tim_2_reg(timings, min_tck);
-
-       regs->sdram_tim3 = get_sdram_tim_3_reg(timings, min_tck, addressing);
-
-       regs->read_idle_ctrl = get_read_idle_ctrl_reg(LPDDR2_VOLTAGE_STABLE);
-
-       regs->temp_alert_config =
-           get_temp_alert_config(cs1_dev_details, addressing, 0);
-
-       regs->zq_config = get_zq_config_reg(cs1_dev_details, addressing,
-                                           LPDDR2_VOLTAGE_STABLE);
-
-       regs->emif_ddr_phy_ctlr_1_init =
-                       get_ddr_phy_ctrl_1(sys_freq / 2, RL_BOOT);
-
-       regs->emif_ddr_phy_ctlr_1 =
-                       get_ddr_phy_ctrl_1(freq, RL_FINAL);
-
-       regs->freq = freq;
-
-       print_timing_reg(regs->sdram_config_init);
-       print_timing_reg(regs->sdram_config);
-       print_timing_reg(regs->ref_ctrl);
-       print_timing_reg(regs->sdram_tim1);
-       print_timing_reg(regs->sdram_tim2);
-       print_timing_reg(regs->sdram_tim3);
-       print_timing_reg(regs->read_idle_ctrl);
-       print_timing_reg(regs->temp_alert_config);
-       print_timing_reg(regs->zq_config);
-       print_timing_reg(regs->emif_ddr_phy_ctlr_1);
-       print_timing_reg(regs->emif_ddr_phy_ctlr_1_init);
-}
-#endif /* CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS */
+u32 *const T_num = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_T_NUM;
+u32 *const T_den = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_T_DEN;
+u32 *const emif_sizes = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_SIZE;
+#endif
 
 #ifdef CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
 /* Base AC Timing values specified by JESD209-2 for 400MHz operation */
@@ -691,30 +61,6 @@ static const struct lpddr2_ac_timings timings_jedec_400_mhz = {
        .tFAW = 50
 };
 
-/* Base AC Timing values specified by JESD209-2 for 333 MHz operation */
-static const struct lpddr2_ac_timings timings_jedec_333_mhz = {
-       .max_freq = 333000000,
-       .RL = 5,
-       .tRPab = 21,
-       .tRCD = 18,
-       .tWR = 15,
-       .tRASmin = 42,
-       .tRRD = 10,
-       .tWTRx2 = 15,
-       .tXSR = 140,
-       .tXPx2 = 15,
-       .tRFCab = 130,
-       .tRTPx2 = 15,
-       .tCKE = 3,
-       .tCKESR = 15,
-       .tZQCS = 90,
-       .tZQCL = 360,
-       .tZQINIT = 1000,
-       .tDQSCKMAXx2 = 11,
-       .tRASmax = 70,
-       .tFAW = 50
-};
-
 /* Base AC Timing values specified by JESD209-2 for 200 MHz operation */
 static const struct lpddr2_ac_timings timings_jedec_200_mhz = {
        .max_freq = 200000000,
@@ -764,7 +110,6 @@ static const struct lpddr2_min_tck min_tck_jedec = {
 static const struct lpddr2_ac_timings const*
                        jedec_ac_timings[MAX_NUM_SPEEDBINS] = {
        &timings_jedec_200_mhz,
-       &timings_jedec_333_mhz,
        &timings_jedec_400_mhz
 };
 
@@ -782,473 +127,3 @@ void emif_get_device_timings(u32 emif_nr,
        *cs1_device_timings = &jedec_default_timings;
 }
 #endif /* CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS */
-
-#ifdef CONFIG_SYS_AUTOMATIC_SDRAM_DETECTION
-const char *get_lpddr2_type(u8 type_id)
-{
-       switch (type_id) {
-       case LPDDR2_TYPE_S4:
-               return "LPDDR2-S4";
-       case LPDDR2_TYPE_S2:
-               return "LPDDR2-S2";
-       default:
-               return NULL;
-       }
-}
-
-const char *get_lpddr2_io_width(u8 width_id)
-{
-       switch (width_id) {
-       case LPDDR2_IO_WIDTH_8:
-               return "x8";
-       case LPDDR2_IO_WIDTH_16:
-               return "x16";
-       case LPDDR2_IO_WIDTH_32:
-               return "x32";
-       default:
-               return NULL;
-       }
-}
-
-const char *get_lpddr2_manufacturer(u32 manufacturer)
-{
-       switch (manufacturer) {
-       case LPDDR2_MANUFACTURER_SAMSUNG:
-               return "Samsung";
-       case LPDDR2_MANUFACTURER_QIMONDA:
-               return "Qimonda";
-       case LPDDR2_MANUFACTURER_ELPIDA:
-               return "Elpida";
-       case LPDDR2_MANUFACTURER_ETRON:
-               return "Etron";
-       case LPDDR2_MANUFACTURER_NANYA:
-               return "Nanya";
-       case LPDDR2_MANUFACTURER_HYNIX:
-               return "Hynix";
-       case LPDDR2_MANUFACTURER_MOSEL:
-               return "Mosel";
-       case LPDDR2_MANUFACTURER_WINBOND:
-               return "Winbond";
-       case LPDDR2_MANUFACTURER_ESMT:
-               return "ESMT";
-       case LPDDR2_MANUFACTURER_SPANSION:
-               return "Spansion";
-       case LPDDR2_MANUFACTURER_SST:
-               return "SST";
-       case LPDDR2_MANUFACTURER_ZMOS:
-               return "ZMOS";
-       case LPDDR2_MANUFACTURER_INTEL:
-               return "Intel";
-       case LPDDR2_MANUFACTURER_NUMONYX:
-               return "Numonyx";
-       case LPDDR2_MANUFACTURER_MICRON:
-               return "Micron";
-       default:
-               return NULL;
-       }
-}
-
-static void display_sdram_details(u32 emif_nr, u32 cs,
-                                 struct lpddr2_device_details *device)
-{
-       const char *mfg_str;
-       const char *type_str;
-       char density_str[10];
-       u32 density;
-
-       debug("EMIF%d CS%d\t", emif_nr, cs);
-
-       if (!device) {
-               debug("None\n");
-               return;
-       }
-
-       mfg_str = get_lpddr2_manufacturer(device->manufacturer);
-       type_str = get_lpddr2_type(device->type);
-
-       density = lpddr2_density_2_size_in_mbytes[device->density];
-       if ((density / 1024 * 1024) == density) {
-               density /= 1024;
-               sprintf(density_str, "%d GB", density);
-       } else
-               sprintf(density_str, "%d MB", density);
-       if (mfg_str && type_str)
-               debug("%s\t\t%s\t%s\n", mfg_str, type_str, density_str);
-}
-
-static u8 is_lpddr2_sdram_present(u32 base, u32 cs,
-                                 struct lpddr2_device_details *lpddr2_device)
-{
-       u32 mr = 0, temp;
-
-       mr = get_mr(base, cs, LPDDR2_MR0);
-       if (mr > 0xFF) {
-               /* Mode register value bigger than 8 bit */
-               return 0;
-       }
-
-       temp = (mr & LPDDR2_MR0_DI_MASK) >> LPDDR2_MR0_DI_SHIFT;
-       if (temp) {
-               /* Not SDRAM */
-               return 0;
-       }
-       temp = (mr & LPDDR2_MR0_DNVI_MASK) >> LPDDR2_MR0_DNVI_SHIFT;
-
-       if (temp) {
-               /* DNV supported - But DNV is only supported for NVM */
-               return 0;
-       }
-
-       mr = get_mr(base, cs, LPDDR2_MR4);
-       if (mr > 0xFF) {
-               /* Mode register value bigger than 8 bit */
-               return 0;
-       }
-
-       mr = get_mr(base, cs, LPDDR2_MR5);
-       if (mr >= 0xFF) {
-               /* Mode register value bigger than 8 bit */
-               return 0;
-       }
-
-       if (!get_lpddr2_manufacturer(mr)) {
-               /* Manufacturer not identified */
-               return 0;
-       }
-       lpddr2_device->manufacturer = mr;
-
-       mr = get_mr(base, cs, LPDDR2_MR6);
-       if (mr >= 0xFF) {
-               /* Mode register value bigger than 8 bit */
-               return 0;
-       }
-
-       mr = get_mr(base, cs, LPDDR2_MR7);
-       if (mr >= 0xFF) {
-               /* Mode register value bigger than 8 bit */
-               return 0;
-       }
-
-       mr = get_mr(base, cs, LPDDR2_MR8);
-       if (mr >= 0xFF) {
-               /* Mode register value bigger than 8 bit */
-               return 0;
-       }
-
-       temp = (mr & MR8_TYPE_MASK) >> MR8_TYPE_SHIFT;
-       if (!get_lpddr2_type(temp)) {
-               /* Not SDRAM */
-               return 0;
-       }
-       lpddr2_device->type = temp;
-
-       temp = (mr & MR8_DENSITY_MASK) >> MR8_DENSITY_SHIFT;
-       if (temp > LPDDR2_DENSITY_32Gb) {
-               /* Density not supported */
-               return 0;
-       }
-       lpddr2_device->density = temp;
-
-       temp = (mr & MR8_IO_WIDTH_MASK) >> MR8_IO_WIDTH_SHIFT;
-       if (!get_lpddr2_io_width(temp)) {
-               /* IO width unsupported value */
-               return 0;
-       }
-       lpddr2_device->io_width = temp;
-
-       /*
-        * If all the above tests pass we should
-        * have a device on this chip-select
-        */
-       return 1;
-}
-
-struct lpddr2_device_details *emif_get_device_details(u32 emif_nr, u8 cs,
-                       struct lpddr2_device_details *lpddr2_dev_details)
-{
-       u32 phy;
-       u32 base = (emif_nr == 1) ? OMAP44XX_EMIF1 : OMAP44XX_EMIF2;
-       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
-
-       if (!lpddr2_dev_details)
-               return NULL;
-
-       /* Do the minimum init for mode register accesses */
-       if (!running_from_sdram()) {
-               phy = get_ddr_phy_ctrl_1(get_sys_clk_freq() / 2, RL_BOOT);
-               writel(phy, &emif->emif_ddr_phy_ctrl_1);
-       }
-
-       if (!(is_lpddr2_sdram_present(base, cs, lpddr2_dev_details)))
-               return NULL;
-
-       display_sdram_details(emif_num(base), cs, lpddr2_dev_details);
-
-       return lpddr2_dev_details;
-}
-#endif /* CONFIG_SYS_AUTOMATIC_SDRAM_DETECTION */
-
-static void do_sdram_init(u32 base)
-{
-       const struct emif_regs *regs;
-       u32 in_sdram, emif_nr;
-
-       debug(">>do_sdram_init() %x\n", base);
-
-       in_sdram = running_from_sdram();
-       emif_nr = (base == OMAP44XX_EMIF1) ? 1 : 2;
-
-#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
-       emif_get_reg_dump(emif_nr, &regs);
-       if (!regs) {
-               debug("EMIF: reg dump not provided\n");
-               return;
-       }
-#else
-       /*
-        * The user has not provided the register values. We need to
-        * calculate it based on the timings and the DDR frequency
-        */
-       struct emif_device_details dev_details;
-       struct emif_regs calculated_regs;
-
-       /*
-        * Get device details:
-        * - Discovered if CONFIG_SYS_AUTOMATIC_SDRAM_DETECTION is set
-        * - Obtained from user otherwise
-        */
-       struct lpddr2_device_details cs0_dev_details, cs1_dev_details;
-       emif_reset_phy(base);
-       dev_details.cs0_device_details = emif_get_device_details(base, CS0,
-                                               &cs0_dev_details);
-       dev_details.cs1_device_details = emif_get_device_details(base, CS1,
-                                               &cs1_dev_details);
-       emif_reset_phy(base);
-
-       /* Return if no devices on this EMIF */
-       if (!dev_details.cs0_device_details &&
-           !dev_details.cs1_device_details) {
-               emif_sizes[emif_nr - 1] = 0;
-               return;
-       }
-
-       if (!in_sdram)
-               emif_sizes[emif_nr - 1] = get_emif_mem_size(&dev_details);
-
-       /*
-        * Get device timings:
-        * - Default timings specified by JESD209-2 if
-        *   CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS is set
-        * - Obtained from user otherwise
-        */
-       emif_get_device_timings(emif_nr, &dev_details.cs0_device_timings,
-                               &dev_details.cs1_device_timings);
-
-       /* Calculate the register values */
-       emif_calculate_regs(&dev_details, omap4_ddr_clk(), &calculated_regs);
-       regs = &calculated_regs;
-#endif /* CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS */
-
-       /*
-        * Initializing the LPDDR2 device can not happen from SDRAM.
-        * Changing the timing registers in EMIF can happen(going from one
-        * OPP to another)
-        */
-       if (!in_sdram)
-               lpddr2_init(base, regs);
-
-       /* Write to the shadow registers */
-       emif_update_timings(base, regs);
-
-       debug("<<do_sdram_init() %x\n", base);
-}
-
-static void emif_post_init_config(u32 base)
-{
-       struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
-       u32 omap4_rev = omap_revision();
-
-       /* reset phy on ES2.0 */
-       if (omap4_rev == OMAP4430_ES2_0)
-               emif_reset_phy(base);
-
-       /* Put EMIF back in smart idle on ES1.0 */
-       if (omap4_rev == OMAP4430_ES1_0)
-               writel(0x80000000, &emif->emif_pwr_mgmt_ctrl);
-}
-
-static void dmm_init(u32 base)
-{
-       const struct dmm_lisa_map_regs *lisa_map_regs;
-
-#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
-       emif_get_dmm_regs(&lisa_map_regs);
-#else
-       u32 emif1_size, emif2_size, mapped_size, section_map = 0;
-       u32 section_cnt, sys_addr;
-       struct dmm_lisa_map_regs lis_map_regs_calculated = {0};
-
-       mapped_size = 0;
-       section_cnt = 3;
-       sys_addr = CONFIG_SYS_SDRAM_BASE;
-       emif1_size = emif_sizes[0];
-       emif2_size = emif_sizes[1];
-       debug("emif1_size 0x%x emif2_size 0x%x\n", emif1_size, emif2_size);
-
-       if (!emif1_size && !emif2_size)
-               return;
-
-       /* symmetric interleaved section */
-       if (emif1_size && emif2_size) {
-               mapped_size = min(emif1_size, emif2_size);
-               section_map = DMM_LISA_MAP_INTERLEAVED_BASE_VAL;
-               section_map |= 0 << OMAP44XX_SDRC_ADDR_SHIFT;
-               /* only MSB */
-               section_map |= (sys_addr >> 24) <<
-                               OMAP44XX_SYS_ADDR_SHIFT;
-               section_map |= get_dmm_section_size_map(mapped_size * 2)
-                               << OMAP44XX_SYS_SIZE_SHIFT;
-               lis_map_regs_calculated.dmm_lisa_map_3 = section_map;
-               emif1_size -= mapped_size;
-               emif2_size -= mapped_size;
-               sys_addr += (mapped_size * 2);
-               section_cnt--;
-       }
-
-       /*
-        * Single EMIF section(we can have a maximum of 1 single EMIF
-        * section- either EMIF1 or EMIF2 or none, but not both)
-        */
-       if (emif1_size) {
-               section_map = DMM_LISA_MAP_EMIF1_ONLY_BASE_VAL;
-               section_map |= get_dmm_section_size_map(emif1_size)
-                               << OMAP44XX_SYS_SIZE_SHIFT;
-               /* only MSB */
-               section_map |= (mapped_size >> 24) <<
-                               OMAP44XX_SDRC_ADDR_SHIFT;
-               /* only MSB */
-               section_map |= (sys_addr >> 24) << OMAP44XX_SYS_ADDR_SHIFT;
-               section_cnt--;
-       }
-       if (emif2_size) {
-               section_map = DMM_LISA_MAP_EMIF2_ONLY_BASE_VAL;
-               section_map |= get_dmm_section_size_map(emif2_size) <<
-                               OMAP44XX_SYS_SIZE_SHIFT;
-               /* only MSB */
-               section_map |= mapped_size >> 24 << OMAP44XX_SDRC_ADDR_SHIFT;
-               /* only MSB */
-               section_map |= sys_addr >> 24 << OMAP44XX_SYS_ADDR_SHIFT;
-               section_cnt--;
-       }
-
-       if (section_cnt == 2) {
-               /* Only 1 section - either symmetric or single EMIF */
-               lis_map_regs_calculated.dmm_lisa_map_3 = section_map;
-               lis_map_regs_calculated.dmm_lisa_map_2 = 0;
-               lis_map_regs_calculated.dmm_lisa_map_1 = 0;
-       } else {
-               /* 2 sections - 1 symmetric, 1 single EMIF */
-               lis_map_regs_calculated.dmm_lisa_map_2 = section_map;
-               lis_map_regs_calculated.dmm_lisa_map_1 = 0;
-       }
-
-       /* TRAP for invalid TILER mappings in section 0 */
-       lis_map_regs_calculated.dmm_lisa_map_0 = DMM_LISA_MAP_0_INVAL_ADDR_TRAP;
-
-       lisa_map_regs = &lis_map_regs_calculated;
-#endif
-       struct dmm_lisa_map_regs *hw_lisa_map_regs =
-           (struct dmm_lisa_map_regs *)base;
-
-       writel(0, &hw_lisa_map_regs->dmm_lisa_map_3);
-       writel(0, &hw_lisa_map_regs->dmm_lisa_map_2);
-       writel(0, &hw_lisa_map_regs->dmm_lisa_map_1);
-       writel(0, &hw_lisa_map_regs->dmm_lisa_map_0);
-
-       writel(lisa_map_regs->dmm_lisa_map_3,
-               &hw_lisa_map_regs->dmm_lisa_map_3);
-       writel(lisa_map_regs->dmm_lisa_map_2,
-               &hw_lisa_map_regs->dmm_lisa_map_2);
-       writel(lisa_map_regs->dmm_lisa_map_1,
-               &hw_lisa_map_regs->dmm_lisa_map_1);
-       writel(lisa_map_regs->dmm_lisa_map_0,
-               &hw_lisa_map_regs->dmm_lisa_map_0);
-
-       if (omap_revision() >= OMAP4460_ES1_0) {
-               hw_lisa_map_regs =
-                   (struct dmm_lisa_map_regs *)OMAP44XX_MA_LISA_MAP_BASE;
-
-               writel(lisa_map_regs->dmm_lisa_map_3,
-                       &hw_lisa_map_regs->dmm_lisa_map_3);
-               writel(lisa_map_regs->dmm_lisa_map_2,
-                       &hw_lisa_map_regs->dmm_lisa_map_2);
-               writel(lisa_map_regs->dmm_lisa_map_1,
-                       &hw_lisa_map_regs->dmm_lisa_map_1);
-               writel(lisa_map_regs->dmm_lisa_map_0,
-                       &hw_lisa_map_regs->dmm_lisa_map_0);
-       }
-}
-
-/*
- * SDRAM initialization:
- * SDRAM initialization has two parts:
- * 1. Configuring the SDRAM device
- * 2. Update the AC timings related parameters in the EMIF module
- * (1) should be done only once and should not be done while we are
- * running from SDRAM.
- * (2) can and should be done more than once if OPP changes.
- * Particularly, this may be needed when we boot without SPL and
- * and using Configuration Header(CH). ROM code supports only at 50% OPP
- * at boot (low power boot). So u-boot has to switch to OPP100 and update
- * the frequency. So,
- * Doing (1) and (2) makes sense - first time initialization
- * Doing (2) and not (1) makes sense - OPP change (when using CH)
- * Doing (1) and not (2) doen't make sense
- * See do_sdram_init() for the details
- */
-void sdram_init(void)
-{
-       u32 in_sdram, size_prog, size_detect;
-
-       debug(">>sdram_init()\n");
-
-       if (omap4_hw_init_context() == OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL)
-               return;
-
-       in_sdram = running_from_sdram();
-       debug("in_sdram = %d\n", in_sdram);
-
-       if (!in_sdram) {
-               bypass_dpll(&prcm->cm_clkmode_dpll_core);
-       }
-
-       do_sdram_init(OMAP44XX_EMIF1);
-       do_sdram_init(OMAP44XX_EMIF2);
-
-       if (!in_sdram) {
-               dmm_init(OMAP44XX_DMM_LISA_MAP_BASE);
-               emif_post_init_config(OMAP44XX_EMIF1);
-               emif_post_init_config(OMAP44XX_EMIF2);
-
-       }
-
-       /* for the shadow registers to take effect */
-       freq_update_core();
-
-       /* Do some testing after the init */
-       if (!in_sdram) {
-               size_prog = omap4_sdram_size();
-               size_detect = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
-                                               size_prog);
-               /* Compare with the size programmed */
-               if (size_detect != size_prog) {
-                       printf("SDRAM: identified size not same as expected"
-                               " size identified: %x expected: %x\n",
-                               size_detect,
-                               size_prog);
-               } else
-                       debug("get_ram_size() successful");
-       }
-
-       debug("<<sdram_init()\n");
-}
diff --git a/arch/arm/cpu/armv7/omap4/hwinit.c b/arch/arm/cpu/armv7/omap4/hwinit.c
new file mode 100644 (file)
index 0000000..37a86b4
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ *
+ * Common functions for OMAP4 based boards
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Author :
+ *     Aneesh V        <aneesh@ti.com>
+ *     Steve Sakoman   <steve@sakoman.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/armv7.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/sizes.h>
+#include <asm/emif.h>
+#include <asm/arch/gpio.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+u32 *const omap4_revision = (u32 *)OMAP4_SRAM_SCRATCH_OMAP4_REV;
+
+static const struct gpio_bank gpio_bank_44xx[6] = {
+       { (void *)OMAP44XX_GPIO1_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP44XX_GPIO2_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP44XX_GPIO3_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP44XX_GPIO4_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP44XX_GPIO5_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP44XX_GPIO6_BASE, METHOD_GPIO_24XX },
+};
+
+const struct gpio_bank *const omap_gpio_bank = gpio_bank_44xx;
+
+#ifdef CONFIG_SPL_BUILD
+/*
+ * Some tuning of IOs for optimal power and performance
+ */
+void do_io_settings(void)
+{
+       u32 lpddr2io;
+       struct control_lpddr2io_regs *lpddr2io_regs =
+               (struct control_lpddr2io_regs *)LPDDR2_IO_REGS_BASE;
+       struct omap4_sys_ctrl_regs *const ctrl =
+               (struct omap4_sys_ctrl_regs *)SYSCTRL_GENERAL_CORE_BASE;
+
+       u32 omap4_rev = omap_revision();
+
+       if (omap4_rev == OMAP4430_ES1_0)
+               lpddr2io = CONTROL_LPDDR2IO_SLEW_125PS_DRV8_PULL_DOWN;
+       else if (omap4_rev == OMAP4430_ES2_0)
+               lpddr2io = CONTROL_LPDDR2IO_SLEW_325PS_DRV8_GATE_KEEPER;
+       else
+               lpddr2io = CONTROL_LPDDR2IO_SLEW_315PS_DRV12_PULL_DOWN;
+
+       /* EMIF1 */
+       writel(lpddr2io, &lpddr2io_regs->control_lpddr2io1_0);
+       writel(lpddr2io, &lpddr2io_regs->control_lpddr2io1_1);
+       /* No pull for GR10 as per hw team's recommendation */
+       writel(lpddr2io & ~LPDDR2IO_GR10_WD_MASK,
+               &lpddr2io_regs->control_lpddr2io1_2);
+       writel(CONTROL_LPDDR2IO_3_VAL, &lpddr2io_regs->control_lpddr2io1_3);
+
+       /* EMIF2 */
+       writel(lpddr2io, &lpddr2io_regs->control_lpddr2io2_0);
+       writel(lpddr2io, &lpddr2io_regs->control_lpddr2io2_1);
+       /* No pull for GR10 as per hw team's recommendation */
+       writel(lpddr2io & ~LPDDR2IO_GR10_WD_MASK,
+               &lpddr2io_regs->control_lpddr2io2_2);
+       writel(CONTROL_LPDDR2IO_3_VAL, &lpddr2io_regs->control_lpddr2io2_3);
+
+       /*
+        * Some of these settings (TRIM values) come from eFuse and are
+        * in turn programmed in the eFuse at manufacturing time after
+        * calibration of the device. Do the software over-ride only if
+        * the device is not correctly trimmed
+        */
+       if (!(readl(&ctrl->control_std_fuse_opp_bgap) & 0xFFFF)) {
+
+               writel(LDOSRAM_VOLT_CTRL_OVERRIDE,
+                       &ctrl->control_ldosram_iva_voltage_ctrl);
+
+               writel(LDOSRAM_VOLT_CTRL_OVERRIDE,
+                       &ctrl->control_ldosram_mpu_voltage_ctrl);
+
+               writel(LDOSRAM_VOLT_CTRL_OVERRIDE,
+                       &ctrl->control_ldosram_core_voltage_ctrl);
+       }
+
+       /*
+        * Over-ride the register
+        *      i. unconditionally for all 4430
+        *      ii. only if un-trimmed for 4460
+        */
+       if ((omap4_rev < OMAP4460_ES1_0) || !readl(&ctrl->control_efuse_1))
+               writel(CONTROL_EFUSE_1_OVERRIDE, &ctrl->control_efuse_1);
+
+       if (!readl(&ctrl->control_efuse_2))
+               writel(CONTROL_EFUSE_2_OVERRIDE, &ctrl->control_efuse_2);
+}
+#endif
+
+void init_omap_revision(void)
+{
+       /*
+        * For some of the ES2/ES1 boards ID_CODE is not reliable:
+        * Also, ES1 and ES2 have different ARM revisions
+        * So use ARM revision for identification
+        */
+       unsigned int arm_rev = cortex_rev();
+
+       switch (arm_rev) {
+       case MIDR_CORTEX_A9_R0P1:
+               *omap4_revision = OMAP4430_ES1_0;
+               break;
+       case MIDR_CORTEX_A9_R1P2:
+               switch (readl(CONTROL_ID_CODE)) {
+               case OMAP4_CONTROL_ID_CODE_ES2_0:
+                       *omap4_revision = OMAP4430_ES2_0;
+                       break;
+               case OMAP4_CONTROL_ID_CODE_ES2_1:
+                       *omap4_revision = OMAP4430_ES2_1;
+                       break;
+               case OMAP4_CONTROL_ID_CODE_ES2_2:
+                       *omap4_revision = OMAP4430_ES2_2;
+                       break;
+               default:
+                       *omap4_revision = OMAP4430_ES2_0;
+                       break;
+               }
+               break;
+       case MIDR_CORTEX_A9_R1P3:
+               *omap4_revision = OMAP4430_ES2_3;
+               break;
+       case MIDR_CORTEX_A9_R2P10:
+               switch (readl(CONTROL_ID_CODE)) {
+               case OMAP4460_CONTROL_ID_CODE_ES1_1:
+                       *omap4_revision = OMAP4460_ES1_1;
+                       break;
+               case OMAP4460_CONTROL_ID_CODE_ES1_0:
+               default:
+                       *omap4_revision = OMAP4460_ES1_0;
+                       break;
+               }
+               break;
+       default:
+               *omap4_revision = OMAP4430_SILICON_ID_INVALID;
+               break;
+       }
+}
+
+#ifndef CONFIG_SYS_L2CACHE_OFF
+void v7_outer_cache_enable(void)
+{
+       set_pl310_ctrl_reg(1);
+}
+
+void v7_outer_cache_disable(void)
+{
+       set_pl310_ctrl_reg(0);
+}
+#endif
diff --git a/arch/arm/cpu/armv7/omap4/omap4_mux_data.h b/arch/arm/cpu/armv7/omap4/omap4_mux_data.h
deleted file mode 100644 (file)
index b940391..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
- /*
- * (C) Copyright 2010
- * Texas Instruments Incorporated, <www.ti.com>
- *
- *     Balaji Krishnamoorthy   <balajitk@ti.com>
- *     Aneesh V                <aneesh@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 _OMAP4_MUX_DATA_H_
-#define _OMAP4_MUX_DATA_H_
-
-#include <asm/arch/mux_omap4.h>
-
-const struct pad_conf_entry core_padconf_array_essential[] = {
-
-{GPMC_AD0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat0 */
-{GPMC_AD1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat1 */
-{GPMC_AD2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat2 */
-{GPMC_AD3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat3 */
-{GPMC_AD4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat4 */
-{GPMC_AD5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat5 */
-{GPMC_AD6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat6 */
-{GPMC_AD7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat7 */
-{GPMC_NOE, (PTU | IEN | OFF_EN | OFF_OUT_PTD | M1)},    /* sdmmc2_clk */
-{GPMC_NWE, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_cmd */
-{SDMMC1_CLK, (PTU | OFF_EN | OFF_OUT_PTD | M0)},        /* sdmmc1_clk */
-{SDMMC1_CMD, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_cmd */
-{SDMMC1_DAT0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat0 */
-{SDMMC1_DAT1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat1 */
-{SDMMC1_DAT2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat2 */
-{SDMMC1_DAT3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat3 */
-{SDMMC1_DAT4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat4 */
-{SDMMC1_DAT5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat5 */
-{SDMMC1_DAT6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat6 */
-{SDMMC1_DAT7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat7 */
-{I2C1_SCL, (PTU | IEN | M0)},                          /* i2c1_scl */
-{I2C1_SDA, (PTU | IEN | M0)},                          /* i2c1_sda */
-{I2C2_SCL, (PTU | IEN | M0)},                          /* i2c2_scl */
-{I2C2_SDA, (PTU | IEN | M0)},                          /* i2c2_sda */
-{I2C3_SCL, (PTU | IEN | M0)},                          /* i2c3_scl */
-{I2C3_SDA, (PTU | IEN | M0)},                          /* i2c3_sda */
-{I2C4_SCL, (PTU | IEN | M0)},                          /* i2c4_scl */
-{I2C4_SDA, (PTU | IEN | M0)},                          /* i2c4_sda */
-{UART3_CTS_RCTX, (PTU | IEN | M0)},                    /* uart3_tx */
-{UART3_RTS_SD, (M0)},                                  /* uart3_rts_sd */
-{UART3_RX_IRRX, (IEN | M0)},                           /* uart3_rx */
-{UART3_TX_IRTX, (M0)}                                  /* uart3_tx */
-
-};
-
-const struct pad_conf_entry wkup_padconf_array_essential[] = {
-
-{PAD1_SR_SCL, (PTU | IEN | M0)}, /* sr_scl */
-{PAD0_SR_SDA, (PTU | IEN | M0)}, /* sr_sda */
-{PAD1_SYS_32K, (IEN | M0)}      /* sys_32k */
-
-};
-
-const struct pad_conf_entry wkup_padconf_array_essential_4460[] = {
-
-{PAD1_FREF_CLK4_REQ, (M3)},     /* gpio_wk7, TPS */
-
-};
-
-
-#endif  /* _OMAP4_MUX_DATA_H_ */
index edc5326c3897a445547a61238ad9780142f84059..a5ec7d3dcc52b7ccae525fbf2c985fd9fe00e10b 100644 (file)
@@ -26,7 +26,7 @@
  * MA 02111-1307 USA
  */
 
-#include <asm/arch/emif.h>
+#include <asm/emif.h>
 #include <asm/arch/sys_proto.h>
 
 /*
diff --git a/arch/arm/cpu/armv7/omap5/Makefile b/arch/arm/cpu/armv7/omap5/Makefile
new file mode 100644 (file)
index 0000000..f8ca9ac
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2000-2010
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    =  $(obj)lib$(SOC).o
+
+COBJS  += hwinit.o
+COBJS  += clocks.o
+COBJS  += emif.o
+COBJS  += sdram_elpida.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
+
+all:    $(obj).depend $(LIB)
+
+$(LIB):        $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/cpu/armv7/omap5/clocks.c b/arch/arm/cpu/armv7/omap5/clocks.c
new file mode 100644 (file)
index 0000000..dd882a2
--- /dev/null
@@ -0,0 +1,432 @@
+/*
+ *
+ * Clock initialization for OMAP5
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Aneesh V <aneesh@ti.com>
+ * Sricharan R <r.sricharan@ti.com>
+ *
+ * Based on previous work by:
+ *     Santosh Shilimkar <santosh.shilimkar@ti.com>
+ *     Rajendra Nayak <rnayak@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 <common.h>
+#include <asm/omap_common.h>
+#include <asm/arch/clocks.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/utils.h>
+#include <asm/omap_gpio.h>
+
+#ifndef CONFIG_SPL_BUILD
+/*
+ * printing to console doesn't work unless
+ * this code is executed from SPL
+ */
+#define printf(fmt, args...)
+#define puts(s)
+#endif
+
+struct omap5_prcm_regs *const prcm = (struct omap5_prcm_regs *)0x4A004100;
+
+const u32 sys_clk_array[8] = {
+       12000000,              /* 12 MHz */
+       0,                     /* NA */
+       16800000,              /* 16.8 MHz */
+       19200000,              /* 19.2 MHz */
+       26000000,              /* 26 MHz */
+       0,                     /* NA */
+       38400000,              /* 38.4 MHz */
+};
+
+static const struct dpll_params mpu_dpll_params_1_5ghz[NUM_SYS_CLKS] = {
+       {125, 0, 1, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {625, 6, 1, -1, -1, -1, -1, -1, -1, -1},        /* 16.8 MHz */
+       {625, 7, 1, -1, -1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
+       {750, 12, 1, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {625, 15, 1, -1, -1, -1, -1, -1, -1, -1}        /* 38.4 MHz */
+};
+
+static const struct dpll_params mpu_dpll_params_2ghz[NUM_SYS_CLKS] = {
+       {500, 2, 1, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {2024, 16, 1, -1, -1, -1, -1, -1, -1, -1},      /* 16.8 MHz */
+       {625, 5, 1, -1, -1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
+       {1000, 12, 1, -1, -1, -1, -1, -1, -1, -1},      /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {625, 11, 1, -1, -1, -1, -1, -1, -1, -1}        /* 38.4 MHz */
+};
+
+static const struct dpll_params mpu_dpll_params_1100mhz[NUM_SYS_CLKS] = {
+       {275, 2, 1, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {1375, 20, 1, -1, -1, -1, -1, -1, -1, -1},      /* 16.8 MHz */
+       {1375, 23, 1, -1, -1, -1, -1, -1, -1, -1},      /* 19.2 MHz */
+       {550, 12, 1, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {1375, 47, 1, -1, -1, -1, -1, -1, -1, -1}       /* 38.4 MHz */
+};
+
+static const struct dpll_params mpu_dpll_params_550mhz[NUM_SYS_CLKS] = {
+       {275, 2, 2, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {1375, 20, 2, -1, -1, -1, -1, -1, -1, -1},      /* 16.8 MHz */
+       {1375, 23, 2, -1, -1, -1, -1, -1, -1, -1},      /* 19.2 MHz */
+       {550, 12, 2, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {1375, 47, 2, -1, -1, -1, -1, -1, -1, -1}       /* 38.4 MHz */
+};
+
+static const struct dpll_params
+                       core_dpll_params_2128mhz_ddr532[NUM_SYS_CLKS] = {
+       {266, 2, 1, 5, 8, 4, 62, 5, 5, 7},              /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {570, 8, 1, 5, 8, 4, 62, 5, 5, 7},              /* 16.8 MHz */
+       {665, 11, 1, 5, 8, 4, 62, 5, 5, 7},             /* 19.2 MHz */
+       {532, 12, 1, 5, 8, 4, 62, 5, 5, 7},             /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {665, 23, 1, 5, 8, 4, 62, 5, 5, 7}              /* 38.4 MHz */
+};
+
+static const struct dpll_params
+                       core_dpll_params_2128mhz_ddr266[NUM_SYS_CLKS] = {
+       {266, 2, 2, 5, 8, 4, 62, 5, 5, 7},              /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {570, 8, 2, 5, 8, 4, 62, 5, 5, 7},              /* 16.8 MHz */
+       {665, 11, 2, 5, 8, 4, 62, 5, 5, 7},             /* 19.2 MHz */
+       {532, 12, 2, 5, 8, 4, 62, 5, 5, 7},             /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {665, 23, 2, 5, 8, 4, 62, 5, 5, 7}              /* 38.4 MHz */
+};
+
+static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
+       {32, 0, 4, 3, 6, 4, -1, 2, -1, -1},             /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {160, 6, 4, 3, 6, 4, -1, 2, -1, -1},            /* 16.8 MHz */
+       {20, 0, 4, 3, 6, 4, -1, 2, -1, -1},             /* 19.2 MHz */
+       {192, 12, 4, 3, 6, 4, -1, 2, -1, -1},           /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {10, 0, 4, 3, 6, 4, -1, 2, -1, -1}              /* 38.4 MHz */
+};
+
+static const struct dpll_params iva_dpll_params_2330mhz[NUM_SYS_CLKS] = {
+       {931, 11, -1, -1, 4, 7, -1, -1},        /* 12 MHz   */
+       {931, 12, -1, -1, 4, 7, -1, -1},        /* 13 MHz   */
+       {665, 11, -1, -1, 4, 7, -1, -1},        /* 16.8 MHz */
+       {727, 14, -1, -1, 4, 7, -1, -1},        /* 19.2 MHz */
+       {931, 25, -1, -1, 4, 7, -1, -1},        /* 26 MHz   */
+       {931, 26, -1, -1, 4, 7, -1, -1},        /* 27 MHz   */
+       {412, 16, -1, -1, 4, 7, -1, -1}         /* 38.4 MHz */
+};
+
+/* ABE M & N values with sys_clk as source */
+static const struct dpll_params
+               abe_dpll_params_sysclk_196608khz[NUM_SYS_CLKS] = {
+       {49, 5, 1, 1, -1, -1, -1, -1},  /* 12 MHz   */
+       {68, 8, 1, 1, -1, -1, -1, -1},  /* 13 MHz   */
+       {35, 5, 1, 1, -1, -1, -1, -1},  /* 16.8 MHz */
+       {46, 8, 1, 1, -1, -1, -1, -1},  /* 19.2 MHz */
+       {34, 8, 1, 1, -1, -1, -1, -1},  /* 26 MHz   */
+       {29, 7, 1, 1, -1, -1, -1, -1},  /* 27 MHz   */
+       {64, 24, 1, 1, -1, -1, -1, -1}  /* 38.4 MHz */
+};
+
+/* ABE M & N values with 32K clock as source */
+static const struct dpll_params abe_dpll_params_32k_196608khz = {
+       750, 0, 1, 1, -1, -1, -1, -1
+};
+
+static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
+       {80, 0, 2, -1, -1, -1, -1, -1},         /* 12 MHz   */
+       {960, 12, 2, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {400, 6, 2, -1, -1, -1, -1, -1},        /* 16.8 MHz */
+       {50, 0, 2, -1, -1, -1, -1, -1},         /* 19.2 MHz */
+       {480, 12, 2, -1, -1, -1, -1, -1},       /* 26 MHz   */
+       {320, 8, 2, -1, -1, -1, -1, -1},        /* 27 MHz   */
+       {25, 0, 2, -1, -1, -1, -1, -1}          /* 38.4 MHz */
+};
+
+void setup_post_dividers(u32 *const base, const struct dpll_params *params)
+{
+       struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;
+
+       /* Setup post-dividers */
+       if (params->m2 >= 0)
+               writel(params->m2, &dpll_regs->cm_div_m2_dpll);
+       if (params->m3 >= 0)
+               writel(params->m3, &dpll_regs->cm_div_m3_dpll);
+       if (params->h11 >= 0)
+               writel(params->h11, &dpll_regs->cm_div_h11_dpll);
+       if (params->h12 >= 0)
+               writel(params->h12, &dpll_regs->cm_div_h12_dpll);
+       if (params->h13 >= 0)
+               writel(params->h13, &dpll_regs->cm_div_h13_dpll);
+       if (params->h14 >= 0)
+               writel(params->h14, &dpll_regs->cm_div_h14_dpll);
+       if (params->h22 >= 0)
+               writel(params->h22, &dpll_regs->cm_div_h22_dpll);
+       if (params->h23 >= 0)
+               writel(params->h23, &dpll_regs->cm_div_h23_dpll);
+}
+
+const struct dpll_params *get_mpu_dpll_params(void)
+{
+       u32 sysclk_ind = get_sys_clk_index();
+       return &mpu_dpll_params_1100mhz[sysclk_ind];
+}
+
+const struct dpll_params *get_core_dpll_params(void)
+{
+       u32 sysclk_ind = get_sys_clk_index();
+
+       /* Configuring the DDR to be at 532mhz */
+       return &core_dpll_params_2128mhz_ddr266[sysclk_ind];
+
+}
+
+const struct dpll_params *get_per_dpll_params(void)
+{
+       u32 sysclk_ind = get_sys_clk_index();
+       return &per_dpll_params_768mhz[sysclk_ind];
+}
+
+const struct dpll_params *get_iva_dpll_params(void)
+{
+       u32 sysclk_ind = get_sys_clk_index();
+       return &iva_dpll_params_2330mhz[sysclk_ind];
+}
+
+const struct dpll_params *get_usb_dpll_params(void)
+{
+       u32 sysclk_ind = get_sys_clk_index();
+       return &usb_dpll_params_1920mhz[sysclk_ind];
+}
+
+const struct dpll_params *get_abe_dpll_params(void)
+{
+#ifdef CONFIG_SYS_OMAP_ABE_SYSCK
+       u32 sysclk_ind = get_sys_clk_index();
+       return &abe_dpll_params_sysclk_196608khz[sysclk_ind];
+#else
+       return &abe_dpll_params_32k_196608khz;
+#endif
+}
+
+/*
+ * Setup the voltages for vdd_mpu, vdd_core, and vdd_iva
+ * We set the maximum voltages allowed here because Smart-Reflex is not
+ * enabled in bootloader. Voltage initialization in the kernel will set
+ * these to the nominal values after enabling Smart-Reflex
+ */
+void scale_vcores(void)
+{
+       u32 volt;
+
+       setup_sri2c();
+
+       /* Enable 1.22V from TPS for vdd_mpu */
+       volt = 1220;
+       do_scale_tps62361(TPS62361_REG_ADDR_SET1, volt);
+
+       /* VCORE 1 - for vdd_core */
+       volt = 1000;
+       do_scale_vcore(SMPS_REG_ADDR_VCORE1, volt);
+
+       /* VCORE 2 - for vdd_MM */
+       volt = 1125;
+       do_scale_vcore(SMPS_REG_ADDR_VCORE2, volt);
+}
+
+/*
+ * Enable essential clock domains, modules and
+ * do some additional special settings needed
+ */
+void enable_basic_clocks(void)
+{
+       u32 *const clk_domains_essential[] = {
+               &prcm->cm_l4per_clkstctrl,
+               &prcm->cm_l3init_clkstctrl,
+               &prcm->cm_memif_clkstctrl,
+               &prcm->cm_l4cfg_clkstctrl,
+               0
+       };
+
+       u32 *const clk_modules_hw_auto_essential[] = {
+               &prcm->cm_memif_emif_1_clkctrl,
+               &prcm->cm_memif_emif_2_clkctrl,
+               &prcm->cm_l4cfg_l4_cfg_clkctrl,
+               &prcm->cm_wkup_gpio1_clkctrl,
+               &prcm->cm_l4per_gpio2_clkctrl,
+               &prcm->cm_l4per_gpio3_clkctrl,
+               &prcm->cm_l4per_gpio4_clkctrl,
+               &prcm->cm_l4per_gpio5_clkctrl,
+               &prcm->cm_l4per_gpio6_clkctrl,
+               0
+       };
+
+       u32 *const clk_modules_explicit_en_essential[] = {
+               &prcm->cm_wkup_gptimer1_clkctrl,
+               &prcm->cm_l3init_hsmmc1_clkctrl,
+               &prcm->cm_l3init_hsmmc2_clkctrl,
+               &prcm->cm_l4per_gptimer2_clkctrl,
+               &prcm->cm_wkup_wdtimer2_clkctrl,
+               &prcm->cm_l4per_uart3_clkctrl,
+               &prcm->cm_l4per_i2c1_clkctrl,
+               0
+       };
+
+       /* Enable optional additional functional clock for GPIO4 */
+       setbits_le32(&prcm->cm_l4per_gpio4_clkctrl,
+                       GPIO4_CLKCTRL_OPTFCLKEN_MASK);
+
+       /* Enable 96 MHz clock for MMC1 & MMC2 */
+       setbits_le32(&prcm->cm_l3init_hsmmc1_clkctrl,
+                       HSMMC_CLKCTRL_CLKSEL_MASK);
+       setbits_le32(&prcm->cm_l3init_hsmmc2_clkctrl,
+                       HSMMC_CLKCTRL_CLKSEL_MASK);
+
+       /* Select 32KHz clock as the source of GPTIMER1 */
+       setbits_le32(&prcm->cm_wkup_gptimer1_clkctrl,
+                       GPTIMER1_CLKCTRL_CLKSEL_MASK);
+
+       do_enable_clocks(clk_domains_essential,
+                        clk_modules_hw_auto_essential,
+                        clk_modules_explicit_en_essential,
+                        1);
+}
+
+void enable_basic_uboot_clocks(void)
+{
+       u32 *const clk_domains_essential[] = {
+               0
+       };
+
+       u32 *const clk_modules_hw_auto_essential[] = {
+               0
+       };
+
+       u32 *const clk_modules_explicit_en_essential[] = {
+               &prcm->cm_l4per_mcspi1_clkctrl,
+               &prcm->cm_l4per_i2c2_clkctrl,
+               &prcm->cm_l4per_i2c3_clkctrl,
+               &prcm->cm_l4per_i2c4_clkctrl,
+               0
+       };
+
+       do_enable_clocks(clk_domains_essential,
+                        clk_modules_hw_auto_essential,
+                        clk_modules_explicit_en_essential,
+                        1);
+}
+
+/*
+ * Enable non-essential clock domains, modules and
+ * do some additional special settings needed
+ */
+void enable_non_essential_clocks(void)
+{
+       u32 *const clk_domains_non_essential[] = {
+               &prcm->cm_mpu_m3_clkstctrl,
+               &prcm->cm_ivahd_clkstctrl,
+               &prcm->cm_dsp_clkstctrl,
+               &prcm->cm_dss_clkstctrl,
+               &prcm->cm_sgx_clkstctrl,
+               &prcm->cm1_abe_clkstctrl,
+               &prcm->cm_c2c_clkstctrl,
+               &prcm->cm_cam_clkstctrl,
+               &prcm->cm_dss_clkstctrl,
+               &prcm->cm_sdma_clkstctrl,
+               0
+       };
+
+       u32 *const clk_modules_hw_auto_non_essential[] = {
+               &prcm->cm_mpu_m3_mpu_m3_clkctrl,
+               &prcm->cm_ivahd_ivahd_clkctrl,
+               &prcm->cm_ivahd_sl2_clkctrl,
+               &prcm->cm_dsp_dsp_clkctrl,
+               &prcm->cm_l3_2_gpmc_clkctrl,
+               &prcm->cm_l3instr_l3_3_clkctrl,
+               &prcm->cm_l3instr_l3_instr_clkctrl,
+               &prcm->cm_l3instr_intrconn_wp1_clkctrl,
+               &prcm->cm_l3init_hsi_clkctrl,
+               &prcm->cm_l3init_hsusbtll_clkctrl,
+               0
+       };
+
+       u32 *const clk_modules_explicit_en_non_essential[] = {
+               &prcm->cm1_abe_aess_clkctrl,
+               &prcm->cm1_abe_pdm_clkctrl,
+               &prcm->cm1_abe_dmic_clkctrl,
+               &prcm->cm1_abe_mcasp_clkctrl,
+               &prcm->cm1_abe_mcbsp1_clkctrl,
+               &prcm->cm1_abe_mcbsp2_clkctrl,
+               &prcm->cm1_abe_mcbsp3_clkctrl,
+               &prcm->cm1_abe_slimbus_clkctrl,
+               &prcm->cm1_abe_timer5_clkctrl,
+               &prcm->cm1_abe_timer6_clkctrl,
+               &prcm->cm1_abe_timer7_clkctrl,
+               &prcm->cm1_abe_timer8_clkctrl,
+               &prcm->cm1_abe_wdt3_clkctrl,
+               &prcm->cm_l4per_gptimer9_clkctrl,
+               &prcm->cm_l4per_gptimer10_clkctrl,
+               &prcm->cm_l4per_gptimer11_clkctrl,
+               &prcm->cm_l4per_gptimer3_clkctrl,
+               &prcm->cm_l4per_gptimer4_clkctrl,
+               &prcm->cm_l4per_hdq1w_clkctrl,
+               &prcm->cm_l4per_mcspi2_clkctrl,
+               &prcm->cm_l4per_mcspi3_clkctrl,
+               &prcm->cm_l4per_mcspi4_clkctrl,
+               &prcm->cm_l4per_mmcsd3_clkctrl,
+               &prcm->cm_l4per_mmcsd4_clkctrl,
+               &prcm->cm_l4per_mmcsd5_clkctrl,
+               &prcm->cm_l4per_uart1_clkctrl,
+               &prcm->cm_l4per_uart2_clkctrl,
+               &prcm->cm_l4per_uart4_clkctrl,
+               &prcm->cm_wkup_keyboard_clkctrl,
+               &prcm->cm_wkup_wdtimer2_clkctrl,
+               &prcm->cm_cam_iss_clkctrl,
+               &prcm->cm_cam_fdif_clkctrl,
+               &prcm->cm_dss_dss_clkctrl,
+               &prcm->cm_sgx_sgx_clkctrl,
+               &prcm->cm_l3init_hsusbhost_clkctrl,
+               &prcm->cm_l3init_fsusb_clkctrl,
+               0
+       };
+
+       /* Enable optional functional clock for ISS */
+       setbits_le32(&prcm->cm_cam_iss_clkctrl, ISS_CLKCTRL_OPTFCLKEN_MASK);
+
+       /* Enable all optional functional clocks of DSS */
+       setbits_le32(&prcm->cm_dss_dss_clkctrl, DSS_CLKCTRL_OPTFCLKEN_MASK);
+
+       do_enable_clocks(clk_domains_non_essential,
+                        clk_modules_hw_auto_non_essential,
+                        clk_modules_explicit_en_non_essential,
+                        0);
+
+       /* Put camera module in no sleep mode */
+       clrsetbits_le32(&prcm->cm_cam_clkstctrl, MODULE_CLKCTRL_MODULEMODE_MASK,
+                       CD_CLKCTRL_CLKTRCTRL_NO_SLEEP <<
+                       MODULE_CLKCTRL_MODULEMODE_SHIFT);
+}
similarity index 66%
rename from board/ti/evm/config.mk
rename to arch/arm/cpu/armv7/omap5/config.mk
index d173eef094f5e5b8657a99e5b5d1320660b13b70..639f699045d292b7788117fa5f35f52dfe3502ba 100644 (file)
@@ -1,13 +1,10 @@
 #
-# (C) Copyright 2006 - 2008
-# Texas Instruments, <www.ti.com>
-#
-# EVM uses OMAP3 (ARM-CortexA8) cpu
-# see http://www.ti.com/ for more information on Texas Instruments
-#
+# Copyright 2011 Linaro Limited
 # See file CREDITS for list of people who contributed to this
 # project.
 #
+# Aneesh V <annesh@ti.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
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
 #
-# Physical Address:
-# 8000'0000 (bank0)
-# A000/0000 (bank1)
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
 
-# For use with external or internal boots.
-CONFIG_SYS_TEXT_BASE = 0x80008000
+ifdef CONFIG_SPL_BUILD
+ALL-y  += $(OBJTREE)/MLO
+else
+ALL-y  += $(obj)u-boot.img
+endif
diff --git a/arch/arm/cpu/armv7/omap5/emif.c b/arch/arm/cpu/armv7/omap5/emif.c
new file mode 100644 (file)
index 0000000..8019ffe
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * EMIF programming
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Aneesh V <aneesh@ti.com> for OMAP4
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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/emif.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/utils.h>
+
+#ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+#define print_timing_reg(reg) debug(#reg" - 0x%08x\n", (reg))
+static u32 *const T_num = (u32 *)OMAP5_SRAM_SCRATCH_EMIF_T_NUM;
+static u32 *const T_den = (u32 *)OMAP5_SRAM_SCRATCH_EMIF_T_DEN;
+static u32 *const emif_sizes = (u32 *)OMAP5_SRAM_SCRATCH_EMIF_SIZE;
+#endif
+
+#ifdef CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
+/* Base AC Timing values specified by JESD209-2 for 532MHz operation */
+static const struct lpddr2_ac_timings timings_jedec_532_mhz = {
+       .max_freq = 532000000,
+       .RL = 8,
+       .tRPab = 21,
+       .tRCD = 18,
+       .tWR = 15,
+       .tRASmin = 42,
+       .tRRD = 10,
+       .tWTRx2 = 15,
+       .tXSR = 140,
+       .tXPx2 = 15,
+       .tRFCab = 130,
+       .tRTPx2 = 15,
+       .tCKE = 3,
+       .tCKESR = 15,
+       .tZQCS = 90,
+       .tZQCL = 360,
+       .tZQINIT = 1000,
+       .tDQSCKMAXx2 = 11,
+       .tRASmax = 70,
+       .tFAW = 50
+};
+
+/*
+ * Min tCK values specified by JESD209-2
+ * Min tCK specifies the minimum duration of some AC timing parameters in terms
+ * of the number of cycles. If the calculated number of cycles based on the
+ * absolute time value is less than the min tCK value, min tCK value should
+ * be used instead. This typically happens at low frequencies.
+ */
+static const struct lpddr2_min_tck min_tck_jedec = {
+       .tRL = 3,
+       .tRP_AB = 3,
+       .tRCD = 3,
+       .tWR = 3,
+       .tRAS_MIN = 3,
+       .tRRD = 2,
+       .tWTR = 2,
+       .tXP = 2,
+       .tRTP = 2,
+       .tCKE = 3,
+       .tCKESR = 3,
+       .tFAW = 8
+};
+
+static const struct lpddr2_ac_timings const*
+                       jedec_ac_timings[MAX_NUM_SPEEDBINS] = {
+       &timings_jedec_532_mhz
+};
+
+static const struct lpddr2_device_timings jedec_default_timings = {
+       .ac_timings = jedec_ac_timings,
+       .min_tck = &min_tck_jedec
+};
+
+void emif_get_device_timings(u32 emif_nr,
+               const struct lpddr2_device_timings **cs0_device_timings,
+               const struct lpddr2_device_timings **cs1_device_timings)
+{
+       /* Assume Identical devices on EMIF1 & EMIF2 */
+       *cs0_device_timings = &jedec_default_timings;
+       *cs1_device_timings = NULL;
+}
+#endif /* CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS */
diff --git a/arch/arm/cpu/armv7/omap5/hwinit.c b/arch/arm/cpu/armv7/omap5/hwinit.c
new file mode 100644 (file)
index 0000000..fa8e390
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ *
+ * Functions for omap5 based boards.
+ *
+ * (C) Copyright 2011
+ * Texas Instruments, <www.ti.com>
+ *
+ * Author :
+ *     Aneesh V        <aneesh@ti.com>
+ *     Steve Sakoman   <steve@sakoman.com>
+ *     Sricharan       <r.sricharan@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 <common.h>
+#include <asm/armv7.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/sizes.h>
+#include <asm/utils.h>
+#include <asm/arch/gpio.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+u32 *const omap5_revision = (u32 *)OMAP5_SRAM_SCRATCH_OMAP5_REV;
+
+static struct gpio_bank gpio_bank_54xx[6] = {
+       { (void *)OMAP54XX_GPIO1_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP54XX_GPIO2_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP54XX_GPIO3_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP54XX_GPIO4_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP54XX_GPIO5_BASE, METHOD_GPIO_24XX },
+       { (void *)OMAP54XX_GPIO6_BASE, METHOD_GPIO_24XX },
+};
+
+const struct gpio_bank *const omap_gpio_bank = gpio_bank_54xx;
+
+#ifdef CONFIG_SPL_BUILD
+/*
+ * Some tuning of IOs for optimal power and performance
+ */
+void do_io_settings(void)
+{
+}
+#endif
+
+void init_omap_revision(void)
+{
+       /*
+        * For some of the ES2/ES1 boards ID_CODE is not reliable:
+        * Also, ES1 and ES2 have different ARM revisions
+        * So use ARM revision for identification
+        */
+       unsigned int rev = cortex_rev();
+
+       switch (rev) {
+       case MIDR_CORTEX_A15_R0P0:
+               *omap5_revision = OMAP5430_ES1_0;
+       default:
+               *omap5_revision = OMAP5430_SILICON_ID_INVALID;
+       }
+}
diff --git a/arch/arm/cpu/armv7/omap5/sdram_elpida.c b/arch/arm/cpu/armv7/omap5/sdram_elpida.c
new file mode 100644 (file)
index 0000000..ad198e6
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ * Timing and Organization details of the Elpida parts used in OMAP5
+ * EVM
+ *
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Aneesh V <aneesh@ti.com>
+ * Sricharan R <r.sricharan@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 <asm/emif.h>
+#include <asm/arch/sys_proto.h>
+
+/*
+ * This file provides details of the LPDDR2 SDRAM parts used on OMAP5
+ * EVM. Since the parts used and geometry are identical for
+ * evm for a given OMAP5 revision, this information is kept
+ * here instead of being in board directory. However the key functions
+ * exported are weakly linked so that they can be over-ridden in the board
+ * directory if there is a OMAP5 board in the future that uses a different
+ * memory device or geometry.
+ *
+ * For any new board with different memory devices over-ride one or more
+ * of the following functions as per the CONFIG flags you intend to enable:
+ * - emif_get_reg_dump()
+ * - emif_get_dmm_regs()
+ * - emif_get_device_details()
+ * - emif_get_device_timings()
+ */
+
+#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+
+const struct emif_regs emif_regs_elpida_532_mhz_1cs = {
+       .sdram_config_init              = 0x80801aB2,
+       .sdram_config                   = 0x808022B2,
+       .ref_ctrl                       = 0x0000081A,
+       .sdram_tim1                     = 0x772F6873,
+       .sdram_tim2                     = 0x304A129A,
+       .sdram_tim3                     = 0x02F7E45F,
+       .read_idle_ctrl                 = 0x00050000,
+       .zq_config                      = 0x000B3215,
+       .temp_alert_config              = 0x08000A05,
+       .emif_ddr_phy_ctlr_1_init       = 0x0E38200D,
+       .emif_ddr_phy_ctlr_1            = 0x0E38200D
+};
+
+const struct dmm_lisa_map_regs lisa_map_4G_x_1_x_2 = {
+       .dmm_lisa_map_0 = 0xFF020100,
+       .dmm_lisa_map_1 = 0,
+       .dmm_lisa_map_2 = 0,
+       .dmm_lisa_map_3 = 0x80640300
+};
+
+static void emif_get_reg_dump_sdp(u32 emif_nr, const struct emif_regs **regs)
+{
+       *regs = &emif_regs_elpida_532_mhz_1cs;
+}
+void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
+       __attribute__((weak, alias("emif_get_reg_dump_sdp")));
+
+static void emif_get_dmm_regs_sdp(const struct dmm_lisa_map_regs
+                                               **dmm_lisa_regs)
+{
+       *dmm_lisa_regs = &lisa_map_4G_x_1_x_2;
+}
+
+void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs)
+       __attribute__((weak, alias("emif_get_dmm_regs_sdp")));
+
+#else
+
+static const struct lpddr2_device_details elpida_4G_S4_details = {
+       .type           = LPDDR2_TYPE_S4,
+       .density        = LPDDR2_DENSITY_4Gb,
+       .io_width       = LPDDR2_IO_WIDTH_32,
+       .manufacturer   = LPDDR2_MANUFACTURER_ELPIDA
+};
+
+static void emif_get_device_details_sdp(u32 emif_nr,
+               struct lpddr2_device_details *cs0_device_details,
+               struct lpddr2_device_details *cs1_device_details)
+{
+       /* EMIF1 & EMIF2 have identical configuration */
+       *cs0_device_details = elpida_4G_S4_details;
+
+       /* Nothing is conected on cs1 */
+       cs1_device_details = NULL;
+}
+
+void emif_get_device_details(u32 emif_nr,
+               struct lpddr2_device_details *cs0_device_details,
+               struct lpddr2_device_details *cs1_device_details)
+       __attribute__((weak, alias("emif_get_device_details_sdp")));
+
+#endif /* CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS */
+
+#ifndef CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
+static const struct lpddr2_ac_timings timings_jedec_532_mhz = {
+       .max_freq       = 532000000,
+       .RL             = 8,
+       .tRPab          = 21,
+       .tRCD           = 18,
+       .tWR            = 15,
+       .tRASmin        = 42,
+       .tRRD           = 10,
+       .tWTRx2         = 15,
+       .tXSR           = 140,
+       .tXPx2          = 15,
+       .tRFCab         = 130,
+       .tRTPx2         = 15,
+       .tCKE           = 3,
+       .tCKESR         = 15,
+       .tZQCS          = 90,
+       .tZQCL          = 360,
+       .tZQINIT        = 1000,
+       .tDQSCKMAXx2    = 11,
+       .tRASmax        = 70,
+       .tFAW           = 50
+};
+
+static const struct lpddr2_min_tck min_tck_elpida = {
+       .tRL            = 3,
+       .tRP_AB         = 3,
+       .tRCD           = 3,
+       .tWR            = 3,
+       .tRAS_MIN       = 3,
+       .tRRD           = 2,
+       .tWTR           = 2,
+       .tXP            = 2,
+       .tRTP           = 2,
+       .tCKE           = 3,
+       .tCKESR         = 3,
+       .tFAW           = 8
+};
+
+static const struct lpddr2_ac_timings *elpida_ac_timings[MAX_NUM_SPEEDBINS] = {
+       &timings_jedec_532_mhz
+};
+
+static const struct lpddr2_device_timings elpida_4G_S4_timings = {
+       .ac_timings     = elpida_ac_timings,
+       .min_tck        = &min_tck_elpida,
+};
+
+void emif_get_device_timings_sdp(u32 emif_nr,
+               const struct lpddr2_device_timings **cs0_device_timings,
+               const struct lpddr2_device_timings **cs1_device_timings)
+{
+       /* Identical devices on EMIF1 & EMIF2 */
+       *cs0_device_timings = &elpida_4G_S4_timings;
+       *cs1_device_timings = NULL;
+}
+
+void emif_get_device_timings(u32 emif_nr,
+               const struct lpddr2_device_timings **cs0_device_timings,
+               const struct lpddr2_device_timings **cs1_device_timings)
+       __attribute__((weak, alias("emif_get_device_timings_sdp")));
+
+#endif /* CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS */
index ff95b84f5505d9ea63bb1ee635ae5ae5f696ad55..58d279e003ff0df2ffd34b3373343fd232f95aa2 100644 (file)
@@ -82,7 +82,6 @@ int pwm_config(int pwm_id, int duty_ns, int period_ns)
        unsigned long period;
        unsigned long tcon;
        unsigned long tcnt;
-       unsigned long timer_rate_hz;
        unsigned long tcmp;
 
        /*
@@ -100,7 +99,6 @@ int pwm_config(int pwm_id, int duty_ns, int period_ns)
 
        /* Check to see if we are changing the clock rate of the PWM */
        tin_rate = pwm_calc_tin(pwm_id, period);
-       timer_rate_hz = tin_rate;
 
        tin_ns = NS_IN_HZ / tin_rate;
        tcnt = period_ns / tin_ns;
index db8e9d2f189523b3c3151b890a63550c3693ebd6..d23dc9d719b926cc7f2e3b978fbc728d1df8a2e8 100644 (file)
@@ -32,6 +32,7 @@
 #include <asm-offsets.h>
 #include <config.h>
 #include <version.h>
+#include <asm/system.h>
 
 .globl _start
 _start: b      reset
@@ -143,29 +144,22 @@ reset:
        orr     r0, r0, #0xd3
        msr     cpsr,r0
 
-#if defined(CONFIG_OMAP34XX)
-       /* Copy vectors to mask ROM indirect addr */
-       adr     r0, _start              @ r0 <- current position of code
-       add     r0, r0, #4              @ skip reset vector
-       mov     r2, #64                 @ r2 <- size to copy
-       add     r2, r0, r2              @ r2 <- source end address
-       mov     r1, #SRAM_OFFSET0       @ build vect addr
-       mov     r3, #SRAM_OFFSET1
-       add     r1, r1, r3
-       mov     r3, #SRAM_OFFSET2
-       add     r1, r1, r3
-next:
-       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]
-       bne     next                    @ loop until equal */
-#if !defined(CONFIG_SYS_NAND_BOOT) && !defined(CONFIG_SYS_ONENAND_BOOT)
-       /* No need to copy/exec the clock code - DPLL adjust already done
-        * in NAND/oneNAND Boot.
-        */
-       bl      cpy_clk_code            @ put dpll adjust code behind vectors
-#endif /* NAND Boot */
+/*
+ * Setup vector:
+ * (OMAP4 spl TEXT_BASE is not 32 byte aligned.
+ * Continue to use ROM code vector only in OMAP4 spl)
+ */
+#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD))
+       /* Set V=0 in CP15 SCTRL register - for VBAR to point to vector */
+       mrc     p15, 0, r0, c1, c0, 0   @ Read CP15 SCTRL Register
+       bic     r0, #CR_V               @ V = 0
+       mcr     p15, 0, r0, c1, c0, 0   @ Write CP15 SCTRL Register
+
+       /* Set vector address in CP15 VBAR register */
+       ldr     r0, =_start
+       mcr     p15, 0, r0, c12, c0, 0  @Set VBAR
 #endif
+
        /* the mask ROM code should have PLL and others stable */
 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
        bl      cpu_init_crit
index e8b59a30c9b0b9c29dae1aa6741e6e96d10ffb52..e08883256064622d0642cec0915d54cc3bb7b77f 100644 (file)
@@ -27,7 +27,12 @@ LIB  = $(obj)lib$(CPU).o
 
 START  = start.o
 
-COBJS  += cpu.o
+COBJS-$(CONFIG_CPU_PXA25X)     = pxa2xx.o
+COBJS-$(CONFIG_CPU_PXA27X)     = pxa2xx.o
+
+COBJS-y        += cpuinfo.o
+
+COBJS  = $(COBJS-y)
 COBJS  += pxafb.o
 COBJS  += timer.o
 COBJS  += usb.o
diff --git a/arch/arm/cpu/pxa/cpuinfo.c b/arch/arm/cpu/pxa/cpuinfo.c
new file mode 100644 (file)
index 0000000..f1cdd40
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * PXA CPU information display
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@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
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <errno.h>
+#include <linux/compiler.h>
+
+#define        CPU_MASK_PXA_REVID      0x00f
+
+#define        CPU_MASK_PXA_PRODID     0x3f0
+#define        CPU_VALUE_PXA25X        0x100
+#define        CPU_VALUE_PXA27X        0x110
+
+static uint32_t pxa_get_cpuid(void)
+{
+       uint32_t cpuid;
+       asm volatile("mrc p15, 0, %0, c0, c0, 0" : "=r"(cpuid));
+       return cpuid;
+}
+
+int cpu_is_pxa25x(void)
+{
+       uint32_t id = pxa_get_cpuid();
+       id &= CPU_MASK_PXA_PRODID;
+       return id == CPU_VALUE_PXA25X;
+}
+
+int cpu_is_pxa27x(void)
+{
+       uint32_t id = pxa_get_cpuid();
+       id &= CPU_MASK_PXA_PRODID;
+       return id == CPU_VALUE_PXA27X;
+}
+
+#ifdef CONFIG_DISPLAY_CPUINFO
+static const char *pxa25x_get_revision(void)
+{
+       static __maybe_unused const char * const revs_25x[] = { "A0" };
+       static __maybe_unused const char * const revs_26x[] = {
+                                                               "A0", "B0", "B1"
+                                                               };
+       static const char *unknown = "Unknown";
+       uint32_t id;
+
+       if (!cpu_is_pxa25x())
+               return unknown;
+
+       id = pxa_get_cpuid() & CPU_MASK_PXA_REVID;
+
+/* PXA26x is a sick special case as it can't be told apart from PXA25x :-( */
+#ifdef CONFIG_CPU_PXA26X
+       switch (id) {
+       case 3: return revs_26x[0];
+       case 5: return revs_26x[1];
+       case 6: return revs_26x[2];
+       }
+#else
+       if (id == 6)
+               return revs_25x[0];
+#endif
+       return unknown;
+}
+
+static const char *pxa27x_get_revision(void)
+{
+       static const char *const rev[] = { "A0", "A1", "B0", "B1", "C0", "C5" };
+       static const char *unknown = "Unknown";
+       uint32_t id;
+
+       if (!cpu_is_pxa27x())
+               return unknown;
+
+       id = pxa_get_cpuid() & CPU_MASK_PXA_REVID;
+
+       if ((id == 5) || (id == 6) || (id > 7))
+               return unknown;
+
+       /* Cap the special PXA270 C5 case. */
+       if (id == 7)
+               id = 5;
+
+       return rev[id];
+}
+
+static int print_cpuinfo_pxa2xx(void)
+{
+       if (cpu_is_pxa25x()) {
+               puts("Marvell PXA25x rev. ");
+               puts(pxa25x_get_revision());
+       } else if (cpu_is_pxa27x()) {
+               puts("Marvell PXA27x rev. ");
+               puts(pxa27x_get_revision());
+       } else
+               return -EINVAL;
+
+       puts("\n");
+
+       return 0;
+}
+
+int print_cpuinfo(void)
+{
+       int ret;
+
+       puts("CPU: ");
+
+       ret = print_cpuinfo_pxa2xx();
+       if (!ret)
+               return ret;
+
+       return ret;
+}
+#endif
similarity index 76%
rename from arch/arm/cpu/pxa/cpu.c
rename to arch/arm/cpu/pxa/pxa2xx.c
index df351c7fbcfb3518fd6c311280031fd130ea1316..09e8177f7b8292cca79c2b6f4631cc94eeb28f42 100644 (file)
  * MA 02111-1307 USA
  */
 
-/*
- * CPU specific code
- */
-
 #include <asm/io.h>
 #include <asm/system.h>
 #include <command.h>
 #include <common.h>
 #include <asm/arch/pxa-regs.h>
 
-static void cache_flush(void);
+/* Flush I/D-cache */
+static void cache_flush(void)
+{
+       unsigned long i = 0;
 
-int cleanup_before_linux (void)
+       asm ("mcr p15, 0, %0, c7, c5, 0" : : "r" (i));
+}
+
+int cleanup_before_linux(void)
 {
        /*
-        * this function is called just before we call linux
-        * it prepares the processor for linux
-        *
-        * just disable everything that can disturb booting linux
+        * This function is called just before we call Linux. It prepares
+        * the processor for Linux by just disabling everything that can
+        * disturb booting Linux.
         */
 
-       disable_interrupts ();
-
-       /* turn off I-cache */
+       disable_interrupts();
        icache_disable();
        dcache_disable();
-
-       /* flush I-cache */
        cache_flush();
 
-       return (0);
-}
-
-/* flush I/D-cache */
-static void cache_flush (void)
-{
-       unsigned long i = 0;
-
-       asm ("mcr p15, 0, %0, c7, c5, 0": :"r" (i));
-}
-
-#ifndef CONFIG_CPU_MONAHANS
-void set_GPIO_mode(int gpio_mode)
-{
-       int gpio = gpio_mode & GPIO_MD_MASK_NR;
-       int fn = (gpio_mode & GPIO_MD_MASK_FN) >> 8;
-       int val;
-
-       /* This below changes direction setting of GPIO "gpio" */
-       val = readl(GPDR(gpio));
-
-       if (gpio_mode & GPIO_MD_MASK_DIR)
-               val |= GPIO_bit(gpio);
-       else
-               val &= ~GPIO_bit(gpio);
-
-       writel(val, GPDR(gpio));
-
-       /* This below updates only AF of GPIO "gpio" */
-       val = readl(GAFR(gpio));
-       val &= ~(0x3 << (((gpio) & 0xf) * 2));
-       val |= fn << (((gpio) & 0xf) * 2);
-       writel(val, GAFR(gpio));
+       return 0;
 }
-#endif /* CONFIG_CPU_MONAHANS */
 
 void pxa_wait_ticks(int ticks)
 {
        writel(0, OSCR);
        while (readl(OSCR) < ticks)
-               asm volatile("":::"memory");
+               asm volatile("" : : : "memory");
 }
 
 inline void writelrb(uint32_t val, uint32_t addr)
 {
        writel(val, addr);
-       asm volatile("":::"memory");
+       asm volatile("" : : : "memory");
        readl(addr);
-       asm volatile("":::"memory");
+       asm volatile("" : : : "memory");
 }
 
-void pxa_dram_init(void)
+void pxa2xx_dram_init(void)
 {
        uint32_t tmp;
        int i;
@@ -201,7 +165,7 @@ void pxa_dram_init(void)
         */
        for (i = 9; i >= 0; i--) {
                writel(i, 0xa0000000);
-               asm volatile("":::"memory");
+               asm volatile("" : : : "memory");
        }
        /*
         * 9) Write MDCNFG with enable bits asserted (MDCNFG:DEx set to 1).
@@ -234,21 +198,21 @@ void pxa_gpio_setup(void)
        writel(CONFIG_SYS_GPSR0_VAL, GPSR0);
        writel(CONFIG_SYS_GPSR1_VAL, GPSR1);
        writel(CONFIG_SYS_GPSR2_VAL, GPSR2);
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X)
        writel(CONFIG_SYS_GPSR3_VAL, GPSR3);
 #endif
 
        writel(CONFIG_SYS_GPCR0_VAL, GPCR0);
        writel(CONFIG_SYS_GPCR1_VAL, GPCR1);
        writel(CONFIG_SYS_GPCR2_VAL, GPCR2);
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X)
        writel(CONFIG_SYS_GPCR3_VAL, GPCR3);
 #endif
 
        writel(CONFIG_SYS_GPDR0_VAL, GPDR0);
        writel(CONFIG_SYS_GPDR1_VAL, GPDR1);
        writel(CONFIG_SYS_GPDR2_VAL, GPDR2);
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X)
        writel(CONFIG_SYS_GPDR3_VAL, GPDR3);
 #endif
 
@@ -258,7 +222,7 @@ void pxa_gpio_setup(void)
        writel(CONFIG_SYS_GAFR1_U_VAL, GAFR1_U);
        writel(CONFIG_SYS_GAFR2_L_VAL, GAFR2_L);
        writel(CONFIG_SYS_GAFR2_U_VAL, GAFR2_U);
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X)
        writel(CONFIG_SYS_GAFR3_L_VAL, GAFR3_L);
        writel(CONFIG_SYS_GAFR3_U_VAL, GAFR3_U);
 #endif
@@ -270,7 +234,7 @@ void pxa_interrupt_setup(void)
 {
        writel(0, ICLR);
        writel(0, ICMR);
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X)
        writel(0, ICLR2);
        writel(0, ICMR2);
 #endif
@@ -278,18 +242,14 @@ void pxa_interrupt_setup(void)
 
 void pxa_clock_setup(void)
 {
-#ifndef CONFIG_CPU_MONAHANS
        writel(CONFIG_SYS_CKEN, CKEN);
        writel(CONFIG_SYS_CCCR, CCCR);
-       asm volatile("mcr       p14, 0, %0, c6, c0, 0"::"r"(2));
-#else
-/* Set CKENA/CKENB/ACCR for MH */
-#endif
+       asm volatile("mcr       p14, 0, %0, c6, c0, 0" : : "r"(2));
 
        /* enable the 32Khz oscillator for RTC and PowerManager */
        writel(OSCC_OON, OSCC);
-       while(!(readl(OSCC) & OSCC_OOK))
-               asm volatile("":::"memory");
+       while (!(readl(OSCC) & OSCC_OOK))
+               asm volatile("" : : : "memory");
 }
 
 void pxa_wakeup(void)
@@ -302,17 +262,16 @@ void pxa_wakeup(void)
        /* Wakeup */
        if (rcsr & RCSR_SMR) {
                writel(PSSR_PH, PSSR);
-               pxa_dram_init();
+               pxa2xx_dram_init();
                icache_disable();
                dcache_disable();
-               asm volatile("mov       pc, %0"::"r"(readl(PSPR)));
+               asm volatile("mov       pc, %0" : : "r"(readl(PSPR)));
        }
 }
 
 int arch_cpu_init(void)
 {
        pxa_gpio_setup();
-/*     pxa_wait_ticks(0x8000); */
        pxa_wakeup();
        pxa_interrupt_setup();
        pxa_clock_setup();
@@ -321,10 +280,22 @@ int arch_cpu_init(void)
 
 void i2c_clk_enable(void)
 {
-       /* set the global I2C clock on */
-#ifdef CONFIG_CPU_MONAHANS
-       writel(readl(CKENB) | (CKENB_4_I2C), CKENB);
-#else
+       /* Set the global I2C clock on */
        writel(readl(CKEN) | CKEN14_I2C, CKEN);
-#endif
+}
+
+void reset_cpu(ulong ignored) __attribute__((noreturn));
+
+void reset_cpu(ulong ignored)
+{
+       uint32_t tmp;
+
+       setbits_le32(OWER, OWER_WME);
+
+       tmp = readl(OSCR);
+       tmp += 0x1000;
+       writel(tmp, OSMR3);
+
+       for (;;)
+               ;
 }
index 6191a73a54d263c0904d0dc0304ebda3269167ab..ba0de8f1db7926fd0651d72e33cffc1503240c94 100644 (file)
@@ -1,14 +1,20 @@
 /*
- *  armboot - Startup Code for XScale
+ *  armboot - Startup Code for XScale CPU-core
  *
  *  Copyright (C) 1998 Dan Malek <dmalek@jlc.net>
  *  Copyright (C) 1999 Magnus Damm <kieraypc01.p.y.kie.era.ericsson.se>
  *  Copyright (C) 2000 Wolfgang Denk <wd@denx.de>
  *  Copyright (C) 2001 Alex Zuepke <azu@sysgo.de>
+ *  Copyright (C) 2001 Marius Groger <mag@sysgo.de>
+ *  Copyright (C) 2002 Alex Zupke <azu@sysgo.de>
+ *  Copyright (C) 2002 Gary Jennejohn <garyj@denx.de>
  *  Copyright (C) 2002 Kyle Harris <kharris@nexus-tech.net>
- *  Copyright (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de>
  *  Copyright (C) 2003 Kai-Uwe Bloem <kai-uwe.bloem@auerswald.de>
- *  Copyright (c) 2010 Marek Vasut <marek.vasut@gmail.com>
+ *  Copyright (C) 2003 Kshitij <kshitij@ti.com>
+ *  Copyright (C) 2003 Richard Woodruff <r-woodruff2@ti.com>
+ *  Copyright (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de>
+ *  Copyright (C) 2004 Texas Instruments <r-woodruff2@ti.com>
+ *  Copyright (C) 2010 Marek Vasut <marek.vasut@gmail.com>
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 #include <asm-offsets.h>
 #include <config.h>
 #include <version.h>
-#include <asm/arch/pxa-regs.h>
 
-/* takes care the CP15 update has taken place */
-.macro CPWAIT reg
-mrc  p15,0,\reg,c2,c0,0
-mov  \reg,\reg
-sub  pc,pc,#4
-.endm
+#ifdef CONFIG_CPU_PXA25X
+#if ((CONFIG_SYS_INIT_SP_ADDR) != 0xfffff800)
+#error "Init SP address must be set to 0xfffff800 for PXA250"
+#endif
+#endif
 
 .globl _start
 _start: b      reset
@@ -77,26 +81,38 @@ _data_abort:                .word data_abort
 _not_used:             .word not_used
 _irq:                  .word irq
 _fiq:                  .word fiq
+_pad:                  .word 0x12345678 /* now 16*4=64 */
 #endif /* CONFIG_SPL_BUILD */
+.global _end_vect
+_end_vect:
 
        .balignl 16,0xdeadbeef
-
-
 /*
+ *************************************************************************
+ *
  * Startup Code (reset vector)
  *
- * do important init only if we don't start from RAM!
- * - relocate armboot to RAM
- * - setup stack
- * - jump to second stage
+ * 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
+ *
+ *************************************************************************
  */
 
 .globl _TEXT_BASE
 _TEXT_BASE:
+#ifdef CONFIG_SPL_BUILD
+       .word   CONFIG_SPL_TEXT_BASE
+#else
        .word   CONFIG_SYS_TEXT_BASE
+#endif
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
 .globl _bss_start_ofs
 _bss_start_ofs:
@@ -120,9 +136,8 @@ IRQ_STACK_START:
 .globl FIQ_STACK_START
 FIQ_STACK_START:
        .word 0x0badc0de
-#endif /* CONFIG_USE_IRQ */
+#endif
 
-#ifndef CONFIG_SPL_BUILD
 /* IRQ stack memory (calculated at run-time) + 8 bytes */
 .globl IRQ_STACK_START_IN
 IRQ_STACK_START_IN:
@@ -141,95 +156,23 @@ reset:
        orr     r0,r0,#0xd3
        msr     cpsr,r0
 
-       /*
-        * Enable MMU to use DCache as DRAM
-        */
-       /* Domain access -- enable for all CPs */
-       ldr     r0, =0x0000ffff
-       mcr     p15, 0, r0, c3, c0, 0
-
-       /* Point TTBR to MMU table */
-       ldr     r0, =mmu_table
-       adr     r2, _start
-       orr     r0, r2
-       mcr     p15, 0, r0, c2, c0, 0
-
-/* !!! Hereby, check if the code is running from SRAM !!! */
-/* If the code is running from SRAM, alias SRAM to 0x0 to simulate NOR. The code
- * is linked to 0x0 too, so this makes things easier. */
-       cmp     r2, #0x5c000000
-
-       ldreq   r1, [r0]
-       orreq   r1, r2
-       streq   r1, [r0]
-
-       /* Kick in MMU, ICache, DCache, BTB */
-       mrc     p15, 0, r0, c1, c0, 0
-       bic     r0, #0x1b00
-       bic     r0, #0x0087
-       orr     r0, #0x1800
-       orr     r0, #0x0005
-       mcr     p15, 0, r0, c1, c0, 0
-       CPWAIT  r0
-
-       /* Unlock Icache, Dcache */
-       mcr     p15, 0, r0, c9, c1, 1
-       mcr     p15, 0, r0, c9, c2, 1
-
-       /* Flush Icache, Dcache, BTB */
-       mcr     p15, 0, r0, c7, c7, 0
-
-       /* Unlock I-TLB, D-TLB */
-       mcr     p15, 0, r0, c10, c4, 1
-       mcr     p15, 0, r0, c10, c8, 1
-
-       /* Flush TLB */
-       mcr     p15, 0, r0, c8, c7, 0
-       /* Allocate 4096 bytes of Dcache as RAM */
-
-       /* Drain pending loads and stores */
-       mcr     p15, 0, r0, c7, c10, 4
-
-       mov     r4, #0x00
-       mov     r5, #0x00
-       mov     r2, #0x01
-       mcr     p15, 0, r0, c9, c2, 0
-       CPWAIT  r0
-
-       /* 128 lines reserved (128 x 32bytes = 4096 bytes total) */
-       mov     r0, #128
-       mov     r1, #0xa0000000
-alloc:
-       mcr     p15, 0, r1, c7, c2, 5
-       /* Drain pending loads and stores */
-       mcr     p15, 0, r0, c7, c10, 4
-       strd    r4, [r1], #8
-       strd    r4, [r1], #8
-       strd    r4, [r1], #8
-       strd    r4, [r1], #8
-       subs    r0, #0x01
-       bne     alloc
-       /* Drain pending loads and stores */
-       mcr     p15, 0, r0, c7, c10, 4
-       mov     r2, #0x00
-       mcr     p15, 0, r2, c9, c2, 0
-       CPWAIT  r0
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
+       bl  cpu_init_crit
+#endif
 
-       /* Jump to 0x0 ( + offset) if running from SRAM */
-       adr     r0, zerojmp
-       bic     r0, #0x5c000000
-       mov     pc, r0
-zerojmp:
+#ifdef CONFIG_CPU_PXA25X
+       bl      lock_cache_for_stack
+#endif
 
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
        bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
-       ldr     r0,=0x00000000
+       ldr     r0, =0x00000000
        bl      board_init_f
 
 /*------------------------------------------------------------------------------*/
-
+#ifndef CONFIG_SPL_BUILD
 /*
  * void relocate_code (addr_sp, gd, addr_moni)
  *
@@ -247,6 +190,11 @@ relocate_code:
 stack_setup:
        mov     sp, r4
 
+/* Disable the Dcache RAM lock for stack now */
+#ifdef CONFIG_CPU_PXA25X
+       bl      cpu_init_crit
+#endif
+
        adr     r0, _start
        cmp     r0, r6
        beq     clear_bss               /* skip relocation */
@@ -254,13 +202,11 @@ stack_setup:
        ldr     r3, _bss_start_ofs
        add     r2, r0, r3              /* r2 <- source end address         */
 
-       stmfd sp!, {r0-r12}
 copy_loop:
-       ldmia   r0!, {r3-r5, r7-r11}    /* copy from source address [r0]    */
-       stmia   r1!, {r3-r5, r7-r11}    /* copy to   target address [r1]    */
+       ldmia   r0!, {r9-r10}           /* copy from source address [r0]    */
+       stmia   r1!, {r9-r10}           /* copy to   target address [r1]    */
        cmp     r0, r2                  /* until source end address [r2]    */
        blo     copy_loop
-       ldmfd sp!, {r0-r12}
 
 #ifndef CONFIG_SPL_BUILD
        /*
@@ -275,13 +221,13 @@ copy_loop:
        ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
        add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r0, [r2]        /* r0 <- location to fix up, IN FLASH! */
-       add     r0, r9          /* r0 <- location to fix up in RAM */
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
        ldr     r1, [r2, #4]
        and     r7, r1, #0xff
-       cmp     r7, #23         /* relative fixup? */
+       cmp     r7, #23                 /* relative fixup? */
        beq     fixrel
-       cmp     r7, #2          /* absolute fixup? */
+       cmp     r7, #2                  /* absolute fixup? */
        beq     fixabs
        /* ignore unknown type of fixup */
        b       fixnext
@@ -298,10 +244,10 @@ fixrel:
        add     r1, r1, r9
 fixnext:
        str     r1, [r0]
-       add     r2, r2, #8      /* each rel.dyn entry is 8 bytes */
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
-#endif /* #ifndef CONFIG_SPL_BUILD */
+#endif
 
 clear_bss:
 #ifndef CONFIG_SPL_BUILD
@@ -322,15 +268,16 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * We are done. Do not return, instead branch to second part of board
  * initialization, now running from RAM.
  */
-#ifdef CONFIG_ONENAND_IPL
-       ldr     r0, _start_oneboot_ofs
+#ifdef CONFIG_ONENAND_SPL
+       ldr     r0, _onenand_boot_ofs
        mov     pc, r0
 
-_start_oneboot_ofs
-       : .word start_oneboot
+_onenand_boot_ofs:
+       .word onenand_boot
 #else
+jump_2_ram:
        ldr     r0, _board_init_r_ofs
-       adr     r1, _start
+       ldr     r1, _TEXT_BASE
        add     lr, r0, r1
        add     lr, lr, r9
        /* setup parameters for board_init_r */
@@ -341,7 +288,7 @@ _start_oneboot_ofs
 
 _board_init_r_ofs:
        .word board_init_r - _start
-#endif /* CONFIG_ONENAND_IPL */
+#endif
 
 _rel_dyn_start_ofs:
        .word __rel_dyn_start - _start
@@ -349,43 +296,50 @@ _rel_dyn_end_ofs:
        .word __rel_dyn_end - _start
 _dynsym_start_ofs:
        .word __dynsym_start - _start
-
-#else /* CONFIG_SPL_BUILD */
-
-/****************************************************************************/
-/*                                                                         */
-/* the actual reset code for OneNAND IPL                                   */
-/*                                                                         */
-/****************************************************************************/
-
-#ifndef        CONFIG_PXA27X
-#error OneNAND IPL is not supported on PXA25x and 26x due to lack of SRAM
 #endif
+/*
+ *************************************************************************
+ *
+ * CPU_init_critical registers
+ *
+ * setup important registers
+ * setup memory timing
+ *
+ *************************************************************************
+ */
+#if !defined(CONFIG_SKIP_LOWLEVEL_INIT) || defined(CONFIG_CPU_PXA25X)
+cpu_init_crit:
+       /*
+        * flush v4 I/D caches
+        */
+       mov     r0, #0
+       mcr     p15, 0, r0, c7, c7, 0   /* Invalidate I+D+BTB caches */
+       mcr     p15, 0, r0, c8, c7, 0   /* Invalidate Unified TLB */
 
-reset:
-       /* Set CPU to SVC32 mode */
-       mrs     r0,cpsr
-       bic     r0,r0,#0x1f
-       orr     r0,r0,#0x13
-       msr     cpsr,r0
-
-       /* Point stack at the end of SRAM and leave 32 words for abort-stack */
-       ldr     sp, =0x5c03ff80
-
-       /* Start OneNAND IPL */
-       ldr     pc, =start_oneboot
+       /*
+        * 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
 
-#endif /* CONFIG_SPL_BUILD */
+       mov     pc, lr          /* back to my caller */
+#endif /* !CONFIG_SKIP_LOWLEVEL_INIT || CONFIG_CPU_PXA25X */
 
 #ifndef CONFIG_SPL_BUILD
-/****************************************************************************/
-/*                                                                         */
-/* Interrupt handling                                                      */
-/*                                                                         */
-/****************************************************************************/
-
-/* IRQ stack frame                                                         */
-
+/*
+ *************************************************************************
+ *
+ * Interrupt handling
+ *
+ *************************************************************************
+ */
+@
+@ IRQ stack frame.
+@
 #define S_FRAME_SIZE   72
 
 #define S_OLD_R0       68
@@ -409,37 +363,36 @@ reset:
 #define S_R0           0
 
 #define MODE_SVC 0x13
+#define I_BIT   0x80
 
-       /* use bad_save_user_regs for abort/prefetch/undef/swi ...          */
+/*
+ * 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
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  /* Calling r0-r12           */
-       add     r8, sp, #S_PC
+       sub     sp, sp, #S_FRAME_SIZE           @ carve out a frame on current user stack
+       stmia   sp, {r0 - r12}                  @ Save user registers (now in svc mode) r0-r12
 
-       ldr     r2, IRQ_STACK_START_IN
-       ldmia   r2, {r2 - r4}                   /* get pc, cpsr, old_r0     */
-       add     r0, sp, #S_FRAME_SIZE           /* restore sp_SVC           */
+       ldr     r2, IRQ_STACK_START_IN          @ set base 2 words into abort stack
+       ldmia   r2, {r2 - r3}                   @ get values for "aborted" pc and cpsr (into parm regs)
+       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
 
        add     r5, sp, #S_SP
        mov     r1, lr
-       stmia   r5, {r0 - r4}                   /* save sp_SVC, lr_SVC, pc, cpsr, old_r */
-       mov     r0, sp
+       stmia   r5, {r0 - r3}                   @ save sp_SVC, lr_SVC, pc, cpsr
+       mov     r0, sp                          @ save current stack into r0 (param register)
        .endm
 
-
-       /* use irq_save_user_regs / irq_restore_user_regs for                */
-       /* IRQ/FIQ handling                                                  */
-
        .macro  irq_save_user_regs
        sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  /* Calling r0-r12            */
-       add     r8, sp, #S_PC
-       stmdb   r8, {sp, lr}^                   /* Calling SP, LR            */
-       str     lr, [r8, #0]                    /* Save calling PC           */
+       stmia   sp, {r0 - r12}                  @ Calling r0-r12
+       add     r8, sp, #S_PC                   @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
+       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               */
+       str     r6, [r8, #4]                    @ Save CPSR
+       str     r0, [r8, #8]                    @ Save OLD_R0
        mov     r0, sp
        .endm
 
@@ -452,16 +405,28 @@ reset:
        .endm
 
        .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
+       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack (enter in banked mode)
 
-       str     lr, [r13]                       @ save caller lr / spsr
-       mrs     lr, spsr
-       str     lr, [r13, #4]
+       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
-       mov     lr, pc
-       movs    pc, lr
+       @ 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_bad_stack_swi
+       sub     r13, r13, #4                    @ space on current stack for scratch reg.
+       str     r0, [r13]                       @ save R0's value.
+       ldr     r0, IRQ_STACK_START_IN          @ get data regions start
+       str     lr, [r0]                        @ save caller lr in position 0 of saved stack
+       mrs     r0, spsr                        @ get the spsr
+       str     lr, [r0, #4]                    @ save spsr in position 1 of saved stack
+       ldr     r0, [r13]                       @ restore r0
+       add     r13, r13, #4                    @ pop stack entry
        .endm
 
        .macro get_irq_stack                    @ setup IRQ stack
@@ -471,21 +436,17 @@ reset:
        .macro get_fiq_stack                    @ setup FIQ stack
        ldr     sp, FIQ_STACK_START
        .endm
-#endif /* CONFIG_SPL_BUILD
-
-
-/****************************************************************************/
-/*                                                                         */
-/* exception handlers                                                      */
-/*                                                                         */
-/****************************************************************************/
+#endif /* CONFIG_SPL_BUILD */
 
+/*
+ * exception handlers
+ */
 #ifdef CONFIG_SPL_BUILD
        .align  5
 do_hang:
-       ldr     sp, _TEXT_BASE                  /* use 32 words abort stack */
+       ldr     sp, _TEXT_BASE                  /* use 32 words about stack */
        bl      hang                            /* hang and never return */
-#else
+#else  /* !CONFIG_SPL_BUILD */
        .align  5
 undefined_instruction:
        get_bad_stack
@@ -494,7 +455,7 @@ undefined_instruction:
 
        .align  5
 software_interrupt:
-       get_bad_stack
+       get_bad_stack_swi
        bad_save_user_regs
        bl      do_software_interrupt
 
@@ -528,11 +489,12 @@ irq:
        .align  5
 fiq:
        get_fiq_stack
-       irq_save_user_regs              /* someone ought to write a more    */
-       bl      do_fiq                  /* effiction fiq_save_user_regs     */
+       /* someone ought to write a more effiction fiq_save_user_regs */
+       irq_save_user_regs
+       bl      do_fiq
        irq_restore_user_regs
 
-#else /* !CONFIG_USE_IRQ */
+#else
 
        .align  5
 irq:
@@ -545,63 +507,99 @@ fiq:
        get_bad_stack
        bad_save_user_regs
        bl      do_fiq
+
+#endif
+       .align 5
 #endif /* CONFIG_SPL_BUILD */
-#endif /* CONFIG_USE_IRQ */
 
-/****************************************************************************/
-/*                                                                         */
-/* Reset function: the PXA250 doesn't have a reset function, so we have to  */
-/* perform a watchdog timeout for a soft reset.                                    */
-/*                                                                         */
-/****************************************************************************/
-/* Operating System Timer */
-.align 5
-.globl reset_cpu
 
-       /* FIXME: this code is PXA250 specific. How is this handled on      */
-       /*        other XScale processors?                                  */
+/*
+ * Enable MMU to use DCache as DRAM.
+ *
+ * This is useful on PXA25x and PXA26x in early bootstages, where there is no
+ * other possible memory available to hold stack.
+ */
+#ifdef CONFIG_CPU_PXA25X
+.macro CPWAIT reg
+       mrc     p15, 0, \reg, c2, c0, 0
+       mov     \reg, \reg
+       sub     pc, pc, #4
+.endm
+lock_cache_for_stack:
+       /* Domain access -- enable for all CPs */
+       ldr     r0, =0x0000ffff
+       mcr     p15, 0, r0, c3, c0, 0
 
-reset_cpu:
+       /* Point TTBR to MMU table */
+       ldr     r0, =mmutable
+       mcr     p15, 0, r0, c2, c0, 0
 
-       /* We set OWE:WME (watchdog enable) and wait until timeout happens  */
+       /* Kick in MMU, ICache, DCache, BTB */
+       mrc     p15, 0, r0, c1, c0, 0
+       bic     r0, #0x1b00
+       bic     r0, #0x0087
+       orr     r0, #0x1800
+       orr     r0, #0x0005
+       mcr     p15, 0, r0, c1, c0, 0
+       CPWAIT  r0
 
-       ldr     r0, =OWER
-       ldr     r1, [r0]
-       orr     r1, r1, #0x0001                 /* bit0: WME                */
-       str     r1, [r0]
+       /* Unlock Icache, Dcache */
+       mcr     p15, 0, r0, c9, c1, 1
+       mcr     p15, 0, r0, c9, c2, 1
 
-       /* OS timer does only wrap every 1165 seconds, so we have to set    */
-       /* the match register as well.                                      */
+       /* Flush Icache, Dcache, BTB */
+       mcr     p15, 0, r0, c7, c7, 0
 
-       ldr     r0, =OSCR
-       ldr     r1, [r0]                        /* read OS timer            */
-       add     r1, r1, #0x800                  /* let OSMR3 match after    */
-       add     r1, r1, #0x800                  /* 4096*(1/3.6864MHz)=1ms   */
-       ldr     r0, =OSMR3
-       str     r1, [r0]
+       /* Unlock I-TLB, D-TLB */
+       mcr     p15, 0, r0, c10, c4, 1
+       mcr     p15, 0, r0, c10, c8, 1
 
-reset_endless:
+       /* Flush TLB */
+       mcr     p15, 0, r0, c8, c7, 0
 
-       b       reset_endless
+       /* Allocate 4096 bytes of Dcache as RAM */
 
-#ifndef CONFIG_SPL_BUILD
-.section .mmudata, "a"
+       /* Drain pending loads and stores */
+       mcr     p15, 0, r0, c7, c10, 4
+
+       mov     r4, #0x00
+       mov     r5, #0x00
+       mov     r2, #0x01
+       mcr     p15, 0, r0, c9, c2, 0
+       CPWAIT  r0
+
+       /* 128 lines reserved (128 x 32bytes = 4096 bytes total) */
+       mov     r0, #128
+       ldr     r1, =0xfffff000
+
+alloc:
+       mcr     p15, 0, r1, c7, c2, 5
+       /* Drain pending loads and stores */
+       mcr     p15, 0, r0, c7, c10, 4
+       strd    r4, [r1], #8
+       strd    r4, [r1], #8
+       strd    r4, [r1], #8
+       strd    r4, [r1], #8
+       subs    r0, #0x01
+       bne     alloc
+       /* Drain pending loads and stores */
+       mcr     p15, 0, r0, c7, c10, 4
+       mov     r2, #0x00
+       mcr     p15, 0, r2, c9, c2, 0
+       CPWAIT  r0
+
+       mov     pc, lr
+
+.section .mmutable, "a"
+mmutable:
        .align  14
-       .globl  mmu_table
-mmu_table:
-       /* 0x00000000 - 0xa0000000 : 1:1, uncached mapping */
+       /* 0x00000000 - 0xffe00000 : 1:1, uncached mapping */
        .set    __base, 0
-       .rept   0xa00
+       .rept   0xfff
        .word   (__base << 20) | 0xc12
        .set    __base, __base + 1
        .endr
 
-       /* 0xa0000000 - 0xa0100000 : 1:1, cached mapping */
-       .word   (0xa00 << 20) | 0x1c1e
-
-       .set    __base, 0xa01
-       .rept   0x1000 - 0xa01
-       .word   (__base << 20) | 0xc12
-       .set    __base, __base + 1
-       .endr
-#endif /* CONFIG_SPL_BUILD */
+       /* 0xfff00000 : 1:1, cached mapping */
+       .word   (0xfff << 20) | 0x1c1e
+#endif /* CONFIG_CPU_PXA25X */
index 2866745472235923578acf57e3373c45b0b5255f..b7b0da98a4d392d7d454b4436dc5053f6564d154 100644 (file)
@@ -1,11 +1,7 @@
 /*
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Marius Groeger <mgroeger@sysgo.de>
+ * Marvell PXA2xx/3xx timer driver
  *
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Alex Zuepke <azu@sysgo.de>
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 #include <common.h>
 #include <div64.h>
 
-#ifdef CONFIG_USE_IRQ
-#error: interrupts not implemented yet
-#endif
+DECLARE_GLOBAL_DATA_PTR;
+
+#define        TIMER_LOAD_VAL  0xffffffff
+
+#define        timestamp       (gd->tbl)
+#define        lastinc         (gd->lastinc)
 
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
-#define TIMER_FREQ_HZ 3250000
-#elif defined(CONFIG_PXA250)
-#define TIMER_FREQ_HZ 3686400
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#define        TIMER_FREQ_HZ   3250000
+#elif defined(CONFIG_CPU_PXA25X)
+#define        TIMER_FREQ_HZ   3686400
 #else
 #error "Timer frequency unknown - please config PXA CPU type"
 #endif
 
-static inline unsigned long long tick_to_time(unsigned long long tick)
+static unsigned long long tick_to_time(unsigned long long tick)
 {
-       tick *= CONFIG_SYS_HZ;
-       do_div(tick, TIMER_FREQ_HZ);
-       return tick;
+       return tick * CONFIG_SYS_HZ / TIMER_FREQ_HZ;
 }
 
-static inline unsigned long long us_to_tick(unsigned long long us)
+static unsigned long long us_to_tick(unsigned long long us)
 {
-       us = us * TIMER_FREQ_HZ + 999999;
-       do_div(us, 1000000);
-       return us;
+       return (us * TIMER_FREQ_HZ) / 1000000;
 }
 
-int timer_init (void)
+int timer_init(void)
 {
        writel(0, OSCR);
-
        return 0;
 }
 
-ulong get_timer (ulong base)
-{
-       return get_timer_masked () - base;
-}
-
-void __udelay (unsigned long usec)
+unsigned long long get_ticks(void)
 {
-       udelay_masked (usec);
+       /* Current tick value */
+       uint32_t now = readl(OSCR);
+
+       if (now >= lastinc) {
+               /*
+                * Normal mode (non roll)
+                * Move stamp forward with absolute diff ticks
+                */
+               timestamp += (now - lastinc);
+       } else {
+               /* We have rollover of incrementer */
+               timestamp += (TIMER_LOAD_VAL - lastinc) + now;
+       }
+
+       lastinc = now;
+       return timestamp;
 }
 
-ulong get_timer_masked (void)
+ulong get_timer(ulong base)
 {
-       return tick_to_time(get_ticks());
+       return tick_to_time(get_ticks()) - base;
 }
 
-void udelay_masked (unsigned long usec)
+void __udelay(unsigned long usec)
 {
        unsigned long long tmp;
        ulong tmo;
@@ -89,25 +93,4 @@ void udelay_masked (unsigned long usec)
 
        while (get_ticks() < tmp)       /* loop till event */
                 /*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 readl(OSCR);
-}
-
-/*
- * 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 = TIMER_FREQ_HZ;
-       return tbclk;
 }
index e163369bc3464f97fa9439cd9c305b6364af7d0e..e86e7818e63101170f48f626c88bcb4357ceb30c 100644 (file)
@@ -63,6 +63,12 @@ SECTIONS
                *(.dynsym)
        }
 
+       . = ALIGN(4096);
+
+       .mmutable : {
+               *(.mmutable)
+       }
+
        _end = .;
 
        .bss __rel_dyn_start (OVERLAY) : {
index 0311d5e9978480630223ae7c2df68a4226e91521..83022e2e563aa64b4fde2e0074c07f048cb06f46 100644 (file)
@@ -24,7 +24,7 @@
 #include <common.h>
 
 #if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT)
-# if defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_PXA27X)
+# if defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_CPU_PXA27X)
 
 #include <asm/arch/pxa-regs.h>
 #include <asm/io.h>
@@ -37,7 +37,7 @@ int usb_cpu_init(void)
        writel(readl(CKENA) | CKENA_2_USBHOST | CKENA_20_UDC, CKENA);
        udelay(100);
 #endif
-#if defined(CONFIG_PXA27X)
+#if defined(CONFIG_CPU_PXA27X)
        /* Enable USB host clock. */
        writel(readl(CKEN) | CKEN10_USBHOST, CKEN);
 #endif
@@ -58,7 +58,7 @@ int usb_cpu_init(void)
 #if defined(CONFIG_CPU_MONAHANS)
        writel(readl(UHCHR) & ~UHCHR_SSEP0, UHCHR);
 #endif
-#if defined(CONFIG_PXA27X)
+#if defined(CONFIG_CPU_PXA27X)
        writel(readl(UHCHR) & ~UHCHR_SSEP2, UHCHR);
 #endif
        writel(readl(UHCHR) & ~(UHCHR_SSEP1 | UHCHR_SSE), UHCHR);
@@ -78,7 +78,7 @@ int usb_cpu_stop(void)
 #if defined(CONFIG_CPU_MONAHANS)
        writel(readl(UHCHR) | UHCHR_SSEP0, UHCHR);
 #endif
-#if defined(CONFIG_PXA27X)
+#if defined(CONFIG_CPU_PXA27X)
        writel(readl(UHCHR) | UHCHR_SSEP2, UHCHR);
 #endif
        writel(readl(UHCHR) | UHCHR_SSEP1 | UHCHR_SSE, UHCHR);
@@ -88,7 +88,7 @@ int usb_cpu_stop(void)
        writel(readl(CKENA) & ~(CKENA_2_USBHOST | CKENA_20_UDC), CKENA);
        udelay(100);
 #endif
-#if defined(CONFIG_PXA27X)
+#if defined(CONFIG_CPU_PXA27X)
        /* Disable USB host clock. */
        writel(readl(CKEN) & ~CKEN10_USBHOST, CKEN);
 #endif
@@ -101,5 +101,5 @@ int usb_cpu_init_fail(void)
        return usb_cpu_stop();
 }
 
-# endif /* defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_PXA27X) */
+# endif /* defined(CONFIG_CPU_MONAHANS) || defined(CONFIG_CPU_PXA27X) */
 #endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */
index 330edd83c5e66dc1d51fc27abc8aa594e7bfdecf..8282f461999d89f744ac6ab13eedf741e6865556 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 5af6fdc25118adef972a6fd6bf320b700d120ab0..7bf363ab166a4a98e81ce59bc65860feb5b0067c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * [origin: Linux kernel include/asm-arm/arch-at91/at91cap9.h]
  *
- *  Copyright (C) 2007 Stelian Pop <stelian.pop@leadtechdesign.com>
+ *  Copyright (C) 2007 Stelian Pop <stelian@popies.net>
  *  Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
  *  Copyright (C) 2007 Atmel Corporation.
  *
index 22b7e9b8f4bd354d205dafd70ab627a19764c526..a9b5ae00a06b695e14ea350c048c707c376ee97a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * [origin: Linux kernel include/asm-arm/arch-at91/at91cap9_matrix.h]
  *
- *  Copyright (C) 2007 Stelian Pop <stelian.pop@leadtechdesign.com>
+ *  Copyright (C) 2007 Stelian Pop <stelian@popies.net>
  *  Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
  *  Copyright (C) 2006 Atmel Corporation.
  *
index f6453275c41a7c7823716c68b83f0564cb4e9523..1e8522b83980a4eb32e94133e19777d3c52f796d 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
  *
index 36af571a5b5d317c8ca681c8150570c89237efa5..85c2889e5cc844267badf2db1ff32802442e33a4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 8f3705320916ef8d8921a57e25629b5321a081cd..38f814c0185bc9f1a6c1d408a874bd17bfc732cb 100644 (file)
@@ -47,4 +47,6 @@ struct dv_aintc_regs {
 
 #define dv_aintc_regs ((struct dv_aintc_regs *)DAVINCI_ARM_INTC_BASE)
 
+#define DV_AINTC_INTCTL_IDMODE (1 << 2)
+
 #endif /* _DV_AINTC_DEFS_H_ */
similarity index 63%
rename from arch/arm/include/asm/arch-davinci/am1808_lowlevel.h
rename to arch/arm/include/asm/arch-davinci/da850_lowlevel.h
index 0bc7f76f1ceef86df30e8656df97032577afaf4a..e489c474754cd581c65921b4f1aaa26f7669fc8c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * SoC-specific lowlevel code for AM1808 and similar chips
+ * SoC-specific lowlevel code for DA850
  *
  * Copyright (C) 2011
  * Heiko Schocher, DENX Software Engineering, hs@denx.de.
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-#ifndef __AM1808_LOWLEVEL_H
-#define __AM1808_LOWLEVEL_H
+#ifndef __DA850_LOWLEVEL_H
+#define __DA850_LOWLEVEL_H
 
 /* NOR Boot Configuration Word Field Descriptions */
-#define AM1808_NORBOOT_COPY_XK(X)      ((X - 1) << 8)
-#define AM1808_NORBOOT_METHOD_DIRECT   (1 << 4)
-#define AM1808_NORBOOT_16BIT           (1 << 0)
+#define DA850_NORBOOT_COPY_XK(X)       ((X - 1) << 8)
+#define DA850_NORBOOT_METHOD_DIRECT    (1 << 4)
+#define DA850_NORBOOT_16BIT            (1 << 0)
 
 #define dv_maskbits(addr, val) \
        writel((readl(addr) & val), addr)
 
-void am1808_waitloop(unsigned long loopcnt);
-int am1808_pll_init(struct davinci_pllc_regs *reg, unsigned long pllmult);
-void am1808_lpc_transition(unsigned char pscnum, unsigned char module,
+void da850_waitloop(unsigned long loopcnt);
+int da850_pll_init(struct davinci_pllc_regs *reg, unsigned long pllmult);
+void da850_lpc_transition(unsigned char pscnum, unsigned char module,
                unsigned char domain, unsigned char state);
-int am1808_ddr_setup(unsigned int freq);
-void am1808_psc_init(void);
-void am1808_pinmux_ctl(unsigned long offset, unsigned long mask,
+int da850_ddr_setup(void);
+void da850_psc_init(void);
+void da850_pinmux_ctl(unsigned long offset, unsigned long mask,
        unsigned long value);
 
-#endif /* #ifndef __AM1808_LOWLEVEL_H */
+#endif /* #ifndef __DA850_LOWLEVEL_H */
index 211b76920f9c606de69150662cddbf847b31ac02..cbac8031b450d5ddcef1b41dede9fea85ed5420a 100644 (file)
@@ -45,9 +45,6 @@ struct pinmux_resource {
                                .n_pins = ARRAY_SIZE(item) \
                          }
 
-#define HAWKBOARD_KICK0_UNLOCK          0x83e70b13
-#define HAWKBOARD_KICK1_UNLOCK          0x95a4f1e0
-
 struct lpsc_resource {
        const int       lpsc_no;
 };
index 1b9430ce6b3038fc627d91a819eaf86b47be57b8..4f943b81b36d4a7b1f46c3bfaf60a67d36600151 100644 (file)
@@ -63,6 +63,7 @@ struct dv_ddr2_regs_ctrl {
 
 #define DV_DDR_SDTMR2_RASMAX_SHIFT     27
 #define DV_DDR_SDTMR2_XP_SHIFT 25
+#define DV_DDR_SDTMR2_ODT_SHIFT        23
 #define DV_DDR_SDTMR2_XSNR_SHIFT       16
 #define DV_DDR_SDTMR2_XSRD_SHIFT       8
 #define DV_DDR_SDTMR2_RTP_SHIFT        5
@@ -84,6 +85,9 @@ struct dv_ddr2_regs_ctrl {
 #define DV_DDR_SDCR_IBANK_SHIFT        4
 #define DV_DDR_SDCR_PAGESIZE_SHIFT     0
 
+#define DV_DDR_SDRCR_LPMODEN   (1 << 31)
+#define DV_DDR_SDRCR_MCLKSTOPEN        (1 << 30)
+
 #define DV_DDR_SRCR_LPMODEN_SHIFT      31
 #define DV_DDR_SRCR_MCLKSTOPEN_SHIFT   30
 
index ea52888ff45fe2434f1d0a9f1ca2e04e2dd1936d..8a17de9054a5c20e3be6930e359b7477035c6111 100644 (file)
 #define EMAC_MDIO_CLOCK_FREQ           2000000         /* 2.0 MHz */
 #endif
 
-/* Ethernet Min/Max packet size */
-#define EMAC_MIN_ETHERNET_PKT_SIZE     60
-#define EMAC_MAX_ETHERNET_PKT_SIZE     1518
-#define EMAC_PKT_ALIGN                 18      /* 1518 + 18 = 1536 (packet aligned on 32 byte boundry) */
-
-/* Number of RX packet buffers
- * NOTE: Only 1 buffer supported as of now
- */
-#define EMAC_MAX_RX_BUFFERS            10
-
-
-/***********************************************
- ******** Internally used macros ***************
- ***********************************************/
-
-#define EMAC_CH_TX                     1
-#define EMAC_CH_RX                     0
-
-/* Each descriptor occupies 4 words, lets start RX desc's at 0 and
- * reserve space for 64 descriptors max
- */
-#define EMAC_RX_DESC_BASE              0x0
-#define EMAC_TX_DESC_BASE              0x1000
-
-/* EMAC Teardown value */
-#define EMAC_TEARDOWN_VALUE            0xfffffffc
-
-/* MII Status Register */
-#define MII_STATUS_REG                 1
-
-/* Number of statistics registers */
-#define EMAC_NUM_STATS                 36
-
-
-/* EMAC Descriptor */
-typedef volatile struct _emac_desc
-{
-       u_int32_t       next;           /* Pointer to next descriptor in chain */
-       u_int8_t        *buffer;        /* Pointer to data buffer */
-       u_int32_t       buff_off_len;   /* Buffer Offset(MSW) and Length(LSW) */
-       u_int32_t       pkt_flag_len;   /* Packet Flags(MSW) and Length(LSW) */
-} emac_desc;
-
-/* CPPI bit positions */
-#define EMAC_CPPI_SOP_BIT              (0x80000000)
-#define EMAC_CPPI_EOP_BIT              (0x40000000)
-#define EMAC_CPPI_OWNERSHIP_BIT                (0x20000000)
-#define EMAC_CPPI_EOQ_BIT              (0x10000000)
-#define EMAC_CPPI_TEARDOWN_COMPLETE_BIT        (0x08000000)
-#define EMAC_CPPI_PASS_CRC_BIT         (0x04000000)
-
-#define EMAC_CPPI_RX_ERROR_FRAME       (0x03fc0000)
-
-#define EMAC_MACCONTROL_MIIEN_ENABLE           (0x20)
-#define EMAC_MACCONTROL_FULLDUPLEX_ENABLE      (0x1)
-#define EMAC_MACCONTROL_GIGABIT_ENABLE         (1 << 7)
-#define EMAC_MACCONTROL_GIGFORCE               (1 << 17)
-#define EMAC_MACCONTROL_RMIISPEED_100          (1 << 15)
-
-#define EMAC_MAC_ADDR_MATCH            (1 << 19)
-#define EMAC_MAC_ADDR_IS_VALID         (1 << 20)
-
-#define EMAC_RXMBPENABLE_RXCAFEN_ENABLE        (0x200000)
-#define EMAC_RXMBPENABLE_RXBROADEN     (0x2000)
-
-
-#define MDIO_CONTROL_IDLE              (0x80000000)
-#define MDIO_CONTROL_ENABLE            (0x40000000)
-#define MDIO_CONTROL_FAULT_ENABLE      (0x40000)
-#define MDIO_CONTROL_FAULT             (0x80000)
-#define MDIO_USERACCESS0_GO            (0x80000000)
-#define MDIO_USERACCESS0_WRITE_READ    (0x0)
-#define MDIO_USERACCESS0_WRITE_WRITE   (0x40000000)
-#define MDIO_USERACCESS0_ACK           (0x20000000)
-
-/* Ethernet MAC Registers Structure */
-typedef struct  {
-       dv_reg          TXIDVER;
-       dv_reg          TXCONTROL;
-       dv_reg          TXTEARDOWN;
-       u_int8_t        RSVD0[4];
-       dv_reg          RXIDVER;
-       dv_reg          RXCONTROL;
-       dv_reg          RXTEARDOWN;
-       u_int8_t        RSVD1[100];
-       dv_reg          TXINTSTATRAW;
-       dv_reg          TXINTSTATMASKED;
-       dv_reg          TXINTMASKSET;
-       dv_reg          TXINTMASKCLEAR;
-       dv_reg          MACINVECTOR;
-       u_int8_t        RSVD2[12];
-       dv_reg          RXINTSTATRAW;
-       dv_reg          RXINTSTATMASKED;
-       dv_reg          RXINTMASKSET;
-       dv_reg          RXINTMASKCLEAR;
-       dv_reg          MACINTSTATRAW;
-       dv_reg          MACINTSTATMASKED;
-       dv_reg          MACINTMASKSET;
-       dv_reg          MACINTMASKCLEAR;
-       u_int8_t        RSVD3[64];
-       dv_reg          RXMBPENABLE;
-       dv_reg          RXUNICASTSET;
-       dv_reg          RXUNICASTCLEAR;
-       dv_reg          RXMAXLEN;
-       dv_reg          RXBUFFEROFFSET;
-       dv_reg          RXFILTERLOWTHRESH;
-       u_int8_t        RSVD4[8];
-       dv_reg          RX0FLOWTHRESH;
-       dv_reg          RX1FLOWTHRESH;
-       dv_reg          RX2FLOWTHRESH;
-       dv_reg          RX3FLOWTHRESH;
-       dv_reg          RX4FLOWTHRESH;
-       dv_reg          RX5FLOWTHRESH;
-       dv_reg          RX6FLOWTHRESH;
-       dv_reg          RX7FLOWTHRESH;
-       dv_reg          RX0FREEBUFFER;
-       dv_reg          RX1FREEBUFFER;
-       dv_reg          RX2FREEBUFFER;
-       dv_reg          RX3FREEBUFFER;
-       dv_reg          RX4FREEBUFFER;
-       dv_reg          RX5FREEBUFFER;
-       dv_reg          RX6FREEBUFFER;
-       dv_reg          RX7FREEBUFFER;
-       dv_reg          MACCONTROL;
-       dv_reg          MACSTATUS;
-       dv_reg          EMCONTROL;
-       dv_reg          FIFOCONTROL;
-       dv_reg          MACCONFIG;
-       dv_reg          SOFTRESET;
-       u_int8_t        RSVD5[88];
-       dv_reg          MACSRCADDRLO;
-       dv_reg          MACSRCADDRHI;
-       dv_reg          MACHASH1;
-       dv_reg          MACHASH2;
-       dv_reg          BOFFTEST;
-       dv_reg          TPACETEST;
-       dv_reg          RXPAUSE;
-       dv_reg          TXPAUSE;
-       u_int8_t        RSVD6[16];
-       dv_reg          RXGOODFRAMES;
-       dv_reg          RXBCASTFRAMES;
-       dv_reg          RXMCASTFRAMES;
-       dv_reg          RXPAUSEFRAMES;
-       dv_reg          RXCRCERRORS;
-       dv_reg          RXALIGNCODEERRORS;
-       dv_reg          RXOVERSIZED;
-       dv_reg          RXJABBER;
-       dv_reg          RXUNDERSIZED;
-       dv_reg          RXFRAGMENTS;
-       dv_reg          RXFILTERED;
-       dv_reg          RXQOSFILTERED;
-       dv_reg          RXOCTETS;
-       dv_reg          TXGOODFRAMES;
-       dv_reg          TXBCASTFRAMES;
-       dv_reg          TXMCASTFRAMES;
-       dv_reg          TXPAUSEFRAMES;
-       dv_reg          TXDEFERRED;
-       dv_reg          TXCOLLISION;
-       dv_reg          TXSINGLECOLL;
-       dv_reg          TXMULTICOLL;
-       dv_reg          TXEXCESSIVECOLL;
-       dv_reg          TXLATECOLL;
-       dv_reg          TXUNDERRUN;
-       dv_reg          TXCARRIERSENSE;
-       dv_reg          TXOCTETS;
-       dv_reg          FRAME64;
-       dv_reg          FRAME65T127;
-       dv_reg          FRAME128T255;
-       dv_reg          FRAME256T511;
-       dv_reg          FRAME512T1023;
-       dv_reg          FRAME1024TUP;
-       dv_reg          NETOCTETS;
-       dv_reg          RXSOFOVERRUNS;
-       dv_reg          RXMOFOVERRUNS;
-       dv_reg          RXDMAOVERRUNS;
-       u_int8_t        RSVD7[624];
-       dv_reg          MACADDRLO;
-       dv_reg          MACADDRHI;
-       dv_reg          MACINDEX;
-       u_int8_t        RSVD8[244];
-       dv_reg          TX0HDP;
-       dv_reg          TX1HDP;
-       dv_reg          TX2HDP;
-       dv_reg          TX3HDP;
-       dv_reg          TX4HDP;
-       dv_reg          TX5HDP;
-       dv_reg          TX6HDP;
-       dv_reg          TX7HDP;
-       dv_reg          RX0HDP;
-       dv_reg          RX1HDP;
-       dv_reg          RX2HDP;
-       dv_reg          RX3HDP;
-       dv_reg          RX4HDP;
-       dv_reg          RX5HDP;
-       dv_reg          RX6HDP;
-       dv_reg          RX7HDP;
-       dv_reg          TX0CP;
-       dv_reg          TX1CP;
-       dv_reg          TX2CP;
-       dv_reg          TX3CP;
-       dv_reg          TX4CP;
-       dv_reg          TX5CP;
-       dv_reg          TX6CP;
-       dv_reg          TX7CP;
-       dv_reg          RX0CP;
-       dv_reg          RX1CP;
-       dv_reg          RX2CP;
-       dv_reg          RX3CP;
-       dv_reg          RX4CP;
-       dv_reg          RX5CP;
-       dv_reg          RX6CP;
-       dv_reg          RX7CP;
-} emac_regs;
-
-/* EMAC Wrapper Registers Structure */
-typedef struct  {
-#ifdef DAVINCI_EMAC_VERSION2
-       dv_reg          idver;
-       dv_reg          softrst;
-       dv_reg          emctrl;
-       dv_reg          c0rxthreshen;
-       dv_reg          c0rxen;
-       dv_reg          c0txen;
-       dv_reg          c0miscen;
-       dv_reg          c1rxthreshen;
-       dv_reg          c1rxen;
-       dv_reg          c1txen;
-       dv_reg          c1miscen;
-       dv_reg          c2rxthreshen;
-       dv_reg          c2rxen;
-       dv_reg          c2txen;
-       dv_reg          c2miscen;
-       dv_reg          c0rxthreshstat;
-       dv_reg          c0rxstat;
-       dv_reg          c0txstat;
-       dv_reg          c0miscstat;
-       dv_reg          c1rxthreshstat;
-       dv_reg          c1rxstat;
-       dv_reg          c1txstat;
-       dv_reg          c1miscstat;
-       dv_reg          c2rxthreshstat;
-       dv_reg          c2rxstat;
-       dv_reg          c2txstat;
-       dv_reg          c2miscstat;
-       dv_reg          c0rximax;
-       dv_reg          c0tximax;
-       dv_reg          c1rximax;
-       dv_reg          c1tximax;
-       dv_reg          c2rximax;
-       dv_reg          c2tximax;
-#else
-       u_int8_t        RSVD0[4100];
-       dv_reg          EWCTL;
-       dv_reg          EWINTTCNT;
-#endif
-} ewrap_regs;
-
-/* EMAC MDIO Registers Structure */
-typedef struct  {
-       dv_reg          VERSION;
-       dv_reg          CONTROL;
-       dv_reg          ALIVE;
-       dv_reg          LINK;
-       dv_reg          LINKINTRAW;
-       dv_reg          LINKINTMASKED;
-       u_int8_t        RSVD0[8];
-       dv_reg          USERINTRAW;
-       dv_reg          USERINTMASKED;
-       dv_reg          USERINTMASKSET;
-       dv_reg          USERINTMASKCLEAR;
-       u_int8_t        RSVD1[80];
-       dv_reg          USERACCESS0;
-       dv_reg          USERPHYSEL0;
-       dv_reg          USERACCESS1;
-       dv_reg          USERPHYSEL1;
-} mdio_regs;
-
-int davinci_eth_phy_read(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t *data);
-int davinci_eth_phy_write(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t data);
-
-typedef struct
-{
-       char    name[64];
-       int     (*init)(int phy_addr);
-       int     (*is_phy_connected)(int phy_addr);
-       int     (*get_link_speed)(int phy_addr);
-       int     (*auto_negotiate)(int phy_addr);
-} phy_t;
-
 #define PHY_KSZ8873    (0x00221450)
 int ksz8873_is_phy_connected(int phy_addr);
 int ksz8873_get_link_speed(int phy_addr);
index b48ec17e9755e7583d1b9384cda57efcdedf552d..b9e78a5dbdc5f15b4cc7709be8cdf068a704e02e 100644 (file)
@@ -70,6 +70,7 @@ struct davinci_emif_regs {
 #define DAVINCI_NANDFCR_1BIT_ECC_START(n)              (1 << (8 + (n-2)))
 #define DAVINCI_NANDFCR_4BIT_ECC_START                 (1 << 12)
 #define DAVINCI_NANDFCR_4BIT_CALC_START                        (1 << 13)
+#define DAVINCI_NANDFCR_CS2NAND                                (1 << 0)
 
 /* Chip Select setup */
 #define DAVINCI_ABCR_STROBE_SELECT                     (1 << 31)
index bea14993e6aa84f6991a47a21de3efd2944e248b..dd89e84413bb4e890c556d30dd37148610038ffb 100644 (file)
@@ -230,6 +230,9 @@ typedef volatile unsigned int *     dv_reg_p;
 #define DAVINCI_LPSC_CFG5              38
 #define DAVINCI_LPSC_GEM               39
 #define DAVINCI_LPSC_IMCOP             40
+#define DAVINCI_LPSC_VPSSMASTER                47
+#define DAVINCI_LPSC_MJCP              50
+#define DAVINCI_LPSC_HDVICP            51
 
 #define DAVINCI_DM646X_LPSC_EMAC       14
 #define DAVINCI_DM646X_LPSC_UART0      26
@@ -385,6 +388,20 @@ struct davinci_psc_regs {
 #define PINMUX3                                0x01c4000c
 #define PINMUX4                                0x01c40010
 
+struct davinci_uart_ctrl_regs {
+       dv_reg  revid1;
+       dv_reg  res;
+       dv_reg  pwremu_mgmt;
+       dv_reg  mdr;
+};
+
+#define DAVINCI_UART_CTRL_BASE 0x28
+
+/* UART PWREMU_MGMT definitions */
+#define DAVINCI_UART_PWREMU_MGMT_FREE  (1 << 0)
+#define DAVINCI_UART_PWREMU_MGMT_URRST (1 << 13)
+#define DAVINCI_UART_PWREMU_MGMT_UTRST (1 << 14)
+
 #else /* CONFIG_SOC_DA8XX */
 
 struct davinci_pllc_regs {
@@ -431,6 +448,7 @@ struct davinci_pllc_regs {
 enum davinci_clk_ids {
        DAVINCI_SPI0_CLKID = 2,
        DAVINCI_UART2_CLKID = 2,
+       DAVINCI_MMC_CLKID = 2,
        DAVINCI_MDIO_CLKID = 4,
        DAVINCI_ARM_CLKID = 6,
        DAVINCI_PLLM_CLKID = 0xff,
@@ -462,12 +480,15 @@ struct davinci_syscfg_regs {
 #define davinci_syscfg_regs \
        ((struct davinci_syscfg_regs *)DAVINCI_BOOTCFG_BASE)
 
+#define pinmux(x)      (&davinci_syscfg_regs->pinmux[x])
+
 /* Emulation suspend bits */
 #define DAVINCI_SYSCFG_SUSPSRC_EMAC            (1 << 5)
 #define DAVINCI_SYSCFG_SUSPSRC_I2C             (1 << 16)
 #define DAVINCI_SYSCFG_SUSPSRC_SPI0            (1 << 21)
 #define DAVINCI_SYSCFG_SUSPSRC_SPI1            (1 << 22)
 #define DAVINCI_SYSCFG_SUSPSRC_UART0           (1 << 18)
+#define DAVINCI_SYSCFG_SUSPSRC_UART2           (1 << 20)
 #define DAVINCI_SYSCFG_SUSPSRC_TIMER0          (1 << 27)
 
 struct davinci_syscfg1_regs {
@@ -491,6 +512,9 @@ struct davinci_syscfg1_regs {
 #define VTP_READY              (1 << 15)
 #define VTP_IOPWRDWN           (1 << 14)
 
+#define DV_SYSCFG_KICK0_UNLOCK 0x83e70b13
+#define DV_SYSCFG_KICK1_UNLOCK 0x95a4f1e0
+
 /* Interrupt controller */
 struct davinci_aintc_regs {
        dv_reg  revid;
@@ -564,4 +588,43 @@ static inline int get_async3_src(void)
 #include <asm/arch/syscfg_defs.h>
 #include <asm/arch/timer_defs.h>
 #endif
+
+struct davinci_rtc {
+       dv_reg  second;
+       dv_reg  minutes;
+       dv_reg  hours;
+       dv_reg  day;
+       dv_reg  month; /* 0x10 */
+       dv_reg  year;
+       dv_reg  dotw;
+       dv_reg  resv1;
+       dv_reg  alarmsecond; /* 0x20 */
+       dv_reg  alarmminute;
+       dv_reg  alarmhour;
+       dv_reg  alarmday;
+       dv_reg  alarmmonth; /* 0x30 */
+       dv_reg  alarmyear;
+       dv_reg  resv2[2];
+       dv_reg  ctrl; /* 0x40 */
+       dv_reg  status;
+       dv_reg  irq;
+       dv_reg  complsb;
+       dv_reg  compmsb; /* 0x50 */
+       dv_reg  osc;
+       dv_reg  resv3[2];
+       dv_reg  scratch0; /* 0x60 */
+       dv_reg  scratch1;
+       dv_reg  scratch2;
+       dv_reg  kick0r;
+       dv_reg  kick1r; /* 0x70 */
+};
+
+#define RTC_STATE_BUSY 0x01
+#define RTC_STATE_RUN  0x02
+
+#define RTC_KICK0R_WE  0x130be783
+#define RTC_KICK1R_WE  0xe0f1a495
+
+#define davinci_rtc_base ((struct davinci_rtc *)DAVINCI_RTC_BASE)
+
 #endif /* __ASM_ARCH_HARDWARE_H */
diff --git a/arch/arm/include/asm/arch-davinci/pinmux_defs.h b/arch/arm/include/asm/arch-davinci/pinmux_defs.h
new file mode 100644 (file)
index 0000000..07aceaa
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Pinmux configurations for the DAxxx SoCs
+ *
+ * Copyright (C) 2011 OMICRON electronics GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __ASM_ARCH_PINMUX_DEFS_H
+#define __ASM_ARCH_PINMUX_DEFS_H
+
+#include <asm/arch/davinci_misc.h>
+
+/* SPI pin muxer settings */
+extern const struct pinmux_config spi1_pins_base[3];
+extern const struct pinmux_config spi1_pins_scs0[1];
+
+/* UART pin muxer settings */
+extern const struct pinmux_config uart1_pins_txrx[2];
+extern const struct pinmux_config uart2_pins_txrx[2];
+extern const struct pinmux_config uart2_pins_rtscts[2];
+
+/* EMAC pin muxer settings*/
+extern const struct pinmux_config emac_pins_rmii[7];
+extern const struct pinmux_config emac_pins_mii[15];
+extern const struct pinmux_config emac_pins_mdio[2];
+
+/* I2C pin muxer settings */
+extern const struct pinmux_config i2c0_pins[2];
+extern const struct pinmux_config i2c1_pins[2];
+
+/* EMIFA pin muxer settings */
+extern const struct pinmux_config emifa_pins_cs2[1];
+extern const struct pinmux_config emifa_pins_cs3[1];
+extern const struct pinmux_config emifa_pins_cs4[1];
+extern const struct pinmux_config emifa_pins_nand[12];
+extern const struct pinmux_config emifa_pins_nor[43];
+
+#endif
index 5c309533a2797e24492e4916a6930f3e0d88070b..f1396e31942430e8cf9348620993d8d69b5a1bdb 100644 (file)
@@ -57,11 +57,24 @@ struct dv_pll_regs {
        unsigned int    plldiv9;        /* 0x174 */
 };
 
+#define PLL_MASTER_LOCK        (1 << 4)
+
+#define PLLCTL_CLOCK_MODE_SHIFT        8
 #define PLLCTL_PLLEN   (1 << 0)
 #define PLLCTL_PLLPWRDN        (1 << 1)
 #define PLLCTL_PLLRST  (1 << 3)
+#define PLLCTL_PLLDIS  (1 << 4)
 #define PLLCTL_PLLENSRC        (1 << 5)
 #define PLLCTL_RES_9   (1 << 8)
+#define PLLCTL_EXTCLKSRC       (1 << 9)
+
+#define PLL_POSTDEN    (1 << 15)
+
+#define PLL_SCSCFG3_DIV45PENA  (1 << 2)
+#define PLL_SCSCFG3_EMA_CLKSRC (1 << 1)
+
+#define PLL_RSTYPE_POR         (1 << 0)
+#define PLL_RSTYPE_XWRST       (1 << 1)
 
 #define PLLSECCTL_TINITZ       (1 << 16)
 #define PLLSECCTL_TENABLE      (1 << 17)
@@ -69,6 +82,7 @@ struct dv_pll_regs {
 #define PLLSECCTL_STOPMODE     (1 << 22)
 
 #define PLLCMD_GOSET           (1 << 0)
+#define PLLCMD_GOSTAT          (1 << 0)
 
 #define PLL0_LOCK              0x07000000
 #define PLL1_LOCK              0x07000000
index eece138b457660dd9dafaaffbad88e5450bc4ec5..7f9449b2d0659a3614b9cadf4a5784e7de554c1f 100644 (file)
@@ -180,8 +180,8 @@ struct aips_regs {
 #define IMX_I2C3_BASE          (0x43F84000)
 #define IMX_CAN1_BASE          (0x43F88000)
 #define IMX_CAN2_BASE          (0x43F8C000)
-#define IMX_UART1_BASE         (0x43F90000)
-#define IMX_UART2_BASE         (0x43F94000)
+#define UART1_BASE             (0x43F90000)
+#define UART2_BASE             (0x43F94000)
 #define IMX_I2C2_BASE          (0x43F98000)
 #define IMX_OWIRE_BASE         (0x43F9C000)
 #define IMX_CSPI1_BASE         (0x43FA4000)
@@ -197,15 +197,15 @@ struct aips_regs {
 /* SPBA */
 #define IMX_SPBA_BASE          (0x50000000)
 #define IMX_CSPI3_BASE         (0x50004000)
-#define IMX_UART4_BASE         (0x50008000)
-#define IMX_UART3_BASE         (0x5000C000)
+#define UART4_BASE             (0x50008000)
+#define UART3_BASE             (0x5000C000)
 #define IMX_CSPI2_BASE         (0x50010000)
 #define IMX_SSI2_BASE          (0x50014000)
 #define IMX_ESAI_BASE          (0x50018000)
 #define IMX_ATA_DMA_BASE       (0x50020000)
 #define IMX_SIM1_BASE          (0x50024000)
 #define IMX_SIM2_BASE          (0x50028000)
-#define IMX_UART5_BASE         (0x5002C000)
+#define UART5_BASE             (0x5002C000)
 #define IMX_TSC_BASE           (0x50030000)
 #define IMX_SSI1_BASE          (0x50034000)
 #define IMX_FEC_BASE           (0x50038000)
index 83ab216665c45138b9e170b4dfe0486f4b6a3596..ced5b2a38c20e9261ca480d4db6a38f127fbb075 100644 (file)
@@ -224,10 +224,10 @@ struct fuse_bank0_regs {
 #define IMX_TIM1_BASE          (0x03000 + IMX_IO_BASE)
 #define IMX_TIM2_BASE          (0x04000 + IMX_IO_BASE)
 #define IMX_TIM3_BASE          (0x05000 + IMX_IO_BASE)
-#define IMX_UART1_BASE         (0x0a000 + IMX_IO_BASE)
-#define IMX_UART2_BASE         (0x0b000 + IMX_IO_BASE)
-#define IMX_UART3_BASE         (0x0c000 + IMX_IO_BASE)
-#define IMX_UART4_BASE         (0x0d000 + IMX_IO_BASE)
+#define UART1_BASE             (0x0a000 + IMX_IO_BASE)
+#define UART2_BASE             (0x0b000 + IMX_IO_BASE)
+#define UART3_BASE             (0x0c000 + IMX_IO_BASE)
+#define UART4_BASE             (0x0d000 + IMX_IO_BASE)
 #define IMX_I2C1_BASE          (0x12000 + IMX_IO_BASE)
 #define IMX_GPIO_BASE          (0x15000 + IMX_IO_BASE)
 #define IMX_TIM4_BASE          (0x19000 + IMX_IO_BASE)
diff --git a/arch/arm/include/asm/arch-mx28/clock.h b/arch/arm/include/asm/arch-mx28/clock.h
new file mode 100644 (file)
index 0000000..1700fe3
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Freescale i.MX28 Clock
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __CLOCK_H__
+#define __CLOCK_H__
+
+enum mxc_clock {
+       MXC_ARM_CLK = 0,
+       MXC_AHB_CLK,
+       MXC_IPG_CLK,
+       MXC_EMI_CLK,
+       MXC_GPMI_CLK,
+       MXC_IO0_CLK,
+       MXC_IO1_CLK,
+       MXC_SSP0_CLK,
+       MXC_SSP1_CLK,
+       MXC_SSP2_CLK,
+       MXC_SSP3_CLK,
+};
+
+enum mxs_ioclock {
+       MXC_IOCLK0 = 0,
+       MXC_IOCLK1,
+};
+
+enum mxs_sspclock {
+       MXC_SSPCLK0 = 0,
+       MXC_SSPCLK1,
+       MXC_SSPCLK2,
+       MXC_SSPCLK3,
+};
+
+uint32_t mxc_get_clock(enum mxc_clock clk);
+
+void mx28_set_ioclk(enum mxs_ioclock io, uint32_t freq);
+void mx28_set_sspclk(enum mxs_sspclock ssp, uint32_t freq, int xtal);
+void mx28_set_ssp_busclock(unsigned int bus, uint32_t freq);
+
+/* Compatibility with the FEC Ethernet driver */
+#define        imx_get_fecclk()        mxc_get_clock(MXC_AHB_CLK)
+
+#endif /* __CLOCK_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/dma.h b/arch/arm/include/asm/arch-mx28/dma.h
new file mode 100644 (file)
index 0000000..52747e2
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * Freescale i.MX28 APBH DMA
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __DMA_H__
+#define __DMA_H__
+
+#include <linux/list.h>
+
+#ifndef        CONFIG_ARCH_DMA_PIO_WORDS
+#define        DMA_PIO_WORDS           15
+#else
+#define        DMA_PIO_WORDS           CONFIG_ARCH_DMA_PIO_WORDS
+#endif
+
+#define MXS_DMA_ALIGNMENT      32
+
+/*
+ * MXS DMA channels
+ */
+enum {
+       MXS_DMA_CHANNEL_AHB_APBH_SSP0 = 0,
+       MXS_DMA_CHANNEL_AHB_APBH_SSP1,
+       MXS_DMA_CHANNEL_AHB_APBH_SSP2,
+       MXS_DMA_CHANNEL_AHB_APBH_SSP3,
+       MXS_DMA_CHANNEL_AHB_APBH_GPMI0,
+       MXS_DMA_CHANNEL_AHB_APBH_GPMI1,
+       MXS_DMA_CHANNEL_AHB_APBH_GPMI2,
+       MXS_DMA_CHANNEL_AHB_APBH_GPMI3,
+       MXS_DMA_CHANNEL_AHB_APBH_GPMI4,
+       MXS_DMA_CHANNEL_AHB_APBH_GPMI5,
+       MXS_DMA_CHANNEL_AHB_APBH_GPMI6,
+       MXS_DMA_CHANNEL_AHB_APBH_GPMI7,
+       MXS_DMA_CHANNEL_AHB_APBH_SSP,
+       MXS_MAX_DMA_CHANNELS,
+};
+
+/*
+ * MXS DMA hardware command.
+ *
+ * This structure describes the in-memory layout of an entire DMA command,
+ * including space for the maximum number of PIO accesses. See the appropriate
+ * reference manual for a detailed description of what these fields mean to the
+ * DMA hardware.
+ */
+#define        MXS_DMA_DESC_COMMAND_MASK       0x3
+#define        MXS_DMA_DESC_COMMAND_OFFSET     0
+#define        MXS_DMA_DESC_COMMAND_NO_DMAXFER 0x0
+#define        MXS_DMA_DESC_COMMAND_DMA_WRITE  0x1
+#define        MXS_DMA_DESC_COMMAND_DMA_READ   0x2
+#define        MXS_DMA_DESC_COMMAND_DMA_SENSE  0x3
+#define        MXS_DMA_DESC_CHAIN              (1 << 2)
+#define        MXS_DMA_DESC_IRQ                (1 << 3)
+#define        MXS_DMA_DESC_NAND_LOCK          (1 << 4)
+#define        MXS_DMA_DESC_NAND_WAIT_4_READY  (1 << 5)
+#define        MXS_DMA_DESC_DEC_SEM            (1 << 6)
+#define        MXS_DMA_DESC_WAIT4END           (1 << 7)
+#define        MXS_DMA_DESC_HALT_ON_TERMINATE  (1 << 8)
+#define        MXS_DMA_DESC_TERMINATE_FLUSH    (1 << 9)
+#define        MXS_DMA_DESC_PIO_WORDS_MASK     (0xf << 12)
+#define        MXS_DMA_DESC_PIO_WORDS_OFFSET   12
+#define        MXS_DMA_DESC_BYTES_MASK         (0xffff << 16)
+#define        MXS_DMA_DESC_BYTES_OFFSET       16
+
+struct mxs_dma_cmd {
+       unsigned long           next;
+       unsigned long           data;
+       union {
+               dma_addr_t      address;
+               unsigned long   alternate;
+       };
+       unsigned long           pio_words[DMA_PIO_WORDS];
+};
+
+/*
+ * MXS DMA command descriptor.
+ *
+ * This structure incorporates an MXS DMA hardware command structure, along
+ * with metadata.
+ */
+#define        MXS_DMA_DESC_FIRST      (1 << 0)
+#define        MXS_DMA_DESC_LAST       (1 << 1)
+#define        MXS_DMA_DESC_READY      (1 << 31)
+
+struct mxs_dma_desc {
+       struct mxs_dma_cmd      cmd;
+       unsigned int            flags;
+       dma_addr_t              address;
+       void                    *buffer;
+       struct list_head        node;
+};
+
+/**
+ * MXS DMA channel
+ *
+ * This structure represents a single DMA channel. The MXS platform code
+ * maintains an array of these structures to represent every DMA channel in the
+ * system (see mxs_dma_channels).
+ */
+#define        MXS_DMA_FLAGS_IDLE      0
+#define        MXS_DMA_FLAGS_BUSY      (1 << 0)
+#define        MXS_DMA_FLAGS_FREE      0
+#define        MXS_DMA_FLAGS_ALLOCATED (1 << 16)
+#define        MXS_DMA_FLAGS_VALID     (1 << 31)
+
+struct mxs_dma_chan {
+       const char *name;
+       unsigned long dev;
+       struct mxs_dma_device *dma;
+       unsigned int flags;
+       unsigned int active_num;
+       unsigned int pending_num;
+       struct list_head active;
+       struct list_head done;
+};
+
+struct mxs_dma_desc *mxs_dma_desc_alloc(void);
+void mxs_dma_desc_free(struct mxs_dma_desc *);
+int mxs_dma_desc_append(int channel, struct mxs_dma_desc *pdesc);
+
+int mxs_dma_go(int chan);
+int mxs_dma_init(void);
+
+#endif /* __DMA_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/gpio.h b/arch/arm/include/asm/arch-mx28/gpio.h
new file mode 100644 (file)
index 0000000..be1c944
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Freescale i.MX28 GPIO
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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        __MX28_GPIO_H__
+#define        __MX28_GPIO_H__
+
+#ifdef CONFIG_MXS_GPIO
+void mxs_gpio_init(void);
+#else
+inline void mxs_gpio_init(void) {}
+#endif
+
+#endif /* __MX28_GPIO_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/imx-regs.h b/arch/arm/include/asm/arch-mx28/imx-regs.h
new file mode 100644 (file)
index 0000000..9561b5e
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Freescale i.MX28 Registers
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __IMX_REGS_H__
+#define __IMX_REGS_H__
+
+#include <asm/arch/regs-apbh.h>
+#include <asm/arch/regs-base.h>
+#include <asm/arch/regs-bch.h>
+#include <asm/arch/regs-clkctrl.h>
+#include <asm/arch/regs-gpmi.h>
+#include <asm/arch/regs-i2c.h>
+#include <asm/arch/regs-ocotp.h>
+#include <asm/arch/regs-pinctrl.h>
+#include <asm/arch/regs-power.h>
+#include <asm/arch/regs-rtc.h>
+#include <asm/arch/regs-ssp.h>
+#include <asm/arch/regs-timrot.h>
+
+#endif /* __IMX_REGS_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/iomux-mx28.h b/arch/arm/include/asm/arch-mx28/iomux-mx28.h
new file mode 100644 (file)
index 0000000..b42820d
--- /dev/null
@@ -0,0 +1,537 @@
+/*
+ * Copyright (C) 2009-2010 Amit Kucheria <amit.kucheria@canonical.com>
+ * Copyright (C) 2010 Freescale Semiconductor, Inc.
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+#ifndef __MACH_IOMUX_MX28_H__
+#define __MACH_IOMUX_MX28_H__
+
+#include <asm/arch/iomux.h>
+
+/*
+ * The naming convention for the pad modes is MX28_PAD_<padname>__<padmode>
+ * If <padname> or <padmode> refers to a GPIO, it is named GPIO_<unit>_<num>
+ * See also iomux.h
+ *
+ *                                                                     BANK    PIN     MUX
+ */
+/* MUXSEL_0 */
+#define MX28_PAD_GPMI_D00__GPMI_D0                     MXS_IOMUX_PAD_NAKED(0,  0, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_D01__GPMI_D1                     MXS_IOMUX_PAD_NAKED(0,  1, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_D02__GPMI_D2                     MXS_IOMUX_PAD_NAKED(0,  2, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_D03__GPMI_D3                     MXS_IOMUX_PAD_NAKED(0,  3, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_D04__GPMI_D4                     MXS_IOMUX_PAD_NAKED(0,  4, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_D05__GPMI_D5                     MXS_IOMUX_PAD_NAKED(0,  5, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_D06__GPMI_D6                     MXS_IOMUX_PAD_NAKED(0,  6, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_D07__GPMI_D7                     MXS_IOMUX_PAD_NAKED(0,  7, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_CE0N__GPMI_CE0N                  MXS_IOMUX_PAD_NAKED(0, 16, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_CE1N__GPMI_CE1N                  MXS_IOMUX_PAD_NAKED(0, 17, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_CE2N__GPMI_CE2N                  MXS_IOMUX_PAD_NAKED(0, 18, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_CE3N__GPMI_CE3N                  MXS_IOMUX_PAD_NAKED(0, 19, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_RDY0__GPMI_READY0                        MXS_IOMUX_PAD_NAKED(0, 20, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_RDY1__GPMI_READY1                        MXS_IOMUX_PAD_NAKED(0, 21, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_RDY2__GPMI_READY2                        MXS_IOMUX_PAD_NAKED(0, 22, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_RDY3__GPMI_READY3                        MXS_IOMUX_PAD_NAKED(0, 23, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_RDN__GPMI_RDN                    MXS_IOMUX_PAD_NAKED(0, 24, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_WRN__GPMI_WRN                    MXS_IOMUX_PAD_NAKED(0, 25, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_ALE__GPMI_ALE                    MXS_IOMUX_PAD_NAKED(0, 26, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_CLE__GPMI_CLE                    MXS_IOMUX_PAD_NAKED(0, 27, PAD_MUXSEL_0)
+#define MX28_PAD_GPMI_RESETN__GPMI_RESETN              MXS_IOMUX_PAD_NAKED(0, 28, PAD_MUXSEL_0)
+
+#define MX28_PAD_LCD_D00__LCD_D0                       MXS_IOMUX_PAD_NAKED(1,  0, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D01__LCD_D1                       MXS_IOMUX_PAD_NAKED(1,  1, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D02__LCD_D2                       MXS_IOMUX_PAD_NAKED(1,  2, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D03__LCD_D3                       MXS_IOMUX_PAD_NAKED(1,  3, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D04__LCD_D4                       MXS_IOMUX_PAD_NAKED(1,  4, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D05__LCD_D5                       MXS_IOMUX_PAD_NAKED(1,  5, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D06__LCD_D6                       MXS_IOMUX_PAD_NAKED(1,  6, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D07__LCD_D7                       MXS_IOMUX_PAD_NAKED(1,  7, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D08__LCD_D8                       MXS_IOMUX_PAD_NAKED(1,  8, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D09__LCD_D9                       MXS_IOMUX_PAD_NAKED(1,  9, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D10__LCD_D10                      MXS_IOMUX_PAD_NAKED(1, 10, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D11__LCD_D11                      MXS_IOMUX_PAD_NAKED(1, 11, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D12__LCD_D12                      MXS_IOMUX_PAD_NAKED(1, 12, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D13__LCD_D13                      MXS_IOMUX_PAD_NAKED(1, 13, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D14__LCD_D14                      MXS_IOMUX_PAD_NAKED(1, 14, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D15__LCD_D15                      MXS_IOMUX_PAD_NAKED(1, 15, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D16__LCD_D16                      MXS_IOMUX_PAD_NAKED(1, 16, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D17__LCD_D17                      MXS_IOMUX_PAD_NAKED(1, 17, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D18__LCD_D18                      MXS_IOMUX_PAD_NAKED(1, 18, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D19__LCD_D19                      MXS_IOMUX_PAD_NAKED(1, 19, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D20__LCD_D20                      MXS_IOMUX_PAD_NAKED(1, 20, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D21__LCD_D21                      MXS_IOMUX_PAD_NAKED(1, 21, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D22__LCD_D22                      MXS_IOMUX_PAD_NAKED(1, 22, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_D23__LCD_D23                      MXS_IOMUX_PAD_NAKED(1, 23, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_RD_E__LCD_RD_E                    MXS_IOMUX_PAD_NAKED(1, 24, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_WR_RWN__LCD_WR_RWN                        MXS_IOMUX_PAD_NAKED(1, 25, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_RS__LCD_RS                                MXS_IOMUX_PAD_NAKED(1, 26, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_CS__LCD_CS                                MXS_IOMUX_PAD_NAKED(1, 27, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_VSYNC__LCD_VSYNC                  MXS_IOMUX_PAD_NAKED(1, 28, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_HSYNC__LCD_HSYNC                  MXS_IOMUX_PAD_NAKED(1, 29, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_DOTCLK__LCD_DOTCLK                        MXS_IOMUX_PAD_NAKED(1, 30, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_ENABLE__LCD_ENABLE                        MXS_IOMUX_PAD_NAKED(1, 31, PAD_MUXSEL_0)
+
+#define MX28_PAD_SSP0_DATA0__SSP0_D0                   MXS_IOMUX_PAD_NAKED(2,  0, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_DATA1__SSP0_D1                   MXS_IOMUX_PAD_NAKED(2,  1, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_DATA2__SSP0_D2                   MXS_IOMUX_PAD_NAKED(2,  2, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_DATA3__SSP0_D3                   MXS_IOMUX_PAD_NAKED(2,  3, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_DATA4__SSP0_D4                   MXS_IOMUX_PAD_NAKED(2,  4, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_DATA5__SSP0_D5                   MXS_IOMUX_PAD_NAKED(2,  5, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_DATA6__SSP0_D6                   MXS_IOMUX_PAD_NAKED(2,  6, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_DATA7__SSP0_D7                   MXS_IOMUX_PAD_NAKED(2,  7, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_CMD__SSP0_CMD                    MXS_IOMUX_PAD_NAKED(2,  8, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT         MXS_IOMUX_PAD_NAKED(2,  9, PAD_MUXSEL_0)
+#define MX28_PAD_SSP0_SCK__SSP0_SCK                    MXS_IOMUX_PAD_NAKED(2, 10, PAD_MUXSEL_0)
+#define MX28_PAD_SSP1_SCK__SSP1_SCK                    MXS_IOMUX_PAD_NAKED(2, 12, PAD_MUXSEL_0)
+#define MX28_PAD_SSP1_CMD__SSP1_CMD                    MXS_IOMUX_PAD_NAKED(2, 13, PAD_MUXSEL_0)
+#define MX28_PAD_SSP1_DATA0__SSP1_D0                   MXS_IOMUX_PAD_NAKED(2, 14, PAD_MUXSEL_0)
+#define MX28_PAD_SSP1_DATA3__SSP1_D3                   MXS_IOMUX_PAD_NAKED(2, 15, PAD_MUXSEL_0)
+#define MX28_PAD_SSP2_SCK__SSP2_SCK                    MXS_IOMUX_PAD_NAKED(2, 16, PAD_MUXSEL_0)
+#define MX28_PAD_SSP2_MOSI__SSP2_CMD                   MXS_IOMUX_PAD_NAKED(2, 17, PAD_MUXSEL_0)
+#define MX28_PAD_SSP2_MISO__SSP2_D0                    MXS_IOMUX_PAD_NAKED(2, 18, PAD_MUXSEL_0)
+#define MX28_PAD_SSP2_SS0__SSP2_D3                     MXS_IOMUX_PAD_NAKED(2, 19, PAD_MUXSEL_0)
+#define MX28_PAD_SSP2_SS1__SSP2_D4                     MXS_IOMUX_PAD_NAKED(2, 20, PAD_MUXSEL_0)
+#define MX28_PAD_SSP2_SS2__SSP2_D5                     MXS_IOMUX_PAD_NAKED(2, 21, PAD_MUXSEL_0)
+#define MX28_PAD_SSP3_SCK__SSP3_SCK                    MXS_IOMUX_PAD_NAKED(2, 24, PAD_MUXSEL_0)
+#define MX28_PAD_SSP3_MOSI__SSP3_CMD                   MXS_IOMUX_PAD_NAKED(2, 25, PAD_MUXSEL_0)
+#define MX28_PAD_SSP3_MISO__SSP3_D0                    MXS_IOMUX_PAD_NAKED(2, 26, PAD_MUXSEL_0)
+#define MX28_PAD_SSP3_SS0__SSP3_D3                     MXS_IOMUX_PAD_NAKED(2, 27, PAD_MUXSEL_0)
+
+#define MX28_PAD_AUART0_RX__AUART0_RX                  MXS_IOMUX_PAD_NAKED(3,  0, PAD_MUXSEL_0)
+#define MX28_PAD_AUART0_TX__AUART0_TX                  MXS_IOMUX_PAD_NAKED(3,  1, PAD_MUXSEL_0)
+#define MX28_PAD_AUART0_CTS__AUART0_CTS                        MXS_IOMUX_PAD_NAKED(3,  2, PAD_MUXSEL_0)
+#define MX28_PAD_AUART0_RTS__AUART0_RTS                        MXS_IOMUX_PAD_NAKED(3,  3, PAD_MUXSEL_0)
+#define MX28_PAD_AUART1_RX__AUART1_RX                  MXS_IOMUX_PAD_NAKED(3,  4, PAD_MUXSEL_0)
+#define MX28_PAD_AUART1_TX__AUART1_TX                  MXS_IOMUX_PAD_NAKED(3,  5, PAD_MUXSEL_0)
+#define MX28_PAD_AUART1_CTS__AUART1_CTS                        MXS_IOMUX_PAD_NAKED(3,  6, PAD_MUXSEL_0)
+#define MX28_PAD_AUART1_RTS__AUART1_RTS                        MXS_IOMUX_PAD_NAKED(3,  7, PAD_MUXSEL_0)
+#define MX28_PAD_AUART2_RX__AUART2_RX                  MXS_IOMUX_PAD_NAKED(3,  8, PAD_MUXSEL_0)
+#define MX28_PAD_AUART2_TX__AUART2_TX                  MXS_IOMUX_PAD_NAKED(3,  9, PAD_MUXSEL_0)
+#define MX28_PAD_AUART2_CTS__AUART2_CTS                        MXS_IOMUX_PAD_NAKED(3, 10, PAD_MUXSEL_0)
+#define MX28_PAD_AUART2_RTS__AUART2_RTS                        MXS_IOMUX_PAD_NAKED(3, 11, PAD_MUXSEL_0)
+#define MX28_PAD_AUART3_RX__AUART3_RX                  MXS_IOMUX_PAD_NAKED(3, 12, PAD_MUXSEL_0)
+#define MX28_PAD_AUART3_TX__AUART3_TX                  MXS_IOMUX_PAD_NAKED(3, 13, PAD_MUXSEL_0)
+#define MX28_PAD_AUART3_CTS__AUART3_CTS                        MXS_IOMUX_PAD_NAKED(3, 14, PAD_MUXSEL_0)
+#define MX28_PAD_AUART3_RTS__AUART3_RTS                        MXS_IOMUX_PAD_NAKED(3, 15, PAD_MUXSEL_0)
+#define MX28_PAD_PWM0__PWM_0                           MXS_IOMUX_PAD_NAKED(3, 16, PAD_MUXSEL_0)
+#define MX28_PAD_PWM1__PWM_1                           MXS_IOMUX_PAD_NAKED(3, 17, PAD_MUXSEL_0)
+#define MX28_PAD_PWM2__PWM_2                           MXS_IOMUX_PAD_NAKED(3, 18, PAD_MUXSEL_0)
+#define MX28_PAD_SAIF0_MCLK__SAIF0_MCLK                        MXS_IOMUX_PAD_NAKED(3, 20, PAD_MUXSEL_0)
+#define MX28_PAD_SAIF0_LRCLK__SAIF0_LRCLK              MXS_IOMUX_PAD_NAKED(3, 21, PAD_MUXSEL_0)
+#define MX28_PAD_SAIF0_BITCLK__SAIF0_BITCLK            MXS_IOMUX_PAD_NAKED(3, 22, PAD_MUXSEL_0)
+#define MX28_PAD_SAIF0_SDATA0__SAIF0_SDATA0            MXS_IOMUX_PAD_NAKED(3, 23, PAD_MUXSEL_0)
+#define MX28_PAD_I2C0_SCL__I2C0_SCL                    MXS_IOMUX_PAD_NAKED(3, 24, PAD_MUXSEL_0)
+#define MX28_PAD_I2C0_SDA__I2C0_SDA                    MXS_IOMUX_PAD_NAKED(3, 25, PAD_MUXSEL_0)
+#define MX28_PAD_SAIF1_SDATA0__SAIF1_SDATA0            MXS_IOMUX_PAD_NAKED(3, 26, PAD_MUXSEL_0)
+#define MX28_PAD_SPDIF__SPDIF_TX                       MXS_IOMUX_PAD_NAKED(3, 27, PAD_MUXSEL_0)
+#define MX28_PAD_PWM3__PWM_3                           MXS_IOMUX_PAD_NAKED(3, 28, PAD_MUXSEL_0)
+#define MX28_PAD_PWM4__PWM_4                           MXS_IOMUX_PAD_NAKED(3, 29, PAD_MUXSEL_0)
+#define MX28_PAD_LCD_RESET__LCD_RESET                  MXS_IOMUX_PAD_NAKED(3, 30, PAD_MUXSEL_0)
+
+#define MX28_PAD_ENET0_MDC__ENET0_MDC                  MXS_IOMUX_PAD_NAKED(4,  0, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_MDIO__ENET0_MDIO                        MXS_IOMUX_PAD_NAKED(4,  1, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_RX_EN__ENET0_RX_EN              MXS_IOMUX_PAD_NAKED(4,  2, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_RXD0__ENET0_RXD0                        MXS_IOMUX_PAD_NAKED(4,  3, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_RXD1__ENET0_RXD1                        MXS_IOMUX_PAD_NAKED(4,  4, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_TX_CLK__ENET0_TX_CLK            MXS_IOMUX_PAD_NAKED(4,  5, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_TX_EN__ENET0_TX_EN              MXS_IOMUX_PAD_NAKED(4,  6, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_TXD0__ENET0_TXD0                        MXS_IOMUX_PAD_NAKED(4,  7, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_TXD1__ENET0_TXD1                        MXS_IOMUX_PAD_NAKED(4,  8, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_RXD2__ENET0_RXD2                        MXS_IOMUX_PAD_NAKED(4,  9, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_RXD3__ENET0_RXD3                        MXS_IOMUX_PAD_NAKED(4, 10, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_TXD2__ENET0_TXD2                        MXS_IOMUX_PAD_NAKED(4, 11, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_TXD3__ENET0_TXD3                        MXS_IOMUX_PAD_NAKED(4, 12, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_RX_CLK__ENET0_RX_CLK            MXS_IOMUX_PAD_NAKED(4, 13, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_COL__ENET0_COL                  MXS_IOMUX_PAD_NAKED(4, 14, PAD_MUXSEL_0)
+#define MX28_PAD_ENET0_CRS__ENET0_CRS                  MXS_IOMUX_PAD_NAKED(4, 15, PAD_MUXSEL_0)
+#define MX28_PAD_ENET_CLK__CLKCTRL_ENET                        MXS_IOMUX_PAD_NAKED(4, 16, PAD_MUXSEL_0)
+#define MX28_PAD_JTAG_RTCK__JTAG_RTCK                  MXS_IOMUX_PAD_NAKED(4, 20, PAD_MUXSEL_0)
+
+#define MX28_PAD_EMI_D00__EMI_DATA0                    MXS_IOMUX_PAD_NAKED(5,  0, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D01__EMI_DATA1                    MXS_IOMUX_PAD_NAKED(5,  1, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D02__EMI_DATA2                    MXS_IOMUX_PAD_NAKED(5,  2, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D03__EMI_DATA3                    MXS_IOMUX_PAD_NAKED(5,  3, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D04__EMI_DATA4                    MXS_IOMUX_PAD_NAKED(5,  4, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D05__EMI_DATA5                    MXS_IOMUX_PAD_NAKED(5,  5, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D06__EMI_DATA6                    MXS_IOMUX_PAD_NAKED(5,  6, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D07__EMI_DATA7                    MXS_IOMUX_PAD_NAKED(5,  7, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D08__EMI_DATA8                    MXS_IOMUX_PAD_NAKED(5,  8, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D09__EMI_DATA9                    MXS_IOMUX_PAD_NAKED(5,  9, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D10__EMI_DATA10                   MXS_IOMUX_PAD_NAKED(5, 10, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D11__EMI_DATA11                   MXS_IOMUX_PAD_NAKED(5, 11, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D12__EMI_DATA12                   MXS_IOMUX_PAD_NAKED(5, 12, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D13__EMI_DATA13                   MXS_IOMUX_PAD_NAKED(5, 13, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D14__EMI_DATA14                   MXS_IOMUX_PAD_NAKED(5, 14, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_D15__EMI_DATA15                   MXS_IOMUX_PAD_NAKED(5, 15, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_ODT0__EMI_ODT0                    MXS_IOMUX_PAD_NAKED(5, 16, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_DQM0__EMI_DQM0                    MXS_IOMUX_PAD_NAKED(5, 17, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_ODT1__EMI_ODT1                    MXS_IOMUX_PAD_NAKED(5, 18, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_DQM1__EMI_DQM1                    MXS_IOMUX_PAD_NAKED(5, 19, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK        MXS_IOMUX_PAD_NAKED(5, 20, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_CLK__EMI_CLK                      MXS_IOMUX_PAD_NAKED(5, 21, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_DQS0__EMI_DQS0                    MXS_IOMUX_PAD_NAKED(5, 22, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_DQS1__EMI_DQS1                    MXS_IOMUX_PAD_NAKED(5, 23, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN            MXS_IOMUX_PAD_NAKED(5, 26, PAD_MUXSEL_0)
+
+#define MX28_PAD_EMI_A00__EMI_ADDR0                    MXS_IOMUX_PAD_NAKED(6,  0, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A01__EMI_ADDR1                    MXS_IOMUX_PAD_NAKED(6,  1, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A02__EMI_ADDR2                    MXS_IOMUX_PAD_NAKED(6,  2, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A03__EMI_ADDR3                    MXS_IOMUX_PAD_NAKED(6,  3, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A04__EMI_ADDR4                    MXS_IOMUX_PAD_NAKED(6,  4, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A05__EMI_ADDR5                    MXS_IOMUX_PAD_NAKED(6,  5, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A06__EMI_ADDR6                    MXS_IOMUX_PAD_NAKED(6,  6, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A07__EMI_ADDR7                    MXS_IOMUX_PAD_NAKED(6,  7, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A08__EMI_ADDR8                    MXS_IOMUX_PAD_NAKED(6,  8, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A09__EMI_ADDR9                    MXS_IOMUX_PAD_NAKED(6,  9, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A10__EMI_ADDR10                   MXS_IOMUX_PAD_NAKED(6, 10, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A11__EMI_ADDR11                   MXS_IOMUX_PAD_NAKED(6, 11, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A12__EMI_ADDR12                   MXS_IOMUX_PAD_NAKED(6, 12, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A13__EMI_ADDR13                   MXS_IOMUX_PAD_NAKED(6, 13, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_A14__EMI_ADDR14                   MXS_IOMUX_PAD_NAKED(6, 14, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_BA0__EMI_BA0                      MXS_IOMUX_PAD_NAKED(6, 16, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_BA1__EMI_BA1                      MXS_IOMUX_PAD_NAKED(6, 17, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_BA2__EMI_BA2                      MXS_IOMUX_PAD_NAKED(6, 18, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_CASN__EMI_CASN                    MXS_IOMUX_PAD_NAKED(6, 19, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_RASN__EMI_RASN                    MXS_IOMUX_PAD_NAKED(6, 20, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_WEN__EMI_WEN                      MXS_IOMUX_PAD_NAKED(6, 21, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_CE0N__EMI_CE0N                    MXS_IOMUX_PAD_NAKED(6, 22, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_CE1N__EMI_CE1N                    MXS_IOMUX_PAD_NAKED(6, 23, PAD_MUXSEL_0)
+#define MX28_PAD_EMI_CKE__EMI_CKE                      MXS_IOMUX_PAD_NAKED(6, 24, PAD_MUXSEL_0)
+
+/* MUXSEL_1 */
+#define MX28_PAD_GPMI_D00__SSP1_D0                     MXS_IOMUX_PAD_NAKED(0,  0, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_D01__SSP1_D1                     MXS_IOMUX_PAD_NAKED(0,  1, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_D02__SSP1_D2                     MXS_IOMUX_PAD_NAKED(0,  2, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_D03__SSP1_D3                     MXS_IOMUX_PAD_NAKED(0,  3, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_D04__SSP1_D4                     MXS_IOMUX_PAD_NAKED(0,  4, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_D05__SSP1_D5                     MXS_IOMUX_PAD_NAKED(0,  5, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_D06__SSP1_D6                     MXS_IOMUX_PAD_NAKED(0,  6, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_D07__SSP1_D7                     MXS_IOMUX_PAD_NAKED(0,  7, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_CE0N__SSP3_D0                    MXS_IOMUX_PAD_NAKED(0, 16, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_CE1N__SSP3_D3                    MXS_IOMUX_PAD_NAKED(0, 17, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_CE2N__CAN1_TX                    MXS_IOMUX_PAD_NAKED(0, 18, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_CE3N__CAN1_RX                    MXS_IOMUX_PAD_NAKED(0, 19, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_RDY0__SSP1_CARD_DETECT           MXS_IOMUX_PAD_NAKED(0, 20, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_RDY1__SSP1_CMD                   MXS_IOMUX_PAD_NAKED(0, 21, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_RDY2__CAN0_TX                    MXS_IOMUX_PAD_NAKED(0, 22, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_RDY3__CAN0_RX                    MXS_IOMUX_PAD_NAKED(0, 23, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_RDN__SSP3_SCK                    MXS_IOMUX_PAD_NAKED(0, 24, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_WRN__SSP1_SCK                    MXS_IOMUX_PAD_NAKED(0, 25, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_ALE__SSP3_D1                     MXS_IOMUX_PAD_NAKED(0, 26, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_CLE__SSP3_D2                     MXS_IOMUX_PAD_NAKED(0, 27, PAD_MUXSEL_1)
+#define MX28_PAD_GPMI_RESETN__SSP3_CMD                 MXS_IOMUX_PAD_NAKED(0, 28, PAD_MUXSEL_1)
+
+#define MX28_PAD_LCD_D03__ETM_DA8                      MXS_IOMUX_PAD_NAKED(1,  3, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_D04__ETM_DA9                      MXS_IOMUX_PAD_NAKED(1,  4, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_D08__ETM_DA3                      MXS_IOMUX_PAD_NAKED(1,  8, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_D09__ETM_DA4                      MXS_IOMUX_PAD_NAKED(1,  9, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_D20__ENET1_1588_EVENT2_OUT                MXS_IOMUX_PAD_NAKED(1, 20, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_D21__ENET1_1588_EVENT2_IN         MXS_IOMUX_PAD_NAKED(1, 21, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_D22__ENET1_1588_EVENT3_OUT                MXS_IOMUX_PAD_NAKED(1, 22, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_D23__ENET1_1588_EVENT3_IN         MXS_IOMUX_PAD_NAKED(1, 23, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_RD_E__LCD_VSYNC                   MXS_IOMUX_PAD_NAKED(1, 24, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_WR_RWN__LCD_HSYNC                 MXS_IOMUX_PAD_NAKED(1, 25, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_RS__LCD_DOTCLK                    MXS_IOMUX_PAD_NAKED(1, 26, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_CS__LCD_ENABLE                    MXS_IOMUX_PAD_NAKED(1, 27, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_VSYNC__SAIF1_SDATA0               MXS_IOMUX_PAD_NAKED(1, 28, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_HSYNC__SAIF1_SDATA1               MXS_IOMUX_PAD_NAKED(1, 29, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_DOTCLK__SAIF1_MCLK                        MXS_IOMUX_PAD_NAKED(1, 30, PAD_MUXSEL_1)
+
+#define MX28_PAD_SSP0_DATA4__SSP2_D0                   MXS_IOMUX_PAD_NAKED(2,  4, PAD_MUXSEL_1)
+#define MX28_PAD_SSP0_DATA5__SSP2_D3                   MXS_IOMUX_PAD_NAKED(2,  5, PAD_MUXSEL_1)
+#define MX28_PAD_SSP0_DATA6__SSP2_CMD                  MXS_IOMUX_PAD_NAKED(2,  6, PAD_MUXSEL_1)
+#define MX28_PAD_SSP0_DATA7__SSP2_SCK                  MXS_IOMUX_PAD_NAKED(2,  7, PAD_MUXSEL_1)
+#define MX28_PAD_SSP1_SCK__SSP2_D1                     MXS_IOMUX_PAD_NAKED(2, 12, PAD_MUXSEL_1)
+#define MX28_PAD_SSP1_CMD__SSP2_D2                     MXS_IOMUX_PAD_NAKED(2, 13, PAD_MUXSEL_1)
+#define MX28_PAD_SSP1_DATA0__SSP2_D6                   MXS_IOMUX_PAD_NAKED(2, 14, PAD_MUXSEL_1)
+#define MX28_PAD_SSP1_DATA3__SSP2_D7                   MXS_IOMUX_PAD_NAKED(2, 15, PAD_MUXSEL_1)
+#define MX28_PAD_SSP2_SCK__AUART2_RX                   MXS_IOMUX_PAD_NAKED(2, 16, PAD_MUXSEL_1)
+#define MX28_PAD_SSP2_MOSI__AUART2_TX                  MXS_IOMUX_PAD_NAKED(2, 17, PAD_MUXSEL_1)
+#define MX28_PAD_SSP2_MISO__AUART3_RX                  MXS_IOMUX_PAD_NAKED(2, 18, PAD_MUXSEL_1)
+#define MX28_PAD_SSP2_SS0__AUART3_TX                   MXS_IOMUX_PAD_NAKED(2, 19, PAD_MUXSEL_1)
+#define MX28_PAD_SSP2_SS1__SSP2_D1                     MXS_IOMUX_PAD_NAKED(2, 20, PAD_MUXSEL_1)
+#define MX28_PAD_SSP2_SS2__SSP2_D2                     MXS_IOMUX_PAD_NAKED(2, 21, PAD_MUXSEL_1)
+#define MX28_PAD_SSP3_SCK__AUART4_TX                   MXS_IOMUX_PAD_NAKED(2, 24, PAD_MUXSEL_1)
+#define MX28_PAD_SSP3_MOSI__AUART4_RX                  MXS_IOMUX_PAD_NAKED(2, 25, PAD_MUXSEL_1)
+#define MX28_PAD_SSP3_MISO__AUART4_RTS                 MXS_IOMUX_PAD_NAKED(2, 26, PAD_MUXSEL_1)
+#define MX28_PAD_SSP3_SS0__AUART4_CTS                  MXS_IOMUX_PAD_NAKED(2, 27, PAD_MUXSEL_1)
+
+#define MX28_PAD_AUART0_RX__I2C0_SCL                   MXS_IOMUX_PAD_NAKED(3,  0, PAD_MUXSEL_1)
+#define MX28_PAD_AUART0_TX__I2C0_SDA                   MXS_IOMUX_PAD_NAKED(3,  1, PAD_MUXSEL_1)
+#define MX28_PAD_AUART0_CTS__AUART4_RX                 MXS_IOMUX_PAD_NAKED(3,  2, PAD_MUXSEL_1)
+#define MX28_PAD_AUART0_RTS__AUART4_TX                 MXS_IOMUX_PAD_NAKED(3,  3, PAD_MUXSEL_1)
+#define MX28_PAD_AUART1_RX__SSP2_CARD_DETECT           MXS_IOMUX_PAD_NAKED(3,  4, PAD_MUXSEL_1)
+#define MX28_PAD_AUART1_TX__SSP3_CARD_DETECT           MXS_IOMUX_PAD_NAKED(3,  5, PAD_MUXSEL_1)
+#define MX28_PAD_AUART1_CTS__USB0_OVERCURRENT          MXS_IOMUX_PAD_NAKED(3,  6, PAD_MUXSEL_1)
+#define MX28_PAD_AUART1_RTS__USB0_ID                   MXS_IOMUX_PAD_NAKED(3,  7, PAD_MUXSEL_1)
+#define MX28_PAD_AUART2_RX__SSP3_D1                    MXS_IOMUX_PAD_NAKED(3,  8, PAD_MUXSEL_1)
+#define MX28_PAD_AUART2_TX__SSP3_D2                    MXS_IOMUX_PAD_NAKED(3,  9, PAD_MUXSEL_1)
+#define MX28_PAD_AUART2_CTS__I2C1_SCL                  MXS_IOMUX_PAD_NAKED(3, 10, PAD_MUXSEL_1)
+#define MX28_PAD_AUART2_RTS__I2C1_SDA                  MXS_IOMUX_PAD_NAKED(3, 11, PAD_MUXSEL_1)
+#define MX28_PAD_AUART3_RX__CAN0_TX                    MXS_IOMUX_PAD_NAKED(3, 12, PAD_MUXSEL_1)
+#define MX28_PAD_AUART3_TX__CAN0_RX                    MXS_IOMUX_PAD_NAKED(3, 13, PAD_MUXSEL_1)
+#define MX28_PAD_AUART3_CTS__CAN1_TX                   MXS_IOMUX_PAD_NAKED(3, 14, PAD_MUXSEL_1)
+#define MX28_PAD_AUART3_RTS__CAN1_RX                   MXS_IOMUX_PAD_NAKED(3, 15, PAD_MUXSEL_1)
+#define MX28_PAD_PWM0__I2C1_SCL                                MXS_IOMUX_PAD_NAKED(3, 16, PAD_MUXSEL_1)
+#define MX28_PAD_PWM1__I2C1_SDA                                MXS_IOMUX_PAD_NAKED(3, 17, PAD_MUXSEL_1)
+#define MX28_PAD_PWM2__USB0_ID                         MXS_IOMUX_PAD_NAKED(3, 18, PAD_MUXSEL_1)
+#define MX28_PAD_SAIF0_MCLK__PWM_3                     MXS_IOMUX_PAD_NAKED(3, 20, PAD_MUXSEL_1)
+#define MX28_PAD_SAIF0_LRCLK__PWM_4                    MXS_IOMUX_PAD_NAKED(3, 21, PAD_MUXSEL_1)
+#define MX28_PAD_SAIF0_BITCLK__PWM_5                   MXS_IOMUX_PAD_NAKED(3, 22, PAD_MUXSEL_1)
+#define MX28_PAD_SAIF0_SDATA0__PWM_6                   MXS_IOMUX_PAD_NAKED(3, 23, PAD_MUXSEL_1)
+#define MX28_PAD_I2C0_SCL__TIMROT_ROTARYA              MXS_IOMUX_PAD_NAKED(3, 24, PAD_MUXSEL_1)
+#define MX28_PAD_I2C0_SDA__TIMROT_ROTARYB              MXS_IOMUX_PAD_NAKED(3, 25, PAD_MUXSEL_1)
+#define MX28_PAD_SAIF1_SDATA0__PWM_7                   MXS_IOMUX_PAD_NAKED(3, 26, PAD_MUXSEL_1)
+#define MX28_PAD_LCD_RESET__LCD_VSYNC                  MXS_IOMUX_PAD_NAKED(3, 30, PAD_MUXSEL_1)
+
+#define MX28_PAD_ENET0_MDC__GPMI_CE4N                  MXS_IOMUX_PAD_NAKED(4,  0, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_MDIO__GPMI_CE5N                 MXS_IOMUX_PAD_NAKED(4,  1, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_RX_EN__GPMI_CE6N                        MXS_IOMUX_PAD_NAKED(4,  2, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_RXD0__GPMI_CE7N                 MXS_IOMUX_PAD_NAKED(4,  3, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_RXD1__GPMI_READY4               MXS_IOMUX_PAD_NAKED(4,  4, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_TX_CLK__HSADC_TRIGGER           MXS_IOMUX_PAD_NAKED(4,  5, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_TX_EN__GPMI_READY5              MXS_IOMUX_PAD_NAKED(4,  6, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_TXD0__GPMI_READY6               MXS_IOMUX_PAD_NAKED(4,  7, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_TXD1__GPMI_READY7               MXS_IOMUX_PAD_NAKED(4,  8, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_RXD2__ENET1_RXD0                        MXS_IOMUX_PAD_NAKED(4,  9, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_RXD3__ENET1_RXD1                        MXS_IOMUX_PAD_NAKED(4, 10, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_TXD2__ENET1_TXD0                        MXS_IOMUX_PAD_NAKED(4, 11, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_TXD3__ENET1_TXD1                        MXS_IOMUX_PAD_NAKED(4, 12, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_RX_CLK__ENET0_RX_ER             MXS_IOMUX_PAD_NAKED(4, 13, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_COL__ENET1_TX_EN                        MXS_IOMUX_PAD_NAKED(4, 14, PAD_MUXSEL_1)
+#define MX28_PAD_ENET0_CRS__ENET1_RX_EN                        MXS_IOMUX_PAD_NAKED(4, 15, PAD_MUXSEL_1)
+
+/* MUXSEL_2 */
+#define MX28_PAD_GPMI_CE2N__ENET0_RX_ER                        MXS_IOMUX_PAD_NAKED(0, 18, PAD_MUXSEL_2)
+#define MX28_PAD_GPMI_CE3N__SAIF1_MCLK                 MXS_IOMUX_PAD_NAKED(0, 19, PAD_MUXSEL_2)
+#define MX28_PAD_GPMI_RDY0__USB0_ID                    MXS_IOMUX_PAD_NAKED(0, 20, PAD_MUXSEL_2)
+#define MX28_PAD_GPMI_RDY2__ENET0_TX_ER                        MXS_IOMUX_PAD_NAKED(0, 22, PAD_MUXSEL_2)
+#define MX28_PAD_GPMI_RDY3__HSADC_TRIGGER              MXS_IOMUX_PAD_NAKED(0, 23, PAD_MUXSEL_2)
+#define MX28_PAD_GPMI_ALE__SSP3_D4                     MXS_IOMUX_PAD_NAKED(0, 26, PAD_MUXSEL_2)
+#define MX28_PAD_GPMI_CLE__SSP3_D5                     MXS_IOMUX_PAD_NAKED(0, 27, PAD_MUXSEL_2)
+
+#define MX28_PAD_LCD_D00__ETM_DA0                      MXS_IOMUX_PAD_NAKED(1,  0, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D01__ETM_DA1                      MXS_IOMUX_PAD_NAKED(1,  1, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D02__ETM_DA2                      MXS_IOMUX_PAD_NAKED(1,  2, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D03__ETM_DA3                      MXS_IOMUX_PAD_NAKED(1,  3, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D04__ETM_DA4                      MXS_IOMUX_PAD_NAKED(1,  4, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D05__ETM_DA5                      MXS_IOMUX_PAD_NAKED(1,  5, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D06__ETM_DA6                      MXS_IOMUX_PAD_NAKED(1,  6, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D07__ETM_DA7                      MXS_IOMUX_PAD_NAKED(1,  7, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D08__ETM_DA8                      MXS_IOMUX_PAD_NAKED(1,  8, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D09__ETM_DA9                      MXS_IOMUX_PAD_NAKED(1,  9, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D10__ETM_DA10                     MXS_IOMUX_PAD_NAKED(1, 10, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D11__ETM_DA11                     MXS_IOMUX_PAD_NAKED(1, 11, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D12__ETM_DA12                     MXS_IOMUX_PAD_NAKED(1, 12, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D13__ETM_DA13                     MXS_IOMUX_PAD_NAKED(1, 13, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D14__ETM_DA14                     MXS_IOMUX_PAD_NAKED(1, 14, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D15__ETM_DA15                     MXS_IOMUX_PAD_NAKED(1, 15, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D16__ETM_DA7                      MXS_IOMUX_PAD_NAKED(1, 16, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D17__ETM_DA6                      MXS_IOMUX_PAD_NAKED(1, 17, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D18__ETM_DA5                      MXS_IOMUX_PAD_NAKED(1, 18, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D19__ETM_DA4                      MXS_IOMUX_PAD_NAKED(1, 19, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D20__ETM_DA3                      MXS_IOMUX_PAD_NAKED(1, 20, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D21__ETM_DA2                      MXS_IOMUX_PAD_NAKED(1, 21, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D22__ETM_DA1                      MXS_IOMUX_PAD_NAKED(1, 22, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_D23__ETM_DA0                      MXS_IOMUX_PAD_NAKED(1, 23, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_RD_E__ETM_TCTL                    MXS_IOMUX_PAD_NAKED(1, 24, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_WR_RWN__ETM_TCLK                  MXS_IOMUX_PAD_NAKED(1, 25, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_HSYNC__ETM_TCTL                   MXS_IOMUX_PAD_NAKED(1, 29, PAD_MUXSEL_2)
+#define MX28_PAD_LCD_DOTCLK__ETM_TCLK                  MXS_IOMUX_PAD_NAKED(1, 30, PAD_MUXSEL_2)
+
+#define MX28_PAD_SSP1_SCK__ENET0_1588_EVENT2_OUT       MXS_IOMUX_PAD_NAKED(2, 12, PAD_MUXSEL_2)
+#define MX28_PAD_SSP1_CMD__ENET0_1588_EVENT2_IN                MXS_IOMUX_PAD_NAKED(2, 13, PAD_MUXSEL_2)
+#define MX28_PAD_SSP1_DATA0__ENET0_1588_EVENT3_OUT     MXS_IOMUX_PAD_NAKED(2, 14, PAD_MUXSEL_2)
+#define MX28_PAD_SSP1_DATA3__ENET0_1588_EVENT3_IN      MXS_IOMUX_PAD_NAKED(2, 15, PAD_MUXSEL_2)
+#define MX28_PAD_SSP2_SCK__SAIF0_SDATA1                        MXS_IOMUX_PAD_NAKED(2, 16, PAD_MUXSEL_2)
+#define MX28_PAD_SSP2_MOSI__SAIF0_SDATA2               MXS_IOMUX_PAD_NAKED(2, 17, PAD_MUXSEL_2)
+#define MX28_PAD_SSP2_MISO__SAIF1_SDATA1               MXS_IOMUX_PAD_NAKED(2, 18, PAD_MUXSEL_2)
+#define MX28_PAD_SSP2_SS0__SAIF1_SDATA2                        MXS_IOMUX_PAD_NAKED(2, 19, PAD_MUXSEL_2)
+#define MX28_PAD_SSP2_SS1__USB1_OVERCURRENT            MXS_IOMUX_PAD_NAKED(2, 20, PAD_MUXSEL_2)
+#define MX28_PAD_SSP2_SS2__USB0_OVERCURRENT            MXS_IOMUX_PAD_NAKED(2, 21, PAD_MUXSEL_2)
+#define MX28_PAD_SSP3_SCK__ENET1_1588_EVENT0_OUT       MXS_IOMUX_PAD_NAKED(2, 24, PAD_MUXSEL_2)
+#define MX28_PAD_SSP3_MOSI__ENET1_1588_EVENT0_IN       MXS_IOMUX_PAD_NAKED(2, 25, PAD_MUXSEL_2)
+#define MX28_PAD_SSP3_MISO__ENET1_1588_EVENT1_OUT      MXS_IOMUX_PAD_NAKED(2, 26, PAD_MUXSEL_2)
+#define MX28_PAD_SSP3_SS0__ENET1_1588_EVENT1_IN                MXS_IOMUX_PAD_NAKED(2, 27, PAD_MUXSEL_2)
+
+#define MX28_PAD_AUART0_RX__DUART_CTS                  MXS_IOMUX_PAD_NAKED(3,  0, PAD_MUXSEL_2)
+#define MX28_PAD_AUART0_TX__DUART_RTS                  MXS_IOMUX_PAD_NAKED(3,  1, PAD_MUXSEL_2)
+#define MX28_PAD_AUART0_CTS__DUART_RX                  MXS_IOMUX_PAD_NAKED(3,  2, PAD_MUXSEL_2)
+#define MX28_PAD_AUART0_RTS__DUART_TX                  MXS_IOMUX_PAD_NAKED(3,  3, PAD_MUXSEL_2)
+#define MX28_PAD_AUART1_RX__PWM_0                      MXS_IOMUX_PAD_NAKED(3,  4, PAD_MUXSEL_2)
+#define MX28_PAD_AUART1_TX__PWM_1                      MXS_IOMUX_PAD_NAKED(3,  5, PAD_MUXSEL_2)
+#define MX28_PAD_AUART1_CTS__TIMROT_ROTARYA            MXS_IOMUX_PAD_NAKED(3,  6, PAD_MUXSEL_2)
+#define MX28_PAD_AUART1_RTS__TIMROT_ROTARYB            MXS_IOMUX_PAD_NAKED(3,  7, PAD_MUXSEL_2)
+#define MX28_PAD_AUART2_RX__SSP3_D4                    MXS_IOMUX_PAD_NAKED(3,  8, PAD_MUXSEL_2)
+#define MX28_PAD_AUART2_TX__SSP3_D5                    MXS_IOMUX_PAD_NAKED(3,  9, PAD_MUXSEL_2)
+#define MX28_PAD_AUART2_CTS__SAIF1_BITCLK              MXS_IOMUX_PAD_NAKED(3, 10, PAD_MUXSEL_2)
+#define MX28_PAD_AUART2_RTS__SAIF1_LRCLK               MXS_IOMUX_PAD_NAKED(3, 11, PAD_MUXSEL_2)
+#define MX28_PAD_AUART3_RX__ENET0_1588_EVENT0_OUT      MXS_IOMUX_PAD_NAKED(3, 12, PAD_MUXSEL_2)
+#define MX28_PAD_AUART3_TX__ENET0_1588_EVENT0_IN       MXS_IOMUX_PAD_NAKED(3, 13, PAD_MUXSEL_2)
+#define MX28_PAD_AUART3_CTS__ENET0_1588_EVENT1_OUT     MXS_IOMUX_PAD_NAKED(3, 14, PAD_MUXSEL_2)
+#define MX28_PAD_AUART3_RTS__ENET0_1588_EVENT1_IN      MXS_IOMUX_PAD_NAKED(3, 15, PAD_MUXSEL_2)
+#define MX28_PAD_PWM0__DUART_RX                                MXS_IOMUX_PAD_NAKED(3, 16, PAD_MUXSEL_2)
+#define MX28_PAD_PWM1__DUART_TX                                MXS_IOMUX_PAD_NAKED(3, 17, PAD_MUXSEL_2)
+#define MX28_PAD_PWM2__USB1_OVERCURRENT                        MXS_IOMUX_PAD_NAKED(3, 18, PAD_MUXSEL_2)
+#define MX28_PAD_SAIF0_MCLK__AUART4_CTS                        MXS_IOMUX_PAD_NAKED(3, 20, PAD_MUXSEL_2)
+#define MX28_PAD_SAIF0_LRCLK__AUART4_RTS               MXS_IOMUX_PAD_NAKED(3, 21, PAD_MUXSEL_2)
+#define MX28_PAD_SAIF0_BITCLK__AUART4_RX               MXS_IOMUX_PAD_NAKED(3, 22, PAD_MUXSEL_2)
+#define MX28_PAD_SAIF0_SDATA0__AUART4_TX               MXS_IOMUX_PAD_NAKED(3, 23, PAD_MUXSEL_2)
+#define MX28_PAD_I2C0_SCL__DUART_RX                    MXS_IOMUX_PAD_NAKED(3, 24, PAD_MUXSEL_2)
+#define MX28_PAD_I2C0_SDA__DUART_TX                    MXS_IOMUX_PAD_NAKED(3, 25, PAD_MUXSEL_2)
+#define MX28_PAD_SAIF1_SDATA0__SAIF0_SDATA1            MXS_IOMUX_PAD_NAKED(3, 26, PAD_MUXSEL_2)
+#define MX28_PAD_SPDIF__ENET1_RX_ER                    MXS_IOMUX_PAD_NAKED(3, 27, PAD_MUXSEL_2)
+
+#define MX28_PAD_ENET0_MDC__SAIF0_SDATA1               MXS_IOMUX_PAD_NAKED(4,  0, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_MDIO__SAIF0_SDATA2              MXS_IOMUX_PAD_NAKED(4,  1, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_RX_EN__SAIF1_SDATA1             MXS_IOMUX_PAD_NAKED(4,  2, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_RXD0__SAIF1_SDATA2              MXS_IOMUX_PAD_NAKED(4,  3, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_TX_CLK__ENET0_1588_EVENT2_OUT   MXS_IOMUX_PAD_NAKED(4,  5, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_RXD2__ENET0_1588_EVENT0_OUT     MXS_IOMUX_PAD_NAKED(4,  9, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_RXD3__ENET0_1588_EVENT0_IN      MXS_IOMUX_PAD_NAKED(4, 10, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_TXD2__ENET0_1588_EVENT1_OUT     MXS_IOMUX_PAD_NAKED(4, 11, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_TXD3__ENET0_1588_EVENT1_IN      MXS_IOMUX_PAD_NAKED(4, 12, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_RX_CLK__ENET0_1588_EVENT2_IN    MXS_IOMUX_PAD_NAKED(4, 13, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_COL__ENET0_1588_EVENT3_OUT      MXS_IOMUX_PAD_NAKED(4, 14, PAD_MUXSEL_2)
+#define MX28_PAD_ENET0_CRS__ENET0_1588_EVENT3_IN       MXS_IOMUX_PAD_NAKED(4, 15, PAD_MUXSEL_2)
+
+/* MUXSEL_GPIO */
+#define MX28_PAD_GPMI_D00__GPIO_0_0                    MXS_IOMUX_PAD_NAKED(0,  0, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_D01__GPIO_0_1                    MXS_IOMUX_PAD_NAKED(0,  1, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_D02__GPIO_0_2                    MXS_IOMUX_PAD_NAKED(0,  2, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_D03__GPIO_0_3                    MXS_IOMUX_PAD_NAKED(0,  3, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_D04__GPIO_0_4                    MXS_IOMUX_PAD_NAKED(0,  4, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_D05__GPIO_0_5                    MXS_IOMUX_PAD_NAKED(0,  5, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_D06__GPIO_0_6                    MXS_IOMUX_PAD_NAKED(0,  6, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_D07__GPIO_0_7                    MXS_IOMUX_PAD_NAKED(0,  7, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_CE0N__GPIO_0_16                  MXS_IOMUX_PAD_NAKED(0, 16, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_CE1N__GPIO_0_17                  MXS_IOMUX_PAD_NAKED(0, 17, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_CE2N__GPIO_0_18                  MXS_IOMUX_PAD_NAKED(0, 18, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_CE3N__GPIO_0_19                  MXS_IOMUX_PAD_NAKED(0, 19, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_RDY0__GPIO_0_20                  MXS_IOMUX_PAD_NAKED(0, 20, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_RDY1__GPIO_0_21                  MXS_IOMUX_PAD_NAKED(0, 21, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_RDY2__GPIO_0_22                  MXS_IOMUX_PAD_NAKED(0, 22, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_RDY3__GPIO_0_23                  MXS_IOMUX_PAD_NAKED(0, 23, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_RDN__GPIO_0_24                   MXS_IOMUX_PAD_NAKED(0, 24, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_WRN__GPIO_0_25                   MXS_IOMUX_PAD_NAKED(0, 25, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_ALE__GPIO_0_26                   MXS_IOMUX_PAD_NAKED(0, 26, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_CLE__GPIO_0_27                   MXS_IOMUX_PAD_NAKED(0, 27, PAD_MUXSEL_GPIO)
+#define MX28_PAD_GPMI_RESETN__GPIO_0_28                        MXS_IOMUX_PAD_NAKED(0, 28, PAD_MUXSEL_GPIO)
+
+#define MX28_PAD_LCD_D00__GPIO_1_0                     MXS_IOMUX_PAD_NAKED(1,  0, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D01__GPIO_1_1                     MXS_IOMUX_PAD_NAKED(1,  1, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D02__GPIO_1_2                     MXS_IOMUX_PAD_NAKED(1,  2, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D03__GPIO_1_3                     MXS_IOMUX_PAD_NAKED(1,  3, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D04__GPIO_1_4                     MXS_IOMUX_PAD_NAKED(1,  4, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D05__GPIO_1_5                     MXS_IOMUX_PAD_NAKED(1,  5, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D06__GPIO_1_6                     MXS_IOMUX_PAD_NAKED(1,  6, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D07__GPIO_1_7                     MXS_IOMUX_PAD_NAKED(1,  7, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D08__GPIO_1_8                     MXS_IOMUX_PAD_NAKED(1,  8, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D09__GPIO_1_9                     MXS_IOMUX_PAD_NAKED(1,  9, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D10__GPIO_1_10                    MXS_IOMUX_PAD_NAKED(1, 10, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D11__GPIO_1_11                    MXS_IOMUX_PAD_NAKED(1, 11, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D12__GPIO_1_12                    MXS_IOMUX_PAD_NAKED(1, 12, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D13__GPIO_1_13                    MXS_IOMUX_PAD_NAKED(1, 13, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D14__GPIO_1_14                    MXS_IOMUX_PAD_NAKED(1, 14, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D15__GPIO_1_15                    MXS_IOMUX_PAD_NAKED(1, 15, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D16__GPIO_1_16                    MXS_IOMUX_PAD_NAKED(1, 16, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D17__GPIO_1_17                    MXS_IOMUX_PAD_NAKED(1, 17, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D18__GPIO_1_18                    MXS_IOMUX_PAD_NAKED(1, 18, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D19__GPIO_1_19                    MXS_IOMUX_PAD_NAKED(1, 19, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D20__GPIO_1_20                    MXS_IOMUX_PAD_NAKED(1, 20, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D21__GPIO_1_21                    MXS_IOMUX_PAD_NAKED(1, 21, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D22__GPIO_1_22                    MXS_IOMUX_PAD_NAKED(1, 22, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_D23__GPIO_1_23                    MXS_IOMUX_PAD_NAKED(1, 23, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_RD_E__GPIO_1_24                   MXS_IOMUX_PAD_NAKED(1, 24, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_WR_RWN__GPIO_1_25                 MXS_IOMUX_PAD_NAKED(1, 25, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_RS__GPIO_1_26                     MXS_IOMUX_PAD_NAKED(1, 26, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_CS__GPIO_1_27                     MXS_IOMUX_PAD_NAKED(1, 27, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_VSYNC__GPIO_1_28                  MXS_IOMUX_PAD_NAKED(1, 28, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_HSYNC__GPIO_1_29                  MXS_IOMUX_PAD_NAKED(1, 29, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_DOTCLK__GPIO_1_30                 MXS_IOMUX_PAD_NAKED(1, 30, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_ENABLE__GPIO_1_31                 MXS_IOMUX_PAD_NAKED(1, 31, PAD_MUXSEL_GPIO)
+
+#define MX28_PAD_SSP0_DATA0__GPIO_2_0                  MXS_IOMUX_PAD_NAKED(2,  0, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_DATA1__GPIO_2_1                  MXS_IOMUX_PAD_NAKED(2,  1, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_DATA2__GPIO_2_2                  MXS_IOMUX_PAD_NAKED(2,  2, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_DATA3__GPIO_2_3                  MXS_IOMUX_PAD_NAKED(2,  3, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_DATA4__GPIO_2_4                  MXS_IOMUX_PAD_NAKED(2,  4, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_DATA5__GPIO_2_5                  MXS_IOMUX_PAD_NAKED(2,  5, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_DATA6__GPIO_2_6                  MXS_IOMUX_PAD_NAKED(2,  6, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_DATA7__GPIO_2_7                  MXS_IOMUX_PAD_NAKED(2,  7, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_CMD__GPIO_2_8                    MXS_IOMUX_PAD_NAKED(2,  8, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_DETECT__GPIO_2_9                 MXS_IOMUX_PAD_NAKED(2,  9, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP0_SCK__GPIO_2_10                   MXS_IOMUX_PAD_NAKED(2, 10, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP1_SCK__GPIO_2_12                   MXS_IOMUX_PAD_NAKED(2, 12, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP1_CMD__GPIO_2_13                   MXS_IOMUX_PAD_NAKED(2, 13, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP1_DATA0__GPIO_2_14                 MXS_IOMUX_PAD_NAKED(2, 14, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP1_DATA3__GPIO_2_15                 MXS_IOMUX_PAD_NAKED(2, 15, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP2_SCK__GPIO_2_16                   MXS_IOMUX_PAD_NAKED(2, 16, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP2_MOSI__GPIO_2_17                  MXS_IOMUX_PAD_NAKED(2, 17, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP2_MISO__GPIO_2_18                  MXS_IOMUX_PAD_NAKED(2, 18, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP2_SS0__GPIO_2_19                   MXS_IOMUX_PAD_NAKED(2, 19, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP2_SS1__GPIO_2_20                   MXS_IOMUX_PAD_NAKED(2, 20, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP2_SS2__GPIO_2_21                   MXS_IOMUX_PAD_NAKED(2, 21, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP3_SCK__GPIO_2_24                   MXS_IOMUX_PAD_NAKED(2, 24, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP3_MOSI__GPIO_2_25                  MXS_IOMUX_PAD_NAKED(2, 25, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP3_MISO__GPIO_2_26                  MXS_IOMUX_PAD_NAKED(2, 26, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SSP3_SS0__GPIO_2_27                   MXS_IOMUX_PAD_NAKED(2, 27, PAD_MUXSEL_GPIO)
+
+#define MX28_PAD_AUART0_RX__GPIO_3_0                   MXS_IOMUX_PAD_NAKED(3,  0, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART0_TX__GPIO_3_1                   MXS_IOMUX_PAD_NAKED(3,  1, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART0_CTS__GPIO_3_2                  MXS_IOMUX_PAD_NAKED(3,  2, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART0_RTS__GPIO_3_3                  MXS_IOMUX_PAD_NAKED(3,  3, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART1_RX__GPIO_3_4                   MXS_IOMUX_PAD_NAKED(3,  4, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART1_TX__GPIO_3_5                   MXS_IOMUX_PAD_NAKED(3,  5, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART1_CTS__GPIO_3_6                  MXS_IOMUX_PAD_NAKED(3,  6, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART1_RTS__GPIO_3_7                  MXS_IOMUX_PAD_NAKED(3,  7, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART2_RX__GPIO_3_8                   MXS_IOMUX_PAD_NAKED(3,  8, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART2_TX__GPIO_3_9                   MXS_IOMUX_PAD_NAKED(3,  9, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART2_CTS__GPIO_3_10                 MXS_IOMUX_PAD_NAKED(3, 10, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART2_RTS__GPIO_3_11                 MXS_IOMUX_PAD_NAKED(3, 11, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART3_RX__GPIO_3_12                  MXS_IOMUX_PAD_NAKED(3, 12, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART3_TX__GPIO_3_13                  MXS_IOMUX_PAD_NAKED(3, 13, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART3_CTS__GPIO_3_14                 MXS_IOMUX_PAD_NAKED(3, 14, PAD_MUXSEL_GPIO)
+#define MX28_PAD_AUART3_RTS__GPIO_3_15                 MXS_IOMUX_PAD_NAKED(3, 15, PAD_MUXSEL_GPIO)
+#define MX28_PAD_PWM0__GPIO_3_16                       MXS_IOMUX_PAD_NAKED(3, 16, PAD_MUXSEL_GPIO)
+#define MX28_PAD_PWM1__GPIO_3_17                       MXS_IOMUX_PAD_NAKED(3, 17, PAD_MUXSEL_GPIO)
+#define MX28_PAD_PWM2__GPIO_3_18                       MXS_IOMUX_PAD_NAKED(3, 18, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SAIF0_MCLK__GPIO_3_20                 MXS_IOMUX_PAD_NAKED(3, 20, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SAIF0_LRCLK__GPIO_3_21                        MXS_IOMUX_PAD_NAKED(3, 21, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SAIF0_BITCLK__GPIO_3_22               MXS_IOMUX_PAD_NAKED(3, 22, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SAIF0_SDATA0__GPIO_3_23               MXS_IOMUX_PAD_NAKED(3, 23, PAD_MUXSEL_GPIO)
+#define MX28_PAD_I2C0_SCL__GPIO_3_24                   MXS_IOMUX_PAD_NAKED(3, 24, PAD_MUXSEL_GPIO)
+#define MX28_PAD_I2C0_SDA__GPIO_3_25                   MXS_IOMUX_PAD_NAKED(3, 25, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SAIF1_SDATA0__GPIO_3_26               MXS_IOMUX_PAD_NAKED(3, 26, PAD_MUXSEL_GPIO)
+#define MX28_PAD_SPDIF__GPIO_3_27                      MXS_IOMUX_PAD_NAKED(3, 27, PAD_MUXSEL_GPIO)
+#define MX28_PAD_PWM3__GPIO_3_28                       MXS_IOMUX_PAD_NAKED(3, 28, PAD_MUXSEL_GPIO)
+#define MX28_PAD_PWM4__GPIO_3_29                       MXS_IOMUX_PAD_NAKED(3, 29, PAD_MUXSEL_GPIO)
+#define MX28_PAD_LCD_RESET__GPIO_3_30                  MXS_IOMUX_PAD_NAKED(3, 30, PAD_MUXSEL_GPIO)
+
+#define MX28_PAD_ENET0_MDC__GPIO_4_0                   MXS_IOMUX_PAD_NAKED(4,  0, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_MDIO__GPIO_4_1                  MXS_IOMUX_PAD_NAKED(4,  1, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_RX_EN__GPIO_4_2                 MXS_IOMUX_PAD_NAKED(4,  2, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_RXD0__GPIO_4_3                  MXS_IOMUX_PAD_NAKED(4,  3, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_RXD1__GPIO_4_4                  MXS_IOMUX_PAD_NAKED(4,  4, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_TX_CLK__GPIO_4_5                        MXS_IOMUX_PAD_NAKED(4,  5, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_TX_EN__GPIO_4_6                 MXS_IOMUX_PAD_NAKED(4,  6, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_TXD0__GPIO_4_7                  MXS_IOMUX_PAD_NAKED(4,  7, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_TXD1__GPIO_4_8                  MXS_IOMUX_PAD_NAKED(4,  8, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_RXD2__GPIO_4_9                  MXS_IOMUX_PAD_NAKED(4,  9, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_RXD3__GPIO_4_10                 MXS_IOMUX_PAD_NAKED(4, 10, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_TXD2__GPIO_4_11                 MXS_IOMUX_PAD_NAKED(4, 11, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_TXD3__GPIO_4_12                 MXS_IOMUX_PAD_NAKED(4, 12, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_RX_CLK__GPIO_4_13               MXS_IOMUX_PAD_NAKED(4, 13, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_COL__GPIO_4_14                  MXS_IOMUX_PAD_NAKED(4, 14, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET0_CRS__GPIO_4_15                  MXS_IOMUX_PAD_NAKED(4, 15, PAD_MUXSEL_GPIO)
+#define MX28_PAD_ENET_CLK__GPIO_4_16                   MXS_IOMUX_PAD_NAKED(4, 16, PAD_MUXSEL_GPIO)
+#define MX28_PAD_JTAG_RTCK__GPIO_4_20                  MXS_IOMUX_PAD_NAKED(4, 20, PAD_MUXSEL_GPIO)
+
+#endif /* __MACH_IOMUX_MX28_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/iomux.h b/arch/arm/include/asm/arch-mx28/iomux.h
new file mode 100644 (file)
index 0000000..7abdf58
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH,
+ *                     <armlinux@phytec.de>
+ * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef __MACH_MXS_IOMUX_H__
+#define __MACH_MXS_IOMUX_H__
+
+/*
+ * IOMUX/PAD Bit field definitions
+ *
+ * PAD_BANK:            0..2   (3)
+ * PAD_PIN:             3..7   (5)
+ * PAD_MUXSEL:          8..9   (2)
+ * PAD_MA:             10..11  (2)
+ * PAD_MA_VALID:       12      (1)
+ * PAD_VOL:            13      (1)
+ * PAD_VOL_VALID:      14      (1)
+ * PAD_PULL:           15      (1)
+ * PAD_PULL_VALID:     16      (1)
+ * RESERVED:           17..31  (15)
+ */
+typedef u32 iomux_cfg_t;
+
+#define MXS_PAD_BANK_SHIFT     0
+#define MXS_PAD_BANK_MASK      ((iomux_cfg_t)0x7 << MXS_PAD_BANK_SHIFT)
+#define MXS_PAD_PIN_SHIFT      3
+#define MXS_PAD_PIN_MASK       ((iomux_cfg_t)0x1f << MXS_PAD_PIN_SHIFT)
+#define MXS_PAD_MUXSEL_SHIFT   8
+#define MXS_PAD_MUXSEL_MASK    ((iomux_cfg_t)0x3 << MXS_PAD_MUXSEL_SHIFT)
+#define MXS_PAD_MA_SHIFT       10
+#define MXS_PAD_MA_MASK                ((iomux_cfg_t)0x3 << MXS_PAD_MA_SHIFT)
+#define MXS_PAD_MA_VALID_SHIFT 12
+#define MXS_PAD_MA_VALID_MASK  ((iomux_cfg_t)0x1 << MXS_PAD_MA_VALID_SHIFT)
+#define MXS_PAD_VOL_SHIFT      13
+#define MXS_PAD_VOL_MASK       ((iomux_cfg_t)0x1 << MXS_PAD_VOL_SHIFT)
+#define MXS_PAD_VOL_VALID_SHIFT        14
+#define MXS_PAD_VOL_VALID_MASK ((iomux_cfg_t)0x1 << MXS_PAD_VOL_VALID_SHIFT)
+#define MXS_PAD_PULL_SHIFT     15
+#define MXS_PAD_PULL_MASK      ((iomux_cfg_t)0x1 << MXS_PAD_PULL_SHIFT)
+#define MXS_PAD_PULL_VALID_SHIFT 16
+#define MXS_PAD_PULL_VALID_MASK        ((iomux_cfg_t)0x1 << MXS_PAD_PULL_VALID_SHIFT)
+
+#define PAD_MUXSEL_0           0
+#define PAD_MUXSEL_1           1
+#define PAD_MUXSEL_2           2
+#define PAD_MUXSEL_GPIO                3
+
+#define PAD_4MA                        0
+#define PAD_8MA                        1
+#define PAD_12MA               2
+#define PAD_16MA               3
+
+#define PAD_1V8                        0
+#define PAD_3V3                        1
+
+#define PAD_NOPULL             0
+#define PAD_PULLUP             1
+
+#define MXS_PAD_4MA    ((PAD_4MA << MXS_PAD_MA_SHIFT) | \
+                                       MXS_PAD_MA_VALID_MASK)
+#define MXS_PAD_8MA    ((PAD_8MA << MXS_PAD_MA_SHIFT) | \
+                                       MXS_PAD_MA_VALID_MASK)
+#define MXS_PAD_12MA   ((PAD_12MA << MXS_PAD_MA_SHIFT) | \
+                                       MXS_PAD_MA_VALID_MASK)
+#define MXS_PAD_16MA   ((PAD_16MA << MXS_PAD_MA_SHIFT) | \
+                                       MXS_PAD_MA_VALID_MASK)
+
+#define MXS_PAD_1V8    ((PAD_1V8 << MXS_PAD_VOL_SHIFT) | \
+                                       MXS_PAD_VOL_VALID_MASK)
+#define MXS_PAD_3V3    ((PAD_3V3 << MXS_PAD_VOL_SHIFT) | \
+                                       MXS_PAD_VOL_VALID_MASK)
+
+#define MXS_PAD_NOPULL ((PAD_NOPULL << MXS_PAD_PULL_SHIFT) | \
+                                       MXS_PAD_PULL_VALID_MASK)
+#define MXS_PAD_PULLUP ((PAD_PULLUP << MXS_PAD_PULL_SHIFT) | \
+                                       MXS_PAD_PULL_VALID_MASK)
+
+/* generic pad control used in most cases */
+#define MXS_PAD_CTRL   (MXS_PAD_4MA | MXS_PAD_3V3 | MXS_PAD_NOPULL)
+
+#define MXS_IOMUX_PAD(_bank, _pin, _muxsel, _ma, _vol, _pull)          \
+               (((iomux_cfg_t)(_bank) << MXS_PAD_BANK_SHIFT) |         \
+               ((iomux_cfg_t)(_pin) << MXS_PAD_PIN_SHIFT) |            \
+               ((iomux_cfg_t)(_muxsel) << MXS_PAD_MUXSEL_SHIFT) |      \
+               ((iomux_cfg_t)(_ma) << MXS_PAD_MA_SHIFT) |              \
+               ((iomux_cfg_t)(_vol) << MXS_PAD_VOL_SHIFT) |            \
+               ((iomux_cfg_t)(_pull) << MXS_PAD_PULL_SHIFT))
+
+/*
+ * A pad becomes naked, when none of mA, vol or pull
+ * validity bits is set.
+ */
+#define MXS_IOMUX_PAD_NAKED(_bank, _pin, _muxsel) \
+               MXS_IOMUX_PAD(_bank, _pin, _muxsel, 0, 0, 0)
+
+static inline unsigned int PAD_BANK(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_BANK_MASK) >> MXS_PAD_BANK_SHIFT;
+}
+
+static inline unsigned int PAD_PIN(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_PIN_MASK) >> MXS_PAD_PIN_SHIFT;
+}
+
+static inline unsigned int PAD_MUXSEL(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_MUXSEL_MASK) >> MXS_PAD_MUXSEL_SHIFT;
+}
+
+static inline unsigned int PAD_MA(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_MA_MASK) >> MXS_PAD_MA_SHIFT;
+}
+
+static inline unsigned int PAD_MA_VALID(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_MA_VALID_MASK) >> MXS_PAD_MA_VALID_SHIFT;
+}
+
+static inline unsigned int PAD_VOL(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_VOL_MASK) >> MXS_PAD_VOL_SHIFT;
+}
+
+static inline unsigned int PAD_VOL_VALID(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_VOL_VALID_MASK) >> MXS_PAD_VOL_VALID_SHIFT;
+}
+
+static inline unsigned int PAD_PULL(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_PULL_MASK) >> MXS_PAD_PULL_SHIFT;
+}
+
+static inline unsigned int PAD_PULL_VALID(iomux_cfg_t pad)
+{
+       return (pad & MXS_PAD_PULL_VALID_MASK) >> MXS_PAD_PULL_VALID_SHIFT;
+}
+
+/*
+ * configures a single pad in the iomuxer
+ */
+int mxs_iomux_setup_pad(iomux_cfg_t pad);
+
+/*
+ * configures multiple pads
+ * convenient way to call the above function with tables
+ */
+int mxs_iomux_setup_multiple_pads(const iomux_cfg_t *pad_list, unsigned count);
+
+#endif /* __MACH_MXS_IOMUX_H__*/
diff --git a/arch/arm/include/asm/arch-mx28/regs-apbh.h b/arch/arm/include/asm/arch-mx28/regs-apbh.h
new file mode 100644 (file)
index 0000000..a7fa1ec
--- /dev/null
@@ -0,0 +1,466 @@
+/*
+ * Freescale i.MX28 APBH Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __REGS_APBH_H__
+#define __REGS_APBH_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_apbh_regs {
+       mx28_reg(hw_apbh_ctrl0)
+       mx28_reg(hw_apbh_ctrl1)
+       mx28_reg(hw_apbh_ctrl2)
+       mx28_reg(hw_apbh_channel_ctrl)
+       mx28_reg(hw_apbh_devsel)
+       mx28_reg(hw_apbh_dma_burst_size)
+       mx28_reg(hw_apbh_debug)
+
+       uint32_t        reserved[36];
+
+       union {
+       struct {
+               mx28_reg(hw_apbh_ch_curcmdar)
+               mx28_reg(hw_apbh_ch_nxtcmdar)
+               mx28_reg(hw_apbh_ch_cmd)
+               mx28_reg(hw_apbh_ch_bar)
+               mx28_reg(hw_apbh_ch_sema)
+               mx28_reg(hw_apbh_ch_debug1)
+               mx28_reg(hw_apbh_ch_debug2)
+       } ch[16];
+       struct {
+               mx28_reg(hw_apbh_ch0_curcmdar)
+               mx28_reg(hw_apbh_ch0_nxtcmdar)
+               mx28_reg(hw_apbh_ch0_cmd)
+               mx28_reg(hw_apbh_ch0_bar)
+               mx28_reg(hw_apbh_ch0_sema)
+               mx28_reg(hw_apbh_ch0_debug1)
+               mx28_reg(hw_apbh_ch0_debug2)
+               mx28_reg(hw_apbh_ch1_curcmdar)
+               mx28_reg(hw_apbh_ch1_nxtcmdar)
+               mx28_reg(hw_apbh_ch1_cmd)
+               mx28_reg(hw_apbh_ch1_bar)
+               mx28_reg(hw_apbh_ch1_sema)
+               mx28_reg(hw_apbh_ch1_debug1)
+               mx28_reg(hw_apbh_ch1_debug2)
+               mx28_reg(hw_apbh_ch2_curcmdar)
+               mx28_reg(hw_apbh_ch2_nxtcmdar)
+               mx28_reg(hw_apbh_ch2_cmd)
+               mx28_reg(hw_apbh_ch2_bar)
+               mx28_reg(hw_apbh_ch2_sema)
+               mx28_reg(hw_apbh_ch2_debug1)
+               mx28_reg(hw_apbh_ch2_debug2)
+               mx28_reg(hw_apbh_ch3_curcmdar)
+               mx28_reg(hw_apbh_ch3_nxtcmdar)
+               mx28_reg(hw_apbh_ch3_cmd)
+               mx28_reg(hw_apbh_ch3_bar)
+               mx28_reg(hw_apbh_ch3_sema)
+               mx28_reg(hw_apbh_ch3_debug1)
+               mx28_reg(hw_apbh_ch3_debug2)
+               mx28_reg(hw_apbh_ch4_curcmdar)
+               mx28_reg(hw_apbh_ch4_nxtcmdar)
+               mx28_reg(hw_apbh_ch4_cmd)
+               mx28_reg(hw_apbh_ch4_bar)
+               mx28_reg(hw_apbh_ch4_sema)
+               mx28_reg(hw_apbh_ch4_debug1)
+               mx28_reg(hw_apbh_ch4_debug2)
+               mx28_reg(hw_apbh_ch5_curcmdar)
+               mx28_reg(hw_apbh_ch5_nxtcmdar)
+               mx28_reg(hw_apbh_ch5_cmd)
+               mx28_reg(hw_apbh_ch5_bar)
+               mx28_reg(hw_apbh_ch5_sema)
+               mx28_reg(hw_apbh_ch5_debug1)
+               mx28_reg(hw_apbh_ch5_debug2)
+               mx28_reg(hw_apbh_ch6_curcmdar)
+               mx28_reg(hw_apbh_ch6_nxtcmdar)
+               mx28_reg(hw_apbh_ch6_cmd)
+               mx28_reg(hw_apbh_ch6_bar)
+               mx28_reg(hw_apbh_ch6_sema)
+               mx28_reg(hw_apbh_ch6_debug1)
+               mx28_reg(hw_apbh_ch6_debug2)
+               mx28_reg(hw_apbh_ch7_curcmdar)
+               mx28_reg(hw_apbh_ch7_nxtcmdar)
+               mx28_reg(hw_apbh_ch7_cmd)
+               mx28_reg(hw_apbh_ch7_bar)
+               mx28_reg(hw_apbh_ch7_sema)
+               mx28_reg(hw_apbh_ch7_debug1)
+               mx28_reg(hw_apbh_ch7_debug2)
+               mx28_reg(hw_apbh_ch8_curcmdar)
+               mx28_reg(hw_apbh_ch8_nxtcmdar)
+               mx28_reg(hw_apbh_ch8_cmd)
+               mx28_reg(hw_apbh_ch8_bar)
+               mx28_reg(hw_apbh_ch8_sema)
+               mx28_reg(hw_apbh_ch8_debug1)
+               mx28_reg(hw_apbh_ch8_debug2)
+               mx28_reg(hw_apbh_ch9_curcmdar)
+               mx28_reg(hw_apbh_ch9_nxtcmdar)
+               mx28_reg(hw_apbh_ch9_cmd)
+               mx28_reg(hw_apbh_ch9_bar)
+               mx28_reg(hw_apbh_ch9_sema)
+               mx28_reg(hw_apbh_ch9_debug1)
+               mx28_reg(hw_apbh_ch9_debug2)
+               mx28_reg(hw_apbh_ch10_curcmdar)
+               mx28_reg(hw_apbh_ch10_nxtcmdar)
+               mx28_reg(hw_apbh_ch10_cmd)
+               mx28_reg(hw_apbh_ch10_bar)
+               mx28_reg(hw_apbh_ch10_sema)
+               mx28_reg(hw_apbh_ch10_debug1)
+               mx28_reg(hw_apbh_ch10_debug2)
+               mx28_reg(hw_apbh_ch11_curcmdar)
+               mx28_reg(hw_apbh_ch11_nxtcmdar)
+               mx28_reg(hw_apbh_ch11_cmd)
+               mx28_reg(hw_apbh_ch11_bar)
+               mx28_reg(hw_apbh_ch11_sema)
+               mx28_reg(hw_apbh_ch11_debug1)
+               mx28_reg(hw_apbh_ch11_debug2)
+               mx28_reg(hw_apbh_ch12_curcmdar)
+               mx28_reg(hw_apbh_ch12_nxtcmdar)
+               mx28_reg(hw_apbh_ch12_cmd)
+               mx28_reg(hw_apbh_ch12_bar)
+               mx28_reg(hw_apbh_ch12_sema)
+               mx28_reg(hw_apbh_ch12_debug1)
+               mx28_reg(hw_apbh_ch12_debug2)
+               mx28_reg(hw_apbh_ch13_curcmdar)
+               mx28_reg(hw_apbh_ch13_nxtcmdar)
+               mx28_reg(hw_apbh_ch13_cmd)
+               mx28_reg(hw_apbh_ch13_bar)
+               mx28_reg(hw_apbh_ch13_sema)
+               mx28_reg(hw_apbh_ch13_debug1)
+               mx28_reg(hw_apbh_ch13_debug2)
+               mx28_reg(hw_apbh_ch14_curcmdar)
+               mx28_reg(hw_apbh_ch14_nxtcmdar)
+               mx28_reg(hw_apbh_ch14_cmd)
+               mx28_reg(hw_apbh_ch14_bar)
+               mx28_reg(hw_apbh_ch14_sema)
+               mx28_reg(hw_apbh_ch14_debug1)
+               mx28_reg(hw_apbh_ch14_debug2)
+               mx28_reg(hw_apbh_ch15_curcmdar)
+               mx28_reg(hw_apbh_ch15_nxtcmdar)
+               mx28_reg(hw_apbh_ch15_cmd)
+               mx28_reg(hw_apbh_ch15_bar)
+               mx28_reg(hw_apbh_ch15_sema)
+               mx28_reg(hw_apbh_ch15_debug1)
+               mx28_reg(hw_apbh_ch15_debug2)
+       };
+       };
+       mx28_reg(hw_apbh_version)
+};
+#endif
+
+#define        APBH_CTRL0_SFTRST                               (1 << 31)
+#define        APBH_CTRL0_CLKGATE                              (1 << 30)
+#define        APBH_CTRL0_AHB_BURST8_EN                        (1 << 29)
+#define        APBH_CTRL0_APB_BURST_EN                         (1 << 28)
+#define        APBH_CTRL0_RSVD0_MASK                           (0xfff << 16)
+#define        APBH_CTRL0_RSVD0_OFFSET                         16
+#define        APBH_CTRL0_CLKGATE_CHANNEL_MASK                 0xffff
+#define        APBH_CTRL0_CLKGATE_CHANNEL_OFFSET               0
+#define        APBH_CTRL0_CLKGATE_CHANNEL_SSP0                 0x0001
+#define        APBH_CTRL0_CLKGATE_CHANNEL_SSP1                 0x0002
+#define        APBH_CTRL0_CLKGATE_CHANNEL_SSP2                 0x0004
+#define        APBH_CTRL0_CLKGATE_CHANNEL_SSP3                 0x0008
+#define        APBH_CTRL0_CLKGATE_CHANNEL_NAND0                0x0010
+#define        APBH_CTRL0_CLKGATE_CHANNEL_NAND1                0x0020
+#define        APBH_CTRL0_CLKGATE_CHANNEL_NAND2                0x0040
+#define        APBH_CTRL0_CLKGATE_CHANNEL_NAND3                0x0080
+#define        APBH_CTRL0_CLKGATE_CHANNEL_NAND4                0x0100
+#define        APBH_CTRL0_CLKGATE_CHANNEL_NAND5                0x0200
+#define        APBH_CTRL0_CLKGATE_CHANNEL_NAND6                0x0400
+#define        APBH_CTRL0_CLKGATE_CHANNEL_NAND7                0x0800
+#define        APBH_CTRL0_CLKGATE_CHANNEL_HSADC                0x1000
+#define        APBH_CTRL0_CLKGATE_CHANNEL_LCDIF                0x2000
+
+#define        APBH_CTRL1_CH15_CMDCMPLT_IRQ_EN                 (1 << 31)
+#define        APBH_CTRL1_CH14_CMDCMPLT_IRQ_EN                 (1 << 30)
+#define        APBH_CTRL1_CH13_CMDCMPLT_IRQ_EN                 (1 << 29)
+#define        APBH_CTRL1_CH12_CMDCMPLT_IRQ_EN                 (1 << 28)
+#define        APBH_CTRL1_CH11_CMDCMPLT_IRQ_EN                 (1 << 27)
+#define        APBH_CTRL1_CH10_CMDCMPLT_IRQ_EN                 (1 << 26)
+#define        APBH_CTRL1_CH9_CMDCMPLT_IRQ_EN                  (1 << 25)
+#define        APBH_CTRL1_CH8_CMDCMPLT_IRQ_EN                  (1 << 24)
+#define        APBH_CTRL1_CH7_CMDCMPLT_IRQ_EN                  (1 << 23)
+#define        APBH_CTRL1_CH6_CMDCMPLT_IRQ_EN                  (1 << 22)
+#define        APBH_CTRL1_CH5_CMDCMPLT_IRQ_EN                  (1 << 21)
+#define        APBH_CTRL1_CH4_CMDCMPLT_IRQ_EN                  (1 << 20)
+#define        APBH_CTRL1_CH3_CMDCMPLT_IRQ_EN                  (1 << 19)
+#define        APBH_CTRL1_CH2_CMDCMPLT_IRQ_EN                  (1 << 18)
+#define        APBH_CTRL1_CH1_CMDCMPLT_IRQ_EN                  (1 << 17)
+#define        APBH_CTRL1_CH0_CMDCMPLT_IRQ_EN                  (1 << 16)
+#define        APBH_CTRL1_CH_CMDCMPLT_IRQ_EN_OFFSET            16
+#define        APBH_CTRL1_CH_CMDCMPLT_IRQ_EN_MASK              (0xffff << 16)
+#define        APBH_CTRL1_CH15_CMDCMPLT_IRQ                    (1 << 15)
+#define        APBH_CTRL1_CH14_CMDCMPLT_IRQ                    (1 << 14)
+#define        APBH_CTRL1_CH13_CMDCMPLT_IRQ                    (1 << 13)
+#define        APBH_CTRL1_CH12_CMDCMPLT_IRQ                    (1 << 12)
+#define        APBH_CTRL1_CH11_CMDCMPLT_IRQ                    (1 << 11)
+#define        APBH_CTRL1_CH10_CMDCMPLT_IRQ                    (1 << 10)
+#define        APBH_CTRL1_CH9_CMDCMPLT_IRQ                     (1 << 9)
+#define        APBH_CTRL1_CH8_CMDCMPLT_IRQ                     (1 << 8)
+#define        APBH_CTRL1_CH7_CMDCMPLT_IRQ                     (1 << 7)
+#define        APBH_CTRL1_CH6_CMDCMPLT_IRQ                     (1 << 6)
+#define        APBH_CTRL1_CH5_CMDCMPLT_IRQ                     (1 << 5)
+#define        APBH_CTRL1_CH4_CMDCMPLT_IRQ                     (1 << 4)
+#define        APBH_CTRL1_CH3_CMDCMPLT_IRQ                     (1 << 3)
+#define        APBH_CTRL1_CH2_CMDCMPLT_IRQ                     (1 << 2)
+#define        APBH_CTRL1_CH1_CMDCMPLT_IRQ                     (1 << 1)
+#define        APBH_CTRL1_CH0_CMDCMPLT_IRQ                     (1 << 0)
+
+#define        APBH_CTRL2_CH15_ERROR_STATUS                    (1 << 31)
+#define        APBH_CTRL2_CH14_ERROR_STATUS                    (1 << 30)
+#define        APBH_CTRL2_CH13_ERROR_STATUS                    (1 << 29)
+#define        APBH_CTRL2_CH12_ERROR_STATUS                    (1 << 28)
+#define        APBH_CTRL2_CH11_ERROR_STATUS                    (1 << 27)
+#define        APBH_CTRL2_CH10_ERROR_STATUS                    (1 << 26)
+#define        APBH_CTRL2_CH9_ERROR_STATUS                     (1 << 25)
+#define        APBH_CTRL2_CH8_ERROR_STATUS                     (1 << 24)
+#define        APBH_CTRL2_CH7_ERROR_STATUS                     (1 << 23)
+#define        APBH_CTRL2_CH6_ERROR_STATUS                     (1 << 22)
+#define        APBH_CTRL2_CH5_ERROR_STATUS                     (1 << 21)
+#define        APBH_CTRL2_CH4_ERROR_STATUS                     (1 << 20)
+#define        APBH_CTRL2_CH3_ERROR_STATUS                     (1 << 19)
+#define        APBH_CTRL2_CH2_ERROR_STATUS                     (1 << 18)
+#define        APBH_CTRL2_CH1_ERROR_STATUS                     (1 << 17)
+#define        APBH_CTRL2_CH0_ERROR_STATUS                     (1 << 16)
+#define        APBH_CTRL2_CH15_ERROR_IRQ                       (1 << 15)
+#define        APBH_CTRL2_CH14_ERROR_IRQ                       (1 << 14)
+#define        APBH_CTRL2_CH13_ERROR_IRQ                       (1 << 13)
+#define        APBH_CTRL2_CH12_ERROR_IRQ                       (1 << 12)
+#define        APBH_CTRL2_CH11_ERROR_IRQ                       (1 << 11)
+#define        APBH_CTRL2_CH10_ERROR_IRQ                       (1 << 10)
+#define        APBH_CTRL2_CH9_ERROR_IRQ                        (1 << 9)
+#define        APBH_CTRL2_CH8_ERROR_IRQ                        (1 << 8)
+#define        APBH_CTRL2_CH7_ERROR_IRQ                        (1 << 7)
+#define        APBH_CTRL2_CH6_ERROR_IRQ                        (1 << 6)
+#define        APBH_CTRL2_CH5_ERROR_IRQ                        (1 << 5)
+#define        APBH_CTRL2_CH4_ERROR_IRQ                        (1 << 4)
+#define        APBH_CTRL2_CH3_ERROR_IRQ                        (1 << 3)
+#define        APBH_CTRL2_CH2_ERROR_IRQ                        (1 << 2)
+#define        APBH_CTRL2_CH1_ERROR_IRQ                        (1 << 1)
+#define        APBH_CTRL2_CH0_ERROR_IRQ                        (1 << 0)
+
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_MASK            (0xffff << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_OFFSET          16
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_SSP0            (0x0001 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_SSP1            (0x0002 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_SSP2            (0x0004 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_SSP3            (0x0008 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_NAND0           (0x0010 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_NAND1           (0x0020 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_NAND2           (0x0040 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_NAND3           (0x0080 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_NAND4           (0x0100 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_NAND5           (0x0200 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_NAND6           (0x0400 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_NAND7           (0x0800 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_HSADC           (0x1000 << 16)
+#define        APBH_CHANNEL_CTRL_RESET_CHANNEL_LCDIF           (0x2000 << 16)
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_MASK           0xffff
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_OFFSET         0
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_SSP0           0x0001
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_SSP1           0x0002
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_SSP2           0x0004
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_SSP3           0x0008
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_NAND0          0x0010
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_NAND1          0x0020
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_NAND2          0x0040
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_NAND3          0x0080
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_NAND4          0x0100
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_NAND5          0x0200
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_NAND6          0x0400
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_NAND7          0x0800
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_HSADC          0x1000
+#define        APBH_CHANNEL_CTRL_FREEZE_CHANNEL_LCDIF          0x2000
+
+#define        APBH_DEVSEL_CH15_MASK                           (0x3 << 30)
+#define        APBH_DEVSEL_CH15_OFFSET                         30
+#define        APBH_DEVSEL_CH14_MASK                           (0x3 << 28)
+#define        APBH_DEVSEL_CH14_OFFSET                         28
+#define        APBH_DEVSEL_CH13_MASK                           (0x3 << 26)
+#define        APBH_DEVSEL_CH13_OFFSET                         26
+#define        APBH_DEVSEL_CH12_MASK                           (0x3 << 24)
+#define        APBH_DEVSEL_CH12_OFFSET                         24
+#define        APBH_DEVSEL_CH11_MASK                           (0x3 << 22)
+#define        APBH_DEVSEL_CH11_OFFSET                         22
+#define        APBH_DEVSEL_CH10_MASK                           (0x3 << 20)
+#define        APBH_DEVSEL_CH10_OFFSET                         20
+#define        APBH_DEVSEL_CH9_MASK                            (0x3 << 18)
+#define        APBH_DEVSEL_CH9_OFFSET                          18
+#define        APBH_DEVSEL_CH8_MASK                            (0x3 << 16)
+#define        APBH_DEVSEL_CH8_OFFSET                          16
+#define        APBH_DEVSEL_CH7_MASK                            (0x3 << 14)
+#define        APBH_DEVSEL_CH7_OFFSET                          14
+#define        APBH_DEVSEL_CH6_MASK                            (0x3 << 12)
+#define        APBH_DEVSEL_CH6_OFFSET                          12
+#define        APBH_DEVSEL_CH5_MASK                            (0x3 << 10)
+#define        APBH_DEVSEL_CH5_OFFSET                          10
+#define        APBH_DEVSEL_CH4_MASK                            (0x3 << 8)
+#define        APBH_DEVSEL_CH4_OFFSET                          8
+#define        APBH_DEVSEL_CH3_MASK                            (0x3 << 6)
+#define        APBH_DEVSEL_CH3_OFFSET                          6
+#define        APBH_DEVSEL_CH2_MASK                            (0x3 << 4)
+#define        APBH_DEVSEL_CH2_OFFSET                          4
+#define        APBH_DEVSEL_CH1_MASK                            (0x3 << 2)
+#define        APBH_DEVSEL_CH1_OFFSET                          2
+#define        APBH_DEVSEL_CH0_MASK                            (0x3 << 0)
+#define        APBH_DEVSEL_CH0_OFFSET                          0
+
+#define        APBH_DMA_BURST_SIZE_CH15_MASK                   (0x3 << 30)
+#define        APBH_DMA_BURST_SIZE_CH15_OFFSET                 30
+#define        APBH_DMA_BURST_SIZE_CH14_MASK                   (0x3 << 28)
+#define        APBH_DMA_BURST_SIZE_CH14_OFFSET                 28
+#define        APBH_DMA_BURST_SIZE_CH13_MASK                   (0x3 << 26)
+#define        APBH_DMA_BURST_SIZE_CH13_OFFSET                 26
+#define        APBH_DMA_BURST_SIZE_CH12_MASK                   (0x3 << 24)
+#define        APBH_DMA_BURST_SIZE_CH12_OFFSET                 24
+#define        APBH_DMA_BURST_SIZE_CH11_MASK                   (0x3 << 22)
+#define        APBH_DMA_BURST_SIZE_CH11_OFFSET                 22
+#define        APBH_DMA_BURST_SIZE_CH10_MASK                   (0x3 << 20)
+#define        APBH_DMA_BURST_SIZE_CH10_OFFSET                 20
+#define        APBH_DMA_BURST_SIZE_CH9_MASK                    (0x3 << 18)
+#define        APBH_DMA_BURST_SIZE_CH9_OFFSET                  18
+#define        APBH_DMA_BURST_SIZE_CH8_MASK                    (0x3 << 16)
+#define        APBH_DMA_BURST_SIZE_CH8_OFFSET                  16
+#define        APBH_DMA_BURST_SIZE_CH8_BURST0                  (0x0 << 16)
+#define        APBH_DMA_BURST_SIZE_CH8_BURST4                  (0x1 << 16)
+#define        APBH_DMA_BURST_SIZE_CH8_BURST8                  (0x2 << 16)
+#define        APBH_DMA_BURST_SIZE_CH7_MASK                    (0x3 << 14)
+#define        APBH_DMA_BURST_SIZE_CH7_OFFSET                  14
+#define        APBH_DMA_BURST_SIZE_CH6_MASK                    (0x3 << 12)
+#define        APBH_DMA_BURST_SIZE_CH6_OFFSET                  12
+#define        APBH_DMA_BURST_SIZE_CH5_MASK                    (0x3 << 10)
+#define        APBH_DMA_BURST_SIZE_CH5_OFFSET                  10
+#define        APBH_DMA_BURST_SIZE_CH4_MASK                    (0x3 << 8)
+#define        APBH_DMA_BURST_SIZE_CH4_OFFSET                  8
+#define        APBH_DMA_BURST_SIZE_CH3_MASK                    (0x3 << 6)
+#define        APBH_DMA_BURST_SIZE_CH3_OFFSET                  6
+#define        APBH_DMA_BURST_SIZE_CH3_BURST0                  (0x0 << 6)
+#define        APBH_DMA_BURST_SIZE_CH3_BURST4                  (0x1 << 6)
+#define        APBH_DMA_BURST_SIZE_CH3_BURST8                  (0x2 << 6)
+
+#define        APBH_DMA_BURST_SIZE_CH2_MASK                    (0x3 << 4)
+#define        APBH_DMA_BURST_SIZE_CH2_OFFSET                  4
+#define        APBH_DMA_BURST_SIZE_CH2_BURST0                  (0x0 << 4)
+#define        APBH_DMA_BURST_SIZE_CH2_BURST4                  (0x1 << 4)
+#define        APBH_DMA_BURST_SIZE_CH2_BURST8                  (0x2 << 4)
+#define        APBH_DMA_BURST_SIZE_CH1_MASK                    (0x3 << 2)
+#define        APBH_DMA_BURST_SIZE_CH1_OFFSET                  2
+#define        APBH_DMA_BURST_SIZE_CH1_BURST0                  (0x0 << 2)
+#define        APBH_DMA_BURST_SIZE_CH1_BURST4                  (0x1 << 2)
+#define        APBH_DMA_BURST_SIZE_CH1_BURST8                  (0x2 << 2)
+
+#define        APBH_DMA_BURST_SIZE_CH0_MASK                    0x3
+#define        APBH_DMA_BURST_SIZE_CH0_OFFSET                  0
+#define        APBH_DMA_BURST_SIZE_CH0_BURST0                  0x0
+#define        APBH_DMA_BURST_SIZE_CH0_BURST4                  0x1
+#define        APBH_DMA_BURST_SIZE_CH0_BURST8                  0x2
+
+#define        APBH_DEBUG_GPMI_ONE_FIFO                        (1 << 0)
+
+#define        APBH_CHn_CURCMDAR_CMD_ADDR_MASK                 0xffffffff
+#define        APBH_CHn_CURCMDAR_CMD_ADDR_OFFSET               0
+
+#define        APBH_CHn_NXTCMDAR_CMD_ADDR_MASK                 0xffffffff
+#define        APBH_CHn_NXTCMDAR_CMD_ADDR_OFFSET               0
+
+#define        APBH_CHn_CMD_XFER_COUNT_MASK                    (0xffff << 16)
+#define        APBH_CHn_CMD_XFER_COUNT_OFFSET                  16
+#define        APBH_CHn_CMD_CMDWORDS_MASK                      (0xf << 12)
+#define        APBH_CHn_CMD_CMDWORDS_OFFSET                    12
+#define        APBH_CHn_CMD_HALTONTERMINATE                    (1 << 8)
+#define        APBH_CHn_CMD_WAIT4ENDCMD                        (1 << 7)
+#define        APBH_CHn_CMD_SEMAPHORE                          (1 << 6)
+#define        APBH_CHn_CMD_NANDWAIT4READY                     (1 << 5)
+#define        APBH_CHn_CMD_NANDLOCK                           (1 << 4)
+#define        APBH_CHn_CMD_IRQONCMPLT                         (1 << 3)
+#define        APBH_CHn_CMD_CHAIN                              (1 << 2)
+#define        APBH_CHn_CMD_COMMAND_MASK                       0x3
+#define        APBH_CHn_CMD_COMMAND_OFFSET                     0
+#define        APBH_CHn_CMD_COMMAND_NO_DMA_XFER                0x0
+#define        APBH_CHn_CMD_COMMAND_DMA_WRITE                  0x1
+#define        APBH_CHn_CMD_COMMAND_DMA_READ                   0x2
+#define        APBH_CHn_CMD_COMMAND_DMA_SENSE                  0x3
+
+#define        APBH_CHn_BAR_ADDRESS_MASK                       0xffffffff
+#define        APBH_CHn_BAR_ADDRESS_OFFSET                     0
+
+#define        APBH_CHn_SEMA_RSVD2_MASK                        (0xff << 24)
+#define        APBH_CHn_SEMA_RSVD2_OFFSET                      24
+#define        APBH_CHn_SEMA_PHORE_MASK                        (0xff << 16)
+#define        APBH_CHn_SEMA_PHORE_OFFSET                      16
+#define        APBH_CHn_SEMA_RSVD1_MASK                        (0xff << 8)
+#define        APBH_CHn_SEMA_RSVD1_OFFSET                      8
+#define        APBH_CHn_SEMA_INCREMENT_SEMA_MASK               (0xff << 0)
+#define        APBH_CHn_SEMA_INCREMENT_SEMA_OFFSET             0
+
+#define        APBH_CHn_DEBUG1_REQ                             (1 << 31)
+#define        APBH_CHn_DEBUG1_BURST                           (1 << 30)
+#define        APBH_CHn_DEBUG1_KICK                            (1 << 29)
+#define        APBH_CHn_DEBUG1_END                             (1 << 28)
+#define        APBH_CHn_DEBUG1_SENSE                           (1 << 27)
+#define        APBH_CHn_DEBUG1_READY                           (1 << 26)
+#define        APBH_CHn_DEBUG1_LOCK                            (1 << 25)
+#define        APBH_CHn_DEBUG1_NEXTCMDADDRVALID                (1 << 24)
+#define        APBH_CHn_DEBUG1_RD_FIFO_EMPTY                   (1 << 23)
+#define        APBH_CHn_DEBUG1_RD_FIFO_FULL                    (1 << 22)
+#define        APBH_CHn_DEBUG1_WR_FIFO_EMPTY                   (1 << 21)
+#define        APBH_CHn_DEBUG1_WR_FIFO_FULL                    (1 << 20)
+#define        APBH_CHn_DEBUG1_RSVD1_MASK                      (0x7fff << 5)
+#define        APBH_CHn_DEBUG1_RSVD1_OFFSET                    5
+#define        APBH_CHn_DEBUG1_STATEMACHINE_MASK               0x1f
+#define        APBH_CHn_DEBUG1_STATEMACHINE_OFFSET             0
+#define        APBH_CHn_DEBUG1_STATEMACHINE_IDLE               0x00
+#define        APBH_CHn_DEBUG1_STATEMACHINE_REQ_CMD1           0x01
+#define        APBH_CHn_DEBUG1_STATEMACHINE_REQ_CMD3           0x02
+#define        APBH_CHn_DEBUG1_STATEMACHINE_REQ_CMD2           0x03
+#define        APBH_CHn_DEBUG1_STATEMACHINE_XFER_DECODE        0x04
+#define        APBH_CHn_DEBUG1_STATEMACHINE_REQ_WAIT           0x05
+#define        APBH_CHn_DEBUG1_STATEMACHINE_REQ_CMD4           0x06
+#define        APBH_CHn_DEBUG1_STATEMACHINE_PIO_REQ            0x07
+#define        APBH_CHn_DEBUG1_STATEMACHINE_READ_FLUSH         0x08
+#define        APBH_CHn_DEBUG1_STATEMACHINE_READ_WAIT          0x09
+#define        APBH_CHn_DEBUG1_STATEMACHINE_WRITE              0x0c
+#define        APBH_CHn_DEBUG1_STATEMACHINE_READ_REQ           0x0d
+#define        APBH_CHn_DEBUG1_STATEMACHINE_CHECK_CHAIN        0x0e
+#define        APBH_CHn_DEBUG1_STATEMACHINE_XFER_COMPLETE      0x0f
+#define        APBH_CHn_DEBUG1_STATEMACHINE_TERMINATE          0x14
+#define        APBH_CHn_DEBUG1_STATEMACHINE_WAIT_END           0x15
+#define        APBH_CHn_DEBUG1_STATEMACHINE_WRITE_WAIT         0x1c
+#define        APBH_CHn_DEBUG1_STATEMACHINE_HALT_AFTER_TERM    0x1d
+#define        APBH_CHn_DEBUG1_STATEMACHINE_CHECK_WAIT         0x1e
+#define        APBH_CHn_DEBUG1_STATEMACHINE_WAIT_READY         0x1f
+
+#define        APBH_CHn_DEBUG2_APB_BYTES_MASK                  (0xffff << 16)
+#define        APBH_CHn_DEBUG2_APB_BYTES_OFFSET                16
+#define        APBH_CHn_DEBUG2_AHB_BYTES_MASK                  0xffff
+#define        APBH_CHn_DEBUG2_AHB_BYTES_OFFSET                0
+
+#define        APBH_VERSION_MAJOR_MASK                         (0xff << 24)
+#define        APBH_VERSION_MAJOR_OFFSET                       24
+#define        APBH_VERSION_MINOR_MASK                         (0xff << 16)
+#define        APBH_VERSION_MINOR_OFFSET                       16
+#define        APBH_VERSION_STEP_MASK                          0xffff
+#define        APBH_VERSION_STEP_OFFSET                        0
+
+#endif /* __REGS_APBH_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-base.h b/arch/arm/include/asm/arch-mx28/regs-base.h
new file mode 100644 (file)
index 0000000..dbdcc2b
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Freescale i.MX28 Peripheral Base Addresses
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright (C) 2008 Embedded Alley Solutions Inc.
+ *
+ * (C) Copyright 2009-2010 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_BASE_H__
+#define __MX28_REGS_BASE_H__
+
+/*
+ * Register base address
+ */
+#define        MXS_ICOL_BASE           0x80000000
+#define        MXS_HSADC_BASE          0x80002000
+#define        MXS_APBH_BASE           0x80004000
+#define        MXS_PERFMON_BASE        0x80006000
+#define        MXS_BCH_BASE            0x8000A000
+#define        MXS_GPMI_BASE           0x8000C000
+#define        MXS_SSP0_BASE           0x80010000
+#define        MXS_SSP1_BASE           0x80012000
+#define        MXS_SSP2_BASE           0x80014000
+#define        MXS_SSP3_BASE           0x80016000
+#define        MXS_PINCTRL_BASE        0x80018000
+#define        MXS_DIGCTL_BASE         0x8001C000
+#define        MXS_ETM_BASE            0x80022000
+#define        MXS_APBX_BASE           0x80024000
+#define        MXS_DCP_BASE            0x80028000
+#define        MXS_PXP_BASE            0x8002A000
+#define        MXS_OCOTP_BASE          0x8002C000
+#define        MXS_AXI_AHB0_BASE       0x8002E000
+#define        MXS_LCDIF_BASE          0x80030000
+#define        MXS_CAN0_BASE           0x80032000
+#define        MXS_CAN1_BASE           0x80034000
+#define        MXS_SIMDBG_BASE         0x8003C000
+#define        MXS_SIMGPMISEL_BASE     0x8003C200
+#define        MXS_SIMSSPSEL_BASE      0x8003C300
+#define        MXS_SIMMEMSEL_BASE      0x8003C400
+#define        MXS_GPIOMON_BASE        0x8003C500
+#define        MXS_SIMENET_BASE        0x8003C700
+#define        MXS_ARMJTAG_BASE        0x8003C800
+#define        MXS_CLKCTRL_BASE        0x80040000
+#define        MXS_SAIF0_BASE          0x80042000
+#define        MXS_POWER_BASE          0x80044000
+#define        MXS_SAIF1_BASE          0x80046000
+#define        MXS_LRADC_BASE          0x80050000
+#define        MXS_SPDIF_BASE          0x80054000
+#define        MXS_RTC_BASE            0x80056000
+#define        MXS_I2C0_BASE           0x80058000
+#define        MXS_I2C1_BASE           0x8005A000
+#define        MXS_PWM_BASE            0x80064000
+#define        MXS_TIMROT_BASE         0x80068000
+#define        MXS_UARTAPP0_BASE       0x8006A000
+#define        MXS_UARTAPP1_BASE       0x8006C000
+#define        MXS_UARTAPP2_BASE       0x8006E000
+#define        MXS_UARTAPP3_BASE       0x80070000
+#define        MXS_UARTAPP4_BASE       0x80072000
+#define        MXS_UARTDBG_BASE        0x80074000
+#define        MXS_USBPHY0_BASE        0x8007C000
+#define        MXS_USBPHY1_BASE        0x8007E000
+#define        MXS_USBCTRL0_BASE       0x80080000
+#define        MXS_USBCTRL1_BASE       0x80090000
+#define        MXS_DFLPT_BASE          0x800C0000
+#define        MXS_DRAM_BASE           0x800E0000
+#define        MXS_ENET0_BASE          0x800F0000
+#define        MXS_ENET1_BASE          0x800F4000
+
+#endif /* __MX28_REGS_BASE_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-bch.h b/arch/arm/include/asm/arch-mx28/regs-bch.h
new file mode 100644 (file)
index 0000000..cac0470
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * Freescale i.MX28 BCH Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_BCH_H__
+#define __MX28_REGS_BCH_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_bch_regs {
+       mx28_reg(hw_bch_ctrl)
+       mx28_reg(hw_bch_status0)
+       mx28_reg(hw_bch_mode)
+       mx28_reg(hw_bch_encodeptr)
+       mx28_reg(hw_bch_dataptr)
+       mx28_reg(hw_bch_metaptr)
+
+       uint32_t        reserved[4];
+
+       mx28_reg(hw_bch_layoutselect)
+       mx28_reg(hw_bch_flash0layout0)
+       mx28_reg(hw_bch_flash0layout1)
+       mx28_reg(hw_bch_flash1layout0)
+       mx28_reg(hw_bch_flash1layout1)
+       mx28_reg(hw_bch_flash2layout0)
+       mx28_reg(hw_bch_flash2layout1)
+       mx28_reg(hw_bch_flash3layout0)
+       mx28_reg(hw_bch_flash3layout1)
+       mx28_reg(hw_bch_dbgkesread)
+       mx28_reg(hw_bch_dbgcsferead)
+       mx28_reg(hw_bch_dbgsyndegread)
+       mx28_reg(hw_bch_dbgahbmread)
+       mx28_reg(hw_bch_blockname)
+       mx28_reg(hw_bch_version)
+};
+#endif
+
+#define        BCH_CTRL_SFTRST                                 (1 << 31)
+#define        BCH_CTRL_CLKGATE                                (1 << 30)
+#define        BCH_CTRL_DEBUGSYNDROME                          (1 << 22)
+#define        BCH_CTRL_M2M_LAYOUT_MASK                        (0x3 << 18)
+#define        BCH_CTRL_M2M_LAYOUT_OFFSET                      18
+#define        BCH_CTRL_M2M_ENCODE                             (1 << 17)
+#define        BCH_CTRL_M2M_ENABLE                             (1 << 16)
+#define        BCH_CTRL_DEBUG_STALL_IRQ_EN                     (1 << 10)
+#define        BCH_CTRL_COMPLETE_IRQ_EN                        (1 << 8)
+#define        BCH_CTRL_BM_ERROR_IRQ                           (1 << 3)
+#define        BCH_CTRL_DEBUG_STALL_IRQ                        (1 << 2)
+#define        BCH_CTRL_COMPLETE_IRQ                           (1 << 0)
+
+#define        BCH_STATUS0_HANDLE_MASK                         (0xfff << 20)
+#define        BCH_STATUS0_HANDLE_OFFSET                       20
+#define        BCH_STATUS0_COMPLETED_CE_MASK                   (0xf << 16)
+#define        BCH_STATUS0_COMPLETED_CE_OFFSET                 16
+#define        BCH_STATUS0_STATUS_BLK0_MASK                    (0xff << 8)
+#define        BCH_STATUS0_STATUS_BLK0_OFFSET                  8
+#define        BCH_STATUS0_STATUS_BLK0_ZERO                    (0x00 << 8)
+#define        BCH_STATUS0_STATUS_BLK0_ERROR1                  (0x01 << 8)
+#define        BCH_STATUS0_STATUS_BLK0_ERROR2                  (0x02 << 8)
+#define        BCH_STATUS0_STATUS_BLK0_ERROR3                  (0x03 << 8)
+#define        BCH_STATUS0_STATUS_BLK0_ERROR4                  (0x04 << 8)
+#define        BCH_STATUS0_STATUS_BLK0_UNCORRECTABLE           (0xfe << 8)
+#define        BCH_STATUS0_STATUS_BLK0_ERASED                  (0xff << 8)
+#define        BCH_STATUS0_ALLONES                             (1 << 4)
+#define        BCH_STATUS0_CORRECTED                           (1 << 3)
+#define        BCH_STATUS0_UNCORRECTABLE                       (1 << 2)
+
+#define        BCH_MODE_ERASE_THRESHOLD_MASK                   0xff
+#define        BCH_MODE_ERASE_THRESHOLD_OFFSET                 0
+
+#define        BCH_ENCODEPTR_ADDR_MASK                         0xffffffff
+#define        BCH_ENCODEPTR_ADDR_OFFSET                       0
+
+#define        BCH_DATAPTR_ADDR_MASK                           0xffffffff
+#define        BCH_DATAPTR_ADDR_OFFSET                         0
+
+#define        BCH_METAPTR_ADDR_MASK                           0xffffffff
+#define        BCH_METAPTR_ADDR_OFFSET                         0
+
+#define        BCH_LAYOUTSELECT_CS15_SELECT_MASK               (0x3 << 30)
+#define        BCH_LAYOUTSELECT_CS15_SELECT_OFFSET             30
+#define        BCH_LAYOUTSELECT_CS14_SELECT_MASK               (0x3 << 28)
+#define        BCH_LAYOUTSELECT_CS14_SELECT_OFFSET             28
+#define        BCH_LAYOUTSELECT_CS13_SELECT_MASK               (0x3 << 26)
+#define        BCH_LAYOUTSELECT_CS13_SELECT_OFFSET             26
+#define        BCH_LAYOUTSELECT_CS12_SELECT_MASK               (0x3 << 24)
+#define        BCH_LAYOUTSELECT_CS12_SELECT_OFFSET             24
+#define        BCH_LAYOUTSELECT_CS11_SELECT_MASK               (0x3 << 22)
+#define        BCH_LAYOUTSELECT_CS11_SELECT_OFFSET             22
+#define        BCH_LAYOUTSELECT_CS10_SELECT_MASK               (0x3 << 20)
+#define        BCH_LAYOUTSELECT_CS10_SELECT_OFFSET             20
+#define        BCH_LAYOUTSELECT_CS9_SELECT_MASK                (0x3 << 18)
+#define        BCH_LAYOUTSELECT_CS9_SELECT_OFFSET              18
+#define        BCH_LAYOUTSELECT_CS8_SELECT_MASK                (0x3 << 16)
+#define        BCH_LAYOUTSELECT_CS8_SELECT_OFFSET              16
+#define        BCH_LAYOUTSELECT_CS7_SELECT_MASK                (0x3 << 14)
+#define        BCH_LAYOUTSELECT_CS7_SELECT_OFFSET              14
+#define        BCH_LAYOUTSELECT_CS6_SELECT_MASK                (0x3 << 12)
+#define        BCH_LAYOUTSELECT_CS6_SELECT_OFFSET              12
+#define        BCH_LAYOUTSELECT_CS5_SELECT_MASK                (0x3 << 10)
+#define        BCH_LAYOUTSELECT_CS5_SELECT_OFFSET              10
+#define        BCH_LAYOUTSELECT_CS4_SELECT_MASK                (0x3 << 8)
+#define        BCH_LAYOUTSELECT_CS4_SELECT_OFFSET              8
+#define        BCH_LAYOUTSELECT_CS3_SELECT_MASK                (0x3 << 6)
+#define        BCH_LAYOUTSELECT_CS3_SELECT_OFFSET              6
+#define        BCH_LAYOUTSELECT_CS2_SELECT_MASK                (0x3 << 4)
+#define        BCH_LAYOUTSELECT_CS2_SELECT_OFFSET              4
+#define        BCH_LAYOUTSELECT_CS1_SELECT_MASK                (0x3 << 2)
+#define        BCH_LAYOUTSELECT_CS1_SELECT_OFFSET              2
+#define        BCH_LAYOUTSELECT_CS0_SELECT_MASK                (0x3 << 0)
+#define        BCH_LAYOUTSELECT_CS0_SELECT_OFFSET              0
+
+#define        BCH_FLASHLAYOUT0_NBLOCKS_MASK                   (0xff << 24)
+#define        BCH_FLASHLAYOUT0_NBLOCKS_OFFSET                 24
+#define        BCH_FLASHLAYOUT0_META_SIZE_MASK                 (0xff << 16)
+#define        BCH_FLASHLAYOUT0_META_SIZE_OFFSET               16
+#define        BCH_FLASHLAYOUT0_ECC0_MASK                      (0xf << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_OFFSET                    12
+#define        BCH_FLASHLAYOUT0_ECC0_NONE                      (0x0 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC2                      (0x1 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC4                      (0x2 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC6                      (0x3 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC8                      (0x4 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC10                     (0x5 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC12                     (0x6 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC14                     (0x7 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC16                     (0x8 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC18                     (0x9 << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC20                     (0xa << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC22                     (0xb << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC24                     (0xc << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC26                     (0xd << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC28                     (0xe << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC30                     (0xf << 12)
+#define        BCH_FLASHLAYOUT0_ECC0_ECC32                     (0x10 << 12)
+#define        BCH_FLASHLAYOUT0_GF13_0_GF14_1                  (1 << 10)
+#define        BCH_FLASHLAYOUT0_DATA0_SIZE_MASK                0xfff
+#define        BCH_FLASHLAYOUT0_DATA0_SIZE_OFFSET              0
+
+#define        BCH_FLASHLAYOUT1_PAGE_SIZE_MASK                 (0xffff << 16)
+#define        BCH_FLASHLAYOUT1_PAGE_SIZE_OFFSET               16
+#define        BCH_FLASHLAYOUT1_ECCN_MASK                      (0xf << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_OFFSET                    12
+#define        BCH_FLASHLAYOUT1_ECCN_NONE                      (0x0 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC2                      (0x1 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC4                      (0x2 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC6                      (0x3 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC8                      (0x4 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC10                     (0x5 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC12                     (0x6 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC14                     (0x7 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC16                     (0x8 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC18                     (0x9 << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC20                     (0xa << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC22                     (0xb << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC24                     (0xc << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC26                     (0xd << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC28                     (0xe << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC30                     (0xf << 12)
+#define        BCH_FLASHLAYOUT1_ECCN_ECC32                     (0x10 << 12)
+#define        BCH_FLASHLAYOUT1_GF13_0_GF14_1                  (1 << 10)
+#define        BCH_FLASHLAYOUT1_DATAN_SIZE_MASK                0xfff
+#define        BCH_FLASHLAYOUT1_DATAN_SIZE_OFFSET              0
+
+#define        BCH_DEBUG0_RSVD1_MASK                           (0x1f << 27)
+#define        BCH_DEBUG0_RSVD1_OFFSET                         27
+#define        BCH_DEBUG0_ROM_BIST_ENABLE                      (1 << 26)
+#define        BCH_DEBUG0_ROM_BIST_COMPLETE                    (1 << 25)
+#define        BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL_MASK       (0x1ff << 16)
+#define        BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL_OFFSET     16
+#define        BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL_NORMAL     (0x0 << 16)
+#define        BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL_TEST_MODE  (0x1 << 16)
+#define        BCH_DEBUG0_KES_DEBUG_SHIFT_SYND                 (1 << 15)
+#define        BCH_DEBUG0_KES_DEBUG_PAYLOAD_FLAG               (1 << 14)
+#define        BCH_DEBUG0_KES_DEBUG_MODE4K                     (1 << 13)
+#define        BCH_DEBUG0_KES_DEBUG_KICK                       (1 << 12)
+#define        BCH_DEBUG0_KES_STANDALONE                       (1 << 11)
+#define        BCH_DEBUG0_KES_DEBUG_STEP                       (1 << 10)
+#define        BCH_DEBUG0_KES_DEBUG_STALL                      (1 << 9)
+#define        BCH_DEBUG0_BM_KES_TEST_BYPASS                   (1 << 8)
+#define        BCH_DEBUG0_RSVD0_MASK                           (0x3 << 6)
+#define        BCH_DEBUG0_RSVD0_OFFSET                         6
+#define        BCH_DEBUG0_DEBUG_REG_SELECT_MASK                0x3f
+#define        BCH_DEBUG0_DEBUG_REG_SELECT_OFFSET              0
+
+#define        BCH_DBGKESREAD_VALUES_MASK                      0xffffffff
+#define        BCH_DBGKESREAD_VALUES_OFFSET                    0
+
+#define        BCH_DBGCSFEREAD_VALUES_MASK                     0xffffffff
+#define        BCH_DBGCSFEREAD_VALUES_OFFSET                   0
+
+#define        BCH_DBGSYNDGENREAD_VALUES_MASK                  0xffffffff
+#define        BCH_DBGSYNDGENREAD_VALUES_OFFSET                0
+
+#define        BCH_DBGAHBMREAD_VALUES_MASK                     0xffffffff
+#define        BCH_DBGAHBMREAD_VALUES_OFFSET                   0
+
+#define        BCH_BLOCKNAME_NAME_MASK                         0xffffffff
+#define        BCH_BLOCKNAME_NAME_OFFSET                       0
+
+#define        BCH_VERSION_MAJOR_MASK                          (0xff << 24)
+#define        BCH_VERSION_MAJOR_OFFSET                        24
+#define        BCH_VERSION_MINOR_MASK                          (0xff << 16)
+#define        BCH_VERSION_MINOR_OFFSET                        16
+#define        BCH_VERSION_STEP_MASK                           0xffff
+#define        BCH_VERSION_STEP_OFFSET                         0
+
+#endif /* __MX28_REGS_BCH_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-clkctrl.h b/arch/arm/include/asm/arch-mx28/regs-clkctrl.h
new file mode 100644 (file)
index 0000000..93d0397
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+ * Freescale i.MX28 CLKCTRL Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_CLKCTRL_H__
+#define __MX28_REGS_CLKCTRL_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_clkctrl_regs {
+       mx28_reg(hw_clkctrl_pll0ctrl0)          /* 0x00 */
+       mx28_reg(hw_clkctrl_pll0ctrl1)          /* 0x10 */
+       mx28_reg(hw_clkctrl_pll1ctrl0)          /* 0x20 */
+       mx28_reg(hw_clkctrl_pll1ctrl1)          /* 0x30 */
+       mx28_reg(hw_clkctrl_pll2ctrl0)          /* 0x40 */
+       mx28_reg(hw_clkctrl_cpu)                /* 0x50 */
+       mx28_reg(hw_clkctrl_hbus)               /* 0x60 */
+       mx28_reg(hw_clkctrl_xbus)               /* 0x70 */
+       mx28_reg(hw_clkctrl_xtal)               /* 0x80 */
+       mx28_reg(hw_clkctrl_ssp0)               /* 0x90 */
+       mx28_reg(hw_clkctrl_ssp1)               /* 0xa0 */
+       mx28_reg(hw_clkctrl_ssp2)               /* 0xb0 */
+       mx28_reg(hw_clkctrl_ssp3)               /* 0xc0 */
+       mx28_reg(hw_clkctrl_gpmi)               /* 0xd0 */
+       mx28_reg(hw_clkctrl_spdif)              /* 0xe0 */
+       mx28_reg(hw_clkctrl_emi)                /* 0xf0 */
+       mx28_reg(hw_clkctrl_saif0)              /* 0x100 */
+       mx28_reg(hw_clkctrl_saif1)              /* 0x110 */
+       mx28_reg(hw_clkctrl_lcdif)              /* 0x120 */
+       mx28_reg(hw_clkctrl_etm)                /* 0x130 */
+       mx28_reg(hw_clkctrl_enet)               /* 0x140 */
+       mx28_reg(hw_clkctrl_hsadc)              /* 0x150 */
+       mx28_reg(hw_clkctrl_flexcan)            /* 0x160 */
+
+       uint32_t        reserved[16];
+
+       mx28_reg(hw_clkctrl_frac0)              /* 0x1b0 */
+       mx28_reg(hw_clkctrl_frac1)              /* 0x1c0 */
+       mx28_reg(hw_clkctrl_clkseq)             /* 0x1d0 */
+       mx28_reg(hw_clkctrl_reset)              /* 0x1e0 */
+       mx28_reg(hw_clkctrl_status)             /* 0x1f0 */
+       mx28_reg(hw_clkctrl_version)            /* 0x200 */
+};
+#endif
+
+#define        CLKCTRL_PLL0CTRL0_LFR_SEL_MASK          (0x3 << 28)
+#define        CLKCTRL_PLL0CTRL0_LFR_SEL_OFFSET        28
+#define        CLKCTRL_PLL0CTRL0_LFR_SEL_DEFAULT       (0x0 << 28)
+#define        CLKCTRL_PLL0CTRL0_LFR_SEL_TIMES_2       (0x1 << 28)
+#define        CLKCTRL_PLL0CTRL0_LFR_SEL_TIMES_05      (0x2 << 28)
+#define        CLKCTRL_PLL0CTRL0_LFR_SEL_UNDEFINED     (0x3 << 28)
+#define        CLKCTRL_PLL0CTRL0_CP_SEL_MASK           (0x3 << 24)
+#define        CLKCTRL_PLL0CTRL0_CP_SEL_OFFSET         24
+#define        CLKCTRL_PLL0CTRL0_CP_SEL_DEFAULT        (0x0 << 24)
+#define        CLKCTRL_PLL0CTRL0_CP_SEL_TIMES_2        (0x1 << 24)
+#define        CLKCTRL_PLL0CTRL0_CP_SEL_TIMES_05       (0x2 << 24)
+#define        CLKCTRL_PLL0CTRL0_CP_SEL_UNDEFINED      (0x3 << 24)
+#define        CLKCTRL_PLL0CTRL0_DIV_SEL_MASK          (0x3 << 20)
+#define        CLKCTRL_PLL0CTRL0_DIV_SEL_OFFSET        20
+#define        CLKCTRL_PLL0CTRL0_DIV_SEL_DEFAULT       (0x0 << 20)
+#define        CLKCTRL_PLL0CTRL0_DIV_SEL_LOWER         (0x1 << 20)
+#define        CLKCTRL_PLL0CTRL0_DIV_SEL_LOWEST        (0x2 << 20)
+#define        CLKCTRL_PLL0CTRL0_DIV_SEL_UNDEFINED     (0x3 << 20)
+#define        CLKCTRL_PLL0CTRL0_EN_USB_CLKS           (1 << 18)
+#define        CLKCTRL_PLL0CTRL0_POWER                 (1 << 17)
+
+#define        CLKCTRL_PLL0CTRL1_LOCK                  (1 << 31)
+#define        CLKCTRL_PLL0CTRL1_FORCE_LOCK            (1 << 30)
+#define        CLKCTRL_PLL0CTRL1_LOCK_COUNT_MASK       0xffff
+#define        CLKCTRL_PLL0CTRL1_LOCK_COUNT_OFFSET     0
+
+#define        CLKCTRL_PLL1CTRL0_CLKGATEEMI            (1 << 31)
+#define        CLKCTRL_PLL1CTRL0_LFR_SEL_MASK          (0x3 << 28)
+#define        CLKCTRL_PLL1CTRL0_LFR_SEL_OFFSET        28
+#define        CLKCTRL_PLL1CTRL0_LFR_SEL_DEFAULT       (0x0 << 28)
+#define        CLKCTRL_PLL1CTRL0_LFR_SEL_TIMES_2       (0x1 << 28)
+#define        CLKCTRL_PLL1CTRL0_LFR_SEL_TIMES_05      (0x2 << 28)
+#define        CLKCTRL_PLL1CTRL0_LFR_SEL_UNDEFINED     (0x3 << 28)
+#define        CLKCTRL_PLL1CTRL0_CP_SEL_MASK           (0x3 << 24)
+#define        CLKCTRL_PLL1CTRL0_CP_SEL_OFFSET         24
+#define        CLKCTRL_PLL1CTRL0_CP_SEL_DEFAULT        (0x0 << 24)
+#define        CLKCTRL_PLL1CTRL0_CP_SEL_TIMES_2        (0x1 << 24)
+#define        CLKCTRL_PLL1CTRL0_CP_SEL_TIMES_05       (0x2 << 24)
+#define        CLKCTRL_PLL1CTRL0_CP_SEL_UNDEFINED      (0x3 << 24)
+#define        CLKCTRL_PLL1CTRL0_DIV_SEL_MASK          (0x3 << 20)
+#define        CLKCTRL_PLL1CTRL0_DIV_SEL_OFFSET        20
+#define        CLKCTRL_PLL1CTRL0_DIV_SEL_DEFAULT       (0x0 << 20)
+#define        CLKCTRL_PLL1CTRL0_DIV_SEL_LOWER         (0x1 << 20)
+#define        CLKCTRL_PLL1CTRL0_DIV_SEL_LOWEST        (0x2 << 20)
+#define        CLKCTRL_PLL1CTRL0_DIV_SEL_UNDEFINED     (0x3 << 20)
+#define        CLKCTRL_PLL1CTRL0_EN_USB_CLKS           (1 << 18)
+#define        CLKCTRL_PLL1CTRL0_POWER                 (1 << 17)
+
+#define        CLKCTRL_PLL1CTRL1_LOCK                  (1 << 31)
+#define        CLKCTRL_PLL1CTRL1_FORCE_LOCK            (1 << 30)
+#define        CLKCTRL_PLL1CTRL1_LOCK_COUNT_MASK       0xffff
+#define        CLKCTRL_PLL1CTRL1_LOCK_COUNT_OFFSET     0
+
+#define        CLKCTRL_PLL2CTRL0_CLKGATE               (1 << 31)
+#define        CLKCTRL_PLL2CTRL0_LFR_SEL_MASK          (0x3 << 28)
+#define        CLKCTRL_PLL2CTRL0_LFR_SEL_OFFSET        28
+#define        CLKCTRL_PLL2CTRL0_HOLD_RING_OFF_B       (1 << 26)
+#define        CLKCTRL_PLL2CTRL0_CP_SEL_MASK           (0x3 << 24)
+#define        CLKCTRL_PLL2CTRL0_CP_SEL_OFFSET         24
+#define        CLKCTRL_PLL2CTRL0_POWER                 (1 << 23)
+
+#define        CLKCTRL_CPU_BUSY_REF_XTAL               (1 << 29)
+#define        CLKCTRL_CPU_BUSY_REF_CPU                (1 << 28)
+#define        CLKCTRL_CPU_DIV_XTAL_FRAC_EN            (1 << 26)
+#define        CLKCTRL_CPU_DIV_XTAL_MASK               (0x3ff << 16)
+#define        CLKCTRL_CPU_DIV_XTAL_OFFSET             16
+#define        CLKCTRL_CPU_INTERRUPT_WAIT              (1 << 12)
+#define        CLKCTRL_CPU_DIV_CPU_FRAC_EN             (1 << 10)
+#define        CLKCTRL_CPU_DIV_CPU_MASK                0x3f
+#define        CLKCTRL_CPU_DIV_CPU_OFFSET              0
+
+#define        CLKCTRL_HBUS_ASM_BUSY                   (1 << 31)
+#define        CLKCTRL_HBUS_DCP_AS_ENABLE              (1 << 30)
+#define        CLKCTRL_HBUS_PXP_AS_ENABLE              (1 << 29)
+#define        CLKCTRL_HBUS_ASM_EMIPORT_AS_ENABLE      (1 << 27)
+#define        CLKCTRL_HBUS_APBHDMA_AS_ENABLE          (1 << 26)
+#define        CLKCTRL_HBUS_APBXDMA_AS_ENABLE          (1 << 25)
+#define        CLKCTRL_HBUS_TRAFFIC_JAM_AS_ENABLE      (1 << 24)
+#define        CLKCTRL_HBUS_TRAFFIC_AS_ENABLE          (1 << 23)
+#define        CLKCTRL_HBUS_CPU_DATA_AS_ENABLE         (1 << 22)
+#define        CLKCTRL_HBUS_CPU_INSTR_AS_ENABLE        (1 << 21)
+#define        CLKCTRL_HBUS_ASM_ENABLE                 (1 << 20)
+#define        CLKCTRL_HBUS_AUTO_CLEAR_DIV_ENABLE      (1 << 19)
+#define        CLKCTRL_HBUS_SLOW_DIV_MASK              (0x7 << 16)
+#define        CLKCTRL_HBUS_SLOW_DIV_OFFSET            16
+#define        CLKCTRL_HBUS_SLOW_DIV_BY1               (0x0 << 16)
+#define        CLKCTRL_HBUS_SLOW_DIV_BY2               (0x1 << 16)
+#define        CLKCTRL_HBUS_SLOW_DIV_BY4               (0x2 << 16)
+#define        CLKCTRL_HBUS_SLOW_DIV_BY8               (0x3 << 16)
+#define        CLKCTRL_HBUS_SLOW_DIV_BY16              (0x4 << 16)
+#define        CLKCTRL_HBUS_SLOW_DIV_BY32              (0x5 << 16)
+#define        CLKCTRL_HBUS_DIV_FRAC_EN                (1 << 5)
+#define        CLKCTRL_HBUS_DIV_MASK                   0x1f
+#define        CLKCTRL_HBUS_DIV_OFFSET                 0
+
+#define        CLKCTRL_XBUS_BUSY                       (1 << 31)
+#define        CLKCTRL_XBUS_AUTO_CLEAR_DIV_ENABLE      (1 << 11)
+#define        CLKCTRL_XBUS_DIV_FRAC_EN                (1 << 10)
+#define        CLKCTRL_XBUS_DIV_MASK                   0x3ff
+#define        CLKCTRL_XBUS_DIV_OFFSET                 0
+
+#define        CLKCTRL_XTAL_UART_CLK_GATE              (1 << 31)
+#define        CLKCTRL_XTAL_PWM_CLK24M_GATE            (1 << 29)
+#define        CLKCTRL_XTAL_TIMROT_CLK32K_GATE         (1 << 26)
+#define        CLKCTRL_XTAL_DIV_UART_MASK              0x3
+#define        CLKCTRL_XTAL_DIV_UART_OFFSET            0
+
+#define        CLKCTRL_SSP_CLKGATE                     (1 << 31)
+#define        CLKCTRL_SSP_BUSY                        (1 << 29)
+#define        CLKCTRL_SSP_DIV_FRAC_EN                 (1 << 9)
+#define        CLKCTRL_SSP_DIV_MASK                    0x1ff
+#define        CLKCTRL_SSP_DIV_OFFSET                  0
+
+#define        CLKCTRL_GPMI_CLKGATE                    (1 << 31)
+#define        CLKCTRL_GPMI_BUSY                       (1 << 29)
+#define        CLKCTRL_GPMI_DIV_FRAC_EN                (1 << 10)
+#define        CLKCTRL_GPMI_DIV_MASK                   0x3ff
+#define        CLKCTRL_GPMI_DIV_OFFSET                 0
+
+#define        CLKCTRL_SPDIF_CLKGATE                   (1 << 31)
+
+#define        CLKCTRL_EMI_CLKGATE                     (1 << 31)
+#define        CLKCTRL_EMI_SYNC_MODE_EN                (1 << 30)
+#define        CLKCTRL_EMI_BUSY_REF_XTAL               (1 << 29)
+#define        CLKCTRL_EMI_BUSY_REF_EMI                (1 << 28)
+#define        CLKCTRL_EMI_BUSY_REF_CPU                (1 << 27)
+#define        CLKCTRL_EMI_BUSY_SYNC_MODE              (1 << 26)
+#define        CLKCTRL_EMI_BUSY_DCC_RESYNC             (1 << 17)
+#define        CLKCTRL_EMI_DCC_RESYNC_ENABLE           (1 << 16)
+#define        CLKCTRL_EMI_DIV_XTAL_MASK               (0xf << 8)
+#define        CLKCTRL_EMI_DIV_XTAL_OFFSET             8
+#define        CLKCTRL_EMI_DIV_EMI_MASK                0x3f
+#define        CLKCTRL_EMI_DIV_EMI_OFFSET              0
+
+#define        CLKCTRL_SAIF0_CLKGATE                   (1 << 31)
+#define        CLKCTRL_SAIF0_BUSY                      (1 << 29)
+#define        CLKCTRL_SAIF0_DIV_FRAC_EN               (1 << 16)
+#define        CLKCTRL_SAIF0_DIV_MASK                  0xffff
+#define        CLKCTRL_SAIF0_DIV_OFFSET                0
+
+#define        CLKCTRL_SAIF1_CLKGATE                   (1 << 31)
+#define        CLKCTRL_SAIF1_BUSY                      (1 << 29)
+#define        CLKCTRL_SAIF1_DIV_FRAC_EN               (1 << 16)
+#define        CLKCTRL_SAIF1_DIV_MASK                  0xffff
+#define        CLKCTRL_SAIF1_DIV_OFFSET                0
+
+#define        CLKCTRL_DIS_LCDIF_CLKGATE               (1 << 31)
+#define        CLKCTRL_DIS_LCDIF_BUSY                  (1 << 29)
+#define        CLKCTRL_DIS_LCDIF_DIV_FRAC_EN           (1 << 13)
+#define        CLKCTRL_DIS_LCDIF_DIV_MASK              0x1fff
+#define        CLKCTRL_DIS_LCDIF_DIV_OFFSET            0
+
+#define        CLKCTRL_ETM_CLKGATE                     (1 << 31)
+#define        CLKCTRL_ETM_BUSY                        (1 << 29)
+#define        CLKCTRL_ETM_DIV_FRAC_EN                 (1 << 7)
+#define        CLKCTRL_ETM_DIV_MASK                    0x7f
+#define        CLKCTRL_ETM_DIV_OFFSET                  0
+
+#define        CLKCTRL_ENET_SLEEP                      (1 << 31)
+#define        CLKCTRL_ENET_DISABLE                    (1 << 30)
+#define        CLKCTRL_ENET_STATUS                     (1 << 29)
+#define        CLKCTRL_ENET_BUSY_TIME                  (1 << 27)
+#define        CLKCTRL_ENET_DIV_TIME_MASK              (0x3f << 21)
+#define        CLKCTRL_ENET_DIV_TIME_OFFSET            21
+#define        CLKCTRL_ENET_TIME_SEL_MASK              (0x3 << 19)
+#define        CLKCTRL_ENET_TIME_SEL_OFFSET            19
+#define        CLKCTRL_ENET_TIME_SEL_XTAL              (0x0 << 19)
+#define        CLKCTRL_ENET_TIME_SEL_PLL               (0x1 << 19)
+#define        CLKCTRL_ENET_TIME_SEL_RMII_CLK          (0x2 << 19)
+#define        CLKCTRL_ENET_TIME_SEL_UNDEFINED         (0x3 << 19)
+#define        CLKCTRL_ENET_CLK_OUT_EN                 (1 << 18)
+#define        CLKCTRL_ENET_RESET_BY_SW_CHIP           (1 << 17)
+#define        CLKCTRL_ENET_RESET_BY_SW                (1 << 16)
+
+#define        CLKCTRL_HSADC_RESETB                    (1 << 30)
+#define        CLKCTRL_HSADC_FREQDIV_MASK              (0x3 << 28)
+#define        CLKCTRL_HSADC_FREQDIV_OFFSET            28
+
+#define        CLKCTRL_FLEXCAN_STOP_CAN0               (1 << 30)
+#define        CLKCTRL_FLEXCAN_CAN0_STATUS             (1 << 29)
+#define        CLKCTRL_FLEXCAN_STOP_CAN1               (1 << 28)
+#define        CLKCTRL_FLEXCAN_CAN1_STATUS             (1 << 27)
+
+#define        CLKCTRL_FRAC0_CLKGATEIO0                (1 << 31)
+#define        CLKCTRL_FRAC0_IO0_STABLE                (1 << 30)
+#define        CLKCTRL_FRAC0_IO0FRAC_MASK              (0x3f << 24)
+#define        CLKCTRL_FRAC0_IO0FRAC_OFFSET            24
+#define        CLKCTRL_FRAC0_CLKGATEIO1                (1 << 23)
+#define        CLKCTRL_FRAC0_IO1_STABLE                (1 << 22)
+#define        CLKCTRL_FRAC0_IO1FRAC_MASK              (0x3f << 16)
+#define        CLKCTRL_FRAC0_IO1FRAC_OFFSET            16
+#define        CLKCTRL_FRAC0_CLKGATEEMI                (1 << 15)
+#define        CLKCTRL_FRAC0_EMI_STABLE                (1 << 14)
+#define        CLKCTRL_FRAC0_EMIFRAC_MASK              (0x3f << 8)
+#define        CLKCTRL_FRAC0_EMIFRAC_OFFSET            8
+#define        CLKCTRL_FRAC0_CLKGATECPU                (1 << 7)
+#define        CLKCTRL_FRAC0_CPU_STABLE                (1 << 6)
+#define        CLKCTRL_FRAC0_CPUFRAC_MASK              0x3f
+#define        CLKCTRL_FRAC0_CPUFRAC_OFFSET            0
+
+#define        CLKCTRL_FRAC1_CLKGATEGPMI               (1 << 23)
+#define        CLKCTRL_FRAC1_GPMI_STABLE               (1 << 22)
+#define        CLKCTRL_FRAC1_GPMIFRAC_MASK             (0x3f << 16)
+#define        CLKCTRL_FRAC1_GPMIFRAC_OFFSET           16
+#define        CLKCTRL_FRAC1_CLKGATEHSADC              (1 << 15)
+#define        CLKCTRL_FRAC1_HSADC_STABLE              (1 << 14)
+#define        CLKCTRL_FRAC1_HSADCFRAC_MASK            (0x3f << 8)
+#define        CLKCTRL_FRAC1_HSADCFRAC_OFFSET          8
+#define        CLKCTRL_FRAC1_CLKGATEPIX                (1 << 7)
+#define        CLKCTRL_FRAC1_PIX_STABLE                (1 << 6)
+#define        CLKCTRL_FRAC1_PIXFRAC_MASK              0x3f
+#define        CLKCTRL_FRAC1_PIXFRAC_OFFSET            0
+
+#define        CLKCTRL_CLKSEQ_BYPASS_CPU               (1 << 18)
+#define        CLKCTRL_CLKSEQ_BYPASS_DIS_LCDIF         (1 << 14)
+#define        CLKCTRL_CLKSEQ_BYPASS_DIS_LCDIF_BYPASS  (0x1 << 14)
+#define        CLKCTRL_CLKSEQ_BYPASS_DIS_LCDIF_PFD     (0x0 << 14)
+#define        CLKCTRL_CLKSEQ_BYPASS_ETM               (1 << 8)
+#define        CLKCTRL_CLKSEQ_BYPASS_EMI               (1 << 7)
+#define        CLKCTRL_CLKSEQ_BYPASS_SSP3              (1 << 6)
+#define        CLKCTRL_CLKSEQ_BYPASS_SSP2              (1 << 5)
+#define        CLKCTRL_CLKSEQ_BYPASS_SSP1              (1 << 4)
+#define        CLKCTRL_CLKSEQ_BYPASS_SSP0              (1 << 3)
+#define        CLKCTRL_CLKSEQ_BYPASS_GPMI              (1 << 2)
+#define        CLKCTRL_CLKSEQ_BYPASS_SAIF1             (1 << 1)
+#define        CLKCTRL_CLKSEQ_BYPASS_SAIF0             (1 << 0)
+
+#define        CLKCTRL_RESET_WDOG_POR_DISABLE          (1 << 5)
+#define        CLKCTRL_RESET_EXTERNAL_RESET_ENABLE     (1 << 4)
+#define        CLKCTRL_RESET_THERMAL_RESET_ENABLE      (1 << 3)
+#define        CLKCTRL_RESET_THERMAL_RESET_DEFAULT     (1 << 2)
+#define        CLKCTRL_RESET_CHIP                      (1 << 1)
+#define        CLKCTRL_RESET_DIG                       (1 << 0)
+
+#define        CLKCTRL_STATUS_CPU_LIMIT_MASK           (0x3 << 30)
+#define        CLKCTRL_STATUS_CPU_LIMIT_OFFSET         30
+
+#define        CLKCTRL_VERSION_MAJOR_MASK              (0xff << 24)
+#define        CLKCTRL_VERSION_MAJOR_OFFSET            24
+#define        CLKCTRL_VERSION_MINOR_MASK              (0xff << 16)
+#define        CLKCTRL_VERSION_MINOR_OFFSET            16
+#define        CLKCTRL_VERSION_STEP_MASK               0xffff
+#define        CLKCTRL_VERSION_STEP_OFFSET             0
+
+#endif /* __MX28_REGS_CLKCTRL_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-common.h b/arch/arm/include/asm/arch-mx28/regs-common.h
new file mode 100644 (file)
index 0000000..efe975b
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Freescale i.MX28 Register Accessors
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_COMMON_H__
+#define __MX28_REGS_COMMON_H__
+
+/*
+ * The i.MX28 has interesting feature when it comes to register access. There
+ * are four kinds of access to one particular register. Those are:
+ *
+ * 1) Common read/write access. To use this mode, just write to the address of
+ *    the register.
+ * 2) Set bits only access. To set bits, write which bits you want to set to the
+ *    address of the register + 0x4.
+ * 3) Clear bits only access. To clear bits, write which bits you want to clear
+ *    to the address of the register + 0x8.
+ * 4) Toggle bits only access. To toggle bits, write which bits you want to
+ *    toggle to the address of the register + 0xc.
+ *
+ * IMPORTANT NOTE: Not all registers support accesses 2-4! Also, not all bits
+ * can be set/cleared by pure write as in access type 1, some need to be
+ * explicitly set/cleared by using access type 2-3.
+ *
+ * The following macros and structures allow the user to either access the
+ * register in all aforementioned modes (by accessing reg_name, reg_name_set,
+ * reg_name_clr, reg_name_tog) or pass the register structure further into
+ * various functions with correct type information (by accessing reg_name_reg).
+ *
+ */
+
+#define        __mx28_reg(name)                \
+       uint32_t name;                  \
+       uint32_t name##_set;            \
+       uint32_t name##_clr;            \
+       uint32_t name##_tog;
+
+struct mx28_register {
+       __mx28_reg(reg)
+};
+
+#define        mx28_reg(name)                                  \
+       union {                                         \
+               struct { __mx28_reg(name) };            \
+               struct mx28_register name##_reg;        \
+       };
+
+#endif /* __MX28_REGS_COMMON_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-gpmi.h b/arch/arm/include/asm/arch-mx28/regs-gpmi.h
new file mode 100644 (file)
index 0000000..0096793
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * Freescale i.MX28 GPMI Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_GPMI_H__
+#define __MX28_REGS_GPMI_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_gpmi_regs {
+       mx28_reg(hw_gpmi_ctrl0)
+       mx28_reg(hw_gpmi_compare)
+       mx28_reg(hw_gpmi_eccctrl)
+       mx28_reg(hw_gpmi_ecccount)
+       mx28_reg(hw_gpmi_payload)
+       mx28_reg(hw_gpmi_auxiliary)
+       mx28_reg(hw_gpmi_ctrl1)
+       mx28_reg(hw_gpmi_timing0)
+       mx28_reg(hw_gpmi_timing1)
+
+       uint32_t        reserved[4];
+
+       mx28_reg(hw_gpmi_data)
+       mx28_reg(hw_gpmi_stat)
+       mx28_reg(hw_gpmi_debug)
+       mx28_reg(hw_gpmi_version)
+};
+#endif
+
+#define        GPMI_CTRL0_SFTRST                               (1 << 31)
+#define        GPMI_CTRL0_CLKGATE                              (1 << 30)
+#define        GPMI_CTRL0_RUN                                  (1 << 29)
+#define        GPMI_CTRL0_DEV_IRQ_EN                           (1 << 28)
+#define        GPMI_CTRL0_LOCK_CS                              (1 << 27)
+#define        GPMI_CTRL0_UDMA                                 (1 << 26)
+#define        GPMI_CTRL0_COMMAND_MODE_MASK                    (0x3 << 24)
+#define        GPMI_CTRL0_COMMAND_MODE_OFFSET                  24
+#define        GPMI_CTRL0_COMMAND_MODE_WRITE                   (0x0 << 24)
+#define        GPMI_CTRL0_COMMAND_MODE_READ                    (0x1 << 24)
+#define        GPMI_CTRL0_COMMAND_MODE_READ_AND_COMPARE        (0x2 << 24)
+#define        GPMI_CTRL0_COMMAND_MODE_WAIT_FOR_READY          (0x3 << 24)
+#define        GPMI_CTRL0_WORD_LENGTH                          (1 << 23)
+#define        GPMI_CTRL0_CS_MASK                              (0x7 << 20)
+#define        GPMI_CTRL0_CS_OFFSET                            20
+#define        GPMI_CTRL0_ADDRESS_MASK                         (0x7 << 17)
+#define        GPMI_CTRL0_ADDRESS_OFFSET                       17
+#define        GPMI_CTRL0_ADDRESS_NAND_DATA                    (0x0 << 17)
+#define        GPMI_CTRL0_ADDRESS_NAND_CLE                     (0x1 << 17)
+#define        GPMI_CTRL0_ADDRESS_NAND_ALE                     (0x2 << 17)
+#define        GPMI_CTRL0_ADDRESS_INCREMENT                    (1 << 16)
+#define        GPMI_CTRL0_XFER_COUNT_MASK                      0xffff
+#define        GPMI_CTRL0_XFER_COUNT_OFFSET                    0
+
+#define        GPMI_COMPARE_MASK_MASK                          (0xffff << 16)
+#define        GPMI_COMPARE_MASK_OFFSET                        16
+#define        GPMI_COMPARE_REFERENCE_MASK                     0xffff
+#define        GPMI_COMPARE_REFERENCE_OFFSET                   0
+
+#define        GPMI_ECCCTRL_HANDLE_MASK                        (0xffff << 16)
+#define        GPMI_ECCCTRL_HANDLE_OFFSET                      16
+#define        GPMI_ECCCTRL_ECC_CMD_MASK                       (0x3 << 13)
+#define        GPMI_ECCCTRL_ECC_CMD_OFFSET                     13
+#define        GPMI_ECCCTRL_ECC_CMD_DECODE                     (0x0 << 13)
+#define        GPMI_ECCCTRL_ECC_CMD_ENCODE                     (0x1 << 13)
+#define        GPMI_ECCCTRL_ENABLE_ECC                         (1 << 12)
+#define        GPMI_ECCCTRL_BUFFER_MASK_MASK                   0x1ff
+#define        GPMI_ECCCTRL_BUFFER_MASK_OFFSET                 0
+#define        GPMI_ECCCTRL_BUFFER_MASK_BCH_AUXONLY            0x100
+#define        GPMI_ECCCTRL_BUFFER_MASK_BCH_PAGE               0x1ff
+
+#define        GPMI_ECCCOUNT_COUNT_MASK                        0xffff
+#define        GPMI_ECCCOUNT_COUNT_OFFSET                      0
+
+#define        GPMI_PAYLOAD_ADDRESS_MASK                       (0x3fffffff << 2)
+#define        GPMI_PAYLOAD_ADDRESS_OFFSET                     2
+
+#define        GPMI_AUXILIARY_ADDRESS_MASK                     (0x3fffffff << 2)
+#define        GPMI_AUXILIARY_ADDRESS_OFFSET                   2
+
+#define        GPMI_CTRL1_DECOUPLE_CS                          (1 << 24)
+#define        GPMI_CTRL1_WRN_DLY_SEL_MASK                     (0x3 << 22)
+#define        GPMI_CTRL1_WRN_DLY_SEL_OFFSET                   22
+#define        GPMI_CTRL1_TIMEOUT_IRQ_EN                       (1 << 20)
+#define        GPMI_CTRL1_GANGED_RDYBUSY                       (1 << 19)
+#define        GPMI_CTRL1_BCH_MODE                             (1 << 18)
+#define        GPMI_CTRL1_DLL_ENABLE                           (1 << 17)
+#define        GPMI_CTRL1_HALF_PERIOD                          (1 << 16)
+#define        GPMI_CTRL1_RDN_DELAY_MASK                       (0xf << 12)
+#define        GPMI_CTRL1_RDN_DELAY_OFFSET                     12
+#define        GPMI_CTRL1_DMA2ECC_MODE                         (1 << 11)
+#define        GPMI_CTRL1_DEV_IRQ                              (1 << 10)
+#define        GPMI_CTRL1_TIMEOUT_IRQ                          (1 << 9)
+#define        GPMI_CTRL1_BURST_EN                             (1 << 8)
+#define        GPMI_CTRL1_ABORT_WAIT_REQUEST                   (1 << 7)
+#define        GPMI_CTRL1_ABORT_WAIT_FOR_READY_CHANNEL_MASK    (0x7 << 4)
+#define        GPMI_CTRL1_ABORT_WAIT_FOR_READY_CHANNEL_OFFSET  4
+#define        GPMI_CTRL1_DEV_RESET                            (1 << 3)
+#define        GPMI_CTRL1_ATA_IRQRDY_POLARITY                  (1 << 2)
+#define        GPMI_CTRL1_CAMERA_MODE                          (1 << 1)
+#define        GPMI_CTRL1_GPMI_MODE                            (1 << 0)
+
+#define        GPMI_TIMING0_ADDRESS_SETUP_MASK                 (0xff << 16)
+#define        GPMI_TIMING0_ADDRESS_SETUP_OFFSET               16
+#define        GPMI_TIMING0_DATA_HOLD_MASK                     (0xff << 8)
+#define        GPMI_TIMING0_DATA_HOLD_OFFSET                   8
+#define        GPMI_TIMING0_DATA_SETUP_MASK                    0xff
+#define        GPMI_TIMING0_DATA_SETUP_OFFSET                  0
+
+#define        GPMI_TIMING1_DEVICE_BUSY_TIMEOUT_MASK           (0xffff << 16)
+#define        GPMI_TIMING1_DEVICE_BUSY_TIMEOUT_OFFSET         16
+
+#define        GPMI_TIMING2_UDMA_TRP_MASK                      (0xff << 24)
+#define        GPMI_TIMING2_UDMA_TRP_OFFSET                    24
+#define        GPMI_TIMING2_UDMA_ENV_MASK                      (0xff << 16)
+#define        GPMI_TIMING2_UDMA_ENV_OFFSET                    16
+#define        GPMI_TIMING2_UDMA_HOLD_MASK                     (0xff << 8)
+#define        GPMI_TIMING2_UDMA_HOLD_OFFSET                   8
+#define        GPMI_TIMING2_UDMA_SETUP_MASK                    0xff
+#define        GPMI_TIMING2_UDMA_SETUP_OFFSET                  0
+
+#define        GPMI_DATA_DATA_MASK                             0xffffffff
+#define        GPMI_DATA_DATA_OFFSET                           0
+
+#define        GPMI_STAT_READY_BUSY_MASK                       (0xff << 24)
+#define        GPMI_STAT_READY_BUSY_OFFSET                     24
+#define        GPMI_STAT_RDY_TIMEOUT_MASK                      (0xff << 16)
+#define        GPMI_STAT_RDY_TIMEOUT_OFFSET                    16
+#define        GPMI_STAT_DEV7_ERROR                            (1 << 15)
+#define        GPMI_STAT_DEV6_ERROR                            (1 << 14)
+#define        GPMI_STAT_DEV5_ERROR                            (1 << 13)
+#define        GPMI_STAT_DEV4_ERROR                            (1 << 12)
+#define        GPMI_STAT_DEV3_ERROR                            (1 << 11)
+#define        GPMI_STAT_DEV2_ERROR                            (1 << 10)
+#define        GPMI_STAT_DEV1_ERROR                            (1 << 9)
+#define        GPMI_STAT_DEV0_ERROR                            (1 << 8)
+#define        GPMI_STAT_ATA_IRQ                               (1 << 4)
+#define        GPMI_STAT_INVALID_BUFFER_MASK                   (1 << 3)
+#define        GPMI_STAT_FIFO_EMPTY                            (1 << 2)
+#define        GPMI_STAT_FIFO_FULL                             (1 << 1)
+#define        GPMI_STAT_PRESENT                               (1 << 0)
+
+#define        GPMI_DEBUG_WAIT_FOR_READY_END_MASK              (0xff << 24)
+#define        GPMI_DEBUG_WAIT_FOR_READY_END_OFFSET            24
+#define        GPMI_DEBUG_DMA_SENSE_MASK                       (0xff << 16)
+#define        GPMI_DEBUG_DMA_SENSE_OFFSET                     16
+#define        GPMI_DEBUG_DMAREQ_MASK                          (0xff << 8)
+#define        GPMI_DEBUG_DMAREQ_OFFSET                        8
+#define        GPMI_DEBUG_CMD_END_MASK                         0xff
+#define        GPMI_DEBUG_CMD_END_OFFSET                       0
+
+#define        GPMI_VERSION_MAJOR_MASK                         (0xff << 24)
+#define        GPMI_VERSION_MAJOR_OFFSET                       24
+#define        GPMI_VERSION_MINOR_MASK                         (0xff << 16)
+#define        GPMI_VERSION_MINOR_OFFSET                       16
+#define        GPMI_VERSION_STEP_MASK                          0xffff
+#define        GPMI_VERSION_STEP_OFFSET                        0
+
+#define        GPMI_DEBUG2_UDMA_STATE_MASK                     (0xf << 24)
+#define        GPMI_DEBUG2_UDMA_STATE_OFFSET                   24
+#define        GPMI_DEBUG2_BUSY                                (1 << 23)
+#define        GPMI_DEBUG2_PIN_STATE_MASK                      (0x7 << 20)
+#define        GPMI_DEBUG2_PIN_STATE_OFFSET                    20
+#define        GPMI_DEBUG2_PIN_STATE_PSM_IDLE                  (0x0 << 20)
+#define        GPMI_DEBUG2_PIN_STATE_PSM_BYTCNT                (0x1 << 20)
+#define        GPMI_DEBUG2_PIN_STATE_PSM_ADDR                  (0x2 << 20)
+#define        GPMI_DEBUG2_PIN_STATE_PSM_STALL                 (0x3 << 20)
+#define        GPMI_DEBUG2_PIN_STATE_PSM_STROBE                (0x4 << 20)
+#define        GPMI_DEBUG2_PIN_STATE_PSM_ATARDY                (0x5 << 20)
+#define        GPMI_DEBUG2_PIN_STATE_PSM_DHOLD                 (0x6 << 20)
+#define        GPMI_DEBUG2_PIN_STATE_PSM_DONE                  (0x7 << 20)
+#define        GPMI_DEBUG2_MAIN_STATE_MASK                     (0xf << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_OFFSET                   16
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_IDLE                 (0x0 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_BYTCNT               (0x1 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_WAITFE               (0x2 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_WAITFR               (0x3 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_DMAREQ               (0x4 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_DMAACK               (0x5 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_WAITFF               (0x6 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_LDFIFO               (0x7 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_LDDMAR               (0x8 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_RDCMP                (0x9 << 16)
+#define        GPMI_DEBUG2_MAIN_STATE_MSM_DONE                 (0xa << 16)
+#define        GPMI_DEBUG2_SYND2GPMI_BE_MASK                   (0xf << 12)
+#define        GPMI_DEBUG2_SYND2GPMI_BE_OFFSET                 12
+#define        GPMI_DEBUG2_GPMI2SYND_VALID                     (1 << 11)
+#define        GPMI_DEBUG2_GPMI2SYND_READY                     (1 << 10)
+#define        GPMI_DEBUG2_SYND2GPMI_VALID                     (1 << 9)
+#define        GPMI_DEBUG2_SYND2GPMI_READY                     (1 << 8)
+#define        GPMI_DEBUG2_VIEW_DELAYED_RDN                    (1 << 7)
+#define        GPMI_DEBUG2_UPDATE_WINDOW                       (1 << 6)
+#define        GPMI_DEBUG2_RDN_TAP_MASK                        0x3f
+#define        GPMI_DEBUG2_RDN_TAP_OFFSET                      0
+
+#define        GPMI_DEBUG3_APB_WORD_CNTR_MASK                  (0xffff << 16)
+#define        GPMI_DEBUG3_APB_WORD_CNTR_OFFSET                16
+#define        GPMI_DEBUG3_DEV_WORD_CNTR_MASK                  0xffff
+#define        GPMI_DEBUG3_DEV_WORD_CNTR_OFFSET                0
+
+#endif /* __MX28_REGS_GPMI_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-i2c.h b/arch/arm/include/asm/arch-mx28/regs-i2c.h
new file mode 100644 (file)
index 0000000..30e0ed7
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+ * Freescale i.MX28 I2C Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_I2C_H__
+#define __MX28_REGS_I2C_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_i2c_regs {
+       mx28_reg(hw_i2c_ctrl0)
+       mx28_reg(hw_i2c_timing0)
+       mx28_reg(hw_i2c_timing1)
+       mx28_reg(hw_i2c_timing2)
+       mx28_reg(hw_i2c_ctrl1)
+       mx28_reg(hw_i2c_stat)
+       mx28_reg(hw_i2c_queuectrl)
+       mx28_reg(hw_i2c_queuestat)
+       mx28_reg(hw_i2c_queuecmd)
+       mx28_reg(hw_i2c_queuedata)
+       mx28_reg(hw_i2c_data)
+       mx28_reg(hw_i2c_debug0)
+       mx28_reg(hw_i2c_debug1)
+       mx28_reg(hw_i2c_version)
+};
+#endif
+
+#define        I2C_CTRL_SFTRST                         (1 << 31)
+#define        I2C_CTRL_CLKGATE                        (1 << 30)
+#define        I2C_CTRL_RUN                            (1 << 29)
+#define        I2C_CTRL_PREACK                         (1 << 27)
+#define        I2C_CTRL_ACKNOWLEDGE                    (1 << 26)
+#define        I2C_CTRL_SEND_NAK_ON_LAST               (1 << 25)
+#define        I2C_CTRL_MULTI_MASTER                   (1 << 23)
+#define        I2C_CTRL_CLOCK_HELD                     (1 << 22)
+#define        I2C_CTRL_RETAIN_CLOCK                   (1 << 21)
+#define        I2C_CTRL_POST_SEND_STOP                 (1 << 20)
+#define        I2C_CTRL_PRE_SEND_START                 (1 << 19)
+#define        I2C_CTRL_SLAVE_ADDRESS_ENABLE           (1 << 18)
+#define        I2C_CTRL_MASTER_MODE                    (1 << 17)
+#define        I2C_CTRL_DIRECTION                      (1 << 16)
+#define        I2C_CTRL_XFER_COUNT_MASK                0xffff
+#define        I2C_CTRL_XFER_COUNT_OFFSET              0
+
+#define        I2C_TIMING0_HIGH_COUNT_MASK             (0x3ff << 16)
+#define        I2C_TIMING0_HIGH_COUNT_OFFSET           16
+#define        I2C_TIMING0_RCV_COUNT_MASK              0x3ff
+#define        I2C_TIMING0_RCV_COUNT_OFFSET            0
+
+#define        I2C_TIMING1_LOW_COUNT_MASK              (0x3ff << 16)
+#define        I2C_TIMING1_LOW_COUNT_OFFSET            16
+#define        I2C_TIMING1_XMIT_COUNT_MASK             0x3ff
+#define        I2C_TIMING1_XMIT_COUNT_OFFSET           0
+
+#define        I2C_TIMING2_BUS_FREE_MASK               (0x3ff << 16)
+#define        I2C_TIMING2_BUS_FREE_OFFSET             16
+#define        I2C_TIMING2_LEADIN_COUNT_MASK           0x3ff
+#define        I2C_TIMING2_LEADIN_COUNT_OFFSET         0
+
+#define        I2C_CTRL1_RD_QUEUE_IRQ                  (1 << 30)
+#define        I2C_CTRL1_WR_QUEUE_IRQ                  (1 << 29)
+#define        I2C_CTRL1_CLR_GOT_A_NAK                 (1 << 28)
+#define        I2C_CTRL1_ACK_MODE                      (1 << 27)
+#define        I2C_CTRL1_FORCE_DATA_IDLE               (1 << 26)
+#define        I2C_CTRL1_FORCE_CLK_IDLE                (1 << 25)
+#define        I2C_CTRL1_BCAST_SLAVE_EN                (1 << 24)
+#define        I2C_CTRL1_SLAVE_ADDRESS_BYTE_MASK       (0xff << 16)
+#define        I2C_CTRL1_SLAVE_ADDRESS_BYTE_OFFSET     16
+#define        I2C_CTRL1_BUS_FREE_IRQ_EN               (1 << 15)
+#define        I2C_CTRL1_DATA_ENGINE_CMPLT_IRQ_EN      (1 << 14)
+#define        I2C_CTRL1_NO_SLAVE_ACK_IRQ_EN           (1 << 13)
+#define        I2C_CTRL1_OVERSIZE_XFER_TERM_IRQ_EN     (1 << 12)
+#define        I2C_CTRL1_EARLY_TERM_IRQ_EN             (1 << 11)
+#define        I2C_CTRL1_MASTER_LOSS_IRQ_EN            (1 << 10)
+#define        I2C_CTRL1_SLAVE_STOP_IRQ_EN             (1 << 9)
+#define        I2C_CTRL1_SLAVE_IRQ_EN                  (1 << 8)
+#define        I2C_CTRL1_BUS_FREE_IRQ                  (1 << 7)
+#define        I2C_CTRL1_DATA_ENGINE_CMPLT_IRQ         (1 << 6)
+#define        I2C_CTRL1_NO_SLAVE_ACK_IRQ              (1 << 5)
+#define        I2C_CTRL1_OVERSIZE_XFER_TERM_IRQ        (1 << 4)
+#define        I2C_CTRL1_EARLY_TERM_IRQ                (1 << 3)
+#define        I2C_CTRL1_MASTER_LOSS_IRQ               (1 << 2)
+#define        I2C_CTRL1_SLAVE_STOP_IRQ                (1 << 1)
+#define        I2C_CTRL1_SLAVE_IRQ                     (1 << 0)
+
+#define        I2C_STAT_MASTER_PRESENT                 (1 << 31)
+#define        I2C_STAT_SLAVE_PRESENT                  (1 << 30)
+#define        I2C_STAT_ANY_ENABLED_IRQ                (1 << 29)
+#define        I2C_STAT_GOT_A_NAK                      (1 << 28)
+#define        I2C_STAT_RCVD_SLAVE_ADDR_MASK           (0xff << 16)
+#define        I2C_STAT_RCVD_SLAVE_ADDR_OFFSET         16
+#define        I2C_STAT_SLAVE_ADDR_EQ_ZERO             (1 << 15)
+#define        I2C_STAT_SLAVE_FOUND                    (1 << 14)
+#define        I2C_STAT_SLAVE_SEARCHING                (1 << 13)
+#define        I2C_STAT_DATA_ENGING_DMA_WAIT           (1 << 12)
+#define        I2C_STAT_BUS_BUSY                       (1 << 11)
+#define        I2C_STAT_CLK_GEN_BUSY                   (1 << 10)
+#define        I2C_STAT_DATA_ENGINE_BUSY               (1 << 9)
+#define        I2C_STAT_SLAVE_BUSY                     (1 << 8)
+#define        I2C_STAT_BUS_FREE_IRQ_SUMMARY           (1 << 7)
+#define        I2C_STAT_DATA_ENGINE_CMPLT_IRQ_SUMMARY  (1 << 6)
+#define        I2C_STAT_NO_SLAVE_ACK_IRQ_SUMMARY       (1 << 5)
+#define        I2C_STAT_OVERSIZE_XFER_TERM_IRQ_SUMMARY (1 << 4)
+#define        I2C_STAT_EARLY_TERM_IRQ_SUMMARY         (1 << 3)
+#define        I2C_STAT_MASTER_LOSS_IRQ_SUMMARY        (1 << 2)
+#define        I2C_STAT_SLAVE_STOP_IRQ_SUMMARY         (1 << 1)
+#define        I2C_STAT_SLAVE_IRQ_SUMMARY              (1 << 0)
+
+#define        I2C_QUEUECTRL_RD_THRESH_MASK            (0x1f << 16)
+#define        I2C_QUEUECTRL_RD_THRESH_OFFSET          16
+#define        I2C_QUEUECTRL_WR_THRESH_MASK            (0x1f << 8)
+#define        I2C_QUEUECTRL_WR_THRESH_OFFSET          8
+#define        I2C_QUEUECTRL_QUEUE_RUN                 (1 << 5)
+#define        I2C_QUEUECTRL_RD_CLEAR                  (1 << 4)
+#define        I2C_QUEUECTRL_WR_CLEAR                  (1 << 3)
+#define        I2C_QUEUECTRL_PIO_QUEUE_MODE            (1 << 2)
+#define        I2C_QUEUECTRL_RD_QUEUE_IRQ_EN           (1 << 1)
+#define        I2C_QUEUECTRL_WR_QUEUE_IRQ_EN           (1 << 0)
+
+#define        I2C_QUEUESTAT_RD_QUEUE_FULL             (1 << 14)
+#define        I2C_QUEUESTAT_RD_QUEUE_EMPTY            (1 << 13)
+#define        I2C_QUEUESTAT_RD_QUEUE_CNT_MASK         (0x1f << 8)
+#define        I2C_QUEUESTAT_RD_QUEUE_CNT_OFFSET       8
+#define        I2C_QUEUESTAT_WR_QUEUE_FULL             (1 << 6)
+#define        I2C_QUEUESTAT_WR_QUEUE_EMPTY            (1 << 5)
+#define        I2C_QUEUESTAT_WR_QUEUE_CNT_MASK         0x1f
+#define        I2C_QUEUESTAT_WR_QUEUE_CNT_OFFSET       0
+
+#define        I2C_QUEUECMD_PREACK                     (1 << 27)
+#define        I2C_QUEUECMD_ACKNOWLEDGE                (1 << 26)
+#define        I2C_QUEUECMD_SEND_NAK_ON_LAST           (1 << 25)
+#define        I2C_QUEUECMD_MULTI_MASTER               (1 << 23)
+#define        I2C_QUEUECMD_CLOCK_HELD                 (1 << 22)
+#define        I2C_QUEUECMD_RETAIN_CLOCK               (1 << 21)
+#define        I2C_QUEUECMD_POST_SEND_STOP             (1 << 20)
+#define        I2C_QUEUECMD_PRE_SEND_START             (1 << 19)
+#define        I2C_QUEUECMD_SLAVE_ADDRESS_ENABLE       (1 << 18)
+#define        I2C_QUEUECMD_MASTER_MODE                (1 << 17)
+#define        I2C_QUEUECMD_DIRECTION                  (1 << 16)
+#define        I2C_QUEUECMD_XFER_COUNT_MASK            0xffff
+#define        I2C_QUEUECMD_XFER_COUNT_OFFSET          0
+
+#define        I2C_QUEUEDATA_DATA_MASK                 0xffffffff
+#define        I2C_QUEUEDATA_DATA_OFFSET               0
+
+#define        I2C_DATA_DATA_MASK                      0xffffffff
+#define        I2C_DATA_DATA_OFFSET                    0
+
+#define        I2C_DEBUG0_DMAREQ                       (1 << 31)
+#define        I2C_DEBUG0_DMAENDCMD                    (1 << 30)
+#define        I2C_DEBUG0_DMAKICK                      (1 << 29)
+#define        I2C_DEBUG0_DMATERMINATE                 (1 << 28)
+#define        I2C_DEBUG0_STATE_VALUE_MASK             (0x3 << 26)
+#define        I2C_DEBUG0_STATE_VALUE_OFFSET           26
+#define        I2C_DEBUG0_DMA_STATE_MASK               (0x3ff << 16)
+#define        I2C_DEBUG0_DMA_STATE_OFFSET             16
+#define        I2C_DEBUG0_START_TOGGLE                 (1 << 15)
+#define        I2C_DEBUG0_STOP_TOGGLE                  (1 << 14)
+#define        I2C_DEBUG0_GRAB_TOGGLE                  (1 << 13)
+#define        I2C_DEBUG0_CHANGE_TOGGLE                (1 << 12)
+#define        I2C_DEBUG0_STATE_LATCH                  (1 << 11)
+#define        I2C_DEBUG0_SLAVE_HOLD_CLK               (1 << 10)
+#define        I2C_DEBUG0_STATE_STATE_MASK             0x3ff
+#define        I2C_DEBUG0_STATE_STATE_OFFSET           0
+
+#define        I2C_DEBUG1_I2C_CLK_IN                   (1 << 31)
+#define        I2C_DEBUG1_I2C_DATA_IN                  (1 << 30)
+#define        I2C_DEBUG1_DMA_BYTE_ENABLES_MASK        (0xf << 24)
+#define        I2C_DEBUG1_DMA_BYTE_ENABLES_OFFSET      24
+#define        I2C_DEBUG1_CLK_GEN_STATE_MASK           (0xff << 16)
+#define        I2C_DEBUG1_CLK_GEN_STATE_OFFSET         16
+#define        I2C_DEBUG1_LST_MODE_MASK                (0x3 << 9)
+#define        I2C_DEBUG1_LST_MODE_OFFSET              9
+#define        I2C_DEBUG1_LOCAL_SLAVE_TEST             (1 << 8)
+#define        I2C_DEBUG1_FORCE_CLK_ON                 (1 << 4)
+#define        I2C_DEBUG1_FORCE_ABR_LOSS               (1 << 3)
+#define        I2C_DEBUG1_FORCE_RCV_ACK                (1 << 2)
+#define        I2C_DEBUG1_FORCE_I2C_DATA_OE            (1 << 1)
+#define        I2C_DEBUG1_FORCE_I2C_CLK_OE             (1 << 0)
+
+#define        I2C_VERSION_MAJOR_MASK                  (0xff << 24)
+#define        I2C_VERSION_MAJOR_OFFSET                24
+#define        I2C_VERSION_MINOR_MASK                  (0xff << 16)
+#define        I2C_VERSION_MINOR_OFFSET                16
+#define        I2C_VERSION_STEP_MASK                   0xffff
+#define        I2C_VERSION_STEP_OFFSET                 0
+
+#endif /* __MX28_REGS_I2C_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-ocotp.h b/arch/arm/include/asm/arch-mx28/regs-ocotp.h
new file mode 100644 (file)
index 0000000..ea2fd7b
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * Freescale i.MX28 OCOTP Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_OCOTP_H__
+#define __MX28_REGS_OCOTP_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_ocotp_regs {
+       mx28_reg(hw_ocotp_ctrl)         /* 0x0 */
+       mx28_reg(hw_ocotp_data)         /* 0x10 */
+       mx28_reg(hw_ocotp_cust0)        /* 0x20 */
+       mx28_reg(hw_ocotp_cust1)        /* 0x30 */
+       mx28_reg(hw_ocotp_cust2)        /* 0x40 */
+       mx28_reg(hw_ocotp_cust3)        /* 0x50 */
+       mx28_reg(hw_ocotp_crypto0)      /* 0x60 */
+       mx28_reg(hw_ocotp_crypto1)      /* 0x70 */
+       mx28_reg(hw_ocotp_crypto2)      /* 0x80 */
+       mx28_reg(hw_ocotp_crypto3)      /* 0x90 */
+       mx28_reg(hw_ocotp_hwcap0)       /* 0xa0 */
+       mx28_reg(hw_ocotp_hwcap1)       /* 0xb0 */
+       mx28_reg(hw_ocotp_hwcap2)       /* 0xc0 */
+       mx28_reg(hw_ocotp_hwcap3)       /* 0xd0 */
+       mx28_reg(hw_ocotp_hwcap4)       /* 0xe0 */
+       mx28_reg(hw_ocotp_hwcap5)       /* 0xf0 */
+       mx28_reg(hw_ocotp_swcap)        /* 0x100 */
+       mx28_reg(hw_ocotp_custcap)      /* 0x110 */
+       mx28_reg(hw_ocotp_lock)         /* 0x120 */
+       mx28_reg(hw_ocotp_ops0)         /* 0x130 */
+       mx28_reg(hw_ocotp_ops1)         /* 0x140 */
+       mx28_reg(hw_ocotp_ops2)         /* 0x150 */
+       mx28_reg(hw_ocotp_ops3)         /* 0x160 */
+       mx28_reg(hw_ocotp_un0)          /* 0x170 */
+       mx28_reg(hw_ocotp_un1)          /* 0x180 */
+       mx28_reg(hw_ocotp_un2)          /* 0x190 */
+       mx28_reg(hw_ocotp_rom0)         /* 0x1a0 */
+       mx28_reg(hw_ocotp_rom1)         /* 0x1b0 */
+       mx28_reg(hw_ocotp_rom2)         /* 0x1c0 */
+       mx28_reg(hw_ocotp_rom3)         /* 0x1d0 */
+       mx28_reg(hw_ocotp_rom4)         /* 0x1e0 */
+       mx28_reg(hw_ocotp_rom5)         /* 0x1f0 */
+       mx28_reg(hw_ocotp_rom6)         /* 0x200 */
+       mx28_reg(hw_ocotp_rom7)         /* 0x210 */
+       mx28_reg(hw_ocotp_srk0)         /* 0x220 */
+       mx28_reg(hw_ocotp_srk1)         /* 0x230 */
+       mx28_reg(hw_ocotp_srk2)         /* 0x240 */
+       mx28_reg(hw_ocotp_srk3)         /* 0x250 */
+       mx28_reg(hw_ocotp_srk4)         /* 0x260 */
+       mx28_reg(hw_ocotp_srk5)         /* 0x270 */
+       mx28_reg(hw_ocotp_srk6)         /* 0x280 */
+       mx28_reg(hw_ocotp_srk7)         /* 0x290 */
+       mx28_reg(hw_ocotp_version)      /* 0x2a0 */
+};
+#endif
+
+#define        OCOTP_CTRL_WR_UNLOCK_MASK               (0xffff << 16)
+#define        OCOTP_CTRL_WR_UNLOCK_OFFSET             16
+#define        OCOTP_CTRL_WR_UNLOCK_KEY                (0x3e77 << 16)
+#define        OCOTP_CTRL_RELOAD_SHADOWS               (1 << 13)
+#define        OCOTP_CTRL_RD_BANK_OPEN                 (1 << 12)
+#define        OCOTP_CTRL_ERROR                        (1 << 9)
+#define        OCOTP_CTRL_BUSY                         (1 << 8)
+#define        OCOTP_CTRL_ADDR_MASK                    0x3f
+#define        OCOTP_CTRL_ADDR_OFFSET                  0
+
+#define        OCOTP_DATA_DATA_MASK                    0xffffffff
+#define        OCOTP_DATA_DATA_OFFSET                  0
+
+#define        OCOTP_CUST_BITS_MASK                    0xffffffff
+#define        OCOTP_CUST_BITS_OFFSET                  0
+
+#define        OCOTP_CRYPTO_BITS_MASK                  0xffffffff
+#define        OCOTP_CRYPTO_BITS_OFFSET                0
+
+#define        OCOTP_HWCAP_BITS_MASK                   0xffffffff
+#define        OCOTP_HWCAP_BITS_OFFSET                 0
+
+#define        OCOTP_SWCAP_BITS_MASK                   0xffffffff
+#define        OCOTP_SWCAP_BITS_OFFSET                 0
+
+#define        OCOTP_CUSTCAP_RTC_XTAL_32768_PRESENT    (1 << 2)
+#define        OCOTP_CUSTCAP_RTC_XTAL_32000_PRESENT    (1 << 1)
+
+#define        OCOTP_LOCK_ROM7                         (1 << 31)
+#define        OCOTP_LOCK_ROM6                         (1 << 30)
+#define        OCOTP_LOCK_ROM5                         (1 << 29)
+#define        OCOTP_LOCK_ROM4                         (1 << 28)
+#define        OCOTP_LOCK_ROM3                         (1 << 27)
+#define        OCOTP_LOCK_ROM2                         (1 << 26)
+#define        OCOTP_LOCK_ROM1                         (1 << 25)
+#define        OCOTP_LOCK_ROM0                         (1 << 24)
+#define        OCOTP_LOCK_HWSW_SHADOW_ALT              (1 << 23)
+#define        OCOTP_LOCK_CRYPTODCP_ALT                (1 << 22)
+#define        OCOTP_LOCK_CRYPTOKEY_ALT                (1 << 21)
+#define        OCOTP_LOCK_PIN                          (1 << 20)
+#define        OCOTP_LOCK_OPS                          (1 << 19)
+#define        OCOTP_LOCK_UN2                          (1 << 18)
+#define        OCOTP_LOCK_UN1                          (1 << 17)
+#define        OCOTP_LOCK_UN0                          (1 << 16)
+#define        OCOTP_LOCK_SRK                          (1 << 15)
+#define        OCOTP_LOCK_UNALLOCATED_MASK             (0x7 << 12)
+#define        OCOTP_LOCK_UNALLOCATED_OFFSET           12
+#define        OCOTP_LOCK_SRK_SHADOW                   (1 << 11)
+#define        OCOTP_LOCK_ROM_SHADOW                   (1 << 10)
+#define        OCOTP_LOCK_CUSTCAP                      (1 << 9)
+#define        OCOTP_LOCK_HWSW                         (1 << 8)
+#define        OCOTP_LOCK_CUSTCAP_SHADOW               (1 << 7)
+#define        OCOTP_LOCK_HWSW_SHADOW                  (1 << 6)
+#define        OCOTP_LOCK_CRYPTODCP                    (1 << 5)
+#define        OCOTP_LOCK_CRYPTOKEY                    (1 << 4)
+#define        OCOTP_LOCK_CUST3                        (1 << 3)
+#define        OCOTP_LOCK_CUST2                        (1 << 2)
+#define        OCOTP_LOCK_CUST1                        (1 << 1)
+#define        OCOTP_LOCK_CUST0                        (1 << 0)
+
+#define        OCOTP_OPS_BITS_MASK                     0xffffffff
+#define        OCOTP_OPS_BITS_OFFSET                   0
+
+#define        OCOTP_UN_BITS_MASK                      0xffffffff
+#define        OCOTP_UN_BITS_OFFSET                    0
+
+#define        OCOTP_ROM_BOOT_MODE_MASK                (0xff << 24)
+#define        OCOTP_ROM_BOOT_MODE_OFFSET              24
+#define        OCOTP_ROM_SD_MMC_MODE_MASK              (0x3 << 22)
+#define        OCOTP_ROM_SD_MMC_MODE_OFFSET            22
+#define        OCOTP_ROM_SD_POWER_GATE_GPIO_MASK       (0x3 << 20)
+#define        OCOTP_ROM_SD_POWER_GATE_GPIO_OFFSET     20
+#define        OCOTP_ROM_SD_POWER_UP_DELAY_MASK        (0x3f << 14)
+#define        OCOTP_ROM_SD_POWER_UP_DELAY_OFFSET      14
+#define        OCOTP_ROM_SD_BUS_WIDTH_MASK             (0x3 << 12)
+#define        OCOTP_ROM_SD_BUS_WIDTH_OFFSET           12
+#define        OCOTP_ROM_SSP_SCK_INDEX_MASK            (0xf << 8)
+#define        OCOTP_ROM_SSP_SCK_INDEX_OFFSET          8
+#define        OCOTP_ROM_EMMC_USE_DDR                  (1 << 7)
+#define        OCOTP_ROM_DISABLE_SPI_NOR_FAST_READ     (1 << 6)
+#define        OCOTP_ROM_ENABLE_USB_BOOT_SERIAL_NUM    (1 << 5)
+#define        OCOTP_ROM_ENABLE_UNENCRYPTED_BOOT       (1 << 4)
+#define        OCOTP_ROM_SD_MBR_BOOT                   (1 << 3)
+
+#define        OCOTP_SRK_BITS_MASK                     0xffffffff
+#define        OCOTP_SRK_BITS_OFFSET                   0
+
+#define        OCOTP_VERSION_MAJOR_MASK                (0xff << 24)
+#define        OCOTP_VERSION_MAJOR_OFFSET              24
+#define        OCOTP_VERSION_MINOR_MASK                (0xff << 16)
+#define        OCOTP_VERSION_MINOR_OFFSET              16
+#define        OCOTP_VERSION_STEP_MASK                 0xffff
+#define        OCOTP_VERSION_STEP_OFFSET               0
+
+#endif /* __MX28_REGS_OCOTP_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-pinctrl.h b/arch/arm/include/asm/arch-mx28/regs-pinctrl.h
new file mode 100644 (file)
index 0000000..73739ca
--- /dev/null
@@ -0,0 +1,1284 @@
+/*
+ * Freescale i.MX28 PINCTRL Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_PINCTRL_H__
+#define __MX28_REGS_PINCTRL_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_pinctrl_regs {
+       mx28_reg(hw_pinctrl_ctrl)               /* 0x0 */
+
+       uint32_t        reserved1[60];
+
+       mx28_reg(hw_pinctrl_muxsel0)            /* 0x100 */
+       mx28_reg(hw_pinctrl_muxsel1)            /* 0x110 */
+       mx28_reg(hw_pinctrl_muxsel2)            /* 0x120 */
+       mx28_reg(hw_pinctrl_muxsel3)            /* 0x130 */
+       mx28_reg(hw_pinctrl_muxsel4)            /* 0x140 */
+       mx28_reg(hw_pinctrl_muxsel5)            /* 0x150 */
+       mx28_reg(hw_pinctrl_muxsel6)            /* 0x160 */
+       mx28_reg(hw_pinctrl_muxsel7)            /* 0x170 */
+       mx28_reg(hw_pinctrl_muxsel8)            /* 0x180 */
+       mx28_reg(hw_pinctrl_muxsel9)            /* 0x190 */
+       mx28_reg(hw_pinctrl_muxsel10)           /* 0x1a0 */
+       mx28_reg(hw_pinctrl_muxsel11)           /* 0x1b0 */
+       mx28_reg(hw_pinctrl_muxsel12)           /* 0x1c0 */
+       mx28_reg(hw_pinctrl_muxsel13)           /* 0x1d0 */
+
+       uint32_t        reserved2[72];
+
+       mx28_reg(hw_pinctrl_drive0)             /* 0x300 */
+       mx28_reg(hw_pinctrl_drive1)             /* 0x310 */
+       mx28_reg(hw_pinctrl_drive2)             /* 0x320 */
+       mx28_reg(hw_pinctrl_drive3)             /* 0x330 */
+       mx28_reg(hw_pinctrl_drive4)             /* 0x340 */
+       mx28_reg(hw_pinctrl_drive5)             /* 0x350 */
+       mx28_reg(hw_pinctrl_drive6)             /* 0x360 */
+       mx28_reg(hw_pinctrl_drive7)             /* 0x370 */
+       mx28_reg(hw_pinctrl_drive8)             /* 0x380 */
+       mx28_reg(hw_pinctrl_drive9)             /* 0x390 */
+       mx28_reg(hw_pinctrl_drive10)            /* 0x3a0 */
+       mx28_reg(hw_pinctrl_drive11)            /* 0x3b0 */
+       mx28_reg(hw_pinctrl_drive12)            /* 0x3c0 */
+       mx28_reg(hw_pinctrl_drive13)            /* 0x3d0 */
+       mx28_reg(hw_pinctrl_drive14)            /* 0x3e0 */
+       mx28_reg(hw_pinctrl_drive15)            /* 0x3f0 */
+       mx28_reg(hw_pinctrl_drive16)            /* 0x400 */
+       mx28_reg(hw_pinctrl_drive17)            /* 0x410 */
+       mx28_reg(hw_pinctrl_drive18)            /* 0x420 */
+       mx28_reg(hw_pinctrl_drive19)            /* 0x430 */
+
+       uint32_t        reserved3[112];
+
+       mx28_reg(hw_pinctrl_pull0)              /* 0x600 */
+       mx28_reg(hw_pinctrl_pull1)              /* 0x610 */
+       mx28_reg(hw_pinctrl_pull2)              /* 0x620 */
+       mx28_reg(hw_pinctrl_pull3)              /* 0x630 */
+       mx28_reg(hw_pinctrl_pull4)              /* 0x640 */
+       mx28_reg(hw_pinctrl_pull5)              /* 0x650 */
+       mx28_reg(hw_pinctrl_pull6)              /* 0x660 */
+
+       uint32_t        reserved4[36];
+
+       mx28_reg(hw_pinctrl_dout0)              /* 0x700 */
+       mx28_reg(hw_pinctrl_dout1)              /* 0x710 */
+       mx28_reg(hw_pinctrl_dout2)              /* 0x720 */
+       mx28_reg(hw_pinctrl_dout3)              /* 0x730 */
+       mx28_reg(hw_pinctrl_dout4)              /* 0x740 */
+
+       uint32_t        reserved5[108];
+
+       mx28_reg(hw_pinctrl_din0)               /* 0x900 */
+       mx28_reg(hw_pinctrl_din1)               /* 0x910 */
+       mx28_reg(hw_pinctrl_din2)               /* 0x920 */
+       mx28_reg(hw_pinctrl_din3)               /* 0x930 */
+       mx28_reg(hw_pinctrl_din4)               /* 0x940 */
+
+       uint32_t        reserved6[108];
+
+       mx28_reg(hw_pinctrl_doe0)               /* 0xb00 */
+       mx28_reg(hw_pinctrl_doe1)               /* 0xb10 */
+       mx28_reg(hw_pinctrl_doe2)               /* 0xb20 */
+       mx28_reg(hw_pinctrl_doe3)               /* 0xb30 */
+       mx28_reg(hw_pinctrl_doe4)               /* 0xb40 */
+
+       uint32_t        reserved7[300];
+
+       mx28_reg(hw_pinctrl_pin2irq0)           /* 0x1000 */
+       mx28_reg(hw_pinctrl_pin2irq1)           /* 0x1010 */
+       mx28_reg(hw_pinctrl_pin2irq2)           /* 0x1020 */
+       mx28_reg(hw_pinctrl_pin2irq3)           /* 0x1030 */
+       mx28_reg(hw_pinctrl_pin2irq4)           /* 0x1040 */
+
+       uint32_t        reserved8[44];
+
+       mx28_reg(hw_pinctrl_irqen0)             /* 0x1100 */
+       mx28_reg(hw_pinctrl_irqen1)             /* 0x1110 */
+       mx28_reg(hw_pinctrl_irqen2)             /* 0x1120 */
+       mx28_reg(hw_pinctrl_irqen3)             /* 0x1130 */
+       mx28_reg(hw_pinctrl_irqen4)             /* 0x1140 */
+
+       uint32_t        reserved9[44];
+
+       mx28_reg(hw_pinctrl_irqlevel0)          /* 0x1200 */
+       mx28_reg(hw_pinctrl_irqlevel1)          /* 0x1210 */
+       mx28_reg(hw_pinctrl_irqlevel2)          /* 0x1220 */
+       mx28_reg(hw_pinctrl_irqlevel3)          /* 0x1230 */
+       mx28_reg(hw_pinctrl_irqlevel4)          /* 0x1240 */
+
+       uint32_t        reserved10[44];
+
+       mx28_reg(hw_pinctrl_irqpol0)            /* 0x1300 */
+       mx28_reg(hw_pinctrl_irqpol1)            /* 0x1310 */
+       mx28_reg(hw_pinctrl_irqpol2)            /* 0x1320 */
+       mx28_reg(hw_pinctrl_irqpol3)            /* 0x1330 */
+       mx28_reg(hw_pinctrl_irqpol4)            /* 0x1340 */
+
+       uint32_t        reserved11[44];
+
+       mx28_reg(hw_pinctrl_irqstat0)           /* 0x1400 */
+       mx28_reg(hw_pinctrl_irqstat1)           /* 0x1410 */
+       mx28_reg(hw_pinctrl_irqstat2)           /* 0x1420 */
+       mx28_reg(hw_pinctrl_irqstat3)           /* 0x1430 */
+       mx28_reg(hw_pinctrl_irqstat4)           /* 0x1440 */
+
+       uint32_t        reserved12[380];
+
+       mx28_reg(hw_pinctrl_emi_odt_ctrl)       /* 0x1a40 */
+
+       uint32_t        reserved13[76];
+
+       mx28_reg(hw_pinctrl_emi_ds_ctrl)        /* 0x1b80 */
+};
+#endif
+
+#define        PINCTRL_CTRL_SFTRST                             (1 << 31)
+#define        PINCTRL_CTRL_CLKGATE                            (1 << 30)
+#define        PINCTRL_CTRL_PRESENT4                           (1 << 24)
+#define        PINCTRL_CTRL_PRESENT3                           (1 << 23)
+#define        PINCTRL_CTRL_PRESENT2                           (1 << 22)
+#define        PINCTRL_CTRL_PRESENT1                           (1 << 21)
+#define        PINCTRL_CTRL_PRESENT0                           (1 << 20)
+#define        PINCTRL_CTRL_IRQOUT4                            (1 << 4)
+#define        PINCTRL_CTRL_IRQOUT3                            (1 << 3)
+#define        PINCTRL_CTRL_IRQOUT2                            (1 << 2)
+#define        PINCTRL_CTRL_IRQOUT1                            (1 << 1)
+#define        PINCTRL_CTRL_IRQOUT0                            (1 << 0)
+
+#define        PINCTRL_MUXSEL0_BANK0_PIN07_MASK                (0x3 << 14)
+#define        PINCTRL_MUXSEL0_BANK0_PIN07_OFFSET              14
+#define        PINCTRL_MUXSEL0_BANK0_PIN06_MASK                (0x3 << 12)
+#define        PINCTRL_MUXSEL0_BANK0_PIN06_OFFSET              12
+#define        PINCTRL_MUXSEL0_BANK0_PIN05_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL0_BANK0_PIN05_OFFSET              10
+#define        PINCTRL_MUXSEL0_BANK0_PIN04_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL0_BANK0_PIN04_OFFSET              8
+#define        PINCTRL_MUXSEL0_BANK0_PIN03_MASK                (0x3 << 6)
+#define        PINCTRL_MUXSEL0_BANK0_PIN03_OFFSET              6
+#define        PINCTRL_MUXSEL0_BANK0_PIN02_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL0_BANK0_PIN02_OFFSET              4
+#define        PINCTRL_MUXSEL0_BANK0_PIN01_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL0_BANK0_PIN01_OFFSET              2
+#define        PINCTRL_MUXSEL0_BANK0_PIN00_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL0_BANK0_PIN00_OFFSET              0
+
+#define        PINCTRL_MUXSEL1_BANK0_PIN28_MASK                (0x3 << 24)
+#define        PINCTRL_MUXSEL1_BANK0_PIN28_OFFSET              24
+#define        PINCTRL_MUXSEL1_BANK0_PIN27_MASK                (0x3 << 22)
+#define        PINCTRL_MUXSEL1_BANK0_PIN27_OFFSET              22
+#define        PINCTRL_MUXSEL1_BANK0_PIN26_MASK                (0x3 << 20)
+#define        PINCTRL_MUXSEL1_BANK0_PIN26_OFFSET              20
+#define        PINCTRL_MUXSEL1_BANK0_PIN25_MASK                (0x3 << 18)
+#define        PINCTRL_MUXSEL1_BANK0_PIN25_OFFSET              18
+#define        PINCTRL_MUXSEL1_BANK0_PIN24_MASK                (0x3 << 16)
+#define        PINCTRL_MUXSEL1_BANK0_PIN24_OFFSET              16
+#define        PINCTRL_MUXSEL1_BANK0_PIN23_MASK                (0x3 << 14)
+#define        PINCTRL_MUXSEL1_BANK0_PIN23_OFFSET              14
+#define        PINCTRL_MUXSEL1_BANK0_PIN22_MASK                (0x3 << 12)
+#define        PINCTRL_MUXSEL1_BANK0_PIN22_OFFSET              12
+#define        PINCTRL_MUXSEL1_BANK0_PIN21_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL1_BANK0_PIN21_OFFSET              10
+#define        PINCTRL_MUXSEL1_BANK0_PIN20_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL1_BANK0_PIN20_OFFSET              8
+#define        PINCTRL_MUXSEL1_BANK0_PIN19_MASK                (0x3 << 6)
+#define        PINCTRL_MUXSEL1_BANK0_PIN19_OFFSET              6
+#define        PINCTRL_MUXSEL1_BANK0_PIN18_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL1_BANK0_PIN18_OFFSET              4
+#define        PINCTRL_MUXSEL1_BANK0_PIN17_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL1_BANK0_PIN17_OFFSET              2
+#define        PINCTRL_MUXSEL1_BANK0_PIN16_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL1_BANK0_PIN16_OFFSET              0
+
+#define        PINCTRL_MUXSEL2_BANK1_PIN15_MASK                (0x3 << 30)
+#define        PINCTRL_MUXSEL2_BANK1_PIN15_OFFSET              30
+#define        PINCTRL_MUXSEL2_BANK1_PIN14_MASK                (0x3 << 28)
+#define        PINCTRL_MUXSEL2_BANK1_PIN14_OFFSET              28
+#define        PINCTRL_MUXSEL2_BANK1_PIN13_MASK                (0x3 << 26)
+#define        PINCTRL_MUXSEL2_BANK1_PIN13_OFFSET              26
+#define        PINCTRL_MUXSEL2_BANK1_PIN12_MASK                (0x3 << 24)
+#define        PINCTRL_MUXSEL2_BANK1_PIN12_OFFSET              24
+#define        PINCTRL_MUXSEL2_BANK1_PIN11_MASK                (0x3 << 22)
+#define        PINCTRL_MUXSEL2_BANK1_PIN11_OFFSET              22
+#define        PINCTRL_MUXSEL2_BANK1_PIN10_MASK                (0x3 << 20)
+#define        PINCTRL_MUXSEL2_BANK1_PIN10_OFFSET              20
+#define        PINCTRL_MUXSEL2_BANK1_PIN09_MASK                (0x3 << 18)
+#define        PINCTRL_MUXSEL2_BANK1_PIN09_OFFSET              18
+#define        PINCTRL_MUXSEL2_BANK1_PIN08_MASK                (0x3 << 16)
+#define        PINCTRL_MUXSEL2_BANK1_PIN08_OFFSET              16
+#define        PINCTRL_MUXSEL2_BANK1_PIN07_MASK                (0x3 << 14)
+#define        PINCTRL_MUXSEL2_BANK1_PIN07_OFFSET              14
+#define        PINCTRL_MUXSEL2_BANK1_PIN06_MASK                (0x3 << 12)
+#define        PINCTRL_MUXSEL2_BANK1_PIN06_OFFSET              12
+#define        PINCTRL_MUXSEL2_BANK1_PIN05_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL2_BANK1_PIN05_OFFSET              10
+#define        PINCTRL_MUXSEL2_BANK1_PIN04_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL2_BANK1_PIN04_OFFSET              8
+#define        PINCTRL_MUXSEL2_BANK1_PIN03_MASK                (0x3 << 6)
+#define        PINCTRL_MUXSEL2_BANK1_PIN03_OFFSET              6
+#define        PINCTRL_MUXSEL2_BANK1_PIN02_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL2_BANK1_PIN02_OFFSET              4
+#define        PINCTRL_MUXSEL2_BANK1_PIN01_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL2_BANK1_PIN01_OFFSET              2
+#define        PINCTRL_MUXSEL2_BANK1_PIN00_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL2_BANK1_PIN00_OFFSET              0
+
+#define        PINCTRL_MUXSEL3_BANK1_PIN31_MASK                (0x3 << 30)
+#define        PINCTRL_MUXSEL3_BANK1_PIN31_OFFSET              30
+#define        PINCTRL_MUXSEL3_BANK1_PIN30_MASK                (0x3 << 28)
+#define        PINCTRL_MUXSEL3_BANK1_PIN30_OFFSET              28
+#define        PINCTRL_MUXSEL3_BANK1_PIN29_MASK                (0x3 << 26)
+#define        PINCTRL_MUXSEL3_BANK1_PIN29_OFFSET              26
+#define        PINCTRL_MUXSEL3_BANK1_PIN28_MASK                (0x3 << 24)
+#define        PINCTRL_MUXSEL3_BANK1_PIN28_OFFSET              24
+#define        PINCTRL_MUXSEL3_BANK1_PIN27_MASK                (0x3 << 22)
+#define        PINCTRL_MUXSEL3_BANK1_PIN27_OFFSET              22
+#define        PINCTRL_MUXSEL3_BANK1_PIN26_MASK                (0x3 << 20)
+#define        PINCTRL_MUXSEL3_BANK1_PIN26_OFFSET              20
+#define        PINCTRL_MUXSEL3_BANK1_PIN25_MASK                (0x3 << 18)
+#define        PINCTRL_MUXSEL3_BANK1_PIN25_OFFSET              18
+#define        PINCTRL_MUXSEL3_BANK1_PIN24_MASK                (0x3 << 16)
+#define        PINCTRL_MUXSEL3_BANK1_PIN24_OFFSET              16
+#define        PINCTRL_MUXSEL3_BANK1_PIN23_MASK                (0x3 << 14)
+#define        PINCTRL_MUXSEL3_BANK1_PIN23_OFFSET              14
+#define        PINCTRL_MUXSEL3_BANK1_PIN22_MASK                (0x3 << 12)
+#define        PINCTRL_MUXSEL3_BANK1_PIN22_OFFSET              12
+#define        PINCTRL_MUXSEL3_BANK1_PIN21_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL3_BANK1_PIN21_OFFSET              10
+#define        PINCTRL_MUXSEL3_BANK1_PIN20_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL3_BANK1_PIN20_OFFSET              8
+#define        PINCTRL_MUXSEL3_BANK1_PIN19_MASK                (0x3 << 6)
+#define        PINCTRL_MUXSEL3_BANK1_PIN19_OFFSET              6
+#define        PINCTRL_MUXSEL3_BANK1_PIN18_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL3_BANK1_PIN18_OFFSET              4
+#define        PINCTRL_MUXSEL3_BANK1_PIN17_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL3_BANK1_PIN17_OFFSET              2
+#define        PINCTRL_MUXSEL3_BANK1_PIN16_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL3_BANK1_PIN16_OFFSET              0
+
+#define        PINCTRL_MUXSEL4_BANK2_PIN15_MASK                (0x3 << 30)
+#define        PINCTRL_MUXSEL4_BANK2_PIN15_OFFSET              30
+#define        PINCTRL_MUXSEL4_BANK2_PIN14_MASK                (0x3 << 28)
+#define        PINCTRL_MUXSEL4_BANK2_PIN14_OFFSET              28
+#define        PINCTRL_MUXSEL4_BANK2_PIN13_MASK                (0x3 << 26)
+#define        PINCTRL_MUXSEL4_BANK2_PIN13_OFFSET              26
+#define        PINCTRL_MUXSEL4_BANK2_PIN12_MASK                (0x3 << 24)
+#define        PINCTRL_MUXSEL4_BANK2_PIN12_OFFSET              24
+#define        PINCTRL_MUXSEL4_BANK2_PIN10_MASK                (0x3 << 20)
+#define        PINCTRL_MUXSEL4_BANK2_PIN10_OFFSET              20
+#define        PINCTRL_MUXSEL4_BANK2_PIN09_MASK                (0x3 << 18)
+#define        PINCTRL_MUXSEL4_BANK2_PIN09_OFFSET              18
+#define        PINCTRL_MUXSEL4_BANK2_PIN08_MASK                (0x3 << 16)
+#define        PINCTRL_MUXSEL4_BANK2_PIN08_OFFSET              16
+#define        PINCTRL_MUXSEL4_BANK2_PIN07_MASK                (0x3 << 14)
+#define        PINCTRL_MUXSEL4_BANK2_PIN07_OFFSET              14
+#define        PINCTRL_MUXSEL4_BANK2_PIN06_MASK                (0x3 << 12)
+#define        PINCTRL_MUXSEL4_BANK2_PIN06_OFFSET              12
+#define        PINCTRL_MUXSEL4_BANK2_PIN05_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL4_BANK2_PIN05_OFFSET              10
+#define        PINCTRL_MUXSEL4_BANK2_PIN04_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL4_BANK2_PIN04_OFFSET              8
+#define        PINCTRL_MUXSEL4_BANK2_PIN03_MASK                (0x3 << 6)
+#define        PINCTRL_MUXSEL4_BANK2_PIN03_OFFSET              6
+#define        PINCTRL_MUXSEL4_BANK2_PIN02_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL4_BANK2_PIN02_OFFSET              4
+#define        PINCTRL_MUXSEL4_BANK2_PIN01_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL4_BANK2_PIN01_OFFSET              2
+#define        PINCTRL_MUXSEL4_BANK2_PIN00_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL4_BANK2_PIN00_OFFSET              0
+
+#define        PINCTRL_MUXSEL5_BANK2_PIN27_MASK                (0x3 << 22)
+#define        PINCTRL_MUXSEL5_BANK2_PIN27_OFFSET              22
+#define        PINCTRL_MUXSEL5_BANK2_PIN26_MASK                (0x3 << 20)
+#define        PINCTRL_MUXSEL5_BANK2_PIN26_OFFSET              20
+#define        PINCTRL_MUXSEL5_BANK2_PIN25_MASK                (0x3 << 18)
+#define        PINCTRL_MUXSEL5_BANK2_PIN25_OFFSET              18
+#define        PINCTRL_MUXSEL5_BANK2_PIN24_MASK                (0x3 << 16)
+#define        PINCTRL_MUXSEL5_BANK2_PIN24_OFFSET              16
+#define        PINCTRL_MUXSEL5_BANK2_PIN21_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL5_BANK2_PIN21_OFFSET              10
+#define        PINCTRL_MUXSEL5_BANK2_PIN20_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL5_BANK2_PIN20_OFFSET              8
+#define        PINCTRL_MUXSEL5_BANK2_PIN19_MASK                (0x3 << 6)
+#define        PINCTRL_MUXSEL5_BANK2_PIN19_OFFSET              6
+#define        PINCTRL_MUXSEL5_BANK2_PIN18_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL5_BANK2_PIN18_OFFSET              4
+#define        PINCTRL_MUXSEL5_BANK2_PIN17_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL5_BANK2_PIN17_OFFSET              2
+#define        PINCTRL_MUXSEL5_BANK2_PIN16_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL5_BANK2_PIN16_OFFSET              0
+
+#define        PINCTRL_MUXSEL6_BANK3_PIN15_MASK                (0x3 << 30)
+#define        PINCTRL_MUXSEL6_BANK3_PIN15_OFFSET              30
+#define        PINCTRL_MUXSEL6_BANK3_PIN14_MASK                (0x3 << 28)
+#define        PINCTRL_MUXSEL6_BANK3_PIN14_OFFSET              28
+#define        PINCTRL_MUXSEL6_BANK3_PIN13_MASK                (0x3 << 26)
+#define        PINCTRL_MUXSEL6_BANK3_PIN13_OFFSET              26
+#define        PINCTRL_MUXSEL6_BANK3_PIN12_MASK                (0x3 << 24)
+#define        PINCTRL_MUXSEL6_BANK3_PIN12_OFFSET              24
+#define        PINCTRL_MUXSEL6_BANK3_PIN11_MASK                (0x3 << 22)
+#define        PINCTRL_MUXSEL6_BANK3_PIN11_OFFSET              22
+#define        PINCTRL_MUXSEL6_BANK3_PIN10_MASK                (0x3 << 20)
+#define        PINCTRL_MUXSEL6_BANK3_PIN10_OFFSET              20
+#define        PINCTRL_MUXSEL6_BANK3_PIN09_MASK                (0x3 << 18)
+#define        PINCTRL_MUXSEL6_BANK3_PIN09_OFFSET              18
+#define        PINCTRL_MUXSEL6_BANK3_PIN08_MASK                (0x3 << 16)
+#define        PINCTRL_MUXSEL6_BANK3_PIN08_OFFSET              16
+#define        PINCTRL_MUXSEL6_BANK3_PIN07_MASK                (0x3 << 14)
+#define        PINCTRL_MUXSEL6_BANK3_PIN07_OFFSET              14
+#define        PINCTRL_MUXSEL6_BANK3_PIN06_MASK                (0x3 << 12)
+#define        PINCTRL_MUXSEL6_BANK3_PIN06_OFFSET              12
+#define        PINCTRL_MUXSEL6_BANK3_PIN05_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL6_BANK3_PIN05_OFFSET              10
+#define        PINCTRL_MUXSEL6_BANK3_PIN04_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL6_BANK3_PIN04_OFFSET              8
+#define        PINCTRL_MUXSEL6_BANK3_PIN03_MASK                (0x3 << 6)
+#define        PINCTRL_MUXSEL6_BANK3_PIN03_OFFSET              6
+#define        PINCTRL_MUXSEL6_BANK3_PIN02_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL6_BANK3_PIN02_OFFSET              4
+#define        PINCTRL_MUXSEL6_BANK3_PIN01_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL6_BANK3_PIN01_OFFSET              2
+#define        PINCTRL_MUXSEL6_BANK3_PIN00_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL6_BANK3_PIN00_OFFSET              0
+
+#define        PINCTRL_MUXSEL7_BANK3_PIN30_MASK                (0x3 << 28)
+#define        PINCTRL_MUXSEL7_BANK3_PIN30_OFFSET              28
+#define        PINCTRL_MUXSEL7_BANK3_PIN29_MASK                (0x3 << 26)
+#define        PINCTRL_MUXSEL7_BANK3_PIN29_OFFSET              26
+#define        PINCTRL_MUXSEL7_BANK3_PIN28_MASK                (0x3 << 24)
+#define        PINCTRL_MUXSEL7_BANK3_PIN28_OFFSET              24
+#define        PINCTRL_MUXSEL7_BANK3_PIN27_MASK                (0x3 << 22)
+#define        PINCTRL_MUXSEL7_BANK3_PIN27_OFFSET              22
+#define        PINCTRL_MUXSEL7_BANK3_PIN26_MASK                (0x3 << 20)
+#define        PINCTRL_MUXSEL7_BANK3_PIN26_OFFSET              20
+#define        PINCTRL_MUXSEL7_BANK3_PIN25_MASK                (0x3 << 18)
+#define        PINCTRL_MUXSEL7_BANK3_PIN25_OFFSET              18
+#define        PINCTRL_MUXSEL7_BANK3_PIN24_MASK                (0x3 << 16)
+#define        PINCTRL_MUXSEL7_BANK3_PIN24_OFFSET              16
+#define        PINCTRL_MUXSEL7_BANK3_PIN23_MASK                (0x3 << 14)
+#define        PINCTRL_MUXSEL7_BANK3_PIN23_OFFSET              14
+#define        PINCTRL_MUXSEL7_BANK3_PIN22_MASK                (0x3 << 12)
+#define        PINCTRL_MUXSEL7_BANK3_PIN22_OFFSET              12
+#define        PINCTRL_MUXSEL7_BANK3_PIN21_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL7_BANK3_PIN21_OFFSET              10
+#define        PINCTRL_MUXSEL7_BANK3_PIN20_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL7_BANK3_PIN20_OFFSET              8
+#define        PINCTRL_MUXSEL7_BANK3_PIN18_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL7_BANK3_PIN18_OFFSET              4
+#define        PINCTRL_MUXSEL7_BANK3_PIN17_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL7_BANK3_PIN17_OFFSET              2
+#define        PINCTRL_MUXSEL7_BANK3_PIN16_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL7_BANK3_PIN16_OFFSET              0
+
+#define        PINCTRL_MUXSEL8_BANK4_PIN15_MASK                (0x3 << 30)
+#define        PINCTRL_MUXSEL8_BANK4_PIN15_OFFSET              30
+#define        PINCTRL_MUXSEL8_BANK4_PIN14_MASK                (0x3 << 28)
+#define        PINCTRL_MUXSEL8_BANK4_PIN14_OFFSET              28
+#define        PINCTRL_MUXSEL8_BANK4_PIN13_MASK                (0x3 << 26)
+#define        PINCTRL_MUXSEL8_BANK4_PIN13_OFFSET              26
+#define        PINCTRL_MUXSEL8_BANK4_PIN12_MASK                (0x3 << 24)
+#define        PINCTRL_MUXSEL8_BANK4_PIN12_OFFSET              24
+#define        PINCTRL_MUXSEL8_BANK4_PIN11_MASK                (0x3 << 22)
+#define        PINCTRL_MUXSEL8_BANK4_PIN11_OFFSET              22
+#define        PINCTRL_MUXSEL8_BANK4_PIN10_MASK                (0x3 << 20)
+#define        PINCTRL_MUXSEL8_BANK4_PIN10_OFFSET              20
+#define        PINCTRL_MUXSEL8_BANK4_PIN09_MASK                (0x3 << 18)
+#define        PINCTRL_MUXSEL8_BANK4_PIN09_OFFSET              18
+#define        PINCTRL_MUXSEL8_BANK4_PIN08_MASK                (0x3 << 16)
+#define        PINCTRL_MUXSEL8_BANK4_PIN08_OFFSET              16
+#define        PINCTRL_MUXSEL8_BANK4_PIN07_MASK                (0x3 << 14)
+#define        PINCTRL_MUXSEL8_BANK4_PIN07_OFFSET              14
+#define        PINCTRL_MUXSEL8_BANK4_PIN06_MASK                (0x3 << 12)
+#define        PINCTRL_MUXSEL8_BANK4_PIN06_OFFSET              12
+#define        PINCTRL_MUXSEL8_BANK4_PIN05_MASK                (0x3 << 10)
+#define        PINCTRL_MUXSEL8_BANK4_PIN05_OFFSET              10
+#define        PINCTRL_MUXSEL8_BANK4_PIN04_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL8_BANK4_PIN04_OFFSET              8
+#define        PINCTRL_MUXSEL8_BANK4_PIN03_MASK                (0x3 << 6)
+#define        PINCTRL_MUXSEL8_BANK4_PIN03_OFFSET              6
+#define        PINCTRL_MUXSEL8_BANK4_PIN02_MASK                (0x3 << 4)
+#define        PINCTRL_MUXSEL8_BANK4_PIN02_OFFSET              4
+#define        PINCTRL_MUXSEL8_BANK4_PIN01_MASK                (0x3 << 2)
+#define        PINCTRL_MUXSEL8_BANK4_PIN01_OFFSET              2
+#define        PINCTRL_MUXSEL8_BANK4_PIN00_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL8_BANK4_PIN00_OFFSET              0
+
+#define        PINCTRL_MUXSEL9_BANK4_PIN20_MASK                (0x3 << 8)
+#define        PINCTRL_MUXSEL9_BANK4_PIN20_OFFSET              8
+#define        PINCTRL_MUXSEL9_BANK4_PIN16_MASK                (0x3 << 0)
+#define        PINCTRL_MUXSEL9_BANK4_PIN16_OFFSET              0
+
+#define        PINCTRL_MUXSEL10_BANK5_PIN15_MASK               (0x3 << 30)
+#define        PINCTRL_MUXSEL10_BANK5_PIN15_OFFSET             30
+#define        PINCTRL_MUXSEL10_BANK5_PIN14_MASK               (0x3 << 28)
+#define        PINCTRL_MUXSEL10_BANK5_PIN14_OFFSET             28
+#define        PINCTRL_MUXSEL10_BANK5_PIN13_MASK               (0x3 << 26)
+#define        PINCTRL_MUXSEL10_BANK5_PIN13_OFFSET             26
+#define        PINCTRL_MUXSEL10_BANK5_PIN12_MASK               (0x3 << 24)
+#define        PINCTRL_MUXSEL10_BANK5_PIN12_OFFSET             24
+#define        PINCTRL_MUXSEL10_BANK5_PIN11_MASK               (0x3 << 22)
+#define        PINCTRL_MUXSEL10_BANK5_PIN11_OFFSET             22
+#define        PINCTRL_MUXSEL10_BANK5_PIN10_MASK               (0x3 << 20)
+#define        PINCTRL_MUXSEL10_BANK5_PIN10_OFFSET             20
+#define        PINCTRL_MUXSEL10_BANK5_PIN09_MASK               (0x3 << 18)
+#define        PINCTRL_MUXSEL10_BANK5_PIN09_OFFSET             18
+#define        PINCTRL_MUXSEL10_BANK5_PIN08_MASK               (0x3 << 16)
+#define        PINCTRL_MUXSEL10_BANK5_PIN08_OFFSET             16
+#define        PINCTRL_MUXSEL10_BANK5_PIN07_MASK               (0x3 << 14)
+#define        PINCTRL_MUXSEL10_BANK5_PIN07_OFFSET             14
+#define        PINCTRL_MUXSEL10_BANK5_PIN06_MASK               (0x3 << 12)
+#define        PINCTRL_MUXSEL10_BANK5_PIN06_OFFSET             12
+#define        PINCTRL_MUXSEL10_BANK5_PIN05_MASK               (0x3 << 10)
+#define        PINCTRL_MUXSEL10_BANK5_PIN05_OFFSET             10
+#define        PINCTRL_MUXSEL10_BANK5_PIN04_MASK               (0x3 << 8)
+#define        PINCTRL_MUXSEL10_BANK5_PIN04_OFFSET             8
+#define        PINCTRL_MUXSEL10_BANK5_PIN03_MASK               (0x3 << 6)
+#define        PINCTRL_MUXSEL10_BANK5_PIN03_OFFSET             6
+#define        PINCTRL_MUXSEL10_BANK5_PIN02_MASK               (0x3 << 4)
+#define        PINCTRL_MUXSEL10_BANK5_PIN02_OFFSET             4
+#define        PINCTRL_MUXSEL10_BANK5_PIN01_MASK               (0x3 << 2)
+#define        PINCTRL_MUXSEL10_BANK5_PIN01_OFFSET             2
+#define        PINCTRL_MUXSEL10_BANK5_PIN00_MASK               (0x3 << 0)
+#define        PINCTRL_MUXSEL10_BANK5_PIN00_OFFSET             0
+
+#define        PINCTRL_MUXSEL11_BANK5_PIN26_MASK               (0x3 << 20)
+#define        PINCTRL_MUXSEL11_BANK5_PIN26_OFFSET             20
+#define        PINCTRL_MUXSEL11_BANK5_PIN23_MASK               (0x3 << 14)
+#define        PINCTRL_MUXSEL11_BANK5_PIN23_OFFSET             14
+#define        PINCTRL_MUXSEL11_BANK5_PIN22_MASK               (0x3 << 12)
+#define        PINCTRL_MUXSEL11_BANK5_PIN22_OFFSET             12
+#define        PINCTRL_MUXSEL11_BANK5_PIN21_MASK               (0x3 << 10)
+#define        PINCTRL_MUXSEL11_BANK5_PIN21_OFFSET             10
+#define        PINCTRL_MUXSEL11_BANK5_PIN20_MASK               (0x3 << 8)
+#define        PINCTRL_MUXSEL11_BANK5_PIN20_OFFSET             8
+#define        PINCTRL_MUXSEL11_BANK5_PIN19_MASK               (0x3 << 6)
+#define        PINCTRL_MUXSEL11_BANK5_PIN19_OFFSET             6
+#define        PINCTRL_MUXSEL11_BANK5_PIN18_MASK               (0x3 << 4)
+#define        PINCTRL_MUXSEL11_BANK5_PIN18_OFFSET             4
+#define        PINCTRL_MUXSEL11_BANK5_PIN17_MASK               (0x3 << 2)
+#define        PINCTRL_MUXSEL11_BANK5_PIN17_OFFSET             2
+#define        PINCTRL_MUXSEL11_BANK5_PIN16_MASK               (0x3 << 0)
+#define        PINCTRL_MUXSEL11_BANK5_PIN16_OFFSET             0
+
+#define        PINCTRL_MUXSEL12_BANK6_PIN14_MASK               (0x3 << 28)
+#define        PINCTRL_MUXSEL12_BANK6_PIN14_OFFSET             28
+#define        PINCTRL_MUXSEL12_BANK6_PIN13_MASK               (0x3 << 26)
+#define        PINCTRL_MUXSEL12_BANK6_PIN13_OFFSET             26
+#define        PINCTRL_MUXSEL12_BANK6_PIN12_MASK               (0x3 << 24)
+#define        PINCTRL_MUXSEL12_BANK6_PIN12_OFFSET             24
+#define        PINCTRL_MUXSEL12_BANK6_PIN11_MASK               (0x3 << 22)
+#define        PINCTRL_MUXSEL12_BANK6_PIN11_OFFSET             22
+#define        PINCTRL_MUXSEL12_BANK6_PIN10_MASK               (0x3 << 20)
+#define        PINCTRL_MUXSEL12_BANK6_PIN10_OFFSET             20
+#define        PINCTRL_MUXSEL12_BANK6_PIN09_MASK               (0x3 << 18)
+#define        PINCTRL_MUXSEL12_BANK6_PIN09_OFFSET             18
+#define        PINCTRL_MUXSEL12_BANK6_PIN08_MASK               (0x3 << 16)
+#define        PINCTRL_MUXSEL12_BANK6_PIN08_OFFSET             16
+#define        PINCTRL_MUXSEL12_BANK6_PIN07_MASK               (0x3 << 14)
+#define        PINCTRL_MUXSEL12_BANK6_PIN07_OFFSET             14
+#define        PINCTRL_MUXSEL12_BANK6_PIN06_MASK               (0x3 << 12)
+#define        PINCTRL_MUXSEL12_BANK6_PIN06_OFFSET             12
+#define        PINCTRL_MUXSEL12_BANK6_PIN05_MASK               (0x3 << 10)
+#define        PINCTRL_MUXSEL12_BANK6_PIN05_OFFSET             10
+#define        PINCTRL_MUXSEL12_BANK6_PIN04_MASK               (0x3 << 8)
+#define        PINCTRL_MUXSEL12_BANK6_PIN04_OFFSET             8
+#define        PINCTRL_MUXSEL12_BANK6_PIN03_MASK               (0x3 << 6)
+#define        PINCTRL_MUXSEL12_BANK6_PIN03_OFFSET             6
+#define        PINCTRL_MUXSEL12_BANK6_PIN02_MASK               (0x3 << 4)
+#define        PINCTRL_MUXSEL12_BANK6_PIN02_OFFSET             4
+#define        PINCTRL_MUXSEL12_BANK6_PIN01_MASK               (0x3 << 2)
+#define        PINCTRL_MUXSEL12_BANK6_PIN01_OFFSET             2
+#define        PINCTRL_MUXSEL12_BANK6_PIN00_MASK               (0x3 << 0)
+#define        PINCTRL_MUXSEL12_BANK6_PIN00_OFFSET             0
+
+#define        PINCTRL_MUXSEL13_BANK6_PIN24_MASK               (0x3 << 16)
+#define        PINCTRL_MUXSEL13_BANK6_PIN24_OFFSET             16
+#define        PINCTRL_MUXSEL13_BANK6_PIN23_MASK               (0x3 << 14)
+#define        PINCTRL_MUXSEL13_BANK6_PIN23_OFFSET             14
+#define        PINCTRL_MUXSEL13_BANK6_PIN22_MASK               (0x3 << 12)
+#define        PINCTRL_MUXSEL13_BANK6_PIN22_OFFSET             12
+#define        PINCTRL_MUXSEL13_BANK6_PIN21_MASK               (0x3 << 10)
+#define        PINCTRL_MUXSEL13_BANK6_PIN21_OFFSET             10
+#define        PINCTRL_MUXSEL13_BANK6_PIN20_MASK               (0x3 << 8)
+#define        PINCTRL_MUXSEL13_BANK6_PIN20_OFFSET             8
+#define        PINCTRL_MUXSEL13_BANK6_PIN19_MASK               (0x3 << 6)
+#define        PINCTRL_MUXSEL13_BANK6_PIN19_OFFSET             6
+#define        PINCTRL_MUXSEL13_BANK6_PIN18_MASK               (0x3 << 4)
+#define        PINCTRL_MUXSEL13_BANK6_PIN18_OFFSET             4
+#define        PINCTRL_MUXSEL13_BANK6_PIN17_MASK               (0x3 << 2)
+#define        PINCTRL_MUXSEL13_BANK6_PIN17_OFFSET             2
+#define        PINCTRL_MUXSEL13_BANK6_PIN16_MASK               (0x3 << 0)
+#define        PINCTRL_MUXSEL13_BANK6_PIN16_OFFSET             0
+
+#define        PINCTRL_DRIVE0_BANK0_PIN07_V                    (1 << 30)
+#define        PINCTRL_DRIVE0_BANK0_PIN07_MA_MASK              (0x3 << 28)
+#define        PINCTRL_DRIVE0_BANK0_PIN07_MA_OFFSET            28
+#define        PINCTRL_DRIVE0_BANK0_PIN06_V                    (1 << 26)
+#define        PINCTRL_DRIVE0_BANK0_PIN06_MA_MASK              (0x3 << 24)
+#define        PINCTRL_DRIVE0_BANK0_PIN06_MA_OFFSET            24
+#define        PINCTRL_DRIVE0_BANK0_PIN05_V                    (1 << 22)
+#define        PINCTRL_DRIVE0_BANK0_PIN05_MA_MASK              (0x3 << 20)
+#define        PINCTRL_DRIVE0_BANK0_PIN05_MA_OFFSET            20
+#define        PINCTRL_DRIVE0_BANK0_PIN04_V                    (1 << 18)
+#define        PINCTRL_DRIVE0_BANK0_PIN04_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE0_BANK0_PIN04_MA_OFFSET            16
+#define        PINCTRL_DRIVE0_BANK0_PIN03_V                    (1 << 14)
+#define        PINCTRL_DRIVE0_BANK0_PIN03_MA_MASK              (0x3 << 12)
+#define        PINCTRL_DRIVE0_BANK0_PIN03_MA_OFFSET            12
+#define        PINCTRL_DRIVE0_BANK0_PIN02_V                    (1 << 10)
+#define        PINCTRL_DRIVE0_BANK0_PIN02_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE0_BANK0_PIN02_MA_OFFSET            8
+#define        PINCTRL_DRIVE0_BANK0_PIN01_V                    (1 << 6)
+#define        PINCTRL_DRIVE0_BANK0_PIN01_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE0_BANK0_PIN01_MA_OFFSET            4
+#define        PINCTRL_DRIVE0_BANK0_PIN00_V                    (1 << 2)
+#define        PINCTRL_DRIVE0_BANK0_PIN00_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE0_BANK0_PIN00_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE2_BANK0_PIN23_V                    (1 << 30)
+#define        PINCTRL_DRIVE2_BANK0_PIN23_MA_MASK              (0x3 << 28)
+#define        PINCTRL_DRIVE2_BANK0_PIN23_MA_OFFSET            28
+#define        PINCTRL_DRIVE2_BANK0_PIN22_V                    (1 << 26)
+#define        PINCTRL_DRIVE2_BANK0_PIN22_MA_MASK              (0x3 << 24)
+#define        PINCTRL_DRIVE2_BANK0_PIN22_MA_OFFSET            24
+#define        PINCTRL_DRIVE2_BANK0_PIN21_V                    (1 << 22)
+#define        PINCTRL_DRIVE2_BANK0_PIN21_MA_MASK              (0x3 << 20)
+#define        PINCTRL_DRIVE2_BANK0_PIN21_MA_OFFSET            20
+#define        PINCTRL_DRIVE2_BANK0_PIN20_V                    (1 << 18)
+#define        PINCTRL_DRIVE2_BANK0_PIN20_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE2_BANK0_PIN20_MA_OFFSET            16
+#define        PINCTRL_DRIVE2_BANK0_PIN19_V                    (1 << 14)
+#define        PINCTRL_DRIVE2_BANK0_PIN19_MA_MASK              (0x3 << 12)
+#define        PINCTRL_DRIVE2_BANK0_PIN19_MA_OFFSET            12
+#define        PINCTRL_DRIVE2_BANK0_PIN18_V                    (1 << 10)
+#define        PINCTRL_DRIVE2_BANK0_PIN18_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE2_BANK0_PIN18_MA_OFFSET            8
+#define        PINCTRL_DRIVE2_BANK0_PIN17_V                    (1 << 6)
+#define        PINCTRL_DRIVE2_BANK0_PIN17_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE2_BANK0_PIN17_MA_OFFSET            4
+#define        PINCTRL_DRIVE2_BANK0_PIN16_V                    (1 << 2)
+#define        PINCTRL_DRIVE2_BANK0_PIN16_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE2_BANK0_PIN16_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE3_BANK0_PIN28_V                    (1 << 18)
+#define        PINCTRL_DRIVE3_BANK0_PIN28_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE3_BANK0_PIN28_MA_OFFSET            16
+#define        PINCTRL_DRIVE3_BANK0_PIN27_V                    (1 << 14)
+#define        PINCTRL_DRIVE3_BANK0_PIN27_MA_MASK              (0x3 << 12)
+#define        PINCTRL_DRIVE3_BANK0_PIN27_MA_OFFSET            12
+#define        PINCTRL_DRIVE3_BANK0_PIN26_V                    (1 << 10)
+#define        PINCTRL_DRIVE3_BANK0_PIN26_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE3_BANK0_PIN26_MA_OFFSET            8
+#define        PINCTRL_DRIVE3_BANK0_PIN25_V                    (1 << 6)
+#define        PINCTRL_DRIVE3_BANK0_PIN25_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE3_BANK0_PIN25_MA_OFFSET            4
+#define        PINCTRL_DRIVE3_BANK0_PIN24_V                    (1 << 2)
+#define        PINCTRL_DRIVE3_BANK0_PIN24_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE3_BANK0_PIN24_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE4_BANK1_PIN07_V                    (1 << 30)
+#define        PINCTRL_DRIVE4_BANK1_PIN07_MA_MASK              (0x3 << 28)
+#define        PINCTRL_DRIVE4_BANK1_PIN07_MA_OFFSET            28
+#define        PINCTRL_DRIVE4_BANK1_PIN06_V                    (1 << 26)
+#define        PINCTRL_DRIVE4_BANK1_PIN06_MA_MASK              (0x3 << 24)
+#define        PINCTRL_DRIVE4_BANK1_PIN06_MA_OFFSET            24
+#define        PINCTRL_DRIVE4_BANK1_PIN05_V                    (1 << 22)
+#define        PINCTRL_DRIVE4_BANK1_PIN05_MA_MASK              (0x3 << 20)
+#define        PINCTRL_DRIVE4_BANK1_PIN05_MA_OFFSET            20
+#define        PINCTRL_DRIVE4_BANK1_PIN04_V                    (1 << 18)
+#define        PINCTRL_DRIVE4_BANK1_PIN04_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE4_BANK1_PIN04_MA_OFFSET            16
+#define        PINCTRL_DRIVE4_BANK1_PIN03_V                    (1 << 14)
+#define        PINCTRL_DRIVE4_BANK1_PIN03_MA_MASK              (0x3 << 12)
+#define        PINCTRL_DRIVE4_BANK1_PIN03_MA_OFFSET            12
+#define        PINCTRL_DRIVE4_BANK1_PIN02_V                    (1 << 10)
+#define        PINCTRL_DRIVE4_BANK1_PIN02_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE4_BANK1_PIN02_MA_OFFSET            8
+#define        PINCTRL_DRIVE4_BANK1_PIN01_V                    (1 << 6)
+#define        PINCTRL_DRIVE4_BANK1_PIN01_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE4_BANK1_PIN01_MA_OFFSET            4
+#define        PINCTRL_DRIVE4_BANK1_PIN00_V                    (1 << 2)
+#define        PINCTRL_DRIVE4_BANK1_PIN00_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE4_BANK1_PIN00_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE5_BANK1_PIN15_V                    (1 << 30)
+#define        PINCTRL_DRIVE5_BANK1_PIN15_MA_MASK              (0x3 << 28)
+#define        PINCTRL_DRIVE5_BANK1_PIN15_MA_OFFSET            28
+#define        PINCTRL_DRIVE5_BANK1_PIN14_V                    (1 << 26)
+#define        PINCTRL_DRIVE5_BANK1_PIN14_MA_MASK              (0x3 << 24)
+#define        PINCTRL_DRIVE5_BANK1_PIN14_MA_OFFSET            24
+#define        PINCTRL_DRIVE5_BANK1_PIN13_V                    (1 << 22)
+#define        PINCTRL_DRIVE5_BANK1_PIN13_MA_MASK              (0x3 << 20)
+#define        PINCTRL_DRIVE5_BANK1_PIN13_MA_OFFSET            20
+#define        PINCTRL_DRIVE5_BANK1_PIN12_V                    (1 << 18)
+#define        PINCTRL_DRIVE5_BANK1_PIN12_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE5_BANK1_PIN12_MA_OFFSET            16
+#define        PINCTRL_DRIVE5_BANK1_PIN11_V                    (1 << 14)
+#define        PINCTRL_DRIVE5_BANK1_PIN11_MA_MASK              (0x3 << 12)
+#define        PINCTRL_DRIVE5_BANK1_PIN11_MA_OFFSET            12
+#define        PINCTRL_DRIVE5_BANK1_PIN10_V                    (1 << 10)
+#define        PINCTRL_DRIVE5_BANK1_PIN10_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE5_BANK1_PIN10_MA_OFFSET            8
+#define        PINCTRL_DRIVE5_BANK1_PIN09_V                    (1 << 6)
+#define        PINCTRL_DRIVE5_BANK1_PIN09_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE5_BANK1_PIN09_MA_OFFSET            4
+#define        PINCTRL_DRIVE5_BANK1_PIN08_V                    (1 << 2)
+#define        PINCTRL_DRIVE5_BANK1_PIN08_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE5_BANK1_PIN08_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE6_BANK1_PIN23_V                    (1 << 30)
+#define        PINCTRL_DRIVE6_BANK1_PIN23_MA_MASK              (0x3 << 28)
+#define        PINCTRL_DRIVE6_BANK1_PIN23_MA_OFFSET            28
+#define        PINCTRL_DRIVE6_BANK1_PIN22_V                    (1 << 26)
+#define        PINCTRL_DRIVE6_BANK1_PIN22_MA_MASK              (0x3 << 24)
+#define        PINCTRL_DRIVE6_BANK1_PIN22_MA_OFFSET            24
+#define        PINCTRL_DRIVE6_BANK1_PIN21_V                    (1 << 22)
+#define        PINCTRL_DRIVE6_BANK1_PIN21_MA_MASK              (0x3 << 20)
+#define        PINCTRL_DRIVE6_BANK1_PIN21_MA_OFFSET            20
+#define        PINCTRL_DRIVE6_BANK1_PIN20_V                    (1 << 18)
+#define        PINCTRL_DRIVE6_BANK1_PIN20_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE6_BANK1_PIN20_MA_OFFSET            16
+#define        PINCTRL_DRIVE6_BANK1_PIN19_V                    (1 << 14)
+#define        PINCTRL_DRIVE6_BANK1_PIN19_MA_MASK              (0x3 << 12)
+#define        PINCTRL_DRIVE6_BANK1_PIN19_MA_OFFSET            12
+#define        PINCTRL_DRIVE6_BANK1_PIN18_V                    (1 << 10)
+#define        PINCTRL_DRIVE6_BANK1_PIN18_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE6_BANK1_PIN18_MA_OFFSET            8
+#define        PINCTRL_DRIVE6_BANK1_PIN17_V                    (1 << 6)
+#define        PINCTRL_DRIVE6_BANK1_PIN17_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE6_BANK1_PIN17_MA_OFFSET            4
+#define        PINCTRL_DRIVE6_BANK1_PIN16_V                    (1 << 2)
+#define        PINCTRL_DRIVE6_BANK1_PIN16_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE6_BANK1_PIN16_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE7_BANK1_PIN31_V                    (1 << 30)
+#define        PINCTRL_DRIVE7_BANK1_PIN31_MA_MASK              (0x3 << 28)
+#define        PINCTRL_DRIVE7_BANK1_PIN31_MA_OFFSET            28
+#define        PINCTRL_DRIVE7_BANK1_PIN30_V                    (1 << 26)
+#define        PINCTRL_DRIVE7_BANK1_PIN30_MA_MASK              (0x3 << 24)
+#define        PINCTRL_DRIVE7_BANK1_PIN30_MA_OFFSET            24
+#define        PINCTRL_DRIVE7_BANK1_PIN29_V                    (1 << 22)
+#define        PINCTRL_DRIVE7_BANK1_PIN29_MA_MASK              (0x3 << 20)
+#define        PINCTRL_DRIVE7_BANK1_PIN29_MA_OFFSET            20
+#define        PINCTRL_DRIVE7_BANK1_PIN28_V                    (1 << 18)
+#define        PINCTRL_DRIVE7_BANK1_PIN28_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE7_BANK1_PIN28_MA_OFFSET            16
+#define        PINCTRL_DRIVE7_BANK1_PIN27_V                    (1 << 14)
+#define        PINCTRL_DRIVE7_BANK1_PIN27_MA_MASK              (0x3 << 12)
+#define        PINCTRL_DRIVE7_BANK1_PIN27_MA_OFFSET            12
+#define        PINCTRL_DRIVE7_BANK1_PIN26_V                    (1 << 10)
+#define        PINCTRL_DRIVE7_BANK1_PIN26_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE7_BANK1_PIN26_MA_OFFSET            8
+#define        PINCTRL_DRIVE7_BANK1_PIN25_V                    (1 << 6)
+#define        PINCTRL_DRIVE7_BANK1_PIN25_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE7_BANK1_PIN25_MA_OFFSET            4
+#define        PINCTRL_DRIVE7_BANK1_PIN24_V                    (1 << 2)
+#define        PINCTRL_DRIVE7_BANK1_PIN24_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE7_BANK1_PIN24_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE8_BANK2_PIN07_V                    (1 << 30)
+#define        PINCTRL_DRIVE8_BANK2_PIN07_MA_MASK              (0x3 << 28)
+#define        PINCTRL_DRIVE8_BANK2_PIN07_MA_OFFSET            28
+#define        PINCTRL_DRIVE8_BANK2_PIN06_V                    (1 << 26)
+#define        PINCTRL_DRIVE8_BANK2_PIN06_MA_MASK              (0x3 << 24)
+#define        PINCTRL_DRIVE8_BANK2_PIN06_MA_OFFSET            24
+#define        PINCTRL_DRIVE8_BANK2_PIN05_V                    (1 << 22)
+#define        PINCTRL_DRIVE8_BANK2_PIN05_MA_MASK              (0x3 << 20)
+#define        PINCTRL_DRIVE8_BANK2_PIN05_MA_OFFSET            20
+#define        PINCTRL_DRIVE8_BANK2_PIN04_V                    (1 << 18)
+#define        PINCTRL_DRIVE8_BANK2_PIN04_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE8_BANK2_PIN04_MA_OFFSET            16
+#define        PINCTRL_DRIVE8_BANK2_PIN03_V                    (1 << 14)
+#define        PINCTRL_DRIVE8_BANK2_PIN03_MA_MASK              (0x3 << 12)
+#define        PINCTRL_DRIVE8_BANK2_PIN03_MA_OFFSET            12
+#define        PINCTRL_DRIVE8_BANK2_PIN02_V                    (1 << 10)
+#define        PINCTRL_DRIVE8_BANK2_PIN02_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE8_BANK2_PIN02_MA_OFFSET            8
+#define        PINCTRL_DRIVE8_BANK2_PIN01_V                    (1 << 6)
+#define        PINCTRL_DRIVE8_BANK2_PIN01_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE8_BANK2_PIN01_MA_OFFSET            4
+#define        PINCTRL_DRIVE8_BANK2_PIN00_V                    (1 << 2)
+#define        PINCTRL_DRIVE8_BANK2_PIN00_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE8_BANK2_PIN00_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE9_BANK2_PIN15_V                    (1 << 30)
+#define        PINCTRL_DRIVE9_BANK2_PIN15_MA_MASK              (0x3 << 28)
+#define        PINCTRL_DRIVE9_BANK2_PIN15_MA_OFFSET            28
+#define        PINCTRL_DRIVE9_BANK2_PIN14_V                    (1 << 26)
+#define        PINCTRL_DRIVE9_BANK2_PIN14_MA_MASK              (0x3 << 24)
+#define        PINCTRL_DRIVE9_BANK2_PIN14_MA_OFFSET            24
+#define        PINCTRL_DRIVE9_BANK2_PIN13_V                    (1 << 22)
+#define        PINCTRL_DRIVE9_BANK2_PIN13_MA_MASK              (0x3 << 20)
+#define        PINCTRL_DRIVE9_BANK2_PIN13_MA_OFFSET            20
+#define        PINCTRL_DRIVE9_BANK2_PIN12_V                    (1 << 18)
+#define        PINCTRL_DRIVE9_BANK2_PIN12_MA_MASK              (0x3 << 16)
+#define        PINCTRL_DRIVE9_BANK2_PIN12_MA_OFFSET            16
+#define        PINCTRL_DRIVE9_BANK2_PIN10_V                    (1 << 10)
+#define        PINCTRL_DRIVE9_BANK2_PIN10_MA_MASK              (0x3 << 8)
+#define        PINCTRL_DRIVE9_BANK2_PIN10_MA_OFFSET            8
+#define        PINCTRL_DRIVE9_BANK2_PIN09_V                    (1 << 6)
+#define        PINCTRL_DRIVE9_BANK2_PIN09_MA_MASK              (0x3 << 4)
+#define        PINCTRL_DRIVE9_BANK2_PIN09_MA_OFFSET            4
+#define        PINCTRL_DRIVE9_BANK2_PIN08_V                    (1 << 2)
+#define        PINCTRL_DRIVE9_BANK2_PIN08_MA_MASK              (0x3 << 0)
+#define        PINCTRL_DRIVE9_BANK2_PIN08_MA_OFFSET            0
+
+#define        PINCTRL_DRIVE10_BANK2_PIN21_V                   (1 << 22)
+#define        PINCTRL_DRIVE10_BANK2_PIN21_MA_MASK             (0x3 << 20)
+#define        PINCTRL_DRIVE10_BANK2_PIN21_MA_OFFSET           20
+#define        PINCTRL_DRIVE10_BANK2_PIN20_V                   (1 << 18)
+#define        PINCTRL_DRIVE10_BANK2_PIN20_MA_MASK             (0x3 << 16)
+#define        PINCTRL_DRIVE10_BANK2_PIN20_MA_OFFSET           16
+#define        PINCTRL_DRIVE10_BANK2_PIN19_V                   (1 << 14)
+#define        PINCTRL_DRIVE10_BANK2_PIN19_MA_MASK             (0x3 << 12)
+#define        PINCTRL_DRIVE10_BANK2_PIN19_MA_OFFSET           12
+#define        PINCTRL_DRIVE10_BANK2_PIN18_V                   (1 << 10)
+#define        PINCTRL_DRIVE10_BANK2_PIN18_MA_MASK             (0x3 << 8)
+#define        PINCTRL_DRIVE10_BANK2_PIN18_MA_OFFSET           8
+#define        PINCTRL_DRIVE10_BANK2_PIN17_V                   (1 << 6)
+#define        PINCTRL_DRIVE10_BANK2_PIN17_MA_MASK             (0x3 << 4)
+#define        PINCTRL_DRIVE10_BANK2_PIN17_MA_OFFSET           4
+#define        PINCTRL_DRIVE10_BANK2_PIN16_V                   (1 << 2)
+#define        PINCTRL_DRIVE10_BANK2_PIN16_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE10_BANK2_PIN16_MA_OFFSET           0
+
+#define        PINCTRL_DRIVE11_BANK2_PIN27_V                   (1 << 14)
+#define        PINCTRL_DRIVE11_BANK2_PIN27_MA_MASK             (0x3 << 12)
+#define        PINCTRL_DRIVE11_BANK2_PIN27_MA_OFFSET           12
+#define        PINCTRL_DRIVE11_BANK2_PIN26_V                   (1 << 10)
+#define        PINCTRL_DRIVE11_BANK2_PIN26_MA_MASK             (0x3 << 8)
+#define        PINCTRL_DRIVE11_BANK2_PIN26_MA_OFFSET           8
+#define        PINCTRL_DRIVE11_BANK2_PIN25_V                   (1 << 6)
+#define        PINCTRL_DRIVE11_BANK2_PIN25_MA_MASK             (0x3 << 4)
+#define        PINCTRL_DRIVE11_BANK2_PIN25_MA_OFFSET           4
+#define        PINCTRL_DRIVE11_BANK2_PIN24_V                   (1 << 2)
+#define        PINCTRL_DRIVE11_BANK2_PIN24_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE11_BANK2_PIN24_MA_OFFSET           0
+
+#define        PINCTRL_DRIVE12_BANK3_PIN07_V                   (1 << 30)
+#define        PINCTRL_DRIVE12_BANK3_PIN07_MA_MASK             (0x3 << 28)
+#define        PINCTRL_DRIVE12_BANK3_PIN07_MA_OFFSET           28
+#define        PINCTRL_DRIVE12_BANK3_PIN06_V                   (1 << 26)
+#define        PINCTRL_DRIVE12_BANK3_PIN06_MA_MASK             (0x3 << 24)
+#define        PINCTRL_DRIVE12_BANK3_PIN06_MA_OFFSET           24
+#define        PINCTRL_DRIVE12_BANK3_PIN05_V                   (1 << 22)
+#define        PINCTRL_DRIVE12_BANK3_PIN05_MA_MASK             (0x3 << 20)
+#define        PINCTRL_DRIVE12_BANK3_PIN05_MA_OFFSET           20
+#define        PINCTRL_DRIVE12_BANK3_PIN04_V                   (1 << 18)
+#define        PINCTRL_DRIVE12_BANK3_PIN04_MA_MASK             (0x3 << 16)
+#define        PINCTRL_DRIVE12_BANK3_PIN04_MA_OFFSET           16
+#define        PINCTRL_DRIVE12_BANK3_PIN03_V                   (1 << 14)
+#define        PINCTRL_DRIVE12_BANK3_PIN03_MA_MASK             (0x3 << 12)
+#define        PINCTRL_DRIVE12_BANK3_PIN03_MA_OFFSET           12
+#define        PINCTRL_DRIVE12_BANK3_PIN02_V                   (1 << 10)
+#define        PINCTRL_DRIVE12_BANK3_PIN02_MA_MASK             (0x3 << 8)
+#define        PINCTRL_DRIVE12_BANK3_PIN02_MA_OFFSET           8
+#define        PINCTRL_DRIVE12_BANK3_PIN01_V                   (1 << 6)
+#define        PINCTRL_DRIVE12_BANK3_PIN01_MA_MASK             (0x3 << 4)
+#define        PINCTRL_DRIVE12_BANK3_PIN01_MA_OFFSET           4
+#define        PINCTRL_DRIVE12_BANK3_PIN00_V                   (1 << 2)
+#define        PINCTRL_DRIVE12_BANK3_PIN00_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE12_BANK3_PIN00_MA_OFFSET           0
+
+#define        PINCTRL_DRIVE13_BANK3_PIN15_V                   (1 << 30)
+#define        PINCTRL_DRIVE13_BANK3_PIN15_MA_MASK             (0x3 << 28)
+#define        PINCTRL_DRIVE13_BANK3_PIN15_MA_OFFSET           28
+#define        PINCTRL_DRIVE13_BANK3_PIN14_V                   (1 << 26)
+#define        PINCTRL_DRIVE13_BANK3_PIN14_MA_MASK             (0x3 << 24)
+#define        PINCTRL_DRIVE13_BANK3_PIN14_MA_OFFSET           24
+#define        PINCTRL_DRIVE13_BANK3_PIN13_V                   (1 << 22)
+#define        PINCTRL_DRIVE13_BANK3_PIN13_MA_MASK             (0x3 << 20)
+#define        PINCTRL_DRIVE13_BANK3_PIN13_MA_OFFSET           20
+#define        PINCTRL_DRIVE13_BANK3_PIN12_V                   (1 << 18)
+#define        PINCTRL_DRIVE13_BANK3_PIN12_MA_MASK             (0x3 << 16)
+#define        PINCTRL_DRIVE13_BANK3_PIN12_MA_OFFSET           16
+#define        PINCTRL_DRIVE13_BANK3_PIN11_V                   (1 << 14)
+#define        PINCTRL_DRIVE13_BANK3_PIN11_MA_MASK             (0x3 << 12)
+#define        PINCTRL_DRIVE13_BANK3_PIN11_MA_OFFSET           12
+#define        PINCTRL_DRIVE13_BANK3_PIN10_V                   (1 << 10)
+#define        PINCTRL_DRIVE13_BANK3_PIN10_MA_MASK             (0x3 << 8)
+#define        PINCTRL_DRIVE13_BANK3_PIN10_MA_OFFSET           8
+#define        PINCTRL_DRIVE13_BANK3_PIN09_V                   (1 << 6)
+#define        PINCTRL_DRIVE13_BANK3_PIN09_MA_MASK             (0x3 << 4)
+#define        PINCTRL_DRIVE13_BANK3_PIN09_MA_OFFSET           4
+#define        PINCTRL_DRIVE13_BANK3_PIN08_V                   (1 << 2)
+#define        PINCTRL_DRIVE13_BANK3_PIN08_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE13_BANK3_PIN08_MA_OFFSET           0
+
+#define        PINCTRL_DRIVE14_BANK3_PIN23_V                   (1 << 30)
+#define        PINCTRL_DRIVE14_BANK3_PIN23_MA_MASK             (0x3 << 28)
+#define        PINCTRL_DRIVE14_BANK3_PIN23_MA_OFFSET           28
+#define        PINCTRL_DRIVE14_BANK3_PIN22_V                   (1 << 26)
+#define        PINCTRL_DRIVE14_BANK3_PIN22_MA_MASK             (0x3 << 24)
+#define        PINCTRL_DRIVE14_BANK3_PIN22_MA_OFFSET           24
+#define        PINCTRL_DRIVE14_BANK3_PIN21_V                   (1 << 22)
+#define        PINCTRL_DRIVE14_BANK3_PIN21_MA_MASK             (0x3 << 20)
+#define        PINCTRL_DRIVE14_BANK3_PIN21_MA_OFFSET           20
+#define        PINCTRL_DRIVE14_BANK3_PIN20_V                   (1 << 18)
+#define        PINCTRL_DRIVE14_BANK3_PIN20_MA_MASK             (0x3 << 16)
+#define        PINCTRL_DRIVE14_BANK3_PIN20_MA_OFFSET           16
+#define        PINCTRL_DRIVE14_BANK3_PIN18_V                   (1 << 10)
+#define        PINCTRL_DRIVE14_BANK3_PIN18_MA_MASK             (0x3 << 8)
+#define        PINCTRL_DRIVE14_BANK3_PIN18_MA_OFFSET           8
+#define        PINCTRL_DRIVE14_BANK3_PIN17_V                   (1 << 6)
+#define        PINCTRL_DRIVE14_BANK3_PIN17_MA_MASK             (0x3 << 4)
+#define        PINCTRL_DRIVE14_BANK3_PIN17_MA_OFFSET           4
+#define        PINCTRL_DRIVE14_BANK3_PIN16_V                   (1 << 2)
+#define        PINCTRL_DRIVE14_BANK3_PIN16_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE14_BANK3_PIN16_MA_OFFSET           0
+
+#define        PINCTRL_DRIVE15_BANK3_PIN30_V                   (1 << 26)
+#define        PINCTRL_DRIVE15_BANK3_PIN30_MA_MASK             (0x3 << 24)
+#define        PINCTRL_DRIVE15_BANK3_PIN30_MA_OFFSET           24
+#define        PINCTRL_DRIVE15_BANK3_PIN29_V                   (1 << 22)
+#define        PINCTRL_DRIVE15_BANK3_PIN29_MA_MASK             (0x3 << 20)
+#define        PINCTRL_DRIVE15_BANK3_PIN29_MA_OFFSET           20
+#define        PINCTRL_DRIVE15_BANK3_PIN28_V                   (1 << 18)
+#define        PINCTRL_DRIVE15_BANK3_PIN28_MA_MASK             (0x3 << 16)
+#define        PINCTRL_DRIVE15_BANK3_PIN28_MA_OFFSET           16
+#define        PINCTRL_DRIVE15_BANK3_PIN27_V                   (1 << 14)
+#define        PINCTRL_DRIVE15_BANK3_PIN27_MA_MASK             (0x3 << 12)
+#define        PINCTRL_DRIVE15_BANK3_PIN27_MA_OFFSET           12
+#define        PINCTRL_DRIVE15_BANK3_PIN26_V                   (1 << 10)
+#define        PINCTRL_DRIVE15_BANK3_PIN26_MA_MASK             (0x3 << 8)
+#define        PINCTRL_DRIVE15_BANK3_PIN26_MA_OFFSET           8
+#define        PINCTRL_DRIVE15_BANK3_PIN25_V                   (1 << 6)
+#define        PINCTRL_DRIVE15_BANK3_PIN25_MA_MASK             (0x3 << 4)
+#define        PINCTRL_DRIVE15_BANK3_PIN25_MA_OFFSET           4
+#define        PINCTRL_DRIVE15_BANK3_PIN24_V                   (1 << 2)
+#define        PINCTRL_DRIVE15_BANK3_PIN24_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE15_BANK3_PIN24_MA_OFFSET           0
+
+#define        PINCTRL_DRIVE16_BANK4_PIN07_V                   (1 << 30)
+#define        PINCTRL_DRIVE16_BANK4_PIN07_MA_MASK             (0x3 << 28)
+#define        PINCTRL_DRIVE16_BANK4_PIN07_MA_OFFSET           28
+#define        PINCTRL_DRIVE16_BANK4_PIN06_V                   (1 << 26)
+#define        PINCTRL_DRIVE16_BANK4_PIN06_MA_MASK             (0x3 << 24)
+#define        PINCTRL_DRIVE16_BANK4_PIN06_MA_OFFSET           24
+#define        PINCTRL_DRIVE16_BANK4_PIN05_V                   (1 << 22)
+#define        PINCTRL_DRIVE16_BANK4_PIN05_MA_MASK             (0x3 << 20)
+#define        PINCTRL_DRIVE16_BANK4_PIN05_MA_OFFSET           20
+#define        PINCTRL_DRIVE16_BANK4_PIN04_V                   (1 << 18)
+#define        PINCTRL_DRIVE16_BANK4_PIN04_MA_MASK             (0x3 << 16)
+#define        PINCTRL_DRIVE16_BANK4_PIN04_MA_OFFSET           16
+#define        PINCTRL_DRIVE16_BANK4_PIN03_V                   (1 << 14)
+#define        PINCTRL_DRIVE16_BANK4_PIN03_MA_MASK             (0x3 << 12)
+#define        PINCTRL_DRIVE16_BANK4_PIN03_MA_OFFSET           12
+#define        PINCTRL_DRIVE16_BANK4_PIN02_V                   (1 << 10)
+#define        PINCTRL_DRIVE16_BANK4_PIN02_MA_MASK             (0x3 << 8)
+#define        PINCTRL_DRIVE16_BANK4_PIN02_MA_OFFSET           8
+#define        PINCTRL_DRIVE16_BANK4_PIN01_V                   (1 << 6)
+#define        PINCTRL_DRIVE16_BANK4_PIN01_MA_MASK             (0x3 << 4)
+#define        PINCTRL_DRIVE16_BANK4_PIN01_MA_OFFSET           4
+#define        PINCTRL_DRIVE16_BANK4_PIN00_V                   (1 << 2)
+#define        PINCTRL_DRIVE16_BANK4_PIN00_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE16_BANK4_PIN00_MA_OFFSET           0
+
+#define        PINCTRL_DRIVE17_BANK4_PIN15_V                   (1 << 30)
+#define        PINCTRL_DRIVE17_BANK4_PIN15_MA_MASK             (0x3 << 28)
+#define        PINCTRL_DRIVE17_BANK4_PIN15_MA_OFFSET           28
+#define        PINCTRL_DRIVE17_BANK4_PIN14_V                   (1 << 26)
+#define        PINCTRL_DRIVE17_BANK4_PIN14_MA_MASK             (0x3 << 24)
+#define        PINCTRL_DRIVE17_BANK4_PIN14_MA_OFFSET           24
+#define        PINCTRL_DRIVE17_BANK4_PIN13_V                   (1 << 22)
+#define        PINCTRL_DRIVE17_BANK4_PIN13_MA_MASK             (0x3 << 20)
+#define        PINCTRL_DRIVE17_BANK4_PIN13_MA_OFFSET           20
+#define        PINCTRL_DRIVE17_BANK4_PIN12_V                   (1 << 18)
+#define        PINCTRL_DRIVE17_BANK4_PIN12_MA_MASK             (0x3 << 16)
+#define        PINCTRL_DRIVE17_BANK4_PIN12_MA_OFFSET           16
+#define        PINCTRL_DRIVE17_BANK4_PIN11_V                   (1 << 14)
+#define        PINCTRL_DRIVE17_BANK4_PIN11_MA_MASK             (0x3 << 12)
+#define        PINCTRL_DRIVE17_BANK4_PIN11_MA_OFFSET           12
+#define        PINCTRL_DRIVE17_BANK4_PIN10_V                   (1 << 10)
+#define        PINCTRL_DRIVE17_BANK4_PIN10_MA_MASK             (0x3 << 8)
+#define        PINCTRL_DRIVE17_BANK4_PIN10_MA_OFFSET           8
+#define        PINCTRL_DRIVE17_BANK4_PIN09_V                   (1 << 6)
+#define        PINCTRL_DRIVE17_BANK4_PIN09_MA_MASK             (0x3 << 4)
+#define        PINCTRL_DRIVE17_BANK4_PIN09_MA_OFFSET           4
+#define        PINCTRL_DRIVE17_BANK4_PIN08_V                   (1 << 2)
+#define        PINCTRL_DRIVE17_BANK4_PIN08_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE17_BANK4_PIN08_MA_OFFSET           0
+
+#define        PINCTRL_DRIVE18_BANK4_PIN20_V                   (1 << 18)
+#define        PINCTRL_DRIVE18_BANK4_PIN20_MA_MASK             (0x3 << 16)
+#define        PINCTRL_DRIVE18_BANK4_PIN20_MA_OFFSET           16
+#define        PINCTRL_DRIVE18_BANK4_PIN16_V                   (1 << 2)
+#define        PINCTRL_DRIVE18_BANK4_PIN16_MA_MASK             (0x3 << 0)
+#define        PINCTRL_DRIVE18_BANK4_PIN16_MA_OFFSET           0
+
+#define        PINCTRL_PULL0_BANK0_PIN28                       (1 << 28)
+#define        PINCTRL_PULL0_BANK0_PIN27                       (1 << 27)
+#define        PINCTRL_PULL0_BANK0_PIN26                       (1 << 26)
+#define        PINCTRL_PULL0_BANK0_PIN25                       (1 << 25)
+#define        PINCTRL_PULL0_BANK0_PIN24                       (1 << 24)
+#define        PINCTRL_PULL0_BANK0_PIN23                       (1 << 23)
+#define        PINCTRL_PULL0_BANK0_PIN22                       (1 << 22)
+#define        PINCTRL_PULL0_BANK0_PIN21                       (1 << 21)
+#define        PINCTRL_PULL0_BANK0_PIN20                       (1 << 20)
+#define        PINCTRL_PULL0_BANK0_PIN19                       (1 << 19)
+#define        PINCTRL_PULL0_BANK0_PIN18                       (1 << 18)
+#define        PINCTRL_PULL0_BANK0_PIN17                       (1 << 17)
+#define        PINCTRL_PULL0_BANK0_PIN16                       (1 << 16)
+#define        PINCTRL_PULL0_BANK0_PIN07                       (1 << 7)
+#define        PINCTRL_PULL0_BANK0_PIN06                       (1 << 6)
+#define        PINCTRL_PULL0_BANK0_PIN05                       (1 << 5)
+#define        PINCTRL_PULL0_BANK0_PIN04                       (1 << 4)
+#define        PINCTRL_PULL0_BANK0_PIN03                       (1 << 3)
+#define        PINCTRL_PULL0_BANK0_PIN02                       (1 << 2)
+#define        PINCTRL_PULL0_BANK0_PIN01                       (1 << 1)
+#define        PINCTRL_PULL0_BANK0_PIN00                       (1 << 0)
+
+#define        PINCTRL_PULL1_BANK1_PIN31                       (1 << 31)
+#define        PINCTRL_PULL1_BANK1_PIN30                       (1 << 30)
+#define        PINCTRL_PULL1_BANK1_PIN29                       (1 << 29)
+#define        PINCTRL_PULL1_BANK1_PIN28                       (1 << 28)
+#define        PINCTRL_PULL1_BANK1_PIN27                       (1 << 27)
+#define        PINCTRL_PULL1_BANK1_PIN26                       (1 << 26)
+#define        PINCTRL_PULL1_BANK1_PIN25                       (1 << 25)
+#define        PINCTRL_PULL1_BANK1_PIN24                       (1 << 24)
+#define        PINCTRL_PULL1_BANK1_PIN23                       (1 << 23)
+#define        PINCTRL_PULL1_BANK1_PIN22                       (1 << 22)
+#define        PINCTRL_PULL1_BANK1_PIN21                       (1 << 21)
+#define        PINCTRL_PULL1_BANK1_PIN20                       (1 << 20)
+#define        PINCTRL_PULL1_BANK1_PIN19                       (1 << 19)
+#define        PINCTRL_PULL1_BANK1_PIN18                       (1 << 18)
+#define        PINCTRL_PULL1_BANK1_PIN17                       (1 << 17)
+#define        PINCTRL_PULL1_BANK1_PIN16                       (1 << 16)
+#define        PINCTRL_PULL1_BANK1_PIN15                       (1 << 15)
+#define        PINCTRL_PULL1_BANK1_PIN14                       (1 << 14)
+#define        PINCTRL_PULL1_BANK1_PIN13                       (1 << 13)
+#define        PINCTRL_PULL1_BANK1_PIN12                       (1 << 12)
+#define        PINCTRL_PULL1_BANK1_PIN11                       (1 << 11)
+#define        PINCTRL_PULL1_BANK1_PIN10                       (1 << 10)
+#define        PINCTRL_PULL1_BANK1_PIN09                       (1 << 9)
+#define        PINCTRL_PULL1_BANK1_PIN08                       (1 << 8)
+#define        PINCTRL_PULL1_BANK1_PIN07                       (1 << 7)
+#define        PINCTRL_PULL1_BANK1_PIN06                       (1 << 6)
+#define        PINCTRL_PULL1_BANK1_PIN05                       (1 << 5)
+#define        PINCTRL_PULL1_BANK1_PIN04                       (1 << 4)
+#define        PINCTRL_PULL1_BANK1_PIN03                       (1 << 3)
+#define        PINCTRL_PULL1_BANK1_PIN02                       (1 << 2)
+#define        PINCTRL_PULL1_BANK1_PIN01                       (1 << 1)
+#define        PINCTRL_PULL1_BANK1_PIN00                       (1 << 0)
+
+#define        PINCTRL_PULL2_BANK2_PIN27                       (1 << 27)
+#define        PINCTRL_PULL2_BANK2_PIN26                       (1 << 26)
+#define        PINCTRL_PULL2_BANK2_PIN25                       (1 << 25)
+#define        PINCTRL_PULL2_BANK2_PIN24                       (1 << 24)
+#define        PINCTRL_PULL2_BANK2_PIN21                       (1 << 21)
+#define        PINCTRL_PULL2_BANK2_PIN20                       (1 << 20)
+#define        PINCTRL_PULL2_BANK2_PIN19                       (1 << 19)
+#define        PINCTRL_PULL2_BANK2_PIN18                       (1 << 18)
+#define        PINCTRL_PULL2_BANK2_PIN17                       (1 << 17)
+#define        PINCTRL_PULL2_BANK2_PIN16                       (1 << 16)
+#define        PINCTRL_PULL2_BANK2_PIN15                       (1 << 15)
+#define        PINCTRL_PULL2_BANK2_PIN14                       (1 << 14)
+#define        PINCTRL_PULL2_BANK2_PIN13                       (1 << 13)
+#define        PINCTRL_PULL2_BANK2_PIN12                       (1 << 12)
+#define        PINCTRL_PULL2_BANK2_PIN10                       (1 << 10)
+#define        PINCTRL_PULL2_BANK2_PIN09                       (1 << 9)
+#define        PINCTRL_PULL2_BANK2_PIN08                       (1 << 8)
+#define        PINCTRL_PULL2_BANK2_PIN07                       (1 << 7)
+#define        PINCTRL_PULL2_BANK2_PIN06                       (1 << 6)
+#define        PINCTRL_PULL2_BANK2_PIN05                       (1 << 5)
+#define        PINCTRL_PULL2_BANK2_PIN04                       (1 << 4)
+#define        PINCTRL_PULL2_BANK2_PIN03                       (1 << 3)
+#define        PINCTRL_PULL2_BANK2_PIN02                       (1 << 2)
+#define        PINCTRL_PULL2_BANK2_PIN01                       (1 << 1)
+#define        PINCTRL_PULL2_BANK2_PIN00                       (1 << 0)
+
+#define        PINCTRL_PULL3_BANK3_PIN30                       (1 << 30)
+#define        PINCTRL_PULL3_BANK3_PIN29                       (1 << 29)
+#define        PINCTRL_PULL3_BANK3_PIN28                       (1 << 28)
+#define        PINCTRL_PULL3_BANK3_PIN27                       (1 << 27)
+#define        PINCTRL_PULL3_BANK3_PIN26                       (1 << 26)
+#define        PINCTRL_PULL3_BANK3_PIN25                       (1 << 25)
+#define        PINCTRL_PULL3_BANK3_PIN24                       (1 << 24)
+#define        PINCTRL_PULL3_BANK3_PIN23                       (1 << 23)
+#define        PINCTRL_PULL3_BANK3_PIN22                       (1 << 22)
+#define        PINCTRL_PULL3_BANK3_PIN21                       (1 << 21)
+#define        PINCTRL_PULL3_BANK3_PIN20                       (1 << 20)
+#define        PINCTRL_PULL3_BANK3_PIN18                       (1 << 18)
+#define        PINCTRL_PULL3_BANK3_PIN17                       (1 << 17)
+#define        PINCTRL_PULL3_BANK3_PIN16                       (1 << 16)
+#define        PINCTRL_PULL3_BANK3_PIN15                       (1 << 15)
+#define        PINCTRL_PULL3_BANK3_PIN14                       (1 << 14)
+#define        PINCTRL_PULL3_BANK3_PIN13                       (1 << 13)
+#define        PINCTRL_PULL3_BANK3_PIN12                       (1 << 12)
+#define        PINCTRL_PULL3_BANK3_PIN11                       (1 << 11)
+#define        PINCTRL_PULL3_BANK3_PIN10                       (1 << 10)
+#define        PINCTRL_PULL3_BANK3_PIN09                       (1 << 9)
+#define        PINCTRL_PULL3_BANK3_PIN08                       (1 << 8)
+#define        PINCTRL_PULL3_BANK3_PIN07                       (1 << 7)
+#define        PINCTRL_PULL3_BANK3_PIN06                       (1 << 6)
+#define        PINCTRL_PULL3_BANK3_PIN05                       (1 << 5)
+#define        PINCTRL_PULL3_BANK3_PIN04                       (1 << 4)
+#define        PINCTRL_PULL3_BANK3_PIN03                       (1 << 3)
+#define        PINCTRL_PULL3_BANK3_PIN02                       (1 << 2)
+#define        PINCTRL_PULL3_BANK3_PIN01                       (1 << 1)
+#define        PINCTRL_PULL3_BANK3_PIN00                       (1 << 0)
+
+#define        PINCTRL_PULL4_BANK4_PIN20                       (1 << 20)
+#define        PINCTRL_PULL4_BANK4_PIN16                       (1 << 16)
+#define        PINCTRL_PULL4_BANK4_PIN15                       (1 << 15)
+#define        PINCTRL_PULL4_BANK4_PIN14                       (1 << 14)
+#define        PINCTRL_PULL4_BANK4_PIN13                       (1 << 13)
+#define        PINCTRL_PULL4_BANK4_PIN12                       (1 << 12)
+#define        PINCTRL_PULL4_BANK4_PIN11                       (1 << 11)
+#define        PINCTRL_PULL4_BANK4_PIN10                       (1 << 10)
+#define        PINCTRL_PULL4_BANK4_PIN09                       (1 << 9)
+#define        PINCTRL_PULL4_BANK4_PIN08                       (1 << 8)
+#define        PINCTRL_PULL4_BANK4_PIN07                       (1 << 7)
+#define        PINCTRL_PULL4_BANK4_PIN06                       (1 << 6)
+#define        PINCTRL_PULL4_BANK4_PIN05                       (1 << 5)
+#define        PINCTRL_PULL4_BANK4_PIN04                       (1 << 4)
+#define        PINCTRL_PULL4_BANK4_PIN03                       (1 << 3)
+#define        PINCTRL_PULL4_BANK4_PIN02                       (1 << 2)
+#define        PINCTRL_PULL4_BANK4_PIN01                       (1 << 1)
+#define        PINCTRL_PULL4_BANK4_PIN00                       (1 << 0)
+
+#define        PINCTRL_PULL5_BANK5_PIN26                       (1 << 26)
+#define        PINCTRL_PULL5_BANK5_PIN23                       (1 << 23)
+#define        PINCTRL_PULL5_BANK5_PIN22                       (1 << 22)
+#define        PINCTRL_PULL5_BANK5_PIN21                       (1 << 21)
+#define        PINCTRL_PULL5_BANK5_PIN20                       (1 << 20)
+#define        PINCTRL_PULL5_BANK5_PIN19                       (1 << 19)
+#define        PINCTRL_PULL5_BANK5_PIN18                       (1 << 18)
+#define        PINCTRL_PULL5_BANK5_PIN17                       (1 << 17)
+#define        PINCTRL_PULL5_BANK5_PIN16                       (1 << 16)
+#define        PINCTRL_PULL5_BANK5_PIN15                       (1 << 15)
+#define        PINCTRL_PULL5_BANK5_PIN14                       (1 << 14)
+#define        PINCTRL_PULL5_BANK5_PIN13                       (1 << 13)
+#define        PINCTRL_PULL5_BANK5_PIN12                       (1 << 12)
+#define        PINCTRL_PULL5_BANK5_PIN11                       (1 << 11)
+#define        PINCTRL_PULL5_BANK5_PIN10                       (1 << 10)
+#define        PINCTRL_PULL5_BANK5_PIN09                       (1 << 9)
+#define        PINCTRL_PULL5_BANK5_PIN08                       (1 << 8)
+#define        PINCTRL_PULL5_BANK5_PIN07                       (1 << 7)
+#define        PINCTRL_PULL5_BANK5_PIN06                       (1 << 6)
+#define        PINCTRL_PULL5_BANK5_PIN05                       (1 << 5)
+#define        PINCTRL_PULL5_BANK5_PIN04                       (1 << 4)
+#define        PINCTRL_PULL5_BANK5_PIN03                       (1 << 3)
+#define        PINCTRL_PULL5_BANK5_PIN02                       (1 << 2)
+#define        PINCTRL_PULL5_BANK5_PIN01                       (1 << 1)
+#define        PINCTRL_PULL5_BANK5_PIN00                       (1 << 0)
+
+#define        PINCTRL_PULL6_BANK6_PIN24                       (1 << 24)
+#define        PINCTRL_PULL6_BANK6_PIN23                       (1 << 23)
+#define        PINCTRL_PULL6_BANK6_PIN22                       (1 << 22)
+#define        PINCTRL_PULL6_BANK6_PIN21                       (1 << 21)
+#define        PINCTRL_PULL6_BANK6_PIN20                       (1 << 20)
+#define        PINCTRL_PULL6_BANK6_PIN19                       (1 << 19)
+#define        PINCTRL_PULL6_BANK6_PIN18                       (1 << 18)
+#define        PINCTRL_PULL6_BANK6_PIN17                       (1 << 17)
+#define        PINCTRL_PULL6_BANK6_PIN16                       (1 << 16)
+#define        PINCTRL_PULL6_BANK6_PIN14                       (1 << 14)
+#define        PINCTRL_PULL6_BANK6_PIN13                       (1 << 13)
+#define        PINCTRL_PULL6_BANK6_PIN12                       (1 << 12)
+#define        PINCTRL_PULL6_BANK6_PIN11                       (1 << 11)
+#define        PINCTRL_PULL6_BANK6_PIN10                       (1 << 10)
+#define        PINCTRL_PULL6_BANK6_PIN09                       (1 << 9)
+#define        PINCTRL_PULL6_BANK6_PIN08                       (1 << 8)
+#define        PINCTRL_PULL6_BANK6_PIN07                       (1 << 7)
+#define        PINCTRL_PULL6_BANK6_PIN06                       (1 << 6)
+#define        PINCTRL_PULL6_BANK6_PIN05                       (1 << 5)
+#define        PINCTRL_PULL6_BANK6_PIN04                       (1 << 4)
+#define        PINCTRL_PULL6_BANK6_PIN03                       (1 << 3)
+#define        PINCTRL_PULL6_BANK6_PIN02                       (1 << 2)
+#define        PINCTRL_PULL6_BANK6_PIN01                       (1 << 1)
+#define        PINCTRL_PULL6_BANK6_PIN00                       (1 << 0)
+
+#define        PINCTRL_DOUT0_DOUT_MASK                         0x1fffffff
+#define        PINCTRL_DOUT0_DOUT_OFFSET                       0
+
+#define        PINCTRL_DOUT1_DOUT_MASK                         0xffffffff
+#define        PINCTRL_DOUT1_DOUT_OFFSET                       0
+
+#define        PINCTRL_DOUT2_DOUT_MASK                         0xfffffff
+#define        PINCTRL_DOUT2_DOUT_OFFSET                       0
+
+#define        PINCTRL_DOUT3_DOUT_MASK                         0x7fffffff
+#define        PINCTRL_DOUT3_DOUT_OFFSET                       0
+
+#define        PINCTRL_DOUT4_DOUT_MASK                         0x1fffff
+#define        PINCTRL_DOUT4_DOUT_OFFSET                       0
+
+#define        PINCTRL_DIN0_DIN_MASK                           0x1fffffff
+#define        PINCTRL_DIN0_DIN_OFFSET                         0
+
+#define        PINCTRL_DIN1_DIN_MASK                           0xffffffff
+#define        PINCTRL_DIN1_DIN_OFFSET                         0
+
+#define        PINCTRL_DIN2_DIN_MASK                           0xfffffff
+#define        PINCTRL_DIN2_DIN_OFFSET                         0
+
+#define        PINCTRL_DIN3_DIN_MASK                           0x7fffffff
+#define        PINCTRL_DIN3_DIN_OFFSET                         0
+
+#define        PINCTRL_DIN4_DIN_MASK                           0x1fffff
+#define        PINCTRL_DIN4_DIN_OFFSET                         0
+
+#define        PINCTRL_DOE0_DOE_MASK                           0x1fffffff
+#define        PINCTRL_DOE0_DOE_OFFSET                         0
+
+#define        PINCTRL_DOE1_DOE_MASK                           0xffffffff
+#define        PINCTRL_DOE1_DOE_OFFSET                         0
+
+#define        PINCTRL_DOE2_DOE_MASK                           0xfffffff
+#define        PINCTRL_DOE2_DOE_OFFSET                         0
+
+#define        PINCTRL_DOE3_DOE_MASK                           0x7fffffff
+#define        PINCTRL_DOE3_DOE_OFFSET                         0
+
+#define        PINCTRL_DOE4_DOE_MASK                           0x1fffff
+#define        PINCTRL_DOE4_DOE_OFFSET                         0
+
+#define        PINCTRL_PIN2IRQ0_PIN2IRQ_MASK                   0x1fffffff
+#define        PINCTRL_PIN2IRQ0_PIN2IRQ_OFFSET                 0
+
+#define        PINCTRL_PIN2IRQ1_PIN2IRQ_MASK                   0xffffffff
+#define        PINCTRL_PIN2IRQ1_PIN2IRQ_OFFSET                 0
+
+#define        PINCTRL_PIN2IRQ2_PIN2IRQ_MASK                   0xfffffff
+#define        PINCTRL_PIN2IRQ2_PIN2IRQ_OFFSET                 0
+
+#define        PINCTRL_PIN2IRQ3_PIN2IRQ_MASK                   0x7fffffff
+#define        PINCTRL_PIN2IRQ3_PIN2IRQ_OFFSET                 0
+
+#define        PINCTRL_PIN2IRQ4_PIN2IRQ_MASK                   0x1fffff
+#define        PINCTRL_PIN2IRQ4_PIN2IRQ_OFFSET                 0
+
+#define        PINCTRL_IRQEN0_IRQEN_MASK                       0x1fffffff
+#define        PINCTRL_IRQEN0_IRQEN_OFFSET                     0
+
+#define        PINCTRL_IRQEN1_IRQEN_MASK                       0xffffffff
+#define        PINCTRL_IRQEN1_IRQEN_OFFSET                     0
+
+#define        PINCTRL_IRQEN2_IRQEN_MASK                       0xfffffff
+#define        PINCTRL_IRQEN2_IRQEN_OFFSET                     0
+
+#define        PINCTRL_IRQEN3_IRQEN_MASK                       0x7fffffff
+#define        PINCTRL_IRQEN3_IRQEN_OFFSET                     0
+
+#define        PINCTRL_IRQEN4_IRQEN_MASK                       0x1fffff
+#define        PINCTRL_IRQEN4_IRQEN_OFFSET                     0
+
+#define        PINCTRL_IRQLEVEL0_IRQLEVEL_MASK                 0x1fffffff
+#define        PINCTRL_IRQLEVEL0_IRQLEVEL_OFFSET               0
+
+#define        PINCTRL_IRQLEVEL1_IRQLEVEL_MASK                 0xffffffff
+#define        PINCTRL_IRQLEVEL1_IRQLEVEL_OFFSET               0
+
+#define        PINCTRL_IRQLEVEL2_IRQLEVEL_MASK                 0xfffffff
+#define        PINCTRL_IRQLEVEL2_IRQLEVEL_OFFSET               0
+
+#define        PINCTRL_IRQLEVEL3_IRQLEVEL_MASK                 0x7fffffff
+#define        PINCTRL_IRQLEVEL3_IRQLEVEL_OFFSET               0
+
+#define        PINCTRL_IRQLEVEL4_IRQLEVEL_MASK                 0x1fffff
+#define        PINCTRL_IRQLEVEL4_IRQLEVEL_OFFSET               0
+
+#define        PINCTRL_IRQPOL0_IRQPOL_MASK                     0x1fffffff
+#define        PINCTRL_IRQPOL0_IRQPOL_OFFSET                   0
+
+#define        PINCTRL_IRQPOL1_IRQPOL_MASK                     0xffffffff
+#define        PINCTRL_IRQPOL1_IRQPOL_OFFSET                   0
+
+#define        PINCTRL_IRQPOL2_IRQPOL_MASK                     0xfffffff
+#define        PINCTRL_IRQPOL2_IRQPOL_OFFSET                   0
+
+#define        PINCTRL_IRQPOL3_IRQPOL_MASK                     0x7fffffff
+#define        PINCTRL_IRQPOL3_IRQPOL_OFFSET                   0
+
+#define        PINCTRL_IRQPOL4_IRQPOL_MASK                     0x1fffff
+#define        PINCTRL_IRQPOL4_IRQPOL_OFFSET                   0
+
+#define        PINCTRL_IRQSTAT0_IRQSTAT_MASK                   0x1fffffff
+#define        PINCTRL_IRQSTAT0_IRQSTAT_OFFSET                 0
+
+#define        PINCTRL_IRQSTAT1_IRQSTAT_MASK                   0xffffffff
+#define        PINCTRL_IRQSTAT1_IRQSTAT_OFFSET                 0
+
+#define        PINCTRL_IRQSTAT2_IRQSTAT_MASK                   0xfffffff
+#define        PINCTRL_IRQSTAT2_IRQSTAT_OFFSET                 0
+
+#define        PINCTRL_IRQSTAT3_IRQSTAT_MASK                   0x7fffffff
+#define        PINCTRL_IRQSTAT3_IRQSTAT_OFFSET                 0
+
+#define        PINCTRL_IRQSTAT4_IRQSTAT_MASK                   0x1fffff
+#define        PINCTRL_IRQSTAT4_IRQSTAT_OFFSET                 0
+
+#define        PINCTRL_EMI_ODT_CTRL_ADDRESS_CALIB_MASK         (0x3 << 26)
+#define        PINCTRL_EMI_ODT_CTRL_ADDRESS_CALIB_OFFSET       26
+#define        PINCTRL_EMI_ODT_CTRL_ADDRESS_TLOAD_MASK         (0x3 << 24)
+#define        PINCTRL_EMI_ODT_CTRL_ADDRESS_TLOAD_OFFSET       24
+#define        PINCTRL_EMI_ODT_CTRL_CONTROL_CALIB_MASK         (0x3 << 22)
+#define        PINCTRL_EMI_ODT_CTRL_CONTROL_CALIB_OFFSET       22
+#define        PINCTRL_EMI_ODT_CTRL_CONTROL_TLOAD_MASK         (0x3 << 20)
+#define        PINCTRL_EMI_ODT_CTRL_CONTROL_TLOAD_OFFSET       20
+#define        PINCTRL_EMI_ODT_CTRL_DUALPAD_CALIB_MASK         (0x3 << 18)
+#define        PINCTRL_EMI_ODT_CTRL_DUALPAD_CALIB_OFFSET       18
+#define        PINCTRL_EMI_ODT_CTRL_DUALPAD_TLOAD_MASK         (0x3 << 16)
+#define        PINCTRL_EMI_ODT_CTRL_DUALPAD_TLOAD_OFFSET       16
+#define        PINCTRL_EMI_ODT_CTRL_SLICE3_CALIB_MASK          (0x3 << 14)
+#define        PINCTRL_EMI_ODT_CTRL_SLICE3_CALIB_OFFSET        14
+#define        PINCTRL_EMI_ODT_CTRL_SLICE3_TLOAD_MASK          (0x3 << 12)
+#define        PINCTRL_EMI_ODT_CTRL_SLICE3_TLOAD_OFFSET        12
+#define        PINCTRL_EMI_ODT_CTRL_SLICE2_CALIB_MASK          (0x3 << 10)
+#define        PINCTRL_EMI_ODT_CTRL_SLICE2_CALIB_OFFSET        10
+#define        PINCTRL_EMI_ODT_CTRL_SLICE2_TLOAD_MASK          (0x3 << 8)
+#define        PINCTRL_EMI_ODT_CTRL_SLICE2_TLOAD_OFFSET        8
+#define        PINCTRL_EMI_ODT_CTRL_SLICE1_CALIB_MASK          (0x3 << 6)
+#define        PINCTRL_EMI_ODT_CTRL_SLICE1_CALIB_OFFSET        6
+#define        PINCTRL_EMI_ODT_CTRL_SLICE1_TLOAD_MASK          (0x3 << 4)
+#define        PINCTRL_EMI_ODT_CTRL_SLICE1_TLOAD_OFFSET        4
+#define        PINCTRL_EMI_ODT_CTRL_SLICE0_CALIB_MASK          (0x3 << 2)
+#define        PINCTRL_EMI_ODT_CTRL_SLICE0_CALIB_OFFSET        2
+#define        PINCTRL_EMI_ODT_CTRL_SLICE0_TLOAD_MASK          (0x3 << 0)
+#define        PINCTRL_EMI_ODT_CTRL_SLICE0_TLOAD_OFFSET        0
+
+#define        PINCTRL_EMI_DS_CTRL_DDR_MODE_MASK               (0x3 << 16)
+#define        PINCTRL_EMI_DS_CTRL_DDR_MODE_OFFSET             16
+#define        PINCTRL_EMI_DS_CTRL_DDR_MODE_mDDR               (0x0 << 16)
+#define        PINCTRL_EMI_DS_CTRL_DDR_MODE_GPIO               (0x1 << 16)
+#define        PINCTRL_EMI_DS_CTRL_DDR_MODE_LVDDR2             (0x2 << 16)
+#define        PINCTRL_EMI_DS_CTRL_DDR_MODE_DDR2               (0x3 << 16)
+#define        PINCTRL_EMI_DS_CTRL_ADDRESS_MA_MASK             (0x3 << 12)
+#define        PINCTRL_EMI_DS_CTRL_ADDRESS_MA_OFFSET           12
+#define        PINCTRL_EMI_DS_CTRL_CONTROL_MA_MASK             (0x3 << 10)
+#define        PINCTRL_EMI_DS_CTRL_CONTROL_MA_OFFSET           10
+#define        PINCTRL_EMI_DS_CTRL_DUALPAD_MA_MASK             (0x3 << 8)
+#define        PINCTRL_EMI_DS_CTRL_DUALPAD_MA_OFFSET           8
+#define        PINCTRL_EMI_DS_CTRL_SLICE3_MA_MASK              (0x3 << 6)
+#define        PINCTRL_EMI_DS_CTRL_SLICE3_MA_OFFSET            6
+#define        PINCTRL_EMI_DS_CTRL_SLICE2_MA_MASK              (0x3 << 4)
+#define        PINCTRL_EMI_DS_CTRL_SLICE2_MA_OFFSET            4
+#define        PINCTRL_EMI_DS_CTRL_SLICE1_MA_MASK              (0x3 << 2)
+#define        PINCTRL_EMI_DS_CTRL_SLICE1_MA_OFFSET            2
+#define        PINCTRL_EMI_DS_CTRL_SLICE0_MA_MASK              (0x3 << 0)
+#define        PINCTRL_EMI_DS_CTRL_SLICE0_MA_OFFSET            0
+
+#endif /* __MX28_REGS_PINCTRL_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-power.h b/arch/arm/include/asm/arch-mx28/regs-power.h
new file mode 100644 (file)
index 0000000..9da63ad
--- /dev/null
@@ -0,0 +1,413 @@
+/*
+ * Freescale i.MX28 Power Controller Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@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
+ *
+ */
+
+#ifndef __MX28_REGS_POWER_H__
+#define __MX28_REGS_POWER_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_power_regs {
+       mx28_reg(hw_power_ctrl)
+       mx28_reg(hw_power_5vctrl)
+       mx28_reg(hw_power_minpwr)
+       mx28_reg(hw_power_charge)
+       uint32_t        hw_power_vdddctrl;
+       uint32_t        reserved_vddd[3];
+       uint32_t        hw_power_vddactrl;
+       uint32_t        reserved_vdda[3];
+       uint32_t        hw_power_vddioctrl;
+       uint32_t        reserved_vddio[3];
+       uint32_t        hw_power_vddmemctrl;
+       uint32_t        reserved_vddmem[3];
+       uint32_t        hw_power_dcdc4p2;
+       uint32_t        reserved_dcdc4p2[3];
+       uint32_t        hw_power_misc;
+       uint32_t        reserved_misc[3];
+       uint32_t        hw_power_dclimits;
+       uint32_t        reserved_dclimits[3];
+       mx28_reg(hw_power_loopctrl)
+       uint32_t        hw_power_sts;
+       uint32_t        reserved_sts[3];
+       mx28_reg(hw_power_speed)
+       uint32_t        hw_power_battmonitor;
+       uint32_t        reserved_battmonitor[3];
+
+       uint32_t        reserved[4];
+
+       mx28_reg(hw_power_reset)
+       mx28_reg(hw_power_debug)
+       mx28_reg(hw_power_thermal)
+       mx28_reg(hw_power_usb1ctrl)
+       mx28_reg(hw_power_special)
+       mx28_reg(hw_power_version)
+       mx28_reg(hw_power_anaclkctrl)
+       mx28_reg(hw_power_refctrl)
+};
+#endif
+
+#define        POWER_CTRL_PSWITCH_MID_TRAN                     (1 << 27)
+#define        POWER_CTRL_DCDC4P2_BO_IRQ                       (1 << 24)
+#define        POWER_CTRL_ENIRQ_DCDC4P2_BO                     (1 << 23)
+#define        POWER_CTRL_VDD5V_DROOP_IRQ                      (1 << 22)
+#define        POWER_CTRL_ENIRQ_VDD5V_DROOP                    (1 << 21)
+#define        POWER_CTRL_PSWITCH_IRQ                          (1 << 20)
+#define        POWER_CTRL_PSWITCH_IRQ_SRC                      (1 << 19)
+#define        POWER_CTRL_POLARITY_PSWITCH                     (1 << 18)
+#define        POWER_CTRL_ENIRQ_PSWITCH                        (1 << 17)
+#define        POWER_CTRL_POLARITY_DC_OK                       (1 << 16)
+#define        POWER_CTRL_DC_OK_IRQ                            (1 << 15)
+#define        POWER_CTRL_ENIRQ_DC_OK                          (1 << 14)
+#define        POWER_CTRL_BATT_BO_IRQ                          (1 << 13)
+#define        POWER_CTRL_ENIRQ_BATT_BO                        (1 << 12)
+#define        POWER_CTRL_VDDIO_BO_IRQ                         (1 << 11)
+#define        POWER_CTRL_ENIRQ_VDDIO_BO                       (1 << 10)
+#define        POWER_CTRL_VDDA_BO_IRQ                          (1 << 9)
+#define        POWER_CTRL_ENIRQ_VDDA_BO                        (1 << 8)
+#define        POWER_CTRL_VDDD_BO_IRQ                          (1 << 7)
+#define        POWER_CTRL_ENIRQ_VDDD_BO                        (1 << 6)
+#define        POWER_CTRL_POLARITY_VBUSVALID                   (1 << 5)
+#define        POWER_CTRL_VBUS_VALID_IRQ                       (1 << 4)
+#define        POWER_CTRL_ENIRQ_VBUS_VALID                     (1 << 3)
+#define        POWER_CTRL_POLARITY_VDD5V_GT_VDDIO              (1 << 2)
+#define        POWER_CTRL_VDD5V_GT_VDDIO_IRQ                   (1 << 1)
+#define        POWER_CTRL_ENIRQ_VDD5V_GT_VDDIO                 (1 << 0)
+
+#define        POWER_5VCTRL_VBUSDROOP_TRSH_MASK                (0x3 << 30)
+#define        POWER_5VCTRL_VBUSDROOP_TRSH_OFFSET              30
+#define        POWER_5VCTRL_VBUSDROOP_TRSH_4V3                 (0x0 << 30)
+#define        POWER_5VCTRL_VBUSDROOP_TRSH_4V4                 (0x1 << 30)
+#define        POWER_5VCTRL_VBUSDROOP_TRSH_4V5                 (0x2 << 30)
+#define        POWER_5VCTRL_VBUSDROOP_TRSH_4V7                 (0x3 << 30)
+#define        POWER_5VCTRL_HEADROOM_ADJ_MASK                  (0x7 << 24)
+#define        POWER_5VCTRL_HEADROOM_ADJ_OFFSET                24
+#define        POWER_5VCTRL_PWD_CHARGE_4P2_MASK                (0x3 << 20)
+#define        POWER_5VCTRL_PWD_CHARGE_4P2_OFFSET              20
+#define        POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK             (0x3f << 12)
+#define        POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET           12
+#define        POWER_5VCTRL_VBUSVALID_TRSH_MASK                (0x7 << 8)
+#define        POWER_5VCTRL_VBUSVALID_TRSH_OFFSET              8
+#define        POWER_5VCTRL_VBUSVALID_TRSH_2V9                 (0x0 << 8)
+#define        POWER_5VCTRL_VBUSVALID_TRSH_4V0                 (0x1 << 8)
+#define        POWER_5VCTRL_VBUSVALID_TRSH_4V1                 (0x2 << 8)
+#define        POWER_5VCTRL_VBUSVALID_TRSH_4V2                 (0x3 << 8)
+#define        POWER_5VCTRL_VBUSVALID_TRSH_4V3                 (0x4 << 8)
+#define        POWER_5VCTRL_VBUSVALID_TRSH_4V4                 (0x5 << 8)
+#define        POWER_5VCTRL_VBUSVALID_TRSH_4V5                 (0x6 << 8)
+#define        POWER_5VCTRL_VBUSVALID_TRSH_4V6                 (0x7 << 8)
+#define        POWER_5VCTRL_PWDN_5VBRNOUT                      (1 << 7)
+#define        POWER_5VCTRL_ENABLE_LINREG_ILIMIT               (1 << 6)
+#define        POWER_5VCTRL_DCDC_XFER                          (1 << 5)
+#define        POWER_5VCTRL_VBUSVALID_5VDETECT                 (1 << 4)
+#define        POWER_5VCTRL_VBUSVALID_TO_B                     (1 << 3)
+#define        POWER_5VCTRL_ILIMIT_EQ_ZERO                     (1 << 2)
+#define        POWER_5VCTRL_PWRUP_VBUS_CMPS                    (1 << 1)
+#define        POWER_5VCTRL_ENABLE_DCDC                        (1 << 0)
+
+#define        POWER_MINPWR_LOWPWR_4P2                         (1 << 14)
+#define        POWER_MINPWR_PWD_BO                             (1 << 12)
+#define        POWER_MINPWR_USE_VDDXTAL_VBG                    (1 << 11)
+#define        POWER_MINPWR_PWD_ANA_CMPS                       (1 << 10)
+#define        POWER_MINPWR_ENABLE_OSC                         (1 << 9)
+#define        POWER_MINPWR_SELECT_OSC                         (1 << 8)
+#define        POWER_MINPWR_FBG_OFF                            (1 << 7)
+#define        POWER_MINPWR_DOUBLE_FETS                        (1 << 6)
+#define        POWER_MINPWR_HALFFETS                           (1 << 5)
+#define        POWER_MINPWR_LESSANA_I                          (1 << 4)
+#define        POWER_MINPWR_PWD_XTAL24                         (1 << 3)
+#define        POWER_MINPWR_DC_STOPCLK                         (1 << 2)
+#define        POWER_MINPWR_EN_DC_PFM                          (1 << 1)
+#define        POWER_MINPWR_DC_HALFCLK                         (1 << 0)
+
+#define        POWER_CHARGE_ADJ_VOLT_MASK                      (0x7 << 24)
+#define        POWER_CHARGE_ADJ_VOLT_OFFSET                    24
+#define        POWER_CHARGE_ADJ_VOLT_M025P                     (0x1 << 24)
+#define        POWER_CHARGE_ADJ_VOLT_P050P                     (0x2 << 24)
+#define        POWER_CHARGE_ADJ_VOLT_M075P                     (0x3 << 24)
+#define        POWER_CHARGE_ADJ_VOLT_P025P                     (0x4 << 24)
+#define        POWER_CHARGE_ADJ_VOLT_M050P                     (0x5 << 24)
+#define        POWER_CHARGE_ADJ_VOLT_P075P                     (0x6 << 24)
+#define        POWER_CHARGE_ADJ_VOLT_M100P                     (0x7 << 24)
+#define        POWER_CHARGE_ENABLE_LOAD                        (1 << 22)
+#define        POWER_CHARGE_ENABLE_FAULT_DETECT                (1 << 20)
+#define        POWER_CHARGE_CHRG_STS_OFF                       (1 << 19)
+#define        POWER_CHARGE_LIION_4P1                          (1 << 18)
+#define        POWER_CHARGE_PWD_BATTCHRG                       (1 << 16)
+#define        POWER_CHARGE_ENABLE_CHARGER_USB1                (1 << 13)
+#define        POWER_CHARGE_ENABLE_CHARGER_USB0                (1 << 12)
+#define        POWER_CHARGE_STOP_ILIMIT_MASK                   (0xf << 8)
+#define        POWER_CHARGE_STOP_ILIMIT_OFFSET                 8
+#define        POWER_CHARGE_STOP_ILIMIT_10MA                   (0x1 << 8)
+#define        POWER_CHARGE_STOP_ILIMIT_20MA                   (0x2 << 8)
+#define        POWER_CHARGE_STOP_ILIMIT_50MA                   (0x4 << 8)
+#define        POWER_CHARGE_STOP_ILIMIT_100MA                  (0x8 << 8)
+#define        POWER_CHARGE_BATTCHRG_I_MASK                    0x3f
+#define        POWER_CHARGE_BATTCHRG_I_OFFSET                  0
+#define        POWER_CHARGE_BATTCHRG_I_10MA                    0x01
+#define        POWER_CHARGE_BATTCHRG_I_20MA                    0x02
+#define        POWER_CHARGE_BATTCHRG_I_50MA                    0x04
+#define        POWER_CHARGE_BATTCHRG_I_100MA                   0x08
+#define        POWER_CHARGE_BATTCHRG_I_200MA                   0x10
+#define        POWER_CHARGE_BATTCHRG_I_400MA                   0x20
+
+#define        POWER_VDDDCTRL_ADJTN_MASK                       (0xf << 28)
+#define        POWER_VDDDCTRL_ADJTN_OFFSET                     28
+#define        POWER_VDDDCTRL_PWDN_BRNOUT                      (1 << 23)
+#define        POWER_VDDDCTRL_DISABLE_STEPPING                 (1 << 22)
+#define        POWER_VDDDCTRL_ENABLE_LINREG                    (1 << 21)
+#define        POWER_VDDDCTRL_DISABLE_FET                      (1 << 20)
+#define        POWER_VDDDCTRL_LINREG_OFFSET_MASK               (0x3 << 16)
+#define        POWER_VDDDCTRL_LINREG_OFFSET_OFFSET             16
+#define        POWER_VDDDCTRL_LINREG_OFFSET_0STEPS             (0x0 << 16)
+#define        POWER_VDDDCTRL_LINREG_OFFSET_1STEPS_ABOVE       (0x1 << 16)
+#define        POWER_VDDDCTRL_LINREG_OFFSET_1STEPS_BELOW       (0x2 << 16)
+#define        POWER_VDDDCTRL_LINREG_OFFSET_2STEPS_BELOW       (0x3 << 16)
+#define        POWER_VDDDCTRL_BO_OFFSET_MASK                   (0x7 << 8)
+#define        POWER_VDDDCTRL_BO_OFFSET_OFFSET                 8
+#define        POWER_VDDDCTRL_TRG_MASK                         0x1f
+#define        POWER_VDDDCTRL_TRG_OFFSET                       0
+
+#define        POWER_VDDACTRL_PWDN_BRNOUT                      (1 << 19)
+#define        POWER_VDDACTRL_DISABLE_STEPPING                 (1 << 18)
+#define        POWER_VDDACTRL_ENABLE_LINREG                    (1 << 17)
+#define        POWER_VDDACTRL_DISABLE_FET                      (1 << 16)
+#define        POWER_VDDACTRL_LINREG_OFFSET_MASK               (0x3 << 12)
+#define        POWER_VDDACTRL_LINREG_OFFSET_OFFSET             12
+#define        POWER_VDDACTRL_LINREG_OFFSET_0STEPS             (0x0 << 12)
+#define        POWER_VDDACTRL_LINREG_OFFSET_1STEPS_ABOVE       (0x1 << 12)
+#define        POWER_VDDACTRL_LINREG_OFFSET_1STEPS_BELOW       (0x2 << 12)
+#define        POWER_VDDACTRL_LINREG_OFFSET_2STEPS_BELOW       (0x3 << 12)
+#define        POWER_VDDACTRL_BO_OFFSET_MASK                   (0x7 << 8)
+#define        POWER_VDDACTRL_BO_OFFSET_OFFSET                 8
+#define        POWER_VDDACTRL_TRG_MASK                         0x1f
+#define        POWER_VDDACTRL_TRG_OFFSET                       0
+
+#define        POWER_VDDIOCTRL_ADJTN_MASK                      (0xf << 20)
+#define        POWER_VDDIOCTRL_ADJTN_OFFSET                    20
+#define        POWER_VDDIOCTRL_PWDN_BRNOUT                     (1 << 18)
+#define        POWER_VDDIOCTRL_DISABLE_STEPPING                (1 << 17)
+#define        POWER_VDDIOCTRL_DISABLE_FET                     (1 << 16)
+#define        POWER_VDDIOCTRL_LINREG_OFFSET_MASK              (0x3 << 12)
+#define        POWER_VDDIOCTRL_LINREG_OFFSET_OFFSET            12
+#define        POWER_VDDIOCTRL_LINREG_OFFSET_0STEPS            (0x0 << 12)
+#define        POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_ABOVE      (0x1 << 12)
+#define        POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_BELOW      (0x2 << 12)
+#define        POWER_VDDIOCTRL_LINREG_OFFSET_2STEPS_BELOW      (0x3 << 12)
+#define        POWER_VDDIOCTRL_BO_OFFSET_MASK                  (0x7 << 8)
+#define        POWER_VDDIOCTRL_BO_OFFSET_OFFSET                8
+#define        POWER_VDDIOCTRL_TRG_MASK                        0x1f
+#define        POWER_VDDIOCTRL_TRG_OFFSET                      0
+
+#define        POWER_VDDMEMCTRL_PULLDOWN_ACTIVE                (1 << 10)
+#define        POWER_VDDMEMCTRL_ENABLE_ILIMIT                  (1 << 9)
+#define        POWER_VDDMEMCTRL_ENABLE_LINREG                  (1 << 8)
+#define        POWER_VDDMEMCTRL_BO_OFFSET_MASK                 (0x7 << 5)
+#define        POWER_VDDMEMCTRL_BO_OFFSET_OFFSET               5
+#define        POWER_VDDMEMCTRL_TRG_MASK                       0x1f
+#define        POWER_VDDMEMCTRL_TRG_OFFSET                     0
+
+#define        POWER_DCDC4P2_DROPOUT_CTRL_MASK                 (0xf << 28)
+#define        POWER_DCDC4P2_DROPOUT_CTRL_OFFSET               28
+#define        POWER_DCDC4P2_DROPOUT_CTRL_200MV                (0x3 << 30)
+#define        POWER_DCDC4P2_DROPOUT_CTRL_100MV                (0x2 << 30)
+#define        POWER_DCDC4P2_DROPOUT_CTRL_50MV                 (0x1 << 30)
+#define        POWER_DCDC4P2_DROPOUT_CTRL_25MV                 (0x0 << 30)
+#define        POWER_DCDC4P2_DROPOUT_CTRL_SRC_4P2              (0x0 << 28)
+#define        POWER_DCDC4P2_DROPOUT_CTRL_SRC_4P2_LT_BATT      (0x1 << 28)
+#define        POWER_DCDC4P2_DROPOUT_CTRL_SRC_SEL              (0x2 << 28)
+#define        POWER_DCDC4P2_ISTEAL_THRESH_MASK                (0x3 << 24)
+#define        POWER_DCDC4P2_ISTEAL_THRESH_OFFSET              24
+#define        POWER_DCDC4P2_ENABLE_4P2                        (1 << 23)
+#define        POWER_DCDC4P2_ENABLE_DCDC                       (1 << 22)
+#define        POWER_DCDC4P2_HYST_DIR                          (1 << 21)
+#define        POWER_DCDC4P2_HYST_THRESH                       (1 << 20)
+#define        POWER_DCDC4P2_TRG_MASK                          (0x7 << 16)
+#define        POWER_DCDC4P2_TRG_OFFSET                        16
+#define        POWER_DCDC4P2_TRG_4V2                           (0x0 << 16)
+#define        POWER_DCDC4P2_TRG_4V1                           (0x1 << 16)
+#define        POWER_DCDC4P2_TRG_4V0                           (0x2 << 16)
+#define        POWER_DCDC4P2_TRG_3V9                           (0x3 << 16)
+#define        POWER_DCDC4P2_TRG_BATT                          (0x4 << 16)
+#define        POWER_DCDC4P2_BO_MASK                           (0x1f << 8)
+#define        POWER_DCDC4P2_BO_OFFSET                         8
+#define        POWER_DCDC4P2_CMPTRIP_MASK                      0x1f
+#define        POWER_DCDC4P2_CMPTRIP_OFFSET                    0
+
+#define        POWER_MISC_FREQSEL_MASK                         (0x7 << 4)
+#define        POWER_MISC_FREQSEL_OFFSET                       4
+#define        POWER_MISC_FREQSEL_20MHZ                        (0x1 << 4)
+#define        POWER_MISC_FREQSEL_24MHZ                        (0x2 << 4)
+#define        POWER_MISC_FREQSEL_19MHZ                        (0x3 << 4)
+#define        POWER_MISC_FREQSEL_14MHZ                        (0x4 << 4)
+#define        POWER_MISC_FREQSEL_18MHZ                        (0x5 << 4)
+#define        POWER_MISC_FREQSEL_21MHZ                        (0x6 << 4)
+#define        POWER_MISC_FREQSEL_17MHZ                        (0x7 << 4)
+#define        POWER_MISC_DISABLE_FET_BO_LOGIC                 (1 << 3)
+#define        POWER_MISC_DELAY_TIMING                         (1 << 2)
+#define        POWER_MISC_TEST                                 (1 << 1)
+#define        POWER_MISC_SEL_PLLCLK                           (1 << 0)
+
+#define        POWER_DCLIMITS_POSLIMIT_BUCK_MASK               (0x7f << 8)
+#define        POWER_DCLIMITS_POSLIMIT_BUCK_OFFSET             8
+#define        POWER_DCLIMITS_NEGLIMIT_MASK                    0x7f
+#define        POWER_DCLIMITS_NETLIMIT_OFFSET                  0
+
+#define        POWER_LOOPCTRL_TOGGLE_DIF                       (1 << 20)
+#define        POWER_LOOPCTRL_HYST_SIGN                        (1 << 19)
+#define        POWER_LOOPCTRL_EN_CM_HYST                       (1 << 18)
+#define        POWER_LOOPCTRL_EN_DF_HYST                       (1 << 17)
+#define        POWER_LOOPCTRL_CM_HYST_THRESH                   (1 << 16)
+#define        POWER_LOOPCTRL_DF_HYST_THRESH                   (1 << 15)
+#define        POWER_LOOPCTRL_RCSCALE_THRESH                   (1 << 14)
+#define        POWER_LOOPCTRL_EN_RCSCALE_MASK                  (0x3 << 12)
+#define        POWER_LOOPCTRL_EN_RCSCALE_OFFSET                12
+#define        POWER_LOOPCTRL_EN_RCSCALE_DIS                   (0x0 << 12)
+#define        POWER_LOOPCTRL_EN_RCSCALE_2X                    (0x1 << 12)
+#define        POWER_LOOPCTRL_EN_RCSCALE_4X                    (0x2 << 12)
+#define        POWER_LOOPCTRL_EN_RCSCALE_8X                    (0x3 << 12)
+#define        POWER_LOOPCTRL_DC_FF_MASK                       (0x7 << 8)
+#define        POWER_LOOPCTRL_DC_FF_OFFSET                     8
+#define        POWER_LOOPCTRL_DC_R_MASK                        (0xf << 4)
+#define        POWER_LOOPCTRL_DC_R_OFFSET                      4
+#define        POWER_LOOPCTRL_DC_C_MASK                        0x3
+#define        POWER_LOOPCTRL_DC_C_OFFSET                      0
+#define        POWER_LOOPCTRL_DC_C_MAX                         0x0
+#define        POWER_LOOPCTRL_DC_C_2X                          0x1
+#define        POWER_LOOPCTRL_DC_C_4X                          0x2
+#define        POWER_LOOPCTRL_DC_C_MIN                         0x3
+
+#define        POWER_STS_PWRUP_SOURCE_MASK                     (0x3f << 24)
+#define        POWER_STS_PWRUP_SOURCE_OFFSET                   24
+#define        POWER_STS_PWRUP_SOURCE_5V                       (0x20 << 24)
+#define        POWER_STS_PWRUP_SOURCE_RTC                      (0x10 << 24)
+#define        POWER_STS_PWRUP_SOURCE_PSWITCH_HIGH             (0x02 << 24)
+#define        POWER_STS_PWRUP_SOURCE_PSWITCH_MID              (0x01 << 24)
+#define        POWER_STS_PSWITCH_MASK                          (0x3 << 20)
+#define        POWER_STS_PSWITCH_OFFSET                        20
+#define        POWER_STS_THERMAL_WARNING                       (1 << 19)
+#define        POWER_STS_VDDMEM_BO                             (1 << 18)
+#define        POWER_STS_AVALID0_STATUS                        (1 << 17)
+#define        POWER_STS_BVALID0_STATUS                        (1 << 16)
+#define        POWER_STS_VBUSVALID0_STATUS                     (1 << 15)
+#define        POWER_STS_SESSEND0_STATUS                       (1 << 14)
+#define        POWER_STS_BATT_BO                               (1 << 13)
+#define        POWER_STS_VDD5V_FAULT                           (1 << 12)
+#define        POWER_STS_CHRGSTS                               (1 << 11)
+#define        POWER_STS_DCDC_4P2_BO                           (1 << 10)
+#define        POWER_STS_DC_OK                                 (1 << 9)
+#define        POWER_STS_VDDIO_BO                              (1 << 8)
+#define        POWER_STS_VDDA_BO                               (1 << 7)
+#define        POWER_STS_VDDD_BO                               (1 << 6)
+#define        POWER_STS_VDD5V_GT_VDDIO                        (1 << 5)
+#define        POWER_STS_VDD5V_DROOP                           (1 << 4)
+#define        POWER_STS_AVALID0                               (1 << 3)
+#define        POWER_STS_BVALID0                               (1 << 2)
+#define        POWER_STS_VBUSVALID0                            (1 << 1)
+#define        POWER_STS_SESSEND0                              (1 << 0)
+
+#define        POWER_SPEED_STATUS_MASK                         (0xffff << 8)
+#define        POWER_SPEED_STATUS_OFFSET                       8
+#define        POWER_SPEED_STATUS_SEL_MASK                     (0x3 << 6)
+#define        POWER_SPEED_STATUS_SEL_OFFSET                   6
+#define        POWER_SPEED_STATUS_SEL_DCDC_STAT                (0x0 << 6)
+#define        POWER_SPEED_STATUS_SEL_CORE_STAT                (0x1 << 6)
+#define        POWER_SPEED_STATUS_SEL_ARM_STAT                 (0x2 << 6)
+#define        POWER_SPEED_CTRL_MASK                           0x3
+#define        POWER_SPEED_CTRL_OFFSET                         0
+#define        POWER_SPEED_CTRL_SS_OFF                         0x0
+#define        POWER_SPEED_CTRL_SS_ON                          0x1
+#define        POWER_SPEED_CTRL_SS_ENABLE                      0x3
+
+#define        POWER_BATTMONITOR_BATT_VAL_MASK                 (0x3ff << 16)
+#define        POWER_BATTMONITOR_BATT_VAL_OFFSET               16
+#define        POWER_BATTMONITOR_PWDN_BATTBRNOUT_5VDETECT_EN   (1 << 11)
+#define        POWER_BATTMONITOR_EN_BATADJ                     (1 << 10)
+#define        POWER_BATTMONITOR_PWDN_BATTBRNOUT               (1 << 9)
+#define        POWER_BATTMONITOR_BRWNOUT_PWD                   (1 << 8)
+#define        POWER_BATTMONITOR_BRWNOUT_LVL_MASK              0x1f
+#define        POWER_BATTMONITOR_BRWNOUT_LVL_OFFSET            0
+
+#define        POWER_RESET_UNLOCK_MASK                         (0xffff << 16)
+#define        POWER_RESET_UNLOCK_OFFSET                       16
+#define        POWER_RESET_UNLOCK_KEY                          (0x3e77 << 16)
+#define        POWER_RESET_FASTFALL_PSWITCH_OFF                (1 << 2)
+#define        POWER_RESET_PWD_OFF                             (1 << 1)
+#define        POWER_RESET_PWD                                 (1 << 0)
+
+#define        POWER_DEBUG_VBUSVALIDPIOLOCK                    (1 << 3)
+#define        POWER_DEBUG_AVALIDPIOLOCK                       (1 << 2)
+#define        POWER_DEBUG_BVALIDPIOLOCK                       (1 << 1)
+#define        POWER_DEBUG_SESSENDPIOLOCK                      (1 << 0)
+
+#define        POWER_THERMAL_TEST                              (1 << 8)
+#define        POWER_THERMAL_PWD                               (1 << 7)
+#define        POWER_THERMAL_LOW_POWER                         (1 << 6)
+#define        POWER_THERMAL_OFFSET_ADJ_MASK                   (0x3 << 4)
+#define        POWER_THERMAL_OFFSET_ADJ_OFFSET                 4
+#define        POWER_THERMAL_OFFSET_ADJ_ENABLE                 (1 << 3)
+#define        POWER_THERMAL_TEMP_THRESHOLD_MASK               0x7
+#define        POWER_THERMAL_TEMP_THRESHOLD_OFFSET             0
+
+#define        POWER_USB1CTRL_AVALID1                          (1 << 3)
+#define        POWER_USB1CTRL_BVALID1                          (1 << 2)
+#define        POWER_USB1CTRL_VBUSVALID1                       (1 << 1)
+#define        POWER_USB1CTRL_SESSEND1                         (1 << 0)
+
+#define        POWER_SPECIAL_TEST_MASK                         0xffffffff
+#define        POWER_SPECIAL_TEST_OFFSET                       0
+
+#define        POWER_VERSION_MAJOR_MASK                        (0xff << 24)
+#define        POWER_VERSION_MAJOR_OFFSET                      24
+#define        POWER_VERSION_MINOR_MASK                        (0xff << 16)
+#define        POWER_VERSION_MINOR_OFFSET                      16
+#define        POWER_VERSION_STEP_MASK                         0xffff
+#define        POWER_VERSION_STEP_OFFSET                       0
+
+#define        POWER_ANACLKCTRL_CLKGATE_0                      (1 << 31)
+#define        POWER_ANACLKCTRL_OUTDIV_MASK                    (0x7 << 28)
+#define        POWER_ANACLKCTRL_OUTDIV_OFFSET                  28
+#define        POWER_ANACLKCTRL_INVERT_OUTCLK                  (1 << 27)
+#define        POWER_ANACLKCTRL_CLKGATE_I                      (1 << 26)
+#define        POWER_ANACLKCTRL_DITHER_OFF                     (1 << 10)
+#define        POWER_ANACLKCTRL_SLOW_DITHER                    (1 << 9)
+#define        POWER_ANACLKCTRL_INVERT_INCLK                   (1 << 8)
+#define        POWER_ANACLKCTRL_INCLK_SHIFT_MASK               (0x3 << 4)
+#define        POWER_ANACLKCTRL_INCLK_SHIFT_OFFSET             4
+#define        POWER_ANACLKCTRL_INDIV_MASK                     0x7
+#define        POWER_ANACLKCTRL_INDIV_OFFSET                   0
+
+#define        POWER_REFCTRL_FASTSETTLING                      (1 << 26)
+#define        POWER_REFCTRL_RAISE_REF                         (1 << 25)
+#define        POWER_REFCTRL_XTAL_BGR_BIAS                     (1 << 24)
+#define        POWER_REFCTRL_VBG_ADJ_MASK                      (0x7 << 20)
+#define        POWER_REFCTRL_VBG_ADJ_OFFSET                    20
+#define        POWER_REFCTRL_LOW_PWR                           (1 << 19)
+#define        POWER_REFCTRL_BIAS_CTRL_MASK                    (0x3 << 16)
+#define        POWER_REFCTRL_BIAS_CTRL_OFFSET                  16
+#define        POWER_REFCTRL_VDDXTAL_TO_VDDD                   (1 << 14)
+#define        POWER_REFCTRL_ADJ_ANA                           (1 << 13)
+#define        POWER_REFCTRL_ADJ_VAG                           (1 << 12)
+#define        POWER_REFCTRL_ANA_REFVAL_MASK                   (0xf << 8)
+#define        POWER_REFCTRL_ANA_REFVAL_OFFSET                 8
+#define        POWER_REFCTRL_VAG_VAL_MASK                      (0xf << 4)
+#define        POWER_REFCTRL_VAG_VAL_OFFSET                    4
+
+#endif /* __MX28_REGS_POWER_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-rtc.h b/arch/arm/include/asm/arch-mx28/regs-rtc.h
new file mode 100644 (file)
index 0000000..fe2fda9
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Freescale i.MX28 RTC Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_RTC_H__
+#define __MX28_REGS_RTC_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_rtc_regs {
+       mx28_reg(hw_rtc_ctrl)
+       mx28_reg(hw_rtc_stat)
+       mx28_reg(hw_rtc_milliseconds)
+       mx28_reg(hw_rtc_seconds)
+       mx28_reg(hw_rtc_rtc_alarm)
+       mx28_reg(hw_rtc_watchdog)
+       mx28_reg(hw_rtc_persistent0)
+       mx28_reg(hw_rtc_persistent1)
+       mx28_reg(hw_rtc_persistent2)
+       mx28_reg(hw_rtc_persistent3)
+       mx28_reg(hw_rtc_persistent4)
+       mx28_reg(hw_rtc_persistent5)
+       mx28_reg(hw_rtc_debug)
+       mx28_reg(hw_rtc_version)
+};
+#endif
+
+#define        RTC_CTRL_SFTRST                         (1 << 31)
+#define        RTC_CTRL_CLKGATE                        (1 << 30)
+#define        RTC_CTRL_SUPPRESS_COPY2ANALOG           (1 << 6)
+#define        RTC_CTRL_FORCE_UPDATE                   (1 << 5)
+#define        RTC_CTRL_WATCHDOGEN                     (1 << 4)
+#define        RTC_CTRL_ONEMSEC_IRQ                    (1 << 3)
+#define        RTC_CTRL_ALARM_IRQ                      (1 << 2)
+#define        RTC_CTRL_ONEMSEC_IRQ_EN                 (1 << 1)
+#define        RTC_CTRL_ALARM_IRQ_EN                   (1 << 0)
+
+#define        RTC_STAT_RTC_PRESENT                    (1 << 31)
+#define        RTC_STAT_ALARM_PRESENT                  (1 << 30)
+#define        RTC_STAT_WATCHDOG_PRESENT               (1 << 29)
+#define        RTC_STAT_XTAL32000_PRESENT              (1 << 28)
+#define        RTC_STAT_XTAL32768_PRESENT              (1 << 27)
+#define        RTC_STAT_STALE_REGS_MASK                (0xff << 16)
+#define        RTC_STAT_STALE_REGS_OFFSET              16
+#define        RTC_STAT_NEW_REGS_MASK                  (0xff << 8)
+#define        RTC_STAT_NEW_REGS_OFFSET                8
+
+#define        RTC_MILLISECONDS_COUNT_MASK             0xffffffff
+#define        RTC_MILLISECONDS_COUNT_OFFSET           0
+
+#define        RTC_SECONDS_COUNT_MASK                  0xffffffff
+#define        RTC_SECONDS_COUNT_OFFSET                0
+
+#define        RTC_ALARM_VALUE_MASK                    0xffffffff
+#define        RTC_ALARM_VALUE_OFFSET                  0
+
+#define        RTC_WATCHDOG_COUNT_MASK                 0xffffffff
+#define        RTC_WATCHDOG_COUNT_OFFSET               0
+
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_MASK   (0xf << 28)
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_OFFSET 28
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_2V83   (0x0 << 28)
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_2V78   (0x1 << 28)
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_2V73   (0x2 << 28)
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_2V68   (0x3 << 28)
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_2V62   (0x4 << 28)
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_2V57   (0x5 << 28)
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_2V52   (0x6 << 28)
+#define        RTC_PERSISTENT0_ADJ_POSLIMITBUCK_2V48   (0x7 << 28)
+#define        RTC_PERSISTENT0_EXTERNAL_RESET          (1 << 21)
+#define        RTC_PERSISTENT0_THERMAL_RESET           (1 << 20)
+#define        RTC_PERSISTENT0_ENABLE_LRADC_PWRUP      (1 << 18)
+#define        RTC_PERSISTENT0_AUTO_RESTART            (1 << 17)
+#define        RTC_PERSISTENT0_DISABLE_PSWITCH         (1 << 16)
+#define        RTC_PERSISTENT0_LOWERBIAS_MASK          (0xf << 14)
+#define        RTC_PERSISTENT0_LOWERBIAS_OFFSET        14
+#define        RTC_PERSISTENT0_LOWERBIAS_NOMINAL       (0x0 << 14)
+#define        RTC_PERSISTENT0_LOWERBIAS_M25P          (0x1 << 14)
+#define        RTC_PERSISTENT0_LOWERBIAS_M50P          (0x3 << 14)
+#define        RTC_PERSISTENT0_DISABLE_XTALOK          (1 << 13)
+#define        RTC_PERSISTENT0_MSEC_RES_MASK           (0x1f << 8)
+#define        RTC_PERSISTENT0_MSEC_RES_OFFSET         8
+#define        RTC_PERSISTENT0_MSEC_RES_1MS            (0x01 << 8)
+#define        RTC_PERSISTENT0_MSEC_RES_2MS            (0x02 << 8)
+#define        RTC_PERSISTENT0_MSEC_RES_4MS            (0x04 << 8)
+#define        RTC_PERSISTENT0_MSEC_RES_8MS            (0x08 << 8)
+#define        RTC_PERSISTENT0_MSEC_RES_16MS           (0x10 << 8)
+#define        RTC_PERSISTENT0_ALARM_WAKE              (1 << 7)
+#define        RTC_PERSISTENT0_XTAL32_FREQ             (1 << 6)
+#define        RTC_PERSISTENT0_XTAL32KHZ_PWRUP         (1 << 5)
+#define        RTC_PERSISTENT0_XTAL24KHZ_PWRUP         (1 << 4)
+#define        RTC_PERSISTENT0_LCK_SECS                (1 << 3)
+#define        RTC_PERSISTENT0_ALARM_EN                (1 << 2)
+#define        RTC_PERSISTENT0_ALARM_WAKE_EN           (1 << 1)
+#define        RTC_PERSISTENT0_CLOCKSOURCE             (1 << 0)
+
+#define        RTC_PERSISTENT1_GENERAL_MASK            0xffffffff
+#define        RTC_PERSISTENT1_GENERAL_OFFSET          0
+#define        RTC_PERSISTENT1_GENERAL_OTG_ALT_ROLE    0x0080
+#define        RTC_PERSISTENT1_GENERAL_OTG_HNP         0x0100
+#define        RTC_PERSISTENT1_GENERAL_USB_LPM         0x0200
+#define        RTC_PERSISTENT1_GENERAL_SKIP_CHECKDISK  0x0400
+#define        RTC_PERSISTENT1_GENERAL_USB_BOOT_PLAYER 0x0800
+#define        RTC_PERSISTENT1_GENERAL_ENUM_500MA_2X   0x1000
+
+#define        RTC_PERSISTENT2_GENERAL_MASK            0xffffffff
+#define        RTC_PERSISTENT2_GENERAL_OFFSET          0
+
+#define        RTC_PERSISTENT3_GENERAL_MASK            0xffffffff
+#define        RTC_PERSISTENT3_GENERAL_OFFSET          0
+
+#define        RTC_PERSISTENT4_GENERAL_MASK            0xffffffff
+#define        RTC_PERSISTENT4_GENERAL_OFFSET          0
+
+#define        RTC_PERSISTENT5_GENERAL_MASK            0xffffffff
+#define        RTC_PERSISTENT5_GENERAL_OFFSET          0
+
+#define        RTC_DEBUG_WATCHDOG_RESET_MASK           (1 << 1)
+#define        RTC_DEBUG_WATCHDOG_RESET                (1 << 0)
+
+#define        RTC_VERSION_MAJOR_MASK                  (0xff << 24)
+#define        RTC_VERSION_MAJOR_OFFSET                24
+#define        RTC_VERSION_MINOR_MASK                  (0xff << 16)
+#define        RTC_VERSION_MINOR_OFFSET                16
+#define        RTC_VERSION_STEP_MASK                   0xffff
+#define        RTC_VERSION_STEP_OFFSET                 0
+
+#endif /* __MX28_REGS_RTC_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-ssp.h b/arch/arm/include/asm/arch-mx28/regs-ssp.h
new file mode 100644 (file)
index 0000000..ab3870c
--- /dev/null
@@ -0,0 +1,349 @@
+/*
+ * Freescale i.MX28 SSP Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_SSP_H__
+#define __MX28_REGS_SSP_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_ssp_regs {
+       mx28_reg(hw_ssp_ctrl0)
+       mx28_reg(hw_ssp_cmd0)
+       mx28_reg(hw_ssp_cmd1)
+       mx28_reg(hw_ssp_xfer_size)
+       mx28_reg(hw_ssp_block_size)
+       mx28_reg(hw_ssp_compref)
+       mx28_reg(hw_ssp_compmask)
+       mx28_reg(hw_ssp_timing)
+       mx28_reg(hw_ssp_ctrl1)
+       mx28_reg(hw_ssp_data)
+       mx28_reg(hw_ssp_sdresp0)
+       mx28_reg(hw_ssp_sdresp1)
+       mx28_reg(hw_ssp_sdresp2)
+       mx28_reg(hw_ssp_sdresp3)
+       mx28_reg(hw_ssp_ddr_ctrl)
+       mx28_reg(hw_ssp_dll_ctrl)
+       mx28_reg(hw_ssp_status)
+       mx28_reg(hw_ssp_dll_sts)
+       mx28_reg(hw_ssp_debug)
+       mx28_reg(hw_ssp_version)
+};
+#endif
+
+#define        SSP_CTRL0_SFTRST                        (1 << 31)
+#define        SSP_CTRL0_CLKGATE                       (1 << 30)
+#define        SSP_CTRL0_RUN                           (1 << 29)
+#define        SSP_CTRL0_SDIO_IRQ_CHECK                (1 << 28)
+#define        SSP_CTRL0_LOCK_CS                       (1 << 27)
+#define        SSP_CTRL0_IGNORE_CRC                    (1 << 26)
+#define        SSP_CTRL0_READ                          (1 << 25)
+#define        SSP_CTRL0_DATA_XFER                     (1 << 24)
+#define        SSP_CTRL0_BUS_WIDTH_MASK                (0x3 << 22)
+#define        SSP_CTRL0_BUS_WIDTH_OFFSET              22
+#define        SSP_CTRL0_BUS_WIDTH_ONE_BIT             (0x0 << 22)
+#define        SSP_CTRL0_BUS_WIDTH_FOUR_BIT            (0x1 << 22)
+#define        SSP_CTRL0_BUS_WIDTH_EIGHT_BIT           (0x2 << 22)
+#define        SSP_CTRL0_WAIT_FOR_IRQ                  (1 << 21)
+#define        SSP_CTRL0_WAIT_FOR_CMD                  (1 << 20)
+#define        SSP_CTRL0_LONG_RESP                     (1 << 19)
+#define        SSP_CTRL0_CHECK_RESP                    (1 << 18)
+#define        SSP_CTRL0_GET_RESP                      (1 << 17)
+#define        SSP_CTRL0_ENABLE                        (1 << 16)
+
+#define        SSP_CMD0_SOFT_TERMINATE                 (1 << 26)
+#define        SSP_CMD0_DBL_DATA_RATE_EN               (1 << 25)
+#define        SSP_CMD0_PRIM_BOOT_OP_EN                (1 << 24)
+#define        SSP_CMD0_BOOT_ACK_EN                    (1 << 23)
+#define        SSP_CMD0_SLOW_CLKING_EN                 (1 << 22)
+#define        SSP_CMD0_CONT_CLKING_EN                 (1 << 21)
+#define        SSP_CMD0_APPEND_8CYC                    (1 << 20)
+#define        SSP_CMD0_CMD_MASK                       0xff
+#define        SSP_CMD0_CMD_OFFSET                     0
+#define        SSP_CMD0_CMD_MMC_GO_IDLE_STATE          0x00
+#define        SSP_CMD0_CMD_MMC_SEND_OP_COND           0x01
+#define        SSP_CMD0_CMD_MMC_ALL_SEND_CID           0x02
+#define        SSP_CMD0_CMD_MMC_SET_RELATIVE_ADDR      0x03
+#define        SSP_CMD0_CMD_MMC_SET_DSR                0x04
+#define        SSP_CMD0_CMD_MMC_RESERVED_5             0x05
+#define        SSP_CMD0_CMD_MMC_SWITCH                 0x06
+#define        SSP_CMD0_CMD_MMC_SELECT_DESELECT_CARD   0x07
+#define        SSP_CMD0_CMD_MMC_SEND_EXT_CSD           0x08
+#define        SSP_CMD0_CMD_MMC_SEND_CSD               0x09
+#define        SSP_CMD0_CMD_MMC_SEND_CID               0x0a
+#define        SSP_CMD0_CMD_MMC_READ_DAT_UNTIL_STOP    0x0b
+#define        SSP_CMD0_CMD_MMC_STOP_TRANSMISSION      0x0c
+#define        SSP_CMD0_CMD_MMC_SEND_STATUS            0x0d
+#define        SSP_CMD0_CMD_MMC_BUSTEST_R              0x0e
+#define        SSP_CMD0_CMD_MMC_GO_INACTIVE_STATE      0x0f
+#define        SSP_CMD0_CMD_MMC_SET_BLOCKLEN           0x10
+#define        SSP_CMD0_CMD_MMC_READ_SINGLE_BLOCK      0x11
+#define        SSP_CMD0_CMD_MMC_READ_MULTIPLE_BLOCK    0x12
+#define        SSP_CMD0_CMD_MMC_BUSTEST_W              0x13
+#define        SSP_CMD0_CMD_MMC_WRITE_DAT_UNTIL_STOP   0x14
+#define        SSP_CMD0_CMD_MMC_SET_BLOCK_COUNT        0x17
+#define        SSP_CMD0_CMD_MMC_WRITE_BLOCK            0x18
+#define        SSP_CMD0_CMD_MMC_WRITE_MULTIPLE_BLOCK   0x19
+#define        SSP_CMD0_CMD_MMC_PROGRAM_CID            0x1a
+#define        SSP_CMD0_CMD_MMC_PROGRAM_CSD            0x1b
+#define        SSP_CMD0_CMD_MMC_SET_WRITE_PROT         0x1c
+#define        SSP_CMD0_CMD_MMC_CLR_WRITE_PROT         0x1d
+#define        SSP_CMD0_CMD_MMC_SEND_WRITE_PROT        0x1e
+#define        SSP_CMD0_CMD_MMC_ERASE_GROUP_START      0x23
+#define        SSP_CMD0_CMD_MMC_ERASE_GROUP_END        0x24
+#define        SSP_CMD0_CMD_MMC_ERASE                  0x26
+#define        SSP_CMD0_CMD_MMC_FAST_IO                0x27
+#define        SSP_CMD0_CMD_MMC_GO_IRQ_STATE           0x28
+#define        SSP_CMD0_CMD_MMC_LOCK_UNLOCK            0x2a
+#define        SSP_CMD0_CMD_MMC_APP_CMD                0x37
+#define        SSP_CMD0_CMD_MMC_GEN_CMD                0x38
+#define        SSP_CMD0_CMD_SD_GO_IDLE_STATE           0x00
+#define        SSP_CMD0_CMD_SD_ALL_SEND_CID            0x02
+#define        SSP_CMD0_CMD_SD_SEND_RELATIVE_ADDR      0x03
+#define        SSP_CMD0_CMD_SD_SET_DSR                 0x04
+#define        SSP_CMD0_CMD_SD_IO_SEND_OP_COND         0x05
+#define        SSP_CMD0_CMD_SD_SELECT_DESELECT_CARD    0x07
+#define        SSP_CMD0_CMD_SD_SEND_CSD                0x09
+#define        SSP_CMD0_CMD_SD_SEND_CID                0x0a
+#define        SSP_CMD0_CMD_SD_STOP_TRANSMISSION       0x0c
+#define        SSP_CMD0_CMD_SD_SEND_STATUS             0x0d
+#define        SSP_CMD0_CMD_SD_GO_INACTIVE_STATE       0x0f
+#define        SSP_CMD0_CMD_SD_SET_BLOCKLEN            0x10
+#define        SSP_CMD0_CMD_SD_READ_SINGLE_BLOCK       0x11
+#define        SSP_CMD0_CMD_SD_READ_MULTIPLE_BLOCK     0x12
+#define        SSP_CMD0_CMD_SD_WRITE_BLOCK             0x18
+#define        SSP_CMD0_CMD_SD_WRITE_MULTIPLE_BLOCK    0x19
+#define        SSP_CMD0_CMD_SD_PROGRAM_CSD             0x1b
+#define        SSP_CMD0_CMD_SD_SET_WRITE_PROT          0x1c
+#define        SSP_CMD0_CMD_SD_CLR_WRITE_PROT          0x1d
+#define        SSP_CMD0_CMD_SD_SEND_WRITE_PROT         0x1e
+#define        SSP_CMD0_CMD_SD_ERASE_WR_BLK_START      0x20
+#define        SSP_CMD0_CMD_SD_ERASE_WR_BLK_END        0x21
+#define        SSP_CMD0_CMD_SD_ERASE_GROUP_START       0x23
+#define        SSP_CMD0_CMD_SD_ERASE_GROUP_END         0x24
+#define        SSP_CMD0_CMD_SD_ERASE                   0x26
+#define        SSP_CMD0_CMD_SD_LOCK_UNLOCK             0x2a
+#define        SSP_CMD0_CMD_SD_IO_RW_DIRECT            0x34
+#define        SSP_CMD0_CMD_SD_IO_RW_EXTENDED          0x35
+#define        SSP_CMD0_CMD_SD_APP_CMD                 0x37
+#define        SSP_CMD0_CMD_SD_GEN_CMD                 0x38
+
+#define        SSP_CMD1_CMD_ARG_MASK                   0xffffffff
+#define        SSP_CMD1_CMD_ARG_OFFSET                 0
+
+#define        SSP_XFER_SIZE_XFER_COUNT_MASK           0xffffffff
+#define        SSP_XFER_SIZE_XFER_COUNT_OFFSET         0
+
+#define        SSP_BLOCK_SIZE_BLOCK_COUNT_MASK         (0xffffff << 4)
+#define        SSP_BLOCK_SIZE_BLOCK_COUNT_OFFSET       4
+#define        SSP_BLOCK_SIZE_BLOCK_SIZE_MASK          0xf
+#define        SSP_BLOCK_SIZE_BLOCK_SIZE_OFFSET        0
+
+#define        SSP_COMPREF_REFERENCE_MASK              0xffffffff
+#define        SSP_COMPREF_REFERENCE_OFFSET            0
+
+#define        SSP_COMPMASK_MASK_MASK                  0xffffffff
+#define        SSP_COMPMASK_MASK_OFFSET                0
+
+#define        SSP_TIMING_TIMEOUT_MASK                 (0xffff << 16)
+#define        SSP_TIMING_TIMEOUT_OFFSET               16
+#define        SSP_TIMING_CLOCK_DIVIDE_MASK            (0xff << 8)
+#define        SSP_TIMING_CLOCK_DIVIDE_OFFSET          8
+#define        SSP_TIMING_CLOCK_RATE_MASK              0xff
+#define        SSP_TIMING_CLOCK_RATE_OFFSET            0
+
+#define        SSP_CTRL1_SDIO_IRQ                      (1 << 31)
+#define        SSP_CTRL1_SDIO_IRQ_EN                   (1 << 30)
+#define        SSP_CTRL1_RESP_ERR_IRQ                  (1 << 29)
+#define        SSP_CTRL1_RESP_ERR_IRQ_EN               (1 << 28)
+#define        SSP_CTRL1_RESP_TIMEOUT_IRQ              (1 << 27)
+#define        SSP_CTRL1_RESP_TIMEOUT_IRQ_EN           (1 << 26)
+#define        SSP_CTRL1_DATA_TIMEOUT_IRQ              (1 << 25)
+#define        SSP_CTRL1_DATA_TIMEOUT_IRQ_EN           (1 << 24)
+#define        SSP_CTRL1_DATA_CRC_IRQ                  (1 << 23)
+#define        SSP_CTRL1_DATA_CRC_IRQ_EN               (1 << 22)
+#define        SSP_CTRL1_FIFO_UNDERRUN_IRQ             (1 << 21)
+#define        SSP_CTRL1_FIFO_UNDERRUN_EN              (1 << 20)
+#define        SSP_CTRL1_CEATA_CCS_ERR_IRQ             (1 << 19)
+#define        SSP_CTRL1_CEATA_CCS_ERR_IRQ_EN          (1 << 18)
+#define        SSP_CTRL1_RECV_TIMEOUT_IRQ              (1 << 17)
+#define        SSP_CTRL1_RECV_TIMEOUT_IRQ_EN           (1 << 16)
+#define        SSP_CTRL1_FIFO_OVERRUN_IRQ              (1 << 15)
+#define        SSP_CTRL1_FIFO_OVERRUN_IRQ_EN           (1 << 14)
+#define        SSP_CTRL1_DMA_ENABLE                    (1 << 13)
+#define        SSP_CTRL1_CEATA_CCS_ERR_EN              (1 << 12)
+#define        SSP_CTRL1_SLAVE_OUT_DISABLE             (1 << 11)
+#define        SSP_CTRL1_PHASE                         (1 << 10)
+#define        SSP_CTRL1_POLARITY                      (1 << 9)
+#define        SSP_CTRL1_SLAVE_MODE                    (1 << 8)
+#define        SSP_CTRL1_WORD_LENGTH_MASK              (0xf << 4)
+#define        SSP_CTRL1_WORD_LENGTH_OFFSET            4
+#define        SSP_CTRL1_WORD_LENGTH_RESERVED0         (0x0 << 4)
+#define        SSP_CTRL1_WORD_LENGTH_RESERVED1         (0x1 << 4)
+#define        SSP_CTRL1_WORD_LENGTH_RESERVED2         (0x2 << 4)
+#define        SSP_CTRL1_WORD_LENGTH_FOUR_BITS         (0x3 << 4)
+#define        SSP_CTRL1_WORD_LENGTH_EIGHT_BITS        (0x7 << 4)
+#define        SSP_CTRL1_WORD_LENGTH_SIXTEEN_BITS      (0xf << 4)
+#define        SSP_CTRL1_SSP_MODE_MASK                 0xf
+#define        SSP_CTRL1_SSP_MODE_OFFSET               0
+#define        SSP_CTRL1_SSP_MODE_SPI                  0x0
+#define        SSP_CTRL1_SSP_MODE_SSI                  0x1
+#define        SSP_CTRL1_SSP_MODE_SD_MMC               0x3
+#define        SSP_CTRL1_SSP_MODE_MS                   0x4
+
+#define        SSP_DATA_DATA_MASK                      0xffffffff
+#define        SSP_DATA_DATA_OFFSET                    0
+
+#define        SSP_SDRESP0_RESP0_MASK                  0xffffffff
+#define        SSP_SDRESP0_RESP0_OFFSET                0
+
+#define        SSP_SDRESP1_RESP1_MASK                  0xffffffff
+#define        SSP_SDRESP1_RESP1_OFFSET                0
+
+#define        SSP_SDRESP2_RESP2_MASK                  0xffffffff
+#define        SSP_SDRESP2_RESP2_OFFSET                0
+
+#define        SSP_SDRESP3_RESP3_MASK                  0xffffffff
+#define        SSP_SDRESP3_RESP3_OFFSET                0
+
+#define        SSP_DDR_CTRL_DMA_BURST_TYPE_MASK        (0x3 << 30)
+#define        SSP_DDR_CTRL_DMA_BURST_TYPE_OFFSET      30
+#define        SSP_DDR_CTRL_NIBBLE_POS                 (1 << 1)
+#define        SSP_DDR_CTRL_TXCLK_DELAY_TYPE           (1 << 0)
+
+#define        SSP_DLL_CTRL_REF_UPDATE_INT_MASK        (0xf << 28)
+#define        SSP_DLL_CTRL_REF_UPDATE_INT_OFFSET      28
+#define        SSP_DLL_CTRL_SLV_UPDATE_INT_MASK        (0xff << 20)
+#define        SSP_DLL_CTRL_SLV_UPDATE_INT_OFFSET      20
+#define        SSP_DLL_CTRL_SLV_OVERRIDE_VAL_MASK      (0x3f << 10)
+#define        SSP_DLL_CTRL_SLV_OVERRIDE_VAL_OFFSET    10
+#define        SSP_DLL_CTRL_SLV_OVERRIDE               (1 << 9)
+#define        SSP_DLL_CTRL_GATE_UPDATE                (1 << 7)
+#define        SSP_DLL_CTRL_SLV_DLY_TARGET_MASK        (0xf << 3)
+#define        SSP_DLL_CTRL_SLV_DLY_TARGET_OFFSET      3
+#define        SSP_DLL_CTRL_SLV_FORCE_UPD              (1 << 2)
+#define        SSP_DLL_CTRL_RESET                      (1 << 1)
+#define        SSP_DLL_CTRL_ENABLE                     (1 << 0)
+
+#define        SSP_STATUS_PRESENT                      (1 << 31)
+#define        SSP_STATUS_MS_PRESENT                   (1 << 30)
+#define        SSP_STATUS_SD_PRESENT                   (1 << 29)
+#define        SSP_STATUS_CARD_DETECT                  (1 << 28)
+#define        SSP_STATUS_DMABURST                     (1 << 22)
+#define        SSP_STATUS_DMASENSE                     (1 << 21)
+#define        SSP_STATUS_DMATERM                      (1 << 20)
+#define        SSP_STATUS_DMAREQ                       (1 << 19)
+#define        SSP_STATUS_DMAEND                       (1 << 18)
+#define        SSP_STATUS_SDIO_IRQ                     (1 << 17)
+#define        SSP_STATUS_RESP_CRC_ERR                 (1 << 16)
+#define        SSP_STATUS_RESP_ERR                     (1 << 15)
+#define        SSP_STATUS_RESP_TIMEOUT                 (1 << 14)
+#define        SSP_STATUS_DATA_CRC_ERR                 (1 << 13)
+#define        SSP_STATUS_TIMEOUT                      (1 << 12)
+#define        SSP_STATUS_RECV_TIMEOUT_STAT            (1 << 11)
+#define        SSP_STATUS_CEATA_CCS_ERR                (1 << 10)
+#define        SSP_STATUS_FIFO_OVRFLW                  (1 << 9)
+#define        SSP_STATUS_FIFO_FULL                    (1 << 8)
+#define        SSP_STATUS_FIFO_EMPTY                   (1 << 5)
+#define        SSP_STATUS_FIFO_UNDRFLW                 (1 << 4)
+#define        SSP_STATUS_CMD_BUSY                     (1 << 3)
+#define        SSP_STATUS_DATA_BUSY                    (1 << 2)
+#define        SSP_STATUS_BUSY                         (1 << 0)
+
+#define        SSP_DLL_STS_REF_SEL_MASK                (0x3f << 8)
+#define        SSP_DLL_STS_REF_SEL_OFFSET              8
+#define        SSP_DLL_STS_SLV_SEL_MASK                (0x3f << 2)
+#define        SSP_DLL_STS_SLV_SEL_OFFSET              2
+#define        SSP_DLL_STS_REF_LOCK                    (1 << 1)
+#define        SSP_DLL_STS_SLV_LOCK                    (1 << 0)
+
+#define        SSP_DEBUG_DATACRC_ERR_MASK              (0xf << 28)
+#define        SSP_DEBUG_DATACRC_ERR_OFFSET            28
+#define        SSP_DEBUG_DATA_STALL                    (1 << 27)
+#define        SSP_DEBUG_DAT_SM_MASK                   (0x7 << 24)
+#define        SSP_DEBUG_DAT_SM_OFFSET                 24
+#define        SSP_DEBUG_DAT_SM_DSM_IDLE               (0x0 << 24)
+#define        SSP_DEBUG_DAT_SM_DSM_WORD               (0x2 << 24)
+#define        SSP_DEBUG_DAT_SM_DSM_CRC1               (0x3 << 24)
+#define        SSP_DEBUG_DAT_SM_DSM_CRC2               (0x4 << 24)
+#define        SSP_DEBUG_DAT_SM_DSM_END                (0x5 << 24)
+#define        SSP_DEBUG_MSTK_SM_MASK                  (0xf << 20)
+#define        SSP_DEBUG_MSTK_SM_OFFSET                20
+#define        SSP_DEBUG_MSTK_SM_MSTK_IDLE             (0x0 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_CKON             (0x1 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_BS1              (0x2 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_TPC              (0x3 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_BS2              (0x4 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_HDSHK            (0x5 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_BS3              (0x6 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_RW               (0x7 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_CRC1             (0x8 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_CRC2             (0x9 << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_BS0              (0xa << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_END1             (0xb << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_END2W            (0xc << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_END2R            (0xd << 20)
+#define        SSP_DEBUG_MSTK_SM_MSTK_DONE             (0xe << 20)
+#define        SSP_DEBUG_CMD_OE                        (1 << 19)
+#define        SSP_DEBUG_DMA_SM_MASK                   (0x7 << 16)
+#define        SSP_DEBUG_DMA_SM_OFFSET                 16
+#define        SSP_DEBUG_DMA_SM_DMA_IDLE               (0x0 << 16)
+#define        SSP_DEBUG_DMA_SM_DMA_DMAREQ             (0x1 << 16)
+#define        SSP_DEBUG_DMA_SM_DMA_DMAACK             (0x2 << 16)
+#define        SSP_DEBUG_DMA_SM_DMA_STALL              (0x3 << 16)
+#define        SSP_DEBUG_DMA_SM_DMA_BUSY               (0x4 << 16)
+#define        SSP_DEBUG_DMA_SM_DMA_DONE               (0x5 << 16)
+#define        SSP_DEBUG_DMA_SM_DMA_COUNT              (0x6 << 16)
+#define        SSP_DEBUG_MMC_SM_MASK                   (0xf << 12)
+#define        SSP_DEBUG_MMC_SM_OFFSET                 12
+#define        SSP_DEBUG_MMC_SM_MMC_IDLE               (0x0 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_CMD                (0x1 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_TRC                (0x2 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_RESP               (0x3 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_RPRX               (0x4 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_TX                 (0x5 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_CTOK               (0x6 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_RX                 (0x7 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_CCS                (0x8 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_PUP                (0x9 << 12)
+#define        SSP_DEBUG_MMC_SM_MMC_WAIT               (0xa << 12)
+#define        SSP_DEBUG_CMD_SM_MASK                   (0x3 << 10)
+#define        SSP_DEBUG_CMD_SM_OFFSET                 10
+#define        SSP_DEBUG_CMD_SM_CSM_IDLE               (0x0 << 10)
+#define        SSP_DEBUG_CMD_SM_CSM_INDEX              (0x1 << 10)
+#define        SSP_DEBUG_CMD_SM_CSM_ARG                (0x2 << 10)
+#define        SSP_DEBUG_CMD_SM_CSM_CRC                (0x3 << 10)
+#define        SSP_DEBUG_SSP_CMD                       (1 << 9)
+#define        SSP_DEBUG_SSP_RESP                      (1 << 8)
+#define        SSP_DEBUG_SSP_RXD_MASK                  0xff
+#define        SSP_DEBUG_SSP_RXD_OFFSET                0
+
+#define        SSP_VERSION_MAJOR_MASK                  (0xff << 24)
+#define        SSP_VERSION_MAJOR_OFFSET                24
+#define        SSP_VERSION_MINOR_MASK                  (0xff << 16)
+#define        SSP_VERSION_MINOR_OFFSET                16
+#define        SSP_VERSION_STEP_MASK                   0xffff
+#define        SSP_VERSION_STEP_OFFSET                 0
+
+#endif /* __MX28_REGS_SSP_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-timrot.h b/arch/arm/include/asm/arch-mx28/regs-timrot.h
new file mode 100644 (file)
index 0000000..1b941cf
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * Freescale i.MX28 TIMROT Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_REGS_TIMROT_H__
+#define __MX28_REGS_TIMROT_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef        __ASSEMBLY__
+struct mx28_timrot_regs {
+       mx28_reg(hw_timrot_rotctrl)
+       mx28_reg(hw_timrot_rotcount)
+       mx28_reg(hw_timrot_timctrl0)
+       mx28_reg(hw_timrot_running_count0)
+       mx28_reg(hw_timrot_fixed_count0)
+       mx28_reg(hw_timrot_match_count0)
+       mx28_reg(hw_timrot_timctrl1)
+       mx28_reg(hw_timrot_running_count1)
+       mx28_reg(hw_timrot_fixed_count1)
+       mx28_reg(hw_timrot_match_count1)
+       mx28_reg(hw_timrot_timctrl2)
+       mx28_reg(hw_timrot_running_count2)
+       mx28_reg(hw_timrot_fixed_count2)
+       mx28_reg(hw_timrot_match_count2)
+       mx28_reg(hw_timrot_timctrl3)
+       mx28_reg(hw_timrot_running_count3)
+       mx28_reg(hw_timrot_fixed_count3)
+       mx28_reg(hw_timrot_match_count3)
+       mx28_reg(hw_timrot_version)
+};
+#endif
+
+#define        TIMROT_ROTCTRL_SFTRST                           (1 << 31)
+#define        TIMROT_ROTCTRL_CLKGATE                          (1 << 30)
+#define        TIMROT_ROTCTRL_ROTARY_PRESENT                   (1 << 29)
+#define        TIMROT_ROTCTRL_TIM3_PRESENT                     (1 << 28)
+#define        TIMROT_ROTCTRL_TIM2_PRESENT                     (1 << 27)
+#define        TIMROT_ROTCTRL_TIM1_PRESENT                     (1 << 26)
+#define        TIMROT_ROTCTRL_TIM0_PRESENT                     (1 << 25)
+#define        TIMROT_ROTCTRL_STATE_MASK                       (0x7 << 22)
+#define        TIMROT_ROTCTRL_STATE_OFFSET                     22
+#define        TIMROT_ROTCTRL_DIVIDER_MASK                     (0x3f << 16)
+#define        TIMROT_ROTCTRL_DIVIDER_OFFSET                   16
+#define        TIMROT_ROTCTRL_RELATIVE                         (1 << 12)
+#define        TIMROT_ROTCTRL_OVERSAMPLE_MASK                  (0x3 << 10)
+#define        TIMROT_ROTCTRL_OVERSAMPLE_OFFSET                10
+#define        TIMROT_ROTCTRL_OVERSAMPLE_8X                    (0x0 << 10)
+#define        TIMROT_ROTCTRL_OVERSAMPLE_4X                    (0x1 << 10)
+#define        TIMROT_ROTCTRL_OVERSAMPLE_2X                    (0x2 << 10)
+#define        TIMROT_ROTCTRL_OVERSAMPLE_1X                    (0x3 << 10)
+#define        TIMROT_ROTCTRL_POLARITY_B                       (1 << 9)
+#define        TIMROT_ROTCTRL_POLARITY_A                       (1 << 8)
+#define        TIMROT_ROTCTRL_SELECT_B_MASK                    (0xf << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_OFFSET                  4
+#define        TIMROT_ROTCTRL_SELECT_B_NEVER_TICK              (0x0 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_PWM0                    (0x1 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_PWM1                    (0x2 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_PWM2                    (0x3 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_PWM3                    (0x4 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_PWM4                    (0x5 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_PWM5                    (0x6 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_PWM6                    (0x7 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_PWM7                    (0x8 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_ROTARYA                 (0x9 << 4)
+#define        TIMROT_ROTCTRL_SELECT_B_ROTARYB                 (0xa << 4)
+#define        TIMROT_ROTCTRL_SELECT_A_MASK                    0xf
+#define        TIMROT_ROTCTRL_SELECT_A_OFFSET                  0
+#define        TIMROT_ROTCTRL_SELECT_A_NEVER_TICK              0x0
+#define        TIMROT_ROTCTRL_SELECT_A_PWM0                    0x1
+#define        TIMROT_ROTCTRL_SELECT_A_PWM1                    0x2
+#define        TIMROT_ROTCTRL_SELECT_A_PWM2                    0x3
+#define        TIMROT_ROTCTRL_SELECT_A_PWM3                    0x4
+#define        TIMROT_ROTCTRL_SELECT_A_PWM4                    0x5
+#define        TIMROT_ROTCTRL_SELECT_A_PWM5                    0x6
+#define        TIMROT_ROTCTRL_SELECT_A_PWM6                    0x7
+#define        TIMROT_ROTCTRL_SELECT_A_PWM7                    0x8
+#define        TIMROT_ROTCTRL_SELECT_A_ROTARYA                 0x9
+#define        TIMROT_ROTCTRL_SELECT_A_ROTARYB                 0xa
+
+#define        TIMROT_ROTCOUNT_UPDOWN_MASK                     0xffff
+#define        TIMROT_ROTCOUNT_UPDOWN_OFFSET                   0
+
+#define        TIMROT_TIMCTRLn_IRQ                             (1 << 15)
+#define        TIMROT_TIMCTRLn_IRQ_EN                          (1 << 14)
+#define        TIMROT_TIMCTRLn_MATCH_MODE                      (1 << 11)
+#define        TIMROT_TIMCTRLn_POLARITY                        (1 << 8)
+#define        TIMROT_TIMCTRLn_UPDATE                          (1 << 7)
+#define        TIMROT_TIMCTRLn_RELOAD                          (1 << 6)
+#define        TIMROT_TIMCTRLn_PRESCALE_MASK                   (0x3 << 4)
+#define        TIMROT_TIMCTRLn_PRESCALE_OFFSET                 4
+#define        TIMROT_TIMCTRLn_PRESCALE_DIV_BY_1               (0x0 << 4)
+#define        TIMROT_TIMCTRLn_PRESCALE_DIV_BY_2               (0x1 << 4)
+#define        TIMROT_TIMCTRLn_PRESCALE_DIV_BY_4               (0x2 << 4)
+#define        TIMROT_TIMCTRLn_PRESCALE_DIV_BY_8               (0x3 << 4)
+#define        TIMROT_TIMCTRLn_SELECT_MASK                     0xf
+#define        TIMROT_TIMCTRLn_SELECT_OFFSET                   0
+#define        TIMROT_TIMCTRLn_SELECT_NEVER_TICK               0x0
+#define        TIMROT_TIMCTRLn_SELECT_PWM0                     0x1
+#define        TIMROT_TIMCTRLn_SELECT_PWM1                     0x2
+#define        TIMROT_TIMCTRLn_SELECT_PWM2                     0x3
+#define        TIMROT_TIMCTRLn_SELECT_PWM3                     0x4
+#define        TIMROT_TIMCTRLn_SELECT_PWM4                     0x5
+#define        TIMROT_TIMCTRLn_SELECT_PWM5                     0x6
+#define        TIMROT_TIMCTRLn_SELECT_PWM6                     0x7
+#define        TIMROT_TIMCTRLn_SELECT_PWM7                     0x8
+#define        TIMROT_TIMCTRLn_SELECT_ROTARYA                  0x9
+#define        TIMROT_TIMCTRLn_SELECT_ROTARYB                  0xa
+#define        TIMROT_TIMCTRLn_SELECT_32KHZ_XTAL               0xb
+#define        TIMROT_TIMCTRLn_SELECT_8KHZ_XTAL                0xc
+#define        TIMROT_TIMCTRLn_SELECT_4KHZ_XTAL                0xd
+#define        TIMROT_TIMCTRLn_SELECT_1KHZ_XTAL                0xe
+#define        TIMROT_TIMCTRLn_SELECT_TICK_ALWAYS              0xf
+
+#define        TIMROT_RUNNING_COUNTn_RUNNING_COUNT_MASK        0xffffffff
+#define        TIMROT_RUNNING_COUNTn_RUNNING_COUNT_OFFSET      0
+
+#define        TIMROT_FIXED_COUNTn_FIXED_COUNT_MASK            0xffffffff
+#define        TIMROT_FIXED_COUNTn_FIXED_COUNT_OFFSET          0
+
+#define        TIMROT_MATCH_COUNTn_MATCH_COUNT_MASK            0xffffffff
+#define        TIMROT_MATCH_COUNTn_MATCH_COUNT_OFFSET          0
+
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_MASK                (0xf << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_OFFSET              16
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_NEVER_TICK          (0x0 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_PWM0                (0x1 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_PWM1                (0x2 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_PWM2                (0x3 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_PWM3                (0x4 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_PWM4                (0x5 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_PWM5                (0x6 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_PWM6                (0x7 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_PWM7                (0x8 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_ROTARYA             (0x9 << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_ROTARYB             (0xa << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_32KHZ_XTAL          (0xb << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_8KHZ_XTAL           (0xc << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_4KHZ_XTAL           (0xd << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_1KHZ_XTAL           (0xe << 16)
+#define        TIMROT_TIMCTRL3_TEST_SIGNAL_TICK_ALWAYS         (0xf << 16)
+#define        TIMROT_TIMCTRL3_DUTY_CYCLE                      (1 << 9)
+
+#define        TIMROT_VERSION_MAJOR_MASK                       (0xff << 24)
+#define        TIMROT_VERSION_MAJOR_OFFSET                     24
+#define        TIMROT_VERSION_MINOR_MASK                       (0xff << 16)
+#define        TIMROT_VERSION_MINOR_OFFSET                     16
+#define        TIMROT_VERSION_STEP_MASK                        0xffff
+#define        TIMROT_VERSION_STEP_OFFSET                      0
+
+#endif /* __MX28_REGS_TIMROT_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-usb.h b/arch/arm/include/asm/arch-mx28/regs-usb.h
new file mode 100644 (file)
index 0000000..ea61de8
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ * Freescale i.MX28 USB OTG Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __REGS_USB_H__
+#define __REGS_USB_H__
+
+struct mx28_usb_regs {
+       uint32_t                hw_usbctrl_id;                  /* 0x000 */
+       uint32_t                hw_usbctrl_hwgeneral;           /* 0x004 */
+       uint32_t                hw_usbctrl_hwhost;              /* 0x008 */
+       uint32_t                hw_usbctrl_hwdevice;            /* 0x00c */
+       uint32_t                hw_usbctrl_hwtxbuf;             /* 0x010 */
+       uint32_t                hw_usbctrl_hwrxbuf;             /* 0x014 */
+
+       uint32_t                reserved1[26];
+
+       uint32_t                hw_usbctrl_gptimer0ld;          /* 0x080 */
+       uint32_t                hw_usbctrl_gptimer0ctrl;        /* 0x084 */
+       uint32_t                hw_usbctrl_gptimer1ld;          /* 0x088 */
+       uint32_t                hw_usbctrl_gptimer1ctrl;        /* 0x08c */
+       uint32_t                hw_usbctrl_sbuscfg;             /* 0x090 */
+
+       uint32_t                reserved2[27];
+
+       uint32_t                hw_usbctrl_caplength;           /* 0x100 */
+       uint32_t                hw_usbctrl_hcsparams;           /* 0x104 */
+       uint32_t                hw_usbctrl_hccparams;           /* 0x108 */
+
+       uint32_t                reserved3[5];
+
+       uint32_t                hw_usbctrl_dciversion;          /* 0x120 */
+       uint32_t                hw_usbctrl_dccparams;           /* 0x124 */
+
+       uint32_t                reserved4[6];
+
+       uint32_t                hw_usbctrl_usbcmd;              /* 0x140 */
+       uint32_t                hw_usbctrl_usbsts;              /* 0x144 */
+       uint32_t                hw_usbctrl_usbintr;             /* 0x148 */
+       uint32_t                hw_usbctrl_frindex;             /* 0x14c */
+
+       uint32_t                reserved5;
+
+       union {
+               uint32_t        hw_usbctrl_periodiclistbase;    /* 0x154 */
+               uint32_t        hw_usbctrl_deviceaddr;          /* 0x154 */
+       };
+       union {
+               uint32_t        hw_usbctrl_asynclistaddr;       /* 0x158 */
+               uint32_t        hw_usbctrl_endpointlistaddr;    /* 0x158 */
+       };
+
+       uint32_t                hw_usbctrl_ttctrl;              /* 0x15c */
+       uint32_t                hw_usbctrl_burstsize;           /* 0x160 */
+       uint32_t                hw_usbctrl_txfilltuning;        /* 0x164 */
+
+       uint32_t                reserved6;
+
+       uint32_t                hw_usbctrl_ic_usb;              /* 0x16c */
+       uint32_t                hw_usbctrl_ulpi;                /* 0x170 */
+
+       uint32_t                reserved7;
+
+       uint32_t                hw_usbctrl_endptnak;            /* 0x178 */
+       uint32_t                hw_usbctrl_endptnaken;          /* 0x17c */
+
+       uint32_t                reserved8;
+
+       uint32_t                hw_usbctrl_portsc1;             /* 0x184 */
+
+       uint32_t                reserved9[7];
+
+       uint32_t                hw_usbctrl_otgsc;               /* 0x1a4 */
+       uint32_t                hw_usbctrl_usbmode;             /* 0x1a8 */
+       uint32_t                hw_usbctrl_endptsetupstat;      /* 0x1ac */
+       uint32_t                hw_usbctrl_endptprime;          /* 0x1b0 */
+       uint32_t                hw_usbctrl_endptflush;          /* 0x1b4 */
+       uint32_t                hw_usbctrl_endptstat;           /* 0x1b8 */
+       uint32_t                hw_usbctrl_endptcomplete;       /* 0x1bc */
+       uint32_t                hw_usbctrl_endptctrl0;          /* 0x1c0 */
+       uint32_t                hw_usbctrl_endptctrl1;          /* 0x1c4 */
+       uint32_t                hw_usbctrl_endptctrl2;          /* 0x1c8 */
+       uint32_t                hw_usbctrl_endptctrl3;          /* 0x1cc */
+       uint32_t                hw_usbctrl_endptctrl4;          /* 0x1d0 */
+       uint32_t                hw_usbctrl_endptctrl5;          /* 0x1d4 */
+       uint32_t                hw_usbctrl_endptctrl6;          /* 0x1d8 */
+       uint32_t                hw_usbctrl_endptctrl7;          /* 0x1dc */
+};
+
+#define        CLKCTRL_PLL0CTRL0_LFR_SEL_MASK          (0x3 << 28)
+
+#define        HW_USBCTRL_ID_CIVERSION_OFFSET          29
+#define        HW_USBCTRL_ID_CIVERSION_MASK            (0x7 << 29)
+#define        HW_USBCTRL_ID_VERSION_OFFSET            25
+#define        HW_USBCTRL_ID_VERSION_MASK              (0xf << 25)
+#define        HW_USBCTRL_ID_REVISION_OFFSET           21
+#define        HW_USBCTRL_ID_REVISION_MASK             (0xf << 21)
+#define        HW_USBCTRL_ID_TAG_OFFSET                16
+#define        HW_USBCTRL_ID_TAG_MASK                  (0x1f << 16)
+#define        HW_USBCTRL_ID_NID_OFFSET                8
+#define        HW_USBCTRL_ID_NID_MASK                  (0x3f << 8)
+#define        HW_USBCTRL_ID_ID_OFFSET                 0
+#define        HW_USBCTRL_ID_ID_MASK                   (0x3f << 0)
+
+#define        HW_USBCTRL_HWGENERAL_SM_OFFSET          9
+#define        HW_USBCTRL_HWGENERAL_SM_MASK            (0x3 << 9)
+#define        HW_USBCTRL_HWGENERAL_PHYM_OFFSET        6
+#define        HW_USBCTRL_HWGENERAL_PHYM_MASK          (0x7 << 6)
+#define        HW_USBCTRL_HWGENERAL_PHYW_OFFSET        4
+#define        HW_USBCTRL_HWGENERAL_PHYW_MASK          (0x3 << 4)
+#define        HW_USBCTRL_HWGENERAL_BWT                (1 << 3)
+#define        HW_USBCTRL_HWGENERAL_CLKC_OFFSET        1
+#define        HW_USBCTRL_HWGENERAL_CLKC_MASK          (0x3 << 1)
+#define        HW_USBCTRL_HWGENERAL_RT                 (1 << 0)
+
+#define        HW_USBCTRL_HWHOST_TTPER_OFFSET          24
+#define        HW_USBCTRL_HWHOST_TTPER_MASK            (0xff << 24)
+#define        HW_USBCTRL_HWHOST_TTASY_OFFSET          16
+#define        HW_USBCTRL_HWHOST_TTASY_MASK            (0xff << 19)
+#define        HW_USBCTRL_HWHOST_NPORT_OFFSET          1
+#define        HW_USBCTRL_HWHOST_NPORT_MASK            (0x7 << 1)
+#define        HW_USBCTRL_HWHOST_HC                    (1 << 0)
+
+#define        HW_USBCTRL_HWDEVICE_DEVEP_OFFSET        1
+#define        HW_USBCTRL_HWDEVICE_DEVEP_MASK          (0x1f << 1)
+#define        HW_USBCTRL_HWDEVICE_DC                  (1 << 0)
+
+#define        HW_USBCTRL_HWTXBUF_TXLCR                (1 << 31)
+#define        HW_USBCTRL_HWTXBUF_TXCHANADD_OFFSET     16
+#define        HW_USBCTRL_HWTXBUF_TXCHANADD_MASK       (0xff << 16)
+#define        HW_USBCTRL_HWTXBUF_TXADD_OFFSET         8
+#define        HW_USBCTRL_HWTXBUF_TXADD_MASK           (0xff << 8)
+#define        HW_USBCTRL_HWTXBUF_TXBURST_OFFSET       0
+#define        HW_USBCTRL_HWTXBUF_TXBURST_MASK         0xff
+
+#define        HW_USBCTRL_HWRXBUF_RXADD_OFFSET         8
+#define        HW_USBCTRL_HWRXBUF_RXADD_MASK           (0xff << 8)
+#define        HW_USBCTRL_HWRXBUF_RXBURST_OFFSET       0
+#define        HW_USBCTRL_HWRXBUF_RXBURST_MASK         0xff
+
+#define        HW_USBCTRL_GPTIMERLD_GPTLD_OFFSET       0
+#define        HW_USBCTRL_GPTIMERLD_GPTLD_MASK         0xffffff
+
+#define        HW_USBCTRL_GPTIMERCTRL_GPTRUN           (1 << 31)
+#define        HW_USBCTRL_GPTIMERCTRL_GPTRST           (1 << 30)
+#define        HW_USBCTRL_GPTIMERCTRL_GPTMODE          (1 << 24)
+#define        HW_USBCTRL_GPTIMERCTRL_GPTCNT_OFFSET    0
+#define        HW_USBCTRL_GPTIMERCTRL_GPTCNT_MASK      0xffffff
+
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_OFFSET      0
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_MASK        0x7
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_U_INCR      0x0
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_S_INCR4     0x1
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_S_INCR8     0x2
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_S_INCR16    0x3
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_U_INCR4     0x5
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_U_INCR8     0x6
+#define        HW_USBCTRL_SBUSCFG_AHBBURST_U_INCR16    0x7
+
+#endif /* __REGS_USB_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-usbphy.h b/arch/arm/include/asm/arch-mx28/regs-usbphy.h
new file mode 100644 (file)
index 0000000..e823e19
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Freescale i.MX28 USB PHY Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __REGS_USBPHY_H__
+#define __REGS_USBPHY_H__
+
+struct mx28_usbphy_regs {
+       mx28_reg(hw_usbphy_pwd)
+       mx28_reg(hw_usbphy_tx)
+       mx28_reg(hw_usbphy_rx)
+       mx28_reg(hw_usbphy_ctrl)
+       mx28_reg(hw_usbphy_status)
+       mx28_reg(hw_usbphy_debug)
+       mx28_reg(hw_usbphy_debug0_status)
+       mx28_reg(hw_usbphy_debug1)
+       mx28_reg(hw_usbphy_version)
+       mx28_reg(hw_usbphy_ip)
+};
+
+#define        USBPHY_PWD_RXPWDRX                              (1 << 20)
+#define        USBPHY_PWD_RXPWDDIFF                            (1 << 19)
+#define        USBPHY_PWD_RXPWD1PT1                            (1 << 18)
+#define        USBPHY_PWD_RXPWDENV                             (1 << 17)
+#define        USBPHY_PWD_TXPWDV2I                             (1 << 12)
+#define        USBPHY_PWD_TXPWDIBIAS                           (1 << 11)
+#define        USBPHY_PWD_TXPWDFS                              (1 << 10)
+
+#define        USBPHY_TX_USBPHY_TX_EDGECTRL_OFFSET             26
+#define        USBPHY_TX_USBPHY_TX_EDGECTRL_MASK               (0x7 << 26)
+#define        USBPHY_TX_USBPHY_TX_SYNC_INVERT                 (1 << 25)
+#define        USBPHY_TX_USBPHY_TX_SYNC_MUX                    (1 << 24)
+#define        USBPHY_TX_TXENCAL45DP                           (1 << 21)
+#define        USBPHY_TX_TXCAL45DP_OFFSET                      16
+#define        USBPHY_TX_TXCAL45DP_MASK                        (0xf << 16)
+#define        USBPHY_TX_TXENCAL45DM                           (1 << 13)
+#define        USBPHY_TX_TXCAL45DM_OFFSET                      8
+#define        USBPHY_TX_TXCAL45DM_MASK                        (0xf << 8)
+#define        USBPHY_TX_D_CAL_OFFSET                          0
+#define        USBPHY_TX_D_CAL_MASK                            0xf
+
+#define        USBPHY_RX_RXDBYPASS                             (1 << 22)
+#define        USBPHY_RX_DISCONADJ_OFFSET                      4
+#define        USBPHY_RX_DISCONADJ_MASK                        (0x7 << 4)
+#define        USBPHY_RX_ENVADJ_OFFSET                         0
+#define        USBPHY_RX_ENVADJ_MASK                           0x7
+
+#define        USBPHY_CTRL_SFTRST                              (1 << 31)
+#define        USBPHY_CTRL_CLKGATE                             (1 << 30)
+#define        USBPHY_CTRL_UTMI_SUSPENDM                       (1 << 29)
+#define        USBPHY_CTRL_HOST_FORCE_LS_SE0                   (1 << 28)
+#define        USBPHY_CTRL_ENAUTOSET_USBCLKS                   (1 << 26)
+#define        USBPHY_CTRL_ENAUTOCLR_USBCLKGATE                (1 << 25)
+#define        USBPHY_CTRL_FSDLL_RST_EN                        (1 << 24)
+#define        USBPHY_CTRL_ENVBUSCHG_WKUP                      (1 << 23)
+#define        USBPHY_CTRL_ENIDCHG_WKUP                        (1 << 22)
+#define        USBPHY_CTRL_ENDPDMCHG_WKUP                      (1 << 21)
+#define        USBPHY_CTRL_ENAUTOCLR_PHY_PWD                   (1 << 20)
+#define        USBPHY_CTRL_ENAUTOCLR_CLKGATE                   (1 << 19)
+#define        USBPHY_CTRL_ENAUTO_PWRON_PLL                    (1 << 18)
+#define        USBPHY_CTRL_WAKEUP_IRQ                          (1 << 17)
+#define        USBPHY_CTRL_ENIRQWAKEUP                         (1 << 16)
+#define        USBPHY_CTRL_ENUTMILEVEL3                        (1 << 15)
+#define        USBPHY_CTRL_ENUTMILEVEL2                        (1 << 14)
+#define        USBPHY_CTRL_DATA_ON_LRADC                       (1 << 13)
+#define        USBPHY_CTRL_DEVPLUGIN_IRQ                       (1 << 12)
+#define        USBPHY_CTRL_ENIRQDEVPLUGIN                      (1 << 11)
+#define        USBPHY_CTRL_RESUME_IRQ                          (1 << 10)
+#define        USBPHY_CTRL_ENIRQRESUMEDETECT                   (1 << 9)
+#define        USBPHY_CTRL_RESUMEIRQSTICKY                     (1 << 8)
+#define        USBPHY_CTRL_ENOTGIDDETECT                       (1 << 7)
+#define        USBPHY_CTRL_DEVPLUGIN_POLARITY                  (1 << 5)
+#define        USBPHY_CTRL_ENDEVPLUGINDETECT                   (1 << 4)
+#define        USBPHY_CTRL_HOSTDISCONDETECT_IRQ                (1 << 3)
+#define        USBPHY_CTRL_ENIRQHOSTDISCON                     (1 << 2)
+#define        USBPHY_CTRL_ENHOSTDISCONDETECT                  (1 << 1)
+
+#define        USBPHY_STATUS_RESUME_STATUS                     (1 << 10)
+#define        USBPHY_STATUS_OTGID_STATUS                      (1 << 8)
+#define        USBPHY_STATUS_DEVPLUGIN_STATUS                  (1 << 6)
+#define        USBPHY_STATUS_HOSTDISCONDETECT_STATUS           (1 << 3)
+
+#define        USBPHY_DEBUG_CLKGATE                            (1 << 30)
+#define        USBPHY_DEBUG_HOST_RESUME_DEBUG                  (1 << 29)
+#define        USBPHY_DEBUG_SQUELCHRESETLENGTH_OFFSET          25
+#define        USBPHY_DEBUG_SQUELCHRESETLENGTH_MASK            (0xf << 25)
+#define        USBPHY_DEBUG_ENSQUELCHRESET                     (1 << 24)
+#define        USBPHY_DEBUG_SQUELCHRESETCOUNT_OFFSET           16
+#define        USBPHY_DEBUG_SQUELCHRESETCOUNT_MASK             (0x1f << 16)
+#define        USBPHY_DEBUG_ENTX2RXCOUNT                       (1 << 12)
+#define        USBPHY_DEBUG_TX2RXCOUNT_OFFSET                  8
+#define        USBPHY_DEBUG_TX2RXCOUNT_MASK                    (0xf << 8)
+#define        USBPHY_DEBUG_ENHSTPULLDOWN_OFFSET               4
+#define        USBPHY_DEBUG_ENHSTPULLDOWN_MASK                 (0x3 << 4)
+#define        USBPHY_DEBUG_HSTPULLDOWN_OFFSET                 2
+#define        USBPHY_DEBUG_HSTPULLDOWN_MASK                   (0x3 << 2)
+#define        USBPHY_DEBUG_DEBUG_INTERFACE_HOLD               (1 << 1)
+#define        USBPHY_DEBUG_OTGIDPIDLOCK                       (1 << 0)
+
+#define        USBPHY_DEBUG0_STATUS_SQUELCH_COUNT_OFFSET       26
+#define        USBPHY_DEBUG0_STATUS_SQUELCH_COUNT_MASK         (0x3f << 26)
+#define        USBPHY_DEBUG0_STATUS_UTMI_RXERROR_OFFSET        16
+#define        USBPHY_DEBUG0_STATUS_UTMI_RXERROR_MASK          (0x3ff << 16)
+#define        USBPHY_DEBUG0_STATUS_LOOP_BACK_OFFSET           0
+#define        USBPHY_DEBUG0_STATUS_LOOP_BACK_MASK             0xffff
+
+#define        USBPHY_DEBUG1_ENTAILADJVD_OFFSET                13
+#define        USBPHY_DEBUG1_ENTAILADJVD_MASK                  (0x3 << 13)
+#define        USBPHY_DEBUG1_ENTX2TX                           (1 << 12)
+#define        USBPHY_DEBUG1_DBG_ADDRESS_OFFSET                0
+#define        USBPHY_DEBUG1_DBG_ADDRESS_MASK                  0xf
+
+#define        USBPHY_VERSION_MAJOR_MASK                       (0xff << 24)
+#define        USBPHY_VERSION_MAJOR_OFFSET                     24
+#define        USBPHY_VERSION_MINOR_MASK                       (0xff << 16)
+#define        USBPHY_VERSION_MINOR_OFFSET                     16
+#define        USBPHY_VERSION_STEP_MASK                        0xffff
+#define        USBPHY_VERSION_STEP_OFFSET                      0
+
+#define        USBPHY_IP_DIV_SEL_OFFSET                        23
+#define        USBPHY_IP_DIV_SEL_MASK                          (0x3 << 23)
+#define        USBPHY_IP_LFR_SEL_OFFSET                        21
+#define        USBPHY_IP_LFR_SEL_MASK                          (0x3 << 21)
+#define        USBPHY_IP_CP_SEL_OFFSET                         19
+#define        USBPHY_IP_CP_SEL_MASK                           (0x3 << 19)
+#define        USBPHY_IP_TSTI_TX_DP                            (1 << 18)
+#define        USBPHY_IP_TSTI_TX_DM                            (1 << 17)
+#define        USBPHY_IP_ANALOG_TESTMODE                       (1 << 16)
+#define        USBPHY_IP_EN_USB_CLKS                           (1 << 2)
+#define        USBPHY_IP_PLL_LOCKED                            (1 << 1)
+#define        USBPHY_IP_PLL_POWER                             (1 << 0)
+
+#endif /* __REGS_USBPHY_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/sys_proto.h b/arch/arm/include/asm/arch-mx28/sys_proto.h
new file mode 100644 (file)
index 0000000..a226ea4
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Freescale i.MX28 MX28 specific functions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __MX28_H__
+#define __MX28_H__
+
+int mx28_reset_block(struct mx28_register *reg);
+int mx28_wait_mask_set(struct mx28_register *reg, uint32_t mask, int timeout);
+int mx28_wait_mask_clr(struct mx28_register *reg, uint32_t mask, int timeout);
+
+int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int));
+
+#endif /* __MX28_H__ */
index afdaa1ce6c46ccfbc37a766a2473a3d6d1d69243..6a517ddd931ca0d1e598bd7456c4c611741602eb 100644 (file)
@@ -98,6 +98,12 @@ struct iim_regs {
        u32 iim_scs3;
 };
 
+struct iomuxc_regs {
+       u32 unused1;
+       u32 unused2;
+       u32 gpr;
+};
+
 struct mx3_cpu_type {
        u8 srev;
        u32 v;
@@ -594,6 +600,12 @@ struct esdc_regs {
 #define WEIM_ESDCFG1   0xB800100C
 #define WEIM_ESDMISC   0xB8001010
 
+#define UART1_BASE     0x43F90000
+#define UART2_BASE     0x43F94000
+#define UART3_BASE     0x5000C000
+#define UART4_BASE     0x43FB0000
+#define UART5_BASE     0x43FB4000
+
 #define ESDCTL_SDE                     (1 << 31)
 #define ESDCTL_CMD_RW                  (0 << 28)
 #define ESDCTL_CMD_PRECHARGE           (1 << 28)
@@ -636,7 +648,6 @@ struct esdc_regs {
 #define WEIM_BASE      0xb8002000
 
 #define IOMUXC_BASE    0x43FAC000
-#define IOMUXC_GPR     (IOMUXC_BASE + 0x8)
 #define IOMUXC_SW_MUX_CTL(x)   (IOMUXC_BASE + 0xc + (x) * 4)
 #define IOMUXC_SW_PAD_CTL(x)   (IOMUXC_BASE + 0x154 + (x) * 4)
 
index 25c324eb36f06c5b0b22adc982642d30cca280f6..df74508a93ee87ae986f7c2f48f6c5fb36626070 100644 (file)
@@ -42,8 +42,8 @@
 #define I2C_BASE_ADDR           0x43F80000
 #define I2C3_BASE_ADDR          0x43F84000
 #define ATA_BASE_ADDR           0x43F8C000
-#define UART1_BASE_ADDR         0x43F90000
-#define UART2_BASE_ADDR         0x43F94000
+#define UART1_BASE             0x43F90000
+#define UART2_BASE             0x43F94000
 #define I2C2_BASE_ADDR          0x43F98000
 #define CSPI1_BASE_ADDR         0x43FA4000
 #define IOMUXC_BASE_ADDR        0x43FAC000
@@ -52,7 +52,7 @@
  * SPBA
  */
 #define SPBA_BASE_ADDR          0x50000000
-#define UART3_BASE_ADDR         0x5000C000
+#define UART3_BASE             0x5000C000
 #define CSPI2_BASE_ADDR         0x50010000
 #define ATA_DMA_BASE_ADDR       0x50020000
 #define FEC_BASE_ADDR           0x50038000
index d069209b587e9213961dfae6c521f787ef07d478..0ee88d25b7800ae9e6aed809d02dd19d9cac9c82 100644 (file)
@@ -54,7 +54,7 @@
  */
 #define MMC_SDHC1_BASE_ADDR    (SPBA0_BASE_ADDR + 0x00004000)
 #define MMC_SDHC2_BASE_ADDR    (SPBA0_BASE_ADDR + 0x00008000)
-#define UART3_BASE_ADDR        (SPBA0_BASE_ADDR + 0x0000C000)
+#define UART3_BASE             (SPBA0_BASE_ADDR + 0x0000C000)
 #define CSPI1_BASE_ADDR        (SPBA0_BASE_ADDR + 0x00010000)
 #define SSI2_BASE_ADDR         (SPBA0_BASE_ADDR + 0x00014000)
 #define MMC_SDHC3_BASE_ADDR    (SPBA0_BASE_ADDR + 0x00020000)
@@ -83,8 +83,8 @@
 #define EPIT2_BASE_ADDR                (AIPS1_BASE_ADDR + 0x000B0000)
 #define PWM1_BASE_ADDR         (AIPS1_BASE_ADDR + 0x000B4000)
 #define PWM2_BASE_ADDR         (AIPS1_BASE_ADDR + 0x000B8000)
-#define UART1_BASE_ADDR                (AIPS1_BASE_ADDR + 0x000BC000)
-#define UART2_BASE_ADDR                (AIPS1_BASE_ADDR + 0x000C0000)
+#define UART1_BASE             (AIPS1_BASE_ADDR + 0x000BC000)
+#define UART2_BASE             (AIPS1_BASE_ADDR + 0x000C0000)
 #define SRC_BASE_ADDR          (AIPS1_BASE_ADDR + 0x000D0000)
 #define CCM_BASE_ADDR          (AIPS1_BASE_ADDR + 0x000D4000)
 #define GPC_BASE_ADDR          (AIPS1_BASE_ADDR + 0x000D8000)
index 81942a80630124aca46dfd287879a0a5a582bcb2..bbaf1bc97b5b779afaf9ba75a2cf0fc387807c99 100644 (file)
@@ -32,6 +32,9 @@
 #ifndef __KERNEL_STRICT_NAMES
 #ifndef __ASSEMBLY__
 
+/* IP_SW_RESET bits */
+#define CPGMACSS_SW_RST                (1 << 1)        /* reset CPGMAC */
+
 /* General register mappings of system control module */
 #define AM35X_SCM_GEN_BASE     0x48002270
 struct am35x_scm_general {
diff --git a/arch/arm/include/asm/arch-omap3/emac_defs.h b/arch/arm/include/asm/arch-omap3/emac_defs.h
new file mode 100644 (file)
index 0000000..8506c55
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+ *
+ * Based on:
+ *
+ * ----------------------------------------------------------------------------
+ *
+ * dm644x_emac.h
+ *
+ * TI DaVinci (DM644X) EMAC peripheral driver header for DV-EVM
+ *
+ * Copyright (C) 2005 Texas Instruments.
+ *
+ * ----------------------------------------------------------------------------
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * ----------------------------------------------------------------------------
+
+ * Modifications:
+ * ver. 1.0: Sep 2005, TI PSP Team - Created EMAC version for uBoot.
+ *
+ */
+
+#ifndef _AM3517_EMAC_H_
+#define _AM3517_EMAC_H_
+
+#define EMAC_BASE_ADDR                 0x5C010000
+#define EMAC_WRAPPER_BASE_ADDR         0x5C000000
+#define EMAC_WRAPPER_RAM_ADDR          0x5C020000
+#define EMAC_MDIO_BASE_ADDR            0x5C030000
+#define EMAC_HW_RAM_ADDR               0x01E20000
+
+#define EMAC_MDIO_BUS_FREQ             166000000       /* 166 MHZ check */
+#define EMAC_MDIO_CLOCK_FREQ           1000000         /* 2.0 MHz */
+
+/* SOFTRESET macro definition interferes with emac_regs structure definition */
+#undef SOFTRESET
+
+typedef volatile unsigned int  dv_reg;
+typedef volatile unsigned int  *dv_reg_p;
+
+#define DAVINCI_EMAC_VERSION2
+
+#endif  /* _AM3517_EMAC_H_ */
index db6a696f49c2b51f2d740978281f3dce093a106a..5fd02d4dfc7d402519d2ad90676305c6c7a25cac 100644 (file)
@@ -39,10 +39,26 @@ enum {
 
 #define EARLY_INIT     1
 
+/*
+ * For a full explanation of these registers and values please see
+ * the Technical Reference Manual (TRM) for any of the processors in
+ * this family.
+ */
+
 /* Slower full frequency range default timings for x32 operation*/
 #define SDRC_SHARING   0x00000100
 #define SDRC_MR_0_SDR  0x00000031
 
+/*
+ * SDRC autorefresh control values.  This register consists of autorefresh
+ * enable at bits 0:1 and an autorefresh counter value in bits 8:23.  The
+ * counter is a result of ( tREFI / tCK ) - 50.
+ */
+#define SDP_3430_SDRC_RFR_CTRL_100MHz  0x0002da01
+#define SDP_3430_SDRC_RFR_CTRL_133MHz  0x0003de01 /* 7.8us/7.5ns - 50=0x3de */
+#define SDP_3430_SDRC_RFR_CTRL_165MHz  0x0004e201 /* 7.8us/6ns - 50=0x4e2 */
+#define SDP_3430_SDRC_RFR_CTRL_200MHz  0x0005e601 /* 7.8us/5ns - 50=0x5e6 */
+
 #define DLL_OFFSET             0
 #define DLL_WRITEDDRCLKX2DIS   1
 #define DLL_ENADLL             1
@@ -86,6 +102,53 @@ enum {
                ACTIM_CTRLB_TXP(b)      |       \
                ACTIM_CTRLB_TXSR(d)
 
+/*
+ * Values used in the MCFG register.  Only values we use today
+ * are defined and the rest can be found in the TRM.  Unless otherwise
+ * noted all fields are one bit.
+ */
+#define V_MCFG_RAMTYPE_DDR             (0x1)
+#define V_MCFG_DEEPPD_EN               (0x1 << 3)
+#define V_MCFG_B32NOT16_32             (0x1 << 4)
+#define V_MCFG_BANKALLOCATION_RBC      (0x2 << 6)      /* 6:7 */
+#define V_MCFG_RAMSIZE(a)              ((((a)/(1024*1024))/2) << 8) /* 8:17 */
+#define V_MCFG_ADDRMUXLEGACY_FLEX      (0x1 << 19)
+#define V_MCFG_CASWIDTH_10B            (0x5 << 20)     /* 20:22 */
+#define V_MCFG_RASWIDTH(a)             ((a) << 24)     /* 24:26 */
+
+/* Macro to construct MCFG */
+#define MCFG(a, b)                                             \
+               V_MCFG_RASWIDTH(b) | V_MCFG_CASWIDTH_10B |      \
+               V_MCFG_ADDRMUXLEGACY_FLEX | V_MCFG_RAMSIZE(a) | \
+               V_MCFG_BANKALLOCATION_RBC |                     \
+               V_MCFG_B32NOT16_32 | V_MCFG_DEEPPD_EN | V_MCFG_RAMTYPE_DDR
+
+/* Hynix part of AM/DM37xEVM (200MHz optimized) */
+#define HYNIX_TDAL_200         6
+#define HYNIX_TDPL_200         3
+#define HYNIX_TRRD_200         2
+#define HYNIX_TRCD_200         4
+#define HYNIX_TRP_200          3
+#define HYNIX_TRAS_200         8
+#define HYNIX_TRC_200          11
+#define HYNIX_TRFC_200         18
+#define HYNIX_V_ACTIMA_200     \
+               ACTIM_CTRLA(HYNIX_TRFC_200, HYNIX_TRC_200,      \
+                               HYNIX_TRAS_200, HYNIX_TRP_200,  \
+                               HYNIX_TRCD_200, HYNIX_TRRD_200, \
+                               HYNIX_TDPL_200, HYNIX_TDAL_200)
+
+#define HYNIX_TWTR_200         2
+#define HYNIX_TCKE_200         1
+#define HYNIX_TXP_200          1
+#define HYNIX_XSR_200          28
+#define HYNIX_V_ACTIMB_200     \
+               ACTIM_CTRLB(HYNIX_TWTR_200, HYNIX_TCKE_200,     \
+                               HYNIX_TXP_200, HYNIX_XSR_200)
+
+#define HYNIX_RASWIDTH_200     0x3
+#define HYNIX_V_MCFG_200(size) MCFG((size), HYNIX_RASWIDTH_200)
+
 /* Infineon part of 3430SDP (165MHz optimized) 6.06ns */
 #define INFINEON_TDAL_165      6       /* Twr/Tck + Trp/tck            */
                                        /* 15/6 + 18/6 = 5.5 -> 6       */
@@ -138,32 +201,42 @@ enum {
                ACTIM_CTRLB(MICRON_TWTR_165, MICRON_TCKE_165,   \
                                MICRON_TXP_165, MICRON_XSR_165)
 
-#define MICRON_RAMTYPE                 0x1
-#define MICRON_DDRTYPE                 0x0
-#define MICRON_DEEPPD                  0x1
-#define MICRON_B32NOT16                        0x1
-#define MICRON_BANKALLOCATION  0x2
-#define MICRON_RAMSIZE                 ((PHYS_SDRAM_1_SIZE/(1024*1024))/2)
-#define MICRON_ADDRMUXLEGACY   0x1
-#define MICRON_CASWIDTH                        0x5
-#define MICRON_RASWIDTH                        0x2
-#define MICRON_LOCKSTATUS              0x0
-#define MICRON_V_MCFG ((MICRON_LOCKSTATUS << 30) | (MICRON_RASWIDTH << 24) | \
-       (MICRON_CASWIDTH << 20) | (MICRON_ADDRMUXLEGACY << 19) | \
-       (MICRON_RAMSIZE << 8) | (MICRON_BANKALLOCATION << 6) | \
-       (MICRON_B32NOT16 << 4) | (MICRON_DEEPPD << 3) | \
-       (MICRON_DDRTYPE << 2) | (MICRON_RAMTYPE))
-
-#define MICRON_ARCV                            2030
-#define MICRON_ARE                             0x1
-#define MICRON_V_RFR_CTRL ((MICRON_ARCV << 8) | (MICRON_ARE))
-
-#define MICRON_BL                              0x2
-#define MICRON_SIL                             0x0
-#define MICRON_CASL                            0x3
-#define MICRON_WBST                            0x0
-#define MICRON_V_MR ((MICRON_WBST << 9) | (MICRON_CASL << 4) | \
-       (MICRON_SIL << 3) | (MICRON_BL))
+#define MICRON_RASWIDTH_165    0x2
+#define MICRON_V_MCFG_165(size)        MCFG((size), MICRON_RASWIDTH_165)
+
+#define MICRON_BL_165                  0x2
+#define MICRON_SIL_165                 0x0
+#define MICRON_CASL_165                        0x3
+#define MICRON_WBST_165                        0x0
+#define MICRON_V_MR_165                        ((MICRON_WBST_165 << 9) | \
+               (MICRON_CASL_165 << 4) | (MICRON_SIL_165 << 3) | \
+               (MICRON_BL_165))
+
+/* Micron part (200MHz optimized) 5 ns */
+#define MICRON_TDAL_200                6
+#define MICRON_TDPL_200                3
+#define MICRON_TRRD_200                2
+#define MICRON_TRCD_200                3
+#define MICRON_TRP_200         3
+#define MICRON_TRAS_200                8
+#define MICRON_TRC_200         11
+#define MICRON_TRFC_200                15
+#define MICRON_V_ACTIMA_200    \
+               ACTIM_CTRLA(MICRON_TRFC_200, MICRON_TRC_200,            \
+                               MICRON_TRAS_200, MICRON_TRP_200,        \
+                               MICRON_TRCD_200, MICRON_TRRD_200,       \
+                               MICRON_TDPL_200, MICRON_TDAL_200)
+
+#define MICRON_TWTR_200                2
+#define MICRON_TCKE_200                4
+#define MICRON_TXP_200         2
+#define MICRON_XSR_200         23
+#define MICRON_V_ACTIMB_200    \
+               ACTIM_CTRLB(MICRON_TWTR_200, MICRON_TCKE_200,   \
+                               MICRON_TXP_200, MICRON_XSR_200)
+
+#define MICRON_RASWIDTH_200    0x3
+#define MICRON_V_MCFG_200(size)        MCFG((size), MICRON_RASWIDTH_200)
 
 /* NUMONYX part of IGEP v2 (165MHz optimized) 6.06ns */
 #define NUMONYX_TDAL_165       6       /* Twr/Tck + Trp/tck            */
@@ -191,31 +264,8 @@ enum {
                ACTIM_CTRLB(NUMONYX_TWTR_165, NUMONYX_TCKE_165, \
                                NUMONYX_TXP_165, NUMONYX_XSR_165)
 
-#ifdef CONFIG_OMAP3_INFINEON_DDR
-#define V_ACTIMA_165           INFINEON_V_ACTIMA_165
-#define V_ACTIMB_165           INFINEON_V_ACTIMB_165
-#endif
-
-#ifdef CONFIG_OMAP3_MICRON_DDR
-#define V_ACTIMA_165           MICRON_V_ACTIMA_165
-#define V_ACTIMB_165           MICRON_V_ACTIMB_165
-#define V_MCFG                 MICRON_V_MCFG
-#define V_RFR_CTRL             MICRON_V_RFR_CTRL
-#define V_MR                   MICRON_V_MR
-#endif
-
-#ifdef CONFIG_OMAP3_NUMONYX_DDR
-#define V_ACTIMA_165           NUMONYX_V_ACTIMA_165
-#define V_ACTIMB_165           NUMONYX_V_ACTIMB_165
-#endif
-
-#if !defined(V_ACTIMA_165) || !defined(V_ACTIMB_165)
-#error "Please choose the right DDR type in config header"
-#endif
-
-#if defined(CONFIG_SPL_BUILD) && (!defined(V_MCFG) || !defined(V_RFR_CTRL))
-#error "Please choose the right DDR type in config header"
-#endif
+#define NUMONYX_RASWIDTH_165           0x4
+#define NUMONYX_V_MCFG_165(size)       MCFG((size), NUMONYX_RASWIDTH_165)
 
 /*
  * GPMC settings -
@@ -259,6 +309,10 @@ enum {
 #define GPMC_SIZE_32M  0xE
 #define GPMC_SIZE_16M  0xF
 
+#define GPMC_BASEADDR_MASK     0x3F
+
+#define GPMC_CS_ENABLE         0x1
+
 #define SMNAND_GPMC_CONFIG1    0x00000800
 #define SMNAND_GPMC_CONFIG2    0x00141400
 #define SMNAND_GPMC_CONFIG3    0x00141400
index ba1c2ffc06b190e92c81ffc7b8f6dc25b60c7e07..296367948f488584d7673f544d8c723082cc244e 100644 (file)
@@ -55,7 +55,7 @@ typedef struct t2 {
 #define OMAP_HSMMC2_BASE       0x480B4000
 #define OMAP_HSMMC3_BASE       0x480AD000
 
-typedef struct hsmmc {
+struct hsmmc {
        unsigned char res1[0x10];
        unsigned int sysconfig;         /* 0x10 */
        unsigned int sysstatus;         /* 0x14 */
@@ -77,7 +77,7 @@ typedef struct hsmmc {
        unsigned int ie;                /* 0x134 */
        unsigned char res4[0x8];
        unsigned int capa;              /* 0x140 */
-} hsmmc_t;
+};
 
 /*
  * OMAP HS MMC Bit definitions
@@ -182,13 +182,6 @@ typedef struct hsmmc {
 #define CLK_400KHZ                     1
 #define CLK_MISC                       2
 
-typedef struct {
-       unsigned int card_type;
-       unsigned int version;
-       unsigned int mode;
-       unsigned int size;
-       unsigned int RCA;
-} mmc_card_data;
 #define RSP_TYPE_NONE  (RSP_TYPE_NORSP   | CCCE_NOCHECK | CICE_NOCHECK)
 #define MMC_CMD0       (INDEX(0)  | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE)
 
index 0c01c731658d8b070bbb44c22fb73fd48b13e42d..6daef49e97fff9de1d06685bc8206be193a035d3 100644 (file)
 #define CONTROL_PADCONF_SDRC_CKE0      0x0262
 #define CONTROL_PADCONF_SDRC_CKE1      0x0264
 
+/* AM3517 specific mux configuration */
+#define CONTROL_PADCONF_SYS_NRESWARM   0x0A08
+/* CCDC */
+#define CONTROL_PADCONF_CCDC_PCLK      0x01E4
+#define CONTROL_PADCONF_CCDC_FIELD     0x01E6
+#define CONTROL_PADCONF_CCDC_HD                0x01E8
+#define CONTROL_PADCONF_CCDC_VD                0x01EA
+#define CONTROL_PADCONF_CCDC_WEN       0x01EC
+#define CONTROL_PADCONF_CCDC_DATA0     0x01EE
+#define CONTROL_PADCONF_CCDC_DATA1     0x01F0
+#define CONTROL_PADCONF_CCDC_DATA2     0x01F2
+#define CONTROL_PADCONF_CCDC_DATA3     0x01F4
+#define CONTROL_PADCONF_CCDC_DATA4     0x01F6
+#define CONTROL_PADCONF_CCDC_DATA5     0x01F8
+#define CONTROL_PADCONF_CCDC_DATA6     0x01FA
+#define CONTROL_PADCONF_CCDC_DATA7     0x01FC
+/* RMII */
+#define CONTROL_PADCONF_RMII_MDIO_DATA 0x01FE
+#define CONTROL_PADCONF_RMII_MDIO_CLK  0x0200
+#define CONTROL_PADCONF_RMII_RXD0      0x0202
+#define CONTROL_PADCONF_RMII_RXD1      0x0204
+#define CONTROL_PADCONF_RMII_CRS_DV    0x0206
+#define CONTROL_PADCONF_RMII_RXER      0x0208
+#define CONTROL_PADCONF_RMII_TXD0      0x020A
+#define CONTROL_PADCONF_RMII_TXD1      0x020C
+#define CONTROL_PADCONF_RMII_TXEN      0x020E
+#define CONTROL_PADCONF_RMII_50MHZ_CLK 0x0210
+#define CONTROL_PADCONF_USB0_DRVBUS    0x0212
+/* CAN */
+#define CONTROL_PADCONF_HECC1_TXD      0x0214
+#define CONTROL_PADCONF_HECC1_RXD      0x0216
+
+#define CONTROL_PADCONF_SYS_BOOT7      0x0218
+#define CONTROL_PADCONF_SDRC_DQS0N     0x021A
+#define CONTROL_PADCONF_SDRC_DQS1N     0x021C
+#define CONTROL_PADCONF_SDRC_DQS2N     0x021E
+#define CONTROL_PADCONF_SDRC_DQS3N     0x0220
+#define CONTROL_PADCONF_STRBEN_DLY0    0x0222
+#define CONTROL_PADCONF_STRBEN_DLY1    0x0224
+#define CONTROL_PADCONF_SYS_BOOT8      0x0226
+
 #define MUX_VAL(OFFSET,VALUE)\
        writew((VALUE), OMAP34XX_CTRL_BASE + (OFFSET));
 
index 02eb865dc15e4cbb07d1f42f20f6dc62b49ea5bf..2b5e9aeae12f3e6e723ee086f734b71ee1c2bbf6 100644 (file)
@@ -153,6 +153,7 @@ struct gpio {
 #define SRAM_OFFSET2                   0x0000F800
 #define SRAM_VECT_CODE                 (SRAM_OFFSET0 | SRAM_OFFSET1 | \
                                         SRAM_OFFSET2)
+#define SRAM_CLK_CODE                  (SRAM_VECT_CODE + 64)
 
 #define OMAP3_PUBLIC_SRAM_BASE         0x40208000 /* Works for GP & EMU */
 #define OMAP3_PUBLIC_SRAM_END          0x40210000
index 995e7cb57e6eb712084cc46cbc5e8c94d81f491f..e5031d5022ba3f07d919278c68166bf7e9f31ec1 100644 (file)
@@ -38,6 +38,9 @@ void per_clocks_enable(void);
 void memif_init(void);
 void sdrc_init(void);
 void do_sdrc_init(u32, u32);
+void get_board_mem_timings(u32 *mcfg, u32 *ctrla, u32 *ctrlb, u32 *rfr_ctrl,
+               u32 *mr);
+void identify_nand_chip(int *mfr, int *id);
 void emif4_init(void);
 void gpmc_init(void);
 void enable_gpmc_cs_config(const u32 *gpmc_config, struct gpmc_cs *cs, u32 base,
@@ -49,7 +52,6 @@ void set_muxconf_regs(void);
 u32 get_cpu_family(void);
 u32 get_cpu_rev(void);
 u32 get_sku_id(void);
-u32 get_mem_type(void);
 u32 get_sysboot_value(void);
 u32 is_gpmc_muxed(void);
 u32 get_gpmc0_type(void);
index 45c947d648fe676119abdc18a068158aa9eef6dd..c2a9b46cfdb393bf99910b8d43e62e90501d732d 100644 (file)
@@ -687,4 +687,27 @@ struct dpll_params {
        s8 m7;
 };
 
+extern struct omap4_prcm_regs *const prcm;
+extern const u32 sys_clk_array[8];
+
+void scale_vcores(void);
+void do_scale_tps62361(u32 reg, u32 volt_mv);
+u32 omap_ddr_clk(void);
+void do_scale_vcore(u32 vcore_reg, u32 volt_mv);
+void setup_sri2c(void);
+void setup_post_dividers(u32 *const base, const struct dpll_params *params);
+u32 get_sys_clk_index(void);
+void enable_basic_clocks(void);
+void enable_basic_uboot_clocks(void);
+void enable_non_essential_clocks(void);
+void do_enable_clocks(u32 *const *clk_domains,
+                     u32 *const *clk_modules_hw_auto,
+                     u32 *const *clk_modules_explicit_en,
+                     u8 wait_for_enable);
+const struct dpll_params *get_mpu_dpll_params(void);
+const struct dpll_params *get_core_dpll_params(void);
+const struct dpll_params *get_per_dpll_params(void);
+const struct dpll_params *get_iva_dpll_params(void);
+const struct dpll_params *get_usb_dpll_params(void);
+const struct dpll_params *get_abe_dpll_params(void);
 #endif /* _CLOCKS_OMAP4_H_ */
diff --git a/arch/arm/include/asm/arch-omap4/emif.h b/arch/arm/include/asm/arch-omap4/emif.h
deleted file mode 100644 (file)
index 3a549ba..0000000
+++ /dev/null
@@ -1,1021 +0,0 @@
-/*
- * OMAP44xx EMIF header
- *
- * Copyright (C) 2009-2010 Texas Instruments, Inc.
- *
- * Aneesh V <aneesh@ti.com>
- *
- * 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.
- */
-
-#ifndef _EMIF_H_
-#define _EMIF_H_
-#include <asm/types.h>
-#include <common.h>
-
-/* Base address */
-#define OMAP44XX_EMIF1                         0x4c000000
-#define OMAP44XX_EMIF2                         0x4d000000
-
-/* Registers shifts and masks */
-
-/* EMIF_MOD_ID_REV */
-#define OMAP44XX_REG_SCHEME_SHIFT                      30
-#define OMAP44XX_REG_SCHEME_MASK                       (0x3 << 30)
-#define OMAP44XX_REG_MODULE_ID_SHIFT                   16
-#define OMAP44XX_REG_MODULE_ID_MASK                    (0xfff << 16)
-#define OMAP44XX_REG_RTL_VERSION_SHIFT                 11
-#define OMAP44XX_REG_RTL_VERSION_MASK                  (0x1f << 11)
-#define OMAP44XX_REG_MAJOR_REVISION_SHIFT              8
-#define OMAP44XX_REG_MAJOR_REVISION_MASK               (0x7 << 8)
-#define OMAP44XX_REG_MINOR_REVISION_SHIFT              0
-#define OMAP44XX_REG_MINOR_REVISION_MASK               (0x3f << 0)
-
-/* STATUS */
-#define OMAP44XX_REG_BE_SHIFT                          31
-#define OMAP44XX_REG_BE_MASK                           (1 << 31)
-#define OMAP44XX_REG_DUAL_CLK_MODE_SHIFT               30
-#define OMAP44XX_REG_DUAL_CLK_MODE_MASK                        (1 << 30)
-#define OMAP44XX_REG_FAST_INIT_SHIFT                   29
-#define OMAP44XX_REG_FAST_INIT_MASK                    (1 << 29)
-#define OMAP44XX_REG_PHY_DLL_READY_SHIFT               2
-#define OMAP44XX_REG_PHY_DLL_READY_MASK                        (1 << 2)
-
-/* SDRAM_CONFIG */
-#define OMAP44XX_REG_SDRAM_TYPE_SHIFT                  29
-#define OMAP44XX_REG_SDRAM_TYPE_MASK                   (0x7 << 29)
-#define OMAP44XX_REG_IBANK_POS_SHIFT                   27
-#define OMAP44XX_REG_IBANK_POS_MASK                    (0x3 << 27)
-#define OMAP44XX_REG_DDR_TERM_SHIFT                    24
-#define OMAP44XX_REG_DDR_TERM_MASK                     (0x7 << 24)
-#define OMAP44XX_REG_DDR2_DDQS_SHIFT                   23
-#define OMAP44XX_REG_DDR2_DDQS_MASK                    (1 << 23)
-#define OMAP44XX_REG_DYN_ODT_SHIFT                     21
-#define OMAP44XX_REG_DYN_ODT_MASK                      (0x3 << 21)
-#define OMAP44XX_REG_DDR_DISABLE_DLL_SHIFT             20
-#define OMAP44XX_REG_DDR_DISABLE_DLL_MASK              (1 << 20)
-#define OMAP44XX_REG_SDRAM_DRIVE_SHIFT                 18
-#define OMAP44XX_REG_SDRAM_DRIVE_MASK                  (0x3 << 18)
-#define OMAP44XX_REG_CWL_SHIFT                         16
-#define OMAP44XX_REG_CWL_MASK                          (0x3 << 16)
-#define OMAP44XX_REG_NARROW_MODE_SHIFT                 14
-#define OMAP44XX_REG_NARROW_MODE_MASK                  (0x3 << 14)
-#define OMAP44XX_REG_CL_SHIFT                          10
-#define OMAP44XX_REG_CL_MASK                           (0xf << 10)
-#define OMAP44XX_REG_ROWSIZE_SHIFT                     7
-#define OMAP44XX_REG_ROWSIZE_MASK                      (0x7 << 7)
-#define OMAP44XX_REG_IBANK_SHIFT                       4
-#define OMAP44XX_REG_IBANK_MASK                                (0x7 << 4)
-#define OMAP44XX_REG_EBANK_SHIFT                       3
-#define OMAP44XX_REG_EBANK_MASK                                (1 << 3)
-#define OMAP44XX_REG_PAGESIZE_SHIFT                    0
-#define OMAP44XX_REG_PAGESIZE_MASK                     (0x7 << 0)
-
-/* SDRAM_CONFIG_2 */
-#define OMAP44XX_REG_CS1NVMEN_SHIFT                    30
-#define OMAP44XX_REG_CS1NVMEN_MASK                     (1 << 30)
-#define OMAP44XX_REG_EBANK_POS_SHIFT                   27
-#define OMAP44XX_REG_EBANK_POS_MASK                    (1 << 27)
-#define OMAP44XX_REG_RDBNUM_SHIFT                      4
-#define OMAP44XX_REG_RDBNUM_MASK                       (0x3 << 4)
-#define OMAP44XX_REG_RDBSIZE_SHIFT                     0
-#define OMAP44XX_REG_RDBSIZE_MASK                      (0x7 << 0)
-
-/* SDRAM_REF_CTRL */
-#define OMAP44XX_REG_INITREF_DIS_SHIFT                 31
-#define OMAP44XX_REG_INITREF_DIS_MASK                  (1 << 31)
-#define OMAP44XX_REG_SRT_SHIFT                         29
-#define OMAP44XX_REG_SRT_MASK                          (1 << 29)
-#define OMAP44XX_REG_ASR_SHIFT                         28
-#define OMAP44XX_REG_ASR_MASK                          (1 << 28)
-#define OMAP44XX_REG_PASR_SHIFT                                24
-#define OMAP44XX_REG_PASR_MASK                         (0x7 << 24)
-#define OMAP44XX_REG_REFRESH_RATE_SHIFT                        0
-#define OMAP44XX_REG_REFRESH_RATE_MASK                 (0xffff << 0)
-
-/* SDRAM_REF_CTRL_SHDW */
-#define OMAP44XX_REG_REFRESH_RATE_SHDW_SHIFT           0
-#define OMAP44XX_REG_REFRESH_RATE_SHDW_MASK            (0xffff << 0)
-
-/* SDRAM_TIM_1 */
-#define OMAP44XX_REG_T_RP_SHIFT                                25
-#define OMAP44XX_REG_T_RP_MASK                         (0xf << 25)
-#define OMAP44XX_REG_T_RCD_SHIFT                       21
-#define OMAP44XX_REG_T_RCD_MASK                                (0xf << 21)
-#define OMAP44XX_REG_T_WR_SHIFT                                17
-#define OMAP44XX_REG_T_WR_MASK                         (0xf << 17)
-#define OMAP44XX_REG_T_RAS_SHIFT                       12
-#define OMAP44XX_REG_T_RAS_MASK                                (0x1f << 12)
-#define OMAP44XX_REG_T_RC_SHIFT                                6
-#define OMAP44XX_REG_T_RC_MASK                         (0x3f << 6)
-#define OMAP44XX_REG_T_RRD_SHIFT                       3
-#define OMAP44XX_REG_T_RRD_MASK                                (0x7 << 3)
-#define OMAP44XX_REG_T_WTR_SHIFT                       0
-#define OMAP44XX_REG_T_WTR_MASK                                (0x7 << 0)
-
-/* SDRAM_TIM_1_SHDW */
-#define OMAP44XX_REG_T_RP_SHDW_SHIFT                   25
-#define OMAP44XX_REG_T_RP_SHDW_MASK                    (0xf << 25)
-#define OMAP44XX_REG_T_RCD_SHDW_SHIFT                  21
-#define OMAP44XX_REG_T_RCD_SHDW_MASK                   (0xf << 21)
-#define OMAP44XX_REG_T_WR_SHDW_SHIFT                   17
-#define OMAP44XX_REG_T_WR_SHDW_MASK                    (0xf << 17)
-#define OMAP44XX_REG_T_RAS_SHDW_SHIFT                  12
-#define OMAP44XX_REG_T_RAS_SHDW_MASK                   (0x1f << 12)
-#define OMAP44XX_REG_T_RC_SHDW_SHIFT                   6
-#define OMAP44XX_REG_T_RC_SHDW_MASK                    (0x3f << 6)
-#define OMAP44XX_REG_T_RRD_SHDW_SHIFT                  3
-#define OMAP44XX_REG_T_RRD_SHDW_MASK                   (0x7 << 3)
-#define OMAP44XX_REG_T_WTR_SHDW_SHIFT                  0
-#define OMAP44XX_REG_T_WTR_SHDW_MASK                   (0x7 << 0)
-
-/* SDRAM_TIM_2 */
-#define OMAP44XX_REG_T_XP_SHIFT                                28
-#define OMAP44XX_REG_T_XP_MASK                         (0x7 << 28)
-#define OMAP44XX_REG_T_ODT_SHIFT                       25
-#define OMAP44XX_REG_T_ODT_MASK                                (0x7 << 25)
-#define OMAP44XX_REG_T_XSNR_SHIFT                      16
-#define OMAP44XX_REG_T_XSNR_MASK                       (0x1ff << 16)
-#define OMAP44XX_REG_T_XSRD_SHIFT                      6
-#define OMAP44XX_REG_T_XSRD_MASK                       (0x3ff << 6)
-#define OMAP44XX_REG_T_RTP_SHIFT                       3
-#define OMAP44XX_REG_T_RTP_MASK                                (0x7 << 3)
-#define OMAP44XX_REG_T_CKE_SHIFT                       0
-#define OMAP44XX_REG_T_CKE_MASK                                (0x7 << 0)
-
-/* SDRAM_TIM_2_SHDW */
-#define OMAP44XX_REG_T_XP_SHDW_SHIFT                   28
-#define OMAP44XX_REG_T_XP_SHDW_MASK                    (0x7 << 28)
-#define OMAP44XX_REG_T_ODT_SHDW_SHIFT                  25
-#define OMAP44XX_REG_T_ODT_SHDW_MASK                   (0x7 << 25)
-#define OMAP44XX_REG_T_XSNR_SHDW_SHIFT                 16
-#define OMAP44XX_REG_T_XSNR_SHDW_MASK                  (0x1ff << 16)
-#define OMAP44XX_REG_T_XSRD_SHDW_SHIFT                 6
-#define OMAP44XX_REG_T_XSRD_SHDW_MASK                  (0x3ff << 6)
-#define OMAP44XX_REG_T_RTP_SHDW_SHIFT                  3
-#define OMAP44XX_REG_T_RTP_SHDW_MASK                   (0x7 << 3)
-#define OMAP44XX_REG_T_CKE_SHDW_SHIFT                  0
-#define OMAP44XX_REG_T_CKE_SHDW_MASK                   (0x7 << 0)
-
-/* SDRAM_TIM_3 */
-#define OMAP44XX_REG_T_CKESR_SHIFT                     21
-#define OMAP44XX_REG_T_CKESR_MASK                      (0x7 << 21)
-#define OMAP44XX_REG_ZQ_ZQCS_SHIFT                     15
-#define OMAP44XX_REG_ZQ_ZQCS_MASK                      (0x3f << 15)
-#define OMAP44XX_REG_T_TDQSCKMAX_SHIFT                 13
-#define OMAP44XX_REG_T_TDQSCKMAX_MASK                  (0x3 << 13)
-#define OMAP44XX_REG_T_RFC_SHIFT                       4
-#define OMAP44XX_REG_T_RFC_MASK                                (0x1ff << 4)
-#define OMAP44XX_REG_T_RAS_MAX_SHIFT                   0
-#define OMAP44XX_REG_T_RAS_MAX_MASK                    (0xf << 0)
-
-/* SDRAM_TIM_3_SHDW */
-#define OMAP44XX_REG_T_CKESR_SHDW_SHIFT                        21
-#define OMAP44XX_REG_T_CKESR_SHDW_MASK                 (0x7 << 21)
-#define OMAP44XX_REG_ZQ_ZQCS_SHDW_SHIFT                        15
-#define OMAP44XX_REG_ZQ_ZQCS_SHDW_MASK                 (0x3f << 15)
-#define OMAP44XX_REG_T_TDQSCKMAX_SHDW_SHIFT            13
-#define OMAP44XX_REG_T_TDQSCKMAX_SHDW_MASK             (0x3 << 13)
-#define OMAP44XX_REG_T_RFC_SHDW_SHIFT                  4
-#define OMAP44XX_REG_T_RFC_SHDW_MASK                   (0x1ff << 4)
-#define OMAP44XX_REG_T_RAS_MAX_SHDW_SHIFT              0
-#define OMAP44XX_REG_T_RAS_MAX_SHDW_MASK               (0xf << 0)
-
-/* LPDDR2_NVM_TIM */
-#define OMAP44XX_REG_NVM_T_XP_SHIFT                    28
-#define OMAP44XX_REG_NVM_T_XP_MASK                     (0x7 << 28)
-#define OMAP44XX_REG_NVM_T_WTR_SHIFT                   24
-#define OMAP44XX_REG_NVM_T_WTR_MASK                    (0x7 << 24)
-#define OMAP44XX_REG_NVM_T_RP_SHIFT                    20
-#define OMAP44XX_REG_NVM_T_RP_MASK                     (0xf << 20)
-#define OMAP44XX_REG_NVM_T_WRA_SHIFT                   16
-#define OMAP44XX_REG_NVM_T_WRA_MASK                    (0xf << 16)
-#define OMAP44XX_REG_NVM_T_RRD_SHIFT                   8
-#define OMAP44XX_REG_NVM_T_RRD_MASK                    (0xff << 8)
-#define OMAP44XX_REG_NVM_T_RCDMIN_SHIFT                        0
-#define OMAP44XX_REG_NVM_T_RCDMIN_MASK                 (0xff << 0)
-
-/* LPDDR2_NVM_TIM_SHDW */
-#define OMAP44XX_REG_NVM_T_XP_SHDW_SHIFT               28
-#define OMAP44XX_REG_NVM_T_XP_SHDW_MASK                        (0x7 << 28)
-#define OMAP44XX_REG_NVM_T_WTR_SHDW_SHIFT              24
-#define OMAP44XX_REG_NVM_T_WTR_SHDW_MASK               (0x7 << 24)
-#define OMAP44XX_REG_NVM_T_RP_SHDW_SHIFT               20
-#define OMAP44XX_REG_NVM_T_RP_SHDW_MASK                        (0xf << 20)
-#define OMAP44XX_REG_NVM_T_WRA_SHDW_SHIFT              16
-#define OMAP44XX_REG_NVM_T_WRA_SHDW_MASK               (0xf << 16)
-#define OMAP44XX_REG_NVM_T_RRD_SHDW_SHIFT              8
-#define OMAP44XX_REG_NVM_T_RRD_SHDW_MASK               (0xff << 8)
-#define OMAP44XX_REG_NVM_T_RCDMIN_SHDW_SHIFT           0
-#define OMAP44XX_REG_NVM_T_RCDMIN_SHDW_MASK            (0xff << 0)
-
-/* PWR_MGMT_CTRL */
-#define OMAP44XX_REG_IDLEMODE_SHIFT                    30
-#define OMAP44XX_REG_IDLEMODE_MASK                     (0x3 << 30)
-#define OMAP44XX_REG_PD_TIM_SHIFT                      12
-#define OMAP44XX_REG_PD_TIM_MASK                       (0xf << 12)
-#define OMAP44XX_REG_DPD_EN_SHIFT                      11
-#define OMAP44XX_REG_DPD_EN_MASK                       (1 << 11)
-#define OMAP44XX_REG_LP_MODE_SHIFT                     8
-#define OMAP44XX_REG_LP_MODE_MASK                      (0x7 << 8)
-#define OMAP44XX_REG_SR_TIM_SHIFT                      4
-#define OMAP44XX_REG_SR_TIM_MASK                       (0xf << 4)
-#define OMAP44XX_REG_CS_TIM_SHIFT                      0
-#define OMAP44XX_REG_CS_TIM_MASK                       (0xf << 0)
-
-/* PWR_MGMT_CTRL_SHDW */
-#define OMAP44XX_REG_PD_TIM_SHDW_SHIFT                 8
-#define OMAP44XX_REG_PD_TIM_SHDW_MASK                  (0xf << 8)
-#define OMAP44XX_REG_SR_TIM_SHDW_SHIFT                 4
-#define OMAP44XX_REG_SR_TIM_SHDW_MASK                  (0xf << 4)
-#define OMAP44XX_REG_CS_TIM_SHDW_SHIFT                 0
-#define OMAP44XX_REG_CS_TIM_SHDW_MASK                  (0xf << 0)
-
-/* LPDDR2_MODE_REG_DATA */
-#define OMAP44XX_REG_VALUE_0_SHIFT                     0
-#define OMAP44XX_REG_VALUE_0_MASK                      (0x7f << 0)
-
-/* LPDDR2_MODE_REG_CFG */
-#define OMAP44XX_REG_CS_SHIFT                          31
-#define OMAP44XX_REG_CS_MASK                           (1 << 31)
-#define OMAP44XX_REG_REFRESH_EN_SHIFT                  30
-#define OMAP44XX_REG_REFRESH_EN_MASK                   (1 << 30)
-#define OMAP44XX_REG_ADDRESS_SHIFT                     0
-#define OMAP44XX_REG_ADDRESS_MASK                      (0xff << 0)
-
-/* OCP_CONFIG */
-#define OMAP44XX_REG_SYS_THRESH_MAX_SHIFT              24
-#define OMAP44XX_REG_SYS_THRESH_MAX_MASK               (0xf << 24)
-#define OMAP44XX_REG_MPU_THRESH_MAX_SHIFT              20
-#define OMAP44XX_REG_MPU_THRESH_MAX_MASK               (0xf << 20)
-#define OMAP44XX_REG_LL_THRESH_MAX_SHIFT               16
-#define OMAP44XX_REG_LL_THRESH_MAX_MASK                        (0xf << 16)
-#define OMAP44XX_REG_PR_OLD_COUNT_SHIFT                        0
-#define OMAP44XX_REG_PR_OLD_COUNT_MASK                 (0xff << 0)
-
-/* OCP_CFG_VAL_1 */
-#define OMAP44XX_REG_SYS_BUS_WIDTH_SHIFT               30
-#define OMAP44XX_REG_SYS_BUS_WIDTH_MASK                        (0x3 << 30)
-#define OMAP44XX_REG_LL_BUS_WIDTH_SHIFT                        28
-#define OMAP44XX_REG_LL_BUS_WIDTH_MASK                 (0x3 << 28)
-#define OMAP44XX_REG_WR_FIFO_DEPTH_SHIFT               8
-#define OMAP44XX_REG_WR_FIFO_DEPTH_MASK                        (0xff << 8)
-#define OMAP44XX_REG_CMD_FIFO_DEPTH_SHIFT              0
-#define OMAP44XX_REG_CMD_FIFO_DEPTH_MASK               (0xff << 0)
-
-/* OCP_CFG_VAL_2 */
-#define OMAP44XX_REG_RREG_FIFO_DEPTH_SHIFT             16
-#define OMAP44XX_REG_RREG_FIFO_DEPTH_MASK              (0xff << 16)
-#define OMAP44XX_REG_RSD_FIFO_DEPTH_SHIFT              8
-#define OMAP44XX_REG_RSD_FIFO_DEPTH_MASK               (0xff << 8)
-#define OMAP44XX_REG_RCMD_FIFO_DEPTH_SHIFT             0
-#define OMAP44XX_REG_RCMD_FIFO_DEPTH_MASK              (0xff << 0)
-
-/* IODFT_TLGC */
-#define OMAP44XX_REG_TLEC_SHIFT                                16
-#define OMAP44XX_REG_TLEC_MASK                         (0xffff << 16)
-#define OMAP44XX_REG_MT_SHIFT                          14
-#define OMAP44XX_REG_MT_MASK                           (1 << 14)
-#define OMAP44XX_REG_ACT_CAP_EN_SHIFT                  13
-#define OMAP44XX_REG_ACT_CAP_EN_MASK                   (1 << 13)
-#define OMAP44XX_REG_OPG_LD_SHIFT                      12
-#define OMAP44XX_REG_OPG_LD_MASK                       (1 << 12)
-#define OMAP44XX_REG_RESET_PHY_SHIFT                   10
-#define OMAP44XX_REG_RESET_PHY_MASK                    (1 << 10)
-#define OMAP44XX_REG_MMS_SHIFT                         8
-#define OMAP44XX_REG_MMS_MASK                          (1 << 8)
-#define OMAP44XX_REG_MC_SHIFT                          4
-#define OMAP44XX_REG_MC_MASK                           (0x3 << 4)
-#define OMAP44XX_REG_PC_SHIFT                          1
-#define OMAP44XX_REG_PC_MASK                           (0x7 << 1)
-#define OMAP44XX_REG_TM_SHIFT                          0
-#define OMAP44XX_REG_TM_MASK                           (1 << 0)
-
-/* IODFT_CTRL_MISR_RSLT */
-#define OMAP44XX_REG_DQM_TLMR_SHIFT                    16
-#define OMAP44XX_REG_DQM_TLMR_MASK                     (0x3ff << 16)
-#define OMAP44XX_REG_CTL_TLMR_SHIFT                    0
-#define OMAP44XX_REG_CTL_TLMR_MASK                     (0x7ff << 0)
-
-/* IODFT_ADDR_MISR_RSLT */
-#define OMAP44XX_REG_ADDR_TLMR_SHIFT                   0
-#define OMAP44XX_REG_ADDR_TLMR_MASK                    (0x1fffff << 0)
-
-/* IODFT_DATA_MISR_RSLT_1 */
-#define OMAP44XX_REG_DATA_TLMR_31_0_SHIFT              0
-#define OMAP44XX_REG_DATA_TLMR_31_0_MASK               (0xffffffff << 0)
-
-/* IODFT_DATA_MISR_RSLT_2 */
-#define OMAP44XX_REG_DATA_TLMR_63_32_SHIFT             0
-#define OMAP44XX_REG_DATA_TLMR_63_32_MASK              (0xffffffff << 0)
-
-/* IODFT_DATA_MISR_RSLT_3 */
-#define OMAP44XX_REG_DATA_TLMR_66_64_SHIFT             0
-#define OMAP44XX_REG_DATA_TLMR_66_64_MASK              (0x7 << 0)
-
-/* PERF_CNT_1 */
-#define OMAP44XX_REG_COUNTER1_SHIFT                    0
-#define OMAP44XX_REG_COUNTER1_MASK                     (0xffffffff << 0)
-
-/* PERF_CNT_2 */
-#define OMAP44XX_REG_COUNTER2_SHIFT                    0
-#define OMAP44XX_REG_COUNTER2_MASK                     (0xffffffff << 0)
-
-/* PERF_CNT_CFG */
-#define OMAP44XX_REG_CNTR2_MCONNID_EN_SHIFT            31
-#define OMAP44XX_REG_CNTR2_MCONNID_EN_MASK             (1 << 31)
-#define OMAP44XX_REG_CNTR2_REGION_EN_SHIFT             30
-#define OMAP44XX_REG_CNTR2_REGION_EN_MASK              (1 << 30)
-#define OMAP44XX_REG_CNTR2_CFG_SHIFT                   16
-#define OMAP44XX_REG_CNTR2_CFG_MASK                    (0xf << 16)
-#define OMAP44XX_REG_CNTR1_MCONNID_EN_SHIFT            15
-#define OMAP44XX_REG_CNTR1_MCONNID_EN_MASK             (1 << 15)
-#define OMAP44XX_REG_CNTR1_REGION_EN_SHIFT             14
-#define OMAP44XX_REG_CNTR1_REGION_EN_MASK              (1 << 14)
-#define OMAP44XX_REG_CNTR1_CFG_SHIFT                   0
-#define OMAP44XX_REG_CNTR1_CFG_MASK                    (0xf << 0)
-
-/* PERF_CNT_SEL */
-#define OMAP44XX_REG_MCONNID2_SHIFT                    24
-#define OMAP44XX_REG_MCONNID2_MASK                     (0xff << 24)
-#define OMAP44XX_REG_REGION_SEL2_SHIFT                 16
-#define OMAP44XX_REG_REGION_SEL2_MASK                  (0x3 << 16)
-#define OMAP44XX_REG_MCONNID1_SHIFT                    8
-#define OMAP44XX_REG_MCONNID1_MASK                     (0xff << 8)
-#define OMAP44XX_REG_REGION_SEL1_SHIFT                 0
-#define OMAP44XX_REG_REGION_SEL1_MASK                  (0x3 << 0)
-
-/* PERF_CNT_TIM */
-#define OMAP44XX_REG_TOTAL_TIME_SHIFT                  0
-#define OMAP44XX_REG_TOTAL_TIME_MASK                   (0xffffffff << 0)
-
-/* READ_IDLE_CTRL */
-#define OMAP44XX_REG_READ_IDLE_LEN_SHIFT               16
-#define OMAP44XX_REG_READ_IDLE_LEN_MASK                        (0xf << 16)
-#define OMAP44XX_REG_READ_IDLE_INTERVAL_SHIFT          0
-#define OMAP44XX_REG_READ_IDLE_INTERVAL_MASK           (0x1ff << 0)
-
-/* READ_IDLE_CTRL_SHDW */
-#define OMAP44XX_REG_READ_IDLE_LEN_SHDW_SHIFT          16
-#define OMAP44XX_REG_READ_IDLE_LEN_SHDW_MASK           (0xf << 16)
-#define OMAP44XX_REG_READ_IDLE_INTERVAL_SHDW_SHIFT     0
-#define OMAP44XX_REG_READ_IDLE_INTERVAL_SHDW_MASK      (0x1ff << 0)
-
-/* IRQ_EOI */
-#define OMAP44XX_REG_EOI_SHIFT                         0
-#define OMAP44XX_REG_EOI_MASK                          (1 << 0)
-
-/* IRQSTATUS_RAW_SYS */
-#define OMAP44XX_REG_DNV_SYS_SHIFT                     2
-#define OMAP44XX_REG_DNV_SYS_MASK                      (1 << 2)
-#define OMAP44XX_REG_TA_SYS_SHIFT                      1
-#define OMAP44XX_REG_TA_SYS_MASK                       (1 << 1)
-#define OMAP44XX_REG_ERR_SYS_SHIFT                     0
-#define OMAP44XX_REG_ERR_SYS_MASK                      (1 << 0)
-
-/* IRQSTATUS_RAW_LL */
-#define OMAP44XX_REG_DNV_LL_SHIFT                      2
-#define OMAP44XX_REG_DNV_LL_MASK                       (1 << 2)
-#define OMAP44XX_REG_TA_LL_SHIFT                       1
-#define OMAP44XX_REG_TA_LL_MASK                                (1 << 1)
-#define OMAP44XX_REG_ERR_LL_SHIFT                      0
-#define OMAP44XX_REG_ERR_LL_MASK                       (1 << 0)
-
-/* IRQSTATUS_SYS */
-
-/* IRQSTATUS_LL */
-
-/* IRQENABLE_SET_SYS */
-#define OMAP44XX_REG_EN_DNV_SYS_SHIFT                  2
-#define OMAP44XX_REG_EN_DNV_SYS_MASK                   (1 << 2)
-#define OMAP44XX_REG_EN_TA_SYS_SHIFT                   1
-#define OMAP44XX_REG_EN_TA_SYS_MASK                    (1 << 1)
-#define OMAP44XX_REG_EN_ERR_SYS_SHIFT                  0
-#define OMAP44XX_REG_EN_ERR_SYS_MASK                   (1 << 0)
-
-/* IRQENABLE_SET_LL */
-#define OMAP44XX_REG_EN_DNV_LL_SHIFT                   2
-#define OMAP44XX_REG_EN_DNV_LL_MASK                    (1 << 2)
-#define OMAP44XX_REG_EN_TA_LL_SHIFT                    1
-#define OMAP44XX_REG_EN_TA_LL_MASK                     (1 << 1)
-#define OMAP44XX_REG_EN_ERR_LL_SHIFT                   0
-#define OMAP44XX_REG_EN_ERR_LL_MASK                    (1 << 0)
-
-/* IRQENABLE_CLR_SYS */
-
-/* IRQENABLE_CLR_LL */
-
-/* ZQ_CONFIG */
-#define OMAP44XX_REG_ZQ_CS1EN_SHIFT                    31
-#define OMAP44XX_REG_ZQ_CS1EN_MASK                     (1 << 31)
-#define OMAP44XX_REG_ZQ_CS0EN_SHIFT                    30
-#define OMAP44XX_REG_ZQ_CS0EN_MASK                     (1 << 30)
-#define OMAP44XX_REG_ZQ_DUALCALEN_SHIFT                        29
-#define OMAP44XX_REG_ZQ_DUALCALEN_MASK                 (1 << 29)
-#define OMAP44XX_REG_ZQ_SFEXITEN_SHIFT                 28
-#define OMAP44XX_REG_ZQ_SFEXITEN_MASK                  (1 << 28)
-#define OMAP44XX_REG_ZQ_ZQINIT_MULT_SHIFT              18
-#define OMAP44XX_REG_ZQ_ZQINIT_MULT_MASK               (0x3 << 18)
-#define OMAP44XX_REG_ZQ_ZQCL_MULT_SHIFT                        16
-#define OMAP44XX_REG_ZQ_ZQCL_MULT_MASK                 (0x3 << 16)
-#define OMAP44XX_REG_ZQ_REFINTERVAL_SHIFT              0
-#define OMAP44XX_REG_ZQ_REFINTERVAL_MASK               (0xffff << 0)
-
-/* TEMP_ALERT_CONFIG */
-#define OMAP44XX_REG_TA_CS1EN_SHIFT                    31
-#define OMAP44XX_REG_TA_CS1EN_MASK                     (1 << 31)
-#define OMAP44XX_REG_TA_CS0EN_SHIFT                    30
-#define OMAP44XX_REG_TA_CS0EN_MASK                     (1 << 30)
-#define OMAP44XX_REG_TA_SFEXITEN_SHIFT                 28
-#define OMAP44XX_REG_TA_SFEXITEN_MASK                  (1 << 28)
-#define OMAP44XX_REG_TA_DEVWDT_SHIFT                   26
-#define OMAP44XX_REG_TA_DEVWDT_MASK                    (0x3 << 26)
-#define OMAP44XX_REG_TA_DEVCNT_SHIFT                   24
-#define OMAP44XX_REG_TA_DEVCNT_MASK                    (0x3 << 24)
-#define OMAP44XX_REG_TA_REFINTERVAL_SHIFT              0
-#define OMAP44XX_REG_TA_REFINTERVAL_MASK               (0x3fffff << 0)
-
-/* OCP_ERR_LOG */
-#define OMAP44XX_REG_MADDRSPACE_SHIFT                  14
-#define OMAP44XX_REG_MADDRSPACE_MASK                   (0x3 << 14)
-#define OMAP44XX_REG_MBURSTSEQ_SHIFT                   11
-#define OMAP44XX_REG_MBURSTSEQ_MASK                    (0x7 << 11)
-#define OMAP44XX_REG_MCMD_SHIFT                                8
-#define OMAP44XX_REG_MCMD_MASK                         (0x7 << 8)
-#define OMAP44XX_REG_MCONNID_SHIFT                     0
-#define OMAP44XX_REG_MCONNID_MASK                      (0xff << 0)
-
-/* DDR_PHY_CTRL_1 */
-#define OMAP44XX_REG_DDR_PHY_CTRL_1_SHIFT              4
-#define OMAP44XX_REG_DDR_PHY_CTRL_1_MASK               (0xfffffff << 4)
-#define OMAP44XX_REG_READ_LATENCY_SHIFT                        0
-#define OMAP44XX_REG_READ_LATENCY_MASK                 (0xf << 0)
-#define OMAP44XX_REG_DLL_SLAVE_DLY_CTRL_SHIFT          4
-#define OMAP44XX_REG_DLL_SLAVE_DLY_CTRL_MASK           (0xFF << 4)
-#define OMAP44XX_EMIF_DDR_PHY_CTRL_1_BASE_VAL_SHIFT    12
-#define OMAP44XX_EMIF_DDR_PHY_CTRL_1_BASE_VAL_MASK     (0xFFFFF << 12)
-
-/* DDR_PHY_CTRL_1_SHDW */
-#define OMAP44XX_REG_DDR_PHY_CTRL_1_SHDW_SHIFT         4
-#define OMAP44XX_REG_DDR_PHY_CTRL_1_SHDW_MASK          (0xfffffff << 4)
-#define OMAP44XX_REG_READ_LATENCY_SHDW_SHIFT           0
-#define OMAP44XX_REG_READ_LATENCY_SHDW_MASK            (0xf << 0)
-#define OMAP44XX_REG_DLL_SLAVE_DLY_CTRL_SHDW_SHIFT     4
-#define OMAP44XX_REG_DLL_SLAVE_DLY_CTRL_SHDW_MASK      (0xFF << 4)
-#define OMAP44XX_EMIF_DDR_PHY_CTRL_1_BASE_VAL_SHDW_SHIFT 12
-#define OMAP44XX_EMIF_DDR_PHY_CTRL_1_BASE_VAL_SHDW_MASK        (0xFFFFF << 12)
-
-/* DDR_PHY_CTRL_2 */
-#define OMAP44XX_REG_DDR_PHY_CTRL_2_SHIFT              0
-#define OMAP44XX_REG_DDR_PHY_CTRL_2_MASK               (0xffffffff << 0)
-
-/* DMM */
-#define OMAP44XX_DMM_LISA_MAP_BASE     0x4E000040
-
-/* Memory Adapter (4460 onwards) */
-#define OMAP44XX_MA_LISA_MAP_BASE              0x482AF040
-
-/* DMM_LISA_MAP */
-#define OMAP44XX_SYS_ADDR_SHIFT                24
-#define OMAP44XX_SYS_ADDR_MASK         (0xff << 24)
-#define OMAP44XX_SYS_SIZE_SHIFT                20
-#define OMAP44XX_SYS_SIZE_MASK         (0x7 << 20)
-#define OMAP44XX_SDRC_INTL_SHIFT       18
-#define OMAP44XX_SDRC_INTL_MASK                (0x3 << 18)
-#define OMAP44XX_SDRC_ADDRSPC_SHIFT    16
-#define OMAP44XX_SDRC_ADDRSPC_MASK     (0x3 << 16)
-#define OMAP44XX_SDRC_MAP_SHIFT                8
-#define OMAP44XX_SDRC_MAP_MASK         (0x3 << 8)
-#define OMAP44XX_SDRC_ADDR_SHIFT       0
-#define OMAP44XX_SDRC_ADDR_MASK                (0xff << 0)
-
-/* DMM_LISA_MAP fields */
-#define DMM_SDRC_MAP_UNMAPPED          0
-#define DMM_SDRC_MAP_EMIF1_ONLY                1
-#define DMM_SDRC_MAP_EMIF2_ONLY                2
-#define DMM_SDRC_MAP_EMIF1_AND_EMIF2   3
-
-#define DMM_SDRC_INTL_NONE             0
-#define DMM_SDRC_INTL_128B             1
-#define DMM_SDRC_INTL_256B             2
-#define DMM_SDRC_INTL_512              3
-
-#define DMM_SDRC_ADDR_SPC_SDRAM                0
-#define DMM_SDRC_ADDR_SPC_NVM          1
-#define DMM_SDRC_ADDR_SPC_INVALID      2
-
-#define DMM_LISA_MAP_INTERLEAVED_BASE_VAL              (\
-       (DMM_SDRC_MAP_EMIF1_AND_EMIF2 << OMAP44XX_SDRC_MAP_SHIFT) |\
-       (DMM_SDRC_ADDR_SPC_SDRAM << OMAP44XX_SDRC_ADDRSPC_SHIFT) |\
-       (DMM_SDRC_INTL_128B << OMAP44XX_SDRC_INTL_SHIFT) |\
-       (CONFIG_SYS_SDRAM_BASE << OMAP44XX_SYS_ADDR_SHIFT))
-
-#define DMM_LISA_MAP_EMIF1_ONLY_BASE_VAL       (\
-       (DMM_SDRC_MAP_EMIF1_ONLY << OMAP44XX_SDRC_MAP_SHIFT)|\
-       (DMM_SDRC_ADDR_SPC_SDRAM << OMAP44XX_SDRC_ADDRSPC_SHIFT)|\
-       (DMM_SDRC_INTL_NONE << OMAP44XX_SDRC_INTL_SHIFT))
-
-#define DMM_LISA_MAP_EMIF2_ONLY_BASE_VAL       (\
-       (DMM_SDRC_MAP_EMIF2_ONLY << OMAP44XX_SDRC_MAP_SHIFT)|\
-       (DMM_SDRC_ADDR_SPC_SDRAM << OMAP44XX_SDRC_ADDRSPC_SHIFT)|\
-       (DMM_SDRC_INTL_NONE << OMAP44XX_SDRC_INTL_SHIFT))
-
-/* Trap for invalid TILER PAT entries */
-#define DMM_LISA_MAP_0_INVAL_ADDR_TRAP         (\
-       (0  << OMAP44XX_SDRC_ADDR_SHIFT) |\
-       (DMM_SDRC_MAP_EMIF1_ONLY << OMAP44XX_SDRC_MAP_SHIFT)|\
-       (DMM_SDRC_ADDR_SPC_INVALID << OMAP44XX_SDRC_ADDRSPC_SHIFT)|\
-       (DMM_SDRC_INTL_NONE << OMAP44XX_SDRC_INTL_SHIFT)|\
-       (0xFF << OMAP44XX_SYS_ADDR_SHIFT))
-
-
-/* Reg mapping structure */
-struct emif_reg_struct {
-       u32 emif_mod_id_rev;
-       u32 emif_status;
-       u32 emif_sdram_config;
-       u32 emif_lpddr2_nvm_config;
-       u32 emif_sdram_ref_ctrl;
-       u32 emif_sdram_ref_ctrl_shdw;
-       u32 emif_sdram_tim_1;
-       u32 emif_sdram_tim_1_shdw;
-       u32 emif_sdram_tim_2;
-       u32 emif_sdram_tim_2_shdw;
-       u32 emif_sdram_tim_3;
-       u32 emif_sdram_tim_3_shdw;
-       u32 emif_lpddr2_nvm_tim;
-       u32 emif_lpddr2_nvm_tim_shdw;
-       u32 emif_pwr_mgmt_ctrl;
-       u32 emif_pwr_mgmt_ctrl_shdw;
-       u32 emif_lpddr2_mode_reg_data;
-       u32 padding1[1];
-       u32 emif_lpddr2_mode_reg_data_es2;
-       u32 padding11[1];
-       u32 emif_lpddr2_mode_reg_cfg;
-       u32 emif_l3_config;
-       u32 emif_l3_cfg_val_1;
-       u32 emif_l3_cfg_val_2;
-       u32 emif_iodft_tlgc;
-       u32 padding2[7];
-       u32 emif_perf_cnt_1;
-       u32 emif_perf_cnt_2;
-       u32 emif_perf_cnt_cfg;
-       u32 emif_perf_cnt_sel;
-       u32 emif_perf_cnt_tim;
-       u32 padding3;
-       u32 emif_read_idlectrl;
-       u32 emif_read_idlectrl_shdw;
-       u32 padding4;
-       u32 emif_irqstatus_raw_sys;
-       u32 emif_irqstatus_raw_ll;
-       u32 emif_irqstatus_sys;
-       u32 emif_irqstatus_ll;
-       u32 emif_irqenable_set_sys;
-       u32 emif_irqenable_set_ll;
-       u32 emif_irqenable_clr_sys;
-       u32 emif_irqenable_clr_ll;
-       u32 padding5;
-       u32 emif_zq_config;
-       u32 emif_temp_alert_config;
-       u32 emif_l3_err_log;
-       u32 padding6[4];
-       u32 emif_ddr_phy_ctrl_1;
-       u32 emif_ddr_phy_ctrl_1_shdw;
-       u32 emif_ddr_phy_ctrl_2;
-};
-
-struct dmm_lisa_map_regs {
-       u32 dmm_lisa_map_0;
-       u32 dmm_lisa_map_1;
-       u32 dmm_lisa_map_2;
-       u32 dmm_lisa_map_3;
-};
-
-#define CS0    0
-#define CS1    1
-/* The maximum frequency at which the LPDDR2 interface can operate in Hz*/
-#define MAX_LPDDR2_FREQ        400000000       /* 400 MHz */
-
-/*
- * The period of DDR clk is represented as numerator and denominator for
- * better accuracy in integer based calculations. However, if the numerator
- * and denominator are very huge there may be chances of overflow in
- * calculations. So, as a trade-off keep denominator(and consequently
- * numerator) within a limit sacrificing some accuracy - but not much
- * If denominator and numerator are already small (such as at 400 MHz)
- * no adjustment is needed
- */
-#define EMIF_PERIOD_DEN_LIMIT  1000
-/*
- * Maximum number of different frequencies supported by EMIF driver
- * Determines the number of entries in the pointer array for register
- * cache
- */
-#define EMIF_MAX_NUM_FREQUENCIES       6
-/*
- * Indices into the Addressing Table array.
- * One entry each for all the different types of devices with different
- * addressing schemes
- */
-#define ADDR_TABLE_INDEX64M    0
-#define ADDR_TABLE_INDEX128M   1
-#define ADDR_TABLE_INDEX256M   2
-#define ADDR_TABLE_INDEX512M   3
-#define ADDR_TABLE_INDEX1GS4   4
-#define ADDR_TABLE_INDEX2GS4   5
-#define ADDR_TABLE_INDEX4G     6
-#define ADDR_TABLE_INDEX8G     7
-#define ADDR_TABLE_INDEX1GS2   8
-#define ADDR_TABLE_INDEX2GS2   9
-#define ADDR_TABLE_INDEXMAX    10
-
-/* Number of Row bits */
-#define ROW_9  0
-#define ROW_10 1
-#define ROW_11 2
-#define ROW_12 3
-#define ROW_13 4
-#define ROW_14 5
-#define ROW_15 6
-#define ROW_16 7
-
-/* Number of Column bits */
-#define COL_8   0
-#define COL_9   1
-#define COL_10  2
-#define COL_11  3
-#define COL_7   4 /*Not supported by OMAP included for completeness */
-
-/* Number of Banks*/
-#define BANKS1 0
-#define BANKS2 1
-#define BANKS4 2
-#define BANKS8 3
-
-/* Refresh rate in micro seconds x 10 */
-#define T_REFI_15_6    156
-#define T_REFI_7_8     78
-#define T_REFI_3_9     39
-
-#define EBANK_CS1_DIS  0
-#define EBANK_CS1_EN   1
-
-/* Read Latency used by the device at reset */
-#define RL_BOOT                3
-/* Read Latency for the highest frequency you want to use */
-#define RL_FINAL       6
-
-/* Interleaving policies at EMIF level- between banks and Chip Selects */
-#define EMIF_INTERLEAVING_POLICY_MAX_INTERLEAVING      0
-#define EMIF_INTERLEAVING_POLICY_NO_BANK_INTERLEAVING  3
-
-/*
- * Interleaving policy to be used
- * Currently set to MAX interleaving for better performance
- */
-#define EMIF_INTERLEAVING_POLICY EMIF_INTERLEAVING_POLICY_MAX_INTERLEAVING
-
-/* State of the core voltage:
- * This is important for some parameters such as read idle control and
- * ZQ calibration timings. Timings are much stricter when voltage ramp
- * is happening compared to when the voltage is stable.
- * We need to calculate two sets of values for these parameters and use
- * them accordingly
- */
-#define LPDDR2_VOLTAGE_STABLE  0
-#define LPDDR2_VOLTAGE_RAMPING 1
-
-/* Length of the forced read idle period in terms of cycles */
-#define EMIF_REG_READ_IDLE_LEN_VAL     5
-
-/* Interval between forced 'read idles' */
-/* To be used when voltage is changed for DPS/DVFS - 1us */
-#define READ_IDLE_INTERVAL_DVFS                (1*1000)
-/*
- * To be used when voltage is not scaled except by Smart Reflex
- * 50us - or maximum value will do
- */
-#define READ_IDLE_INTERVAL_NORMAL      (50*1000)
-
-
-/*
- * Unless voltage is changing due to DVFS one ZQCS command every 50ms should
- * be enough. This shoule be enough also in the case when voltage is changing
- * due to smart-reflex.
- */
-#define EMIF_ZQCS_INTERVAL_NORMAL_IN_US        (50*1000)
-/*
- * If voltage is changing due to DVFS ZQCS should be performed more
- * often(every 50us)
- */
-#define EMIF_ZQCS_INTERVAL_DVFS_IN_US  50
-
-/* The interval between ZQCL commands as a multiple of ZQCS interval */
-#define REG_ZQ_ZQCL_MULT               4
-/* The interval between ZQINIT commands as a multiple of ZQCL interval */
-#define REG_ZQ_ZQINIT_MULT             3
-/* Enable ZQ Calibration on exiting Self-refresh */
-#define REG_ZQ_SFEXITEN_ENABLE         1
-/*
- * ZQ Calibration simultaneously on both chip-selects:
- * Needs one calibration resistor per CS
- * None of the boards that we know of have this capability
- * So disabled by default
- */
-#define REG_ZQ_DUALCALEN_DISABLE       0
-/*
- * Enable ZQ Calibration by default on CS0. If we are asked to program
- * the EMIF there will be something connected to CS0 for sure
- */
-#define REG_ZQ_CS0EN_ENABLE            1
-
-/* EMIF_PWR_MGMT_CTRL register */
-/* Low power modes */
-#define LP_MODE_DISABLE                0
-#define LP_MODE_CLOCK_STOP     1
-#define LP_MODE_SELF_REFRESH   2
-#define LP_MODE_PWR_DN         3
-
-/* REG_DPD_EN */
-#define DPD_DISABLE    0
-#define DPD_ENABLE     1
-
-/* Maximum delay before Low Power Modes */
-#define REG_CS_TIM             0xF
-#define REG_SR_TIM             0xF
-#define REG_PD_TIM             0xF
-
-/* EMIF_PWR_MGMT_CTRL register */
-#define EMIF_PWR_MGMT_CTRL (\
-       ((REG_CS_TIM << OMAP44XX_REG_CS_TIM_SHIFT) & OMAP44XX_REG_CS_TIM_MASK)|\
-       ((REG_SR_TIM << OMAP44XX_REG_SR_TIM_SHIFT) & OMAP44XX_REG_SR_TIM_MASK)|\
-       ((REG_PD_TIM << OMAP44XX_REG_PD_TIM_SHIFT) & OMAP44XX_REG_PD_TIM_MASK)|\
-       ((REG_PD_TIM << OMAP44XX_REG_PD_TIM_SHIFT) & OMAP44XX_REG_PD_TIM_MASK)|\
-       ((LP_MODE_DISABLE << OMAP44XX_REG_LP_MODE_SHIFT)\
-                       & OMAP44XX_REG_LP_MODE_MASK) |\
-       ((DPD_DISABLE << OMAP44XX_REG_DPD_EN_SHIFT)\
-                       & OMAP44XX_REG_DPD_EN_MASK))\
-
-#define EMIF_PWR_MGMT_CTRL_SHDW (\
-       ((REG_CS_TIM << OMAP44XX_REG_CS_TIM_SHDW_SHIFT)\
-                       & OMAP44XX_REG_CS_TIM_SHDW_MASK) |\
-       ((REG_SR_TIM << OMAP44XX_REG_SR_TIM_SHDW_SHIFT)\
-                       & OMAP44XX_REG_SR_TIM_SHDW_MASK) |\
-       ((REG_PD_TIM << OMAP44XX_REG_PD_TIM_SHDW_SHIFT)\
-                       & OMAP44XX_REG_PD_TIM_SHDW_MASK) |\
-       ((REG_PD_TIM << OMAP44XX_REG_PD_TIM_SHDW_SHIFT)\
-                       & OMAP44XX_REG_PD_TIM_SHDW_MASK))
-
-/* EMIF_L3_CONFIG register value */
-#define EMIF_L3_CONFIG_VAL_SYS_10_LL_0 0x0A0000FF
-#define EMIF_L3_CONFIG_VAL_SYS_10_MPU_3_LL_0   0x0A300000
-/*
- * Value of bits 12:31 of DDR_PHY_CTRL_1 register:
- * All these fields have magic values dependent on frequency and
- * determined by PHY and DLL integration with EMIF. Setting the magic
- * values suggested by hw team.
- */
-#define EMIF_DDR_PHY_CTRL_1_BASE_VAL                   0x049FF
-#define EMIF_DLL_SLAVE_DLY_CTRL_400_MHZ                        0x41
-#define EMIF_DLL_SLAVE_DLY_CTRL_200_MHZ                        0x80
-#define EMIF_DLL_SLAVE_DLY_CTRL_100_MHZ_AND_LESS       0xFF
-
-/*
-* MR1 value:
-* Burst length : 8
-* Burst type   : sequential
-* Wrap         : enabled
-* nWR          : 3(default). EMIF does not do pre-charge.
-*              : So nWR is don't care
-*/
-#define MR1_BL_8_BT_SEQ_WRAP_EN_NWR_3  0x23
-
-/* MR2 */
-#define MR2_RL3_WL1                    1
-#define MR2_RL4_WL2                    2
-#define MR2_RL5_WL2                    3
-#define MR2_RL6_WL3                    4
-
-/* MR10: ZQ calibration codes */
-#define MR10_ZQ_ZQCS           0x56
-#define MR10_ZQ_ZQCL           0xAB
-#define MR10_ZQ_ZQINIT         0xFF
-#define MR10_ZQ_ZQRESET                0xC3
-
-/* TEMP_ALERT_CONFIG */
-#define TEMP_ALERT_POLL_INTERVAL_MS    360 /* for temp gradient - 5 C/s */
-#define TEMP_ALERT_CONFIG_DEVCT_1      0
-#define TEMP_ALERT_CONFIG_DEVWDT_32    2
-
-/* MR16 value: refresh full array(no partial array self refresh) */
-#define MR16_REF_FULL_ARRAY    0
-
-/*
- * Maximum number of entries we keep in our array of timing tables
- * We need not keep all the speed bins supported by the device
- * We need to keep timing tables for only the speed bins that we
- * are interested in
- */
-#define MAX_NUM_SPEEDBINS      4
-
-/* LPDDR2 Densities */
-#define LPDDR2_DENSITY_64Mb    0
-#define LPDDR2_DENSITY_128Mb   1
-#define LPDDR2_DENSITY_256Mb   2
-#define LPDDR2_DENSITY_512Mb   3
-#define LPDDR2_DENSITY_1Gb     4
-#define LPDDR2_DENSITY_2Gb     5
-#define LPDDR2_DENSITY_4Gb     6
-#define LPDDR2_DENSITY_8Gb     7
-#define LPDDR2_DENSITY_16Gb    8
-#define LPDDR2_DENSITY_32Gb    9
-
-/* LPDDR2 type */
-#define        LPDDR2_TYPE_S4  0
-#define        LPDDR2_TYPE_S2  1
-#define        LPDDR2_TYPE_NVM 2
-
-/* LPDDR2 IO width */
-#define        LPDDR2_IO_WIDTH_32      0
-#define        LPDDR2_IO_WIDTH_16      1
-#define        LPDDR2_IO_WIDTH_8       2
-
-/* Mode register numbers */
-#define LPDDR2_MR0     0
-#define LPDDR2_MR1     1
-#define LPDDR2_MR2     2
-#define LPDDR2_MR3     3
-#define LPDDR2_MR4     4
-#define LPDDR2_MR5     5
-#define LPDDR2_MR6     6
-#define LPDDR2_MR7     7
-#define LPDDR2_MR8     8
-#define LPDDR2_MR9     9
-#define LPDDR2_MR10    10
-#define LPDDR2_MR11    11
-#define LPDDR2_MR16    16
-#define LPDDR2_MR17    17
-#define LPDDR2_MR18    18
-
-/* MR0 */
-#define LPDDR2_MR0_DAI_SHIFT   0
-#define LPDDR2_MR0_DAI_MASK    1
-#define LPDDR2_MR0_DI_SHIFT    1
-#define LPDDR2_MR0_DI_MASK     (1 << 1)
-#define LPDDR2_MR0_DNVI_SHIFT  2
-#define LPDDR2_MR0_DNVI_MASK   (1 << 2)
-
-/* MR4 */
-#define MR4_SDRAM_REF_RATE_SHIFT       0
-#define MR4_SDRAM_REF_RATE_MASK                7
-#define MR4_TUF_SHIFT                  7
-#define MR4_TUF_MASK                   (1 << 7)
-
-/* MR4 SDRAM Refresh Rate field values */
-#define SDRAM_TEMP_LESS_LOW_SHUTDOWN                   0x0
-#define SDRAM_TEMP_LESS_4X_REFRESH_AND_TIMINGS         0x1
-#define SDRAM_TEMP_LESS_2X_REFRESH_AND_TIMINGS         0x2
-#define SDRAM_TEMP_NOMINAL                             0x3
-#define SDRAM_TEMP_RESERVED_4                          0x4
-#define SDRAM_TEMP_HIGH_DERATE_REFRESH                 0x5
-#define SDRAM_TEMP_HIGH_DERATE_REFRESH_AND_TIMINGS     0x6
-#define SDRAM_TEMP_VERY_HIGH_SHUTDOWN                  0x7
-
-#define LPDDR2_MANUFACTURER_SAMSUNG    1
-#define LPDDR2_MANUFACTURER_QIMONDA    2
-#define LPDDR2_MANUFACTURER_ELPIDA     3
-#define LPDDR2_MANUFACTURER_ETRON      4
-#define LPDDR2_MANUFACTURER_NANYA      5
-#define LPDDR2_MANUFACTURER_HYNIX      6
-#define LPDDR2_MANUFACTURER_MOSEL      7
-#define LPDDR2_MANUFACTURER_WINBOND    8
-#define LPDDR2_MANUFACTURER_ESMT       9
-#define LPDDR2_MANUFACTURER_SPANSION 11
-#define LPDDR2_MANUFACTURER_SST                12
-#define LPDDR2_MANUFACTURER_ZMOS       13
-#define LPDDR2_MANUFACTURER_INTEL      14
-#define LPDDR2_MANUFACTURER_NUMONYX    254
-#define LPDDR2_MANUFACTURER_MICRON     255
-
-/* MR8 register fields */
-#define MR8_TYPE_SHIFT         0x0
-#define MR8_TYPE_MASK          0x3
-#define MR8_DENSITY_SHIFT      0x2
-#define MR8_DENSITY_MASK       (0xF << 0x2)
-#define MR8_IO_WIDTH_SHIFT     0x6
-#define MR8_IO_WIDTH_MASK      (0x3 << 0x6)
-
-struct lpddr2_addressing {
-       u8      num_banks;
-       u8      t_REFI_us_x10;
-       u8      row_sz[2]; /* One entry each for x32 and x16 */
-       u8      col_sz[2]; /* One entry each for x32 and x16 */
-};
-
-/* Structure for timings from the DDR datasheet */
-struct lpddr2_ac_timings {
-       u32 max_freq;
-       u8 RL;
-       u8 tRPab;
-       u8 tRCD;
-       u8 tWR;
-       u8 tRASmin;
-       u8 tRRD;
-       u8 tWTRx2;
-       u8 tXSR;
-       u8 tXPx2;
-       u8 tRFCab;
-       u8 tRTPx2;
-       u8 tCKE;
-       u8 tCKESR;
-       u8 tZQCS;
-       u32 tZQCL;
-       u32 tZQINIT;
-       u8 tDQSCKMAXx2;
-       u8 tRASmax;
-       u8 tFAW;
-
-};
-
-/*
- * Min tCK values for some of the parameters:
- * If the calculated clock cycles for the respective parameter is
- * less than the corresponding min tCK value, we need to set the min
- * tCK value. This may happen at lower frequencies.
- */
-struct lpddr2_min_tck {
-       u32 tRL;
-       u32 tRP_AB;
-       u32 tRCD;
-       u32 tWR;
-       u32 tRAS_MIN;
-       u32 tRRD;
-       u32 tWTR;
-       u32 tXP;
-       u32 tRTP;
-       u8  tCKE;
-       u32 tCKESR;
-       u32 tFAW;
-};
-
-struct lpddr2_device_details {
-       u8      type;
-       u8      density;
-       u8      io_width;
-       u8      manufacturer;
-};
-
-struct lpddr2_device_timings {
-       const struct lpddr2_ac_timings **ac_timings;
-       const struct lpddr2_min_tck *min_tck;
-};
-
-/* Details of the devices connected to each chip-select of an EMIF instance */
-struct emif_device_details {
-       const struct lpddr2_device_details *cs0_device_details;
-       const struct lpddr2_device_details *cs1_device_details;
-       const struct lpddr2_device_timings *cs0_device_timings;
-       const struct lpddr2_device_timings *cs1_device_timings;
-};
-
-/*
- * Structure containing shadow of important registers in EMIF
- * The calculation function fills in this structure to be later used for
- * initialization and DVFS
- */
-struct emif_regs {
-       u32 freq;
-       u32 sdram_config_init;
-       u32 sdram_config;
-       u32 ref_ctrl;
-       u32 sdram_tim1;
-       u32 sdram_tim2;
-       u32 sdram_tim3;
-       u32 read_idle_ctrl;
-       u32 zq_config;
-       u32 temp_alert_config;
-       u32 emif_ddr_phy_ctlr_1_init;
-       u32 emif_ddr_phy_ctlr_1;
-};
-
-/* assert macros */
-#if defined(DEBUG)
-#define emif_assert(c) ({ if (!(c)) for (;;); })
-#else
-#define emif_assert(c) ({ if (0) hang(); })
-#endif
-
-#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
-void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs);
-void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs);
-#else
-struct lpddr2_device_details *emif_get_device_details(u32 emif_nr, u8 cs,
-                       struct lpddr2_device_details *lpddr2_dev_details);
-void emif_get_device_timings(u32 emif_nr,
-               const struct lpddr2_device_timings **cs0_device_timings,
-               const struct lpddr2_device_timings **cs1_device_timings);
-#endif
-
-#endif
index 733d8ed34a90c482381eb884c35247818a317ad1..74439c9d9b4df2e6aa85a268bc476ead8661f138 100644 (file)
@@ -33,7 +33,7 @@
 #define OMAP_HSMMC2_BASE       0x480B4100
 #define OMAP_HSMMC3_BASE       0x480AD100
 
-typedef struct hsmmc {
+struct hsmmc {
        unsigned char res1[0x10];
        unsigned int sysconfig;         /* 0x10 */
        unsigned int sysstatus;         /* 0x14 */
@@ -55,7 +55,7 @@ typedef struct hsmmc {
        unsigned int ie;                /* 0x134 */
        unsigned char res4[0x8];
        unsigned int capa;              /* 0x140 */
-} hsmmc_t;
+};
 
 /*
  * OMAP HS MMC Bit definitions
@@ -160,13 +160,6 @@ typedef struct hsmmc {
 #define CLK_400KHZ                     1
 #define CLK_MISC                       2
 
-typedef struct {
-       unsigned int card_type;
-       unsigned int version;
-       unsigned int mode;
-       unsigned int size;
-       unsigned int RCA;
-} mmc_card_data;
 #define RSP_TYPE_NONE  (RSP_TYPE_NORSP   | CCCE_NOCHECK | CICE_NOCHECK)
 #define MMC_CMD0       (INDEX(0)  | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE)
 
similarity index 87%
rename from arch/arm/include/asm/arch-omap4/omap4.h
rename to arch/arm/include/asm/arch-omap4/omap.h
index 61ebb3d46d5bc52c79fed1ddd4f9718fbddfd902..4d8c89ffbdff1450cc882d54f4840319aa91817a 100644 (file)
@@ -44,7 +44,8 @@
 
 #define OMAP44XX_DRAM_ADDR_SPACE_START 0x80000000
 #define OMAP44XX_DRAM_ADDR_SPACE_END   0xD0000000
-
+#define DRAM_ADDR_SPACE_START  OMAP44XX_DRAM_ADDR_SPACE_START
+#define DRAM_ADDR_SPACE_END    OMAP44XX_DRAM_ADDR_SPACE_END
 
 /* CONTROL */
 #define CTRL_BASE              (OMAP44XX_L4_CORE_BASE + 0x2000)
 /* CONTROL_ID_CODE */
 #define CONTROL_ID_CODE                0x4A002204
 
-/* 4430 */
-#define OMAP4430_CONTROL_ID_CODE_ES1_0 0x0B85202F
-#define OMAP4430_CONTROL_ID_CODE_ES2_0 0x1B85202F
-#define OMAP4430_CONTROL_ID_CODE_ES2_1 0x3B95C02F
-#define OMAP4430_CONTROL_ID_CODE_ES2_2 0x4B95C02F
-#define OMAP4430_CONTROL_ID_CODE_ES2_3 0x6B95C02F
-
-/* 4460 */
+#define OMAP4_CONTROL_ID_CODE_ES1_0    0x0B85202F
+#define OMAP4_CONTROL_ID_CODE_ES2_0    0x1B85202F
+#define OMAP4_CONTROL_ID_CODE_ES2_1    0x3B95C02F
+#define OMAP4_CONTROL_ID_CODE_ES2_2    0x4B95C02F
+#define OMAP4_CONTROL_ID_CODE_ES2_3    0x6B95C02F
 #define OMAP4460_CONTROL_ID_CODE_ES1_0 0x0B94E02F
 #define OMAP4460_CONTROL_ID_CODE_ES1_1 0x2B94E02F
 
@@ -151,7 +149,7 @@ struct omap4_sys_ctrl_regs {
        unsigned int control_ldosram_mpu_voltage_ctrl;  /* 0x4A002324 */
        unsigned int control_ldosram_core_voltage_ctrl; /* 0x4A002328 */
        unsigned int pad3[260277];
-       unsigned int control_pbiaslite;                 /* 0x4A100600 */
+       unsigned int control_pbiaslite;                 /* 0x4A100600 */
        unsigned int pad4[63];
        unsigned int control_efuse_1;                   /* 0x4A100700 */
        unsigned int control_efuse_2;                   /* 0x4A100704 */
@@ -188,16 +186,6 @@ struct control_lpddr2io_regs {
 #define OMAP4_SRAM_SCRATCH_EMIF_T_DEN  (SRAM_SCRATCH_SPACE_ADDR + 0x10)
 #define OMAP4_SRAM_SCRATCH_SPACE_END   (SRAM_SCRATCH_SPACE_ADDR + 0x14)
 
-/* Silicon revisions */
-#define OMAP4430_SILICON_ID_INVALID    0xFFFFFFFF
-#define OMAP4430_ES1_0 0x44300100
-#define OMAP4430_ES2_0 0x44300200
-#define OMAP4430_ES2_1 0x44300210
-#define OMAP4430_ES2_2 0x44300220
-#define OMAP4430_ES2_3 0x44300230
-#define OMAP4460_ES1_0 0x44600100
-#define OMAP4460_ES1_1 0x44600110
-
 /* ROM code defines */
 /* Boot device */
 #define BOOT_DEVICE_MASK       0xFF
@@ -205,5 +193,21 @@ struct control_lpddr2io_regs {
 #define DEV_DESC_PTR_OFFSET    0x4
 #define DEV_DATA_PTR_OFFSET    0x18
 #define BOOT_MODE_OFFSET       0x8
+#define RESET_REASON_OFFSET    0x9
+#define CH_FLAGS_OFFSET                0xA
+
+#define CH_FLAGS_CHSETTINGS    (0x1 << 0)
+#define CH_FLAGS_CHRAM         (0x1 << 1)
+#define CH_FLAGS_CHFLASH       (0x1 << 2)
+#define CH_FLAGS_CHMMCSD       (0x1 << 3)
 
+#ifndef __ASSEMBLY__
+struct omap_boot_parameters {
+       char *boot_message;
+       unsigned int mem_boot_descriptor;
+       unsigned char omap_bootdevice;
+       unsigned char reset_reason;
+       unsigned char ch_flags;
+};
+#endif
 #endif
index 1aacbb12e3f28d489e9ed3552a0500442120cbcc..4146e21818c541275c6311f094cdc8890b05363f 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef _SYS_PROTO_H_
 #define _SYS_PROTO_H_
 
-#include <asm/arch/omap4.h>
+#include <asm/arch/omap.h>
 #include <asm/arch/clocks.h>
 #include <asm/io.h>
 #include <asm/omap_common.h>
@@ -32,17 +32,17 @@ struct omap_sysinfo {
 };
 extern const struct omap_sysinfo sysinfo;
 
-extern struct omap4_prcm_regs *const prcm;
-
 void gpmc_init(void);
 void watchdog_init(void);
 u32 get_device_type(void);
 void do_set_mux(u32 base, struct pad_conf_entry const *array, int size);
+void set_muxconf_regs_essential(void);
 void set_muxconf_regs_non_essential(void);
 void sr32(void *, u32, u32, u32);
 u32 wait_on_value(u32, u32, void *, u32);
 void sdelay(unsigned long);
 void set_pl310_ctrl_reg(u32 val);
+void omap_rev_string(char *omap_rev_string);
 void setup_clocks_for_console(void);
 void prcm_init(void);
 void bypass_dpll(u32 *const base);
@@ -51,7 +51,17 @@ u32 get_sys_clk_freq(void);
 u32 omap4_ddr_clk(void);
 void cancel_out(u32 *num, u32 *den, u32 den_limit);
 void sdram_init(void);
-u32 omap4_sdram_size(void);
+u32 omap_sdram_size(void);
+u32 cortex_rev(void);
+void init_omap_revision(void);
+void do_io_settings(void);
+/*
+ * This is used to verify if the configuration header
+ * was executed by Romcode prior to control of transfer
+ * to the bootloader. SPL is responsible for saving and
+ * passing this to the u-boot.
+ */
+extern struct omap_boot_parameters boot_params;
 
 static inline u32 running_from_sdram(void)
 {
@@ -64,15 +74,17 @@ static inline u32 running_from_sdram(void)
 static inline u8 uboot_loaded_by_spl(void)
 {
        /*
-        * Configuration Header is not supported yet, so u-boot init running
-        * from SDRAM implies that it was loaded by SPL. When this situation
-        * changes one of these approaches could be taken:
-        * i.  Pass a magic from SPL to U-Boot and U-Boot save it at a known
-        *     location.
-        * ii. Check the OPP. CH can support only 50% OPP while SPL initializes
-        *     the DPLLs at 100% OPP.
+        * u-boot can be running from sdram either because of configuration
+        * Header or by SPL. If because of CH, then the romcode sets the
+        * CHSETTINGS executed bit to true in the boot parameter structure that
+        * it passes to the bootloader.This parameter is stored in the ch_flags
+        * variable by both SPL and u-boot.Check out for CHSETTINGS, which is a
+        * mandatory section if CH is present.
         */
-       return running_from_sdram();
+       if ((boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS))
+               return 0;
+       else
+               return running_from_sdram();
 }
 /*
  * The basic hardware init of OMAP(s_init()) can happen in 4
@@ -86,7 +98,7 @@ static inline u8 uboot_loaded_by_spl(void)
  * This function finds this context.
  * Defining as inline may help in compiling out unused functions in SPL
  */
-static inline u32 omap4_hw_init_context(void)
+static inline u32 omap_hw_init_context(void)
 {
 #ifdef CONFIG_SPL_BUILD
        return OMAP_INIT_CONTEXT_SPL;
diff --git a/arch/arm/include/asm/arch-omap5/clocks.h b/arch/arm/include/asm/arch-omap5/clocks.h
new file mode 100644 (file)
index 0000000..d0e6dd6
--- /dev/null
@@ -0,0 +1,722 @@
+/*
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ *     Aneesh V <aneesh@ti.com>
+ *     Sricharan R <r.sricharan@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 _CLOCKS_OMAP5_H_
+#define _CLOCKS_OMAP5_H_
+#include <common.h>
+
+/*
+ * Assuming a maximum of 1.5 GHz ARM speed and a minimum of 2 cycles per
+ * loop, allow for a minimum of 2 ms wait (in reality the wait will be
+ * much more than that)
+ */
+#define LDELAY         1000000
+
+#define CM_CLKMODE_DPLL_CORE           (OMAP54XX_L4_CORE_BASE + 0x4120)
+#define CM_CLKMODE_DPLL_PER            (OMAP54XX_L4_CORE_BASE + 0x8140)
+#define CM_CLKMODE_DPLL_MPU            (OMAP54XX_L4_CORE_BASE + 0x4160)
+#define CM_CLKSEL_CORE                 (OMAP54XX_L4_CORE_BASE + 0x4100)
+
+struct omap5_prcm_regs {
+       /* cm1.ckgen */
+       u32 cm_clksel_core;                     /* 4a004100 */
+       u32 pad001[1];                          /* 4a004104 */
+       u32 cm_clksel_abe;                      /* 4a004108 */
+       u32 pad002[1];                          /* 4a00410c */
+       u32 cm_dll_ctrl;                        /* 4a004110 */
+       u32 pad003[3];                          /* 4a004114 */
+       u32 cm_clkmode_dpll_core;               /* 4a004120 */
+       u32 cm_idlest_dpll_core;                /* 4a004124 */
+       u32 cm_autoidle_dpll_core;              /* 4a004128 */
+       u32 cm_clksel_dpll_core;                /* 4a00412c */
+       u32 cm_div_m2_dpll_core;                /* 4a004130 */
+       u32 cm_div_m3_dpll_core;                /* 4a004134 */
+       u32 cm_div_h11_dpll_core;               /* 4a004138 */
+       u32 cm_div_h12_dpll_core;               /* 4a00413c */
+       u32 cm_div_h13_dpll_core;               /* 4a004140 */
+       u32 cm_div_h14_dpll_core;               /* 4a004144 */
+       u32 cm_ssc_deltamstep_dpll_core;        /* 4a004148 */
+       u32 cm_ssc_modfreqdiv_dpll_core;        /* 4a00414c */
+       u32 cm_emu_override_dpll_core;          /* 4a004150 */
+
+       u32 cm_div_h22_dpllcore;                /* 4a004154 */
+       u32 cm_div_h23_dpll_core;               /* 4a004158 */
+       u32 pad0041[1];                         /* 4a00415c */
+       u32 cm_clkmode_dpll_mpu;                /* 4a004160 */
+       u32 cm_idlest_dpll_mpu;                 /* 4a004164 */
+       u32 cm_autoidle_dpll_mpu;               /* 4a004168 */
+       u32 cm_clksel_dpll_mpu;                 /* 4a00416c */
+       u32 cm_div_m2_dpll_mpu;                 /* 4a004170 */
+       u32 pad005[5];                          /* 4a004174 */
+       u32 cm_ssc_deltamstep_dpll_mpu;         /* 4a004188 */
+       u32 cm_ssc_modfreqdiv_dpll_mpu;         /* 4a00418c */
+       u32 pad006[3];                          /* 4a004190 */
+       u32 cm_bypclk_dpll_mpu;                 /* 4a00419c */
+       u32 cm_clkmode_dpll_iva;                /* 4a0041a0 */
+       u32 cm_idlest_dpll_iva;                 /* 4a0041a4 */
+       u32 cm_autoidle_dpll_iva;               /* 4a0041a8 */
+       u32 cm_clksel_dpll_iva;                 /* 4a0041ac */
+       u32 pad007[2];                          /* 4a0041b0 */
+       u32 cm_div_h11_dpll_iva;                /* 4a0041b8 */
+       u32 cm_div_h12_dpll_iva;                /* 4a0041bc */
+       u32 pad008[2];                          /* 4a0041c0 */
+       u32 cm_ssc_deltamstep_dpll_iva;         /* 4a0041c8 */
+       u32 cm_ssc_modfreqdiv_dpll_iva;         /* 4a0041cc */
+       u32 pad009[3];                          /* 4a0041d0 */
+       u32 cm_bypclk_dpll_iva;                 /* 4a0041dc */
+       u32 cm_clkmode_dpll_abe;                /* 4a0041e0 */
+       u32 cm_idlest_dpll_abe;                 /* 4a0041e4 */
+       u32 cm_autoidle_dpll_abe;               /* 4a0041e8 */
+       u32 cm_clksel_dpll_abe;                 /* 4a0041ec */
+       u32 cm_div_m2_dpll_abe;                 /* 4a0041f0 */
+       u32 cm_div_m3_dpll_abe;                 /* 4a0041f4 */
+       u32 pad010[4];                          /* 4a0041f8 */
+       u32 cm_ssc_deltamstep_dpll_abe;         /* 4a004208 */
+       u32 cm_ssc_modfreqdiv_dpll_abe;         /* 4a00420c */
+       u32 pad011[4];                          /* 4a004210 */
+       u32 cm_clkmode_dpll_ddrphy;             /* 4a004220 */
+       u32 cm_idlest_dpll_ddrphy;              /* 4a004224 */
+       u32 cm_autoidle_dpll_ddrphy;            /* 4a004228 */
+       u32 cm_clksel_dpll_ddrphy;              /* 4a00422c */
+       u32 cm_div_m2_dpll_ddrphy;              /* 4a004230 */
+       u32 pad012[1];                          /* 4a004234 */
+       u32 cm_div_h11_dpll_ddrphy;             /* 4a004238 */
+       u32 cm_div_h12_dpll_ddrphy;             /* 4a00423c */
+       u32 cm_div_h13_dpll_ddrphy;             /* 4a004240 */
+       u32 pad013[1];                          /* 4a004244 */
+       u32 cm_ssc_deltamstep_dpll_ddrphy;      /* 4a004248 */
+       u32 pad014[5];                          /* 4a00424c */
+       u32 cm_shadow_freq_config1;             /* 4a004260 */
+       u32 pad0141[47];                        /* 4a004264 */
+       u32 cm_mpu_mpu_clkctrl;                 /* 4a004320 */
+
+
+       /* cm1.dsp */
+       u32 pad015[55];                         /* 4a004324 */
+       u32 cm_dsp_clkstctrl;                   /* 4a004400 */
+       u32 pad016[7];                          /* 4a004404 */
+       u32 cm_dsp_dsp_clkctrl;                 /* 4a004420 */
+
+       /* cm1.abe */
+       u32 pad017[55];                         /* 4a004424 */
+       u32 cm1_abe_clkstctrl;                  /* 4a004500 */
+       u32 pad018[7];                          /* 4a004504 */
+       u32 cm1_abe_l4abe_clkctrl;              /* 4a004520 */
+       u32 pad019[1];                          /* 4a004524 */
+       u32 cm1_abe_aess_clkctrl;               /* 4a004528 */
+       u32 pad020[1];                          /* 4a00452c */
+       u32 cm1_abe_pdm_clkctrl;                /* 4a004530 */
+       u32 pad021[1];                          /* 4a004534 */
+       u32 cm1_abe_dmic_clkctrl;               /* 4a004538 */
+       u32 pad022[1];                          /* 4a00453c */
+       u32 cm1_abe_mcasp_clkctrl;              /* 4a004540 */
+       u32 pad023[1];                          /* 4a004544 */
+       u32 cm1_abe_mcbsp1_clkctrl;             /* 4a004548 */
+       u32 pad024[1];                          /* 4a00454c */
+       u32 cm1_abe_mcbsp2_clkctrl;             /* 4a004550 */
+       u32 pad025[1];                          /* 4a004554 */
+       u32 cm1_abe_mcbsp3_clkctrl;             /* 4a004558 */
+       u32 pad026[1];                          /* 4a00455c */
+       u32 cm1_abe_slimbus_clkctrl;            /* 4a004560 */
+       u32 pad027[1];                          /* 4a004564 */
+       u32 cm1_abe_timer5_clkctrl;             /* 4a004568 */
+       u32 pad028[1];                          /* 4a00456c */
+       u32 cm1_abe_timer6_clkctrl;             /* 4a004570 */
+       u32 pad029[1];                          /* 4a004574 */
+       u32 cm1_abe_timer7_clkctrl;             /* 4a004578 */
+       u32 pad030[1];                          /* 4a00457c */
+       u32 cm1_abe_timer8_clkctrl;             /* 4a004580 */
+       u32 pad031[1];                          /* 4a004584 */
+       u32 cm1_abe_wdt3_clkctrl;               /* 4a004588 */
+
+       /* cm2.ckgen */
+       u32 pad032[3805];                       /* 4a00458c */
+       u32 cm_clksel_mpu_m3_iss_root;          /* 4a008100 */
+       u32 cm_clksel_usb_60mhz;                /* 4a008104 */
+       u32 cm_scale_fclk;                      /* 4a008108 */
+       u32 pad033[1];                          /* 4a00810c */
+       u32 cm_core_dvfs_perf1;                 /* 4a008110 */
+       u32 cm_core_dvfs_perf2;                 /* 4a008114 */
+       u32 cm_core_dvfs_perf3;                 /* 4a008118 */
+       u32 cm_core_dvfs_perf4;                 /* 4a00811c */
+       u32 pad034[1];                          /* 4a008120 */
+       u32 cm_core_dvfs_current;               /* 4a008124 */
+       u32 cm_iva_dvfs_perf_tesla;             /* 4a008128 */
+       u32 cm_iva_dvfs_perf_ivahd;             /* 4a00812c */
+       u32 cm_iva_dvfs_perf_abe;               /* 4a008130 */
+       u32 pad035[1];                          /* 4a008134 */
+       u32 cm_iva_dvfs_current;                /* 4a008138 */
+       u32 pad036[1];                          /* 4a00813c */
+       u32 cm_clkmode_dpll_per;                /* 4a008140 */
+       u32 cm_idlest_dpll_per;                 /* 4a008144 */
+       u32 cm_autoidle_dpll_per;               /* 4a008148 */
+       u32 cm_clksel_dpll_per;                 /* 4a00814c */
+       u32 cm_div_m2_dpll_per;                 /* 4a008150 */
+       u32 cm_div_m3_dpll_per;                 /* 4a008154 */
+       u32 cm_div_h11_dpll_per;                /* 4a008158 */
+       u32 cm_div_h12_dpll_per;                /* 4a00815c */
+       u32 pad0361[1];                         /* 4a008160 */
+       u32 cm_div_h14_dpll_per;                /* 4a008164 */
+       u32 cm_ssc_deltamstep_dpll_per;         /* 4a008168 */
+       u32 cm_ssc_modfreqdiv_dpll_per;         /* 4a00816c */
+       u32 cm_emu_override_dpll_per;           /* 4a008170 */
+       u32 pad037[3];                          /* 4a008174 */
+       u32 cm_clkmode_dpll_usb;                /* 4a008180 */
+       u32 cm_idlest_dpll_usb;                 /* 4a008184 */
+       u32 cm_autoidle_dpll_usb;               /* 4a008188 */
+       u32 cm_clksel_dpll_usb;                 /* 4a00818c */
+       u32 cm_div_m2_dpll_usb;                 /* 4a008190 */
+       u32 pad038[5];                          /* 4a008194 */
+       u32 cm_ssc_deltamstep_dpll_usb;         /* 4a0081a8 */
+       u32 cm_ssc_modfreqdiv_dpll_usb;         /* 4a0081ac */
+       u32 pad039[1];                          /* 4a0081b0 */
+       u32 cm_clkdcoldo_dpll_usb;              /* 4a0081b4 */
+       u32 pad040[2];                          /* 4a0081b8 */
+       u32 cm_clkmode_dpll_unipro;             /* 4a0081c0 */
+       u32 cm_idlest_dpll_unipro;              /* 4a0081c4 */
+       u32 cm_autoidle_dpll_unipro;            /* 4a0081c8 */
+       u32 cm_clksel_dpll_unipro;              /* 4a0081cc */
+       u32 cm_div_m2_dpll_unipro;              /* 4a0081d0 */
+       u32 pad041[5];                          /* 4a0081d4 */
+       u32 cm_ssc_deltamstep_dpll_unipro;      /* 4a0081e8 */
+       u32 cm_ssc_modfreqdiv_dpll_unipro;      /* 4a0081ec */
+
+       /* cm2.core */
+       u32 pad0411[324];                       /* 4a0081f0 */
+       u32 cm_l3_1_clkstctrl;                  /* 4a008700 */
+       u32 pad042[1];                          /* 4a008704 */
+       u32 cm_l3_1_dynamicdep;                 /* 4a008708 */
+       u32 pad043[5];                          /* 4a00870c */
+       u32 cm_l3_1_l3_1_clkctrl;               /* 4a008720 */
+       u32 pad044[55];                         /* 4a008724 */
+       u32 cm_l3_2_clkstctrl;                  /* 4a008800 */
+       u32 pad045[1];                          /* 4a008804 */
+       u32 cm_l3_2_dynamicdep;                 /* 4a008808 */
+       u32 pad046[5];                          /* 4a00880c */
+       u32 cm_l3_2_l3_2_clkctrl;               /* 4a008820 */
+       u32 pad047[1];                          /* 4a008824 */
+       u32 cm_l3_2_gpmc_clkctrl;               /* 4a008828 */
+       u32 pad048[1];                          /* 4a00882c */
+       u32 cm_l3_2_ocmc_ram_clkctrl;           /* 4a008830 */
+       u32 pad049[51];                         /* 4a008834 */
+       u32 cm_mpu_m3_clkstctrl;                /* 4a008900 */
+       u32 cm_mpu_m3_staticdep;                /* 4a008904 */
+       u32 cm_mpu_m3_dynamicdep;               /* 4a008908 */
+       u32 pad050[5];                          /* 4a00890c */
+       u32 cm_mpu_m3_mpu_m3_clkctrl;           /* 4a008920 */
+       u32 pad051[55];                         /* 4a008924 */
+       u32 cm_sdma_clkstctrl;                  /* 4a008a00 */
+       u32 cm_sdma_staticdep;                  /* 4a008a04 */
+       u32 cm_sdma_dynamicdep;                 /* 4a008a08 */
+       u32 pad052[5];                          /* 4a008a0c */
+       u32 cm_sdma_sdma_clkctrl;               /* 4a008a20 */
+       u32 pad053[55];                         /* 4a008a24 */
+       u32 cm_memif_clkstctrl;                 /* 4a008b00 */
+       u32 pad054[7];                          /* 4a008b04 */
+       u32 cm_memif_dmm_clkctrl;               /* 4a008b20 */
+       u32 pad055[1];                          /* 4a008b24 */
+       u32 cm_memif_emif_fw_clkctrl;           /* 4a008b28 */
+       u32 pad056[1];                          /* 4a008b2c */
+       u32 cm_memif_emif_1_clkctrl;            /* 4a008b30 */
+       u32 pad057[1];                          /* 4a008b34 */
+       u32 cm_memif_emif_2_clkctrl;            /* 4a008b38 */
+       u32 pad058[1];                          /* 4a008b3c */
+       u32 cm_memif_dll_clkctrl;               /* 4a008b40 */
+       u32 pad059[3];                          /* 4a008b44 */
+       u32 cm_memif_emif_h1_clkctrl;           /* 4a008b50 */
+       u32 pad060[1];                          /* 4a008b54 */
+       u32 cm_memif_emif_h2_clkctrl;           /* 4a008b58 */
+       u32 pad061[1];                          /* 4a008b5c */
+       u32 cm_memif_dll_h_clkctrl;             /* 4a008b60 */
+       u32 pad062[39];                         /* 4a008b64 */
+       u32 cm_c2c_clkstctrl;                   /* 4a008c00 */
+       u32 cm_c2c_staticdep;                   /* 4a008c04 */
+       u32 cm_c2c_dynamicdep;                  /* 4a008c08 */
+       u32 pad063[5];                          /* 4a008c0c */
+       u32 cm_c2c_sad2d_clkctrl;               /* 4a008c20 */
+       u32 pad064[1];                          /* 4a008c24 */
+       u32 cm_c2c_modem_icr_clkctrl;           /* 4a008c28 */
+       u32 pad065[1];                          /* 4a008c2c */
+       u32 cm_c2c_sad2d_fw_clkctrl;            /* 4a008c30 */
+       u32 pad066[51];                         /* 4a008c34 */
+       u32 cm_l4cfg_clkstctrl;                 /* 4a008d00 */
+       u32 pad067[1];                          /* 4a008d04 */
+       u32 cm_l4cfg_dynamicdep;                /* 4a008d08 */
+       u32 pad068[5];                          /* 4a008d0c */
+       u32 cm_l4cfg_l4_cfg_clkctrl;            /* 4a008d20 */
+       u32 pad069[1];                          /* 4a008d24 */
+       u32 cm_l4cfg_hw_sem_clkctrl;            /* 4a008d28 */
+       u32 pad070[1];                          /* 4a008d2c */
+       u32 cm_l4cfg_mailbox_clkctrl;           /* 4a008d30 */
+       u32 pad071[1];                          /* 4a008d34 */
+       u32 cm_l4cfg_sar_rom_clkctrl;           /* 4a008d38 */
+       u32 pad072[49];                         /* 4a008d3c */
+       u32 cm_l3instr_clkstctrl;               /* 4a008e00 */
+       u32 pad073[7];                          /* 4a008e04 */
+       u32 cm_l3instr_l3_3_clkctrl;            /* 4a008e20 */
+       u32 pad074[1];                          /* 4a008e24 */
+       u32 cm_l3instr_l3_instr_clkctrl;        /* 4a008e28 */
+       u32 pad075[5];                          /* 4a008e2c */
+       u32 cm_l3instr_intrconn_wp1_clkctrl;    /* 4a008e40 */
+
+
+       /* cm2.ivahd */
+       u32 pad076[47];                         /* 4a008e44 */
+       u32 cm_ivahd_clkstctrl;                 /* 4a008f00 */
+       u32 pad077[7];                          /* 4a008f04 */
+       u32 cm_ivahd_ivahd_clkctrl;             /* 4a008f20 */
+       u32 pad078[1];                          /* 4a008f24 */
+       u32 cm_ivahd_sl2_clkctrl;               /* 4a008f28 */
+
+       /* cm2.cam */
+       u32 pad079[53];                         /* 4a008f2c */
+       u32 cm_cam_clkstctrl;                   /* 4a009000 */
+       u32 pad080[7];                          /* 4a009004 */
+       u32 cm_cam_iss_clkctrl;                 /* 4a009020 */
+       u32 pad081[1];                          /* 4a009024 */
+       u32 cm_cam_fdif_clkctrl;                /* 4a009028 */
+
+       /* cm2.dss */
+       u32 pad082[53];                         /* 4a00902c */
+       u32 cm_dss_clkstctrl;                   /* 4a009100 */
+       u32 pad083[7];                          /* 4a009104 */
+       u32 cm_dss_dss_clkctrl;                 /* 4a009120 */
+
+       /* cm2.sgx */
+       u32 pad084[55];                         /* 4a009124 */
+       u32 cm_sgx_clkstctrl;                   /* 4a009200 */
+       u32 pad085[7];                          /* 4a009204 */
+       u32 cm_sgx_sgx_clkctrl;                 /* 4a009220 */
+
+       /* cm2.l3init */
+       u32 pad086[55];                         /* 4a009224 */
+       u32 cm_l3init_clkstctrl;                /* 4a009300 */
+
+       /* cm2.l3init */
+       u32 pad087[9];                          /* 4a009304 */
+       u32 cm_l3init_hsmmc1_clkctrl;           /* 4a009328 */
+       u32 pad088[1];                          /* 4a00932c */
+       u32 cm_l3init_hsmmc2_clkctrl;           /* 4a009330 */
+       u32 pad089[1];                          /* 4a009334 */
+       u32 cm_l3init_hsi_clkctrl;              /* 4a009338 */
+       u32 pad090[7];                          /* 4a00933c */
+       u32 cm_l3init_hsusbhost_clkctrl;        /* 4a009358 */
+       u32 pad091[1];                          /* 4a00935c */
+       u32 cm_l3init_hsusbotg_clkctrl;         /* 4a009360 */
+       u32 pad092[1];                          /* 4a009364 */
+       u32 cm_l3init_hsusbtll_clkctrl;         /* 4a009368 */
+       u32 pad093[3];                          /* 4a00936c */
+       u32 cm_l3init_p1500_clkctrl;            /* 4a009378 */
+       u32 pad094[21];                         /* 4a00937c */
+       u32 cm_l3init_fsusb_clkctrl;            /* 4a0093d0 */
+       u32 pad095[3];                          /* 4a0093d4 */
+       u32 cm_l3init_ocp2scp1_clkctrl;
+
+       /* cm2.l4per */
+       u32 pad096[7];                          /* 4a0093e4 */
+       u32 cm_l4per_clkstctrl;                 /* 4a009400 */
+       u32 pad097[1];                          /* 4a009404 */
+       u32 cm_l4per_dynamicdep;                /* 4a009408 */
+       u32 pad098[5];                          /* 4a00940c */
+       u32 cm_l4per_adc_clkctrl;               /* 4a009420 */
+       u32 pad100[1];                          /* 4a009424 */
+       u32 cm_l4per_gptimer10_clkctrl;         /* 4a009428 */
+       u32 pad101[1];                          /* 4a00942c */
+       u32 cm_l4per_gptimer11_clkctrl;         /* 4a009430 */
+       u32 pad102[1];                          /* 4a009434 */
+       u32 cm_l4per_gptimer2_clkctrl;          /* 4a009438 */
+       u32 pad103[1];                          /* 4a00943c */
+       u32 cm_l4per_gptimer3_clkctrl;          /* 4a009440 */
+       u32 pad104[1];                          /* 4a009444 */
+       u32 cm_l4per_gptimer4_clkctrl;          /* 4a009448 */
+       u32 pad105[1];                          /* 4a00944c */
+       u32 cm_l4per_gptimer9_clkctrl;          /* 4a009450 */
+       u32 pad106[1];                          /* 4a009454 */
+       u32 cm_l4per_elm_clkctrl;               /* 4a009458 */
+       u32 pad107[1];                          /* 4a00945c */
+       u32 cm_l4per_gpio2_clkctrl;             /* 4a009460 */
+       u32 pad108[1];                          /* 4a009464 */
+       u32 cm_l4per_gpio3_clkctrl;             /* 4a009468 */
+       u32 pad109[1];                          /* 4a00946c */
+       u32 cm_l4per_gpio4_clkctrl;             /* 4a009470 */
+       u32 pad110[1];                          /* 4a009474 */
+       u32 cm_l4per_gpio5_clkctrl;             /* 4a009478 */
+       u32 pad111[1];                          /* 4a00947c */
+       u32 cm_l4per_gpio6_clkctrl;             /* 4a009480 */
+       u32 pad112[1];                          /* 4a009484 */
+       u32 cm_l4per_hdq1w_clkctrl;             /* 4a009488 */
+       u32 pad113[1];                          /* 4a00948c */
+       u32 cm_l4per_hecc1_clkctrl;             /* 4a009490 */
+       u32 pad114[1];                          /* 4a009494 */
+       u32 cm_l4per_hecc2_clkctrl;             /* 4a009498 */
+       u32 pad115[1];                          /* 4a00949c */
+       u32 cm_l4per_i2c1_clkctrl;              /* 4a0094a0 */
+       u32 pad116[1];                          /* 4a0094a4 */
+       u32 cm_l4per_i2c2_clkctrl;              /* 4a0094a8 */
+       u32 pad117[1];                          /* 4a0094ac */
+       u32 cm_l4per_i2c3_clkctrl;              /* 4a0094b0 */
+       u32 pad118[1];                          /* 4a0094b4 */
+       u32 cm_l4per_i2c4_clkctrl;              /* 4a0094b8 */
+       u32 pad119[1];                          /* 4a0094bc */
+       u32 cm_l4per_l4per_clkctrl;             /* 4a0094c0 */
+       u32 pad1191[3];                         /* 4a0094c4 */
+       u32 cm_l4per_mcasp2_clkctrl;            /* 4a0094d0 */
+       u32 pad120[1];                          /* 4a0094d4 */
+       u32 cm_l4per_mcasp3_clkctrl;            /* 4a0094d8 */
+       u32 pad121[3];                          /* 4a0094dc */
+       u32 cm_l4per_mgate_clkctrl;             /* 4a0094e8 */
+       u32 pad123[1];                          /* 4a0094ec */
+       u32 cm_l4per_mcspi1_clkctrl;            /* 4a0094f0 */
+       u32 pad124[1];                          /* 4a0094f4 */
+       u32 cm_l4per_mcspi2_clkctrl;            /* 4a0094f8 */
+       u32 pad125[1];                          /* 4a0094fc */
+       u32 cm_l4per_mcspi3_clkctrl;            /* 4a009500 */
+       u32 pad126[1];                          /* 4a009504 */
+       u32 cm_l4per_mcspi4_clkctrl;            /* 4a009508 */
+       u32 pad127[1];                          /* 4a00950c */
+       u32 cm_l4per_gpio7_clkctrl;             /* 4a009510 */
+       u32 pad1271[1];                         /* 4a009514 */
+       u32 cm_l4per_gpio8_clkctrl;             /* 4a009518 */
+       u32 pad1272[1];                         /* 4a00951c */
+       u32 cm_l4per_mmcsd3_clkctrl;            /* 4a009520 */
+       u32 pad128[1];                          /* 4a009524 */
+       u32 cm_l4per_mmcsd4_clkctrl;            /* 4a009528 */
+       u32 pad129[1];                          /* 4a00952c */
+       u32 cm_l4per_msprohg_clkctrl;           /* 4a009530 */
+       u32 pad130[1];                          /* 4a009534 */
+       u32 cm_l4per_slimbus2_clkctrl;          /* 4a009538 */
+       u32 pad131[1];                          /* 4a00953c */
+       u32 cm_l4per_uart1_clkctrl;             /* 4a009540 */
+       u32 pad132[1];                          /* 4a009544 */
+       u32 cm_l4per_uart2_clkctrl;             /* 4a009548 */
+       u32 pad133[1];                          /* 4a00954c */
+       u32 cm_l4per_uart3_clkctrl;             /* 4a009550 */
+       u32 pad134[1];                          /* 4a009554 */
+       u32 cm_l4per_uart4_clkctrl;             /* 4a009558 */
+       u32 pad135[1];                          /* 4a00955c */
+       u32 cm_l4per_mmcsd5_clkctrl;            /* 4a009560 */
+       u32 pad136[1];                          /* 4a009564 */
+       u32 cm_l4per_i2c5_clkctrl;              /* 4a009568 */
+       u32 pad1371[1];                         /* 4a00956c */
+       u32 cm_l4per_uart5_clkctrl;             /* 4a009570 */
+       u32 pad1372[1];                         /* 4a009574 */
+       u32 cm_l4per_uart6_clkctrl;             /* 4a009578 */
+       u32 pad1374[1];                         /* 4a00957c */
+       u32 cm_l4sec_clkstctrl;                 /* 4a009580 */
+       u32 cm_l4sec_staticdep;                 /* 4a009584 */
+       u32 cm_l4sec_dynamicdep;                /* 4a009588 */
+       u32 pad138[5];                          /* 4a00958c */
+       u32 cm_l4sec_aes1_clkctrl;              /* 4a0095a0 */
+       u32 pad139[1];                          /* 4a0095a4 */
+       u32 cm_l4sec_aes2_clkctrl;              /* 4a0095a8 */
+       u32 pad140[1];                          /* 4a0095ac */
+       u32 cm_l4sec_des3des_clkctrl;           /* 4a0095b0 */
+       u32 pad141[1];                          /* 4a0095b4 */
+       u32 cm_l4sec_pkaeip29_clkctrl;          /* 4a0095b8 */
+       u32 pad142[1];                          /* 4a0095bc */
+       u32 cm_l4sec_rng_clkctrl;               /* 4a0095c0 */
+       u32 pad143[1];                          /* 4a0095c4 */
+       u32 cm_l4sec_sha2md51_clkctrl;          /* 4a0095c8 */
+       u32 pad144[3];                          /* 4a0095cc */
+       u32 cm_l4sec_cryptodma_clkctrl;         /* 4a0095d8 */
+       u32 pad145[3660425];                    /* 4a0095dc */
+
+       /* l4 wkup regs */
+       u32 pad201[6211];                       /* 4ae00000 */
+       u32 cm_abe_pll_ref_clksel;              /* 4ae0610c */
+       u32 cm_sys_clksel;                      /* 4ae06110 */
+       u32 pad202[1467];                       /* 4ae06114 */
+       u32 cm_wkup_clkstctrl;                  /* 4ae07800 */
+       u32 pad203[7];                          /* 4ae07804 */
+       u32 cm_wkup_l4wkup_clkctrl;             /* 4ae07820 */
+       u32 pad204;                             /* 4ae07824 */
+       u32 cm_wkup_wdtimer1_clkctrl;           /* 4ae07828 */
+       u32 pad205;                             /* 4ae0782c */
+       u32 cm_wkup_wdtimer2_clkctrl;           /* 4ae07830 */
+       u32 pad206;                             /* 4ae07834 */
+       u32 cm_wkup_gpio1_clkctrl;              /* 4ae07838 */
+       u32 pad207;                             /* 4ae0783c */
+       u32 cm_wkup_gptimer1_clkctrl;           /* 4ae07840 */
+       u32 pad208;                             /* 4ae07844 */
+       u32 cm_wkup_gptimer12_clkctrl;          /* 4ae07848 */
+       u32 pad209;                             /* 4ae0784c */
+       u32 cm_wkup_synctimer_clkctrl;          /* 4ae07850 */
+       u32 pad210;                             /* 4ae07854 */
+       u32 cm_wkup_usim_clkctrl;               /* 4ae07858 */
+       u32 pad211;                             /* 4ae0785c */
+       u32 cm_wkup_sarram_clkctrl;             /* 4ae07860 */
+       u32 pad212[5];                          /* 4ae07864 */
+       u32 cm_wkup_keyboard_clkctrl;           /* 4ae07878 */
+       u32 pad213;                             /* 4ae0787c */
+       u32 cm_wkup_rtc_clkctrl;                /* 4ae07880 */
+       u32 pad214;                             /* 4ae07884 */
+       u32 cm_wkup_bandgap_clkctrl;            /* 4ae07888 */
+       u32 pad215[197];                        /* 4ae0788c */
+       u32 prm_vc_val_bypass;                  /* 4ae07ba0 */
+       u32 pad216[4];
+       u32 prm_vc_cfg_i2c_mode;                /* 4ae07bb4 */
+       u32 prm_vc_cfg_i2c_clk;                 /* 4ae07bb8 */
+};
+
+/* DPLL register offsets */
+#define CM_CLKMODE_DPLL                0
+#define CM_IDLEST_DPLL         0x4
+#define CM_AUTOIDLE_DPLL       0x8
+#define CM_CLKSEL_DPLL         0xC
+
+#define DPLL_CLKOUT_DIV_MASK   0x1F /* post-divider mask */
+
+/* CM_CLKMODE_DPLL */
+#define CM_CLKMODE_DPLL_REGM4XEN_SHIFT         11
+#define CM_CLKMODE_DPLL_REGM4XEN_MASK          (1 << 11)
+#define CM_CLKMODE_DPLL_LPMODE_EN_SHIFT                10
+#define CM_CLKMODE_DPLL_LPMODE_EN_MASK         (1 << 10)
+#define CM_CLKMODE_DPLL_RELOCK_RAMP_EN_SHIFT   9
+#define CM_CLKMODE_DPLL_RELOCK_RAMP_EN_MASK    (1 << 9)
+#define CM_CLKMODE_DPLL_DRIFTGUARD_EN_SHIFT    8
+#define CM_CLKMODE_DPLL_DRIFTGUARD_EN_MASK     (1 << 8)
+#define CM_CLKMODE_DPLL_RAMP_RATE_SHIFT                5
+#define CM_CLKMODE_DPLL_RAMP_RATE_MASK         (0x7 << 5)
+#define CM_CLKMODE_DPLL_EN_SHIFT               0
+#define CM_CLKMODE_DPLL_EN_MASK                        (0x7 << 0)
+
+#define CM_CLKMODE_DPLL_DPLL_EN_SHIFT          0
+#define CM_CLKMODE_DPLL_DPLL_EN_MASK           7
+
+#define DPLL_EN_STOP                   1
+#define DPLL_EN_MN_BYPASS              4
+#define DPLL_EN_LOW_POWER_BYPASS       5
+#define DPLL_EN_FAST_RELOCK_BYPASS     6
+#define DPLL_EN_LOCK                   7
+
+/* CM_IDLEST_DPLL fields */
+#define ST_DPLL_CLK_MASK               1
+
+/* CM_CLKSEL_DPLL */
+#define CM_CLKSEL_DPLL_DPLL_SD_DIV_SHIFT       24
+#define CM_CLKSEL_DPLL_DPLL_SD_DIV_MASK                (0xFF << 24)
+#define CM_CLKSEL_DPLL_M_SHIFT                 8
+#define CM_CLKSEL_DPLL_M_MASK                  (0x7FF << 8)
+#define CM_CLKSEL_DPLL_N_SHIFT                 0
+#define CM_CLKSEL_DPLL_N_MASK                  0x7F
+#define CM_CLKSEL_DCC_EN_SHIFT                 22
+#define CM_CLKSEL_DCC_EN_MASK                  (1 << 22)
+
+#define OMAP4_DPLL_MAX_N       127
+
+/* CM_SYS_CLKSEL */
+#define CM_SYS_CLKSEL_SYS_CLKSEL_MASK  7
+
+/* CM_CLKSEL_CORE */
+#define CLKSEL_CORE_SHIFT      0
+#define CLKSEL_L3_SHIFT                4
+#define CLKSEL_L4_SHIFT                8
+
+#define CLKSEL_CORE_X2_DIV_1   0
+#define CLKSEL_L3_CORE_DIV_2   1
+#define CLKSEL_L4_L3_DIV_2     1
+
+/* CM_ABE_PLL_REF_CLKSEL */
+#define CM_ABE_PLL_REF_CLKSEL_CLKSEL_SHIFT     0
+#define CM_ABE_PLL_REF_CLKSEL_CLKSEL_MASK      1
+#define CM_ABE_PLL_REF_CLKSEL_CLKSEL_SYSCLK    0
+#define CM_ABE_PLL_REF_CLKSEL_CLKSEL_32KCLK    1
+
+/* CM_BYPCLK_DPLL_IVA */
+#define CM_BYPCLK_DPLL_IVA_CLKSEL_SHIFT                0
+#define CM_BYPCLK_DPLL_IVA_CLKSEL_MASK         3
+
+#define DPLL_IVA_CLKSEL_CORE_X2_DIV_2          1
+
+/* CM_SHADOW_FREQ_CONFIG1 */
+#define SHADOW_FREQ_CONFIG1_FREQ_UPDATE_MASK   1
+#define SHADOW_FREQ_CONFIG1_DLL_OVERRIDE_MASK  4
+#define SHADOW_FREQ_CONFIG1_DLL_RESET_MASK     8
+
+#define SHADOW_FREQ_CONFIG1_DPLL_EN_SHIFT      8
+#define SHADOW_FREQ_CONFIG1_DPLL_EN_MASK       (7 << 8)
+
+#define SHADOW_FREQ_CONFIG1_M2_DIV_SHIFT       11
+#define SHADOW_FREQ_CONFIG1_M2_DIV_MASK                (0x1F << 11)
+
+/*CM_<clock_domain>__CLKCTRL */
+#define CD_CLKCTRL_CLKTRCTRL_SHIFT             0
+#define CD_CLKCTRL_CLKTRCTRL_MASK              3
+
+#define CD_CLKCTRL_CLKTRCTRL_NO_SLEEP          0
+#define CD_CLKCTRL_CLKTRCTRL_SW_SLEEP          1
+#define CD_CLKCTRL_CLKTRCTRL_SW_WKUP           2
+#define CD_CLKCTRL_CLKTRCTRL_HW_AUTO           3
+
+
+/* CM_<clock_domain>_<module>_CLKCTRL */
+#define MODULE_CLKCTRL_MODULEMODE_SHIFT                0
+#define MODULE_CLKCTRL_MODULEMODE_MASK         3
+#define MODULE_CLKCTRL_IDLEST_SHIFT            16
+#define MODULE_CLKCTRL_IDLEST_MASK             (3 << 16)
+
+#define MODULE_CLKCTRL_MODULEMODE_SW_DISABLE           0
+#define MODULE_CLKCTRL_MODULEMODE_HW_AUTO              1
+#define MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN       2
+
+#define MODULE_CLKCTRL_IDLEST_FULLY_FUNCTIONAL 0
+#define MODULE_CLKCTRL_IDLEST_TRANSITIONING    1
+#define MODULE_CLKCTRL_IDLEST_IDLE             2
+#define MODULE_CLKCTRL_IDLEST_DISABLED         3
+
+/* CM_L4PER_GPIO4_CLKCTRL */
+#define GPIO4_CLKCTRL_OPTFCLKEN_MASK           (1 << 8)
+
+/* CM_L3INIT_HSMMCn_CLKCTRL */
+#define HSMMC_CLKCTRL_CLKSEL_MASK              (1 << 24)
+
+/* CM_WKUP_GPTIMER1_CLKCTRL */
+#define GPTIMER1_CLKCTRL_CLKSEL_MASK           (1 << 24)
+
+/* CM_CAM_ISS_CLKCTRL */
+#define ISS_CLKCTRL_OPTFCLKEN_MASK             (1 << 8)
+
+/* CM_DSS_DSS_CLKCTRL */
+#define DSS_CLKCTRL_OPTFCLKEN_MASK             0xF00
+
+/* CM_L3INIT_USBPHY_CLKCTRL */
+#define USBPHY_CLKCTRL_OPTFCLKEN_PHY_48M_MASK  8
+
+/* CM_MPU_MPU_CLKCTRL */
+#define MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_SHIFT 24
+#define MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK  (1 << 24)
+#define MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_SHIFT  25
+#define MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK   (1 << 25)
+
+/* Clock frequencies */
+#define OMAP_SYS_CLK_FREQ_38_4_MHZ     38400000
+#define OMAP_SYS_CLK_IND_38_4_MHZ      6
+#define OMAP_32K_CLK_FREQ              32768
+
+/* PRM_VC_CFG_I2C_CLK */
+#define PRM_VC_CFG_I2C_CLK_SCLH_SHIFT          0
+#define PRM_VC_CFG_I2C_CLK_SCLH_MASK           0xFF
+#define PRM_VC_CFG_I2C_CLK_SCLL_SHIFT          8
+#define PRM_VC_CFG_I2C_CLK_SCLL_MASK           (0xFF << 8)
+
+/* PRM_VC_VAL_BYPASS */
+#define PRM_VC_I2C_CHANNEL_FREQ_KHZ    400
+
+#define PRM_VC_VAL_BYPASS_VALID_BIT    0x1000000
+#define PRM_VC_VAL_BYPASS_SLAVEADDR_SHIFT      0
+#define PRM_VC_VAL_BYPASS_SLAVEADDR_MASK       0x7F
+#define PRM_VC_VAL_BYPASS_REGADDR_SHIFT                8
+#define PRM_VC_VAL_BYPASS_REGADDR_MASK         0xFF
+#define PRM_VC_VAL_BYPASS_DATA_SHIFT           16
+#define PRM_VC_VAL_BYPASS_DATA_MASK            0xFF
+
+/* SMPS */
+#define SMPS_I2C_SLAVE_ADDR    0x12
+#define SMPS_REG_ADDR_VCORE1   0x55
+#define SMPS_REG_ADDR_VCORE2   0x5B
+#define SMPS_REG_ADDR_VCORE3   0x61
+
+#define PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV             607700
+#define PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV 709000
+
+/* TPS */
+#define TPS62361_I2C_SLAVE_ADDR                0x60
+#define TPS62361_REG_ADDR_SET0         0x0
+#define TPS62361_REG_ADDR_SET1         0x1
+#define TPS62361_REG_ADDR_SET2         0x2
+#define TPS62361_REG_ADDR_SET3         0x3
+#define TPS62361_REG_ADDR_CTRL         0x4
+#define TPS62361_REG_ADDR_TEMP         0x5
+#define TPS62361_REG_ADDR_RMP_CTRL     0x6
+#define TPS62361_REG_ADDR_CHIP_ID      0x8
+#define TPS62361_REG_ADDR_CHIP_ID_2    0x9
+
+#define TPS62361_BASE_VOLT_MV  500
+#define TPS62361_VSEL0_GPIO    7
+
+/* Defines for DPLL setup */
+#define DPLL_LOCKED_FREQ_TOLERANCE_0           0
+#define DPLL_LOCKED_FREQ_TOLERANCE_500_KHZ     500
+#define DPLL_LOCKED_FREQ_TOLERANCE_1_MHZ       1000
+
+#define DPLL_NO_LOCK   0
+#define DPLL_LOCK      1
+
+#define NUM_SYS_CLKS   7
+
+struct dpll_regs {
+       u32 cm_clkmode_dpll;
+       u32 cm_idlest_dpll;
+       u32 cm_autoidle_dpll;
+       u32 cm_clksel_dpll;
+       u32 cm_div_m2_dpll;
+       u32 cm_div_m3_dpll;
+       u32 cm_div_h11_dpll;
+       u32 cm_div_h12_dpll;
+       u32 cm_div_h13_dpll;
+       u32 cm_div_h14_dpll;
+       u32 reserved[2];
+       u32 cm_div_h22_dpll;
+       u32 cm_div_h23_dpll;
+};
+
+/* DPLL parameter table */
+struct dpll_params {
+       u32 m;
+       u32 n;
+       s8 m2;
+       s8 m3;
+       s8 h11;
+       s8 h12;
+       s8 h13;
+       s8 h14;
+       s8 h22;
+       s8 h23;
+};
+
+extern struct omap5_prcm_regs *const prcm;
+extern const u32 sys_clk_array[8];
+
+void scale_vcores(void);
+void do_scale_tps62361(u32 reg, u32 volt_mv);
+u32 omap_ddr_clk(void);
+void do_scale_vcore(u32 vcore_reg, u32 volt_mv);
+void setup_sri2c(void);
+void setup_post_dividers(u32 *const base, const struct dpll_params *params);
+u32 get_sys_clk_index(void);
+void enable_basic_clocks(void);
+void enable_non_essential_clocks(void);
+void enable_basic_uboot_clocks(void);
+void do_enable_clocks(u32 *const *clk_domains,
+                     u32 *const *clk_modules_hw_auto,
+                     u32 *const *clk_modules_explicit_en,
+                     u8 wait_for_enable);
+const struct dpll_params *get_mpu_dpll_params(void);
+const struct dpll_params *get_core_dpll_params(void);
+const struct dpll_params *get_per_dpll_params(void);
+const struct dpll_params *get_iva_dpll_params(void);
+const struct dpll_params *get_usb_dpll_params(void);
+const struct dpll_params *get_abe_dpll_params(void);
+#endif /* _CLOCKS_OMAP5_H_ */
diff --git a/arch/arm/include/asm/arch-omap5/cpu.h b/arch/arm/include/asm/arch-omap5/cpu.h
new file mode 100644 (file)
index 0000000..0697a73
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * (C) Copyright 2006-2010
+ * Texas Instruments, <www.ti.com>
+ *
+ *     Aneesh V <aneesh@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 _CPU_H
+#define _CPU_H
+
+#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
+#include <asm/types.h>
+#endif /* !(__KERNEL_STRICT_NAMES || __ASSEMBLY__) */
+
+#ifndef __KERNEL_STRICT_NAMES
+#ifndef __ASSEMBLY__
+struct gpmc_cs {
+       u32 config1;            /* 0x00 */
+       u32 config2;            /* 0x04 */
+       u32 config3;            /* 0x08 */
+       u32 config4;            /* 0x0C */
+       u32 config5;            /* 0x10 */
+       u32 config6;            /* 0x14 */
+       u32 config7;            /* 0x18 */
+       u32 nand_cmd;           /* 0x1C */
+       u32 nand_adr;           /* 0x20 */
+       u32 nand_dat;           /* 0x24 */
+       u8 res[8];              /* blow up to 0x30 byte */
+};
+
+struct gpmc {
+       u8 res1[0x10];
+       u32 sysconfig;          /* 0x10 */
+       u8 res2[0x4];
+       u32 irqstatus;          /* 0x18 */
+       u32 irqenable;          /* 0x1C */
+       u8 res3[0x20];
+       u32 timeout_control;    /* 0x40 */
+       u8 res4[0xC];
+       u32 config;             /* 0x50 */
+       u32 status;             /* 0x54 */
+       u8 res5[0x8];   /* 0x58 */
+       struct gpmc_cs cs[8];   /* 0x60, 0x90, .. */
+       u8 res6[0x14];          /* 0x1E0 */
+       u32 ecc_config;         /* 0x1F4 */
+       u32 ecc_control;        /* 0x1F8 */
+       u32 ecc_size_config;    /* 0x1FC */
+       u32 ecc1_result;        /* 0x200 */
+       u32 ecc2_result;        /* 0x204 */
+       u32 ecc3_result;        /* 0x208 */
+       u32 ecc4_result;        /* 0x20C */
+       u32 ecc5_result;        /* 0x210 */
+       u32 ecc6_result;        /* 0x214 */
+       u32 ecc7_result;        /* 0x218 */
+       u32 ecc8_result;        /* 0x21C */
+       u32 ecc9_result;        /* 0x220 */
+};
+
+/* Used for board specific gpmc initialization */
+extern struct gpmc *gpmc_cfg;
+
+struct gptimer {
+       u32 tidr;               /* 0x00 r */
+       u8 res1[0xc];
+       u32 tiocp_cfg;          /* 0x10 rw */
+       u8 res2[0x10];
+       u32 tisr_raw;           /* 0x24 r */
+       u32 tisr;               /* 0x28 rw */
+       u32 tier;               /* 0x2c rw */
+       u32 ticr;               /* 0x30 rw */
+       u32 twer;               /* 0x34 rw */
+       u32 tclr;               /* 0x38 rw */
+       u32 tcrr;               /* 0x3c rw */
+       u32 tldr;               /* 0x40 rw */
+       u32 ttgr;               /* 0x44 rw */
+       u32 twpc;               /* 0x48 r */
+       u32 tmar;               /* 0x4c rw */
+       u32 tcar1;              /* 0x50 r */
+       u32 tcicr;              /* 0x54 rw */
+       u32 tcar2;              /* 0x58 r */
+};
+#endif /* __ASSEMBLY__ */
+#endif /* __KERNEL_STRICT_NAMES */
+
+/* enable sys_clk NO-prescale /1 */
+#define GPT_EN                 ((0x0 << 2) | (0x1 << 1) | (0x1 << 0))
+
+/* Watchdog */
+#ifndef __KERNEL_STRICT_NAMES
+#ifndef __ASSEMBLY__
+struct watchdog {
+       u8 res1[0x34];
+       u32 wwps;               /* 0x34 r */
+       u8 res2[0x10];
+       u32 wspr;               /* 0x48 rw */
+};
+#endif /* __ASSEMBLY__ */
+#endif /* __KERNEL_STRICT_NAMES */
+
+#define WD_UNLOCK1             0xAAAA
+#define WD_UNLOCK2             0x5555
+
+#define SYSCLKDIV_1            (0x1 << 6)
+#define SYSCLKDIV_2            (0x1 << 7)
+
+#define CLKSEL_GPT1            (0x1 << 0)
+
+#define EN_GPT1                        (0x1 << 0)
+#define EN_32KSYNC             (0x1 << 2)
+
+#define ST_WDT2                        (0x1 << 5)
+
+#define RESETDONE              (0x1 << 0)
+
+#define TCLR_ST                        (0x1 << 0)
+#define TCLR_AR                        (0x1 << 1)
+#define TCLR_PRE               (0x1 << 5)
+
+/* GPMC BASE */
+#define GPMC_BASE              (OMAP54XX_GPMC_BASE)
+
+/* I2C base */
+#define I2C_BASE1              (OMAP54XX_L4_PER_BASE + 0x70000)
+#define I2C_BASE2              (OMAP54XX_L4_PER_BASE + 0x72000)
+#define I2C_BASE3              (OMAP54XX_L4_PER_BASE + 0x60000)
+
+/* MUSB base */
+#define MUSB_BASE              (OMAP54XX_L4_CORE_BASE + 0xAB000)
+
+/* OMAP4 GPIO registers */
+#define OMAP_GPIO_REVISION             0x0000
+#define OMAP_GPIO_SYSCONFIG            0x0010
+#define OMAP_GPIO_SYSSTATUS            0x0114
+#define OMAP_GPIO_IRQSTATUS1           0x0118
+#define OMAP_GPIO_IRQSTATUS2           0x0128
+#define OMAP_GPIO_IRQENABLE2           0x012c
+#define OMAP_GPIO_IRQENABLE1           0x011c
+#define OMAP_GPIO_WAKE_EN              0x0120
+#define OMAP_GPIO_CTRL                 0x0130
+#define OMAP_GPIO_OE                   0x0134
+#define OMAP_GPIO_DATAIN               0x0138
+#define OMAP_GPIO_DATAOUT              0x013c
+#define OMAP_GPIO_LEVELDETECT0         0x0140
+#define OMAP_GPIO_LEVELDETECT1         0x0144
+#define OMAP_GPIO_RISINGDETECT         0x0148
+#define OMAP_GPIO_FALLINGDETECT                0x014c
+#define OMAP_GPIO_DEBOUNCE_EN          0x0150
+#define OMAP_GPIO_DEBOUNCE_VAL         0x0154
+#define OMAP_GPIO_CLEARIRQENABLE1      0x0160
+#define OMAP_GPIO_SETIRQENABLE1                0x0164
+#define OMAP_GPIO_CLEARWKUENA          0x0180
+#define OMAP_GPIO_SETWKUENA            0x0184
+#define OMAP_GPIO_CLEARDATAOUT         0x0190
+#define OMAP_GPIO_SETDATAOUT           0x0194
+
+#endif /* _CPU_H */
diff --git a/arch/arm/include/asm/arch-omap5/gpio.h b/arch/arm/include/asm/arch-omap5/gpio.h
new file mode 100644 (file)
index 0000000..c14dff0
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2009 Wind River Systems, Inc.
+ * Tom Rix <Tom.Rix@windriver.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
+ *
+ * This work is derived from the linux 2.6.27 kernel source
+ * To fetch, use the kernel repository
+ * git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
+ * Use the v2.6.27 tag.
+ *
+ * Below is the original's header including its copyright
+ *
+ *  linux/arch/arm/plat-omap/gpio.c
+ *
+ * Support functions for OMAP GPIO
+ *
+ * Copyright (C) 2003-2005 Nokia Corporation
+ * Written by Juha Yrjölä <juha.yrjola@nokia.com>
+ *
+ * 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.
+ */
+#ifndef _GPIO_OMAP5_H
+#define _GPIO_OMAP5_H
+
+#include <asm/omap_gpio.h>
+
+#define OMAP54XX_GPIO1_BASE            0x4Ae10000
+#define OMAP54XX_GPIO2_BASE            0x48055000
+#define OMAP54XX_GPIO3_BASE            0x48057000
+#define OMAP54XX_GPIO4_BASE            0x48059000
+#define OMAP54XX_GPIO5_BASE            0x4805B000
+#define OMAP54XX_GPIO6_BASE            0x4805D000
+
+#endif /* _GPIO_OMAP5_H */
diff --git a/arch/arm/include/asm/arch-omap5/i2c.h b/arch/arm/include/asm/arch-omap5/i2c.h
new file mode 100644 (file)
index 0000000..68be03b
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * (C) Copyright 2004-2010
+ * Texas Instruments, <www.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 _OMAP5_I2C_H_
+#define _OMAP5_I2C_H_
+
+#define I2C_BUS_MAX    3
+#define I2C_DEFAULT_BASE       I2C_BASE1
+
+struct i2c {
+       unsigned short revnb_lo;        /* 0x00 */
+       unsigned short res1;
+       unsigned short revnb_hi;        /* 0x04 */
+       unsigned short res2[13];
+       unsigned short sysc;            /* 0x20 */
+       unsigned short res3;
+       unsigned short irqstatus_raw;   /* 0x24 */
+       unsigned short res4;
+       unsigned short stat;            /* 0x28 */
+       unsigned short res5;
+       unsigned short ie;              /* 0x2C */
+       unsigned short res6;
+       unsigned short irqenable_clr;   /* 0x30 */
+       unsigned short res7;
+       unsigned short iv;              /* 0x34 */
+       unsigned short res8[45];
+       unsigned short syss;            /* 0x90 */
+       unsigned short res9;
+       unsigned short buf;             /* 0x94 */
+       unsigned short res10;
+       unsigned short cnt;             /* 0x98 */
+       unsigned short res11;
+       unsigned short data;            /* 0x9C */
+       unsigned short res13;
+       unsigned short res14;           /* 0xA0 */
+       unsigned short res15;
+       unsigned short con;             /* 0xA4 */
+       unsigned short res16;
+       unsigned short oa;              /* 0xA8 */
+       unsigned short res17;
+       unsigned short sa;              /* 0xAC */
+       unsigned short res18;
+       unsigned short psc;             /* 0xB0 */
+       unsigned short res19;
+       unsigned short scll;            /* 0xB4 */
+       unsigned short res20;
+       unsigned short sclh;            /* 0xB8 */
+       unsigned short res21;
+       unsigned short systest;         /* 0xBC */
+       unsigned short res22;
+       unsigned short bufstat;         /* 0xC0 */
+       unsigned short res23;
+};
+
+#endif /* _OMAP5_I2C_H_ */
diff --git a/arch/arm/include/asm/arch-omap5/mmc_host_def.h b/arch/arm/include/asm/arch-omap5/mmc_host_def.h
new file mode 100644 (file)
index 0000000..74439c9
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ * Syed Mohammed Khasim <khasim@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's version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 MMC_HOST_DEF_H
+#define MMC_HOST_DEF_H
+
+/*
+ * OMAP HSMMC register definitions
+ */
+
+#define OMAP_HSMMC1_BASE       0x4809C100
+#define OMAP_HSMMC2_BASE       0x480B4100
+#define OMAP_HSMMC3_BASE       0x480AD100
+
+struct hsmmc {
+       unsigned char res1[0x10];
+       unsigned int sysconfig;         /* 0x10 */
+       unsigned int sysstatus;         /* 0x14 */
+       unsigned char res2[0x14];
+       unsigned int con;               /* 0x2C */
+       unsigned char res3[0xD4];
+       unsigned int blk;               /* 0x104 */
+       unsigned int arg;               /* 0x108 */
+       unsigned int cmd;               /* 0x10C */
+       unsigned int rsp10;             /* 0x110 */
+       unsigned int rsp32;             /* 0x114 */
+       unsigned int rsp54;             /* 0x118 */
+       unsigned int rsp76;             /* 0x11C */
+       unsigned int data;              /* 0x120 */
+       unsigned int pstate;            /* 0x124 */
+       unsigned int hctl;              /* 0x128 */
+       unsigned int sysctl;            /* 0x12C */
+       unsigned int stat;              /* 0x130 */
+       unsigned int ie;                /* 0x134 */
+       unsigned char res4[0x8];
+       unsigned int capa;              /* 0x140 */
+};
+
+/*
+ * OMAP HS MMC Bit definitions
+ */
+#define MMC_SOFTRESET                  (0x1 << 1)
+#define RESETDONE                      (0x1 << 0)
+#define NOOPENDRAIN                    (0x0 << 0)
+#define OPENDRAIN                      (0x1 << 0)
+#define OD                             (0x1 << 0)
+#define INIT_NOINIT                    (0x0 << 1)
+#define INIT_INITSTREAM                        (0x1 << 1)
+#define HR_NOHOSTRESP                  (0x0 << 2)
+#define STR_BLOCK                      (0x0 << 3)
+#define MODE_FUNC                      (0x0 << 4)
+#define DW8_1_4BITMODE                 (0x0 << 5)
+#define MIT_CTO                                (0x0 << 6)
+#define CDP_ACTIVEHIGH                 (0x0 << 7)
+#define WPP_ACTIVEHIGH                 (0x0 << 8)
+#define RESERVED_MASK                  (0x3 << 9)
+#define CTPL_MMC_SD                    (0x0 << 11)
+#define BLEN_512BYTESLEN               (0x200 << 0)
+#define NBLK_STPCNT                    (0x0 << 16)
+#define DE_DISABLE                     (0x0 << 0)
+#define BCE_DISABLE                    (0x0 << 1)
+#define BCE_ENABLE                     (0x1 << 1)
+#define ACEN_DISABLE                   (0x0 << 2)
+#define DDIR_OFFSET                    (4)
+#define DDIR_MASK                      (0x1 << 4)
+#define DDIR_WRITE                     (0x0 << 4)
+#define DDIR_READ                      (0x1 << 4)
+#define MSBS_SGLEBLK                   (0x0 << 5)
+#define MSBS_MULTIBLK                  (0x1 << 5)
+#define RSP_TYPE_OFFSET                        (16)
+#define RSP_TYPE_MASK                  (0x3 << 16)
+#define RSP_TYPE_NORSP                 (0x0 << 16)
+#define RSP_TYPE_LGHT136               (0x1 << 16)
+#define RSP_TYPE_LGHT48                        (0x2 << 16)
+#define RSP_TYPE_LGHT48B               (0x3 << 16)
+#define CCCE_NOCHECK                   (0x0 << 19)
+#define CCCE_CHECK                     (0x1 << 19)
+#define CICE_NOCHECK                   (0x0 << 20)
+#define CICE_CHECK                     (0x1 << 20)
+#define DP_OFFSET                      (21)
+#define DP_MASK                                (0x1 << 21)
+#define DP_NO_DATA                     (0x0 << 21)
+#define DP_DATA                                (0x1 << 21)
+#define CMD_TYPE_NORMAL                        (0x0 << 22)
+#define INDEX_OFFSET                   (24)
+#define INDEX_MASK                     (0x3f << 24)
+#define INDEX(i)                       (i << 24)
+#define DATI_MASK                      (0x1 << 1)
+#define DATI_CMDDIS                    (0x1 << 1)
+#define DTW_1_BITMODE                  (0x0 << 1)
+#define DTW_4_BITMODE                  (0x1 << 1)
+#define DTW_8_BITMODE                   (0x1 << 5) /* CON[DW8]*/
+#define SDBP_PWROFF                    (0x0 << 8)
+#define SDBP_PWRON                     (0x1 << 8)
+#define SDVS_1V8                       (0x5 << 9)
+#define SDVS_3V0                       (0x6 << 9)
+#define ICE_MASK                       (0x1 << 0)
+#define ICE_STOP                       (0x0 << 0)
+#define ICS_MASK                       (0x1 << 1)
+#define ICS_NOTREADY                   (0x0 << 1)
+#define ICE_OSCILLATE                  (0x1 << 0)
+#define CEN_MASK                       (0x1 << 2)
+#define CEN_DISABLE                    (0x0 << 2)
+#define CEN_ENABLE                     (0x1 << 2)
+#define CLKD_OFFSET                    (6)
+#define CLKD_MASK                      (0x3FF << 6)
+#define DTO_MASK                       (0xF << 16)
+#define DTO_15THDTO                    (0xE << 16)
+#define SOFTRESETALL                   (0x1 << 24)
+#define CC_MASK                                (0x1 << 0)
+#define TC_MASK                                (0x1 << 1)
+#define BWR_MASK                       (0x1 << 4)
+#define BRR_MASK                       (0x1 << 5)
+#define ERRI_MASK                      (0x1 << 15)
+#define IE_CC                          (0x01 << 0)
+#define IE_TC                          (0x01 << 1)
+#define IE_BWR                         (0x01 << 4)
+#define IE_BRR                         (0x01 << 5)
+#define IE_CTO                         (0x01 << 16)
+#define IE_CCRC                                (0x01 << 17)
+#define IE_CEB                         (0x01 << 18)
+#define IE_CIE                         (0x01 << 19)
+#define IE_DTO                         (0x01 << 20)
+#define IE_DCRC                                (0x01 << 21)
+#define IE_DEB                         (0x01 << 22)
+#define IE_CERR                                (0x01 << 28)
+#define IE_BADA                                (0x01 << 29)
+
+#define VS30_3V0SUP                    (1 << 25)
+#define VS18_1V8SUP                    (1 << 26)
+
+/* Driver definitions */
+#define MMCSD_SECTOR_SIZE              512
+#define MMC_CARD                       0
+#define SD_CARD                                1
+#define BYTE_MODE                      0
+#define SECTOR_MODE                    1
+#define CLK_INITSEQ                    0
+#define CLK_400KHZ                     1
+#define CLK_MISC                       2
+
+#define RSP_TYPE_NONE  (RSP_TYPE_NORSP   | CCCE_NOCHECK | CICE_NOCHECK)
+#define MMC_CMD0       (INDEX(0)  | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE)
+
+/* Clock Configurations and Macros */
+#define MMC_CLOCK_REFERENCE    96 /* MHz */
+
+#define mmc_reg_out(addr, mask, val)\
+       writel((readl(addr) & (~(mask))) | ((val) & (mask)), (addr))
+
+int omap_mmc_init(int dev_index);
+
+#endif /* MMC_HOST_DEF_H */
diff --git a/arch/arm/include/asm/arch-omap5/mux_omap5.h b/arch/arm/include/asm/arch-omap5/mux_omap5.h
new file mode 100644 (file)
index 0000000..b8c2185
--- /dev/null
@@ -0,0 +1,344 @@
+/*
+ * (C) Copyright 2004-2009
+ * Texas Instruments Incorporated
+ * Richard Woodruff            <r-woodruff2@ti.com>
+ * Aneesh V                    <aneesh@ti.com>
+ * Balaji Krishnamoorthy       <balajitk@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 _MUX_OMAP5_H_
+#define _MUX_OMAP5_H_
+
+#include <asm/types.h>
+
+struct pad_conf_entry {
+
+       u16 offset;
+
+       u16 val;
+
+} __attribute__ ((__packed__));
+
+#ifdef CONFIG_OFF_PADCONF
+#define OFF_PD          (1 << 12)
+#define OFF_PU          (3 << 12)
+#define OFF_OUT_PTD     (0 << 10)
+#define OFF_OUT_PTU     (2 << 10)
+#define OFF_IN          (1 << 10)
+#define OFF_OUT         (0 << 10)
+#define OFF_EN          (1 << 9)
+#else
+#define OFF_PD          (0 << 12)
+#define OFF_PU          (0 << 12)
+#define OFF_OUT_PTD     (0 << 10)
+#define OFF_OUT_PTU     (0 << 10)
+#define OFF_IN          (0 << 10)
+#define OFF_OUT         (0 << 10)
+#define OFF_EN          (0 << 9)
+#endif
+
+#define IEN             (1 << 8)
+#define IDIS            (0 << 8)
+#define PTU             (3 << 3)
+#define PTD             (1 << 3)
+#define EN              (1 << 3)
+#define DIS             (0 << 3)
+
+#define M0              0
+#define M1              1
+#define M2              2
+#define M3              3
+#define M4              4
+#define M5              5
+#define M6              6
+#define M7              7
+
+#define SAFE_MODE      M7
+
+#ifdef CONFIG_OFF_PADCONF
+#define OFF_IN_PD       (OFF_PD | OFF_IN | OFF_EN)
+#define OFF_IN_PU       (OFF_PU | OFF_IN | OFF_EN)
+#define OFF_OUT_PD      (OFF_OUT_PTD | OFF_OUT | OFF_EN)
+#define OFF_OUT_PU      (OFF_OUT_PTU | OFF_OUT | OFF_EN)
+#else
+#define OFF_IN_PD       0
+#define OFF_IN_PU       0
+#define OFF_OUT_PD      0
+#define OFF_OUT_PU      0
+#endif
+
+#define CORE_REVISION          0x0000
+#define CORE_HWINFO            0x0004
+#define CORE_SYSCONFIG         0x0010
+#define GPMC_AD0               0x0040
+#define GPMC_AD1               0x0042
+#define GPMC_AD2               0x0044
+#define GPMC_AD3               0x0046
+#define GPMC_AD4               0x0048
+#define GPMC_AD5               0x004A
+#define GPMC_AD6               0x004C
+#define GPMC_AD7               0x004E
+#define GPMC_AD8               0x0050
+#define GPMC_AD9               0x0052
+#define GPMC_AD10              0x0054
+#define GPMC_AD11              0x0056
+#define GPMC_AD12              0x0058
+#define GPMC_AD13              0x005A
+#define GPMC_AD14              0x005C
+#define GPMC_AD15              0x005E
+#define GPMC_A16               0x0060
+#define GPMC_A17               0x0062
+#define GPMC_A18               0x0064
+#define GPMC_A19               0x0066
+#define GPMC_A20               0x0068
+#define GPMC_A21               0x006A
+#define GPMC_A22               0x006C
+#define GPMC_A23               0x006E
+#define GPMC_A24               0x0070
+#define GPMC_A25               0x0072
+#define GPMC_NCS0              0x0074
+#define GPMC_NCS1              0x0076
+#define GPMC_NCS2              0x0078
+#define GPMC_NCS3              0x007A
+#define GPMC_NWP               0x007C
+#define GPMC_CLK               0x007E
+#define GPMC_NADV_ALE          0x0080
+#define GPMC_NOE               0x0082
+#define GPMC_NWE               0x0084
+#define GPMC_NBE0_CLE          0x0086
+#define GPMC_NBE1              0x0088
+#define GPMC_WAIT0             0x008A
+#define GPMC_WAIT1             0x008C
+#define C2C_DATA11             0x008E
+#define C2C_DATA12             0x0090
+#define C2C_DATA13             0x0092
+#define C2C_DATA14             0x0094
+#define C2C_DATA15             0x0096
+#define HDMI_HPD               0x0098
+#define HDMI_CEC               0x009A
+#define HDMI_DDC_SCL           0x009C
+#define HDMI_DDC_SDA           0x009E
+#define CSI21_DX0              0x00A0
+#define CSI21_DY0              0x00A2
+#define CSI21_DX1              0x00A4
+#define CSI21_DY1              0x00A6
+#define CSI21_DX2              0x00A8
+#define CSI21_DY2              0x00AA
+#define CSI21_DX3              0x00AC
+#define CSI21_DY3              0x00AE
+#define CSI21_DX4              0x00B0
+#define CSI21_DY4              0x00B2
+#define CSI22_DX0              0x00B4
+#define CSI22_DY0              0x00B6
+#define CSI22_DX1              0x00B8
+#define CSI22_DY1              0x00BA
+#define CAM_SHUTTER            0x00BC
+#define CAM_STROBE             0x00BE
+#define CAM_GLOBALRESET                0x00C0
+#define USBB1_ULPITLL_CLK      0x00C2
+#define USBB1_ULPITLL_STP      0x00C4
+#define USBB1_ULPITLL_DIR      0x00C6
+#define USBB1_ULPITLL_NXT      0x00C8
+#define USBB1_ULPITLL_DAT0     0x00CA
+#define USBB1_ULPITLL_DAT1     0x00CC
+#define USBB1_ULPITLL_DAT2     0x00CE
+#define USBB1_ULPITLL_DAT3     0x00D0
+#define USBB1_ULPITLL_DAT4     0x00D2
+#define USBB1_ULPITLL_DAT5     0x00D4
+#define USBB1_ULPITLL_DAT6     0x00D6
+#define USBB1_ULPITLL_DAT7     0x00D8
+#define USBB1_HSIC_DATA                0x00DA
+#define USBB1_HSIC_STROBE      0x00DC
+#define USBC1_ICUSB_DP         0x00DE
+#define USBC1_ICUSB_DM         0x00E0
+#define SDMMC1_CLK             0x00E2
+#define SDMMC1_CMD             0x00E4
+#define SDMMC1_DAT0            0x00E6
+#define SDMMC1_DAT1            0x00E8
+#define SDMMC1_DAT2            0x00EA
+#define SDMMC1_DAT3            0x00EC
+#define SDMMC1_DAT4            0x00EE
+#define SDMMC1_DAT5            0x00F0
+#define SDMMC1_DAT6            0x00F2
+#define SDMMC1_DAT7            0x00F4
+#define ABE_MCBSP2_CLKX                0x00F6
+#define ABE_MCBSP2_DR          0x00F8
+#define ABE_MCBSP2_DX          0x00FA
+#define ABE_MCBSP2_FSX         0x00FC
+#define ABE_MCBSP1_CLKX                0x00FE
+#define ABE_MCBSP1_DR          0x0100
+#define ABE_MCBSP1_DX          0x0102
+#define ABE_MCBSP1_FSX         0x0104
+#define ABE_PDM_UL_DATA                0x0106
+#define ABE_PDM_DL_DATA                0x0108
+#define ABE_PDM_FRAME          0x010A
+#define ABE_PDM_LB_CLK         0x010C
+#define ABE_CLKS               0x010E
+#define ABE_DMIC_CLK1          0x0110
+#define ABE_DMIC_DIN1          0x0112
+#define ABE_DMIC_DIN2          0x0114
+#define ABE_DMIC_DIN3          0x0116
+#define UART2_CTS              0x0118
+#define UART2_RTS              0x011A
+#define UART2_RX               0x011C
+#define UART2_TX               0x011E
+#define HDQ_SIO                        0x0120
+#define I2C1_SCL               0x0122
+#define I2C1_SDA               0x0124
+#define I2C2_SCL               0x0126
+#define I2C2_SDA               0x0128
+#define I2C3_SCL               0x012A
+#define I2C3_SDA               0x012C
+#define I2C4_SCL               0x012E
+#define I2C4_SDA               0x0130
+#define MCSPI1_CLK             0x0132
+#define MCSPI1_SOMI            0x0134
+#define MCSPI1_SIMO            0x0136
+#define MCSPI1_CS0             0x0138
+#define MCSPI1_CS1             0x013A
+#define MCSPI1_CS2             0x013C
+#define MCSPI1_CS3             0x013E
+#define UART3_CTS_RCTX         0x0140
+#define UART3_RTS_SD           0x0142
+#define UART3_RX_IRRX          0x0144
+#define UART3_TX_IRTX          0x0146
+#define SDMMC5_CLK             0x0148
+#define SDMMC5_CMD             0x014A
+#define SDMMC5_DAT0            0x014C
+#define SDMMC5_DAT1            0x014E
+#define SDMMC5_DAT2            0x0150
+#define SDMMC5_DAT3            0x0152
+#define MCSPI4_CLK             0x0154
+#define MCSPI4_SIMO            0x0156
+#define MCSPI4_SOMI            0x0158
+#define MCSPI4_CS0             0x015A
+#define UART4_RX               0x015C
+#define UART4_TX               0x015E
+#define USBB2_ULPITLL_CLK      0x0160
+#define USBB2_ULPITLL_STP      0x0162
+#define USBB2_ULPITLL_DIR      0x0164
+#define USBB2_ULPITLL_NXT      0x0166
+#define USBB2_ULPITLL_DAT0     0x0168
+#define USBB2_ULPITLL_DAT1     0x016A
+#define USBB2_ULPITLL_DAT2     0x016C
+#define USBB2_ULPITLL_DAT3     0x016E
+#define USBB2_ULPITLL_DAT4     0x0170
+#define USBB2_ULPITLL_DAT5     0x0172
+#define USBB2_ULPITLL_DAT6     0x0174
+#define USBB2_ULPITLL_DAT7     0x0176
+#define USBB2_HSIC_DATA                0x0178
+#define USBB2_HSIC_STROBE      0x017A
+#define UNIPRO_TX0             0x017C
+#define UNIPRO_TY0             0x017E
+#define UNIPRO_TX1             0x0180
+#define UNIPRO_TY1             0x0182
+#define UNIPRO_TX2             0x0184
+#define UNIPRO_TY2             0x0186
+#define UNIPRO_RX0             0x0188
+#define UNIPRO_RY0             0x018A
+#define UNIPRO_RX1             0x018C
+#define UNIPRO_RY1             0x018E
+#define UNIPRO_RX2             0x0190
+#define UNIPRO_RY2             0x0192
+#define USBA0_OTG_CE           0x0194
+#define USBA0_OTG_DP           0x0196
+#define USBA0_OTG_DM           0x0198
+#define FREF_CLK1_OUT          0x019A
+#define FREF_CLK2_OUT          0x019C
+#define SYS_NIRQ1              0x019E
+#define SYS_NIRQ2              0x01A0
+#define SYS_BOOT0              0x01A2
+#define SYS_BOOT1              0x01A4
+#define SYS_BOOT2              0x01A6
+#define SYS_BOOT3              0x01A8
+#define SYS_BOOT4              0x01AA
+#define SYS_BOOT5              0x01AC
+#define DPM_EMU0               0x01AE
+#define DPM_EMU1               0x01B0
+#define DPM_EMU2               0x01B2
+#define DPM_EMU3               0x01B4
+#define DPM_EMU4               0x01B6
+#define DPM_EMU5               0x01B8
+#define DPM_EMU6               0x01BA
+#define DPM_EMU7               0x01BC
+#define DPM_EMU8               0x01BE
+#define DPM_EMU9               0x01C0
+#define DPM_EMU10              0x01C2
+#define DPM_EMU11              0x01C4
+#define DPM_EMU12              0x01C6
+#define DPM_EMU13              0x01C8
+#define DPM_EMU14              0x01CA
+#define DPM_EMU15              0x01CC
+#define DPM_EMU16              0x01CE
+#define DPM_EMU17              0x01D0
+#define DPM_EMU18              0x01D2
+#define DPM_EMU19              0x01D4
+#define WAKEUPEVENT_0          0x01D8
+#define WAKEUPEVENT_1          0x01DC
+#define WAKEUPEVENT_2          0x01E0
+#define WAKEUPEVENT_3          0x01E4
+#define WAKEUPEVENT_4          0x01E8
+#define WAKEUPEVENT_5          0x01EC
+#define WAKEUPEVENT_6          0x01F0
+
+#define WKUP_REVISION          0x0000
+#define WKUP_HWINFO            0x0004
+#define WKUP_SYSCONFIG         0x0010
+#define PAD0_SIM_IO            0x0040
+#define PAD1_SIM_CLK           0x0042
+#define PAD0_SIM_RESET         0x0044
+#define PAD1_SIM_CD            0x0046
+#define PAD0_SIM_PWRCTRL               0x0048
+#define PAD1_SR_SCL            0x004A
+#define PAD0_SR_SDA            0x004C
+#define PAD1_FREF_XTAL_IN              0x004E
+#define PAD0_FREF_SLICER_IN    0x0050
+#define PAD1_FREF_CLK_IOREQ    0x0052
+#define PAD0_FREF_CLK0_OUT             0x0054
+#define PAD1_FREF_CLK3_REQ             0x0056
+#define PAD0_FREF_CLK3_OUT             0x0058
+#define PAD1_FREF_CLK4_REQ             0x005A
+#define PAD0_FREF_CLK4_OUT             0x005C
+#define PAD1_SYS_32K           0x005E
+#define PAD0_SYS_NRESPWRON             0x0060
+#define PAD1_SYS_NRESWARM              0x0062
+#define PAD0_SYS_PWR_REQ               0x0064
+#define PAD1_SYS_PWRON_RESET   0x0066
+#define PAD0_SYS_BOOT6         0x0068
+#define PAD1_SYS_BOOT7         0x006A
+#define PAD0_JTAG_NTRST                0x006C
+#define PAD1_JTAG_TCK          0x006D
+#define PAD0_JTAG_RTCK         0x0070
+#define PAD1_JTAG_TMS_TMSC             0x0072
+#define PAD0_JTAG_TDI          0x0074
+#define PAD1_JTAG_TDO          0x0076
+#define PADCONF_WAKEUPEVENT_0  0x007C
+#define CONTROL_SMART1NOPMIO_PADCONF_0         0x05A0
+#define CONTROL_SMART1NOPMIO_PADCONF_1         0x05A4
+#define PADCONF_MODE           0x05A8
+#define CONTROL_XTAL_OSCILLATOR                        0x05AC
+#define CONTROL_CONTROL_I2C_2                  0x0604
+#define CONTROL_CONTROL_JTAG                   0x0608
+#define CONTROL_CONTROL_SYS                    0x060C
+#define CONTROL_SPARE_RW               0x0614
+#define CONTROL_SPARE_R                0x0618
+#define CONTROL_SPARE_R_C0             0x061C
+
+#endif /* _MUX_OMAP5_H_ */
diff --git a/arch/arm/include/asm/arch-omap5/omap.h b/arch/arm/include/asm/arch-omap5/omap.h
new file mode 100644 (file)
index 0000000..d811d6e
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * Authors:
+ *     Aneesh V <aneesh@ti.com>
+ *     Sricharan R <r.sricharan@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 _OMAP5_H_
+#define _OMAP5_H_
+
+#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
+#include <asm/types.h>
+#endif /* !(__KERNEL_STRICT_NAMES || __ASSEMBLY__) */
+
+/*
+ * L4 Peripherals - L4 Wakeup and L4 Core now
+ */
+#define OMAP54XX_L4_CORE_BASE  0x4A000000
+#define OMAP54XX_L4_WKUP_BASE  0x4Ae00000
+#define OMAP54XX_L4_PER_BASE   0x48000000
+
+#define OMAP54XX_DRAM_ADDR_SPACE_START 0x80000000
+#define OMAP54XX_DRAM_ADDR_SPACE_END   0xD0000000
+#define DRAM_ADDR_SPACE_START  OMAP54XX_DRAM_ADDR_SPACE_START
+#define DRAM_ADDR_SPACE_END    OMAP54XX_DRAM_ADDR_SPACE_END
+
+/* CONTROL */
+#define CTRL_BASE              (OMAP54XX_L4_CORE_BASE + 0x2000)
+#define CONTROL_PADCONF_CORE   (CTRL_BASE + 0x0800)
+#define CONTROL_PADCONF_WKUP   (OMAP54XX_L4_WKUP_BASE + 0xc800)
+
+/* LPDDR2 IO regs. To be verified */
+#define LPDDR2_IO_REGS_BASE    0x4A100638
+
+/* CONTROL_ID_CODE */
+#define CONTROL_ID_CODE                (CTRL_BASE + 0x204)
+
+/* To be verified */
+#define OMAP5_CONTROL_ID_CODE_ES1_0    0x0B85202F
+
+/* STD_FUSE_PROD_ID_1 */
+#define STD_FUSE_PROD_ID_1             (CTRL_BASE + 0x218)
+#define PROD_ID_1_SILICON_TYPE_SHIFT   16
+#define PROD_ID_1_SILICON_TYPE_MASK    (3 << 16)
+
+/* UART */
+#define UART1_BASE             (OMAP54XX_L4_PER_BASE + 0x6a000)
+#define UART2_BASE             (OMAP54XX_L4_PER_BASE + 0x6c000)
+#define UART3_BASE             (OMAP54XX_L4_PER_BASE + 0x20000)
+
+/* General Purpose Timers */
+#define GPT1_BASE              (OMAP54XX_L4_WKUP_BASE + 0x18000)
+#define GPT2_BASE              (OMAP54XX_L4_PER_BASE  + 0x32000)
+#define GPT3_BASE              (OMAP54XX_L4_PER_BASE  + 0x34000)
+
+/* Watchdog Timer2 - MPU watchdog */
+#define WDT2_BASE              (OMAP54XX_L4_WKUP_BASE + 0x14000)
+
+/* 32KTIMER */
+#define SYNC_32KTIMER_BASE     (OMAP54XX_L4_WKUP_BASE + 0x4000)
+
+/* GPMC */
+#define OMAP54XX_GPMC_BASE     0x50000000
+
+/* SYSTEM CONTROL MODULE */
+#define SYSCTRL_GENERAL_CORE_BASE      0x4A002000
+
+/*
+ * Hardware Register Details
+ */
+
+/* Watchdog Timer */
+#define WD_UNLOCK1             0xAAAA
+#define WD_UNLOCK2             0x5555
+
+/* GP Timer */
+#define TCLR_ST                        (0x1 << 0)
+#define TCLR_AR                        (0x1 << 1)
+#define TCLR_PRE               (0x1 << 5)
+
+/*
+ * PRCM
+ */
+
+/* PRM */
+#define PRM_BASE               0x4AE06000
+#define PRM_DEVICE_BASE                (PRM_BASE + 0x1B00)
+
+#define PRM_RSTCTRL            PRM_DEVICE_BASE
+#define PRM_RSTCTRL_RESET      0x01
+
+/* Control Module */
+#define LDOSRAM_ACTMODE_VSET_IN_MASK   (0x1F << 5)
+#define LDOSRAM_VOLT_CTRL_OVERRIDE     0x0401040f
+#define CONTROL_EFUSE_1_OVERRIDE       0x1C4D0110
+#define CONTROL_EFUSE_2_OVERRIDE       0x00084000
+
+/* LPDDR2 IO regs */
+#define CONTROL_LPDDR2IO_SLEW_125PS_DRV8_PULL_DOWN     0x1C1C1C1C
+#define CONTROL_LPDDR2IO_SLEW_325PS_DRV8_GATE_KEEPER   0x9E9E9E9E
+#define CONTROL_LPDDR2IO_SLEW_315PS_DRV12_PULL_DOWN    0x7C7C7C7C
+#define LPDDR2IO_GR10_WD_MASK                          (3 << 17)
+#define CONTROL_LPDDR2IO_3_VAL         0xA0888C00
+
+/* CONTROL_EFUSE_2 */
+#define CONTROL_EFUSE_2_NMOS_PMOS_PTV_CODE_1           0x00ffc000
+
+#define MMC1_PWRDNZ                                    (1 << 26)
+#define MMC1_PBIASLITE_PWRDNZ                          (1 << 22)
+#define MMC1_PBIASLITE_VMODE                           (1 << 21)
+
+#ifndef __ASSEMBLY__
+
+struct s32ktimer {
+       unsigned char res[0x10];
+       unsigned int s32k_cr;   /* 0x10 */
+};
+
+struct omap4_sys_ctrl_regs {
+       unsigned int pad1[129];
+       unsigned int control_id_code;                   /* 0x4A002204 */
+       unsigned int pad11[22];
+       unsigned int control_std_fuse_opp_bgap;         /* 0x4a002260 */
+       unsigned int pad2[47];
+       unsigned int control_ldosram_iva_voltage_ctrl;  /* 0x4A002320 */
+       unsigned int control_ldosram_mpu_voltage_ctrl;  /* 0x4A002324 */
+       unsigned int control_ldosram_core_voltage_ctrl; /* 0x4A002328 */
+       unsigned int pad3[260277];
+       unsigned int control_pbiaslite;                 /* 0x4A100600 */
+       unsigned int pad4[63];
+       unsigned int control_efuse_1;                   /* 0x4A100700 */
+       unsigned int control_efuse_2;                   /* 0x4A100704 */
+};
+
+struct control_lpddr2io_regs {
+       unsigned int control_lpddr2io1_0;
+       unsigned int control_lpddr2io1_1;
+       unsigned int control_lpddr2io1_2;
+       unsigned int control_lpddr2io1_3;
+       unsigned int control_lpddr2io2_0;
+       unsigned int control_lpddr2io2_1;
+       unsigned int control_lpddr2io2_2;
+       unsigned int control_lpddr2io2_3;
+};
+#endif /* __ASSEMBLY__ */
+
+/*
+ * Non-secure SRAM Addresses
+ * Non-secure RAM starts at 0x40300000 for GP devices. But we keep SRAM_BASE
+ * at 0x40304000(EMU base) so that our code works for both EMU and GP
+ */
+#define NON_SECURE_SRAM_START  0x40304000
+#define NON_SECURE_SRAM_END    0x40320000      /* Not inclusive */
+/* base address for indirect vectors (internal boot mode) */
+#define SRAM_ROM_VECT_BASE     0x4031F000
+/* Temporary SRAM stack used while low level init is done */
+#define LOW_LEVEL_SRAM_STACK   NON_SECURE_SRAM_END
+
+#define SRAM_SCRATCH_SPACE_ADDR                NON_SECURE_SRAM_START
+/*
+ * SRAM scratch space entries
+ */
+#define OMAP5_SRAM_SCRATCH_OMAP5_REV   SRAM_SCRATCH_SPACE_ADDR
+#define OMAP5_SRAM_SCRATCH_EMIF_SIZE   (SRAM_SCRATCH_SPACE_ADDR + 0x4)
+#define OMAP5_SRAM_SCRATCH_EMIF_T_NUM  (SRAM_SCRATCH_SPACE_ADDR + 0xC)
+#define OMAP5_SRAM_SCRATCH_EMIF_T_DEN  (SRAM_SCRATCH_SPACE_ADDR + 0x10)
+#define OMAP5_SRAM_SCRATCH_SPACE_END   (SRAM_SCRATCH_SPACE_ADDR + 0x14)
+
+/* Silicon revisions */
+#define OMAP4430_SILICON_ID_INVALID    0xFFFFFFFF
+#define OMAP4430_ES1_0 0x44300100
+#define OMAP4430_ES2_0 0x44300200
+#define OMAP4430_ES2_1 0x44300210
+#define OMAP4430_ES2_2 0x44300220
+#define OMAP4430_ES2_3 0x44300230
+#define OMAP4460_ES1_0 0x44600100
+#define OMAP4460_ES1_1 0x44600110
+
+/* ROM code defines */
+/* Boot device */
+#define BOOT_DEVICE_MASK       0xFF
+#define BOOT_DEVICE_OFFSET     0x8
+#define DEV_DESC_PTR_OFFSET    0x4
+#define DEV_DATA_PTR_OFFSET    0x18
+#define BOOT_MODE_OFFSET       0x8
+#define RESET_REASON_OFFSET     0x9
+#define CH_FLAGS_OFFSET         0xA
+
+#define CH_FLAGS_CHSETTINGS    (0x1 << 0)
+#define        CH_FLAGS_CHRAM          (0x1 << 1)
+#define CH_FLAGS_CHFLASH       (0x1 << 2)
+#define CH_FLAGS_CHMMCSD       (0x1 << 3)
+
+#ifndef __ASSEMBLY__
+struct omap_boot_parameters {
+       char *boot_message;
+       unsigned int mem_boot_descriptor;
+       unsigned char omap_bootdevice;
+       unsigned char reset_reason;
+       unsigned char ch_flags;
+};
+#endif /* __ASSEMBLY__ */
+#endif
diff --git a/arch/arm/include/asm/arch-omap5/sys_proto.h b/arch/arm/include/asm/arch-omap5/sys_proto.h
new file mode 100644 (file)
index 0000000..c31e18c
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * (C) Copyright 2010
+ * Texas Instruments, <www.ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _SYS_PROTO_H_
+#define _SYS_PROTO_H_
+
+#include <asm/arch/omap.h>
+#include <asm/io.h>
+#include <asm/arch/clocks.h>
+#include <asm/omap_common.h>
+#include <asm/arch/mux_omap5.h>
+#include <asm/arch/clocks.h>
+
+struct omap_sysinfo {
+       char *board_string;
+};
+extern const struct omap_sysinfo sysinfo;
+
+void gpmc_init(void);
+void watchdog_init(void);
+u32 get_device_type(void);
+void do_set_mux(u32 base, struct pad_conf_entry const *array, int size);
+void set_muxconf_regs_essential(void);
+void set_muxconf_regs_non_essential(void);
+void sr32(void *, u32, u32, u32);
+u32 wait_on_value(u32, u32, void *, u32);
+void sdelay(unsigned long);
+void omap_rev_string(char *omap_rev_string);
+void setup_clocks_for_console(void);
+void prcm_init(void);
+void bypass_dpll(u32 *const base);
+void freq_update_core(void);
+u32 get_sys_clk_freq(void);
+u32 omap5_ddr_clk(void);
+void cancel_out(u32 *num, u32 *den, u32 den_limit);
+void sdram_init(void);
+u32 omap_sdram_size(void);
+u32 cortex_rev(void);
+void init_omap_revision(void);
+void do_io_settings(void);
+
+/*
+ * This is used to verify if the configuration header
+ * was executed by Romcode prior to control of transfer
+ * to the bootloader. SPL is responsible for saving and
+ * passing this to the u-boot.
+ */
+extern struct omap_boot_parameters boot_params;
+
+static inline u32 running_from_sdram(void)
+{
+       u32 pc;
+       asm volatile ("mov %0, pc" : "=r" (pc));
+       return ((pc >= OMAP54XX_DRAM_ADDR_SPACE_START) &&
+           (pc < OMAP54XX_DRAM_ADDR_SPACE_END));
+}
+
+static inline u8 uboot_loaded_by_spl(void)
+{
+       /*
+        * u-boot can be running from sdram either because of configuration
+        * Header or by SPL. If because of CH, then the romcode sets the
+        * CHSETTINGS executed bit to true in the boot parameter structure that
+        * it passes to the bootloader.This parameter is stored in the ch_flags
+        * variable by both SPL and u-boot.Check out for CHSETTINGS, which is a
+        * mandatory section if CH is present.
+        */
+       if ((boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS))
+               return 0;
+       else
+               return running_from_sdram();
+}
+/*
+ * The basic hardware init of OMAP(s_init()) can happen in 4
+ * different contexts:
+ *  1. SPL running from SRAM
+ *  2. U-Boot running from FLASH
+ *  3. Non-XIP U-Boot loaded to SDRAM by SPL
+ *  4. Non-XIP U-Boot loaded to SDRAM by ROM code using the
+ *     Configuration Header feature
+ *
+ * This function finds this context.
+ * Defining as inline may help in compiling out unused functions in SPL
+ */
+static inline u32 omap_hw_init_context(void)
+{
+#ifdef CONFIG_SPL_BUILD
+       return OMAP_INIT_CONTEXT_SPL;
+#else
+       if (uboot_loaded_by_spl())
+               return OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL;
+       else if (running_from_sdram())
+               return OMAP_INIT_CONTEXT_UBOOT_AFTER_CH;
+       else
+               return OMAP_INIT_CONTEXT_UBOOT_FROM_NOR;
+#endif
+}
+
+static inline u32 omap_revision(void)
+{
+       extern u32 *const omap5_revision;
+       return *omap5_revision;
+}
+
+#endif
index 109fdc06aac151274f63ad91fc45115aaff166cf..8527c68c812cb410f31787f1e9b7a3a750d315c5 100644 (file)
@@ -109,7 +109,7 @@ typedef void                (*ExcpHndlr) (void) ;
 #define DCSR13         0x40000034  /* DMA Control / Status Register for Channel 13 */
 #define DCSR14         0x40000038  /* DMA Control / Status Register for Channel 14 */
 #define DCSR15         0x4000003c  /* DMA Control / Status Register for Channel 15 */
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 #define DCSR16         0x40000040  /* DMA Control / Status Register for Channel 16 */
 #define DCSR17         0x40000044  /* DMA Control / Status Register for Channel 17 */
 #define DCSR18         0x40000048  /* DMA Control / Status Register for Channel 18 */
@@ -126,7 +126,7 @@ typedef void                (*ExcpHndlr) (void) ;
 #define DCSR29         0x40000074  /* DMA Control / Status Register for Channel 29 */
 #define DCSR30         0x40000078  /* DMA Control / Status Register for Channel 30 */
 #define DCSR31         0x4000007c  /* DMA Control / Status Register for Channel 31 */
-#endif /* CONFIG_PXA27X || CONFIG_CPU_MONAHANS */
+#endif /* CONFIG_CPU_PXA27X || CONFIG_CPU_MONAHANS */
 
 #define DCSR(x)                (0x40000000 | ((x) << 2))
 
@@ -134,7 +134,7 @@ typedef void                (*ExcpHndlr) (void) ;
 #define DCSR_NODESC    (1 << 30)       /* No-Descriptor Fetch (read / write) */
 #define DCSR_STOPIRQEN (1 << 29)       /* Stop Interrupt Enable (read / write) */
 
-#if defined(CONFIG_PXA27X) || defined (CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 #define DCSR_EORIRQEN  (1 << 28)       /* End of Receive Interrupt Enable (R/W) */
 #define DCSR_EORJMPEN  (1 << 27)       /* Jump to next descriptor on EOR */
 #define DCSR_EORSTOPEN (1 << 26)       /* STOP on an EOR */
@@ -313,117 +313,6 @@ typedef void              (*ExcpHndlr) (void) ;
 #define DCMD_RXMCDR    (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4)
 #define DCMD_TXPCDR    (DCMD_INCSRCADDR|DCMD_FLOWTRG|DCMD_BURST32|DCMD_WIDTH4)
 
-/******************************************************************************/
-/*
- * UARTs
- */
-/* Full Function UART (FFUART) */
-#define FFUART         FFRBR
-#define FFRBR          0x40100000  /* Receive Buffer Register (read only) */
-#define FFTHR          0x40100000  /* Transmit Holding Register (write only) */
-#define FFIER          0x40100004  /* Interrupt Enable Register (read/write) */
-#define FFIIR          0x40100008  /* Interrupt ID Register (read only) */
-#define FFFCR          0x40100008  /* FIFO Control Register (write only) */
-#define FFLCR          0x4010000C  /* Line Control Register (read/write) */
-#define FFMCR          0x40100010  /* Modem Control Register (read/write) */
-#define FFLSR          0x40100014  /* Line Status Register (read only) */
-#define FFMSR          0x40100018  /* Modem Status Register (read only) */
-#define FFSPR          0x4010001C  /* Scratch Pad Register (read/write) */
-#define FFISR          0x40100020  /* Infrared Selection Register (read/write) */
-#define FFDLL          0x40100000  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
-#define FFDLH          0x40100004  /* Divisor Latch High Register (DLAB = 1) (read/write) */
-
-/* Bluetooth UART (BTUART) */
-#define BTUART         BTRBR
-#define BTRBR          0x40200000  /* Receive Buffer Register (read only) */
-#define BTTHR          0x40200000  /* Transmit Holding Register (write only) */
-#define BTIER          0x40200004  /* Interrupt Enable Register (read/write) */
-#define BTIIR          0x40200008  /* Interrupt ID Register (read only) */
-#define BTFCR          0x40200008  /* FIFO Control Register (write only) */
-#define BTLCR          0x4020000C  /* Line Control Register (read/write) */
-#define BTMCR          0x40200010  /* Modem Control Register (read/write) */
-#define BTLSR          0x40200014  /* Line Status Register (read only) */
-#define BTMSR          0x40200018  /* Modem Status Register (read only) */
-#define BTSPR          0x4020001C  /* Scratch Pad Register (read/write) */
-#define BTISR          0x40200020  /* Infrared Selection Register (read/write) */
-#define BTDLL          0x40200000  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
-#define BTDLH          0x40200004  /* Divisor Latch High Register (DLAB = 1) (read/write) */
-
-/* Standard UART (STUART) */
-#define STUART         STRBR
-#define STRBR          0x40700000  /* Receive Buffer Register (read only) */
-#define STTHR          0x40700000  /* Transmit Holding Register (write only) */
-#define STIER          0x40700004  /* Interrupt Enable Register (read/write) */
-#define STIIR          0x40700008  /* Interrupt ID Register (read only) */
-#define STFCR          0x40700008  /* FIFO Control Register (write only) */
-#define STLCR          0x4070000C  /* Line Control Register (read/write) */
-#define STMCR          0x40700010  /* Modem Control Register (read/write) */
-#define STLSR          0x40700014  /* Line Status Register (read only) */
-#define STMSR          0x40700018  /* Reserved */
-#define STSPR          0x4070001C  /* Scratch Pad Register (read/write) */
-#define STISR          0x40700020  /* Infrared Selection Register (read/write) */
-#define STDLL          0x40700000  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
-#define STDLH          0x40700004  /* Divisor Latch High Register (DLAB = 1) (read/write) */
-
-#define IER_DMAE       (1 << 7)        /* DMA Requests Enable */
-#define IER_UUE                (1 << 6)        /* UART Unit Enable */
-#define IER_NRZE       (1 << 5)        /* NRZ coding Enable */
-#define IER_RTIOE      (1 << 4)        /* Receiver Time Out Interrupt Enable */
-#define IER_MIE                (1 << 3)        /* Modem Interrupt Enable */
-#define IER_RLSE       (1 << 2)        /* Receiver Line Status Interrupt Enable */
-#define IER_TIE                (1 << 1)        /* Transmit Data request Interrupt Enable */
-#define IER_RAVIE      (1 << 0)        /* Receiver Data Available Interrupt Enable */
-
-#define IIR_FIFOES1    (1 << 7)        /* FIFO Mode Enable Status */
-#define IIR_FIFOES0    (1 << 6)        /* FIFO Mode Enable Status */
-#define IIR_TOD                (1 << 3)        /* Time Out Detected */
-#define IIR_IID2       (1 << 2)        /* Interrupt Source Encoded */
-#define IIR_IID1       (1 << 1)        /* Interrupt Source Encoded */
-#define IIR_IP         (1 << 0)        /* Interrupt Pending (active low) */
-
-#define FCR_ITL2       (1 << 7)        /* Interrupt Trigger Level */
-#define FCR_ITL1       (1 << 6)        /* Interrupt Trigger Level */
-#define FCR_RESETTF    (1 << 2)        /* Reset Transmitter FIFO */
-#define FCR_RESETRF    (1 << 1)        /* Reset Receiver FIFO */
-#define FCR_TRFIFOE    (1 << 0)        /* Transmit and Receive FIFO Enable */
-#define FCR_ITL_1      (0)
-#define FCR_ITL_8      (FCR_ITL1)
-#define FCR_ITL_16     (FCR_ITL2)
-#define FCR_ITL_32     (FCR_ITL2|FCR_ITL1)
-
-#define LCR_DLAB       (1 << 7)        /* Divisor Latch Access Bit */
-#define LCR_SB         (1 << 6)        /* Set Break */
-#define LCR_STKYP      (1 << 5)        /* Sticky Parity */
-#define LCR_EPS                (1 << 4)        /* Even Parity Select */
-#define LCR_PEN                (1 << 3)        /* Parity Enable */
-#define LCR_STB                (1 << 2)        /* Stop Bit */
-#define LCR_WLS1       (1 << 1)        /* Word Length Select */
-#define LCR_WLS0       (1 << 0)        /* Word Length Select */
-
-#define LSR_FIFOE      (1 << 7)        /* FIFO Error Status */
-#define LSR_TEMT       (1 << 6)        /* Transmitter Empty */
-#define LSR_TDRQ       (1 << 5)        /* Transmit Data Request */
-#define LSR_BI         (1 << 4)        /* Break Interrupt */
-#define LSR_FE         (1 << 3)        /* Framing Error */
-#define LSR_PE         (1 << 2)        /* Parity Error */
-#define LSR_OE         (1 << 1)        /* Overrun Error */
-#define LSR_DR         (1 << 0)        /* Data Ready */
-
-#define MCR_LOOP       (1 << 4)        /* */
-#define MCR_OUT2       (1 << 3)        /* force MSR_DCD in loopback mode */
-#define MCR_OUT1       (1 << 2)        /* force MSR_RI in loopback mode */
-#define MCR_RTS                (1 << 1)        /* Request to Send */
-#define MCR_DTR                (1 << 0)        /* Data Terminal Ready */
-
-#define MSR_DCD                (1 << 7)        /* Data Carrier Detect */
-#define MSR_RI         (1 << 6)        /* Ring Indicator */
-#define MSR_DSR                (1 << 5)        /* Data Set Ready */
-#define MSR_CTS                (1 << 4)        /* Clear To Send */
-#define MSR_DDCD       (1 << 3)        /* Delta Data Carrier Detect */
-#define MSR_TERI       (1 << 2)        /* Trailing Edge Ring Indicator */
-#define MSR_DDSR       (1 << 1)        /* Delta Data Set Ready */
-#define MSR_DCTS       (1 << 0)        /* Delta Clear To Send */
-
 /******************************************************************************/
 /*
  * IrSR (Infrared Selection Register)
@@ -549,7 +438,7 @@ typedef void                (*ExcpHndlr) (void) ;
 /*
  * USB Device Controller
  */
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 
 #define UDCCR          0x40600000      /* UDC Control Register */
 #define UDCCR_UDE      (1 << 0)                /* UDC enable */
@@ -908,9 +797,9 @@ typedef void                (*ExcpHndlr) (void) ;
 #define UDCCSR_WR_MASK         (UDCCSR_DME|UDCCSR_FST)
 #define UDC_BCR_MASK           (0x3ff)
 
-#endif /* CONFIG_PXA27X */
+#endif /* CONFIG_CPU_PXA27X */
 
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 
 /******************************************************************************/
 /*
@@ -981,7 +870,7 @@ typedef void                (*ExcpHndlr) (void) ;
 #define UP2OCR_CPVPE   (1<<1)
 #define UP2OCR_CPVEN   (1<<0)
 
-#endif /* CONFIG_PXA27X || CONFIG_CPU_MONAHANS */
+#endif /* CONFIG_CPU_PXA27X || CONFIG_CPU_MONAHANS */
 
 /******************************************************************************/
 /*
@@ -1034,7 +923,7 @@ typedef void               (*ExcpHndlr) (void) ;
 #define OWER           0x40A00018  /* OS Timer Watchdog Enable Register */
 #define OIER           0x40A0001C  /* OS Timer Interrupt Enable Register */
 
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 #define OSCR4          0x40A00040  /* OS Timer Counter Register 4 */
 #define OSCR5          0x40A00044  /* OS Timer Counter Register 5 */
 #define OSCR6          0x40A00048  /* OS Timer Counter Register 6 */
@@ -1062,7 +951,7 @@ typedef void               (*ExcpHndlr) (void) ;
 #define OMCR10         0x40A000D8  /* OS Match Control Register 10 */
 #define OMCR11         0x40A000DC  /* OS Match Control Register 11 */
 
-#endif /* CONFIG_PXA27X || CONFIG_CPU_MONAHANS */
+#endif /* CONFIG_CPU_PXA27X || CONFIG_CPU_MONAHANS */
 
 #define OSSR_M4                (1 << 4)        /* Match status channel 4 */
 #define OSSR_M3                (1 << 3)        /* Match status channel 3 */
@@ -1163,7 +1052,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define CKEN4_SSP3     (1 << 4)  /* SSP3 Unit Clock Enable */
 
 #define CCCR_N_MASK    0x0380          /* Run Mode Frequency to Turbo Mode Frequency Multiplier */
-#if !defined(CONFIG_PXA27X)
+#if !defined(CONFIG_CPU_PXA27X)
 #define CCCR_M_MASK    0x0060          /* Memory Frequency to Run Mode Frequency Multiplier */
 #endif
 #define CCCR_L_MASK    0x001f          /* Crystal Frequency to Memory Frequency Multiplier */
@@ -1182,7 +1071,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define CKEN13_FICP    (1 << 13)       /* FICP Unit Clock Enable */
 #define CKEN12_MMC     (1 << 12)       /* MMC Unit Clock Enable */
 #define CKEN11_USB     (1 << 11)       /* USB Unit Clock Enable */
-#if defined(CONFIG_PXA27X)
+#if defined(CONFIG_CPU_PXA27X)
 #define CKEN10_USBHOST (1 << 10)       /* USB Host Unit Clock Enable */
 #define CKEN24_CAMERA  (1 << 24)       /* Camera Unit Clock Enable */
 #endif
@@ -1198,7 +1087,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define OSCC_OON       (1 << 1)        /* 32.768kHz OON (write-once only bit) */
 #define OSCC_OOK       (1 << 0)        /* 32.768kHz OOK (read-only bit) */
 
-#if !defined(CONFIG_PXA27X)
+#if !defined(CONFIG_CPU_PXA27X)
 #define         CCCR_L09      (0x1F)
 #define         CCCR_L27      (0x1)
 #define         CCCR_L32      (0x2)
@@ -1231,7 +1120,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define PWM_PWDUTY1    0x40C00004  /* PWM 1 Duty Cycle Register */
 #define PWM_PERVAL1    0x40C00008  /* PWM 1 Period Control Register */
 
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 #define PWM_CTRL2      0x40B00010  /* PWM 2 Control Register */
 #define PWM_PWDUTY2    0x40B00014  /* PWM 2 Duty Cycle Register */
 #define PWM_PERVAL2    0x40B00018  /* PWM 2 Period Control Register */
@@ -1239,7 +1128,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define PWM_CTRL3      0x40C00010  /* PWM 3 Control Register */
 #define PWM_PWDUTY3    0x40C00014  /* PWM 3 Duty Cycle Register */
 #define PWM_PERVAL3    0x40C00018  /* PWM 3 Period Control Register */
-#endif /* CONFIG_PXA27X || CONFIG_CPU_MONAHANS */
+#endif /* CONFIG_CPU_PXA27X || CONFIG_CPU_MONAHANS */
 
 /*
  * Interrupt Controller
@@ -1251,14 +1140,14 @@ typedef void            (*ExcpHndlr) (void) ;
 #define ICPR           0x40D00010  /* Interrupt Controller Pending Register */
 #define ICCR           0x40D00014  /* Interrupt Controller Control Register */
 
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 #define ICHP           0x40D00018  /* Interrupt Controller Highest Priority Register */
 #define ICIP2          0x40D0009C  /* Interrupt Controller IRQ Pending Register 2 */
 #define ICMR2          0x40D000A0  /* Interrupt Controller Mask Register 2 */
 #define ICLR2          0x40D000A4  /* Interrupt Controller Level Register 2 */
 #define ICFP2          0x40D000A8  /* Interrupt Controller FIQ Pending Register 2 */
 #define ICPR2          0x40D000AC  /* Interrupt Controller Pending Register 2 */
-#endif /* CONFIG_PXA27X || CONFIG_CPU_MONAHANS */
+#endif /* CONFIG_CPU_PXA27X || CONFIG_CPU_MONAHANS */
 
 /******************************************************************************/
 /*
@@ -1299,7 +1188,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define GAFR2_L                0x40E00064  /* GPIO Alternate Function Select Register GPIO<79:64> */
 #define GAFR2_U                0x40E00068  /* GPIO Alternate Function Select Register GPIO 80 */
 
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 #define GPLR3          0x40E00100  /* GPIO Pin-Level Register GPIO<127:96> */
 #define GPDR3          0x40E0010C  /* GPIO Pin Direction Register GPIO<127:96> */
 #define GPSR3          0x40E00118  /* GPIO Pin Output Set Register GPIO<127:96> */
@@ -1309,7 +1198,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define GEDR3          0x40E00148  /* GPIO Edge Detect Status Register GPIO<127:96> */
 #define GAFR3_L                0x40E0006C  /* GPIO Alternate Function Select Register GPIO<111:96> */
 #define GAFR3_U                0x40E00070  /* GPIO Alternate Function Select Register GPIO<127:112> */
-#endif /* CONFIG_PXA27X || CONFIG_CPU_MONAHANS */
+#endif /* CONFIG_CPU_PXA27X || CONFIG_CPU_MONAHANS */
 
 #ifdef CONFIG_CPU_MONAHANS
 #define GSDR0          0x40E00400 /* Bit-wise Set of GPDR[31:0] */
@@ -1355,7 +1244,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define _GEDR(x)       (0x40E00048 + (((x) & 0x60) >> 3))
 #define _GAFR(x)       (0x40E00054 + (((x) & 0x70) >> 2))
 
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
 #define GPLR(x)                (((((x) & 0x7f) < 96) ? _GPLR(x) : GPLR3))
 #define GPDR(x)                (((((x) & 0x7f) < 96) ? _GPDR(x) : GPDR3))
 #define GPSR(x)                (((((x) & 0x7f) < 96) ? _GPSR(x) : GPSR3))
@@ -2234,7 +2123,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define LCCR0_PDD_S    12
 #define LCCR0_BM       (1 << 20)       /* Branch mask */
 #define LCCR0_OUM      (1 << 21)       /* Output FIFO underrun mask */
-#if defined(CONFIG_PXA27X)
+#if defined(CONFIG_CPU_PXA27X)
 #define LCCR0_LCDT     (1 << 22)       /* LCD Panel Type */
 #define LCCR0_RDSTM    (1 << 23)       /* Read Status Interrupt Mask */
 #define LCCR0_CMDIM    (1 << 24)       /* Command Interrupt Mask */
@@ -2360,7 +2249,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define LCSR1_IU6      (1 << 29)
 
 #define LDCMD_PAL      (1 << 26)       /* instructs DMA to load palette buffer */
-#if defined(CONFIG_PXA27X)
+#if defined(CONFIG_CPU_PXA27X)
 #define LDCMD_SOFINT   (1 << 22)
 #define LDCMD_EOFINT   (1 << 21)
 #endif
@@ -2591,7 +2480,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define MDREFR_K0RUN   (1 << 13)       /* SDCLK0 Run Control/Status */
 #define MDREFR_E0PIN   (1 << 12)       /* SDCKE0 Level Control/Status */
 
-#if defined(CONFIG_PXA27X)
+#if defined(CONFIG_CPU_PXA27X)
 
 #define ARB_CNTRL      0x48000048  /* Arbiter Control Register */
 
@@ -2605,7 +2494,7 @@ typedef void              (*ExcpHndlr) (void) ;
 #define ARB_CORE_PARK          (1<<24)    /* Be parked with core when idle */
 #define ARB_LOCK_FLAG          (1<<23)    /* Only Locking masters gain access to the bus */
 
-#endif /* CONFIG_PXA27X */
+#endif /* CONFIG_CPU_PXA27X */
 
 /* LCD registers */
 #define LCCR4          0x44000010  /* LCD Controller Control Register 4 */
@@ -2739,6 +2628,6 @@ typedef void              (*ExcpHndlr) (void) ;
 #define OSCR4          0x40A00040  /* OS Timer Counter Register */
 #define OMCR4          0x40A000C0  /* */
 
-#endif /* CONFIG_PXA27X */
+#endif /* CONFIG_CPU_PXA27X */
 
 #endif /* _PXA_REGS_H_ */
similarity index 60%
rename from arch/arm/cpu/armv7/omap4/sys_info.c
rename to arch/arm/include/asm/arch-pxa/pxa.h
index b9e57659f0ffbe7928d92a7b77a451cee2996fe8..49c6552c57828619304bfdc81910a821fe834a7e 100644 (file)
@@ -1,10 +1,7 @@
 /*
- * (C) Copyright 2010
- * Texas Instruments, <www.ti.com>
+ * PXA common functions
  *
- * Author :
- *     Aneesh V        <aneesh@ti.com>
- *     Steve Sakoman   <steve@sakoman.com>
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@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
  * MA 02111-1307 USA
  */
 
-#include <common.h>
-#include <asm/arch/sys_proto.h>
+#ifndef        __PXA_H__
+#define        __PXA_H__
 
-/*
- *  get_device_type(): tell if GP/HS/EMU/TST
- */
-u32 get_device_type(void)
-{
-       return 0;
-}
-
-/*
- * get_board_rev() - get board revision
- */
-u32 get_board_rev(void)
-{
-       return 0x20;
-}
-
-/*
- * Print CPU information
- */
-int print_cpuinfo(void)
-{
-
-       puts("CPU  : OMAP4430\n");
+int cpu_is_pxa25x(void);
+int cpu_is_pxa27x(void);
+void pxa2xx_dram_init(void);
 
-       return 0;
-}
+#endif /* __PXA_H__ */
diff --git a/arch/arm/include/asm/arch-pxa/regs-uart.h b/arch/arm/include/asm/arch-pxa/regs-uart.h
new file mode 100644 (file)
index 0000000..355e892
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@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
+ */
+
+#ifndef        __REGS_UART_H__
+#define        __REGS_UART_H__
+
+#define        FFUART_BASE             0x40100000
+#define        BTUART_BASE             0x40200000
+#define        STUART_BASE             0x40700000
+#define        HWUART_BASE             0x41600000
+
+struct pxa_uart_regs {
+       union {
+               uint32_t        thr;
+               uint32_t        rbr;
+               uint32_t        dll;
+       };
+       union {
+               uint32_t        ier;
+               uint32_t        dlh;
+       };
+       union {
+               uint32_t        fcr;
+               uint32_t        iir;
+       };
+       uint32_t        lcr;
+       uint32_t        mcr;
+       uint32_t        lsr;
+       uint32_t        msr;
+       uint32_t        spr;
+       uint32_t        isr;
+};
+
+#define        IER_DMAE        (1 << 7)
+#define        IER_UUE         (1 << 6)
+#define        IER_NRZE        (1 << 5)
+#define        IER_RTIOE       (1 << 4)
+#define        IER_MIE         (1 << 3)
+#define        IER_RLSE        (1 << 2)
+#define        IER_TIE         (1 << 1)
+#define        IER_RAVIE       (1 << 0)
+
+#define        IIR_FIFOES1     (1 << 7)
+#define        IIR_FIFOES0     (1 << 6)
+#define        IIR_TOD         (1 << 3)
+#define        IIR_IID2        (1 << 2)
+#define        IIR_IID1        (1 << 1)
+#define        IIR_IP          (1 << 0)
+
+#define        FCR_ITL2        (1 << 7)
+#define        FCR_ITL1        (1 << 6)
+#define        FCR_RESETTF     (1 << 2)
+#define        FCR_RESETRF     (1 << 1)
+#define        FCR_TRFIFOE     (1 << 0)
+#define        FCR_ITL_1       0
+#define        FCR_ITL_8       (FCR_ITL1)
+#define        FCR_ITL_16      (FCR_ITL2)
+#define        FCR_ITL_32      (FCR_ITL2|FCR_ITL1)
+
+#define        LCR_DLAB        (1 << 7)
+#define        LCR_SB          (1 << 6)
+#define        LCR_STKYP       (1 << 5)
+#define        LCR_EPS         (1 << 4)
+#define        LCR_PEN         (1 << 3)
+#define        LCR_STB         (1 << 2)
+#define        LCR_WLS1        (1 << 1)
+#define        LCR_WLS0        (1 << 0)
+
+#define        LSR_FIFOE       (1 << 7)
+#define        LSR_TEMT        (1 << 6)
+#define        LSR_TDRQ        (1 << 5)
+#define        LSR_BI          (1 << 4)
+#define        LSR_FE          (1 << 3)
+#define        LSR_PE          (1 << 2)
+#define        LSR_OE          (1 << 1)
+#define        LSR_DR          (1 << 0)
+
+#define        MCR_LOOP        (1 << 4)
+#define        MCR_OUT2        (1 << 3)
+#define        MCR_OUT1        (1 << 2)
+#define        MCR_RTS         (1 << 1)
+#define        MCR_DTR         (1 << 0)
+
+#define        MSR_DCD         (1 << 7)
+#define        MSR_RI          (1 << 6)
+#define        MSR_DSR         (1 << 5)
+#define        MSR_CTS         (1 << 4)
+#define        MSR_DDCD        (1 << 3)
+#define        MSR_TERI        (1 << 2)
+#define        MSR_DDSR        (1 << 1)
+#define        MSR_DCTS        (1 << 0)
+
+#endif /* __REGS_UART_H__ */
index 9adc563788a0ea8baff4e5a4923241706057dea8..ad9a875de56340d29174a8dc2e3f3faa60dabf71 100644 (file)
@@ -31,6 +31,9 @@
 #define MIDR_CORTEX_A9_R1P3    0x411FC093
 #define MIDR_CORTEX_A9_R2P10   0x412FC09A
 
+/* Cortex-A15 revisions */
+#define MIDR_CORTEX_A15_R0P0   0x410FC0F0
+
 /* CCSIDR */
 #define CCSIDR_LINE_SIZE_OFFSET                0
 #define CCSIDR_LINE_SIZE_MASK          0x7
index 501ce0e6805aa0d531fec53260ef86209cda6618..5bbb0a04646733071b680b84a09c6b587f19e7d9 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
diff --git a/arch/arm/include/asm/emif.h b/arch/arm/include/asm/emif.h
new file mode 100644 (file)
index 0000000..e5c7d2c
--- /dev/null
@@ -0,0 +1,1035 @@
+/*
+ * OMAP44xx EMIF header
+ *
+ * Copyright (C) 2009-2010 Texas Instruments, Inc.
+ *
+ * Aneesh V <aneesh@ti.com>
+ *
+ * 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.
+ */
+
+#ifndef _EMIF_H_
+#define _EMIF_H_
+#include <asm/types.h>
+#include <common.h>
+
+/* Base address */
+#define EMIF1_BASE                             0x4c000000
+#define EMIF2_BASE                             0x4d000000
+
+/* Registers shifts and masks */
+
+/* EMIF_MOD_ID_REV */
+#define EMIF_REG_SCHEME_SHIFT                  30
+#define EMIF_REG_SCHEME_MASK                   (0x3 << 30)
+#define EMIF_REG_MODULE_ID_SHIFT                       16
+#define EMIF_REG_MODULE_ID_MASK                        (0xfff << 16)
+#define EMIF_REG_RTL_VERSION_SHIFT                     11
+#define EMIF_REG_RTL_VERSION_MASK                      (0x1f << 11)
+#define EMIF_REG_MAJOR_REVISION_SHIFT          8
+#define EMIF_REG_MAJOR_REVISION_MASK           (0x7 << 8)
+#define EMIF_REG_MINOR_REVISION_SHIFT          0
+#define EMIF_REG_MINOR_REVISION_MASK           (0x3f << 0)
+
+/* STATUS */
+#define EMIF_REG_BE_SHIFT                              31
+#define EMIF_REG_BE_MASK                               (1 << 31)
+#define EMIF_REG_DUAL_CLK_MODE_SHIFT           30
+#define EMIF_REG_DUAL_CLK_MODE_MASK                    (1 << 30)
+#define EMIF_REG_FAST_INIT_SHIFT                       29
+#define EMIF_REG_FAST_INIT_MASK                        (1 << 29)
+#define EMIF_REG_PHY_DLL_READY_SHIFT           2
+#define EMIF_REG_PHY_DLL_READY_MASK                    (1 << 2)
+
+/* SDRAM_CONFIG */
+#define EMIF_REG_SDRAM_TYPE_SHIFT                      29
+#define EMIF_REG_SDRAM_TYPE_MASK                       (0x7 << 29)
+#define EMIF_REG_IBANK_POS_SHIFT                       27
+#define EMIF_REG_IBANK_POS_MASK                        (0x3 << 27)
+#define EMIF_REG_DDR_TERM_SHIFT                        24
+#define EMIF_REG_DDR_TERM_MASK                 (0x7 << 24)
+#define EMIF_REG_DDR2_DDQS_SHIFT                       23
+#define EMIF_REG_DDR2_DDQS_MASK                        (1 << 23)
+#define EMIF_REG_DYN_ODT_SHIFT                 21
+#define EMIF_REG_DYN_ODT_MASK                  (0x3 << 21)
+#define EMIF_REG_DDR_DISABLE_DLL_SHIFT         20
+#define EMIF_REG_DDR_DISABLE_DLL_MASK          (1 << 20)
+#define EMIF_REG_SDRAM_DRIVE_SHIFT                     18
+#define EMIF_REG_SDRAM_DRIVE_MASK                      (0x3 << 18)
+#define EMIF_REG_CWL_SHIFT                             16
+#define EMIF_REG_CWL_MASK                              (0x3 << 16)
+#define EMIF_REG_NARROW_MODE_SHIFT                     14
+#define EMIF_REG_NARROW_MODE_MASK                      (0x3 << 14)
+#define EMIF_REG_CL_SHIFT                              10
+#define EMIF_REG_CL_MASK                               (0xf << 10)
+#define EMIF_REG_ROWSIZE_SHIFT                 7
+#define EMIF_REG_ROWSIZE_MASK                  (0x7 << 7)
+#define EMIF_REG_IBANK_SHIFT                   4
+#define EMIF_REG_IBANK_MASK                            (0x7 << 4)
+#define EMIF_REG_EBANK_SHIFT                   3
+#define EMIF_REG_EBANK_MASK                            (1 << 3)
+#define EMIF_REG_PAGESIZE_SHIFT                        0
+#define EMIF_REG_PAGESIZE_MASK                 (0x7 << 0)
+
+/* SDRAM_CONFIG_2 */
+#define EMIF_REG_CS1NVMEN_SHIFT                        30
+#define EMIF_REG_CS1NVMEN_MASK                 (1 << 30)
+#define EMIF_REG_EBANK_POS_SHIFT                       27
+#define EMIF_REG_EBANK_POS_MASK                        (1 << 27)
+#define EMIF_REG_RDBNUM_SHIFT                  4
+#define EMIF_REG_RDBNUM_MASK                   (0x3 << 4)
+#define EMIF_REG_RDBSIZE_SHIFT                 0
+#define EMIF_REG_RDBSIZE_MASK                  (0x7 << 0)
+
+/* SDRAM_REF_CTRL */
+#define EMIF_REG_INITREF_DIS_SHIFT                     31
+#define EMIF_REG_INITREF_DIS_MASK                      (1 << 31)
+#define EMIF_REG_SRT_SHIFT                             29
+#define EMIF_REG_SRT_MASK                              (1 << 29)
+#define EMIF_REG_ASR_SHIFT                             28
+#define EMIF_REG_ASR_MASK                              (1 << 28)
+#define EMIF_REG_PASR_SHIFT                            24
+#define EMIF_REG_PASR_MASK                             (0x7 << 24)
+#define EMIF_REG_REFRESH_RATE_SHIFT                    0
+#define EMIF_REG_REFRESH_RATE_MASK                     (0xffff << 0)
+
+/* SDRAM_REF_CTRL_SHDW */
+#define EMIF_REG_REFRESH_RATE_SHDW_SHIFT               0
+#define EMIF_REG_REFRESH_RATE_SHDW_MASK                (0xffff << 0)
+
+/* SDRAM_TIM_1 */
+#define EMIF_REG_T_RP_SHIFT                            25
+#define EMIF_REG_T_RP_MASK                             (0xf << 25)
+#define EMIF_REG_T_RCD_SHIFT                   21
+#define EMIF_REG_T_RCD_MASK                            (0xf << 21)
+#define EMIF_REG_T_WR_SHIFT                            17
+#define EMIF_REG_T_WR_MASK                             (0xf << 17)
+#define EMIF_REG_T_RAS_SHIFT                   12
+#define EMIF_REG_T_RAS_MASK                            (0x1f << 12)
+#define EMIF_REG_T_RC_SHIFT                            6
+#define EMIF_REG_T_RC_MASK                             (0x3f << 6)
+#define EMIF_REG_T_RRD_SHIFT                   3
+#define EMIF_REG_T_RRD_MASK                            (0x7 << 3)
+#define EMIF_REG_T_WTR_SHIFT                   0
+#define EMIF_REG_T_WTR_MASK                            (0x7 << 0)
+
+/* SDRAM_TIM_1_SHDW */
+#define EMIF_REG_T_RP_SHDW_SHIFT                       25
+#define EMIF_REG_T_RP_SHDW_MASK                        (0xf << 25)
+#define EMIF_REG_T_RCD_SHDW_SHIFT                      21
+#define EMIF_REG_T_RCD_SHDW_MASK                       (0xf << 21)
+#define EMIF_REG_T_WR_SHDW_SHIFT                       17
+#define EMIF_REG_T_WR_SHDW_MASK                        (0xf << 17)
+#define EMIF_REG_T_RAS_SHDW_SHIFT                      12
+#define EMIF_REG_T_RAS_SHDW_MASK                       (0x1f << 12)
+#define EMIF_REG_T_RC_SHDW_SHIFT                       6
+#define EMIF_REG_T_RC_SHDW_MASK                        (0x3f << 6)
+#define EMIF_REG_T_RRD_SHDW_SHIFT                      3
+#define EMIF_REG_T_RRD_SHDW_MASK                       (0x7 << 3)
+#define EMIF_REG_T_WTR_SHDW_SHIFT                      0
+#define EMIF_REG_T_WTR_SHDW_MASK                       (0x7 << 0)
+
+/* SDRAM_TIM_2 */
+#define EMIF_REG_T_XP_SHIFT                            28
+#define EMIF_REG_T_XP_MASK                             (0x7 << 28)
+#define EMIF_REG_T_ODT_SHIFT                   25
+#define EMIF_REG_T_ODT_MASK                            (0x7 << 25)
+#define EMIF_REG_T_XSNR_SHIFT                  16
+#define EMIF_REG_T_XSNR_MASK                   (0x1ff << 16)
+#define EMIF_REG_T_XSRD_SHIFT                  6
+#define EMIF_REG_T_XSRD_MASK                   (0x3ff << 6)
+#define EMIF_REG_T_RTP_SHIFT                   3
+#define EMIF_REG_T_RTP_MASK                            (0x7 << 3)
+#define EMIF_REG_T_CKE_SHIFT                   0
+#define EMIF_REG_T_CKE_MASK                            (0x7 << 0)
+
+/* SDRAM_TIM_2_SHDW */
+#define EMIF_REG_T_XP_SHDW_SHIFT                       28
+#define EMIF_REG_T_XP_SHDW_MASK                        (0x7 << 28)
+#define EMIF_REG_T_ODT_SHDW_SHIFT                      25
+#define EMIF_REG_T_ODT_SHDW_MASK                       (0x7 << 25)
+#define EMIF_REG_T_XSNR_SHDW_SHIFT                     16
+#define EMIF_REG_T_XSNR_SHDW_MASK                      (0x1ff << 16)
+#define EMIF_REG_T_XSRD_SHDW_SHIFT                     6
+#define EMIF_REG_T_XSRD_SHDW_MASK                      (0x3ff << 6)
+#define EMIF_REG_T_RTP_SHDW_SHIFT                      3
+#define EMIF_REG_T_RTP_SHDW_MASK                       (0x7 << 3)
+#define EMIF_REG_T_CKE_SHDW_SHIFT                      0
+#define EMIF_REG_T_CKE_SHDW_MASK                       (0x7 << 0)
+
+/* SDRAM_TIM_3 */
+#define EMIF_REG_T_CKESR_SHIFT                 21
+#define EMIF_REG_T_CKESR_MASK                  (0x7 << 21)
+#define EMIF_REG_ZQ_ZQCS_SHIFT                 15
+#define EMIF_REG_ZQ_ZQCS_MASK                  (0x3f << 15)
+#define EMIF_REG_T_TDQSCKMAX_SHIFT                     13
+#define EMIF_REG_T_TDQSCKMAX_MASK                      (0x3 << 13)
+#define EMIF_REG_T_RFC_SHIFT                   4
+#define EMIF_REG_T_RFC_MASK                            (0x1ff << 4)
+#define EMIF_REG_T_RAS_MAX_SHIFT                       0
+#define EMIF_REG_T_RAS_MAX_MASK                        (0xf << 0)
+
+/* SDRAM_TIM_3_SHDW */
+#define EMIF_REG_T_CKESR_SHDW_SHIFT                    21
+#define EMIF_REG_T_CKESR_SHDW_MASK                     (0x7 << 21)
+#define EMIF_REG_ZQ_ZQCS_SHDW_SHIFT                    15
+#define EMIF_REG_ZQ_ZQCS_SHDW_MASK                     (0x3f << 15)
+#define EMIF_REG_T_TDQSCKMAX_SHDW_SHIFT                13
+#define EMIF_REG_T_TDQSCKMAX_SHDW_MASK         (0x3 << 13)
+#define EMIF_REG_T_RFC_SHDW_SHIFT                      4
+#define EMIF_REG_T_RFC_SHDW_MASK                       (0x1ff << 4)
+#define EMIF_REG_T_RAS_MAX_SHDW_SHIFT          0
+#define EMIF_REG_T_RAS_MAX_SHDW_MASK           (0xf << 0)
+
+/* LPDDR2_NVM_TIM */
+#define EMIF_REG_NVM_T_XP_SHIFT                        28
+#define EMIF_REG_NVM_T_XP_MASK                 (0x7 << 28)
+#define EMIF_REG_NVM_T_WTR_SHIFT                       24
+#define EMIF_REG_NVM_T_WTR_MASK                        (0x7 << 24)
+#define EMIF_REG_NVM_T_RP_SHIFT                        20
+#define EMIF_REG_NVM_T_RP_MASK                 (0xf << 20)
+#define EMIF_REG_NVM_T_WRA_SHIFT                       16
+#define EMIF_REG_NVM_T_WRA_MASK                        (0xf << 16)
+#define EMIF_REG_NVM_T_RRD_SHIFT                       8
+#define EMIF_REG_NVM_T_RRD_MASK                        (0xff << 8)
+#define EMIF_REG_NVM_T_RCDMIN_SHIFT                    0
+#define EMIF_REG_NVM_T_RCDMIN_MASK                     (0xff << 0)
+
+/* LPDDR2_NVM_TIM_SHDW */
+#define EMIF_REG_NVM_T_XP_SHDW_SHIFT           28
+#define EMIF_REG_NVM_T_XP_SHDW_MASK                    (0x7 << 28)
+#define EMIF_REG_NVM_T_WTR_SHDW_SHIFT          24
+#define EMIF_REG_NVM_T_WTR_SHDW_MASK           (0x7 << 24)
+#define EMIF_REG_NVM_T_RP_SHDW_SHIFT           20
+#define EMIF_REG_NVM_T_RP_SHDW_MASK                    (0xf << 20)
+#define EMIF_REG_NVM_T_WRA_SHDW_SHIFT          16
+#define EMIF_REG_NVM_T_WRA_SHDW_MASK           (0xf << 16)
+#define EMIF_REG_NVM_T_RRD_SHDW_SHIFT          8
+#define EMIF_REG_NVM_T_RRD_SHDW_MASK           (0xff << 8)
+#define EMIF_REG_NVM_T_RCDMIN_SHDW_SHIFT               0
+#define EMIF_REG_NVM_T_RCDMIN_SHDW_MASK                (0xff << 0)
+
+/* PWR_MGMT_CTRL */
+#define EMIF_REG_IDLEMODE_SHIFT                        30
+#define EMIF_REG_IDLEMODE_MASK                 (0x3 << 30)
+#define EMIF_REG_PD_TIM_SHIFT                  12
+#define EMIF_REG_PD_TIM_MASK                   (0xf << 12)
+#define EMIF_REG_DPD_EN_SHIFT                  11
+#define EMIF_REG_DPD_EN_MASK                   (1 << 11)
+#define EMIF_REG_LP_MODE_SHIFT                 8
+#define EMIF_REG_LP_MODE_MASK                  (0x7 << 8)
+#define EMIF_REG_SR_TIM_SHIFT                  4
+#define EMIF_REG_SR_TIM_MASK                   (0xf << 4)
+#define EMIF_REG_CS_TIM_SHIFT                  0
+#define EMIF_REG_CS_TIM_MASK                   (0xf << 0)
+
+/* PWR_MGMT_CTRL_SHDW */
+#define EMIF_REG_PD_TIM_SHDW_SHIFT                     8
+#define EMIF_REG_PD_TIM_SHDW_MASK                      (0xf << 8)
+#define EMIF_REG_SR_TIM_SHDW_SHIFT                     4
+#define EMIF_REG_SR_TIM_SHDW_MASK                      (0xf << 4)
+#define EMIF_REG_CS_TIM_SHDW_SHIFT                     0
+#define EMIF_REG_CS_TIM_SHDW_MASK                      (0xf << 0)
+
+/* LPDDR2_MODE_REG_DATA */
+#define EMIF_REG_VALUE_0_SHIFT                 0
+#define EMIF_REG_VALUE_0_MASK                  (0x7f << 0)
+
+/* LPDDR2_MODE_REG_CFG */
+#define EMIF_REG_CS_SHIFT                              31
+#define EMIF_REG_CS_MASK                               (1 << 31)
+#define EMIF_REG_REFRESH_EN_SHIFT                      30
+#define EMIF_REG_REFRESH_EN_MASK                       (1 << 30)
+#define EMIF_REG_ADDRESS_SHIFT                 0
+#define EMIF_REG_ADDRESS_MASK                  (0xff << 0)
+
+/* OCP_CONFIG */
+#define EMIF_REG_SYS_THRESH_MAX_SHIFT          24
+#define EMIF_REG_SYS_THRESH_MAX_MASK           (0xf << 24)
+#define EMIF_REG_MPU_THRESH_MAX_SHIFT          20
+#define EMIF_REG_MPU_THRESH_MAX_MASK           (0xf << 20)
+#define EMIF_REG_LL_THRESH_MAX_SHIFT           16
+#define EMIF_REG_LL_THRESH_MAX_MASK                    (0xf << 16)
+#define EMIF_REG_PR_OLD_COUNT_SHIFT                    0
+#define EMIF_REG_PR_OLD_COUNT_MASK                     (0xff << 0)
+
+/* OCP_CFG_VAL_1 */
+#define EMIF_REG_SYS_BUS_WIDTH_SHIFT           30
+#define EMIF_REG_SYS_BUS_WIDTH_MASK                    (0x3 << 30)
+#define EMIF_REG_LL_BUS_WIDTH_SHIFT                    28
+#define EMIF_REG_LL_BUS_WIDTH_MASK                     (0x3 << 28)
+#define EMIF_REG_WR_FIFO_DEPTH_SHIFT           8
+#define EMIF_REG_WR_FIFO_DEPTH_MASK                    (0xff << 8)
+#define EMIF_REG_CMD_FIFO_DEPTH_SHIFT          0
+#define EMIF_REG_CMD_FIFO_DEPTH_MASK           (0xff << 0)
+
+/* OCP_CFG_VAL_2 */
+#define EMIF_REG_RREG_FIFO_DEPTH_SHIFT         16
+#define EMIF_REG_RREG_FIFO_DEPTH_MASK          (0xff << 16)
+#define EMIF_REG_RSD_FIFO_DEPTH_SHIFT          8
+#define EMIF_REG_RSD_FIFO_DEPTH_MASK           (0xff << 8)
+#define EMIF_REG_RCMD_FIFO_DEPTH_SHIFT         0
+#define EMIF_REG_RCMD_FIFO_DEPTH_MASK          (0xff << 0)
+
+/* IODFT_TLGC */
+#define EMIF_REG_TLEC_SHIFT                            16
+#define EMIF_REG_TLEC_MASK                             (0xffff << 16)
+#define EMIF_REG_MT_SHIFT                              14
+#define EMIF_REG_MT_MASK                               (1 << 14)
+#define EMIF_REG_ACT_CAP_EN_SHIFT                      13
+#define EMIF_REG_ACT_CAP_EN_MASK                       (1 << 13)
+#define EMIF_REG_OPG_LD_SHIFT                  12
+#define EMIF_REG_OPG_LD_MASK                   (1 << 12)
+#define EMIF_REG_RESET_PHY_SHIFT                       10
+#define EMIF_REG_RESET_PHY_MASK                        (1 << 10)
+#define EMIF_REG_MMS_SHIFT                             8
+#define EMIF_REG_MMS_MASK                              (1 << 8)
+#define EMIF_REG_MC_SHIFT                              4
+#define EMIF_REG_MC_MASK                               (0x3 << 4)
+#define EMIF_REG_PC_SHIFT                              1
+#define EMIF_REG_PC_MASK                               (0x7 << 1)
+#define EMIF_REG_TM_SHIFT                              0
+#define EMIF_REG_TM_MASK                               (1 << 0)
+
+/* IODFT_CTRL_MISR_RSLT */
+#define EMIF_REG_DQM_TLMR_SHIFT                        16
+#define EMIF_REG_DQM_TLMR_MASK                 (0x3ff << 16)
+#define EMIF_REG_CTL_TLMR_SHIFT                        0
+#define EMIF_REG_CTL_TLMR_MASK                 (0x7ff << 0)
+
+/* IODFT_ADDR_MISR_RSLT */
+#define EMIF_REG_ADDR_TLMR_SHIFT                       0
+#define EMIF_REG_ADDR_TLMR_MASK                        (0x1fffff << 0)
+
+/* IODFT_DATA_MISR_RSLT_1 */
+#define EMIF_REG_DATA_TLMR_31_0_SHIFT          0
+#define EMIF_REG_DATA_TLMR_31_0_MASK           (0xffffffff << 0)
+
+/* IODFT_DATA_MISR_RSLT_2 */
+#define EMIF_REG_DATA_TLMR_63_32_SHIFT         0
+#define EMIF_REG_DATA_TLMR_63_32_MASK          (0xffffffff << 0)
+
+/* IODFT_DATA_MISR_RSLT_3 */
+#define EMIF_REG_DATA_TLMR_66_64_SHIFT         0
+#define EMIF_REG_DATA_TLMR_66_64_MASK          (0x7 << 0)
+
+/* PERF_CNT_1 */
+#define EMIF_REG_COUNTER1_SHIFT                        0
+#define EMIF_REG_COUNTER1_MASK                 (0xffffffff << 0)
+
+/* PERF_CNT_2 */
+#define EMIF_REG_COUNTER2_SHIFT                        0
+#define EMIF_REG_COUNTER2_MASK                 (0xffffffff << 0)
+
+/* PERF_CNT_CFG */
+#define EMIF_REG_CNTR2_MCONNID_EN_SHIFT                31
+#define EMIF_REG_CNTR2_MCONNID_EN_MASK         (1 << 31)
+#define EMIF_REG_CNTR2_REGION_EN_SHIFT         30
+#define EMIF_REG_CNTR2_REGION_EN_MASK          (1 << 30)
+#define EMIF_REG_CNTR2_CFG_SHIFT                       16
+#define EMIF_REG_CNTR2_CFG_MASK                        (0xf << 16)
+#define EMIF_REG_CNTR1_MCONNID_EN_SHIFT                15
+#define EMIF_REG_CNTR1_MCONNID_EN_MASK         (1 << 15)
+#define EMIF_REG_CNTR1_REGION_EN_SHIFT         14
+#define EMIF_REG_CNTR1_REGION_EN_MASK          (1 << 14)
+#define EMIF_REG_CNTR1_CFG_SHIFT                       0
+#define EMIF_REG_CNTR1_CFG_MASK                        (0xf << 0)
+
+/* PERF_CNT_SEL */
+#define EMIF_REG_MCONNID2_SHIFT                        24
+#define EMIF_REG_MCONNID2_MASK                 (0xff << 24)
+#define EMIF_REG_REGION_SEL2_SHIFT                     16
+#define EMIF_REG_REGION_SEL2_MASK                      (0x3 << 16)
+#define EMIF_REG_MCONNID1_SHIFT                        8
+#define EMIF_REG_MCONNID1_MASK                 (0xff << 8)
+#define EMIF_REG_REGION_SEL1_SHIFT                     0
+#define EMIF_REG_REGION_SEL1_MASK                      (0x3 << 0)
+
+/* PERF_CNT_TIM */
+#define EMIF_REG_TOTAL_TIME_SHIFT                      0
+#define EMIF_REG_TOTAL_TIME_MASK                       (0xffffffff << 0)
+
+/* READ_IDLE_CTRL */
+#define EMIF_REG_READ_IDLE_LEN_SHIFT           16
+#define EMIF_REG_READ_IDLE_LEN_MASK                    (0xf << 16)
+#define EMIF_REG_READ_IDLE_INTERVAL_SHIFT              0
+#define EMIF_REG_READ_IDLE_INTERVAL_MASK               (0x1ff << 0)
+
+/* READ_IDLE_CTRL_SHDW */
+#define EMIF_REG_READ_IDLE_LEN_SHDW_SHIFT              16
+#define EMIF_REG_READ_IDLE_LEN_SHDW_MASK               (0xf << 16)
+#define EMIF_REG_READ_IDLE_INTERVAL_SHDW_SHIFT 0
+#define EMIF_REG_READ_IDLE_INTERVAL_SHDW_MASK  (0x1ff << 0)
+
+/* IRQ_EOI */
+#define EMIF_REG_EOI_SHIFT                             0
+#define EMIF_REG_EOI_MASK                              (1 << 0)
+
+/* IRQSTATUS_RAW_SYS */
+#define EMIF_REG_DNV_SYS_SHIFT                 2
+#define EMIF_REG_DNV_SYS_MASK                  (1 << 2)
+#define EMIF_REG_TA_SYS_SHIFT                  1
+#define EMIF_REG_TA_SYS_MASK                   (1 << 1)
+#define EMIF_REG_ERR_SYS_SHIFT                 0
+#define EMIF_REG_ERR_SYS_MASK                  (1 << 0)
+
+/* IRQSTATUS_RAW_LL */
+#define EMIF_REG_DNV_LL_SHIFT                  2
+#define EMIF_REG_DNV_LL_MASK                   (1 << 2)
+#define EMIF_REG_TA_LL_SHIFT                   1
+#define EMIF_REG_TA_LL_MASK                            (1 << 1)
+#define EMIF_REG_ERR_LL_SHIFT                  0
+#define EMIF_REG_ERR_LL_MASK                   (1 << 0)
+
+/* IRQSTATUS_SYS */
+
+/* IRQSTATUS_LL */
+
+/* IRQENABLE_SET_SYS */
+#define EMIF_REG_EN_DNV_SYS_SHIFT                      2
+#define EMIF_REG_EN_DNV_SYS_MASK                       (1 << 2)
+#define EMIF_REG_EN_TA_SYS_SHIFT                       1
+#define EMIF_REG_EN_TA_SYS_MASK                        (1 << 1)
+#define EMIF_REG_EN_ERR_SYS_SHIFT                      0
+#define EMIF_REG_EN_ERR_SYS_MASK                       (1 << 0)
+
+/* IRQENABLE_SET_LL */
+#define EMIF_REG_EN_DNV_LL_SHIFT                       2
+#define EMIF_REG_EN_DNV_LL_MASK                        (1 << 2)
+#define EMIF_REG_EN_TA_LL_SHIFT                        1
+#define EMIF_REG_EN_TA_LL_MASK                 (1 << 1)
+#define EMIF_REG_EN_ERR_LL_SHIFT                       0
+#define EMIF_REG_EN_ERR_LL_MASK                        (1 << 0)
+
+/* IRQENABLE_CLR_SYS */
+
+/* IRQENABLE_CLR_LL */
+
+/* ZQ_CONFIG */
+#define EMIF_REG_ZQ_CS1EN_SHIFT                        31
+#define EMIF_REG_ZQ_CS1EN_MASK                 (1 << 31)
+#define EMIF_REG_ZQ_CS0EN_SHIFT                        30
+#define EMIF_REG_ZQ_CS0EN_MASK                 (1 << 30)
+#define EMIF_REG_ZQ_DUALCALEN_SHIFT                    29
+#define EMIF_REG_ZQ_DUALCALEN_MASK                     (1 << 29)
+#define EMIF_REG_ZQ_SFEXITEN_SHIFT                     28
+#define EMIF_REG_ZQ_SFEXITEN_MASK                      (1 << 28)
+#define EMIF_REG_ZQ_ZQINIT_MULT_SHIFT          18
+#define EMIF_REG_ZQ_ZQINIT_MULT_MASK           (0x3 << 18)
+#define EMIF_REG_ZQ_ZQCL_MULT_SHIFT                    16
+#define EMIF_REG_ZQ_ZQCL_MULT_MASK                     (0x3 << 16)
+#define EMIF_REG_ZQ_REFINTERVAL_SHIFT          0
+#define EMIF_REG_ZQ_REFINTERVAL_MASK           (0xffff << 0)
+
+/* TEMP_ALERT_CONFIG */
+#define EMIF_REG_TA_CS1EN_SHIFT                        31
+#define EMIF_REG_TA_CS1EN_MASK                 (1 << 31)
+#define EMIF_REG_TA_CS0EN_SHIFT                        30
+#define EMIF_REG_TA_CS0EN_MASK                 (1 << 30)
+#define EMIF_REG_TA_SFEXITEN_SHIFT                     28
+#define EMIF_REG_TA_SFEXITEN_MASK                      (1 << 28)
+#define EMIF_REG_TA_DEVWDT_SHIFT                       26
+#define EMIF_REG_TA_DEVWDT_MASK                        (0x3 << 26)
+#define EMIF_REG_TA_DEVCNT_SHIFT                       24
+#define EMIF_REG_TA_DEVCNT_MASK                        (0x3 << 24)
+#define EMIF_REG_TA_REFINTERVAL_SHIFT          0
+#define EMIF_REG_TA_REFINTERVAL_MASK           (0x3fffff << 0)
+
+/* OCP_ERR_LOG */
+#define EMIF_REG_MADDRSPACE_SHIFT                      14
+#define EMIF_REG_MADDRSPACE_MASK                       (0x3 << 14)
+#define EMIF_REG_MBURSTSEQ_SHIFT                       11
+#define EMIF_REG_MBURSTSEQ_MASK                        (0x7 << 11)
+#define EMIF_REG_MCMD_SHIFT                            8
+#define EMIF_REG_MCMD_MASK                             (0x7 << 8)
+#define EMIF_REG_MCONNID_SHIFT                 0
+#define EMIF_REG_MCONNID_MASK                  (0xff << 0)
+
+/* DDR_PHY_CTRL_1 */
+#define EMIF_REG_DDR_PHY_CTRL_1_SHIFT          4
+#define EMIF_REG_DDR_PHY_CTRL_1_MASK           (0xfffffff << 4)
+#define EMIF_REG_READ_LATENCY_SHIFT                    0
+#define EMIF_REG_READ_LATENCY_MASK                     (0xf << 0)
+#define EMIF_REG_DLL_SLAVE_DLY_CTRL_SHIFT              4
+#define EMIF_REG_DLL_SLAVE_DLY_CTRL_MASK               (0xFF << 4)
+#define EMIF_EMIF_DDR_PHY_CTRL_1_BASE_VAL_SHIFT        12
+#define EMIF_EMIF_DDR_PHY_CTRL_1_BASE_VAL_MASK (0xFFFFF << 12)
+
+/* DDR_PHY_CTRL_1_SHDW */
+#define EMIF_REG_DDR_PHY_CTRL_1_SHDW_SHIFT             4
+#define EMIF_REG_DDR_PHY_CTRL_1_SHDW_MASK              (0xfffffff << 4)
+#define EMIF_REG_READ_LATENCY_SHDW_SHIFT               0
+#define EMIF_REG_READ_LATENCY_SHDW_MASK                (0xf << 0)
+#define EMIF_REG_DLL_SLAVE_DLY_CTRL_SHDW_SHIFT 4
+#define EMIF_REG_DLL_SLAVE_DLY_CTRL_SHDW_MASK  (0xFF << 4)
+#define EMIF_EMIF_DDR_PHY_CTRL_1_BASE_VAL_SHDW_SHIFT 12
+#define EMIF_EMIF_DDR_PHY_CTRL_1_BASE_VAL_SHDW_MASK    (0xFFFFF << 12)
+
+/* DDR_PHY_CTRL_2 */
+#define EMIF_REG_DDR_PHY_CTRL_2_SHIFT          0
+#define EMIF_REG_DDR_PHY_CTRL_2_MASK           (0xffffffff << 0)
+
+/* DMM */
+#define DMM_BASE                       0x4E000040
+
+/* Memory Adapter */
+#define MA_BASE                                0x482AF040
+
+/* DMM_LISA_MAP */
+#define EMIF_SYS_ADDR_SHIFT            24
+#define EMIF_SYS_ADDR_MASK             (0xff << 24)
+#define EMIF_SYS_SIZE_SHIFT            20
+#define EMIF_SYS_SIZE_MASK             (0x7 << 20)
+#define EMIF_SDRC_INTL_SHIFT   18
+#define EMIF_SDRC_INTL_MASK            (0x3 << 18)
+#define EMIF_SDRC_ADDRSPC_SHIFT        16
+#define EMIF_SDRC_ADDRSPC_MASK (0x3 << 16)
+#define EMIF_SDRC_MAP_SHIFT            8
+#define EMIF_SDRC_MAP_MASK             (0x3 << 8)
+#define EMIF_SDRC_ADDR_SHIFT   0
+#define EMIF_SDRC_ADDR_MASK            (0xff << 0)
+
+/* DMM_LISA_MAP fields */
+#define DMM_SDRC_MAP_UNMAPPED          0
+#define DMM_SDRC_MAP_EMIF1_ONLY                1
+#define DMM_SDRC_MAP_EMIF2_ONLY                2
+#define DMM_SDRC_MAP_EMIF1_AND_EMIF2   3
+
+#define DMM_SDRC_INTL_NONE             0
+#define DMM_SDRC_INTL_128B             1
+#define DMM_SDRC_INTL_256B             2
+#define DMM_SDRC_INTL_512              3
+
+#define DMM_SDRC_ADDR_SPC_SDRAM                0
+#define DMM_SDRC_ADDR_SPC_NVM          1
+#define DMM_SDRC_ADDR_SPC_INVALID      2
+
+#define DMM_LISA_MAP_INTERLEAVED_BASE_VAL              (\
+       (DMM_SDRC_MAP_EMIF1_AND_EMIF2 << EMIF_SDRC_MAP_SHIFT) |\
+       (DMM_SDRC_ADDR_SPC_SDRAM << EMIF_SDRC_ADDRSPC_SHIFT) |\
+       (DMM_SDRC_INTL_128B << EMIF_SDRC_INTL_SHIFT) |\
+       (CONFIG_SYS_SDRAM_BASE << EMIF_SYS_ADDR_SHIFT))
+
+#define DMM_LISA_MAP_EMIF1_ONLY_BASE_VAL       (\
+       (DMM_SDRC_MAP_EMIF1_ONLY << EMIF_SDRC_MAP_SHIFT)|\
+       (DMM_SDRC_ADDR_SPC_SDRAM << EMIF_SDRC_ADDRSPC_SHIFT)|\
+       (DMM_SDRC_INTL_NONE << EMIF_SDRC_INTL_SHIFT))
+
+#define DMM_LISA_MAP_EMIF2_ONLY_BASE_VAL       (\
+       (DMM_SDRC_MAP_EMIF2_ONLY << EMIF_SDRC_MAP_SHIFT)|\
+       (DMM_SDRC_ADDR_SPC_SDRAM << EMIF_SDRC_ADDRSPC_SHIFT)|\
+       (DMM_SDRC_INTL_NONE << EMIF_SDRC_INTL_SHIFT))
+
+/* Trap for invalid TILER PAT entries */
+#define DMM_LISA_MAP_0_INVAL_ADDR_TRAP         (\
+       (0  << EMIF_SDRC_ADDR_SHIFT) |\
+       (DMM_SDRC_MAP_EMIF1_ONLY << EMIF_SDRC_MAP_SHIFT)|\
+       (DMM_SDRC_ADDR_SPC_INVALID << EMIF_SDRC_ADDRSPC_SHIFT)|\
+       (DMM_SDRC_INTL_NONE << EMIF_SDRC_INTL_SHIFT)|\
+       (0xFF << EMIF_SYS_ADDR_SHIFT))
+
+
+/* Reg mapping structure */
+struct emif_reg_struct {
+       u32 emif_mod_id_rev;
+       u32 emif_status;
+       u32 emif_sdram_config;
+       u32 emif_lpddr2_nvm_config;
+       u32 emif_sdram_ref_ctrl;
+       u32 emif_sdram_ref_ctrl_shdw;
+       u32 emif_sdram_tim_1;
+       u32 emif_sdram_tim_1_shdw;
+       u32 emif_sdram_tim_2;
+       u32 emif_sdram_tim_2_shdw;
+       u32 emif_sdram_tim_3;
+       u32 emif_sdram_tim_3_shdw;
+       u32 emif_lpddr2_nvm_tim;
+       u32 emif_lpddr2_nvm_tim_shdw;
+       u32 emif_pwr_mgmt_ctrl;
+       u32 emif_pwr_mgmt_ctrl_shdw;
+       u32 emif_lpddr2_mode_reg_data;
+       u32 padding1[1];
+       u32 emif_lpddr2_mode_reg_data_es2;
+       u32 padding11[1];
+       u32 emif_lpddr2_mode_reg_cfg;
+       u32 emif_l3_config;
+       u32 emif_l3_cfg_val_1;
+       u32 emif_l3_cfg_val_2;
+       u32 emif_iodft_tlgc;
+       u32 padding2[7];
+       u32 emif_perf_cnt_1;
+       u32 emif_perf_cnt_2;
+       u32 emif_perf_cnt_cfg;
+       u32 emif_perf_cnt_sel;
+       u32 emif_perf_cnt_tim;
+       u32 padding3;
+       u32 emif_read_idlectrl;
+       u32 emif_read_idlectrl_shdw;
+       u32 padding4;
+       u32 emif_irqstatus_raw_sys;
+       u32 emif_irqstatus_raw_ll;
+       u32 emif_irqstatus_sys;
+       u32 emif_irqstatus_ll;
+       u32 emif_irqenable_set_sys;
+       u32 emif_irqenable_set_ll;
+       u32 emif_irqenable_clr_sys;
+       u32 emif_irqenable_clr_ll;
+       u32 padding5;
+       u32 emif_zq_config;
+       u32 emif_temp_alert_config;
+       u32 emif_l3_err_log;
+       u32 padding6[4];
+       u32 emif_ddr_phy_ctrl_1;
+       u32 emif_ddr_phy_ctrl_1_shdw;
+       u32 emif_ddr_phy_ctrl_2;
+};
+
+struct dmm_lisa_map_regs {
+       u32 dmm_lisa_map_0;
+       u32 dmm_lisa_map_1;
+       u32 dmm_lisa_map_2;
+       u32 dmm_lisa_map_3;
+};
+
+#define CS0    0
+#define CS1    1
+/* The maximum frequency at which the LPDDR2 interface can operate in Hz*/
+#define MAX_LPDDR2_FREQ        400000000       /* 400 MHz */
+
+/*
+ * The period of DDR clk is represented as numerator and denominator for
+ * better accuracy in integer based calculations. However, if the numerator
+ * and denominator are very huge there may be chances of overflow in
+ * calculations. So, as a trade-off keep denominator(and consequently
+ * numerator) within a limit sacrificing some accuracy - but not much
+ * If denominator and numerator are already small (such as at 400 MHz)
+ * no adjustment is needed
+ */
+#define EMIF_PERIOD_DEN_LIMIT  1000
+/*
+ * Maximum number of different frequencies supported by EMIF driver
+ * Determines the number of entries in the pointer array for register
+ * cache
+ */
+#define EMIF_MAX_NUM_FREQUENCIES       6
+/*
+ * Indices into the Addressing Table array.
+ * One entry each for all the different types of devices with different
+ * addressing schemes
+ */
+#define ADDR_TABLE_INDEX64M    0
+#define ADDR_TABLE_INDEX128M   1
+#define ADDR_TABLE_INDEX256M   2
+#define ADDR_TABLE_INDEX512M   3
+#define ADDR_TABLE_INDEX1GS4   4
+#define ADDR_TABLE_INDEX2GS4   5
+#define ADDR_TABLE_INDEX4G     6
+#define ADDR_TABLE_INDEX8G     7
+#define ADDR_TABLE_INDEX1GS2   8
+#define ADDR_TABLE_INDEX2GS2   9
+#define ADDR_TABLE_INDEXMAX    10
+
+/* Number of Row bits */
+#define ROW_9  0
+#define ROW_10 1
+#define ROW_11 2
+#define ROW_12 3
+#define ROW_13 4
+#define ROW_14 5
+#define ROW_15 6
+#define ROW_16 7
+
+/* Number of Column bits */
+#define COL_8   0
+#define COL_9   1
+#define COL_10  2
+#define COL_11  3
+#define COL_7   4 /*Not supported by OMAP included for completeness */
+
+/* Number of Banks*/
+#define BANKS1 0
+#define BANKS2 1
+#define BANKS4 2
+#define BANKS8 3
+
+/* Refresh rate in micro seconds x 10 */
+#define T_REFI_15_6    156
+#define T_REFI_7_8     78
+#define T_REFI_3_9     39
+
+#define EBANK_CS1_DIS  0
+#define EBANK_CS1_EN   1
+
+/* Read Latency used by the device at reset */
+#define RL_BOOT                3
+/* Read Latency for the highest frequency you want to use */
+#ifdef CONFIG_OMAP54XX
+#define RL_FINAL       8
+#else
+#define RL_FINAL       6
+#endif
+
+
+/* Interleaving policies at EMIF level- between banks and Chip Selects */
+#define EMIF_INTERLEAVING_POLICY_MAX_INTERLEAVING      0
+#define EMIF_INTERLEAVING_POLICY_NO_BANK_INTERLEAVING  3
+
+/*
+ * Interleaving policy to be used
+ * Currently set to MAX interleaving for better performance
+ */
+#define EMIF_INTERLEAVING_POLICY EMIF_INTERLEAVING_POLICY_MAX_INTERLEAVING
+
+/* State of the core voltage:
+ * This is important for some parameters such as read idle control and
+ * ZQ calibration timings. Timings are much stricter when voltage ramp
+ * is happening compared to when the voltage is stable.
+ * We need to calculate two sets of values for these parameters and use
+ * them accordingly
+ */
+#define LPDDR2_VOLTAGE_STABLE  0
+#define LPDDR2_VOLTAGE_RAMPING 1
+
+/* Length of the forced read idle period in terms of cycles */
+#define EMIF_REG_READ_IDLE_LEN_VAL     5
+
+/* Interval between forced 'read idles' */
+/* To be used when voltage is changed for DPS/DVFS - 1us */
+#define READ_IDLE_INTERVAL_DVFS                (1*1000)
+/*
+ * To be used when voltage is not scaled except by Smart Reflex
+ * 50us - or maximum value will do
+ */
+#define READ_IDLE_INTERVAL_NORMAL      (50*1000)
+
+
+/*
+ * Unless voltage is changing due to DVFS one ZQCS command every 50ms should
+ * be enough. This shoule be enough also in the case when voltage is changing
+ * due to smart-reflex.
+ */
+#define EMIF_ZQCS_INTERVAL_NORMAL_IN_US        (50*1000)
+/*
+ * If voltage is changing due to DVFS ZQCS should be performed more
+ * often(every 50us)
+ */
+#define EMIF_ZQCS_INTERVAL_DVFS_IN_US  50
+
+/* The interval between ZQCL commands as a multiple of ZQCS interval */
+#define REG_ZQ_ZQCL_MULT               4
+/* The interval between ZQINIT commands as a multiple of ZQCL interval */
+#define REG_ZQ_ZQINIT_MULT             3
+/* Enable ZQ Calibration on exiting Self-refresh */
+#define REG_ZQ_SFEXITEN_ENABLE         1
+/*
+ * ZQ Calibration simultaneously on both chip-selects:
+ * Needs one calibration resistor per CS
+ * None of the boards that we know of have this capability
+ * So disabled by default
+ */
+#define REG_ZQ_DUALCALEN_DISABLE       0
+/*
+ * Enable ZQ Calibration by default on CS0. If we are asked to program
+ * the EMIF there will be something connected to CS0 for sure
+ */
+#define REG_ZQ_CS0EN_ENABLE            1
+
+/* EMIF_PWR_MGMT_CTRL register */
+/* Low power modes */
+#define LP_MODE_DISABLE                0
+#define LP_MODE_CLOCK_STOP     1
+#define LP_MODE_SELF_REFRESH   2
+#define LP_MODE_PWR_DN         3
+
+/* REG_DPD_EN */
+#define DPD_DISABLE    0
+#define DPD_ENABLE     1
+
+/* Maximum delay before Low Power Modes */
+#define REG_CS_TIM             0xF
+#define REG_SR_TIM             0xF
+#define REG_PD_TIM             0xF
+
+/* EMIF_PWR_MGMT_CTRL register */
+#define EMIF_PWR_MGMT_CTRL (\
+       ((REG_CS_TIM << EMIF_REG_CS_TIM_SHIFT) & EMIF_REG_CS_TIM_MASK)|\
+       ((REG_SR_TIM << EMIF_REG_SR_TIM_SHIFT) & EMIF_REG_SR_TIM_MASK)|\
+       ((REG_PD_TIM << EMIF_REG_PD_TIM_SHIFT) & EMIF_REG_PD_TIM_MASK)|\
+       ((REG_PD_TIM << EMIF_REG_PD_TIM_SHIFT) & EMIF_REG_PD_TIM_MASK)|\
+       ((LP_MODE_DISABLE << EMIF_REG_LP_MODE_SHIFT)\
+                       & EMIF_REG_LP_MODE_MASK) |\
+       ((DPD_DISABLE << EMIF_REG_DPD_EN_SHIFT)\
+                       & EMIF_REG_DPD_EN_MASK))\
+
+#define EMIF_PWR_MGMT_CTRL_SHDW (\
+       ((REG_CS_TIM << EMIF_REG_CS_TIM_SHDW_SHIFT)\
+                       & EMIF_REG_CS_TIM_SHDW_MASK) |\
+       ((REG_SR_TIM << EMIF_REG_SR_TIM_SHDW_SHIFT)\
+                       & EMIF_REG_SR_TIM_SHDW_MASK) |\
+       ((REG_PD_TIM << EMIF_REG_PD_TIM_SHDW_SHIFT)\
+                       & EMIF_REG_PD_TIM_SHDW_MASK) |\
+       ((REG_PD_TIM << EMIF_REG_PD_TIM_SHDW_SHIFT)\
+                       & EMIF_REG_PD_TIM_SHDW_MASK))
+
+/* EMIF_L3_CONFIG register value */
+#define EMIF_L3_CONFIG_VAL_SYS_10_LL_0 0x0A0000FF
+#define EMIF_L3_CONFIG_VAL_SYS_10_MPU_3_LL_0   0x0A300000
+#define EMIF_L3_CONFIG_VAL_SYS_10_MPU_5_LL_0   0x0A300000
+
+/*
+ * Value of bits 12:31 of DDR_PHY_CTRL_1 register:
+ * All these fields have magic values dependent on frequency and
+ * determined by PHY and DLL integration with EMIF. Setting the magic
+ * values suggested by hw team.
+ */
+#define EMIF_DDR_PHY_CTRL_1_BASE_VAL                   0x049FF
+#define EMIF_DLL_SLAVE_DLY_CTRL_400_MHZ                        0x41
+#define EMIF_DLL_SLAVE_DLY_CTRL_200_MHZ                        0x80
+#define EMIF_DLL_SLAVE_DLY_CTRL_100_MHZ_AND_LESS       0xFF
+
+/*
+* MR1 value:
+* Burst length : 8
+* Burst type   : sequential
+* Wrap         : enabled
+* nWR          : 3(default). EMIF does not do pre-charge.
+*              : So nWR is don't care
+*/
+#define MR1_BL_8_BT_SEQ_WRAP_EN_NWR_3  0x23
+
+/* MR2 */
+#define MR2_RL3_WL1                    1
+#define MR2_RL4_WL2                    2
+#define MR2_RL5_WL2                    3
+#define MR2_RL6_WL3                    4
+
+/* MR10: ZQ calibration codes */
+#define MR10_ZQ_ZQCS           0x56
+#define MR10_ZQ_ZQCL           0xAB
+#define MR10_ZQ_ZQINIT         0xFF
+#define MR10_ZQ_ZQRESET                0xC3
+
+/* TEMP_ALERT_CONFIG */
+#define TEMP_ALERT_POLL_INTERVAL_MS    360 /* for temp gradient - 5 C/s */
+#define TEMP_ALERT_CONFIG_DEVCT_1      0
+#define TEMP_ALERT_CONFIG_DEVWDT_32    2
+
+/* MR16 value: refresh full array(no partial array self refresh) */
+#define MR16_REF_FULL_ARRAY    0
+
+/*
+ * Maximum number of entries we keep in our array of timing tables
+ * We need not keep all the speed bins supported by the device
+ * We need to keep timing tables for only the speed bins that we
+ * are interested in
+ */
+#define MAX_NUM_SPEEDBINS      4
+
+/* LPDDR2 Densities */
+#define LPDDR2_DENSITY_64Mb    0
+#define LPDDR2_DENSITY_128Mb   1
+#define LPDDR2_DENSITY_256Mb   2
+#define LPDDR2_DENSITY_512Mb   3
+#define LPDDR2_DENSITY_1Gb     4
+#define LPDDR2_DENSITY_2Gb     5
+#define LPDDR2_DENSITY_4Gb     6
+#define LPDDR2_DENSITY_8Gb     7
+#define LPDDR2_DENSITY_16Gb    8
+#define LPDDR2_DENSITY_32Gb    9
+
+/* LPDDR2 type */
+#define        LPDDR2_TYPE_S4  0
+#define        LPDDR2_TYPE_S2  1
+#define        LPDDR2_TYPE_NVM 2
+
+/* LPDDR2 IO width */
+#define        LPDDR2_IO_WIDTH_32      0
+#define        LPDDR2_IO_WIDTH_16      1
+#define        LPDDR2_IO_WIDTH_8       2
+
+/* Mode register numbers */
+#define LPDDR2_MR0     0
+#define LPDDR2_MR1     1
+#define LPDDR2_MR2     2
+#define LPDDR2_MR3     3
+#define LPDDR2_MR4     4
+#define LPDDR2_MR5     5
+#define LPDDR2_MR6     6
+#define LPDDR2_MR7     7
+#define LPDDR2_MR8     8
+#define LPDDR2_MR9     9
+#define LPDDR2_MR10    10
+#define LPDDR2_MR11    11
+#define LPDDR2_MR16    16
+#define LPDDR2_MR17    17
+#define LPDDR2_MR18    18
+
+/* MR0 */
+#define LPDDR2_MR0_DAI_SHIFT   0
+#define LPDDR2_MR0_DAI_MASK    1
+#define LPDDR2_MR0_DI_SHIFT    1
+#define LPDDR2_MR0_DI_MASK     (1 << 1)
+#define LPDDR2_MR0_DNVI_SHIFT  2
+#define LPDDR2_MR0_DNVI_MASK   (1 << 2)
+
+/* MR4 */
+#define MR4_SDRAM_REF_RATE_SHIFT       0
+#define MR4_SDRAM_REF_RATE_MASK                7
+#define MR4_TUF_SHIFT                  7
+#define MR4_TUF_MASK                   (1 << 7)
+
+/* MR4 SDRAM Refresh Rate field values */
+#define SDRAM_TEMP_LESS_LOW_SHUTDOWN                   0x0
+#define SDRAM_TEMP_LESS_4X_REFRESH_AND_TIMINGS         0x1
+#define SDRAM_TEMP_LESS_2X_REFRESH_AND_TIMINGS         0x2
+#define SDRAM_TEMP_NOMINAL                             0x3
+#define SDRAM_TEMP_RESERVED_4                          0x4
+#define SDRAM_TEMP_HIGH_DERATE_REFRESH                 0x5
+#define SDRAM_TEMP_HIGH_DERATE_REFRESH_AND_TIMINGS     0x6
+#define SDRAM_TEMP_VERY_HIGH_SHUTDOWN                  0x7
+
+#define LPDDR2_MANUFACTURER_SAMSUNG    1
+#define LPDDR2_MANUFACTURER_QIMONDA    2
+#define LPDDR2_MANUFACTURER_ELPIDA     3
+#define LPDDR2_MANUFACTURER_ETRON      4
+#define LPDDR2_MANUFACTURER_NANYA      5
+#define LPDDR2_MANUFACTURER_HYNIX      6
+#define LPDDR2_MANUFACTURER_MOSEL      7
+#define LPDDR2_MANUFACTURER_WINBOND    8
+#define LPDDR2_MANUFACTURER_ESMT       9
+#define LPDDR2_MANUFACTURER_SPANSION 11
+#define LPDDR2_MANUFACTURER_SST                12
+#define LPDDR2_MANUFACTURER_ZMOS       13
+#define LPDDR2_MANUFACTURER_INTEL      14
+#define LPDDR2_MANUFACTURER_NUMONYX    254
+#define LPDDR2_MANUFACTURER_MICRON     255
+
+/* MR8 register fields */
+#define MR8_TYPE_SHIFT         0x0
+#define MR8_TYPE_MASK          0x3
+#define MR8_DENSITY_SHIFT      0x2
+#define MR8_DENSITY_MASK       (0xF << 0x2)
+#define MR8_IO_WIDTH_SHIFT     0x6
+#define MR8_IO_WIDTH_MASK      (0x3 << 0x6)
+
+struct lpddr2_addressing {
+       u8      num_banks;
+       u8      t_REFI_us_x10;
+       u8      row_sz[2]; /* One entry each for x32 and x16 */
+       u8      col_sz[2]; /* One entry each for x32 and x16 */
+};
+
+/* Structure for timings from the DDR datasheet */
+struct lpddr2_ac_timings {
+       u32 max_freq;
+       u8 RL;
+       u8 tRPab;
+       u8 tRCD;
+       u8 tWR;
+       u8 tRASmin;
+       u8 tRRD;
+       u8 tWTRx2;
+       u8 tXSR;
+       u8 tXPx2;
+       u8 tRFCab;
+       u8 tRTPx2;
+       u8 tCKE;
+       u8 tCKESR;
+       u8 tZQCS;
+       u32 tZQCL;
+       u32 tZQINIT;
+       u8 tDQSCKMAXx2;
+       u8 tRASmax;
+       u8 tFAW;
+
+};
+
+/*
+ * Min tCK values for some of the parameters:
+ * If the calculated clock cycles for the respective parameter is
+ * less than the corresponding min tCK value, we need to set the min
+ * tCK value. This may happen at lower frequencies.
+ */
+struct lpddr2_min_tck {
+       u32 tRL;
+       u32 tRP_AB;
+       u32 tRCD;
+       u32 tWR;
+       u32 tRAS_MIN;
+       u32 tRRD;
+       u32 tWTR;
+       u32 tXP;
+       u32 tRTP;
+       u8  tCKE;
+       u32 tCKESR;
+       u32 tFAW;
+};
+
+struct lpddr2_device_details {
+       u8      type;
+       u8      density;
+       u8      io_width;
+       u8      manufacturer;
+};
+
+struct lpddr2_device_timings {
+       const struct lpddr2_ac_timings **ac_timings;
+       const struct lpddr2_min_tck *min_tck;
+};
+
+/* Details of the devices connected to each chip-select of an EMIF instance */
+struct emif_device_details {
+       const struct lpddr2_device_details *cs0_device_details;
+       const struct lpddr2_device_details *cs1_device_details;
+       const struct lpddr2_device_timings *cs0_device_timings;
+       const struct lpddr2_device_timings *cs1_device_timings;
+};
+
+/*
+ * Structure containing shadow of important registers in EMIF
+ * The calculation function fills in this structure to be later used for
+ * initialization and DVFS
+ */
+struct emif_regs {
+       u32 freq;
+       u32 sdram_config_init;
+       u32 sdram_config;
+       u32 ref_ctrl;
+       u32 sdram_tim1;
+       u32 sdram_tim2;
+       u32 sdram_tim3;
+       u32 read_idle_ctrl;
+       u32 zq_config;
+       u32 temp_alert_config;
+       u32 emif_ddr_phy_ctlr_1_init;
+       u32 emif_ddr_phy_ctlr_1;
+};
+
+/* assert macros */
+#if defined(DEBUG)
+#define emif_assert(c) ({ if (!(c)) for (;;); })
+#else
+#define emif_assert(c) ({ if (0) hang(); })
+#endif
+
+#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs);
+void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs);
+#else
+struct lpddr2_device_details *emif_get_device_details(u32 emif_nr, u8 cs,
+                       struct lpddr2_device_details *lpddr2_dev_details);
+void emif_get_device_timings(u32 emif_nr,
+               const struct lpddr2_device_timings **cs0_device_timings,
+               const struct lpddr2_device_timings **cs1_device_timings);
+#endif
+
+#ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+extern u32 *const T_num;
+extern u32 *const T_den;
+extern u32 *const emif_sizes;
+#endif
+
+
+#endif
index 254905137c48edf565587c9c0903cae94c720351..2d5c3bc376b1e809ca75623c0dcf87af4ec352c7 100644 (file)
@@ -1104,6 +1104,7 @@ extern unsigned int __machine_arch_type;
 #define MACH_TYPE_THALES_ADC           3492
 #define MACH_TYPE_UBISYS_P9D_EVP       3493
 #define MACH_TYPE_ATDGP318             3494
+#define MACH_TYPE_OMAP5_SEVM           3777
 
 #ifdef CONFIG_ARCH_EBSA110
 # ifdef machine_arch_type
@@ -14209,6 +14210,18 @@ extern unsigned int __machine_arch_type;
 # define machine_is_atdgp318() (0)
 #endif
 
+#ifdef CONFIG_MACH_OMAP5_SEVM
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type     __machine_arch_type
+# else
+#  define machine_arch_type     MACH_TYPE_OMAP5_SEVM
+# endif
+# define machine_is_omap5_sevm()      (machine_arch_type == MACH_TYPE_OMAP5_SEVM)
+#else
+# define machine_is_omap5_sevm()      (0)
+#endif
+
 /*
  * These have not yet been registered
  */
index 3f2f004afb67b5bead329aee5dde23fe0d74fc82..1ec651b353920d3e0dd8169689a61bdd6be92558 100644 (file)
 void preloader_console_init(void);
 
 /* Boot device */
-#ifdef CONFIG_OMAP44XX /* OMAP4 */
+#ifdef CONFIG_OMAP54XX
+#define BOOT_DEVICE_NONE        0
+#define BOOT_DEVICE_XIP         1
+#define BOOT_DEVICE_XIPWAIT     2
+#define BOOT_DEVICE_NAND        3
+#define BOOT_DEVICE_ONE_NAND    4
+#define BOOT_DEVICE_MMC1        5
+#define BOOT_DEVICE_MMC2        6
+#define BOOT_DEVICE_MMC3       7
+#elif defined(CONFIG_OMAP44XX) /* OMAP4 */
 #define BOOT_DEVICE_NONE       0
 #define BOOT_DEVICE_XIP                1
 #define BOOT_DEVICE_XIPWAIT    2
@@ -71,10 +80,10 @@ struct spl_image_info {
 
 extern struct spl_image_info spl_image;
 
+extern u32* boot_params_ptr;
 u32 omap_boot_device(void);
 u32 omap_boot_mode(void);
 
-
 /* SPL common function s*/
 void spl_parse_image_header(const struct image_header *header);
 void omap_rev_string(char *omap_rev_string);
@@ -85,4 +94,27 @@ void spl_nand_load_image(void);
 /* MMC SPL functions */
 void spl_mmc_load_image(void);
 
+#ifdef CONFIG_SPL_BOARD_INIT
+void spl_board_init(void);
+#endif
+
+/*
+ * silicon revisions.
+ * Moving this to common, so that most of code can be moved to common,
+ * directories.
+ */
+
+/* omap4 */
+#define OMAP4430_SILICON_ID_INVALID    0xFFFFFFFF
+#define OMAP4430_ES1_0 0x44300100
+#define OMAP4430_ES2_0 0x44300200
+#define OMAP4430_ES2_1 0x44300210
+#define OMAP4430_ES2_2 0x44300220
+#define OMAP4430_ES2_3 0x44300230
+#define OMAP4460_ES1_0 0x44600100
+#define OMAP4460_ES1_1 0x44600110
+
+/* omap5 */
+#define OMAP5430_SILICON_ID_INVALID    0
+#define OMAP5430_ES1_0 0x54300100
 #endif /* _OMAP_COMMON_H_ */
index a482706fe8aaa603139d8361a52a16305ed3d0ca..3d7827407206b86b02542b72d076737abf66869d 100644 (file)
@@ -73,10 +73,6 @@ extern int  AT91F_DataflashInit(void);
 extern void dataflash_print_info(void);
 #endif
 
-#ifdef CONFIG_DRIVER_RTL8019
-extern void rtl8019_get_enetaddr (uchar * addr);
-#endif
-
 #if defined(CONFIG_HARD_I2C) || \
     defined(CONFIG_SOFT_I2C)
 #include <i2c.h>
index eb3e26d4d20db0ce867355e12ad699a4972c5618..e1b87bebadbf727dc425ce7c1899e1cb6896a879 100644 (file)
@@ -13,7 +13,9 @@
 
 int raise (int signum)
 {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
        printf("raise: Signal # %d caught\n", signum);
+#endif
        return 0;
 }
 
index f9d46de23167ee86b8b14e44732315067cf0356b..3595aa2a9922d72bc1ce04492134e8f8d23ac2f8 100644 (file)
@@ -48,9 +48,10 @@ ALL-y += $(obj)u-boot.ldr
 endif
 ifeq ($(CONFIG_ENV_IS_EMBEDDED_IN_LDR),y)
 CREATE_LDR_ENV = $(obj)tools/envcrc --binary > $(obj)env-ldr.o
-HOSTCFLAGS_NOPED += \
+HOSTCFLAGS_NOPED_ADSP := \
        $(shell $(CPP) -dD - -mcpu=$(CONFIG_BFIN_CPU) </dev/null \
                | awk '$$2 ~ /ADSP/ { print "-D" $$2 }')
+HOSTCFLAGS_NOPED += $(HOSTCFLAGS_NOPED_ADSP)
 else
 CREATE_LDR_ENV =
 endif
index 0cb833a0e43f0db3fb4daaf0b8e17a5662ac510d..20aeab81a20418cce2c00de9fdfb202b43e516b4 100644 (file)
@@ -150,7 +150,10 @@ int trap_c(struct pt_regs *regs, uint32_t level)
                                (data ? 'D' : 'I'), (void *)new_cplb_addr);
                        bfin_panic(regs);
                } else
-                       debug("CPLB addr %p matches map 0x%p - 0x%p\n", new_cplb_addr, bfin_memory_map[i].start, bfin_memory_map[i].end);
+                       debug("CPLB addr %p matches map 0x%p - 0x%p\n",
+                               (void *)new_cplb_addr,
+                               (void *)bfin_memory_map[i].start,
+                               (void *)bfin_memory_map[i].end);
                new_cplb_data = (data ? bfin_memory_map[i].data_flags : bfin_memory_map[i].inst_flags);
 
                if (data) {
@@ -163,16 +166,17 @@ int trap_c(struct pt_regs *regs, uint32_t level)
 
                /* find the next unlocked entry and evict it */
                i = last_evicted & 0xF;
-               debug("last evicted = %i\n", i);
+               debug("last evicted = %zu\n", i);
                CPLB_DATA = CPLB_DATA_BASE + i;
                while (*CPLB_DATA & CPLB_LOCK) {
-                       debug("skipping %i %p - %08X\n", i, CPLB_DATA, *CPLB_DATA);
+                       debug("skipping %zu %p - %08X\n", i, CPLB_DATA, *CPLB_DATA);
                        i = (i + 1) & 0xF;      /* wrap around */
                        CPLB_DATA = CPLB_DATA_BASE + i;
                }
                CPLB_ADDR = CPLB_ADDR_BASE + i;
 
-               debug("evicting entry %i: 0x%p 0x%08X\n", i, *CPLB_ADDR, *CPLB_DATA);
+               debug("evicting entry %zu: 0x%p 0x%08X\n", i,
+                       (void *)*CPLB_ADDR, *CPLB_DATA);
                last_evicted = i + 1;
 
                /* need to turn off cplbs whenever we muck with the cplb table */
@@ -190,7 +194,8 @@ int trap_c(struct pt_regs *regs, uint32_t level)
                CPLB_ADDR = CPLB_ADDR_BASE;
                CPLB_DATA = CPLB_DATA_BASE;
                for (i = 0; i < 16; ++i)
-                       debug("%2i 0x%p 0x%08X\n", i, *CPLB_ADDR++, *CPLB_DATA++);
+                       debug("%2zu 0x%p 0x%08X\n", i,
+                               (void *)*CPLB_ADDR++, *CPLB_DATA++);
 
                break;
        }
index a70473c229a9acf918a13f75115f39fc618dbf35..e3ee4cd353e364e0c8acbdda7889fb081c69c438 100644 (file)
@@ -308,7 +308,6 @@ static void board_net_init_r(bd_t *bd)
 
 void board_init_r(gd_t * id, ulong dest_addr)
 {
-       char *s;
        bd_t *bd;
        gd = id;
        gd->flags |= GD_FLG_RELOC;      /* tell others: relocation done */
index 170bbfc356c61fbd2c512cacd6641b043faf391f..a98a9262ebfb637466b055eafd832efdeb600338 100644 (file)
@@ -284,7 +284,7 @@ void cpu_init_f(void)
        mbar_writeLong(MCF_FMPLL_SYNCR,
                        MCF_FMPLL_SYNCR_MFD(0) | MCF_FMPLL_SYNCR_RFD(0));
 #endif
-       while (!mbar_readByte(MCF_FMPLL_SYNSR) & MCF_FMPLL_SYNSR_LOCK) ;
+       while (!(mbar_readByte(MCF_FMPLL_SYNSR) & MCF_FMPLL_SYNSR_LOCK)) ;
 }
 
 /*
index 0ab666e8d744af5cab0d5768ab7372ec99685064..c2636b1215a8563f6e0a46471a8693edd71363eb 100644 (file)
  */
 int cleanup_before_linux(void)
 {
-#ifdef CONFIG_MMU
-       unsigned long i;
-#endif
-
        disable_interrupts();
 
 #ifdef CONFIG_MMU
@@ -123,8 +119,8 @@ void icache_inval_range(unsigned long start, unsigned long end)
 
 void flush_cache(unsigned long addr, unsigned long size)
 {
-       dcache_flush_range(addr , addr + size);
-       icache_inval_range(addr , addr + size);
+       dcache_flush_range(addr, addr + size);
+       icache_inval_range(addr, addr + size);
 }
 
 void icache_enable(void)
index c099c33acd64dd5c2c88ea88556cca30e07f39ea..caa36b8be83881bf7b17222527a547330d4f6c3a 100644 (file)
@@ -33,7 +33,7 @@ static ulong lastdec;
 
 int timer_init(void)
 {
-       static struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+       struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
        unsigned int cr;
 
        debug("%s()\n", __func__);
@@ -80,7 +80,7 @@ int timer_init(void)
  */
 void reset_timer_masked(void)
 {
-       static struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+       struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
 
        /* capure current decrementer value time */
 #ifdef CONFIG_FTTMR010_EXT_CLK
@@ -104,7 +104,7 @@ void reset_timer(void)
  */
 ulong get_timer_masked(void)
 {
-       static struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+       struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
 
        /* current tick value */
 #ifdef CONFIG_FTTMR010_EXT_CLK
@@ -160,7 +160,7 @@ void set_timer(ulong t)
 /* delay x useconds AND preserve advance timestamp value */
 void __udelay(unsigned long usec)
 {
-       static struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+       struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
 
 #ifdef CONFIG_FTTMR010_EXT_CLK
        long tmo = usec * (TIMER_CLOCK / 1000) / 1000;
index 45221ee78ae8f136a94540717b9bc577a4297b56..190342062aa8ea3026e34bf4035557d46df0039c 100644 (file)
@@ -41,7 +41,7 @@ SECTIONS
        .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
 
        . = ALIGN(4);
-       .data : { *(.data) }
+       .data : { *(.data*) }
 
        . = ALIGN(4);
 
index 2c105f7fabcfe0e63b3ce0eb5f05954c4e0e9cb5..39c3dc8d92e064f34c5dbc979b36df28f3ca0a52 100644 (file)
@@ -165,6 +165,24 @@ static inline unsigned int readl(unsigned int *addr)
 #define __raw_base_readw(base, off)    __arch_base_getw(base, off)
 #define __raw_base_readl(base, off)    __arch_base_getl(base, off)
 
+#define out_arch(type, endian, a, v)   __raw_write##type(cpu_to_##endian(v), a)
+#define in_arch(type, endian, a)       endian##_to_cpu(__raw_read##type(a))
+
+#define out_le32(a, v)                 out_arch(l, le32, a, v)
+#define out_le16(a, v)                 out_arch(w, le16, a, v)
+
+#define in_le32(a)                     in_arch(l, le32, a)
+#define in_le16(a)                     in_arch(w, le16, a)
+
+#define out_be32(a, v)                 out_arch(l, be32, a, v)
+#define out_be16(a, v)                 out_arch(w, be16, a, v)
+
+#define in_be32(a)                     in_arch(l, be32, a)
+#define in_be16(a)                     in_arch(w, be16, a)
+
+#define out_8(a, v)                    __raw_writeb(v, a)
+#define in_8(a)                                __raw_readb(a)
+
 /*
  * Now, pick up the machine-defined IO definitions
  * #include <asm/arch/io.h>
index a6f1c93494a63df3bb0d2f4774433e4834ea39c3..7b52b989bc1f61ffb0ebc062c063f8e80a31e7bb 100644 (file)
@@ -26,4 +26,18 @@ extern unsigned int __machine_arch_type;
 # define machine_is_adpag101() (0)
 #endif
 
+#define MACH_TYPE_ADPAG101P            1
+
+#ifdef CONFIG_ARCH_ADPAG101P
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ADPAG101P
+# endif
+# define machine_is_adpag101p()        (machine_arch_type == MACH_TYPE_ADPAG101P)
+#else
+# define machine_is_adpag101p()        (1)
+#endif
+
 #endif /* __ASM_NDS32_MACH_TYPE_H */
index 2fd0e93d455bcc5517b86f7a3ff5e0dc43d82703..66e45370ccb464cc12fac015e162cceb7d7d123c 100644 (file)
@@ -351,6 +351,11 @@ void board_init_r(gd_t *id, ulong dest_addr)
        nand_init();            /* go init the NAND */
 #endif
 
+#if defined(CONFIG_CMD_IDE)
+       puts("IDE:   ");
+       ide_init();
+#endif
+
 #ifdef CONFIG_GENERIC_MMC
        puts("MMC:   ");
        mmc_initialize(gd->bd);
index aa41160af35c60438a72db60a5b920c669e1caa9..402fd749ddd8db80f33357f7159aaced11fbb19c 100644 (file)
@@ -28,6 +28,7 @@ LIB   = $(obj)lib$(CPU).o
 START  = start.o
 SOBJS  = exceptions.o
 COBJS  = cpu.o interrupts.o sysid.o traps.o epcs.o
+COBJS  += fdt.o
 
 SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
index ef360eecbb4075aa1f39ca9b767c0450a84df23d..edf256017a3c2e79bcf295df3a2ee9034b48a739 100644 (file)
@@ -24,6 +24,7 @@
 #include <common.h>
 #include <nios2.h>
 #include <nios2-io.h>
+#include <asm/cache.h>
 
 #if defined (CONFIG_SYS_NIOS_SYSID_BASE)
 extern void display_sysid (void);
@@ -47,3 +48,18 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        nios2_callr(CONFIG_SYS_RESET_ADDR);
        return 0;
 }
+
+int dcache_status(void)
+{
+       return 1;
+}
+
+void dcache_enable(void)
+{
+       flush_dcache(CONFIG_SYS_DCACHE_SIZE, CONFIG_SYS_DCACHELINE_SIZE);
+}
+
+void dcache_disable(void)
+{
+       flush_dcache(CONFIG_SYS_DCACHE_SIZE, CONFIG_SYS_DCACHELINE_SIZE);
+}
diff --git a/arch/nios2/cpu/fdt.c b/arch/nios2/cpu/fdt.c
new file mode 100644 (file)
index 0000000..b1ed9e1
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * (C) Copyright 2011, Missing Link Electronics
+ *                     Joachim Foerster <joachim@missinglinkelectronics.com>
+ *
+ * Taken from arch/powerpc/cpu/ppc4xx/fdt.c:
+ *
+ * (C) Copyright 2007-2008
+ * 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>
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+#include <libfdt.h>
+#include <libfdt_env.h>
+#include <fdt_support.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void __ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+}
+void ft_board_setup(void *blob, bd_t *bd) \
+       __attribute__((weak, alias("__ft_board_setup")));
+
+void ft_cpu_setup(void *blob, bd_t *bd)
+{
+       /*
+        * Fixup all ethernet nodes
+        * Note: aliases in the dts are required for this
+        */
+       fdt_fixup_ethernet(blob);
+}
+#endif /* CONFIG_OF_LIBFDT && CONFIG_OF_BOARD_SETUP */
index 4b21c8f7f2ec6042023ba63f925bdc751271d239..908381f5f7b07dbfa1b1480de65e27f58221ecad 100644 (file)
@@ -5,8 +5,8 @@
  * bit[0] data
  * bit[1] output enable
  *
- * when CONFIG_SYS_GPIO_BASE is not defined, board may provide
- * its own driver.
+ * When CONFIG_SYS_GPIO_BASE is not defined, the board may either
+ * provide its own driver or the altera_pio driver may be used.
  *
  * Copyright (C) 2010 Thomas Chou <thomas@wytron.com.tw>
  *
@@ -58,6 +58,15 @@ static inline int gpio_is_valid(int number)
        return ((unsigned)number) < CONFIG_SYS_GPIO_WIDTH;
 }
 #else
+#ifdef CONFIG_ALTERA_PIO
+extern int altera_pio_init(u32 base, u8 width, char iot,
+                          u32 rstval, u32 negmask,
+                          const char *label);
+
+extern void altera_pio_info(void);
+#define gpio_status() altera_pio_info()
+#endif
+
 extern int gpio_request(unsigned gpio, const char *label);
 extern int gpio_free(unsigned gpio);
 extern int gpio_direction_input(unsigned gpio);
index e2d909751ef3afc972f02e713b4813064944b709..0ea12806b92c718648d8677bd9b5f61a12e13d10 100644 (file)
@@ -78,9 +78,8 @@ static int wait_for_bb (void)
        status = mpc_reg_in (&regs->msr);
 
        while (timeout-- && (status & I2C_BB)) {
-               volatile int temp;
                mpc_reg_out (&regs->mcr, I2C_STA, I2C_STA);
-               temp = mpc_reg_in (&regs->mdr);
+               (void)mpc_reg_in(&regs->mdr);
                mpc_reg_out (&regs->mcr, 0, I2C_STA);
                mpc_reg_out (&regs->mcr, 0, 0);
                mpc_reg_out (&regs->mcr, I2C_EN, 0);
index 141db8b86594ab9703d9edb7c411839e3f9e34e1..16f034d58f9ecab59ce604999951dd26748d7dcf 100644 (file)
@@ -52,7 +52,6 @@ pci_init_board(void)
        volatile law512x_t *pci_law;
        volatile pot512x_t *pci_pot;
        volatile pcictrl512x_t *pci_ctrl;
-       volatile pciconf512x_t *pci_conf;
        u16 reg16;
        u32 reg32;
        u32 dev;
@@ -73,7 +72,6 @@ pci_init_board(void)
        pci_law = im->sysconf.pcilaw;
        pci_pot = im->ios.pot;
        pci_ctrl = &im->pci_ctrl;
-       pci_conf = &im->pci_conf;
 
        hose = &pci_hose;
 
index 3855bfd457daec5bc40eec1ec85fa6e7b93f8639..04d519a4c73682851d96e09d5c1cf7837f4ad8c2 100644 (file)
@@ -149,7 +149,7 @@ long int spd_sdram()
        unsigned int memsize;
        unsigned int law_size;
        unsigned char caslat, caslat_ctrl;
-       unsigned int trfc, trfc_clk, trfc_low, trfc_high;
+       unsigned int trfc, trfc_clk, trfc_low;
        unsigned int trcd_clk, trtp_clk;
        unsigned char cke_min_clk;
        unsigned char add_lat, wr_lat;
@@ -542,7 +542,6 @@ long int spd_sdram()
         * so preadjust it down 8 first before splitting it up.
         */
        trfc_low = (trfc_clk - 8) & 0xf;
-       trfc_high = ((trfc_clk - 8) >> 4) & 0x3;
 
        ddr->timing_cfg_1 =
            (((picos_to_clk(spd.trp * 250) & 0x07) << 28 ) |    /* PRETOACT */
index a09eb914068de94081a3f06eca5b96767deba552..2ed5a98424f1a92745db5a8d76d1c21f404ace83 100644 (file)
@@ -53,6 +53,12 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #if defined(CONFIG_SYS_P4080_ERRATUM_CPU22)
        puts("Work-around for Erratum CPU22 enabled\n");
 #endif
+#if defined(CONFIG_SYS_FSL_ERRATUM_CPU_A003999)
+       puts("Work-around for Erratum CPU-A003999 enabled\n");
+#endif
+#if defined(CONFIG_SYS_FSL_ERRATUM_DDR_A003474)
+       puts("Work-around for Erratum DDR-A003473 enabled\n");
+#endif
 #if defined(CONFIG_SYS_FSL_ERRATUM_DDR_MSYNC_IN)
        puts("Work-around for DDR MSYNC_IN Erratum enabled\n");
 #endif
@@ -102,6 +108,10 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #endif
 #ifdef CONFIG_SYS_FSL_ERRATUM_NMG_LBC103
        puts("Work-around for Erratum NMG_LBC103 enabled\n");
+#endif
+#ifdef CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
+       if ((SVR_MAJ(svr) == 1) || IS_SVR_REV(svr, 2, 0))
+               puts("Work-around for Erratum NMG ETSEC129 enabled\n");
 #endif
        return 0;
 }
index 49c0551692985ebca9bc9fe0fc26dfd15acb5196..c1815e8860dd34069af7feefe890de1dcf4fc7fa 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+/*
+ * Default board reset function
+ */
+static void
+__board_reset(void)
+{
+       /* Do nothing */
+}
+void board_reset(void) __attribute__((weak, alias("__board_reset")));
+
 int checkcpu (void)
 {
        sys_info_t sysinfo;
@@ -215,7 +225,12 @@ int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        mtspr(DBCR0,val);
 #else
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
-       out_be32(&gur->rstcr, 0x2);     /* HRESET_REQ */
+
+       /* Attempt board-specific reset */
+       board_reset();
+
+       /* Next try asserting HRESET_REQ */
+       out_be32(&gur->rstcr, 0x2);
        udelay(100);
 #endif
 
index 0a4ce538f3b3494bd262af16234d30fec21ca0f3..2e4a06c35abed3d997695bb83463c3cb1bba2ac5 100644 (file)
 #include <asm/mmu.h>
 #include <asm/fsl_law.h>
 #include <asm/fsl_serdes.h>
+#include <linux/compiler.h>
 #include "mp.h"
-#ifdef CONFIG_SYS_QE_FW_IN_NAND
+#ifdef CONFIG_SYS_QE_FMAN_FW_IN_NAND
 #include <nand.h>
 #include <errno.h>
 #endif
 
+#include "../../../../drivers/block/fsl_sata.h"
+
 DECLARE_GLOBAL_DATA_PTR;
 
 extern void srio_init(void);
@@ -301,6 +304,7 @@ __attribute__((weak, alias("__fsl_serdes__init"))) void fsl_serdes_init(void);
  */
 int cpu_init_r(void)
 {
+       __maybe_unused u32 svr = get_svr();
 #ifdef CONFIG_SYS_LBC_LCRR
        volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
 #endif
@@ -316,11 +320,9 @@ int cpu_init_r(void)
 #if defined(CONFIG_L2_CACHE)
        volatile ccsr_l2cache_t *l2cache = (void *)CONFIG_SYS_MPC85xx_L2_ADDR;
        volatile uint cache_ctl;
-       uint svr, ver;
-       uint l2srbar;
+       uint ver;
        u32 l2siz_field;
 
-       svr = get_svr();
        ver = SVR_SOC_VER(svr);
 
        asm("msync;isync");
@@ -385,8 +387,8 @@ int cpu_init_r(void)
 
        if (l2cache->l2ctl & MPC85xx_L2CTL_L2E) {
                puts("already enabled");
-               l2srbar = l2cache->l2srbar0;
 #if defined(CONFIG_SYS_INIT_L2_ADDR) && defined(CONFIG_SYS_FLASH_BASE)
+               u32 l2srbar = l2cache->l2srbar0;
                if (l2cache->l2ctl & MPC85xx_L2CTL_L2SRAM_ENTIRE
                                && l2srbar >= CONFIG_SYS_FLASH_BASE) {
                        l2srbar = CONFIG_SYS_INIT_L2_ADDR;
@@ -402,8 +404,8 @@ int cpu_init_r(void)
                puts("enabled\n");
        }
 #elif defined(CONFIG_BACKSIDE_L2_CACHE)
-       if ((SVR_SOC_VER(get_svr()) == SVR_P2040) ||
-           (SVR_SOC_VER(get_svr()) == SVR_P2040_E)) {
+       if ((SVR_SOC_VER(svr) == SVR_P2040) ||
+           (SVR_SOC_VER(svr) == SVR_P2040_E)) {
                puts("N/A\n");
                goto skip_l2;
        }
@@ -489,6 +491,32 @@ skip_l2:
        fman_enet_init();
 #endif
 
+#if defined(CONFIG_FSL_SATA_V2) && defined(CONFIG_FSL_SATA_ERRATUM_A001)
+       /*
+        * For P1022/1013 Rev1.0 silicon, after power on SATA host
+        * controller is configured in legacy mode instead of the
+        * expected enterprise mode. Software needs to clear bit[28]
+        * of HControl register to change to enterprise mode from
+        * legacy mode.  We assume that the controller is offline.
+        */
+       if (IS_SVR_REV(svr, 1, 0) &&
+           ((SVR_SOC_VER(svr) == SVR_P1022) ||
+            (SVR_SOC_VER(svr) == SVR_P1022_E) ||
+            (SVR_SOC_VER(svr) == SVR_P1013) ||
+            (SVR_SOC_VER(svr) == SVR_P1013_E))) {
+               fsl_sata_reg_t *reg;
+
+               /* first SATA controller */
+               reg = (void *)CONFIG_SYS_MPC85xx_SATA1_ADDR;
+               clrbits_le32(&reg->hcontrol, HCONTROL_ENTERPRISE_EN);
+
+               /* second SATA controller */
+               reg = (void *)CONFIG_SYS_MPC85xx_SATA2_ADDR;
+               clrbits_le32(&reg->hcontrol, HCONTROL_ENTERPRISE_EN);
+       }
+#endif
+
+
        return 0;
 }
 
@@ -524,17 +552,17 @@ void cpu_secondary_init_r(void)
 {
 #ifdef CONFIG_QE
        uint qe_base = CONFIG_SYS_IMMR + 0x00080000; /* QE immr base */
-#ifdef CONFIG_SYS_QE_FW_IN_NAND
+#ifdef CONFIG_SYS_QE_FMAN_FW_IN_NAND
        int ret;
-       size_t fw_length = CONFIG_SYS_QE_FW_LENGTH;
+       size_t fw_length = CONFIG_SYS_QE_FMAN_FW_LENGTH;
 
        /* load QE firmware from NAND flash to DDR first */
-       ret = nand_read(&nand_info[0], (loff_t)CONFIG_SYS_QE_FW_IN_NAND,
-                       &fw_length, (u_char *)CONFIG_SYS_QE_FW_ADDR);
+       ret = nand_read(&nand_info[0], (loff_t)CONFIG_SYS_QE_FMAN_FW_IN_NAND,
+                       &fw_length, (u_char *)CONFIG_SYS_QE_FMAN_FW_ADDR);
 
        if (ret && ret == -EUCLEAN) {
                printf ("NAND read for QE firmware at offset %x failed %d\n",
-                               CONFIG_SYS_QE_FW_IN_NAND, ret);
+                               CONFIG_SYS_QE_FMAN_FW_IN_NAND, ret);
        }
 #endif
        qe_init(qe_base);
index 4ef3c9a8a5fedcb3c0306cdefcf2fe1ff7e71930..091af7c95af03433770e332351e6d45c50a83ca6 100644 (file)
@@ -71,7 +71,7 @@ void cpu_init_early_f(void)
 #endif
 #if defined(CONFIG_SYS_FSL_ERRATUM_IFC_A003399) && !defined(CONFIG_SYS_RAMBOOT)
        ccsr_l2cache_t *l2cache = (void *)CONFIG_SYS_MPC85xx_L2_ADDR;
-       u32  *l2srbar, *dst, *src;
+       u32  *dst, *src;
        void (*setup_ifc_sram)(void);
 #endif
 
@@ -137,7 +137,7 @@ void cpu_init_early_f(void)
        dst = (u32 *) SRAM_BASE_ADDR;
        src = (u32 *) setup_ifc;
        for (i = 0; i < 1024; i++)
-               *l2srbar++ = *src++;
+               *dst++ = *src++;
 
        setup_ifc_sram();
 
index c8c84a1f7e7124205e6d22d818e27665bf98703f..18e9cc5b8b05cb24bb489ad677722f6a6c81b93b 100644 (file)
@@ -115,6 +115,11 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
        for (i = 0; i < 32; i++)
                out_be32(&ddr->debug[i], regs->debug[i]);
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_DDR_A003474
+       out_be32(&ddr->debug[12], 0x00000015);
+       out_be32(&ddr->debug[21], 0x24000000);
+#endif /* CONFIG_SYS_FSL_ERRATUM_DDR_A003474 */
+
        /* Set, but do not enable the memory */
        temp_sdram_cfg = regs->ddr_sdram_cfg;
        temp_sdram_cfg &= ~(SDRAM_CFG_MEM_EN);
index 9d31568412a30c89bf63641599d789075551d827..977770e99d1ecc392aac295e943a0351b1735ebf 100644 (file)
@@ -466,7 +466,7 @@ void fdt_fixup_fman_firmware(void *blob)
                return;
        }
 
-       if (length > CONFIG_SYS_FMAN_FW_LENGTH) {
+       if (length > CONFIG_SYS_QE_FMAN_FW_LENGTH) {
                printf("Fman firmware at %p is too large (size=%u)\n",
                       fmanfw, length);
                return;
@@ -660,8 +660,19 @@ void ft_cpu_setup(void *blob, bd_t *bd)
        do_fixup_by_compat_u32(blob, "fsl,gianfar-ptp-timer",
                        "timer-frequency", gd->bus_clk/2, 1);
 
+       /*
+        * clock-freq should change to clock-frequency and
+        * flexcan-v1.0 should change to p1010-flexcan respectively
+        * in the future.
+        */
        do_fixup_by_compat_u32(blob, "fsl,flexcan-v1.0",
-                       "clock_freq", gd->bus_clk, 1);
+                       "clock_freq", gd->bus_clk/2, 1);
+
+       do_fixup_by_compat_u32(blob, "fsl,flexcan-v1.0",
+                       "clock-frequency", gd->bus_clk/2, 1);
+
+       do_fixup_by_compat_u32(blob, "fsl,p1010-flexcan",
+                       "clock-frequency", gd->bus_clk/2, 1);
 
        fdt_fixup_usb(blob);
 }
@@ -677,6 +688,12 @@ void ft_cpu_setup(void *blob, bd_t *bd)
 #define CCSR_VIRT_TO_PHYS(x) \
        (CONFIG_SYS_CCSRBAR_PHYS + ((x) - CONFIG_SYS_CCSRBAR))
 
+static void msg(const char *name, uint64_t uaddr, uint64_t daddr)
+{
+       printf("Warning: U-Boot configured %s at address %llx,\n"
+              "but the device tree has it at %llx\n", name, uaddr, daddr);
+}
+
 /*
  * Verify the device tree
  *
@@ -692,33 +709,32 @@ void ft_cpu_setup(void *blob, bd_t *bd)
  */
 int ft_verify_fdt(void *fdt)
 {
-       uint64_t ccsr = 0;
+       uint64_t addr = 0;
        int aliases;
        int off;
 
        /* First check the CCSR base address */
        off = fdt_node_offset_by_prop_value(fdt, -1, "device_type", "soc", 4);
        if (off > 0)
-               ccsr = fdt_get_base_address(fdt, off);
+               addr = fdt_get_base_address(fdt, off);
 
-       if (!ccsr) {
+       if (!addr) {
                printf("Warning: could not determine base CCSR address in "
                       "device tree\n");
                /* No point in checking anything else */
                return 0;
        }
 
-       if (ccsr != CONFIG_SYS_CCSRBAR_PHYS) {
-               printf("Warning: U-Boot configured CCSR at address %llx,\n"
-                      "but the device tree has it at %llx\n",
-                      (uint64_t) CONFIG_SYS_CCSRBAR_PHYS, ccsr);
+       if (addr != CONFIG_SYS_CCSRBAR_PHYS) {
+               msg("CCSR", CONFIG_SYS_CCSRBAR_PHYS, addr);
                /* No point in checking anything else */
                return 0;
        }
 
        /*
-        * Get the 'aliases' node.  If there isn't one, then there's nothing
-        * left to do.
+        * Check some nodes via aliases.  We assume that U-Boot and the device
+        * tree enumerate the devices equally.  E.g. the first serial port in
+        * U-Boot is the same as "serial0" in the device tree.
         */
        aliases = fdt_path_offset(fdt, "/aliases");
        if (aliases > 0) {
@@ -735,5 +751,30 @@ int ft_verify_fdt(void *fdt)
 #endif
        }
 
+       /*
+        * The localbus node is typically a root node, even though the lbc
+        * controller is part of CCSR.  If we were to put the lbc node under
+        * the SOC node, then the 'ranges' property in the lbc node would
+        * translate through the 'ranges' property of the parent SOC node, and
+        * we don't want that.  Since it's a separate node, it's possible for
+        * the 'reg' property to be wrong, so check it here.  For now, we
+        * only check for "fsl,elbc" nodes.
+        */
+#ifdef CONFIG_SYS_LBC_ADDR
+       off = fdt_node_offset_by_compatible(fdt, -1, "fsl,elbc");
+       if (off > 0) {
+               const u32 *reg = fdt_getprop(fdt, off, "reg", NULL);
+               if (reg) {
+                       uint64_t uaddr = CCSR_VIRT_TO_PHYS(CONFIG_SYS_LBC_ADDR);
+
+                       addr = fdt_translate_address(fdt, off, reg);
+                       if (uaddr != addr) {
+                               msg("the localbus", uaddr, addr);
+                               return 0;
+                       }
+               }
+       }
+#endif
+
        return 1;
 }
index 89ed5b47fc9344bd5412a1e75036a8c1762e7c22..4b52dad56cefa08651bb349295569bd9efa96f52 100644 (file)
@@ -495,7 +495,6 @@ void fsl_serdes_init(void)
        int cfg;
        serdes_corenet_t *srds_regs;
        int lane, bank, idx;
-       enum srds_prtcl lane_prtcl;
        int have_bank[SRDS_MAX_BANK] = {};
 #ifdef CONFIG_SYS_P4080_ERRATUM_SERDES8
        u32 serdes8_devdisr = 0;
@@ -507,6 +506,7 @@ void fsl_serdes_init(void)
 #ifdef CONFIG_SYS_P4080_ERRATUM_SERDES_A001
        int need_serdes_a001;   /* TRUE == need work-around for SERDES A001 */
 #endif
+#ifdef CONFIG_SYS_P4080_ERRATUM_SERDES8
        char buffer[HWCONFIG_BUFFER_SIZE];
        char *buf = NULL;
 
@@ -516,6 +516,7 @@ void fsl_serdes_init(void)
         */
        if (getenv_f("hwconfig", buffer, sizeof(buffer)) > 0)
                buf = buffer;
+#endif
 
        /* Is serdes enabled at all? */
        if (!(in_be32(&gur->rcwsr[5]) & FSL_CORENET_RCWSR5_SRDS_EN))
@@ -617,7 +618,10 @@ void fsl_serdes_init(void)
                }
        }
 
+#if defined(CONFIG_SYS_P4080_ERRATUM_SERDES8) || defined (CONFIG_SYS_P4080_ERRATUM_SERDES9)
        for (lane = 0; lane < SRDS_MAX_LANES; lane++) {
+               enum srds_prtcl lane_prtcl;
+
                idx = serdes_get_lane_idx(lane);
                lane_prtcl = serdes_get_prtcl(cfg, lane);
 
@@ -729,6 +733,7 @@ void fsl_serdes_init(void)
 
 #endif
        }
+#endif
 
 #ifdef DEBUG
        puts("\n");
index 6678ed4118c02403b129f7f49c00b96a29a2af3e..c81e19c0e99bc5231d8a3c32b166d47373a2b84f 100644 (file)
@@ -68,6 +68,12 @@ __secondary_start_page:
        mtspr   SPRN_HID1,r3
 #endif
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_CPU_A003999
+       mfspr   r3,977
+       oris    r3,r3,0x0100
+       mtspr   977,r3
+#endif
+
        /* Enable branch prediction */
        lis     r3,BUCSR_ENABLE@h
        ori     r3,r3,BUCSR_ENABLE@l
index 5e0d78d0064f6ef120d21e9a9b2170cd97f9d1ec..4d37d6e86389c9a7b3f926968c04058c92e1ad12 100644 (file)
@@ -253,6 +253,12 @@ l2_disabled:
        mtspr   HID1,r0
 #endif
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_CPU_A003999
+       mfspr   r3,977
+       oris    r3,r3,0x0100
+       mtspr   977,r3
+#endif
+
        /* Enable Branch Prediction */
 #if defined(CONFIG_BTB)
        lis     r0,BUCSR_ENABLE@h
@@ -318,6 +324,55 @@ l2_disabled:
 
 #endif /* CONFIG_MPC8569 */
 
+/*
+ * Search for the TLB that covers the code we're executing, and shrink it
+ * so that it covers only this 4K page.  That will ensure that any other
+ * TLB we create won't interfere with it.  We assume that the TLB exists,
+ * which is why we don't check the Valid bit of MAS1.
+ *
+ * This is necessary, for example, when booting from the on-chip ROM,
+ * which (oddly) creates a single 4GB TLB that covers CCSR and DDR.
+ * If we don't shrink this TLB now, then we'll accidentally delete it
+ * in "purge_old_ccsr_tlb" below.
+ */
+       bl      nexti           /* Find our address */
+nexti: mflr    r1              /* R1 = our PC */
+       li      r2, 0
+       mtspr   MAS6, r2        /* Assume the current PID and AS are 0 */
+       isync
+       msync
+       tlbsx   0, r1           /* This must succeed */
+
+       /* Set the size of the TLB to 4KB */
+       mfspr   r3, MAS1
+       li      r2, 0xF00
+       andc    r3, r3, r2      /* Clear the TSIZE bits */
+       ori     r3, r3, MAS1_TSIZE(BOOKE_PAGESZ_4K)@l
+       mtspr   MAS1, r3
+
+       /*
+        * Set the base address of the TLB to our PC.  We assume that
+        * virtual == physical.  We also assume that MAS2_EPN == MAS3_RPN.
+        */
+       lis     r3, MAS2_EPN@h
+       ori     r3, r3, MAS2_EPN@l      /* R3 = MAS2_EPN */
+
+       and     r1, r1, r3      /* Our PC, rounded down to the nearest page */
+
+       mfspr   r2, MAS2
+       andc    r2, r2, r3
+       or      r2, r2, r1
+       mtspr   MAS2, r2        /* Set the EPN to our PC base address */
+
+       mfspr   r2, MAS3
+       andc    r2, r2, r3
+       or      r2, r2, r1
+       mtspr   MAS3, r2        /* Set the RPN to our PC base address */
+
+       isync
+       msync
+       tlbwe
+
 /*
  * Relocate CCSR, if necessary.  We relocate CCSR if (obviously) the default
  * location is not where we want it.  This typically happens on a 36-bit
@@ -352,6 +407,8 @@ purge_old_ccsr_tlb:
 
        li      r1, 0
        mtspr   MAS6, r1        /* Search the current address space and PID */
+       isync
+       msync
        tlbsx   0, r8
        mfspr   r1, MAS1
        andis.  r2, r1, MAS1_VALID@h    /* Check for the Valid bit */
@@ -359,6 +416,8 @@ purge_old_ccsr_tlb:
 
        rlwinm  r1, r1, 0, 1, 31        /* Clear Valid bit */
        mtspr   MAS1, r1
+       isync
+       msync
        tlbwe
 1:
 
@@ -387,7 +446,7 @@ create_ccsr_new_tlb:
        tlbwe
 
        /*
-        * Create a TLB for the old location of CCSR.  Register R9 is reserved
+        * Create a TLB for the current location of CCSR.  Register R9 is reserved
         * for the virtual address of this TLB (CONFIG_SYS_CCSRBAR + 0x1000).
         */
 create_ccsr_old_tlb:
@@ -407,6 +466,33 @@ create_ccsr_old_tlb:
        msync
        tlbwe
 
+       /*
+        * We have a TLB for what we think is the current (old) CCSR.  Let's
+        * verify that, otherwise we won't be able to move it.
+        * CONFIG_SYS_CCSRBAR_DEFAULT is always a 32-bit number, so we only
+        * need to compare the lower 32 bits of CCSRBAR on CoreNet systems.
+        */
+verify_old_ccsr:
+       lis     r0, CONFIG_SYS_CCSRBAR_DEFAULT@h
+       ori     r0, r0, CONFIG_SYS_CCSRBAR_DEFAULT@l
+#ifdef CONFIG_FSL_CORENET
+       lwz     r1, 4(r9)               /* CCSRBARL */
+#else
+       lwz     r1, 0(r9)               /* CCSRBAR, shifted right by 12 */
+       slwi    r1, r1, 12
+#endif
+
+       cmpl    0, r0, r1
+
+       /*
+        * If the value we read from CCSRBARL is not what we expect, then
+        * enter an infinite loop.  This will at least allow a debugger to
+        * halt execution and examine TLBs, etc.  There's no point in going
+        * on.
+        */
+infinite_debug_loop:
+       bne     infinite_debug_loop
+
 #ifdef CONFIG_FSL_CORENET
 
 #define CCSR_LAWBARH0  (CONFIG_SYS_CCSRBAR + 0x1000)
@@ -446,7 +532,7 @@ create_temp_law:
         */
 read_old_ccsrbar:
        lwz     r0, 0(r9)       /* CCSRBARH */
-       lwz     r0, 4(r9)       /* CCSRBARH */
+       lwz     r0, 4(r9)       /* CCSRBARL */
        isync
 
        /*
index 01a3561fa0e76091d18870f41e7b373245e03cf6..929f6a607e029bac48630e6977246067cd2460cf 100644 (file)
@@ -172,7 +172,7 @@ void set_tlb(u8 tlb, u32 epn, u64 rpn,
 
 void disable_tlb(u8 esel)
 {
-       u32 _mas0, _mas1, _mas2, _mas3, _mas7;
+       u32 _mas0, _mas1, _mas2, _mas3;
 
        free_tlb_cam(esel);
 
@@ -180,14 +180,13 @@ void disable_tlb(u8 esel)
        _mas1 = 0;
        _mas2 = 0;
        _mas3 = 0;
-       _mas7 = 0;
 
        mtspr(MAS0, _mas0);
        mtspr(MAS1, _mas1);
        mtspr(MAS2, _mas2);
        mtspr(MAS3, _mas3);
 #ifdef CONFIG_ENABLE_36BIT_PHYS
-       mtspr(MAS7, _mas7);
+       mtspr(MAS7, 0);
 #endif
        asm volatile("isync;msync;tlbwe;isync");
 
@@ -252,16 +251,20 @@ setup_ddr_tlbs_phys(phys_addr_t p_addr, unsigned int memsize_in_meg)
        unsigned int tlb_size;
        unsigned int wimge = 0;
        unsigned int ram_tlb_address = (unsigned int)CONFIG_SYS_DDR_SDRAM_BASE;
-       unsigned int max_cam = (mfspr(SPRN_TLB1CFG) >> 16) & 0xf;
+       unsigned int max_cam;
        u64 size, memsize = (u64)memsize_in_meg << 20;
 
 #ifdef CONFIG_SYS_PPC_DDR_WIMGE
        wimge = CONFIG_SYS_PPC_DDR_WIMGE;
 #endif
        size = min(memsize, CONFIG_MAX_MEM_MAPPED);
-
-       /* Convert (4^max) kB to (2^max) bytes */
-       max_cam = max_cam * 2 + 10;
+       if ((mfspr(SPRN_MMUCFG) & MMUCFG_MAVN) == MMUCFG_MAVN_V1) {
+               /* Convert (4^max) kB to (2^max) bytes */
+               max_cam = ((mfspr(SPRN_TLB1CFG) >> 16) & 0xf) * 2 + 10;
+       } else {
+               /* Convert (2^max) kB to (2^max) bytes */
+               max_cam = __ilog2(mfspr(SPRN_TLB1PS)) + 10;
+       }
 
        for (i = 0; size && i < 8; i++) {
                int ram_tlb_index = find_free_tlbcam();
index ffcc8e621201700bf5dd5abc2d8bf8a25f4b2766..d2c8c78e864b279d88cc9b86e0fbb153b329141d 100644 (file)
@@ -48,7 +48,6 @@ checkcpu(void)
 {
        sys_info_t sysinfo;
        uint pvr, svr;
-       uint ver;
        uint major, minor;
        char buf1[32], buf2[32];
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
@@ -57,7 +56,6 @@ checkcpu(void)
        uint msscr0 = mfspr(MSSCR0);
 
        svr = get_svr();
-       ver = SVR_SOC_VER(svr);
        major = SVR_MAJ(svr);
        minor = SVR_MIN(svr);
 
@@ -77,7 +75,6 @@ checkcpu(void)
        puts("Core:  ");
 
        pvr = get_pvr();
-       ver = PVR_E600_VER(pvr);
        major = PVR_E600_MAJ(pvr);
        minor = PVR_E600_MIN(pvr);
 
index 7725c67b4886eaeb4e47f7ac6de8619c945549f2..1bbf4ccc6550b1449c07f210b795779478bf554f 100644 (file)
@@ -125,6 +125,7 @@ DECLARE_GLOBAL_DATA_PTR;
 /************************************************************************/
 
 #include <video_font.h>                        /* Get font data, width and height */
+#include <video_font_data.h>
 
 #ifdef CONFIG_VIDEO_LOGO
 #include <video_logo.h>                        /* Get logo data, width and height */
index 15cd375ae367c94f74b52836a858460d3b53091c..2067d53ad28cefadb7d4e781455ce0c85ffdab5c 100644 (file)
@@ -672,7 +672,6 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,
                rcw_en = 1;
                ap_en = popts->ap_en;
        } else {
-               rcw_en = 0;
                ap_en = 0;
        }
 
@@ -702,9 +701,7 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,
                | ((obc_cfg & 0x1) << 6)
                | ((ap_en & 0x1) << 5)
                | ((d_init & 0x1) << 4)
-#ifdef CONFIG_FSL_DDR3
                | ((rcw_en & 0x1) << 2)
-#endif
                | ((md_en & 0x1) << 0)
                );
        debug("FSLDDR: ddr_sdram_cfg_2 = 0x%08x\n", ddr->ddr_sdram_cfg_2);
@@ -745,7 +742,7 @@ static void set_ddr_sdram_mode_2(fsl_ddr_cfg_regs_t *ddr,
 
 #ifdef CONFIG_FSL_DDR3
        if (unq_mrs_en) {       /* unique mode registers are supported */
-               for (i = 1; i < 4; i++) {
+               for (i = 1; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
                        if (popts->rtt_override)
                                rtt_wr = popts->rtt_wr_override_value;
                        else
@@ -944,7 +941,7 @@ static void set_ddr_sdram_mode(fsl_ddr_cfg_regs_t *ddr,
        debug("FSLDDR: ddr_sdram_mode = 0x%08x\n", ddr->ddr_sdram_mode);
 
        if (unq_mrs_en) {       /* unique mode registers are supported */
-               for (i = 1; i < 4; i++) {
+               for (i = 1; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
                        if (popts->rtt_override)
                                rtt = popts->rtt_override_value;
                        else
index ffb503a777aca52f7fe5177adf31263276c2f676..d0a546610ee727edc9abc8424a53c08c764d1c25 100644 (file)
@@ -135,6 +135,7 @@ ddr_compute_dimm_parameters(const ddr3_spd_eeprom_t *spd,
        switch (spd->module_type & DDR3_SPD_MODULETYPE_MASK) {
        case DDR3_SPD_MODULETYPE_RDIMM:
        case DDR3_SPD_MODULETYPE_MINI_RDIMM:
+       case DDR3_SPD_MODULETYPE_72B_SO_RDIMM:
                /* Registered/buffered DIMMs */
                pdimm->registered_dimm = 1;
                for (i = 0; i < 16; i += 2) {
@@ -148,6 +149,12 @@ ddr_compute_dimm_parameters(const ddr3_spd_eeprom_t *spd,
        case DDR3_SPD_MODULETYPE_SO_DIMM:
        case DDR3_SPD_MODULETYPE_MICRO_DIMM:
        case DDR3_SPD_MODULETYPE_MINI_UDIMM:
+       case DDR3_SPD_MODULETYPE_MINI_CDIMM:
+       case DDR3_SPD_MODULETYPE_72B_SO_UDIMM:
+       case DDR3_SPD_MODULETYPE_72B_SO_CDIMM:
+       case DDR3_SPD_MODULETYPE_LRDIMM:
+       case DDR3_SPD_MODULETYPE_16B_SO_DIMM:
+       case DDR3_SPD_MODULETYPE_32B_SO_DIMM:
                /* Unbuffered DIMMs */
                if (spd->mod_section.unbuffered.addr_mapping & 0x1)
                        pdimm->mirrored_dimm = 1;
index d7d66ef4917826cae369509095323ea0eab582f0..5b724371f60669c526529ac967b1447b0d73c643 100644 (file)
@@ -1354,7 +1354,6 @@ unsigned long long fsl_ddr_interactive(fsl_ddr_info_t *pinfo)
 {
        unsigned long long ddrsize;
        const char *prompt = "FSL DDR>";
-       unsigned int len;
        char buffer[CONFIG_SYS_CBSIZE];
        char *argv[CONFIG_SYS_MAXARGS + 1];     /* NULL terminated */
        int argc;
@@ -1389,7 +1388,7 @@ unsigned long long fsl_ddr_interactive(fsl_ddr_info_t *pinfo)
                 * No need to worry for buffer overflow here in
                 * this function;  readline() maxes out at CFG_CBSIZE
                 */
-               len = readline_into_buffer(prompt,  buffer);
+               readline_into_buffer(prompt,  buffer);
                argc = parse_line(buffer, argv);
                if (argc == 0)
                        continue;
index 4dc748b951019cdd66a4f19cbae902075fdd61cc..00ec57be1fffdf4bad574dd7f343b536a0e34467 100644 (file)
@@ -483,7 +483,9 @@ unsigned int populate_memctl_options(int all_DIMMs_registered,
        unsigned int i;
        char buffer[HWCONFIG_BUFFER_SIZE];
        char *buf = NULL;
+#if defined(CONFIG_FSL_DDR3) || defined(CONFIG_FSL_DDR2)
        const struct dynamic_odt *pdodt = odt_unknown;
+#endif
        ulong ddr_freq;
 
        /*
@@ -493,6 +495,7 @@ unsigned int populate_memctl_options(int all_DIMMs_registered,
        if (getenv_f("hwconfig", buffer, sizeof(buffer)) > 0)
                buf = buffer;
 
+#if defined(CONFIG_FSL_DDR3) || defined(CONFIG_FSL_DDR2)
        /* Chip select options. */
        if (CONFIG_DIMM_SLOTS_PER_CTLR == 1) {
                switch (pdimm[0].n_ranks) {
@@ -546,6 +549,7 @@ unsigned int populate_memctl_options(int all_DIMMs_registered,
                        break;
                }
        }
+#endif
 
        /* Pick chip-select local options. */
        for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
index 112c60353289d5a29674ad30b81dc0756c65473f..d07ae1b4fe278d4a850d95c5bdbdda7bc83e1804 100644 (file)
@@ -87,13 +87,12 @@ void ft_fixup_num_cores(void *blob) {
 #endif /* defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) */
 
 #ifdef CONFIG_HAS_FSL_DR_USB
-static void fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
-                               const char *phy_type)
+static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
+                               const char *phy_type, int start_offset)
 {
        const char *compat = "fsl-usb2-dr";
        const char *prop_mode = "dr_mode";
        const char *prop_type = "phy_type";
-       static int start_offset = -1;
        int node_offset;
        int err;
 
@@ -102,7 +101,7 @@ static void fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
        if (node_offset < 0) {
                printf("WARNING: could not find compatible node %s: %s.\n",
                        compat, fdt_strerror(node_offset));
-               return;
+               return -1;
        }
 
        if (mode) {
@@ -121,16 +120,18 @@ static void fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
                               prop_type, compat, fdt_strerror(err));
        }
 
-       start_offset = node_offset;
+       return node_offset;
 }
 
 void fdt_fixup_dr_usb(void *blob, bd_t *bd)
 {
        const char *modes[] = { "host", "peripheral", "otg" };
-       const char *phys[] = { "ulpi", "umti" };
+       const char *phys[] = { "ulpi", "utmi" };
        const char *mode = NULL;
        const char *phy_type = NULL;
        char usb1_defined = 0;
+       int usb_mode_off = -1;
+       int usb_phy_off = -1;
        char str[5];
        int i, j;
 
@@ -153,11 +154,11 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
                                }
                        }
                        if (mode_idx >= 0)
-                               fdt_fixup_usb_mode_phy_type(blob,
-                                       modes[mode_idx], NULL);
+                               usb_mode_off = fdt_fixup_usb_mode_phy_type(blob,
+                                       modes[mode_idx], NULL, usb_mode_off);
                        if (phy_idx >= 0)
-                               fdt_fixup_usb_mode_phy_type(blob,
-                                       NULL, phys[phy_idx]);
+                               usb_phy_off = fdt_fixup_usb_mode_phy_type(blob,
+                                       NULL, phys[phy_idx], usb_phy_off);
                        if (!strcmp(str, "usb1"))
                                usb1_defined = 1;
                        if (mode_idx < 0 && phy_idx < 0)
@@ -165,11 +166,12 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
                }
        }
        if (!usb1_defined) {
+               int usb_off = -1;
                mode = getenv("usb_dr_mode");
                phy_type = getenv("usb_phy_type");
                if (!mode && !phy_type)
                        return;
-               fdt_fixup_usb_mode_phy_type(blob, mode, phy_type);
+               fdt_fixup_usb_mode_phy_type(blob, mode, phy_type, usb_off);
        }
 }
 #endif /* CONFIG_HAS_FSL_DR_USB */
index d78962ff8734414b77a24b92941e8e3a20dec2c8..587576bacf98b066424baf7984010ebcd7665501 100644 (file)
@@ -107,7 +107,7 @@ void init_early_memctl_regs(void)
 void upmconfig(uint upm, uint *table, uint size)
 {
        fsl_lbc_t *lbc = LBC_BASE_ADDR;
-       int i, mdr, mad, old_mad = 0;
+       int i, mad, old_mad = 0;
        u32 mask = (~MxMR_OP_MSK & ~MxMR_MAD_MSK);
        u32 msel = BR_UPMx_TO_MSEL(upm);
        u32 *mxmr = &lbc->mamr + upm;
@@ -138,7 +138,7 @@ void upmconfig(uint upm, uint *table, uint size)
        for (i = 0; i < size; i++) {
                out_be32(mxmr, (in_be32(mxmr) & mask) | MxMR_OP_WARR | i);
                out_be32(&lbc->mdr, table[i]);
-               mdr = in_be32(&lbc->mdr);
+               (void)in_be32(&lbc->mdr);
                *dummy = 0;
                do {
                        mad = in_be32(mxmr) & MxMR_MAD_MSK;
index a31b17e9e898f3416c004af63fad0bb1b3fc6de8..48aa75391df739e46e98d5a5b04705b3ac1b8a40 100644 (file)
@@ -116,26 +116,25 @@ long int spd_sdram(int(read_spd)(uint addr))
 {
        int tmp,row,col;
        int total_size,bank_size,bank_code;
-       int ecc_on;
        int mode;
        int bank_cnt;
 
        int sdram0_pmit=0x07c00000;
+       int sdram0_b0cr;
+       int sdram0_b1cr = 0;
 #ifndef CONFIG_405EP /* not on PPC405EP */
+       int sdram0_b2cr = 0;
+       int sdram0_b3cr = 0;
        int sdram0_besr0 = -1;
        int sdram0_besr1 = -1;
        int sdram0_eccesr = -1;
-#endif
        int sdram0_ecccfg;
+       int ecc_on;
+#endif
 
        int sdram0_rtr=0;
        int sdram0_tr=0;
 
-       int sdram0_b0cr;
-       int sdram0_b1cr;
-       int sdram0_b2cr;
-       int sdram0_b3cr;
-
        int sdram0_cfg=0;
 
        int t_rp;
@@ -295,6 +294,7 @@ long int spd_sdram(int(read_spd)(uint addr))
        if (bank_cnt > 4)       /* we only have 4 banks to work with */
                SPD_ERR("SDRAM - unsupported module rows for this width\n");
 
+#ifndef CONFIG_405EP /* not on PPC405EP */
        /* now check for ECC ability of module. We only support ECC
         *   on 32 bit wide devices with 8 bit ECC.
         */
@@ -305,6 +305,7 @@ long int spd_sdram(int(read_spd)(uint addr))
                sdram0_ecccfg = 0;
                ecc_on = 0;
        }
+#endif
 
        /*------------------------------------------------------------------
         * calculate total size
@@ -378,9 +379,6 @@ long int spd_sdram(int(read_spd)(uint addr))
         * using the calculated values, compute the bank
         * config register values.
         * -------------------------------------------------------------------*/
-       sdram0_b1cr = 0;
-       sdram0_b2cr = 0;
-       sdram0_b3cr = 0;
 
        /* compute the size of each bank */
        bank_size = total_size / bank_cnt;
@@ -444,8 +442,10 @@ long int spd_sdram(int(read_spd)(uint addr))
        /* 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;
+#ifndef CONFIG_405EP /* not on PPC405EP */
        if (ecc_on)
                sdram0_cfg |= SDRAM0_CFG_MEMCHK;
+#endif
        mtsdram(SDRAM0_CFG, sdram0_cfg);
 
        return (total_size);
index e05daf23b711f82e642f967dda87bdcc8f24093e..8a20a2b1e05befac0092c549e500ab141f2983d1 100644 (file)
@@ -380,8 +380,6 @@ static void program_cfg0(unsigned long *dimm_populated,
        unsigned char ecc;
        unsigned char attributes;
        unsigned long data_width;
-       unsigned long dimm_32bit;
-       unsigned long dimm_64bit;
 
        /*
         * get Memory Controller Options 0 data
@@ -423,10 +421,8 @@ static void program_cfg0(unsigned long *dimm_populated,
                                (unsigned long)spd_read(iic0_dimm_addr[dimm_num],6) +
                                (((unsigned long)spd_read(iic0_dimm_addr[dimm_num],7)) << 8);
                        if (data_width == 64 || data_width == 72) {
-                               dimm_64bit = TRUE;
                                cfg0 |= SDRAM_CFG0_DMWD_64;
                        } else if (data_width == 32 || data_width == 40) {
-                               dimm_32bit = TRUE;
                                cfg0 |= SDRAM_CFG0_DMWD_32;
                        } else {
                                printf("WARNING: DIMM with datawidth of %lu bits.\n",
index 4a2f33744d4eb4d799c214f33931e67429b5060c..85217ea272d47c7a9f8251008f93730ee4d5a635 100644 (file)
@@ -445,9 +445,6 @@ static unsigned char spd_read(uchar chip, uint addr)
 phys_size_t initdram(int board_type)
 {
        unsigned char iic0_dimm_addr[] = SPD_EEPROM_ADDRESS;
-       unsigned char spd0[MAX_SPD_BYTES];
-       unsigned char spd1[MAX_SPD_BYTES];
-       unsigned char *dimm_spd[MAXDIMMS];
        unsigned long dimm_populated[MAXDIMMS] = {SDRAM_NONE, SDRAM_NONE};
        unsigned long num_dimm_banks;           /* on board dimm banks */
        unsigned long val;
@@ -457,12 +454,6 @@ phys_size_t initdram(int board_type)
 
        num_dimm_banks = sizeof(iic0_dimm_addr);
 
-       /*------------------------------------------------------------------
-        * Set up an array of SPD matrixes.
-        *-----------------------------------------------------------------*/
-       dimm_spd[0] = spd0;
-       dimm_spd[1] = spd1;
-
        /*------------------------------------------------------------------
         * Reset the DDR-SDRAM controller.
         *-----------------------------------------------------------------*/
@@ -1000,7 +991,6 @@ static void program_copt1(unsigned long *dimm_populated,
        unsigned long attribute = 0;
        unsigned long buf0, buf1; /* TODO: code to be changed for IOP1.6 to support 4 DIMMs */
        unsigned long bankcount;
-       unsigned long ddrtype;
        unsigned long val;
 
 #ifdef CONFIG_DDR_ECC
@@ -1045,8 +1035,6 @@ static void program_copt1(unsigned long *dimm_populated,
                        else /* bank count = 8 */
                                mcopt1 |= SDRAM_MCOPT1_8_BANKS;
 
-                       /* test DDR type */
-                       ddrtype = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 2);
                        /* test for buffered/unbuffered, registered, differential clocks */
                        registered = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 20);
                        attribute = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 21);
@@ -1500,7 +1488,6 @@ static void program_mode(unsigned long *dimm_populated,
                        else
                                sdram_ddr1 = FALSE;
 
-                       /* t_wr_ns = max(t_wr_ns, (unsigned long)dimm_spd[dimm_num][36] >> 2); */ /*  not used in this loop. */
                        cas_bit = spd_read(iic0_dimm_addr[dimm_num], 18);
                        debug("cas_bit[SPD byte 18]=%02lx\n", cas_bit);
 
@@ -2490,12 +2477,6 @@ static void DQS_calibration_process(void)
        unsigned long val;
        long rffd_average;
        long max_start;
-       long min_end;
-       unsigned long begin_rqfd[MAXRANKS];
-       unsigned long begin_rffd[MAXRANKS];
-       unsigned long end_rqfd[MAXRANKS];
-       unsigned long end_rffd[MAXRANKS];
-       char window_found;
        unsigned long dlycal;
        unsigned long dly_val;
        unsigned long max_pass_length;
@@ -2506,6 +2487,7 @@ static void DQS_calibration_process(void)
        unsigned char fail_found;
        unsigned char pass_found;
 #if !defined(CONFIG_DDR_RQDC_FIXED)
+       int window_found;
        u32 rqdc_reg;
        u32 rqfd;
        u32 rqfd_start;
@@ -2559,16 +2541,6 @@ calibration_loop:
 #endif /* CONFIG_DDR_RQDC_FIXED */
 
        max_start = 0;
-       min_end = 0;
-       begin_rqfd[0] = 0;
-       begin_rffd[0] = 0;
-       begin_rqfd[1] = 0;
-       begin_rffd[1] = 0;
-       end_rqfd[0] = 0;
-       end_rffd[0] = 0;
-       end_rqfd[1] = 0;
-       end_rffd[1] = 0;
-       window_found = FALSE;
 
        max_pass_length = 0;
        max_start = 0;
@@ -2576,7 +2548,6 @@ calibration_loop:
        current_pass_length = 0;
        current_fail_length = 0;
        current_start = 0;
-       window_found = FALSE;
        fail_found = FALSE;
        pass_found = FALSE;
 
@@ -2621,7 +2592,6 @@ calibration_loop:
                                if (fail_found == FALSE) {
                                        fail_found = TRUE;
                                } else if (pass_found == TRUE) {
-                                       window_found = TRUE;
                                        break;
                                }
                        }
index 4b8e65a51de8ec1f5b878279b65d91a0366a90eb..3c87bfb60e7f1af996e566594f172f027f670475 100644 (file)
@@ -154,18 +154,20 @@ u32 ddr_rdss_opt(ulong) __attribute__((weak, alias("__ddr_rdss_opt")));
 
 static u32 *get_membase(int bxcr_num)
 {
-       ulong bxcf;
        u32 *membase;
 
 #if defined(SDRAM_R0BAS)
        /* BAS from Memory Queue rank reg. */
        membase =
            (u32 *)(SDRAM_RXBAS_SDBA_DECODE(mfdcr_any(SDRAM_R0BAS+bxcr_num)));
-       bxcf = 0;       /* just to satisfy the compiler */
 #else
-       /* BAS from SDRAM_MBxCF mem rank reg. */
-       mfsdram(SDRAM_MB0CF + (bxcr_num<<2), bxcf);
-       membase = (u32 *)((bxcf & 0xfff80000) << 3);
+       {
+               ulong bxcf;
+
+               /* BAS from SDRAM_MBxCF mem rank reg. */
+               mfsdram(SDRAM_MB0CF + (bxcr_num<<2), bxcf);
+               membase = (u32 *)((bxcf & 0xfff80000) << 3);
+       }
 #endif
 
        return membase;
@@ -719,7 +721,9 @@ static u32 program_DQS_calibration_methodB(struct ddrautocal *ddrcal)
 static u32 DQS_calibration_methodB(struct ddrautocal *cal)
 {
        ulong rfdc_reg;
+#ifndef CONFIG_DDR_RFDC_FIXED
        ulong rffd;
+#endif
 
        ulong rqdc_reg;
        ulong rqfd;
@@ -837,7 +841,6 @@ static u32 DQS_calibration_methodB(struct ddrautocal *cal)
        mtsdram(SDRAM_RFDC, rfdc_reg | SDRAM_RFDC_RFFD_ENCODE(rffd_average));
 #endif /* CONFIG_DDR_RFDC_FIXED */
 
-       rffd = rffd_average;
        in_window = 0;
 
        curr_win_min = curr_win_max = 0;
index a87e93b80c112a7191dbdf709779ca8642258e7e..43b972fbb2b10083c14f5601cb74e7bb9e473c54 100644 (file)
@@ -227,7 +227,6 @@ static void pcie_dmer_enable(void)
 static int pcie_read_config(struct pci_controller *hose, unsigned int devfn,
        int offset, int len, u32 *val) {
 
-       u8 *address;
        *val = 0;
 
        if (validate_endpoint(hose))
@@ -255,7 +254,7 @@ static int pcie_read_config(struct pci_controller *hose, unsigned int devfn,
                ((PCI_BUS(devfn) == 0) || (PCI_BUS(devfn) == 1)))
                return 0;
 
-       address = pcie_get_base(hose, devfn);
+       pcie_get_base(hose, devfn);
        offset += devfn << 4;
 
        /*
@@ -287,8 +286,6 @@ static int pcie_read_config(struct pci_controller *hose, unsigned int devfn,
 static int pcie_write_config(struct pci_controller *hose, unsigned int devfn,
        int offset, int len, u32 val) {
 
-       u8 *address;
-
        if (validate_endpoint(hose))
                return 0;               /* No upstream config access */
 
@@ -307,7 +304,7 @@ static int pcie_write_config(struct pci_controller *hose, unsigned int devfn,
                ((PCI_BUS(devfn) == 0) || (PCI_BUS(devfn) == 1)))
                return 0;
 
-       address = pcie_get_base(hose, devfn);
+       pcie_get_base(hose, devfn);
        offset += devfn << 4;
 
        /*
@@ -1063,7 +1060,6 @@ int ppc4xx_init_pcie_endport(int port)
 void ppc4xx_setup_pcie_rootpoint(struct pci_controller *hose, int port)
 {
        volatile void *mbase = NULL;
-       volatile void *rmbase = NULL;
 
        pci_set_ops(hose,
                    pcie_read_config_byte,
@@ -1076,18 +1072,15 @@ void ppc4xx_setup_pcie_rootpoint(struct pci_controller *hose, int port)
        switch (port) {
        case 0:
                mbase = (u32 *)CONFIG_SYS_PCIE0_XCFGBASE;
-               rmbase = (u32 *)CONFIG_SYS_PCIE0_CFGBASE;
                hose->cfg_data = (u8 *)CONFIG_SYS_PCIE0_CFGBASE;
                break;
        case 1:
                mbase = (u32 *)CONFIG_SYS_PCIE1_XCFGBASE;
-               rmbase = (u32 *)CONFIG_SYS_PCIE1_CFGBASE;
                hose->cfg_data = (u8 *)CONFIG_SYS_PCIE1_CFGBASE;
                break;
 #if CONFIG_SYS_PCIE_NR_PORTS > 2
        case 2:
                mbase = (u32 *)CONFIG_SYS_PCIE2_XCFGBASE;
-               rmbase = (u32 *)CONFIG_SYS_PCIE2_CFGBASE;
                hose->cfg_data = (u8 *)CONFIG_SYS_PCIE2_CFGBASE;
                break;
 #endif
index d97ca207c020ba16562d055c170d6e156cd22a3b..3d622550390cbd6d0371cce4d800f7db80320b74 100644 (file)
@@ -61,7 +61,6 @@ COBJS += tlb.o
 COBJS  += traps.o
 COBJS  += usb.o
 COBJS  += usb_ohci.o
-COBJS  += usbdev.o
 COBJS-$(CONFIG_XILINX_440) += xilinx_irq.o
 ifndef CONFIG_XILINX_440
 COBJS  += 4xx_uart.o
index 542ab69a13c9654a56b4b2995569ea7793ebf32c..231f69ebd004501d19fa49adf09b7ba527112953 100644 (file)
@@ -113,8 +113,6 @@ static force_inline void set_mcopt1_mchk(u32 bits)
  */
 static void inject_ecc_error(void *ptr, int par)
 {
-       u32 val;
-
        /*
         * Taken from PPC460EX/EXr/GT users manual (Rev 1.21)
         * 22.2.17.13 ECC Diagnostics
@@ -124,7 +122,7 @@ static void inject_ecc_error(void *ptr, int par)
         */
 
        out_be32(ptr, 0x00000000);
-       val = in_be32(ptr);
+       in_be32(ptr);
 
        /* 6. Set memory controller to no error checking */
        set_mcopt1_mchk(SDRAM_MCOPT1_MCHK_NON);
@@ -136,7 +134,7 @@ static void inject_ecc_error(void *ptr, int par)
                out_be32(ptr, in_be32(ptr) ^ 0x00000003);
 
        /* 8. Wait for SDRAM idle */
-       val = in_be32(ptr);
+       in_be32(ptr);
        set_mcopt1_mchk(SDRAM_MCOPT1_MCHK_CHK_REP);
 
        /* Wait for SDRAM idle */
@@ -151,7 +149,6 @@ static void rewrite_ecc_parity(void *ptr, int par)
        u32 end_address;
        u32 address_increment;
        u32 mcopt1;
-       u32 val;
 
        /*
         * Fill ECC parity byte again. Otherwise further accesses to
@@ -159,7 +156,7 @@ static void rewrite_ecc_parity(void *ptr, int par)
         */
 
        /* Wait for SDRAM idle */
-       val = in_be32(0x00000000);
+       in_be32(0x00000000);
        set_mcopt1_mchk(SDRAM_MCOPT1_MCHK_GEN);
 
        /* ECC bit set method for non-cached memory */
index 0e3423f7abba2a9015cc4c0ebc49b32063795211..027ca30c253218750ce6b53693ddf8c27e72d5b2 100644 (file)
@@ -134,7 +134,6 @@ DECLARE_GLOBAL_DATA_PTR;
 
 int serial_init (void)
 {
-       volatile char val;
        unsigned short br_reg;
 
        br_reg = ((((CONFIG_CPUCLOCK * 1000000) / 16) / gd->baudrate) - 1);
@@ -149,7 +148,7 @@ int serial_init (void)
        out_8((u8 *)SPU_BASE + spu_RxCmd, 0xb0);        /* Enable Rx */
        out_8((u8 *)SPU_BASE + spu_TxCmd, 0x9c);        /* Enable Tx */
        out_8((u8 *)SPU_BASE + spu_Handshk_rc, 0xff);   /* Clear Handshake */
-       val = in_8((u8 *)SPU_BASE + spu_RxBuff);        /* Dummy read, to clear receiver */
+       in_8((u8 *)SPU_BASE + spu_RxBuff);      /* Dummy read, to clear receiver */
 
        return (0);
 }
index 592efe70a71561911514bd2eb0b5b8e4b18eb3bf..8c71f75e6008c7f914443542b41c531a6feae6ce 100644 (file)
@@ -30,8 +30,6 @@
 DECLARE_GLOBAL_DATA_PTR;
 #endif
 
-#include "usbdev.h"
-
 int usb_cpu_init(void)
 {
 #ifdef CONFIG_4xx_DCACHE
@@ -39,9 +37,6 @@ int usb_cpu_init(void)
        change_tlb(gd->bd->bi_memstart, gd->bd->bi_memsize, TLB_WORD2_I_ENABLE);
 #endif
 
-#if defined(CONFIG_440EP) || defined(CONFIG_440EPX)
-       usb_dev_init();
-#endif
        return 0;
 }
 
index fe091e3fa083c6e5e1efa2c4c2020aaa4338910a..4fb7031203853940d0d26b4ff13e483a32930310 100644 (file)
@@ -44,8 +44,6 @@
 #include <usb.h>
 #include "usb_ohci.h"
 
-#include "usbdev.h"
-
 #define OHCI_USE_NPS           /* force NoPowerSwitching mode */
 #undef OHCI_VERBOSE_DEBUG      /* not always helpful */
 #undef DEBUG
@@ -753,10 +751,9 @@ static void td_submit_job (struct usb_device *dev, unsigned long pipe, void *buf
 
 static void dl_transfer_length(td_t * td)
 {
-       __u32 tdINFO, tdBE, tdCBP;
+       __u32 tdBE, tdCBP;
        urb_priv_t *lurb_priv = &urb_priv;
 
-       tdINFO = ohci_cpu_to_le32 (td->hwINFO);
        tdBE   = ohci_cpu_to_le32 (td->hwBE);
        tdCBP  = ohci_cpu_to_le32 (td->hwCBP);
 
@@ -1624,11 +1621,6 @@ int usb_lowlevel_init(void)
        ohci_inited = 1;
        urb_finished = 1;
 
-#if defined(CONFIG_440EP) || defined(CONFIG_440EPX)
-       /* init the device driver */
-       usb_dev_init();
-#endif
-
        return 0;
 }
 
diff --git a/arch/powerpc/cpu/ppc4xx/usbdev.c b/arch/powerpc/cpu/ppc4xx/usbdev.c
deleted file mode 100644 (file)
index fe398af..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*USB 1.1,2.0 device*/
-
-#include <common.h>
-#include <asm/processor.h>
-
-#if (defined(CONFIG_440EP) || defined(CONFIG_440EPX)) && defined(CONFIG_CMD_USB)
-
-#include <usb.h>
-#include <asm/ppc4xx-uic.h>
-#include "usbdev.h"
-
-#define USB_DT_DEVICE        0x01
-#define USB_DT_CONFIG        0x02
-#define USB_DT_STRING        0x03
-#define USB_DT_INTERFACE     0x04
-#define USB_DT_ENDPOINT      0x05
-
-int set_value = -1;
-
-void process_endpoints(unsigned short usb2d0_intrin)
-{
-       /*will hold the packet received */
-       struct usb_device_descriptor usb_device_packet;
-       struct usb_configuration_descriptor usb_config_packet;
-       struct usb_string_descriptor usb_string_packet;
-       struct devrequest setup_packet;
-       unsigned int *setup_packet_pt;
-       unsigned char *packet_pt = NULL;
-       int temp, temp1;
-
-       int i;
-
-       /*printf("{USB device} - endpoint 0x%X \n", usb2d0_intrin); */
-
-       /*set usb address, seems to not work unless it is done in the next
-          interrupt, so that is why it is done this way */
-       if (set_value != -1)
-               *(unsigned char *)USB2D0_FADDR_8 = (unsigned char)set_value;
-
-       /*endpoint 1 */
-       if (usb2d0_intrin & 0x01) {
-               setup_packet_pt = (unsigned int *)&setup_packet;
-
-               /*copy packet */
-               setup_packet_pt[0] = *(unsigned int *)USB2D0_FIFO_0;
-               setup_packet_pt[1] = *(unsigned int *)USB2D0_FIFO_0;
-               temp = *(unsigned int *)USB2D0_FIFO_0;
-               temp1 = *(unsigned int *)USB2D0_FIFO_0;
-
-               /*do some swapping */
-               setup_packet.value = swap_16(setup_packet.value);
-               setup_packet.index = swap_16(setup_packet.index);
-               setup_packet.length = swap_16(setup_packet.length);
-
-               /*clear rx packet */
-               *(unsigned short *)USB2D0_INCSR0_8 = 0x48;
-
-               /*printf("0x%X 0x%X 0x%X 0x%X 0x%X 0x%X 0x%X\n", setup_packet.requesttype,
-                  setup_packet.request, setup_packet.value,
-                  setup_packet.index, setup_packet.length, temp, temp1 ); */
-
-               switch (setup_packet.request) {
-               case USB_REQ_GET_DESCRIPTOR:
-
-                       switch (setup_packet.value >> 8) {
-                       case USB_DT_DEVICE:
-                               /*create packet */
-                               usb_device_packet.bLength = 18;
-                               usb_device_packet.bDescriptorType =
-                                   USB_DT_DEVICE;
-#ifdef USB_2_0_DEVICE
-                               usb_device_packet.bcdUSB = swap_16(0x200);
-#else
-                               usb_device_packet.bcdUSB = swap_16(0x110);
-#endif
-                               usb_device_packet.bDeviceClass = 0xff;
-                               usb_device_packet.bDeviceSubClass = 0;
-                               usb_device_packet.bDeviceProtocol = 0;
-                               usb_device_packet.bMaxPacketSize0 = 32;
-                               usb_device_packet.idVendor = swap_16(1);
-                               usb_device_packet.idProduct = swap_16(2);
-                               usb_device_packet.bcdDevice = swap_16(0x300);
-                               usb_device_packet.iManufacturer = 1;
-                               usb_device_packet.iProduct = 1;
-                               usb_device_packet.iSerialNumber = 1;
-                               usb_device_packet.bNumConfigurations = 1;
-
-                               /*put packet in fifo */
-                               packet_pt = (unsigned char *)&usb_device_packet;
-                               break;
-
-                       case USB_DT_CONFIG:
-                               /*create packet */
-                               usb_config_packet.bLength = 9;
-                               usb_config_packet.bDescriptorType =
-                                   USB_DT_CONFIG;
-                               usb_config_packet.wTotalLength = swap_16(25);
-                               usb_config_packet.bNumInterfaces = 1;
-                               usb_config_packet.bConfigurationValue = 1;
-                               usb_config_packet.iConfiguration = 0;
-                               usb_config_packet.bmAttributes = 0x40;
-                               usb_config_packet.bMaxPower = 0;
-
-                               /*put packet in fifo */
-                               packet_pt = (unsigned char *)&usb_config_packet;
-                               break;
-
-                       case USB_DT_STRING:
-                               /*create packet */
-                               usb_string_packet.bLength = 2;
-                               usb_string_packet.bDescriptorType =
-                                   USB_DT_STRING;
-                               usb_string_packet.wData[0] = 0x0094;
-
-                               /*put packet in fifo */
-                               packet_pt = (unsigned char *)&usb_string_packet;
-                               break;
-                       }
-
-                       /*put packet in fifo */
-                       for (i = 0; i < (setup_packet.length); i++) {
-                               *(unsigned char *)USB2D0_FIFO_0 = packet_pt[i];
-                       }
-
-                       /*give tx command */
-                       *(unsigned short *)USB2D0_INCSR0_8 = 0x0a;
-
-                       break;
-
-               case USB_REQ_SET_ADDRESS:
-
-                       /*copy usb address */
-                       set_value = setup_packet.value;
-
-                       break;
-               }
-
-       }
-}
-
-void process_other(unsigned char usb2d0_intrusb)
-{
-
-       /*check for sof */
-       if (usb2d0_intrusb & 0x08) {
-               /*printf("{USB device} - sof detected\n"); */
-       }
-
-       /*check for reset */
-       if (usb2d0_intrusb & 0x04) {
-               /*printf("{USB device} - reset detected\n"); */
-
-               /*copy usb address of zero, need to do this when usb reset */
-               set_value = 0;
-       }
-
-       if (usb2d0_intrusb & 0x02) {
-               /*printf("{USB device} - resume detected\n"); */
-       }
-
-       if (usb2d0_intrusb & 0x01) {
-               /*printf("{USB device} - suspend detected\n"); */
-       }
-}
-
-int usbInt(void)
-{
-       /*Must read these 2 registers and use values to clear interrupts.  If you
-          do not read them then the interrupt will not be cleared.  If you do not
-          use the variable the optimizer will not do a read. */
-       volatile unsigned short usb2d0_intrin =
-           *(unsigned short *)USB2D0_INTRIN_16;
-       volatile unsigned char usb2d0_intrusb =
-           *(unsigned char *)USB2D0_INTRUSB_8;
-
-       /*check if there was an endpoint interrupt */
-       if (usb2d0_intrin != 0) {
-               process_endpoints(usb2d0_intrin);
-       }
-
-       /*check for other interrupts */
-       if (usb2d0_intrusb != 0) {
-               process_other(usb2d0_intrusb);
-       }
-
-       return 0;
-}
-
-#if defined(CONFIG_440EPX)
-void usb_dev_init()
-{
-       printf("USB 2.0 Device init\n");
-
-       /*usb dev init */
-       *(unsigned char *)USB2D0_POWER_8 = 0xa1;        /* 2.0 */
-
-       /*enable interrupts */
-       *(unsigned char *)USB2D0_INTRUSBE_8 = 0x0f;
-
-       irq_install_handler(VECNUM_USBDEV, (interrupt_handler_t *) usbInt,
-                           NULL);
-}
-#else
-void usb_dev_init()
-{
-#ifdef USB_2_0_DEVICE
-       printf("USB 2.0 Device init\n");
-       /*select 2.0 device */
-       mtsdr(SDR0_USB0, 0x0);  /* 2.0 */
-
-       /*usb dev init */
-       *(unsigned char *)USB2D0_POWER_8 = 0xa1;        /* 2.0 */
-#else
-       printf("USB 1.1 Device init\n");
-       /*select 1.1 device */
-       mtsdr(SDR0_USB0, 0x2);  /* 1.1 */
-
-       /*usb dev init */
-       *(unsigned char *)USB2D0_POWER_8 = 0xc0;        /* 1.1 */
-#endif
-
-       /*enable interrupts */
-       *(unsigned char *)USB2D0_INTRUSBE_8 = 0x0f;
-
-       irq_install_handler(VECNUM_USBDEV, (interrupt_handler_t *) usbInt,
-                           NULL);
-}
-#endif
-
-#endif /* CONFIG_440EP || CONFIG_440EPX */
diff --git a/arch/powerpc/cpu/ppc4xx/usbdev.h b/arch/powerpc/cpu/ppc4xx/usbdev.h
deleted file mode 100644 (file)
index ef6a2da..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <config.h>
-
-/*Common Registers*/
-#define USB2D0_INTRIN_16   (CONFIG_SYS_USB_DEVICE | 0x100)
-#define USB2D0_POWER_8     (CONFIG_SYS_USB_DEVICE | 0x102)
-#define USB2D0_FADDR_8     (CONFIG_SYS_USB_DEVICE | 0x103)
-#define USB2D0_INTRINE_16  (CONFIG_SYS_USB_DEVICE | 0x104)
-#define USB2D0_INTROUT_16  (CONFIG_SYS_USB_DEVICE | 0x106)
-#define USB2D0_INTRUSBE_8  (CONFIG_SYS_USB_DEVICE | 0x108)
-#define USB2D0_INTRUSB_8   (CONFIG_SYS_USB_DEVICE | 0x109)
-#define USB2D0_INTROUTE_16 (CONFIG_SYS_USB_DEVICE | 0x10a)
-#define USB2D0_TSTMODE_8   (CONFIG_SYS_USB_DEVICE | 0x10c)
-#define USB2D0_INDEX_8     (CONFIG_SYS_USB_DEVICE | 0x10d)
-#define USB2D0_FRAME_16    (CONFIG_SYS_USB_DEVICE | 0x10e)
-
-/*Indexed Registers*/
-#define USB2D0_INCSR0_8    (CONFIG_SYS_USB_DEVICE | 0x110)
-#define USB2D0_INCSR_16    (CONFIG_SYS_USB_DEVICE | 0x110)
-#define USB2D0_INMAXP_16   (CONFIG_SYS_USB_DEVICE | 0x112)
-#define USB2D0_OUTCSR_16   (CONFIG_SYS_USB_DEVICE | 0x114)
-#define USB2D0_OUTMAXP_16  (CONFIG_SYS_USB_DEVICE | 0x116)
-#define USB2D0_OUTCOUNT0_8 (CONFIG_SYS_USB_DEVICE | 0x11a)
-#define USB2D0_OUTCOUNT_16 (CONFIG_SYS_USB_DEVICE | 0x11a)
-
-/*FIFOs*/
-#define USB2D0_FIFO_0 (CONFIG_SYS_USB_DEVICE | 0x120)
-#define USB2D0_FIFO_1 (CONFIG_SYS_USB_DEVICE | 0x124)
-#define USB2D0_FIFO_2 (CONFIG_SYS_USB_DEVICE | 0x128)
-#define USB2D0_FIFO_3 (CONFIG_SYS_USB_DEVICE | 0x12c)
-
-void usb_dev_init(void);
index c3d6ba9e9973907c6ebef7bc114a76f256b6a64f..8654625facc97619aec2707ecb8910f1c31e74f5 100644 (file)
@@ -64,6 +64,7 @@
 #define CONFIG_SYS_CCSRBAR_DEFAULT     0xff700000
 #define CONFIG_SYS_FSL_ERRATUM_NMG_DDR120
 #define CONFIG_SYS_FSL_ERRATUM_NMG_LBC103
+#define CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
 
 #elif defined(CONFIG_MPC8555)
 #define CONFIG_MAX_CPUS                        1
 #define CONFIG_SYS_FSL_NUM_LAWS                12
 #define CONFIG_TSECV2
 #define CONFIG_SYS_FSL_SEC_COMPAT      2
+#define CONFIG_FSL_SATA_V2
 #define CONFIG_SYS_CCSRBAR_DEFAULT     0xff700000
 #define CONFIG_SYS_FSL_ERRATUM_ELBC_A001
 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 #define CONFIG_SYS_FSL_NUM_LAWS                12
 #define CONFIG_TSECV2
 #define CONFIG_SYS_FSL_SEC_COMPAT      2
+#define CONFIG_FSL_SATA_V2
 #define CONFIG_SYS_CCSRBAR_DEFAULT     0xff700000
 #define CONFIG_SYS_FSL_ERRATUM_ELBC_A001
 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 #define CONFIG_SYS_FSL_USB2_PHY_ENABLE
 #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111
+#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
+#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 
 #elif defined(CONFIG_PPC_P2041)
 #define CONFIG_MAX_CPUS                        4
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     2
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_SEC_COMPAT      4
+#define CONFIG_FSL_SATA_V2
 #define CONFIG_SYS_NUM_FMAN            1
 #define CONFIG_SYS_NUM_FM1_DTSEC       5
 #define CONFIG_SYS_NUM_FM1_10GEC       1
 #define CONFIG_SYS_FSL_USB2_PHY_ENABLE
 #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111
+#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
+#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 
 #elif defined(CONFIG_PPC_P3041)
 #define CONFIG_MAX_CPUS                        4
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     2
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_SEC_COMPAT      4
+#define CONFIG_FSL_SATA_V2
 #define CONFIG_SYS_NUM_FMAN            1
 #define CONFIG_SYS_NUM_FM1_DTSEC       5
 #define CONFIG_SYS_NUM_FM1_10GEC       1
 #define CONFIG_SYS_FSL_USB2_PHY_ENABLE
 #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111
+#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
+#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 
 #elif defined(CONFIG_PPC_P3060)
 #define CONFIG_MAX_CPUS                        8
 #define CONFIG_SYS_FSL_PCIE_COMPAT     "fsl,qoriq-pcie-v2.2"
 #define CONFIG_SYS_CCSRBAR_DEFAULT     0xfe000000
 #define CONFIG_SYS_FSL_ERRATUM_DDR_A003
+#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
 
 #elif defined(CONFIG_PPC_P4040)
 #define CONFIG_MAX_CPUS                        4
 #define CONFIG_SYS_FSL_TBCLK_DIV       16
 #define CONFIG_SYS_FSL_PCIE_COMPAT     "fsl,p4080-pcie"
 #define CONFIG_SYS_CCSRBAR_DEFAULT     0xfe000000
+#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
+#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 
 #elif defined(CONFIG_PPC_P4080)
 #define CONFIG_MAX_CPUS                        8
 #define CONFIG_SYS_P4080_ERRATUM_SERDES9
 #define CONFIG_SYS_P4080_ERRATUM_SERDES_A001
 #define CONFIG_SYS_P4080_ERRATUM_SERDES_A005
+#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
+#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 
 /* P5010 is single core version of P5020 */
 #elif defined(CONFIG_PPC_P5010)
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     2
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_SEC_COMPAT      4
+#define CONFIG_FSL_SATA_V2
 #define CONFIG_SYS_NUM_FMAN            1
 #define CONFIG_SYS_NUM_FM1_DTSEC       5
 #define CONFIG_SYS_NUM_FM1_10GEC       1
 #define CONFIG_SYS_FSL_USB2_PHY_ENABLE
 #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111
+#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 
 #elif defined(CONFIG_PPC_P5020)
 #define CONFIG_MAX_CPUS                        2
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     2
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_SEC_COMPAT      4
+#define CONFIG_FSL_SATA_V2
 #define CONFIG_SYS_NUM_FMAN            1
 #define CONFIG_SYS_NUM_FM1_DTSEC       5
 #define CONFIG_SYS_NUM_FM1_10GEC       1
 #define CONFIG_SYS_FSL_USB2_PHY_ENABLE
 #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111
+#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
 
 #else
 #error Processor type not defined for this platform
index 99fe97d087fae277a7232b7c2019412c9a90119e..9b08cb8c1aba02f1299b218881cc3940f738df5d 100644 (file)
@@ -2420,6 +2420,7 @@ struct ccsr_rman {
 #define CONFIG_SYS_MPC85xx_L2_OFFSET           0x20000
 #define CONFIG_SYS_MPC85xx_DMA_OFFSET          0x21000
 #define CONFIG_SYS_MPC85xx_USB_OFFSET          0x22000
+#define CONFIG_SYS_MPC85xx_USB2_OFFSET         0x23000
 #ifdef CONFIG_TSECV2
 #define CONFIG_SYS_TSEC1_OFFSET                        0xB0000
 #else
index ef5076b24de0daa6b0b3c98cccd27d8c9f7a4c85..209103e3ce10ae216ae1615c8ceb1f546b1e7e23 100644 (file)
@@ -392,17 +392,17 @@ extern void print_bats(void);
  */
 
 #define MAS0_TLBSEL_MSK        0x30000000
-#define MAS0_TLBSEL(x) ((x << 28) & MAS0_TLBSEL_MSK)
+#define MAS0_TLBSEL(x) (((x) << 28) & MAS0_TLBSEL_MSK)
 #define MAS0_ESEL_MSK  0x0FFF0000
-#define MAS0_ESEL(x)   ((x << 16) & MAS0_ESEL_MSK)
+#define MAS0_ESEL(x)   (((x) << 16) & MAS0_ESEL_MSK)
 #define MAS0_NV(x)     ((x) & 0x00000FFF)
 
 #define MAS1_VALID     0x80000000
 #define MAS1_IPROT     0x40000000
-#define MAS1_TID(x)    ((x << 16) & 0x3FFF0000)
+#define MAS1_TID(x)    (((x) << 16) & 0x3FFF0000)
 #define MAS1_TS                0x00001000
-#define MAS1_TSIZE(x)  ((x << 8) & 0x00000F00)
-#define TSIZE_TO_BYTES(x) ((phys_addr_t)(1UL << ((tsize * 2) + 10)))
+#define MAS1_TSIZE(x)  (((x) << 8) & 0x00000F00)
+#define TSIZE_TO_BYTES(x) (1ULL << (((x) * 2) + 10))
 
 #define MAS2_EPN       0xFFFFF000
 #define MAS2_X0                0x00000040
index 1b96b84dcb57337f0a664253c05de0ad142b2e14..4e326398216de082867abf39442c9c9d967173c4 100644 (file)
 
 #define SPRN_TLB0CFG   0x2B0   /* TLB 0 Config Register */
 #define SPRN_TLB1CFG   0x2B1   /* TLB 1 Config Register */
+#define SPRN_TLB0PS    0x158   /* TLB 0 Page Size Register */
+#define SPRN_TLB1PS    0x159   /* TLB 1 Page Size Register */
 #define SPRN_MMUCSR0   0x3f4   /* MMU control and status register 0 */
+#define SPRN_MMUCFG    0x3F7   /* MMU Configuration Register */
+#define MMUCFG_MAVN    0x00000003      /* MMU Architecture Version Number */
+#define MMUCFG_MAVN_V1 0x00000000      /* v1.0 */
+#define MMUCFG_MAVN_V2 0x00000001      /* v2.0 */
 #define SPRN_MAS0      0x270   /* MMU Assist Register 0 */
 #define SPRN_MAS1      0x271   /* MMU Assist Register 1 */
 #define SPRN_MAS2      0x272   /* MMU Assist Register 2 */
index f46b38fa0f0535e1fbb6e272d1f75987587ae1bd..bdd3315ee182d2275afed45c4203e249aaaa1349 100644 (file)
 ENDIANNESS += -EB
 
 ifdef CONFIG_SH2A
-PLATFORM_CPPFLAGS += -m2a -m2a-nofpu -mb -mno-fdpic -ffreestanding
+PLATFORM_CPPFLAGS += -m2a -m2a-nofpu -mb -ffreestanding
 else # SH2
 PLATFORM_CPPFLAGS += -m3e -mb
 endif
+PLATFORM_CPPFLAGS += $(call cc-option,-mno-fdpic)
 
 PLATFORM_RELFLAGS += -ffixed-r13
 PLATFORM_LDFLAGS += $(ENDIANNESS)
index 377005cd4d32aa4bea01016d7480bcc369acae60..dc75e3981cf55fdf7d2e4fee732f51b3d3fc9caa 100644 (file)
@@ -106,3 +106,25 @@ int cache_control(unsigned int cmd)
 
        return 0;
 }
+
+void dcache_wback_range(u32 start, u32 end)
+{
+       u32 v;
+
+       start &= ~(L1_CACHE_BYTES - 1);
+       for (v = start; v < end; v += L1_CACHE_BYTES) {
+               asm volatile ("ocbwb     %0" :  /* no output */
+                             : "m" (__m(v)));
+       }
+}
+
+void dcache_invalid_range(u32 start, u32 end)
+{
+       u32 v;
+
+       start &= ~(L1_CACHE_BYTES - 1);
+       for (v = start; v < end; v += L1_CACHE_BYTES) {
+               asm volatile ("ocbi     %0" :   /* no output */
+                             : "m" (__m(v)));
+       }
+}
index 6ffab4d37448d56fd6789216bb7addbe3ac18e4c..24941b3019a222d3b7c9f974ef5e5964cf6505a9 100644 (file)
@@ -10,27 +10,9 @@ int cache_control(unsigned int cmd);
 struct __large_struct { unsigned long buf[100]; };
 #define __m(x) (*(struct __large_struct *)(x))
 
-void dcache_wback_range(u32 start, u32 end)
-{
-       u32 v;
-
-       start &= ~(L1_CACHE_BYTES - 1);
-       for (v = start; v < end; v += L1_CACHE_BYTES) {
-               asm volatile ("ocbwb     %0" :  /* no output */
-                             : "m" (__m(v)));
-       }
-}
-
-void dcache_invalid_range(u32 start, u32 end)
-{
-       u32 v;
-
-       start &= ~(L1_CACHE_BYTES - 1);
-       for (v = start; v < end; v += L1_CACHE_BYTES) {
-               asm volatile ("ocbi     %0" :   /* no output */
-                             : "m" (__m(v)));
-       }
-}
+void dcache_wback_range(u32 start, u32 end);
+void dcache_invalid_range(u32 start, u32 end);
+
 #else
 
 /*
index 9b29d3ae7c8fc6fa5e9a136e9c2df147574ea733..4351e8edff0bd5a777f9b470b48e739f19b2de32 100644 (file)
@@ -44,6 +44,8 @@
 # include <asm/cpu_sh7722.h>
 #elif defined (CONFIG_CPU_SH7723)
 # include <asm/cpu_sh7723.h>
+#elif defined (CONFIG_CPU_SH7724)
+# include <asm/cpu_sh7724.h>
 #elif defined (CONFIG_CPU_SH7757)
 # include <asm/cpu_sh7757.h>
 #elif defined (CONFIG_CPU_SH7763)
diff --git a/arch/sh/include/asm/cpu_sh7724.h b/arch/sh/include/asm/cpu_sh7724.h
new file mode 100644 (file)
index 0000000..3bb51d3
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ * (C) Copyright 2008, 2011 Renesas Solutions Corp.
+ *
+ * SH7724 Internal I/O register
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _ASM_CPU_SH7724_H_
+#define _ASM_CPU_SH7724_H_
+
+#define CACHE_OC_NUM_WAYS      4
+#define CCR_CACHE_INIT 0x0000090d
+
+/* EXP */
+#define TRA            0xFF000020
+#define EXPEVT 0xFF000024
+#define INTEVT 0xFF000028
+
+/* MMU */
+#define PTEH   0xFF000000
+#define PTEL   0xFF000004
+#define TTB            0xFF000008
+#define TEA            0xFF00000C
+#define MMUCR  0xFF000010
+#define PASCR  0xFF000070
+#define IRMCR  0xFF000078
+
+/* CACHE */
+#define CCR            0xFF00001C
+#define RAMCR  0xFF000074
+
+/* INTC */
+
+/* BSC */
+#define MMSELR         0xFF800020
+#define CMNCR          0xFEC10000
+#define        CS0BCR          0xFEC10004
+#define CS2BCR         0xFEC10008
+#define CS4BCR         0xFEC10010
+#define CS5ABCR                0xFEC10014
+#define CS5BBCR                0xFEC10018
+#define CS6ABCR                0xFEC1001C
+#define CS6BBCR                0xFEC10020
+#define CS0WCR         0xFEC10024
+#define CS2WCR         0xFEC10028
+#define CS4WCR         0xFEC10030
+#define CS5AWCR                0xFEC10034
+#define CS5BWCR                0xFEC10038
+#define CS6AWCR                0xFEC1003C
+#define CS6BWCR                0xFEC10040
+#define RBWTCNT                0xFEC10054
+
+/* SBSC */
+#define SBSC_SDCR      0xFE400008
+#define SBSC_SDWCR     0xFE40000C
+#define SBSC_SDPCR     0xFE400010
+#define SBSC_RTCSR     0xFE400014
+#define SBSC_RTCNT     0xFE400018
+#define SBSC_RTCOR     0xFE40001C
+#define SBSC_RFCR      0xFE400020
+
+/* DSBC */
+#define DBKIND         0xFD000008
+#define DBSTATE                0xFD00000C
+#define DBEN           0xFD000010
+#define DBCMDCNT       0xFD000014
+#define DBCKECNT       0xFD000018
+#define DBCONF         0xFD000020
+#define DBTR0          0xFD000030
+#define DBTR1          0xFD000034
+#define DBTR2          0xFD000038
+#define DBTR3          0xFD00003C
+#define DBRFPDN0       0xFD000040
+#define DBRFPDN1       0xFD000044
+#define DBRFPDN2       0xFD000048
+#define DBRFSTS                0xFD00004C
+#define DBMRCNT                0xFD000060
+#define DBPDCNT0       0xFD000108
+
+/* DMAC */
+
+/* CPG */
+#define FRQCRA         0xA4150000
+#define FRQCRB         0xA4150004
+#define FRQCR          FRQCRA
+#define VCLKCR      0xA4150004
+#define SCLKACR     0xA4150008
+#define SCLKBCR     0xA415000C
+#define IRDACLKCR   0xA4150018
+#define PLLCR       0xA4150024
+#define DLLFRQ      0xA4150050
+
+/* LOW POWER MODE */
+#define STBCR       0xA4150020
+#define MSTPCR0     0xA4150030
+#define MSTPCR1     0xA4150034
+#define MSTPCR2     0xA4150038
+
+/* RWDT */
+#define RWTCNT      0xA4520000
+#define RWTCSR      0xA4520004
+#define WTCNT          RWTCNT
+
+/* TMU */
+#define TSTR        0xFFD80004
+#define TCOR0       0xFFD80008
+#define TCNT0       0xFFD8000C
+#define TCR0        0xFFD80010
+#define TCOR1       0xFFD80014
+#define TCNT1       0xFFD80018
+#define TCR1        0xFFD8001C
+#define TCOR2       0xFFD80020
+#define TCNT2       0xFFD80024
+#define TCR2        0xFFD80028
+
+/* TPU */
+
+/* CMT */
+#define CMSTR       0xA44A0000
+#define CMCSR       0xA44A0060
+#define CMCNT       0xA44A0064
+#define CMCOR       0xA44A0068
+
+/* MSIOF */
+
+/* SCIF */
+#define SCIF0_BASE  0xFFE00000
+#define SCIF1_BASE  0xFFE10000
+#define SCIF2_BASE  0xFFE20000
+#define SCIF3_BASE  0xa4e30000
+#define SCIF4_BASE  0xa4e40000
+#define SCIF5_BASE  0xa4e50000
+
+/* RTC */
+/* IrDA */
+/* KEYSC */
+/* USB */
+/* IIC */
+/* FLCTL */
+/* VPU */
+/* VIO(CEU) */
+/* VIO(VEU) */
+/* VIO(BEU) */
+/* 2DG */
+/* LCDC */
+/* VOU */
+/* TSIF */
+/* SIU */
+/* ATAPI */
+
+/* PFC */
+#define PACR        0xA4050100
+#define PBCR        0xA4050102
+#define PCCR        0xA4050104
+#define PDCR        0xA4050106
+#define PECR        0xA4050108
+#define PFCR        0xA405010A
+#define PGCR        0xA405010C
+#define PHCR        0xA405010E
+#define PJCR        0xA4050110
+#define PKCR        0xA4050112
+#define PLCR        0xA4050114
+#define PMCR        0xA4050116
+#define PNCR        0xA4050118
+#define PQCR        0xA405011A
+#define PRCR        0xA405011C
+#define PSCR        0xA405011E
+#define PTCR        0xA4050140
+#define PUCR        0xA4050142
+#define PVCR        0xA4050144
+#define PWCR        0xA4050146
+#define PXCR        0xA4050148
+#define PYCR        0xA405014A
+#define PZCR        0xA405014C
+#define PSELA       0xA405014E
+#define PSELB       0xA4050150
+#define PSELC       0xA4050152
+#define PSELD       0xA4050154
+#define PSELE       0xA4050156
+#define HIZCRA      0xA4050158
+#define HIZCRB      0xA405015A
+#define HIZCRC      0xA405015C
+#define HIZCRD      0xA405015E
+#define MSELCRA     0xA4050180
+#define MSELCRB     0xA4050182
+#define PULCR       0xA4050184
+#define DRVCRA      0xA405018A
+#define DRVCRB      0xA405018C
+
+/* I/O Port */
+#define PADR        0xA4050120
+#define PBDR        0xA4050122
+#define PCDR        0xA4050124
+#define PDDR        0xA4050126
+#define PEDR        0xA4050128
+#define PFDR        0xA405012A
+#define PGDR        0xA405012C
+#define PHDR        0xA405012E
+#define PJDR        0xA4050130
+#define PKDR        0xA4050132
+#define PLDR        0xA4050134
+#define PMDR        0xA4050136
+#define PNDR        0xA4050138
+#define PQDR        0xA405013A
+#define PRDR        0xA405013C
+#define PSDR        0xA405013E
+#define PTDR        0xA4050160
+#define PUDR        0xA4050162
+#define PVDR        0xA4050164
+#define PWDR        0xA4050166
+#define PYDR        0xA4050168
+#define PZDR        0xA405016A
+
+/* Ether */
+#define EDMR           0xA4600000
+
+/* UBC */
+/* H-UDI */
+
+#endif /* _ASM_CPU_SH7724_H_ */
index 6aaf55ae821b27a5d72d9ad39cfed636249ad1fb..256811afd4b7fa2ff329b7866068cd84202ce5a8 100644 (file)
@@ -28,6 +28,7 @@ GLSOBJS       += ashiftrt.o
 GLSOBJS        += ashiftlt.o
 GLSOBJS        += lshiftrt.o
 GLSOBJS        += ashldi3.o
+GLSOBJS        += ashrsi3.o
 GLSOBJS        += lshrdi3.o
 GLSOBJS        += movmem.o
 
diff --git a/arch/sh/lib/ashrsi3.S b/arch/sh/lib/ashrsi3.S
new file mode 100644 (file)
index 0000000..6f3cf46
--- /dev/null
@@ -0,0 +1,185 @@
+/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+   2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file.  (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combine
+executable.)
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+!! libgcc routines for the Renesas / SuperH SH CPUs.
+!! Contributed by Steve Chamberlain.
+!! sac@cygnus.com
+
+!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
+!! recoded in assembly by Toshiyasu Morita
+!! tm@netcom.com
+
+/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
+   ELF local label prefixes by J"orn Rennecke
+   amylaar@cygnus.com  */
+
+!
+! __ashrsi3
+!
+! Entry:
+!
+! r4: Value to shift
+! r5: Shifts
+!
+! Exit:
+!
+! r0: Result
+!
+! Destroys:
+!
+! (none)
+!
+
+       .global __ashrsi3
+       
+       .align  2
+__ashrsi3:
+       mov     #31,r0
+       and     r0,r5
+       mova    ashrsi3_table,r0
+       mov.b   @(r0,r5),r5
+#ifdef __sh1__
+       add     r5,r0
+       jmp     @r0
+#else
+       braf    r5
+#endif
+       mov     r4,r0
+
+       .align  2
+ashrsi3_table:
+       .byte           ashrsi3_0-ashrsi3_table
+       .byte           ashrsi3_1-ashrsi3_table
+       .byte           ashrsi3_2-ashrsi3_table
+       .byte           ashrsi3_3-ashrsi3_table
+       .byte           ashrsi3_4-ashrsi3_table
+       .byte           ashrsi3_5-ashrsi3_table
+       .byte           ashrsi3_6-ashrsi3_table
+       .byte           ashrsi3_7-ashrsi3_table
+       .byte           ashrsi3_8-ashrsi3_table
+       .byte           ashrsi3_9-ashrsi3_table
+       .byte           ashrsi3_10-ashrsi3_table
+       .byte           ashrsi3_11-ashrsi3_table
+       .byte           ashrsi3_12-ashrsi3_table
+       .byte           ashrsi3_13-ashrsi3_table
+       .byte           ashrsi3_14-ashrsi3_table
+       .byte           ashrsi3_15-ashrsi3_table
+       .byte           ashrsi3_16-ashrsi3_table
+       .byte           ashrsi3_17-ashrsi3_table
+       .byte           ashrsi3_18-ashrsi3_table
+       .byte           ashrsi3_19-ashrsi3_table
+       .byte           ashrsi3_20-ashrsi3_table
+       .byte           ashrsi3_21-ashrsi3_table
+       .byte           ashrsi3_22-ashrsi3_table
+       .byte           ashrsi3_23-ashrsi3_table
+       .byte           ashrsi3_24-ashrsi3_table
+       .byte           ashrsi3_25-ashrsi3_table
+       .byte           ashrsi3_26-ashrsi3_table
+       .byte           ashrsi3_27-ashrsi3_table
+       .byte           ashrsi3_28-ashrsi3_table
+       .byte           ashrsi3_29-ashrsi3_table
+       .byte           ashrsi3_30-ashrsi3_table
+       .byte           ashrsi3_31-ashrsi3_table
+
+ashrsi3_31:
+       rotcl   r0
+       rts
+       subc    r0,r0
+
+ashrsi3_30:
+       shar    r0
+ashrsi3_29:
+       shar    r0
+ashrsi3_28:
+       shar    r0
+ashrsi3_27:
+       shar    r0
+ashrsi3_26:
+       shar    r0
+ashrsi3_25:
+       shar    r0
+ashrsi3_24:
+       shlr16  r0
+       shlr8   r0
+       rts
+       exts.b  r0,r0
+
+ashrsi3_23:
+       shar    r0
+ashrsi3_22:
+       shar    r0
+ashrsi3_21:
+       shar    r0
+ashrsi3_20:
+       shar    r0
+ashrsi3_19:
+       shar    r0
+ashrsi3_18:
+       shar    r0
+ashrsi3_17:
+       shar    r0
+ashrsi3_16:
+       shlr16  r0
+       rts
+       exts.w  r0,r0
+
+ashrsi3_15:
+       shar    r0
+ashrsi3_14:
+       shar    r0
+ashrsi3_13:
+       shar    r0
+ashrsi3_12:
+       shar    r0
+ashrsi3_11:
+       shar    r0
+ashrsi3_10:
+       shar    r0
+ashrsi3_9:
+       shar    r0
+ashrsi3_8:
+       shar    r0
+ashrsi3_7:
+       shar    r0
+ashrsi3_6:
+       shar    r0
+ashrsi3_5:
+       shar    r0
+ashrsi3_4:
+       shar    r0
+ashrsi3_3:
+       shar    r0
+ashrsi3_2:
+       shar    r0
+ashrsi3_1:
+       rts
+       shar    r0
+
+ashrsi3_0:
+       rts
+       nop
index 69b5ca450814a9038fb5ea1876edc5e85fc1d4d9..519a4fbae7b0aaad3b85b4197384bdec603de6d4 100644 (file)
@@ -165,13 +165,10 @@ char *str_init_seq_done = "\n\rInit sequence done...\r\n\r\n";
 
 void board_init_f(ulong bootflag)
 {
-       cmd_tbl_t *cmdtp;
        bd_t *bd;
        unsigned char *s;
        init_fnc_t **init_fnc_ptr;
        int j;
-       int i;
-       char *e;
 
 #ifndef CONFIG_SYS_NO_FLASH
        ulong flash_size;
index 4c226a3a7527d2b962b08008b3eef12a697f6191..e5b933d1d6b0b8fa08b0b879bdd0e0eb6bdf8684 100644 (file)
@@ -97,8 +97,6 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t * im
        char *bootargs;
        ulong initrd_start, initrd_end;
        ulong rd_len;
-       unsigned int data, len, checksum;
-       unsigned int initrd_addr, kernend;
        void (*kernel) (struct linux_romvec *, void *);
        struct lmb *lmb = &images->lmb;
        int ret;
index fe9083f6268a8646efd90c0a1e25972589158f61..23cacffdedeae65bca6464df98569fc2c5cb4907 100644 (file)
@@ -41,3 +41,10 @@ PLATFORM_RELFLAGS += -ffunction-sections -fvisibility=hidden
 PLATFORM_LDFLAGS += --emit-relocs -Bsymbolic -Bsymbolic-functions
 
 LDFLAGS_FINAL += --gc-sections -pie
+LDFLAGS_FINAL += --wrap=__divdi3 --wrap=__udivdi3
+LDFLAGS_FINAL += --wrap=__moddi3 --wrap=__umoddi3
+
+NORMAL_LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
+PREFIXED_LIBGCC = $(OBJTREE)/arch/$(ARCH)/lib/$(shell basename $(NORMAL_LIBGCC))
+
+export USE_PRIVATE_LIBGCC=$(shell dirname $(PREFIXED_LIBGCC))
index cac12c088c519fb5121dca9a15a7292ec99b661f..61d0b69416e1540b2914c5fe24782041481493a6 100644 (file)
@@ -37,6 +37,7 @@
 #include <asm/processor.h>
 #include <asm/processor-flags.h>
 #include <asm/interrupt.h>
+#include <linux/compiler.h>
 
 /*
  * Constructor for a conventional segment GDT (or LDT) entry
@@ -52,7 +53,7 @@
 struct gdt_ptr {
        u16 len;
        u32 ptr;
-} __attribute__((packed));
+} __packed;
 
 static void reload_gdt(void)
 {
@@ -115,14 +116,14 @@ int x86_cpu_init_r(void)
        reload_gdt();
 
        /* Initialize core interrupt and exception functionality of CPU */
-       cpu_init_interrupts ();
+       cpu_init_interrupts();
        return 0;
 }
 int cpu_init_r(void) __attribute__((weak, alias("x86_cpu_init_r")));
 
 int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       printf ("resetting ...\n");
+       printf("resetting ...\n");
 
        /* wait 50 ms */
        udelay(50000);
@@ -133,7 +134,7 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return 0;
 }
 
-void  flush_cache (unsigned long dummy1, unsigned long dummy2)
+void  flush_cache(unsigned long dummy1, unsigned long dummy2)
 {
        asm("wbinvd\n");
 }
@@ -142,16 +143,16 @@ void __attribute__ ((regparm(0))) generate_gpf(void);
 
 /* segment 0x70 is an arbitrary segment which does not exist */
 asm(".globl generate_gpf\n"
-    ".hidden generate_gpf\n"
-    ".type generate_gpf, @function\n"
-    "generate_gpf:\n"
-    "ljmp   $0x70, $0x47114711\n");
+       ".hidden generate_gpf\n"
+       ".type generate_gpf, @function\n"
+       "generate_gpf:\n"
+       "ljmp   $0x70, $0x47114711\n");
 
 void __reset_cpu(ulong addr)
 {
        printf("Resetting using x86 Triple Fault\n");
-       set_vector(13, generate_gpf);  /* general protection fault handler */
-       set_vector(8, generate_gpf);   /* double fault handler */
-       generate_gpf();                /* start the show */
+       set_vector(13, generate_gpf);   /* general protection fault handler */
+       set_vector(8, generate_gpf);    /* double fault handler */
+       generate_gpf();                 /* start the show */
 }
 void reset_cpu(ulong addr) __attribute__((weak, alias("__reset_cpu")));
index c6e72eaa630959e3527514bfe9411ba809fe8961..e0958eb67f431245613c40eec262f2f27904cfd4 100644 (file)
@@ -31,6 +31,7 @@
 #include <asm/interrupt.h>
 #include <asm/io.h>
 #include <asm/processor-flags.h>
+#include <linux/compiler.h>
 
 #define DECLARE_INTERRUPT(x) \
        ".globl irq_"#x"\n" \
@@ -83,22 +84,22 @@ static inline unsigned long get_debugreg(int regno)
 
        switch (regno) {
        case 0:
-               asm("mov %%db0, %0" :"=r" (val));
+               asm("mov %%db0, %0" : "=r" (val));
                break;
        case 1:
-               asm("mov %%db1, %0" :"=r" (val));
+               asm("mov %%db1, %0" : "=r" (val));
                break;
        case 2:
-               asm("mov %%db2, %0" :"=r" (val));
+               asm("mov %%db2, %0" : "=r" (val));
                break;
        case 3:
-               asm("mov %%db3, %0" :"=r" (val));
+               asm("mov %%db3, %0" : "=r" (val));
                break;
        case 6:
-               asm("mov %%db6, %0" :"=r" (val));
+               asm("mov %%db6, %0" : "=r" (val));
                break;
        case 7:
-               asm("mov %%db7, %0" :"=r" (val));
+               asm("mov %%db7, %0" : "=r" (val));
                break;
        default:
                val = 0;
@@ -120,7 +121,8 @@ void dump_regs(struct irq_regs *regs)
        printf("ESI: %08lx EDI: %08lx EBP: %08lx ESP: %08lx\n",
                regs->esi, regs->edi, regs->ebp, regs->esp);
        printf(" DS: %04x ES: %04x FS: %04x GS: %04x SS: %04x\n",
-              (u16)regs->xds, (u16)regs->xes, (u16)regs->xfs, (u16)regs->xgs, (u16)regs->xss);
+              (u16)regs->xds, (u16)regs->xes, (u16)regs->xfs,
+              (u16)regs->xgs, (u16)regs->xss);
 
        cr0 = read_cr0();
        cr2 = read_cr2();
@@ -164,21 +166,21 @@ struct idt_entry {
        u8      res;
        u8      access;
        u16     base_high;
-} __attribute__ ((packed));
+} __packed;
 
 struct desc_ptr {
        unsigned short size;
        unsigned long address;
        unsigned short segment;
-} __attribute__((packed));
+} __packed;
 
-struct idt_entry idt[256];
+struct idt_entry idt[256] __attribute__((aligned(16)));
 
 struct desc_ptr idt_ptr;
 
 static inline void load_idt(const struct desc_ptr *dtr)
 {
-       asm volatile("cs lidt %0"::"m" (*dtr));
+       asm volatile("cs lidt %0" : : "m" (*dtr));
 }
 
 void set_vector(u8 intnum, void *routine)
@@ -187,6 +189,11 @@ void set_vector(u8 intnum, void *routine)
        idt[intnum].base_low = (u16)((u32)(routine) & 0xffff);
 }
 
+/*
+ * Ideally these would be defined static to avoid a checkpatch warning, but
+ * the compiler cannot see them in the inline asm and complains that they
+ * aren't defined
+ */
 void irq_0(void);
 void irq_1(void);
 
@@ -201,7 +208,7 @@ int cpu_init_interrupts(void)
        disable_interrupts();
 
        /* Setup the IDT */
-       for (i=0;i<256;i++) {
+       for (i = 0; i < 256; i++) {
                idt[i].access = 0x8e;
                idt[i].res = 0;
                idt[i].selector = 0x10;
@@ -238,7 +245,7 @@ int disable_interrupts(void)
 
        asm volatile ("pushfl ; popl %0 ; cli\n" : "=g" (flags) : );
 
-       return flags & X86_EFLAGS_IF; /* IE flags is bit 9 */
+       return flags & X86_EFLAGS_IF;
 }
 
 /* IRQ Low-Level Service Routine */
@@ -255,7 +262,7 @@ void irq_llsr(struct irq_regs *regs)
        case 0x00:
                printf("Divide Error (Division by zero)\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x01:
                printf("Debug Interrupt (Single step)\n");
@@ -272,32 +279,32 @@ void irq_llsr(struct irq_regs *regs)
        case 0x04:
                printf("Overflow\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x05:
                printf("BOUND Range Exceeded\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x06:
                printf("Invalid Opcode (UnDefined Opcode)\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x07:
                printf("Device Not Available (No Math Coprocessor)\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x08:
                printf("Double fault\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x09:
                printf("Co-processor segment overrun\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x0a:
                printf("Invalid TSS\n");
@@ -306,12 +313,12 @@ void irq_llsr(struct irq_regs *regs)
        case 0x0b:
                printf("Segment Not Present\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x0c:
                printf("Stack Segment Fault\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x0d:
                printf("General Protection\n");
@@ -320,7 +327,7 @@ void irq_llsr(struct irq_regs *regs)
        case 0x0e:
                printf("Page fault\n");
                dump_regs(regs);
-               while(1);
+               hang();
                break;
        case 0x0f:
                printf("Floating-Point Error (Math Fault)\n");
diff --git a/arch/x86/cpu/sc520/asm-offsets.c b/arch/x86/cpu/sc520/asm-offsets.c
new file mode 100644 (file)
index 0000000..794f00c
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Adapted from Linux v2.6.36 kernel: arch/powerpc/kernel/asm-offsets.c
+ *
+ * This program is used to generate definitions needed by
+ * assembly language modules.
+ *
+ * We use the technique used in the OSF Mach kernel code:
+ * generate asm statements containing #defines,
+ * compile this file to assembler, and then extract the
+ * #defines from the assembly-language output.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <common.h>
+#include <asm/arch/sc520.h>
+
+#include <linux/kbuild.h>
+
+int main(void)
+{
+       DEFINE(GENERATED_GD_RELOC_OFF, offsetof(gd_t, reloc_off));
+
+       DEFINE(GENERATED_SC520_PAR0, offsetof(struct sc520_mmcr, par[0]));
+       DEFINE(GENERATED_SC520_PAR1, offsetof(struct sc520_mmcr, par[1]));
+       DEFINE(GENERATED_SC520_PAR2, offsetof(struct sc520_mmcr, par[2]));
+       DEFINE(GENERATED_SC520_PAR3, offsetof(struct sc520_mmcr, par[3]));
+       DEFINE(GENERATED_SC520_PAR4, offsetof(struct sc520_mmcr, par[4]));
+       DEFINE(GENERATED_SC520_PAR5, offsetof(struct sc520_mmcr, par[5]));
+       DEFINE(GENERATED_SC520_PAR6, offsetof(struct sc520_mmcr, par[6]));
+       DEFINE(GENERATED_SC520_PAR7, offsetof(struct sc520_mmcr, par[7]));
+       DEFINE(GENERATED_SC520_PAR8, offsetof(struct sc520_mmcr, par[8]));
+       DEFINE(GENERATED_SC520_PAR9, offsetof(struct sc520_mmcr, par[9]));
+       DEFINE(GENERATED_SC520_PAR10, offsetof(struct sc520_mmcr, par[10]));
+       DEFINE(GENERATED_SC520_PAR11, offsetof(struct sc520_mmcr, par[11]));
+       DEFINE(GENERATED_SC520_PAR12, offsetof(struct sc520_mmcr, par[12]));
+       DEFINE(GENERATED_SC520_PAR13, offsetof(struct sc520_mmcr, par[13]));
+       DEFINE(GENERATED_SC520_PAR14, offsetof(struct sc520_mmcr, par[14]));
+       DEFINE(GENERATED_SC520_PAR15, offsetof(struct sc520_mmcr, par[15]));
+
+       return 0;
+}
index 4892c0153f93c8b965cfe96bb0012596220f6681..3fe85e764875d78e3f0dceafa1078010f75712b4 100644 (file)
@@ -49,7 +49,7 @@ int cpu_init_f(void)
        asm("movl       $0x2000, %%ecx\n"
            "0:         pushl %%ecx\n"
            "popl       %%ecx\n"
-           "loop 0b\n": : : "ecx");
+           "loop 0b\n" : : : "ecx");
 
        return x86_cpu_init_f();
 }
index 7cac4d1def913dac0568da6c7fe9494b0728777a..c04cc1f11678074402acd498a856508980c5bfaf 100644 (file)
@@ -24,6 +24,7 @@
 #include <config.h>
 #include <asm/processor-flags.h>
 #include <asm/arch/sc520.h>
+#include <generated/asm-offsets.h>
 
 .section .text
 
@@ -55,7 +56,7 @@ car_init:
 
        /* Configure Cache-As-RAM PAR */
        movl    $CONFIG_SYS_SC520_CAR_PAR, %eax
-       movl    $SC520_PAR2, %edi
+       movl    $(SC520_MMCR_BASE + GENERATED_SC520_PAR2), %edi
        movl    %eax, (%edi)
 
        /* Trash the cache then turn it on */
index e26793ab1bd4ab8249c4190143c47d5a7eab4b0a..52d07c119a81995e9169d33a02bb911ecd48383b 100644 (file)
@@ -70,26 +70,28 @@ int pci_sc520_set_irq(int pci_pin, int irq)
 
        debug("set_irq(): map INT%c to IRQ%d\n", pci_pin + 'A', irq);
 
-       if (irq < 0 || irq > 15) {
+       if (irq < 0 || irq > 15)
                return -1; /* illegal irq */
-       }
 
-       if (pci_pin < 0 || pci_pin > 15) {
+       if (pci_pin < 0 || pci_pin > 15)
                return -1; /* illegal pci int pin */
-       }
 
        /* first disable any non-pci interrupt source that use
         * this level */
 
        /* PCI interrupt mapping (A through D)*/
-       for (i=0; i<=3 ;i++) {
-               if (readb(&sc520_mmcr->pci_int_map[i]) == sc520_irq[irq].priority)
+       for (i = 0; i <= 3 ; i++) {
+               tmpb = readb(&sc520_mmcr->pci_int_map[i]);
+
+               if (tmpb == sc520_irq[irq].priority)
                        writeb(SC520_IRQ_DISABLED, &sc520_mmcr->pci_int_map[i]);
        }
 
        /* GP IRQ interrupt mapping */
-       for (i=0; i<=10 ;i++) {
-               if (readb(&sc520_mmcr->gp_int_map[i]) == sc520_irq[irq].priority)
+       for (i = 0; i <= 10 ; i++) {
+               tmpb = readb(&sc520_mmcr->gp_int_map[i]);
+
+               if (tmpb == sc520_irq[irq].priority)
                        writeb(SC520_IRQ_DISABLED, &sc520_mmcr->gp_int_map[i]);
        }
 
@@ -102,10 +104,12 @@ int pci_sc520_set_irq(int pci_pin, int irq)
        if (pci_pin < 4) {
                /* PCI INTA-INTD */
                /* route the interrupt */
-               writeb(sc520_irq[irq].priority, &sc520_mmcr->pci_int_map[pci_pin]);
+               writeb(sc520_irq[irq].priority,
+                               &sc520_mmcr->pci_int_map[pci_pin]);
        } else {
                /* GPIRQ0-GPIRQ10 used for additional PCI INTS */
-               writeb(sc520_irq[irq].priority, &sc520_mmcr->gp_int_map[pci_pin - 4]);
+               writeb(sc520_irq[irq].priority,
+                               &sc520_mmcr->gp_int_map[pci_pin - 4]);
 
                /* also set the polarity in this case */
                tmpw = readw(&sc520_mmcr->intpinpol);
@@ -126,9 +130,7 @@ void pci_sc520_init(struct pci_controller *hose)
        hose->last_busno = 0xff;
        hose->region_count = pci_set_regions(hose);
 
-       pci_setup_type1(hose,
-                       SC520_REG_ADDR,
-                       SC520_REG_DATA);
+       pci_setup_type1(hose);
 
        pci_register_hose(hose);
 
index 57e4e7ddc3455149b0920e181c416e21095b87b6..9dc13342e37b414af5a1409c55306dc6bfe75231 100644 (file)
@@ -40,9 +40,6 @@ static void sc520_set_dram_timing(void);
 static void sc520_set_dram_refresh_rate(void);
 static void sc520_enable_dram_refresh(void);
 static void sc520_enable_sdram(void);
-#if CONFIG_SYS_SDRAM_ECC_ENABLE
-static void sc520_enable_ecc(void)
-#endif
 
 int dram_init_f(void)
 {
@@ -51,9 +48,6 @@ int dram_init_f(void)
        sc520_set_dram_refresh_rate();
        sc520_enable_dram_refresh();
        sc520_enable_sdram();
-#if CONFIG_SYS_SDRAM_ECC_ENABLE
-       sc520_enable_ecc();
-#endif
 
        return 0;
 }
@@ -426,53 +420,6 @@ static void sc520_sizemem(void)
        writel(0x00000000, &sc520_mmcr->par[4]);
 }
 
-#if CONFIG_SYS_SDRAM_ECC_ENABLE
-static void sc520_enable_ecc(void)
-
-       /* A nominal memory test: just a byte at each address line */
-       movl    %eax, %ecx
-       shrl    $0x1, %ecx
-       movl    $0x1, %edi
-memtest0:
-       movb    $0xa5, (%edi)
-       cmpb    $0xa5, (%edi)
-       jne     out
-       shrl    $0x1, %ecx
-       andl    %ecx, %ecx
-       jz      set_ecc
-       shll    $0x1, %edi
-       jmp     memtest0
-
-set_ecc:
-       /* clear all ram with a memset */
-       movl    %eax, %ecx
-       xorl    %esi, %esi
-       xorl    %edi, %edi
-       xorl    %eax, %eax
-       shrl    $0x2, %ecx
-       cld
-       rep     stosl
-
-       /* enable read, write buffers */
-       movb    $0x11, %al
-       movl    $DBCTL, %edi
-       movb    %al, (%edi)
-
-       /* enable NMI mapping for ECC */
-       movl    $ECCINT, %edi
-       movb    $0x10, %al
-       movb    %al, (%edi)
-
-       /* Turn on ECC */
-       movl    $ECCCTL, %edi
-       movb    $0x05, %al
-       movb    %al,(%edi)
-
-out:
-       jmp     init_ecc_ret
-}
-#endif
-
 int dram_init(void)
 {
        ulong dram_ctrl;
index 3a6a85809126eef1f6c7cd7d4b418ce21f8ec63f..cc601e56e48328e8998c3e47b4beb229f7779a39 100644 (file)
 
 int ssi_set_interface(int freq, int lsb_first, int inv_clock, int inv_phase)
 {
-       u8 temp=0;
+       u8 temp = 0;
 
-       if (freq >= 8192) {
+       if (freq >= 8192)
                temp |= CTL_CLK_SEL_4;
-       } else if (freq >= 4096) {
+       else if (freq >= 4096)
                temp |= CTL_CLK_SEL_8;
-       } else if (freq >= 2048) {
+       else if (freq >= 2048)
                temp |= CTL_CLK_SEL_16;
-       } else if (freq >= 1024) {
+       else if (freq >= 1024)
                temp |= CTL_CLK_SEL_32;
-       } else if (freq >= 512) {
+       else if (freq >= 512)
                temp |= CTL_CLK_SEL_64;
-       } else if (freq >= 256) {
+       else if (freq >= 256)
                temp |= CTL_CLK_SEL_128;
-       } else if (freq >= 128) {
+       else if (freq >= 128)
                temp |= CTL_CLK_SEL_256;
-       } else {
+       else
                temp |= CTL_CLK_SEL_512;
-       }
 
-       if (!lsb_first) {
+       if (!lsb_first)
                temp |= MSBF_ENB;
-       }
 
-       if (inv_clock) {
+       if (inv_clock)
                temp |= CLK_INV_ENB;
-       }
 
-       if (inv_phase) {
+       if (inv_phase)
                temp |= PHS_INV_ENB;
-       }
 
        writeb(temp, &sc520_mmcr->ssictl);
 
@@ -68,9 +64,11 @@ int ssi_set_interface(int freq, int lsb_first, int inv_clock, int inv_phase)
 u8 ssi_txrx_byte(u8 data)
 {
        writeb(data, &sc520_mmcr->ssixmit);
-       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY);
+       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY)
+               ;
        writeb(SSICMD_CMD_SEL_XMITRCV, &sc520_mmcr->ssicmd);
-       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY);
+       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY)
+               ;
 
        return readb(&sc520_mmcr->ssircv);
 }
@@ -78,15 +76,18 @@ u8 ssi_txrx_byte(u8 data)
 void ssi_tx_byte(u8 data)
 {
        writeb(data, &sc520_mmcr->ssixmit);
-       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY);
+       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY)
+               ;
        writeb(SSICMD_CMD_SEL_XMIT, &sc520_mmcr->ssicmd);
 }
 
 u8 ssi_rx_byte(void)
 {
-       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY);
+       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY)
+               ;
        writeb(SSICMD_CMD_SEL_RCV, &sc520_mmcr->ssicmd);
-       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY);
+       while (readb(&sc520_mmcr->ssista) & SSISTA_BSY)
+               ;
 
        return readb(&sc520_mmcr->ssircv);
 }
index 05bc9c1103cf2070818ba7cd32863f79f81baaec..495a69459b86fd508087499aa33ec951f267a6f8 100644 (file)
@@ -38,7 +38,7 @@ void sc520_timer_isr(void)
 int timer_init(void)
 {
        /* Register the SC520 specific timer interrupt handler */
-       register_timer_isr (sc520_timer_isr);
+       register_timer_isr(sc520_timer_isr);
 
        /* Install interrupt handler for GP Timer 1 */
        irq_install_handler (0, timer_isr, NULL);
@@ -62,7 +62,7 @@ int timer_init(void)
        writew(100, &sc520_mmcr->gptmr1maxcmpa);
        writew(0xe009, &sc520_mmcr->gptmr1ctl);
 
-       unmask_irq (0);
+       unmask_irq(0);
 
        /* Clear the GP Timer 1 status register to get the show rolling*/
        writeb(0x02, &sc520_mmcr->gptmrsta);
index 306fb496170a68c6a0ba01717472615d5135f4f2..f87633b56121ca14aed1feb062c294643e428fd3 100644 (file)
@@ -30,6 +30,7 @@
 #include <version.h>
 #include <asm/global_data.h>
 #include <asm/processor-flags.h>
+#include <generated/asm-offsets.h>
 
 .section .text
 .code32
@@ -47,14 +48,12 @@ _x86boot_start:
        cli
        cld
 
-       /* Turn of cache (this might require a 486-class CPU) */
+       /* Turn off cache (this might require a 486-class CPU) */
        movl    %cr0, %eax
        orl     $(X86_CR0_NW | X86_CR0_CD), %eax
        movl    %eax, %cr0
        wbinvd
 
-       /* Tell 32-bit code it is being entered from an in-RAM copy */
-       movw    $GD_FLG_WARM_BOOT, %bx
 _start:
        /* This is the 32-bit cold-reset entry point */
 
@@ -114,7 +113,7 @@ relocate_code:
 
        /* Setup call address of in-RAM copy of board_init_r() */
        movl    $board_init_r, %ebp
-       addl    (GD_RELOC_OFF * 4)(%edx), %ebp
+       addl    (GENERATED_GD_RELOC_OFF)(%edx), %ebp
 
        /* Setup parameters to board_init_r() */
        movl    %edx, %eax
@@ -123,10 +122,31 @@ relocate_code:
        /* Jump to in-RAM copy of board_init_r() */
        call    *%ebp
 
-die:   hlt
+die:
+       hlt
        jmp     die
        hlt
 
 blank_idt_ptr:
        .word   0               /* limit */
        .long   0               /* base */
+
+       .p2align        2       /* force 4-byte alignment */
+
+multiboot_header:
+       /* magic */
+       .long   0x1BADB002
+       /* flags */
+       .long   (1 << 16)
+       /* checksum */
+       .long   -0x1BADB002 - (1 << 16)
+       /* header addr */
+       .long   multiboot_header - _x86boot_start + CONFIG_SYS_TEXT_BASE
+       /* load addr */
+       .long   CONFIG_SYS_TEXT_BASE
+       /* load end addr */
+       .long   0
+       /* bss end addr */
+       .long   0
+       /* entry addr */
+       .long   CONFIG_SYS_TEXT_BASE
index 9dabff2b9f3309f2253ead84d28130f7a28066f0..33e53cdb3b660d908c2b6bfa7e44929b3b5e5eac 100644 (file)
@@ -37,9 +37,6 @@
 .code16
 .globl start16
 start16:
-       /* Set the Cold Boot / Hard Reset flag */
-       movl    $GD_FLG_COLD_BOOT, %ebx
-
        /*
         * First we let the BSP do some early initialization
         * this code have to map the flash to its final position
index 5ac9bb81d41936778676df9d1a1e5b9b05f3fb7d..9dc29d39bc3ed0dab3e44119f37dddef95af74c3 100644 (file)
@@ -259,32 +259,6 @@ extern sc520_mmcr_t *sc520_mmcr;
 /* Memory Mapped Control Registers (MMCR) Base Address */
 #define SC520_MMCR_BASE                0xfffef000
 
-/* MMCR Addresses (required for assembler code) */
-#define SC520_DRCCTL           (SC520_MMCR_BASE + 0x010)
-#define SC520_DRCTMCTL         (SC520_MMCR_BASE + 0x012)
-#define SC520_DRCCFG           (SC520_MMCR_BASE + 0x014)
-#define SC520_DRCBENDADR       (SC520_MMCR_BASE + 0x018)
-#define SC520_ECCCTL           (SC520_MMCR_BASE + 0x020)
-#define SC520_DBCTL            (SC520_MMCR_BASE + 0x040)
-#define SC520_ECCINT           (SC520_MMCR_BASE + 0xd18)
-
-#define SC520_PAR0             (SC520_MMCR_BASE + 0x088)
-#define SC520_PAR1             (SC520_PAR0 + (0x04 * 1))
-#define SC520_PAR2             (SC520_PAR0 + (0x04 * 2))
-#define SC520_PAR3             (SC520_PAR0 + (0x04 * 3))
-#define SC520_PAR4             (SC520_PAR0 + (0x04 * 4))
-#define SC520_PAR5             (SC520_PAR0 + (0x04 * 5))
-#define SC520_PAR6             (SC520_PAR0 + (0x04 * 6))
-#define SC520_PAR7             (SC520_PAR0 + (0x04 * 7))
-#define SC520_PAR8             (SC520_PAR0 + (0x04 * 8))
-#define SC520_PAR9             (SC520_PAR0 + (0x04 * 9))
-#define SC520_PAR10            (SC520_PAR0 + (0x04 * 10))
-#define SC520_PAR11            (SC520_PAR0 + (0x04 * 11))
-#define SC520_PAR12            (SC520_PAR0 + (0x04 * 12))
-#define SC520_PAR13            (SC520_PAR0 + (0x04 * 13))
-#define SC520_PAR14            (SC520_PAR0 + (0x04 * 14))
-#define SC520_PAR15            (SC520_PAR0 + (0x04 * 15))
-
 /*
  * PARs for maximum allowable 256MB of SDRAM @ 0x00000000
  * Two PARs are required due to maximum PAR size of 128MB
index f177a4fa3b6859ee44c1871c3dae2feb3ca67c55..05a2139d0017fc1096af97e3e9d4747aad0d8887 100644 (file)
@@ -61,25 +61,6 @@ extern gd_t *gd;
 
 #endif
 
-/* Word Offsets into Global Data - MUST match struct gd_t */
-#define GD_BD          0
-#define GD_FLAGS       1
-#define GD_BAUDRATE    2
-#define GD_HAVE_CONSOLE        3
-#define GD_RELOC_OFF   4
-#define GD_LOAD_OFF    5
-#define GD_ENV_ADDR    6
-#define GD_ENV_VALID   7
-#define GD_CPU_CLK     8
-#define GD_BUS_CLK     9
-#define GD_RELOC_ADDR  10
-#define GD_START_ADDR_SP       11
-#define GD_RAM_SIZE    12
-#define GD_RESET_STATUS        13
-#define GD_JT          14
-
-#define GD_SIZE                15
-
 /*
  * Global Data Flags
  */
@@ -91,8 +72,6 @@ extern gd_t *gd;
 #define        GD_FLG_LOGINIT          0x00020 /* Log Buffer has been initialized      */
 #define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out)           */
 #define GD_FLG_ENV_READY       0x00080 /* Environment imported into hash table */
-#define GD_FLG_COLD_BOOT       0x00100 /* Cold Boot */
-#define GD_FLG_WARM_BOOT       0x00200 /* Warm Boot */
 
 #if 0
 #define DECLARE_GLOBAL_DATA_PTR
index 85f60d77f028db8023d9f737a6a2c4de28f41124..37cc7e3a0f849f59ed561a6ba44a319f00b0798e 100644 (file)
 #ifndef _PCI_I386_H_
 #define _PCI_I386_H_   1
 
-void pci_setup_type1(struct pci_controller* hose, u32 cfg_addr, u32 cfg_data);
+#define DEFINE_PCI_DEVICE_TABLE(_table) \
+       const struct pci_device_id _table[]
+
+void pci_setup_type1(struct pci_controller *hose);
 int pci_enable_legacy_video_ports(struct pci_controller* hose);
 int pci_shadow_rom(pci_dev_t dev, unsigned char *dest);
 void pci_remove_rom_window(struct pci_controller* hose, u32 addr);
index c62310e3cd4ec23e9abaecd52a0c0a1ca8448cdf..0f12a893b441adb148954774165feeb8dd53033f 100644 (file)
 #define __ASM_REALMODE_H_
 #include <asm/ptrace.h>
 
+extern ulong __realmode_start;
+extern ulong __realmode_size;
+extern char realmode_enter;
+
 int bios_setup(void);
 int enter_realmode(u16 seg, u16 off, struct pt_regs *in, struct pt_regs *out);
 int enter_realmode_int(u8 lvl, struct pt_regs *in, struct pt_regs *out);
index 3643a79fdfc1c014d25d3aade1c8f3a13164c411..3aa6c1131b21cd3d192a454414c8c9ccb61dd75f 100644 (file)
@@ -23,7 +23,7 @@ extern void * memmove(void *, const void *, __kernel_size_t);
 #undef __HAVE_ARCH_MEMCHR
 extern void * memchr(const void *, int, __kernel_size_t);
 
-#undef __HAVE_ARCH_MEMSET
+#define __HAVE_ARCH_MEMSET
 extern void * memset(void *, int, __kernel_size_t);
 
 #undef __HAVE_ARCH_MEMZERO
index d3e2f4c492805a6726f13850add227d88b032fbf..755f88af04823a4688f767d9d455633ad11008a6 100644 (file)
 #ifndef _U_BOOT_I386_H_
 #define _U_BOOT_I386_H_        1
 
+/* Exports from the Linker Script */
+extern ulong __text_start;
+extern ulong __data_end;
+extern ulong __rel_dyn_start;
+extern ulong __rel_dyn_end;
+extern ulong __bss_start;
+extern ulong __bss_end;
+
 /* cpu/.../cpu.c */
 int x86_cpu_init_r(void);
 int cpu_init_r(void);
index 71e94f76f37d9e60df3fbd525e3c40bc03d33117..d584aa4a80fb480f0dcdf719d6ce7160db510b6c 100644 (file)
@@ -25,23 +25,25 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(ARCH).o
 
-SOBJS-y        += bios.o
-SOBJS-y        += bios_pci.o
-SOBJS-       += realmode_switch.o
+SOBJS-$(CONFIG_SYS_PC_BIOS)    += bios.o
+SOBJS-$(CONFIG_SYS_PCI_BIOS)   += bios_pci.o
+SOBJS-$(CONFIG_SYS_X86_REALMODE)       += realmode_switch.o
 
-COBJS-y        += bios_setup.o
+COBJS-$(CONFIG_SYS_PC_BIOS)    += bios_setup.o
 COBJS-y        += board.o
 COBJS-y        += bootm.o
+COBJS-y        += gcc.o
 COBJS-y        += interrupts.o
 COBJS-$(CONFIG_SYS_PCAT_INTERRUPTS) += pcat_interrupts.o
 COBJS-$(CONFIG_SYS_GENERIC_TIMER) += pcat_timer.o
 COBJS-$(CONFIG_PCI) += pci.o
 COBJS-$(CONFIG_PCI) += pci_type1.o
-COBJS-y        += realmode.o
-COBJS-y        += timer.o
-COBJS-y        += video_bios.o
-COBJS-y        += video.o
-COBJS-y        += zimage.o
+COBJS-$(CONFIG_SYS_X86_REALMODE)       += realmode.o
+COBJS-y        += string.o
+COBJS-$(CONFIG_SYS_X86_ISR_TIMER)      += timer.o
+COBJS-$(CONFIG_VIDEO)  += video_bios.o
+COBJS-$(CONFIG_VIDEO)  += video.o
+COBJS-$(CONFIG_CMD_ZBOOT)      += zimage.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
@@ -49,6 +51,11 @@ OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
 $(LIB):        $(obj).depend $(OBJS)
        $(call cmd_link_o_target, $(OBJS))
 
+$(PREFIXED_LIBGCC): $(NORMAL_LIBGCC)
+       $(OBJCOPY) $< $@ --prefix-symbols=__normal_
+
+$(LIB): $(PREFIXED_LIBGCC)
+
 #########################################################################
 
 # defines $(obj).depend target
index 4a9cdb591b7deb88f8a441765502ad2c2962ba07..a220983df134f6b50090d2701710a0ee942ff30b 100644 (file)
 #ifndef _BIOS_H_
 #define _BIOS_H_
 
-#define OFFS_ES      0     /* 16bit */
-#define OFFS_GS      2     /* 16bit */
-#define OFFS_DS      4     /* 16bit */
-#define OFFS_EDI     6     /* 32bit */
-#define OFFS_DI      6     /* low 16 bits of EDI */
-#define OFFS_ESI     10    /* 32bit */
-#define OFFS_SI      10    /* low 16 bits of ESI */
-#define OFFS_EBP     14    /* 32bit */
-#define OFFS_BP      14    /* low 16 bits of EBP */
-#define OFFS_ESP     18    /* 32bit */
-#define OFFS_SP      18    /* low 16 bits of ESP */
-#define OFFS_EBX     22    /* 32bit */
-#define OFFS_BX      22    /* low 16 bits of EBX */
-#define OFFS_BL      22    /* low  8 bits of BX */
-#define OFFS_BH      23    /* high 8 bits of BX */
-#define OFFS_EDX     26    /* 32bit */
-#define OFFS_DX      26    /* low 16 bits of EBX */
-#define OFFS_DL      26    /* low  8 bits of BX */
-#define OFFS_DH      27    /* high 8 bits of BX */
-#define OFFS_ECX     30    /* 32bit */
-#define OFFS_CX      30    /* low 16 bits of EBX */
-#define OFFS_CL      30    /* low  8 bits of BX */
-#define OFFS_CH      31    /* high 8 bits of BX */
-#define OFFS_EAX     34    /* 32bit */
-#define OFFS_AX      34    /* low 16 bits of EBX */
-#define OFFS_AL      34    /* low  8 bits of BX */
-#define OFFS_AH      35    /* high 8 bits of BX */
-#define OFFS_VECTOR  38    /* 16bit */
-#define OFFS_IP      40    /* 16bit */
-#define OFFS_CS      42    /* 16bit */
-#define OFFS_FLAGS   44    /* 16bit */
+#define OFFS_ES                0       /* 16bit */
+#define OFFS_GS                2       /* 16bit */
+#define OFFS_DS                4       /* 16bit */
+#define OFFS_EDI       6       /* 32bit */
+#define OFFS_DI                6       /* low 16 bits of EDI */
+#define OFFS_ESI       10      /* 32bit */
+#define OFFS_SI                10      /* low 16 bits of ESI */
+#define OFFS_EBP       14      /* 32bit */
+#define OFFS_BP                14      /* low 16 bits of EBP */
+#define OFFS_ESP       18      /* 32bit */
+#define OFFS_SP                18      /* low 16 bits of ESP */
+#define OFFS_EBX       22      /* 32bit */
+#define OFFS_BX                22      /* low 16 bits of EBX */
+#define OFFS_BL                22      /* low  8 bits of BX */
+#define OFFS_BH                23      /* high 8 bits of BX */
+#define OFFS_EDX       26      /* 32bit */
+#define OFFS_DX                26      /* low 16 bits of EBX */
+#define OFFS_DL                26      /* low  8 bits of BX */
+#define OFFS_DH                27      /* high 8 bits of BX */
+#define OFFS_ECX       30      /* 32bit */
+#define OFFS_CX                30      /* low 16 bits of EBX */
+#define OFFS_CL                30      /* low  8 bits of BX */
+#define OFFS_CH                31      /* high 8 bits of BX */
+#define OFFS_EAX       34      /* 32bit */
+#define OFFS_AX                34      /* low 16 bits of EBX */
+#define OFFS_AL                34      /* low  8 bits of BX */
+#define OFFS_AH                35      /* high 8 bits of BX */
+#define OFFS_VECTOR    38      /* 16bit */
+#define OFFS_IP                40      /* 16bit */
+#define OFFS_CS                42      /* 16bit */
+#define OFFS_FLAGS     44      /* 16bit */
 
-#define SEGMENT      0x40
-#define STACK       0x800      /* stack at 0x40:0x800 -> 0x800 */
+/* stack at 0x40:0x800 -> 0x800 */
+#define SEGMENT                0x40
+#define STACK          0x800
 
-/* save general registers */
-/* save some segments     */
-/* save callers stack segment .. */
-/* ... in gs */
-       /* setup my segments */
-       /* setup BIOS stackpointer */
-
-#define MAKE_BIOS_STACK \
-       pushal; \
-       pushw   %ds; \
-       pushw   %gs; \
-       pushw   %es; \
-       pushw   %ss; \
-       popw    %gs; \
-       movw    $SEGMENT, %ax; \
-       movw    %ax, %ds; \
-       movw    %ax, %es; \
-       movw    %ax, %ss; \
-       movw    %sp, %bp; \
+/*
+ * save general registers
+ * save some segments
+ * save callers stack segment
+ * setup BIOS segments
+ * setup BIOS stackpointer
+ */
+#define MAKE_BIOS_STACK                \
+       pushal;                 \
+       pushw   %ds;            \
+       pushw   %gs;            \
+       pushw   %es;            \
+       pushw   %ss;            \
+       popw    %gs;            \
+       movw    $SEGMENT, %ax;  \
+       movw    %ax, %ds;       \
+       movw    %ax, %es;       \
+       movw    %ax, %ss;       \
+       movw    %sp, %bp;       \
        movw    $STACK, %sp
 
-#define RESTORE_CALLERS_STACK \
-       pushw   %gs;            /* restore callers stack segment */ \
-       popw    %ss; \
-       movw    %bp, %sp;       /* restore stackpointer */ \
-       popw    %es;            /* restore segment selectors */ \
-       popw    %gs; \
-       popw    %ds; \
-       popal                   /* restore GP registers */
+/*
+ * restore callers stack segment
+ * restore some segments
+ * restore general registers
+ */
+#define RESTORE_CALLERS_STACK  \
+       pushw   %gs;            \
+       popw    %ss;            \
+       movw    %bp, %sp;       \
+       popw    %es;            \
+       popw    %gs;            \
+       popw    %ds;            \
+       popal
+
+#ifndef __ASSEMBLY__
+#define BIOS_DATA      ((char *)0x400)
+#define BIOS_DATA_SIZE 256
+#define BIOS_BASE      ((char *)0xf0000)
+#define BIOS_CS                0xf000
+
+extern ulong __bios_start;
+extern ulong __bios_size;
+
+/* these are defined in a 16bit segment and needs
+ * to be accessed with the RELOC_16_xxxx() macros below
+ */
+extern u16 ram_in_64kb_chunks;
+extern u16 bios_equipment;
+extern u8  pci_last_bus;
+
+extern void *rm_int00;
+extern void *rm_int01;
+extern void *rm_int02;
+extern void *rm_int03;
+extern void *rm_int04;
+extern void *rm_int05;
+extern void *rm_int06;
+extern void *rm_int07;
+extern void *rm_int08;
+extern void *rm_int09;
+extern void *rm_int0a;
+extern void *rm_int0b;
+extern void *rm_int0c;
+extern void *rm_int0d;
+extern void *rm_int0e;
+extern void *rm_int0f;
+extern void *rm_int10;
+extern void *rm_int11;
+extern void *rm_int12;
+extern void *rm_int13;
+extern void *rm_int14;
+extern void *rm_int15;
+extern void *rm_int16;
+extern void *rm_int17;
+extern void *rm_int18;
+extern void *rm_int19;
+extern void *rm_int1a;
+extern void *rm_int1b;
+extern void *rm_int1c;
+extern void *rm_int1d;
+extern void *rm_int1e;
+extern void *rm_int1f;
+extern void *rm_def_int;
+
+extern void *realmode_reset;
+extern void *realmode_pci_bios_call_entry;
+
+#define RELOC_16_LONG(seg, off) (*(u32 *)(seg << 4 | (u32)&off))
+#define RELOC_16_WORD(seg, off) (*(u16 *)(seg << 4 | (u32)&off))
+#define RELOC_16_BYTE(seg, off) (*(u8 *)(seg << 4 | (u32)&off))
+
+#ifdef PCI_BIOS_DEBUG
+extern u32 num_pci_bios_present;
+extern u32 num_pci_bios_find_device;
+extern u32 num_pci_bios_find_class;
+extern u32 num_pci_bios_generate_special_cycle;
+extern u32 num_pci_bios_read_cfg_byte;
+extern u32 num_pci_bios_read_cfg_word;
+extern u32 num_pci_bios_read_cfg_dword;
+extern u32 num_pci_bios_write_cfg_byte;
+extern u32 num_pci_bios_write_cfg_word;
+extern u32 num_pci_bios_write_cfg_dword;
+extern u32 num_pci_bios_get_irq_routing;
+extern u32 num_pci_bios_set_irq;
+extern u32 num_pci_bios_unknown_function;
+#endif
+
+#endif
 
 #endif
index 53d2ea047afd1c8549553229f4db06bacd5eb241..47c478b27d515b4cdb0e96fdc2f32183a03676d8 100644 (file)
@@ -80,11 +80,15 @@ cs  incl    num_pci_bios_present
 #endif
        movl    $0x20494350, %eax
 gs     movl    %eax, OFFS_EDX(%bp)
+
+       /* We support cfg type 1 version 2.10 */
        movb    $0x01, %al
-gs     movb    %al, OFFS_AL(%bp)       /* We support cfg type 1 */
-       movw    $0x0210, %ax            /* version 2.10 */
+gs     movb    %al, OFFS_AL(%bp)
+       movw    $0x0210, %ax
 gs     movw    %ax, OFFS_BX(%bp)
-cs     movb    pci_last_bus, %al       /* last bus number */
+
+       /* last bus number */
+cs     movb    pci_last_bus, %al
 gs     movb    %al, OFFS_CL(%bp)
        jmp     clear_carry
 
@@ -97,16 +101,22 @@ cs incl    num_pci_bios_find_device
 #endif
 gs     movw    OFFS_CX(%bp), %di
        shll    $16, %edi
-gs     movw    OFFS_DX(%bp), %di       /* edi now holds device in upper 16
-                                        * bits and vendor in lower 16 bits */
+gs     movw    OFFS_DX(%bp), %di
+       /* edi now holds device in upper 16 bits and vendor in lower 16 bits */
+
 gs     movw    OFFS_SI(%bp), %si
-       xorw    %bx, %bx                /* start at bus 0 dev 0 function 0 */
+
+       /* start at bus 0 dev 0 function 0 */
+       xorw    %bx, %bx
 pfd_loop:
-       xorw    %ax, %ax                /* dword 0 is vendor/device */
+       /* dword 0 is vendor/device */
+       xorw    %ax, %ax
        call    __pci_bios_select_register
        movw    $0xcfc, %dx
        inl     %dx, %eax
-       cmpl    %edi, %eax              /* our device ? */
+
+       /* our device ? */
+       cmpl    %edi, %eax
        je      pfd_found_one
 pfd_next_dev:
        /* check for multi function devices */
@@ -120,13 +130,16 @@ pfd_next_dev:
        andb    $0x80, %al
        jz      pfd_not_multi_function
 pfd_function_not_zero:
-       incw    %bx                     /* next function, overflows in to
-                                        * device number, then bus number */
+       /* next function, overflows in to device number, then bus number */
+       incw    %bx
        jmp     pfd_check_bus
 
 pfd_not_multi_function:
-       andw    $0xfff8, %bx            /* remove function bits */
-       addw    $0x0008, %bx            /* next device, overflows in to bus number */
+       /* remove function bits */
+       andw    $0xfff8, %bx
+
+       /* next device, overflows in to bus number */
+       addw    $0x0008, %bx
 pfd_check_bus:
 cs     movb    pci_last_bus, %ah
        cmpb    %ah, %bh
@@ -142,7 +155,8 @@ gs  movw    %bx, OFFS_BX(%bp)
        jmp     clear_carry
 
 pfd_not_found:
-       movb    $0x86, %ah              /* device not found */
+       /* device not found */
+       movb    $0x86, %ah
        jmp     set_carry
 
 /*****************************************************************************/
@@ -152,17 +166,24 @@ pci_bios_find_class:
 cs     incl    num_pci_bios_find_class
 #endif
 gs     movl    OFFS_ECX(%bp), %edi
-       andl    $0x00ffffff, %edi       /* edi now holds class-code in lower 24 bits */
+
+       /* edi now holds class-code in lower 24 bits */
+       andl    $0x00ffffff, %edi
 gs     movw    OFFS_SI(%bp), %si
-       xorw    %bx, %bx                /* start at bus 0 dev 0 function 0 */
+
+       /* start at bus 0 dev 0 function 0 */
+       xorw    %bx, %bx
 pfc_loop:
-       movw    $8, %ax                 /* dword 8 is class-code high 24bits */
+       /* dword 8 is class-code high 24bits */
+       movw    $8, %ax
        call    __pci_bios_select_register
        movw    $0xcfc, %dx
        inl     %dx, %eax
        shrl    $8, %eax
        andl    $0x00ffffff, %eax
-       cmpl    %edi, %eax              /* our device ? */
+
+       /* our device ? */
+       cmpl    %edi, %eax
        je      pfc_found_one
 pfc_next_dev:
        /* check for multi function devices */
@@ -175,13 +196,16 @@ pfc_next_dev:
        andb    $0x80, %al
        jz      pfc_not_multi_function
 pfc_function_not_zero:
-       incw    %bx                     /* next function, overflows in to
-                                        * device number, then bus number */
+       /* next function, overflows in to device number, then bus number */
+       incw    %bx
        jmp     pfc_check_bus
 
 pfc_not_multi_function:
-       andw    $0xfff8, %bx            /* remove function bits */
-       addw    $0x0008, %bx            /* next device, overflows in to bus number */
+       /* remove function bits */
+       andw    $0xfff8, %bx
+
+       /* next device, overflows in to bus number */
+       addw    $0x0008, %bx
 pfc_check_bus:
 cs     movb    pci_last_bus, %ah
        cmpb    %ah, %bh
@@ -197,7 +221,8 @@ gs  movw    %bx, OFFS_BX(%bp)
        jmp     clear_carry
 
 pfc_not_found:
-       movb    $0x86, %ah              /* device not found */
+       /* device not found */
+       movb    $0x86, %ah
        jmp     set_carry
 
 /*****************************************************************************/
@@ -206,7 +231,8 @@ pci_bios_generate_special_cycle:
 #ifdef PCI_BIOS_DEBUG
 cs     incl    num_pci_bios_generate_special_cycle
 #endif
-       movb    $0x81, %ah              /* function not supported */
+       /* function not supported */
+       movb    $0x81, %ah
        jmp     set_carry
 
 /*****************************************************************************/
@@ -296,7 +322,8 @@ pci_bios_get_irq_routing:
 #ifdef PCI_BIOS_DEBUG
 cs     incl    num_pci_bios_get_irq_routing
 #endif
-       movb    $0x81, %ah              /* function not supported */
+       /* function not supported */
+       movb    $0x81, %ah
        jmp     set_carry
 
 /*****************************************************************************/
@@ -305,7 +332,8 @@ pci_bios_set_irq:
 #ifdef PCI_BIOS_DEBUG
 cs     incl    num_pci_bios_set_irq
 #endif
-       movb    $0x81, %ah              /* function not supported */
+       /* function not supported */
+       movb    $0x81, %ah
        jmp     set_carry
 
 /*****************************************************************************/
@@ -314,7 +342,8 @@ unknown_function:
 #ifdef PCI_BIOS_DEBUG
 cs     incl    num_pci_bios_unknown_function
 #endif
-       movb    $0x81, %ah              /* function not supported */
+       /* function not supported */
+       movb    $0x81, %ah
        jmp     set_carry
 
 /*****************************************************************************/
@@ -323,7 +352,8 @@ pci_bios_select_register:
 gs     movw    OFFS_BX(%bp), %bx
 gs     movw    OFFS_DI(%bp), %ax
 /* destroys eax, dx */
-__pci_bios_select_register:               /* BX holds device id, AX holds register index */
+__pci_bios_select_register:
+       /* BX holds device id, AX holds register index */
        pushl   %ebx
        andl    $0xfc, %eax
        andl    $0xffff, %ebx
@@ -338,7 +368,9 @@ __pci_bios_select_register:               /* BX holds device id, AX holds regist
 
 clear_carry:
 gs     movw    OFFS_FLAGS(%bp), %ax
-       andw    $0xfffe, %ax                    /* clear carry -- function succeeded */
+
+       /* clear carry -- function succeeded */
+       andw    $0xfffe, %ax
 gs     movw    %ax, OFFS_FLAGS(%bp)
        xorw    %ax, %ax
 gs     movb    %ah, OFFS_AH(%bp)
@@ -347,7 +379,9 @@ gs  movb    %ah, OFFS_AH(%bp)
 set_carry:
 gs     movb    %ah, OFFS_AH(%bp)
 gs     movw    OFFS_FLAGS(%bp), %ax
-       orw     $1, %ax                         /* return carry -- function not supported */
+
+       /* return carry -- function not supported */
+       orw     $1, %ax
 gs     movw    %ax, OFFS_FLAGS(%bp)
        movw    $-1, %ax
        ret
index 9bf7e5872f15e3031faedec8388825c520f2e3ad..265f7d671ee3dce8efb8f09004b25466dfca0c7d 100644 (file)
 #include <pci.h>
 #include <asm/realmode.h>
 #include <asm/io.h>
+#include "bios.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
 #define NUMVECTS       256
 
-#define BIOS_DATA        ((char*)0x400)
-#define BIOS_DATA_SIZE   256
-#define BIOS_BASE        ((char*)0xf0000)
-#define BIOS_CS          0xf000
-
-extern ulong __bios_start;
-extern ulong __bios_size;
-
-/* these are defined in a 16bit segment and needs
- * to be accessed with the RELOC_16_xxxx() macros below
- */
-extern u16 ram_in_64kb_chunks;
-extern u16 bios_equipment;
-extern u8  pci_last_bus;
-
-extern void *rm_int00;
-extern void *rm_int01;
-extern void *rm_int02;
-extern void *rm_int03;
-extern void *rm_int04;
-extern void *rm_int05;
-extern void *rm_int06;
-extern void *rm_int07;
-extern void *rm_int08;
-extern void *rm_int09;
-extern void *rm_int0a;
-extern void *rm_int0b;
-extern void *rm_int0c;
-extern void *rm_int0d;
-extern void *rm_int0e;
-extern void *rm_int0f;
-extern void *rm_int10;
-extern void *rm_int11;
-extern void *rm_int12;
-extern void *rm_int13;
-extern void *rm_int14;
-extern void *rm_int15;
-extern void *rm_int16;
-extern void *rm_int17;
-extern void *rm_int18;
-extern void *rm_int19;
-extern void *rm_int1a;
-extern void *rm_int1b;
-extern void *rm_int1c;
-extern void *rm_int1d;
-extern void *rm_int1e;
-extern void *rm_int1f;
-extern void *rm_def_int;
-
-extern void *realmode_reset;
-extern void *realmode_pci_bios_call_entry;
-
 static int set_jmp_vector(int entry_point, void *target)
 {
-       if (entry_point & ~0xffff) {
+       if (entry_point & ~0xffff)
                return -1;
-       }
 
-       if (((u32)target-0xf0000) & ~0xffff) {
+       if (((u32)target - 0xf0000) & ~0xffff)
                return -1;
-       }
+
        printf("set_jmp_vector: 0xf000:%04x -> %p\n",
-              entry_point, target);
+                       entry_point, target);
 
        /* jmp opcode */
        writeb(0xea, 0xf0000 + entry_point);
@@ -115,51 +63,42 @@ static int set_jmp_vector(int entry_point, void *target)
        return 0;
 }
 
-
-/*
- ************************************************************
- * Install an interrupt vector
- ************************************************************
- */
-
+/* Install an interrupt vector */
 static void setvector(int vector, u16 segment, void *handler)
 {
-       u16 *ptr = (u16*)(vector*4);
-       ptr[0] = ((u32)handler - (segment << 4))&0xffff;
+       u16 *ptr = (u16 *)(vector * 4);
+       ptr[0] = ((u32)handler - (segment << 4)) & 0xffff;
        ptr[1] = segment;
 
 #if 0
        printf("setvector: int%02x -> %04x:%04x\n",
-              vector, ptr[1], ptr[0]);
+                       vector, ptr[1], ptr[0]);
 #endif
 }
 
-#define RELOC_16_LONG(seg, off) *(u32*)(seg << 4 | (u32)&off)
-#define RELOC_16_WORD(seg, off) *(u16*)(seg << 4 | (u32)&off)
-#define RELOC_16_BYTE(seg, off) *(u8*)(seg << 4 | (u32)&off)
-
 int bios_setup(void)
 {
-       ulong bios_start = (ulong)&__bios_start + gd->reloc_off;
+       /* The BIOS section is not relocated and still in the ROM. */
+       ulong bios_start = (ulong)&__bios_start;
        ulong bios_size = (ulong)&__bios_size;
 
-       static int done=0;
+       static int done;
        int vector;
 #ifdef CONFIG_PCI
        struct pci_controller *pri_hose;
 #endif
-       if (done) {
+       if (done)
                return 0;
-       }
+
        done = 1;
 
        if (bios_size > 65536) {
                printf("BIOS too large (%ld bytes, max is 65536)\n",
-                      bios_size);
+                               bios_size);
                return -1;
        }
 
-       memcpy(BIOS_BASE, (void*)bios_start, bios_size);
+       memcpy(BIOS_BASE, (void *)bios_start, bios_size);
 
        /* clear bda */
        memset(BIOS_DATA, 0, BIOS_DATA_SIZE);
@@ -178,9 +117,8 @@ int bios_setup(void)
 
 
        /* setup realmode interrupt vectors */
-       for (vector = 0; vector < NUMVECTS; vector++) {
+       for (vector = 0; vector < NUMVECTS; vector++)
                setvector(vector, BIOS_CS, &rm_def_int);
-       }
 
        setvector(0x00, BIOS_CS, &rm_int00);
        setvector(0x01, BIOS_CS, &rm_int01);
index 8963580808650c2334a4c03e480908dade98bad2..d742fec928b9e7e549a45ea4166bfa70190ea903 100644 (file)
 #define XTRN_DECLARE_GLOBAL_DATA_PTR   /* empty = allocate here */
 DECLARE_GLOBAL_DATA_PTR = (gd_t *) (CONFIG_SYS_INIT_GD_ADDR);
 
-
-/* Exports from the Linker Script */
-extern ulong __text_start;
-extern ulong __data_end;
-extern ulong __rel_dyn_start;
-extern ulong __rel_dyn_end;
-extern ulong __bss_start;
-extern ulong __bss_end;
-
 /************************************************************************
  * Init Utilities                                                      *
  ************************************************************************
@@ -72,49 +63,41 @@ extern ulong __bss_end;
  * or dropped completely,
  * but let's get it working (again) first...
  */
-static int init_baudrate (void)
+static int init_baudrate(void)
 {
        gd->baudrate = getenv_ulong("baudrate", 10, CONFIG_BAUDRATE);
        return 0;
 }
 
-static int display_banner (void)
+static int display_banner(void)
 {
 
-       printf ("\n\n%s\n\n", version_string);
-/*
-       printf ("U-Boot code: %08lX -> %08lX  data: %08lX -> %08lX\n"
-               "        BSS: %08lX -> %08lX stack: %08lX -> %08lX\n",
-               i386boot_start, i386boot_romdata_start-1,
-               i386boot_romdata_dest, i386boot_romdata_dest+i386boot_romdata_size-1,
-               i386boot_bss_start, i386boot_bss_start+i386boot_bss_size-1,
-               i386boot_bss_start+i386boot_bss_size,
-               i386boot_bss_start+i386boot_bss_size+CONFIG_SYS_STACK_SIZE-1);
-
-*/
+       printf("\n\n%s\n\n", version_string);
 
-       return (0);
+       return 0;
 }
 
-static int display_dram_config (void)
+static int display_dram_config(void)
 {
        int i;
 
-       puts ("DRAM Configuration:\n");
+       puts("DRAM 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");
+       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");
        }
 
-       return (0);
+       return 0;
 }
 
-static void display_flash_config (ulong size)
+#ifndef CONFIG_SYS_NO_FLASH
+static void display_flash_config(ulong size)
 {
-       puts ("Flash: ");
-       print_size (size, "\n");
+       puts("Flash: ");
+       print_size(size, "\n");
 }
+#endif
 
 /*
  * Breath some life into the board...
@@ -178,19 +161,26 @@ gd_t *gd;
 
 static int calculate_relocation_address(void)
 {
-       void *text_start = &__text_start;
-       void *bss_end = &__bss_end;
-       void *dest_addr;
+       ulong text_start = (ulong)&__text_start;
+       ulong bss_end = (ulong)&__bss_end;
+       ulong dest_addr;
        ulong rel_offset;
 
        /* Calculate destination RAM Address and relocation offset */
-       dest_addr = (void *)gd->ram_size;
+       dest_addr = gd->ram_size;
        dest_addr -= CONFIG_SYS_STACK_SIZE;
        dest_addr -= (bss_end - text_start);
+
+       /*
+        * Round destination address down to 16-byte boundary to keep
+        * IDT and GDT 16-byte aligned
+        */
+       dest_addr &= ~15;
+
        rel_offset = dest_addr - text_start;
 
        gd->start_addr_sp = gd->ram_size;
-       gd->relocaddr = (ulong)dest_addr;
+       gd->relocaddr = dest_addr;
        gd->reloc_off = rel_offset;
 
        return 0;
@@ -214,7 +204,7 @@ static int clear_bss(void)
        void *bss_end = &__bss_end;
 
        ulong *dst_addr = (ulong *)(bss_start + gd->reloc_off);
-       ulong *end_addr = (ulong *)(bss_end + gd->reloc_off);;
+       ulong *end_addr = (ulong *)(bss_end + gd->reloc_off);
 
        while (dst_addr < end_addr)
                *dst_addr++ = 0x00000000;
@@ -227,10 +217,30 @@ static int do_elf_reloc_fixups(void)
        Elf32_Rel *re_src = (Elf32_Rel *)(&__rel_dyn_start);
        Elf32_Rel *re_end = (Elf32_Rel *)(&__rel_dyn_end);
 
+       Elf32_Addr *offset_ptr_rom;
+       Elf32_Addr *offset_ptr_ram;
+
+       /* The size of the region of u-boot that runs out of RAM. */
+       uintptr_t size = (uintptr_t)&__bss_end - (uintptr_t)&__text_start;
+
        do {
-               if (re_src->r_offset >= CONFIG_SYS_TEXT_BASE)
-                       if (*(Elf32_Addr *)(re_src->r_offset + gd->reloc_off) >= CONFIG_SYS_TEXT_BASE)
-                               *(Elf32_Addr *)(re_src->r_offset + gd->reloc_off) += gd->reloc_off;
+               /* Get the location from the relocation entry */
+               offset_ptr_rom = (Elf32_Addr *)re_src->r_offset;
+
+               /* Check that the location of the relocation is in .text */
+               if (offset_ptr_rom >= (Elf32_Addr *)CONFIG_SYS_TEXT_BASE) {
+
+                       /* Switch to the in-RAM version */
+                       offset_ptr_ram = (Elf32_Addr *)((ulong)offset_ptr_rom +
+                                                       gd->reloc_off);
+
+                       /* Check that the target points into .text */
+                       if (*offset_ptr_ram >= CONFIG_SYS_TEXT_BASE &&
+                                       *offset_ptr_ram <
+                                       (CONFIG_SYS_TEXT_BASE + size)) {
+                               *offset_ptr_ram += gd->reloc_off;
+                       }
+               }
        } while (re_src++ < re_end);
 
        return 0;
@@ -254,13 +264,18 @@ void board_init_f(ulong boot_flags)
        relocate_code(gd->start_addr_sp, gd, gd->relocaddr);
 
        /* NOTREACHED - relocate_code() does not return */
-       while(1);
+       while (1)
+               ;
 }
 
 void board_init_r(gd_t *id, ulong dest_addr)
 {
+#if defined(CONFIG_CMD_NET)
        char *s;
+#endif
+#ifndef CONFIG_SYS_NO_FLASH
        ulong size;
+#endif
        static bd_t bd_data;
        static gd_t gd_data;
        init_fnc_t **init_fnc_ptr;
@@ -272,10 +287,10 @@ void board_init_r(gd_t *id, ulong dest_addr)
        memcpy(gd, id, sizeof(gd_t));
 
        /* compiler optimization barrier needed for GCC >= 3.4 */
-       __asm__ __volatile__("": : :"memory");
+       __asm__ __volatile__("" : : : "memory");
 
        gd->bd = &bd_data;
-       memset (gd->bd, 0, sizeof (bd_t));
+       memset(gd->bd, 0, sizeof(bd_t));
        show_boot_progress(0x22);
 
        gd->baudrate =  CONFIG_BAUDRATE;
@@ -285,28 +300,31 @@ void board_init_r(gd_t *id, ulong dest_addr)
 
        for (init_fnc_ptr = init_sequence_r; *init_fnc_ptr; ++init_fnc_ptr) {
                if ((*init_fnc_ptr)() != 0)
-                       hang ();
+                       hang();
        }
        show_boot_progress(0x23);
 
 #ifdef CONFIG_SERIAL_MULTI
        serial_initialize();
 #endif
+
+#ifndef CONFIG_SYS_NO_FLASH
        /* configure available FLASH banks */
        size = flash_init();
        display_flash_config(size);
        show_boot_progress(0x24);
+#endif
 
        show_boot_progress(0x25);
 
        /* initialize environment */
-       env_relocate ();
+       env_relocate();
        show_boot_progress(0x26);
 
 
 #ifdef CONFIG_CMD_NET
        /* IP Address */
-       bd_data.bi_ip_addr = getenv_IPaddr ("ipaddr");
+       bd_data.bi_ip_addr = getenv_IPaddr("ipaddr");
 #endif
 
 #if defined(CONFIG_PCI)
@@ -319,9 +337,9 @@ void board_init_r(gd_t *id, ulong dest_addr)
        show_boot_progress(0x27);
 
 
-       stdio_init ();
+       stdio_init();
 
-       jumptable_init ();
+       jumptable_init();
 
        /* Initialize the console (after the relocation and devices init) */
        console_init_r();
@@ -333,7 +351,7 @@ void board_init_r(gd_t *id, ulong dest_addr)
 
 #if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_CMD_IDE)
        WATCHDOG_RESET();
-       puts ("PCMCIA:");
+       puts("PCMCIA:");
        pcmcia_init();
 #endif
 
@@ -348,7 +366,7 @@ void board_init_r(gd_t *id, ulong dest_addr)
        show_boot_progress(0x28);
 
 #ifdef CONFIG_STATUS_LED
-       status_led_set (STATUS_LED_BOOT, STATUS_LED_BLINKING);
+       status_led_set(STATUS_LED_BOOT, STATUS_LED_BLINKING);
 #endif
 
        udelay(20);
@@ -356,9 +374,10 @@ void board_init_r(gd_t *id, ulong dest_addr)
        /* Initialize from environment */
        load_addr = getenv_ulong("loadaddr", 16, load_addr);
 #if defined(CONFIG_CMD_NET)
-       if ((s = getenv ("bootfile")) != NULL) {
-               copy_filename (BootFile, s, sizeof (BootFile));
-       }
+       s = getenv("bootfile");
+
+       if (s != NULL)
+               copy_filename(BootFile, s, sizeof(BootFile));
 #endif
 
        WATCHDOG_RESET();
@@ -390,10 +409,10 @@ void board_init_r(gd_t *id, ulong dest_addr)
        eth_initialize(gd->bd);
 #endif
 
-#if ( defined(CONFIG_CMD_NET)) && (0)
+#if (defined(CONFIG_CMD_NET)) && (0)
        WATCHDOG_RESET();
 # ifdef DEBUG
-       puts ("Reset Ethernet PHY\n");
+       puts("Reset Ethernet PHY\n");
 # endif
        reset_phy();
 #endif
@@ -410,27 +429,27 @@ void board_init_r(gd_t *id, ulong dest_addr)
 
 
 #ifdef CONFIG_POST
-       post_run (NULL, POST_RAM | post_bootmode_get(0));
+       post_run(NULL, POST_RAM | post_bootmode_get(0));
 #endif
 
-
        show_boot_progress(0x29);
 
        /* main_loop() can return to retry autoboot, if so just run it again. */
-       for (;;) {
+       for (;;)
                main_loop();
-       }
 
        /* NOTREACHED - no way out of command loop except booting */
 }
 
-void hang (void)
+void hang(void)
 {
-       puts ("### ERROR ### Please RESET the board ###\n");
-       for (;;);
+       puts("### ERROR ### Please RESET the board ###\n");
+       for (;;)
+               ;
 }
 
-unsigned long do_go_exec (ulong (*entry)(int, char * const []), int argc, char * const argv[])
+unsigned long do_go_exec(ulong (*entry)(int, char * const []),
+                        int argc, char * const argv[])
 {
        unsigned long ret = 0;
        char **argv_tmp;
index a21a21f1f7f9fb0c1106884e17d42121211090d0..bac7b4f0cfb8a3b629e11010073509a2b463191b 100644 (file)
 #include <asm/zimage.h>
 
 /*cmd_boot.c*/
-int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *images)
+int do_bootm_linux(int flag, int argc, char * const argv[],
+               bootm_headers_t *images)
 {
-       void            *base_ptr;
+       void            *base_ptr = NULL;
        ulong           os_data, os_len;
        image_header_t  *hdr;
 
@@ -48,41 +49,43 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *ima
 
        if (images->legacy_hdr_valid) {
                hdr = images->legacy_hdr_os;
-               if (image_check_type (hdr, IH_TYPE_MULTI)) {
+               if (image_check_type(hdr, IH_TYPE_MULTI)) {
                        /* if multi-part image, we need to get first subimage */
-                       image_multi_getimg (hdr, 0, &os_data, &os_len);
+                       image_multi_getimg(hdr, 0, &os_data, &os_len);
                } else {
                        /* otherwise get image data */
-                       os_data = image_get_data (hdr);
-                       os_len = image_get_data_size (hdr);
+                       os_data = image_get_data(hdr);
+                       os_len = image_get_data_size(hdr);
                }
 #if defined(CONFIG_FIT)
        } else if (images->fit_uname_os) {
-               ret = fit_image_get_data (images->fit_hdr_os,
+               ret = fit_image_get_data(images->fit_hdr_os,
                                        images->fit_noffset_os, &data, &len);
                if (ret) {
-                       puts ("Can't get image data/size!\n");
+                       puts("Can't get image data/size!\n");
                        goto error;
                }
                os_data = (ulong)data;
                os_len = (ulong)len;
 #endif
        } else {
-               puts ("Could not find kernel image!\n");
+               puts("Could not find kernel image!\n");
                goto error;
        }
 
-       base_ptr = load_zimage ((void*)os_data, os_len,
+#ifdef CONFIG_CMD_ZBOOT
+       base_ptr = load_zimage((void *)os_data, os_len,
                        images->rd_start, images->rd_end - images->rd_start, 0);
+#endif
 
        if (NULL == base_ptr) {
-               printf ("## Kernel loading failed ...\n");
+               printf("## Kernel loading failed ...\n");
                goto error;
 
        }
 
 #ifdef DEBUG
-       printf ("## Transferring control to Linux (at address %08x) ...\n",
+       printf("## Transferring control to Linux (at address %08x) ...\n",
                (u32)base_ptr);
 #endif
 
diff --git a/arch/x86/lib/gcc.c b/arch/x86/lib/gcc.c
new file mode 100644 (file)
index 0000000..4043431
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 or later of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
+ */
+
+#ifdef __GNUC__
+
+/*
+ * GCC's libgcc handling is quite broken. While the libgcc functions
+ * are always regparm(0) the code that calls them uses whatever the
+ * compiler call specifies. Therefore we need a wrapper around those
+ * functions. See gcc bug PR41055 for more information.
+ */
+#define WRAP_LIBGCC_CALL(type, name) \
+       type __normal_##name(type a, type b) __attribute__((regparm(0))); \
+       type __wrap_##name(type a, type b); \
+       type __wrap_##name(type a, type b) { return __normal_##name(a, b); }
+
+WRAP_LIBGCC_CALL(long long, __divdi3)
+WRAP_LIBGCC_CALL(unsigned long long, __udivdi3)
+WRAP_LIBGCC_CALL(long long, __moddi3)
+WRAP_LIBGCC_CALL(unsigned long long, __umoddi3)
+
+#endif
index 04a9c79f9f5ad2acb21149e20c25e2bff46a3019..76fbe9dc7f3f56a9108c382c2988858612f733c2 100644 (file)
@@ -56,8 +56,8 @@ struct irq_action {
 };
 
 static struct irq_action irq_handlers[CONFIG_SYS_NUM_IRQS] = { {0} };
-static int spurious_irq_cnt = 0;
-static int spurious_irq = 0;
+static int spurious_irq_cnt;
+static int spurious_irq;
 
 void irq_install_handler(int irq, interrupt_handler_t *handler, void *arg)
 {
@@ -70,10 +70,10 @@ void irq_install_handler(int irq, interrupt_handler_t *handler, void *arg)
 
        if (irq_handlers[irq].handler != NULL)
                printf("irq_install_handler: 0x%08lx replacing 0x%08lx\n",
-                      (ulong) handler,
-                      (ulong) irq_handlers[irq].handler);
+                               (ulong) handler,
+                               (ulong) irq_handlers[irq].handler);
 
-       status = disable_interrupts ();
+       status = disable_interrupts();
 
        irq_handlers[irq].handler = handler;
        irq_handlers[irq].arg = arg;
@@ -96,7 +96,7 @@ void irq_free_handler(int irq)
                return;
        }
 
-       status = disable_interrupts ();
+       status = disable_interrupts();
 
        mask_irq(irq);
 
@@ -141,14 +141,14 @@ int do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        int irq;
 
        printf("Spurious IRQ: %u, last unknown IRQ: %d\n",
-              spurious_irq_cnt, spurious_irq);
+                       spurious_irq_cnt, spurious_irq);
 
-       printf ("Interrupt-Information:\n");
-       printf ("Nr  Routine   Arg       Count\n");
+       printf("Interrupt-Information:\n");
+       printf("Nr  Routine   Arg       Count\n");
 
        for (irq = 0; irq <= CONFIG_SYS_NUM_IRQS; irq++) {
                if (irq_handlers[irq].handler != NULL) {
-                       printf ("%02d  %08lx  %08lx  %d\n",
+                       printf("%02d  %08lx  %08lx  %d\n",
                                        irq,
                                        (ulong)irq_handlers[irq].handler,
                                        (ulong)irq_handlers[irq].arg,
index 2caae208ebd6e8dc209720010b67a1dff7e9db14..5dac4989fec1e377fb7a13aac564321919a83163 100644 (file)
@@ -76,7 +76,7 @@ int interrupt_init(void)
         * Enable cascaded interrupts by unmasking the cascade IRQ pin of
         * the master PIC
         */
-       unmask_irq (2);
+       unmask_irq(2);
 
        enable_interrupts();
 
index f2a54223afd84aa05fd6b4ede4547378522d1cd2..6b3db69447009d711b43e66dedbffbd2e77fd0c1 100644 (file)
@@ -30,7 +30,7 @@
 #define TIMER0_VALUE 0x04aa /* 1kHz 1.9318MHz / 1000 */
 #define TIMER2_VALUE 0x0a8e /* 440Hz */
 
-static int timer_init_done = 0;
+static int timer_init_done;
 
 int timer_init(void)
 {
@@ -42,18 +42,18 @@ int timer_init(void)
         * (to stasrt a beep: write 3 to port 0x61,
         * to stop it again: write 0)
         */
-       outb (PIT_CMD_CTR0 | PIT_CMD_BOTH | PIT_CMD_MODE2,
-             PIT_BASE + PIT_COMMAND);
-       outb (TIMER0_VALUE & 0xff, PIT_BASE + PIT_T0);
-       outb (TIMER0_VALUE >> 8, PIT_BASE + PIT_T0);
+       outb(PIT_CMD_CTR0 | PIT_CMD_BOTH | PIT_CMD_MODE2,
+                       PIT_BASE + PIT_COMMAND);
+       outb(TIMER0_VALUE & 0xff, PIT_BASE + PIT_T0);
+       outb(TIMER0_VALUE >> 8, PIT_BASE + PIT_T0);
 
-       outb (PIT_CMD_CTR2 | PIT_CMD_BOTH | PIT_CMD_MODE3,
-             PIT_BASE + PIT_COMMAND);
-       outb (TIMER2_VALUE & 0xff, PIT_BASE + PIT_T2);
-       outb (TIMER2_VALUE >> 8, PIT_BASE + PIT_T2);
+       outb(PIT_CMD_CTR2 | PIT_CMD_BOTH | PIT_CMD_MODE3,
+                       PIT_BASE + PIT_COMMAND);
+       outb(TIMER2_VALUE & 0xff, PIT_BASE + PIT_T2);
+       outb(TIMER2_VALUE >> 8, PIT_BASE + PIT_T2);
 
-       irq_install_handler (0, timer_isr, NULL);
-       unmask_irq (0);
+       irq_install_handler(0, timer_isr, NULL);
+       unmask_irq(0);
 
        timer_init_done = 1;
 
@@ -64,21 +64,20 @@ static u16 read_pit(void)
 {
        u8 low;
 
-       outb (PIT_CMD_LATCH, PIT_BASE + PIT_COMMAND);
-       low = inb (PIT_BASE + PIT_T0);
+       outb(PIT_CMD_LATCH, PIT_BASE + PIT_COMMAND);
+       low = inb(PIT_BASE + PIT_T0);
 
-       return ((inb (PIT_BASE + PIT_T0) << 8) | low);
+       return (inb(PIT_BASE + PIT_T0) << 8) | low;
 }
 
 /* this is not very exact */
-void __udelay (unsigned long usec)
+void __udelay(unsigned long usec)
 {
        int counter;
        int wraps;
 
-       if (timer_init_done)
-       {
-               counter = read_pit ();
+       if (timer_init_done) {
+               counter = read_pit();
                wraps = usec / 1000;
                usec = usec % 1000;
 
@@ -92,7 +91,7 @@ void __udelay (unsigned long usec)
                }
 
                while (1) {
-                       int new_count = read_pit ();
+                       int new_count = read_pit();
 
                        if (((new_count < usec) && !wraps) || wraps < 0)
                                break;
index 593a7db75f8ed1d6fd0d7fff899d747594a55d9b..71878dd7dcbed21c6a4f1adf6bd4534c0be5bb36 100644 (file)
@@ -42,11 +42,13 @@ int pci_shadow_rom(pci_dev_t dev, unsigned char *dest)
        u16 device;
        u32 class_code;
 
+       u32 pci_data;
+
        hose = pci_bus_to_hose(PCI_BUS(dev));
-#if 0
-       printf("pci_shadow_rom() asked to shadow device %x to %x\n",
+
+       debug("pci_shadow_rom() asked to shadow device %x to %x\n",
               dev, (u32)dest);
-#endif
+
        pci_read_config_word(dev, PCI_VENDOR_ID, &vendor);
        pci_read_config_word(dev, PCI_DEVICE_ID, &device);
        pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_code);
@@ -67,7 +69,7 @@ int pci_shadow_rom(pci_dev_t dev, unsigned char *dest)
                return -1;
        }
 
-       size = (~(addr_reg&PCI_ROM_ADDRESS_MASK))+1;
+       size = (~(addr_reg&PCI_ROM_ADDRESS_MASK)) + 1;
 
        debug("ROM is %d bytes\n", size);
 
@@ -80,27 +82,25 @@ int pci_shadow_rom(pci_dev_t dev, unsigned char *dest)
                               |PCI_ROM_ADDRESS_ENABLE);
 
 
-       for (i=rom_addr;i<rom_addr+size; i+=512) {
-
-
+       for (i = rom_addr; i < rom_addr + size; i += 512) {
                if (readw(i) == 0xaa55) {
-                       u32 pci_data;
 #ifdef PCI_ROM_SCAN_VERBOSE
                        printf("ROM signature found\n");
 #endif
-                       pci_data = readw(0x18+i);
+                       pci_data = readw(0x18 + i);
                        pci_data += i;
 
-                       if (0==memcmp((void*)pci_data, "PCIR", 4)) {
+                       if (0 == memcmp((void *)pci_data, "PCIR", 4)) {
 #ifdef PCI_ROM_SCAN_VERBOSE
-                               printf("Fount PCI rom image at offset %d\n", i-rom_addr);
+                               printf("Fount PCI rom image at offset %d\n",
+                                      i - rom_addr);
                                printf("Vendor %04x device %04x class %06x\n",
-                                      readw(pci_data+4), readw(pci_data+6),
-                                      readl(pci_data+0x0d)&0xffffff);
+                                      readw(pci_data + 4), readw(pci_data + 6),
+                                      readl(pci_data + 0x0d) & 0xffffff);
                                printf("%s\n",
-                                      (readw(pci_data+0x15) &0x80)?
-                                      "Last image":"More images follow");
-                               switch  (readb(pci_data+0x14)) {
+                                      (readw(pci_data + 0x15) & 0x80) ?
+                                      "Last image" : "More images follow");
+                               switch  (readb(pci_data + 0x14)) {
                                case 0:
                                        printf("X86 code\n");
                                        break;
@@ -111,35 +111,38 @@ int pci_shadow_rom(pci_dev_t dev, unsigned char *dest)
                                        printf("PARISC code\n");
                                        break;
                                }
-                               printf("Image size %d\n", readw(pci_data+0x10) * 512);
+                               printf("Image size %d\n",
+                                      readw(pci_data + 0x10) * 512);
 #endif
-                               /* FixMe: I think we should compare the class code
-                                * bytes as well but I have no reference on the
-                                * exact order of these bytes in the PCI ROM header */
-                               if (readw(pci_data+4) == vendor &&
-                                   readw(pci_data+6) == device &&
-                                   /* (readl(pci_data+0x0d)&0xffffff) == class_code && */
-                                   readb(pci_data+0x14) == 0 /* x86 code image */ ) {
+                               /*
+                                * FixMe: I think we should compare the class
+                                * code bytes as well but I have no reference
+                                * on the exact order of these bytes in the PCI
+                                * ROM header
+                                */
+                               if (readw(pci_data + 4) == vendor &&
+                                   readw(pci_data + 6) == device &&
+                                   readb(pci_data + 0x14) == 0) {
 #ifdef PCI_ROM_SCAN_VERBOSE
-                                       printf("Suitable ROM image found, copying\n");
+                                       printf("Suitable ROM image found\n");
 #endif
-                                       memmove(dest, (void*)rom_addr, readw(pci_data+0x10) * 512);
+                                       memmove(dest, (void *)rom_addr,
+                                               readw(pci_data + 0x10) * 512);
                                        res = 0;
                                        break;
 
                                }
-                               if (readw(pci_data+0x15) &0x80) {
+
+                               if (readw(pci_data + 0x15) & 0x80)
                                        break;
-                               }
                        }
                }
 
        }
 
 #ifdef PCI_ROM_SCAN_VERBOSE
-       if (res) {
+       if (res)
                printf("No suitable image found\n");
-       }
 #endif
        /* disable PAR register and PCI device ROM address devocer */
        pci_remove_rom_window(hose, rom_addr);
@@ -148,3 +151,38 @@ int pci_shadow_rom(pci_dev_t dev, unsigned char *dest)
 
        return res;
 }
+
+#ifdef PCI_BIOS_DEBUG
+
+void print_bios_bios_stat(void)
+{
+       printf("16 bit functions:\n");
+       printf("pci_bios_present:                %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_present));
+       printf("pci_bios_find_device:            %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_find_device));
+       printf("pci_bios_find_class:             %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_find_class));
+       printf("pci_bios_generate_special_cycle: %d\n",
+                       RELOC_16_LONG(0xf000,
+                                     num_pci_bios_generate_special_cycle));
+       printf("pci_bios_read_cfg_byte:          %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_read_cfg_byte));
+       printf("pci_bios_read_cfg_word:          %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_read_cfg_word));
+       printf("pci_bios_read_cfg_dword:         %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_read_cfg_dword));
+       printf("pci_bios_write_cfg_byte:         %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_write_cfg_byte));
+       printf("pci_bios_write_cfg_word:         %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_write_cfg_word));
+       printf("pci_bios_write_cfg_dword:        %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_write_cfg_dword));
+       printf("pci_bios_get_irq_routing:        %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_get_irq_routing));
+       printf("pci_bios_set_irq:                %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_set_irq));
+       printf("pci_bios_unknown_function:       %d\n",
+                       RELOC_16_LONG(0xf000, num_pci_bios_unknown_function));
+}
+#endif
index da1d3566ad525882b526b78223c5725b1aa12d60..a25fa051d50fd64209e44242817522231d28dbdb 100644 (file)
@@ -29,7 +29,7 @@
 #include <asm/io.h>
 #include <pci.h>
 
-#define cfg_read(val, addr, op)        *val = op((int)(addr))
+#define cfg_read(val, addr, op)                (*val = op((int)(addr)))
 #define cfg_write(val, addr, op)       op((val), (int)(addr))
 
 #define TYPE1_PCI_OP(rw, size, type, op, mask)                         \
@@ -42,7 +42,6 @@ type1_##rw##_config_##size(struct pci_controller *hose,                       \
        return 0;                                                       \
 }
 
-
 TYPE1_PCI_OP(read, byte, u8 *, inb, 3)
 TYPE1_PCI_OP(read, word, u16 *, inw, 2)
 TYPE1_PCI_OP(read, dword, u32 *, inl, 0)
@@ -51,7 +50,11 @@ TYPE1_PCI_OP(write, byte, u8, outb, 3)
 TYPE1_PCI_OP(write, word, u16, outw, 2)
 TYPE1_PCI_OP(write, dword, u32, outl, 0)
 
-void pci_setup_type1(struct pci_controller* hose, u32 cfg_addr, u32 cfg_data)
+/* bus mapping constants (used for PCI core initialization) */
+#define PCI_REG_ADDR           0x00000cf8
+#define PCI_REG_DATA           0x00000cfc
+
+void pci_setup_type1(struct pci_controller *hose)
 {
        pci_set_ops(hose,
                    type1_read_config_byte,
@@ -61,6 +64,6 @@ void pci_setup_type1(struct pci_controller* hose, u32 cfg_addr, u32 cfg_data)
                    type1_write_config_word,
                    type1_write_config_dword);
 
-       hose->cfg_addr = (unsigned int *) cfg_addr;
-       hose->cfg_data = (unsigned char *) cfg_data;
+       hose->cfg_addr = (unsigned int *)PCI_REG_ADDR;
+       hose->cfg_data = (unsigned char *)PCI_REG_DATA;
 }
index 6aa0f23a1a411fcca5235942e5870035a364c01b..75511b2bdf9893f29483d6d3b70d8817f43c3f47 100644 (file)
 #include <asm/ptrace.h>
 #include <asm/realmode.h>
 
-#define REALMODE_MAILBOX ((char*)0xe00)
-
-extern ulong __realmode_start;
-extern ulong __realmode_size;
-extern char realmode_enter;
+#define REALMODE_MAILBOX ((char *)0xe00)
 
 int realmode_setup(void)
 {
-       ulong realmode_start = (ulong)&__realmode_start + gd->reloc_off;
+       /* The realmode section is not relocated and still in the ROM. */
+       ulong realmode_start = (ulong)&__realmode_start;
        ulong realmode_size = (ulong)&__realmode_size;
 
        /* copy the realmode switch code */
@@ -63,15 +60,14 @@ int enter_realmode(u16 seg, u16 off, struct pt_regs *in, struct pt_regs *out)
 
        in->eip = off;
        in->xcs = seg;
-       if (3>(in->esp & 0xffff)) {
+       if ((in->esp & 0xffff) < 4)
                printf("Warning: entering realmode with sp < 4 will fail\n");
-       }
 
        memcpy(REALMODE_MAILBOX, in, sizeof(struct pt_regs));
        asm("wbinvd\n");
 
        __asm__ volatile (
-                "lcall $0x20,%0\n"  : :  "i" (&realmode_enter) );
+                "lcall $0x20,%0\n" : : "i" (&realmode_enter));
 
        asm("wbinvd\n");
        memcpy(out, REALMODE_MAILBOX, sizeof(struct pt_regs));
@@ -79,9 +75,10 @@ int enter_realmode(u16 seg, u16 off, struct pt_regs *in, struct pt_regs *out)
        return out->eax;
 }
 
-
-/* This code is supposed to access a realmode interrupt
- * it does currently not work for me */
+/*
+ * This code is supposed to access a realmode interrupt
+ * it does currently not work for me
+ */
 int enter_realmode_int(u8 lvl, struct pt_regs *in, struct pt_regs *out)
 {
        /* place two instructions at 0x700 */
@@ -92,5 +89,5 @@ int enter_realmode_int(u8 lvl, struct pt_regs *in, struct pt_regs *out)
 
        enter_realmode(0x00, 0x700, in, out);
 
-       return out->eflags&1;
+       return out->eflags & 0x00000001;
 }
diff --git a/arch/x86/lib/string.c b/arch/x86/lib/string.c
new file mode 100644 (file)
index 0000000..f2ea7e4
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 1991,1992,1993,1997,1998,2003, 2005 Free Software Foundation, Inc.
+ * This file is part of the GNU C Library.
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/* From glibc-2.14, sysdeps/i386/memset.c */
+
+#include <compiler.h>
+#include <asm/string.h>
+#include <linux/types.h>
+
+typedef uint32_t op_t;
+
+void *memset(void *dstpp, int c, size_t len)
+{
+       int d0;
+       unsigned long int dstp = (unsigned long int) dstpp;
+
+       /* This explicit register allocation improves code very much indeed. */
+       register op_t x asm("ax");
+
+       x = (unsigned char) c;
+
+       /* Clear the direction flag, so filling will move forward.  */
+       asm volatile("cld");
+
+       /* This threshold value is optimal.  */
+       if (len >= 12) {
+               /* Fill X with four copies of the char we want to fill with. */
+               x |= (x << 8);
+               x |= (x << 16);
+
+               /* Adjust LEN for the bytes handled in the first loop.  */
+               len -= (-dstp) % sizeof(op_t);
+
+               /*
+                * There are at least some bytes to set. No need to test for
+                * LEN == 0 in this alignment loop.
+                */
+
+               /* Fill bytes until DSTP is aligned on a longword boundary. */
+               asm volatile(
+                       "rep\n"
+                       "stosb" /* %0, %2, %3 */ :
+                       "=D" (dstp), "=c" (d0) :
+                       "0" (dstp), "1" ((-dstp) % sizeof(op_t)), "a" (x) :
+                       "memory");
+
+               /* Fill longwords.  */
+               asm volatile(
+                       "rep\n"
+                       "stosl" /* %0, %2, %3 */ :
+                       "=D" (dstp), "=c" (d0) :
+                       "0" (dstp), "1" (len / sizeof(op_t)), "a" (x) :
+                       "memory");
+               len %= sizeof(op_t);
+       }
+
+       /* Write the last few bytes. */
+       asm volatile(
+               "rep\n"
+               "stosb" /* %0, %2, %3 */ :
+               "=D" (dstp), "=c" (d0) :
+               "0" (dstp), "1" (len), "a" (x) :
+               "memory");
+
+       return dstpp;
+}
index 8b1bde708cafe3a92f7416dee616db66dba5a00f..fd7032e92c9f40e007348aac3a249e5078284b82 100644 (file)
@@ -35,15 +35,15 @@ struct timer_isr_function {
        timer_fnc_t *isr_func;
 };
 
-static struct timer_isr_function *first_timer_isr = NULL;
-static volatile unsigned long system_ticks = 0;
+static struct timer_isr_function *first_timer_isr;
+static unsigned long system_ticks;
 
 /*
  * register_timer_isr() allows multiple architecture and board specific
  * functions to be called every millisecond. Keep the execution time of
  * each function as low as possible
  */
-int register_timer_isr (timer_fnc_t *isr_func)
+int register_timer_isr(timer_fnc_t *isr_func)
 {
        struct timer_isr_function *new_func;
        struct timer_isr_function *temp;
@@ -61,7 +61,7 @@ int register_timer_isr (timer_fnc_t *isr_func)
         *  Don't allow timer interrupts while the
         *  linked list is being modified
         */
-       flag = disable_interrupts ();
+       flag = disable_interrupts();
 
        if (first_timer_isr == NULL) {
                first_timer_isr = new_func;
@@ -73,7 +73,7 @@ int register_timer_isr (timer_fnc_t *isr_func)
        }
 
        if (flag)
-               enable_interrupts ();
+               enable_interrupts();
 
        return 0;
 }
@@ -89,12 +89,12 @@ void timer_isr(void *unused)
 
        /* Execute each registered function */
        while (temp != NULL) {
-               temp->isr_func ();
+               temp->isr_func();
                temp = temp->next;
        }
 }
 
-ulong get_timer (ulong base)
+ulong get_timer(ulong base)
 {
-       return (system_ticks - base);
+       return system_ticks - base;
 }
index 0efcf3f4530b9d58caae839cdfef8fa3c17d921c..3d6b24d6204a67228f93850437013e6df2489c21 100644 (file)
@@ -123,7 +123,7 @@ static void __video_putc(const char c, int *x, int *y)
 
 static void video_putc(const char c)
 {
-       int x,y,pos;
+       int x, y, pos;
 
        x = orig_x;
        y = orig_y;
@@ -142,7 +142,7 @@ static void video_putc(const char c)
 
 static void video_puts(const char *s)
 {
-       int x,y,pos;
+       int x, y, pos;
        char c;
 
        x = orig_x;
@@ -187,7 +187,7 @@ int video_init(void)
        printf("pos %x %d %d\n", pos, orig_x, orig_y);
 #endif
        if (orig_y > lines)
-               orig_x = orig_y =0;
+               orig_x = orig_y = 0;
 
        memset(&vga_dev, 0, sizeof(vga_dev));
        strcpy(vga_dev.name, "vga");
index 7574f771fddd843611875a61be9af843aa285d8c..1e06759d9eb7edcb7cb7ecdbfdd2162bf163c407 100644 (file)
 #include <asm/realmode.h>
 #include <asm/io.h>
 #include <asm/pci.h>
+#include "bios.h"
 
 #undef PCI_BIOS_DEBUG
 #undef VGA_BIOS_DEBUG
 
 #ifdef VGA_BIOS_DEBUG
-#define        PRINTF(fmt,args...)     printf (fmt ,##args)
+#define        PRINTF(fmt, args...)    printf(fmt, ##args)
 #else
-#define PRINTF(fmt,args...)
+#define PRINTF(fmt, args...)
 #endif
 
-#ifdef CONFIG_PCI
+#define PCI_CLASS_VIDEO                        3
+#define PCI_CLASS_VIDEO_STD            0
+#define PCI_CLASS_VIDEO_PROG_IF_VGA    0
 
-#ifdef PCI_BIOS_DEBUG
-#define RELOC_16(seg, off) *(u32*)(seg << 4 | (u32)&off)
-extern u32 num_pci_bios_present;
-extern u32 num_pci_bios_find_device;
-extern u32 num_pci_bios_find_class;
-extern u32 num_pci_bios_generate_special_cycle;
-extern u32 num_pci_bios_read_cfg_byte;
-extern u32 num_pci_bios_read_cfg_word;
-extern u32 num_pci_bios_read_cfg_dword;
-extern u32 num_pci_bios_write_cfg_byte;
-extern u32 num_pci_bios_write_cfg_word;
-extern u32 num_pci_bios_write_cfg_dword;
-extern u32 num_pci_bios_get_irq_routing;
-extern u32 num_pci_bios_set_irq;
-extern u32 num_pci_bios_unknown_function;
-
-void print_bios_bios_stat(void)
-{
-       printf("16 bit functions:\n");
-       printf("pci_bios_present:                %d\n", RELOC_16(0xf000, num_pci_bios_present));
-       printf("pci_bios_find_device:            %d\n", RELOC_16(0xf000, num_pci_bios_find_device));
-       printf("pci_bios_find_class:             %d\n", RELOC_16(0xf000, num_pci_bios_find_class));
-       printf("pci_bios_generate_special_cycle: %d\n", RELOC_16(0xf000, num_pci_bios_generate_special_cycle));
-       printf("pci_bios_read_cfg_byte:          %d\n", RELOC_16(0xf000, num_pci_bios_read_cfg_byte));
-       printf("pci_bios_read_cfg_word:          %d\n", RELOC_16(0xf000, num_pci_bios_read_cfg_word));
-       printf("pci_bios_read_cfg_dword:         %d\n", RELOC_16(0xf000, num_pci_bios_read_cfg_dword));
-       printf("pci_bios_write_cfg_byte:         %d\n", RELOC_16(0xf000, num_pci_bios_write_cfg_byte));
-       printf("pci_bios_write_cfg_word:         %d\n", RELOC_16(0xf000, num_pci_bios_write_cfg_word));
-       printf("pci_bios_write_cfg_dword:        %d\n", RELOC_16(0xf000, num_pci_bios_write_cfg_dword));
-       printf("pci_bios_get_irq_routing:        %d\n", RELOC_16(0xf000, num_pci_bios_get_irq_routing));
-       printf("pci_bios_set_irq:                %d\n", RELOC_16(0xf000, num_pci_bios_set_irq));
-       printf("pci_bios_unknown_function:       %d\n", RELOC_16(0xf000, num_pci_bios_unknown_function));
-
-}
-#endif
-
-#ifdef CONFIG_VIDEO
-
-#define PCI_CLASS_VIDEO             3
-#define PCI_CLASS_VIDEO_STD         0
-#define PCI_CLASS_VIDEO_PROG_IF_VGA 0
-
-static struct pci_device_id supported[] = {
+DEFINE_PCI_DEVICE_TABLE(supported) = {
        {PCI_VIDEO_VENDOR_ID, PCI_VIDEO_DEVICE_ID},
        {}
 };
 
 static u32 probe_pci_video(void)
 {
-       pci_dev_t devbusfn;
+       struct pci_controller *hose;
+       pci_dev_t devbusfn = pci_find_devices(supported, 0);
 
-       if ((devbusfn = pci_find_devices(supported, 0) != -1)) {
+       if ((devbusfn != -1)) {
                u32 old;
                u32 addr;
 
                /* PCI video device detected */
                printf("Found PCI VGA device at %02x.%02x.%x\n",
-                      PCI_BUS(devbusfn), PCI_DEV(devbusfn), PCI_FUNC(devbusfn));
+                      PCI_BUS(devbusfn),
+                      PCI_DEV(devbusfn),
+                      PCI_FUNC(devbusfn));
 
                /* Enable I/O decoding as well, PCI viudeo boards
                 * support I/O accesses, but they provide no
                 * bar register for this since the ports are fixed.
                 */
-               pci_write_config_word(devbusfn, PCI_COMMAND, PCI_COMMAND_MEMORY | PCI_COMMAND_IO | PCI_COMMAND_MASTER);
+               pci_write_config_word(devbusfn,
+                                     PCI_COMMAND,
+                                     PCI_COMMAND_MEMORY |
+                                     PCI_COMMAND_IO |
+                                     PCI_COMMAND_MASTER);
 
                /* Test the ROM decoder, do the device support a rom? */
                pci_read_config_dword(devbusfn, PCI_ROM_ADDRESS, &old);
-               pci_write_config_dword(devbusfn, PCI_ROM_ADDRESS, (u32)PCI_ROM_ADDRESS_MASK);
+               pci_write_config_dword(devbusfn, PCI_ROM_ADDRESS,
+                                      (u32)PCI_ROM_ADDRESS_MASK);
                pci_read_config_dword(devbusfn, PCI_ROM_ADDRESS, &addr);
                pci_write_config_dword(devbusfn, PCI_ROM_ADDRESS, old);
 
@@ -117,13 +86,14 @@ static u32 probe_pci_video(void)
                }
 
                /* device have a rom */
-               if (pci_shadow_rom(devbusfn, (void*)0xc0000)) {
+               if (pci_shadow_rom(devbusfn, (void *)0xc0000)) {
                        printf("Shadowing of PCI VGA BIOS failed\n");
                        return 0;
                }
 
                /* Now enable lagacy VGA port access */
-               if (pci_enable_legacy_video_ports(pci_bus_to_hose(PCI_BUS(devbusfn)))) {
+               hose = pci_bus_to_hose(PCI_BUS(devbusfn));
+               if (pci_enable_legacy_video_ports(hose)) {
                        printf("PCI VGA enable failed\n");
                        return 0;
                }
@@ -131,7 +101,7 @@ static u32 probe_pci_video(void)
 
                /* return the pci device info, that we'll need later */
                return PCI_BUS(devbusfn) << 8 |
-                       PCI_DEV(devbusfn) << 3 | (PCI_FUNC(devbusfn)&7);
+                       PCI_DEV(devbusfn) << 3 | (PCI_FUNC(devbusfn) & 7);
        }
 
        return 0;
@@ -142,13 +112,17 @@ static int probe_isa_video(void)
        u32 ptr;
        char *buf;
 
-       if (0 == (ptr = isa_map_rom(0xc0000, 0x8000))) {
+       ptr = isa_map_rom(0xc0000, 0x8000);
+
+       if (!ptr)
                return -1;
-       }
-       if (NULL == (buf=malloc(0x8000))) {
+
+       buf = malloc(0x8000);
+       if (!buf) {
                isa_unmap_rom(ptr);
                return -1;
        }
+
        if (readw(ptr) != 0xaa55) {
                free(buf);
                isa_unmap_rom(ptr);
@@ -156,9 +130,9 @@ static int probe_isa_video(void)
        }
 
        /* shadow the rom */
-       memcpy(buf, (void*)ptr, 0x8000);
+       memcpy(buf, (void *)ptr, 0x8000);
        isa_unmap_rom(ptr);
-       memcpy((void*)0xc0000, buf, 0x8000);
+       memcpy((void *)0xc0000, buf, 0x8000);
 
        free(buf);
 
@@ -168,35 +142,35 @@ static int probe_isa_video(void)
 int video_bios_init(void)
 {
        struct pt_regs regs;
+       int size;
+       int i;
+       u8 sum;
 
        /* clear the video bios area in case we warmbooted */
-       memset((void*)0xc0000, 0, 0x8000);
+       memset((void *)0xc0000, 0, 0x8000);
        memset(&regs, 0, sizeof(struct pt_regs));
 
-       if (probe_isa_video()) {
+       if (probe_isa_video())
                /* No ISA board found, try the PCI bus */
                regs.eax = probe_pci_video();
-       }
 
        /* Did we succeed in mapping any video bios */
        if (readw(0xc0000) == 0xaa55) {
-               int size;
-               int i;
-               u8 sum;
-
                PRINTF("Found video bios signature\n");
-               size = 512*readb(0xc0002);
+               size = readb(0xc0002) * 512;
                PRINTF("size %d\n", size);
-               sum=0;
-               for (i=0;i<size;i++) {
+               sum = 0;
+
+               for (i = 0; i < size; i++)
                        sum += readb(0xc0000 + i);
-               }
-               PRINTF("Checksum is %sOK\n",sum?"NOT ":"");
-               if (sum) {
+
+               PRINTF("Checksum is %sOK\n", sum ? "NOT " : "");
+
+               if (sum)
                        return 1;
-               }
 
-               /* some video bioses (ATI Mach64) seem to think that
+               /*
+                * Some video bioses (ATI Mach64) seem to think that
                 * the original int 10 handler is always at
                 * 0xf000:0xf065 , place an iret instruction there
                 */
@@ -205,18 +179,18 @@ int video_bios_init(void)
                regs.esp = 0x8000;
                regs.xss = 0x2000;
                enter_realmode(0xc000, 3, &regs, &regs);
+
                PRINTF("INT 0x10 vector after:  %04x:%04x\n",
                       readw(0x42), readw(0x40));
-               PRINTF("BIOS returned %scarry\n", regs.eflags & 1?"":"NOT ");
+               PRINTF("BIOS returned %scarry\n",
+                      regs.eflags & 0x00000001 ? "" : "NOT ");
 #ifdef PCI_BIOS_DEBUG
                print_bios_bios_stat();
 #endif
-               return (regs.eflags & 1);
+               return regs.eflags & 0x00000001;
 
        }
 
        return 1;
 
 }
-#endif
-#endif
index d2dd6fd4493788c7920f3b5b5fdede07cab62731..8b42b5cafa1ba39d4b67b205c94b8ce7a6a97c09 100644 (file)
  *     0x8000-0x8FFF   Stack and heap
  *     0x9000-0x90FF   Kernel command line
  */
-#define DEFAULT_SETUP_BASE  0x90000
-#define COMMAND_LINE_OFFSET 0x9000
-#define HEAP_END_OFFSET     0x8e00
+#define DEFAULT_SETUP_BASE     0x90000
+#define COMMAND_LINE_OFFSET    0x9000
+#define HEAP_END_OFFSET                0x8e00
 
-#define COMMAND_LINE_SIZE   2048
+#define COMMAND_LINE_SIZE      2048
 
 static void build_command_line(char *command_line, int auto_boot)
 {
@@ -60,23 +60,20 @@ static void build_command_line(char *command_line, int auto_boot)
        env_command_line =  getenv("bootargs");
 
        /* set console= argument if we use a serial console */
-       if (NULL == strstr(env_command_line, "console=")) {
-               if (0==strcmp(getenv("stdout"), "serial")) {
+       if (!strstr(env_command_line, "console=")) {
+               if (!strcmp(getenv("stdout"), "serial")) {
 
                        /* We seem to use serial console */
                        sprintf(command_line, "console=ttyS0,%s ",
-                                getenv("baudrate"));
+                               getenv("baudrate"));
                }
        }
 
-       if (auto_boot) {
+       if (auto_boot)
                strcat(command_line, "auto ");
-       }
 
-       if (NULL != env_command_line) {
+       if (env_command_line)
                strcat(command_line, env_command_line);
-       }
-
 
        printf("Kernel command line: \"%s\"\n", command_line);
 }
@@ -90,14 +87,16 @@ void *load_zimage(char *image, unsigned long kernel_size,
        int bootproto;
        int big_image;
        void *load_address;
+       struct setup_header *hdr;
 
-       struct setup_header *hdr = (struct setup_header *)(image + SETUP_SECTS_OFF);
+       hdr = (struct setup_header *)(image + SETUP_SECTS_OFF);
 
-       setup_base = (void*)DEFAULT_SETUP_BASE; /* base address for real-mode segment */
+       /* base address for real-mode segment */
+       setup_base = (void *)DEFAULT_SETUP_BASE;
 
        if (KERNEL_MAGIC != hdr->boot_flag) {
                printf("Error: Invalid Boot Flag (found 0x%04x, expected 0x%04x)\n",
-                               hdr->boot_flag, KERNEL_MAGIC);
+                      hdr->boot_flag, KERNEL_MAGIC);
                return 0;
        } else {
                printf("Valid Boot Flag\n");
@@ -124,43 +123,50 @@ void *load_zimage(char *image, unsigned long kernel_size,
 
        printf("Setup Size = 0x%8.8lx\n", (ulong)setup_size);
 
-       if (setup_size > SETUP_MAX_SIZE) {
+       if (setup_size > SETUP_MAX_SIZE)
                printf("Error: Setup is too large (%d bytes)\n", setup_size);
-       }
 
        /* Determine image type */
-       big_image = (bootproto >= 0x0200) && (hdr->loadflags & BIG_KERNEL_FLAG);
+       big_image = (bootproto >= 0x0200) &&
+                   (hdr->loadflags & BIG_KERNEL_FLAG);
 
        /* Determine load address */
-       load_address = (void*)(big_image ? BZIMAGE_LOAD_ADDR : ZIMAGE_LOAD_ADDR);
+       load_address = (void *)(big_image ?
+                               BZIMAGE_LOAD_ADDR :
+                               ZIMAGE_LOAD_ADDR);
 
        /* load setup */
-       printf("Moving Real-Mode Code to 0x%8.8lx (%d bytes)\n", (ulong)setup_base, setup_size);
+       printf("Moving Real-Mode Code to 0x%8.8lx (%d bytes)\n",
+              (ulong)setup_base, setup_size);
        memmove(setup_base, image, setup_size);
 
        printf("Using boot protocol version %x.%02x\n",
               (bootproto & 0xff00) >> 8, bootproto & 0xff);
 
        if (bootproto == 0x0100) {
+               *(u16 *)(setup_base + CMD_LINE_MAGIC_OFF) = COMMAND_LINE_MAGIC;
+               *(u16 *)(setup_base + CMD_LINE_OFFSET_OFF) = COMMAND_LINE_OFFSET;
 
-               *(u16*)(setup_base + CMD_LINE_MAGIC_OFF) = COMMAND_LINE_MAGIC;
-               *(u16*)(setup_base + CMD_LINE_OFFSET_OFF) = COMMAND_LINE_OFFSET;
-
-               /* A very old kernel MUST have its real-mode code
-                * loaded at 0x90000 */
-
+               /*
+                * A very old kernel MUST have its real-mode code
+                * loaded at 0x90000
+                */
                if ((u32)setup_base != 0x90000) {
                        /* Copy the real-mode kernel */
-                       memmove((void*)0x90000, setup_base, setup_size);
+                       memmove((void *)0x90000, setup_base, setup_size);
+
                        /* Copy the command line */
-                       memmove((void*)0x99000, setup_base+COMMAND_LINE_OFFSET,
-                              COMMAND_LINE_SIZE);
+                       memmove((void *)0x99000,
+                               setup_base + COMMAND_LINE_OFFSET,
+                               COMMAND_LINE_SIZE);
 
-                       setup_base = (void*)0x90000;             /* Relocated */
+                        /* Relocated */
+                       setup_base = (void *)0x90000;
                }
 
                /* It is recommended to clear memory up to the 32K mark */
-               memset((void*)0x90000 + setup_size, 0, SETUP_MAX_SIZE-setup_size);
+               memset((void *)0x90000 + setup_size, 0,
+                      SETUP_MAX_SIZE-setup_size);
        }
 
        /* We are now setting up the real-mode version of the header */
@@ -170,8 +176,9 @@ void *load_zimage(char *image, unsigned long kernel_size,
                hdr->type_of_loader = 8;
 
                if (hdr->setup_sects >= 15)
-                       printf("Linux kernel version %s\n", (char *)
-                                       (setup_base + (hdr->kernel_version + 0x200)));
+                       printf("Linux kernel version %s\n",
+                              (char *)(setup_base +
+                                       (hdr->kernel_version + 0x200)));
                else
                        printf("Setup Sectors < 15 - Cannot print kernel version.\n");
 
@@ -193,8 +200,8 @@ void *load_zimage(char *image, unsigned long kernel_size,
                hdr->cmd_line_ptr = (u32)setup_base + COMMAND_LINE_OFFSET;
        } else if (bootproto >= 0x0200) {
 
-               *(u16*)(setup_base + CMD_LINE_MAGIC_OFF) = COMMAND_LINE_MAGIC;
-               *(u16*)(setup_base + CMD_LINE_OFFSET_OFF) = COMMAND_LINE_OFFSET;
+               *(u16 *)(setup_base + CMD_LINE_MAGIC_OFF) = COMMAND_LINE_MAGIC;
+               *(u16 *)(setup_base + CMD_LINE_OFFSET_OFF) = COMMAND_LINE_OFFSET;
 
                hdr->setup_move_size = 0x9100;
        }
@@ -221,8 +228,8 @@ void *load_zimage(char *image, unsigned long kernel_size,
        /* build command line at COMMAND_LINE_OFFSET */
        build_command_line(setup_base + COMMAND_LINE_OFFSET, auto_boot);
 
-       printf("Loading %czImage at address 0x%08x (%ld bytes)\n", big_image ? 'b' : ' ',
-              (u32)load_address, kernel_size);
+       printf("Loading %czImage at address 0x%08x (%ld bytes)\n",
+              big_image ? 'b' : ' ', (u32)load_address, kernel_size);
 
 
        memmove(load_address, image + setup_size, kernel_size);
@@ -241,10 +248,11 @@ void boot_zimage(void *setup_base)
        regs.xss = regs.xds;
        regs.esp = 0x9000;
        regs.eflags = 0;
-       enter_realmode(((u32)setup_base+SETUP_START_OFFSET)>>4, 0, &regs, &regs);
+       enter_realmode(((u32)setup_base+SETUP_START_OFFSET)>>4, 0, &regs,
+                      &regs);
 }
 
-int do_zboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_zboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 {
        void *base_ptr;
        void *bzImage_addr = NULL;
@@ -270,12 +278,12 @@ int do_zboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                bzImage_size = simple_strtoul(argv[2], NULL, 16);
 
        /* Lets look for*/
-       base_ptr = load_zimage (bzImage_addr, bzImage_size, 0, 0, 0);
+       base_ptr = load_zimage(bzImage_addr, bzImage_size, 0, 0, 0);
 
-       if (NULL == base_ptr) {
-               printf ("## Kernel loading failed ...\n");
+       if (!base_ptr) {
+               printf("## Kernel loading failed ...\n");
        } else {
-               printf ("## Transferring control to Linux (at address %08x) ...\n",
+               printf("## Transferring control to Linux (at address %08x) ...\n",
                        (u32)base_ptr);
 
                /* we assume that the kernel is in place */
similarity index 78%
rename from board/cradle/Makefile
rename to board/AndesTech/adp-ag101p/Makefile
index bdc91d89f712e2cf5dd1202f872efea713fe44d3..03c3ff41e8f918c2152a9ba9cfc0d147e841e71b 100644 (file)
@@ -1,6 +1,7 @@
 #
-# (C) Copyright 2000-2006
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+# Copyright (C) 2011 Andes Technology Corporation
+# Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
+# Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
 #
 # See file CREDITS for list of people who contributed to this
 # project.
@@ -25,12 +26,12 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := cradle.o flash.o
+COBJS  := adp-ag101p.o
 
-SRCS   := $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
 
-$(LIB):        $(obj).depend $(OBJS)
+$(LIB):        $(OBJS)
        $(call cmd_link_o_target, $(OBJS))
 
 #########################################################################
diff --git a/board/AndesTech/adp-ag101p/adp-ag101p.c b/board/AndesTech/adp-ag101p/adp-ag101p.c
new file mode 100644 (file)
index 0000000..8dd2043
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <common.h>
+#include <netdev.h>
+#include <asm/io.h>
+
+#include <faraday/ftsdc010.h>
+#include <faraday/ftsmc020.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Miscellaneous platform dependent initializations
+ */
+
+int board_init(void)
+{
+       /*
+        * refer to BOOT_PARAMETER_PA_BASE within
+        * "linux/arch/nds32/include/asm/misc_spec.h"
+        */
+       gd->bd->bi_arch_number = MACH_TYPE_ADPAG101P;
+       gd->bd->bi_boot_params = PHYS_SDRAM_0 + 0x400;
+
+       ftsmc020_init();        /* initialize Flash */
+       return 0;
+}
+
+int dram_init(void)
+{
+       unsigned long sdram_base = PHYS_SDRAM_0;
+       unsigned long expected_size = PHYS_SDRAM_0_SIZE;
+       unsigned long actual_size;
+
+       actual_size = get_ram_size((void *)sdram_base, expected_size);
+
+       gd->ram_size = actual_size;
+
+       if (expected_size != actual_size) {
+               printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
+                               actual_size >> 20, expected_size >> 20);
+       }
+
+       return 0;
+}
+
+int board_eth_init(bd_t *bd)
+{
+       return ftmac100_initialize(bd);
+}
+
+ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info)
+{
+       if (banknum == 0) {     /* non-CFI boot flash */
+               info->portwidth = FLASH_CFI_8BIT;
+               info->chipwidth = FLASH_CFI_BY8;
+               info->interface = FLASH_CFI_X8;
+               return 1;
+       } else {
+               return 0;
+       }
+}
+
+int board_mmc_init(bd_t *bis)
+{
+       ftsdc010_mmc_init(0);
+       return 0;
+}
index 64f4b57f1bb63566ca772cd6f6ba60152d4f8cfa..34ede87ff447cff803b8b94f211b6a7a7c16d5ac 100644 (file)
@@ -160,7 +160,7 @@ static void board_setup_sdram(void)
        writel(0x2000, &esdc->esdctl0);
        writel(0x2000, &esdc->esdctl1);
 
-       board_setup_sdram_bank(CSD1_BASE_ADDR);
+       board_setup_sdram_bank(CSD0_BASE_ADDR);
 }
 
 static void setup_iomux_uart3(void)
@@ -229,7 +229,7 @@ int board_early_init_f(void)
                (struct ccm_regs *)IMX_CCM_BASE;
 
        /* setup GPIO3_1 to set HighVCore signal */
-       mxc_request_iomux(MX35_PIN_ATA_DATA1, MUX_CONFIG_ALT5);
+       mxc_request_iomux(MX35_PIN_ATA_DA1, MUX_CONFIG_ALT5);
        gpio_direction_output(65, 1);
 
        /* initialize PLL and clock configuration */
diff --git a/board/LaCie/common/common.c b/board/LaCie/common/common.c
new file mode 100644 (file)
index 0000000..dc5350d
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <miiphy.h>
+
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
+
+#define MV88E1116_LED_FCTRL_REG                10
+#define MV88E1116_CPRSP_CR3_REG                21
+#define MV88E1116_MAC_CTRL_REG         21
+#define MV88E1116_PGADR_REG            22
+#define MV88E1116_RGMII_TXTM_CTRL      (1 << 4)
+#define MV88E1116_RGMII_RXTM_CTRL      (1 << 5)
+
+void mv_phy_88e1116_init(const char *name)
+{
+       u16 reg;
+       u16 devadr;
+
+       if (miiphy_set_current_dev(name))
+               return;
+
+       /* command to read PHY dev address */
+       if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
+               printf("Err..(%s) could not read PHY dev address\n", __func__);
+               return;
+       }
+
+       /*
+        * Enable RGMII delay on Tx and Rx for CPU port
+        * Ref: sec 4.7.2 of chip datasheet
+        */
+       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
+       miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
+       reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
+       miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
+       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
+
+       /* reset the phy */
+       miiphy_reset(name, devadr);
+
+       printf("88E1116 Initialized on %s\n", name);
+}
+#endif /* CONFIG_CMD_NET && CONFIG_RESET_PHY_R */
+
+#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
+int lacie_read_mac_address(uchar *mac_addr)
+{
+       int ret;
+       ushort version;
+
+       /* I2C-0 for on-board EEPROM */
+       i2c_set_bus_num(0);
+
+       /* Check layout version for EEPROM data */
+       ret = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0,
+                       CONFIG_SYS_I2C_EEPROM_ADDR_LEN,
+                       (uchar *) &version, 2);
+       if (ret != 0) {
+               printf("Error: failed to read I2C EEPROM @%02x\n",
+                       CONFIG_SYS_I2C_EEPROM_ADDR);
+               return ret;
+       }
+       version = be16_to_cpu(version);
+       if (version < 1 || version > 3) {
+               printf("Error: unknown version %d for EEPROM data\n",
+                       version);
+               return -1;
+       }
+
+       /* Read Ethernet MAC address from EEPROM */
+       ret = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 2,
+                       CONFIG_SYS_I2C_EEPROM_ADDR_LEN, mac_addr, 6);
+       if (ret != 0)
+               printf("Error: failed to read I2C EEPROM @%02x\n",
+                       CONFIG_SYS_I2C_EEPROM_ADDR);
+       return ret;
+}
+#endif /* CONFIG_CMD_I2C && CONFIG_SYS_I2C_EEPROM_ADDR */
diff --git a/board/LaCie/common/common.h b/board/LaCie/common/common.h
new file mode 100644 (file)
index 0000000..82a9522
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ */
+
+#ifndef _LACIE_COMMON_H
+#define _LACIE_COMMON_H
+
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
+void mv_phy_88e1116_init(const char *name);
+#endif
+#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
+int lacie_read_mac_address(uchar *mac);
+#endif
+
+#endif /* _LACIE_COMMON_H */
index 00a255d5f5d86c407837bd492329b818ca1705ab..c8d45f46fe07f327ac275fa0ed0e8395a6575b33 100644 (file)
 #
 
 include $(TOPDIR)/config.mk
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := edminiv2.o
+COBJS  := edminiv2.o ../common/common.o
 
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
index ee26893328197b045163fbb2a5bb3e84b9308f87..c1a01bc6139fb9fefdc537a04c08f98539bde09b 100644 (file)
@@ -27,7 +27,6 @@
 #include <common.h>
 #include <miiphy.h>
 #include <asm/arch/orion5x.h>
-#include "edminiv2.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -96,33 +95,6 @@ int board_init(void)
 /* Configure and enable MV88E1116 PHY */
 void reset_phy(void)
 {
-       u16 reg;
-       u16 devadr;
-       char *name = "egiga0";
-
-       if (miiphy_set_current_dev(name))
-               return;
-
-       /* command to read PHY dev address */
-       if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
-               printf("Err..%s could not read PHY dev address\n",
-                       __func__);
-               return;
-       }
-
-       /*
-        * Enable RGMII delay on Tx and Rx for CPU port
-        * Ref: sec 4.7.2 of chip datasheet
-        */
-       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
-       miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
-       reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
-       miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
-       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
-
-       /* reset the phy */
-       miiphy_reset(name, devadr);
-
-       printf("88E1116 Initialized on %s\n", name);
+       mv_phy_88e1116_init("egiga0");
 }
 #endif /* CONFIG_RESET_PHY_R */
diff --git a/board/LaCie/net2big_v2/Makefile b/board/LaCie/net2big_v2/Makefile
new file mode 100644 (file)
index 0000000..fbae48e
--- /dev/null
@@ -0,0 +1,52 @@
+#
+# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
+#
+# Based on Kirkwood support:
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Written-by: Prafulla Wadaskar <prafulla@marvell.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.
+#
+
+include $(TOPDIR)/config.mk
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif
+
+LIB    = $(obj)lib$(BOARD).o
+
+COBJS  := $(BOARD).o ../common/common.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/LaCie/net2big_v2/kwbimage.cfg b/board/LaCie/net2big_v2/kwbimage.cfg
new file mode 100644 (file)
index 0000000..8d9f153
--- /dev/null
@@ -0,0 +1,162 @@
+#
+# Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
+#
+# Based on Kirkwood support:
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Written-by: Prafulla Wadaskar <prafulla@marvell.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.
+#
+# Refer docs/README.kwimage for more details about how-to configure
+# and create kirkwood boot image
+#
+
+# Boot Media configurations
+BOOT_FROM      spi     # Boot from SPI flash
+
+# SOC registers configuration using bootrom header extension
+# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
+
+# Configure RGMII-0 interface pad voltage to 1.8V
+DATA 0xFFD100e0 0x1B1B1B9B
+
+#Dram initalization for SINGLE x16 CL=5 @ 400MHz
+DATA 0xFFD01400 0x43000C30     # DDR Configuration register
+# bit13-0:  0xa00 (2560 DDR2 clks refresh rate)
+# bit23-14: zero
+# bit24: 1= enable exit self refresh mode on DDR access
+# bit25: 1 required
+# bit29-26: zero
+# bit31-30: 01
+
+DATA 0xFFD01404 0x38743000     # DDR Controller Control Low
+# bit 4:    0=addr/cmd in smame cycle
+# bit 5:    0=clk is driven during self refresh, we don't care for APX
+# bit 6:    0=use recommended falling edge of clk for addr/cmd
+# bit14:    0=input buffer always powered up
+# bit18:    1=cpu lock transaction enabled
+# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
+# bit27-24: 8= CL+3, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
+# bit30-28: 3 required
+# bit31:    0=no additional STARTBURST delay
+
+DATA 0xFFD01408 0x22125451     # DDR Timing (Low) (active cycles value +1)
+# bit7-4:   TRCD
+# bit11- 8: TRP
+# bit15-12: TWR
+# bit19-16: TWTR
+# bit20:    TRAS msb
+# bit23-21: 0x0
+# bit27-24: TRRD
+# bit31-28: TRTP
+
+DATA 0xFFD0140C 0x00000A32     #  DDR Timing (High)
+# bit6-0:   TRFC
+# bit8-7:   TR2R
+# bit10-9:  TR2W
+# bit12-11: TW2W
+# bit31-13: zero required
+
+DATA 0xFFD01410 0x0000CCCC     #  DDR Address Control
+# bit1-0:   01, Cs0width=x16
+# bit3-2:   11, Cs0size=1Gb
+# bit5-4:   00, Cs2width=nonexistent
+# bit7-6:   00, Cs1size =nonexistent
+# bit9-8:   00, Cs2width=nonexistent
+# bit11-10: 00, Cs2size =nonexistent
+# bit13-12: 00, Cs3width=nonexistent
+# bit15-14: 00, Cs3size =nonexistent
+# bit16:    0,  Cs0AddrSel
+# bit17:    0,  Cs1AddrSel
+# bit18:    0,  Cs2AddrSel
+# bit19:    0,  Cs3AddrSel
+# bit31-20: 0 required
+
+DATA 0xFFD01414 0x00000000     #  DDR Open Pages Control
+# bit0:    0,  OpenPage enabled
+# bit31-1: 0 required
+
+DATA 0xFFD01418 0x00000000     #  DDR Operation
+# bit3-0:   0x0, DDR cmd
+# bit31-4:  0 required
+
+DATA 0xFFD0141C 0x00000662     #  DDR Mode
+# bit2-0:   2, BurstLen=2 required
+# bit3:     0, BurstType=0 required
+# bit6-4:   4, CL=5
+# bit7:     0, TestMode=0 normal
+# bit8:     0, DLL reset=0 normal
+# bit11-9:  6, auto-precharge write recovery ????????????
+# bit12:    0, PD must be zero
+# bit31-13: 0 required
+
+DATA 0xFFD01420 0x00000044     #  DDR Extended Mode
+# bit0:    0,  DDR DLL enabled
+# bit1:    1,  DDR drive strenght reduced
+# bit2:    1,  DDR ODT control lsd enabled
+# bit5-3:  000, required
+# bit6:    1,  DDR ODT control msb, enabled
+# bit9-7:  000, required
+# bit10:   0,  differential DQS enabled
+# bit11:   0, required
+# bit12:   0, DDR output buffer enabled
+# bit31-13: 0 required
+
+DATA 0xFFD01424 0x0000F17F     #  DDR Controller Control High
+# bit2-0:  111, required
+# bit3  :  1  , MBUS Burst Chop disabled
+# bit6-4:  111, required
+# bit7  :  1  , D2P Latency enabled
+# bit8  :  1  , add writepath sample stage, must be 1 for DDR freq >= 300MHz
+# bit9  :  0  , no half clock cycle addition to dataout
+# bit10 :  0  , 1/4 clock cycle skew enabled for addr/ctl signals
+# bit11 :  0  , 1/4 clock cycle skew disabled for write mesh
+# bit15-12: 1111 required
+# bit31-16: 0    required
+
+DATA 0xFFD01428 0x00096630     # DDR2 ODT Read Timing (default values)
+DATA 0xFFD0147C 0x00009663     # DDR2 ODT Write Timing (default values)
+
+DATA 0xFFD01500 0x00000000     # CS[0]n Base address to 0x0
+DATA 0xFFD01504 0x0FFFFFF1     # CS[0]n Size
+# bit0:    1,  Window enabled
+# bit1:    0,  Write Protect disabled
+# bit3-2:  00, CS0 hit selected
+# bit23-4: ones, required
+# bit31-24: 0x07, Size (i.e. 128MB)
+
+DATA 0xFFD0150C 0x00000000     # CS[1]n Size, window disabled
+DATA 0xFFD01514 0x00000000     # CS[2]n Size, window disabled
+DATA 0xFFD0151C 0x00000000     # CS[3]n Size, window disabled
+
+DATA 0xFFD01494 0x00010000     #  DDR ODT Control (Low)
+# bit3-0:  1, ODT0Rd, MODT[0] asserted during read from DRAM CS0
+# bit19-16:1, ODT0Wr, MODT[0] asserted during write to DRAM CS0
+
+DATA 0xFFD01498 0x00000000     #  DDR ODT Control (High)
+# bit1-0:  00, ODT0 controlled by ODT Control (low) register above
+# bit3-2:  01, ODT1 active NEVER!
+# bit31-4: zero, required
+
+DATA 0xFFD0149C 0x0000E40F     # CPU ODT Control
+# bit3-0:  1, ODT0Rd, Internal ODT asserted during read from DRAM bank0
+# bit7-4:  1, ODT0Wr, Internal ODT asserted during write to DRAM bank0
+# bit11-10:1, DQ_ODTSel. ODT select turned on
+
+DATA 0xFFD01480 0x00000001     # DDR Initialization Control
+#bit0=1, enable DDR init upon this register write
+
+# End of Header extension
+DATA 0x0 0x0
diff --git a/board/LaCie/net2big_v2/net2big_v2.c b/board/LaCie/net2big_v2/net2big_v2.c
new file mode 100644 (file)
index 0000000..d0b4adf
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
+ *
+ * Based on Kirkwood support:
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.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.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/kirkwood.h>
+#include <asm/arch/mpp.h>
+#include <asm/arch/gpio.h>
+
+#include "net2big_v2.h"
+#include "../common/common.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_early_init_f(void)
+{
+       /* GPIO configuration */
+       kw_config_gpio(NET2BIG_V2_OE_VAL_LOW, NET2BIG_V2_OE_VAL_HIGH,
+                       NET2BIG_V2_OE_LOW, NET2BIG_V2_OE_HIGH);
+
+       /* Multi-Purpose Pins Functionality configuration */
+       u32 kwmpp_config[] = {
+               MPP0_SPI_SCn,
+               MPP1_SPI_MOSI,
+               MPP2_SPI_SCK,
+               MPP3_SPI_MISO,
+               MPP6_SYSRST_OUTn,
+               MPP7_GPO,               /* Request power-off */
+               MPP8_TW_SDA,
+               MPP9_TW_SCK,
+               MPP10_UART0_TXD,
+               MPP11_UART0_RXD,
+               MPP13_GPIO,             /* Rear power switch (on|auto) */
+               MPP14_GPIO,             /* USB fuse alarm */
+               MPP15_GPIO,             /* Rear power switch (auto|off) */
+               MPP16_GPIO,             /* SATA HDD1 power */
+               MPP17_GPIO,             /* SATA HDD2 power */
+               MPP20_SATA1_ACTn,
+               MPP21_SATA0_ACTn,
+               MPP24_GPIO,             /* USB mode select */
+               MPP26_GPIO,             /* USB device vbus */
+               MPP28_GPIO,             /* USB enable host vbus */
+               MPP29_GPIO,             /* GPIO extension ALE */
+               MPP34_GPIO,             /* Rear Push button 0=on 1=off */
+               MPP35_GPIO,             /* Inhibit switch power-off */
+               MPP36_GPIO,             /* SATA HDD1 presence */
+               MPP37_GPIO,             /* SATA HDD2 presence */
+               MPP40_GPIO,             /* eSATA presence */
+               MPP44_GPIO,             /* GPIO extension (data 0) */
+               MPP45_GPIO,             /* GPIO extension (data 1) */
+               MPP46_GPIO,             /* GPIO extension (data 2) */
+               MPP47_GPIO,             /* GPIO extension (addr 0) */
+               MPP48_GPIO,             /* GPIO extension (addr 1) */
+               MPP49_GPIO,             /* GPIO extension (addr 2) */
+               0
+       };
+
+       kirkwood_mpp_conf(kwmpp_config);
+
+       return 0;
+}
+
+int board_init(void)
+{
+       /* Machine number */
+       gd->bd->bi_arch_number = MACH_TYPE_NET2BIG_V2;
+
+       /* Boot parameters address */
+       gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
+
+       return 0;
+}
+
+#if defined(CONFIG_MISC_INIT_R)
+int misc_init_r(void)
+{
+#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
+       if (!getenv("ethaddr")) {
+               uchar mac[6];
+               if (lacie_read_mac_address(mac) == 0)
+                       eth_setenv_enetaddr("ethaddr", mac);
+       }
+#endif
+       return 0;
+}
+#endif
+
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
+/* Configure and initialize PHY */
+void reset_phy(void)
+{
+       mv_phy_88e1116_init("egiga0");
+}
+#endif
+
+#if defined(CONFIG_KIRKWOOD_GPIO)
+/* Return GPIO push button status */
+static int
+do_read_push_button(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       return !kw_gpio_get_value(NET2BIG_V2_GPIO_PUSH_BUTTON);
+}
+
+U_BOOT_CMD(button, 1, 1, do_read_push_button,
+          "Return GPIO push button status 0=off 1=on", "");
+#endif
similarity index 50%
rename from board/LaCie/edminiv2/edminiv2.h
rename to board/LaCie/net2big_v2/net2big_v2.h
index 88e62b229c3bec6d1392443335bd0904860f951f..f9778f4f0cd6b8e215e77463f57173bccfe829ed 100644 (file)
@@ -1,9 +1,7 @@
 /*
- * (C) Copyright 2009
- * Net Insight <www.netinsight.net>
- * Written-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
+ * Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
  *
- * Based on sheevaplug.h:
+ * Based on Kirkwood support:
  * (C) Copyright 2009
  * Marvell Semiconductor <www.marvell.com>
  * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
  */
 
-#ifndef __EDMINIV2_BASE_H
-#define __EDMINIV2_BASE_H
+#ifndef NET2BIG_V2_H
+#define NET2BIG_V2_H
+
+/* GPIO configuration */
+#define NET2BIG_V2_OE_LOW              0x0600E000
+#define NET2BIG_V2_OE_HIGH             0x00000134
+#define NET2BIG_V2_OE_VAL_LOW          0x10030000
+#define NET2BIG_V2_OE_VAL_HIGH         0x00000000
 
-/* PHY related */
-#define MV88E1116_LED_FCTRL_REG                10
-#define MV88E1116_CPRSP_CR3_REG                21
-#define MV88E1116_MAC_CTRL_REG         21
-#define MV88E1116_PGADR_REG            22
-#define MV88E1116_RGMII_TXTM_CTRL      (1 << 4)
-#define MV88E1116_RGMII_RXTM_CTRL      (1 << 5)
+/* Buttons */
+#define NET2BIG_V2_GPIO_PUSH_BUTTON    34
 
-#endif /* __EDMINIV2_BASE_H */
+#endif /* NET2BIG_V2_H */
index d4a613fb6dc60de488f4603f2865950ae88e0452..b43c3d3bfedf96840b4f0ba95f397d6608c519ba 100644 (file)
 #
 
 include $(TOPDIR)/config.mk
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := netspace_v2.o
+COBJS  := $(BOARD).o ../common/common.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
index 7c4b15ec477a9f1807e6072d7e1b9b26802cda75..fbf020fde11b4b89f391f4af43ed75e12d7e7cf3 100644 (file)
  */
 
 #include <common.h>
-#include <miiphy.h>
-#include <netdev.h>
 #include <command.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/kirkwood.h>
 #include <asm/arch/mpp.h>
 #include <asm/arch/gpio.h>
+
 #include "netspace_v2.h"
+#include "../common/common.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -89,49 +89,29 @@ int board_init(void)
        return 0;
 }
 
-void mv_phy_88e1116_init(char *name)
+#if defined(CONFIG_MISC_INIT_R)
+int misc_init_r(void)
 {
-       u16 reg;
-       u16 devadr;
-
-       if (miiphy_set_current_dev(name))
-               return;
-
-       /* command to read PHY dev address */
-       if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
-               printf("Err..(%s) could not read PHY dev address\n", __func__);
-               return;
+#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
+       if (!getenv("ethaddr")) {
+               uchar mac[6];
+               if (lacie_read_mac_address(mac) == 0)
+                       eth_setenv_enetaddr("ethaddr", mac);
        }
-
-       /*
-        * Enable RGMII delay on Tx and Rx for CPU port
-        * Ref: sec 4.7.2 of chip datasheet
-        */
-       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
-       miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
-       reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
-       miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
-       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
-
-       /* reset the phy */
-       if (miiphy_read(name, devadr, MII_BMCR, &reg) != 0) {
-               printf("Err..(%s) PHY status read failed\n", __func__);
-               return;
-       }
-       if (miiphy_write(name, devadr, MII_BMCR, reg | 0x8000) != 0) {
-               printf("Err..(%s) PHY reset failed\n", __func__);
-               return;
-       }
-
-       debug("88E1116 Initialized on %s\n", name);
+#endif
+       return 0;
 }
+#endif
 
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
 /* Configure and initialize PHY */
 void reset_phy(void)
 {
        mv_phy_88e1116_init("egiga0");
 }
+#endif
 
+#if defined(CONFIG_KIRKWOOD_GPIO)
 /* Return GPIO button status */
 static int
 do_read_button(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
@@ -141,3 +121,4 @@ do_read_button(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 U_BOOT_CMD(button, 1, 1, do_read_button,
           "Return GPIO button status 0=off 1=on", "");
+#endif
index 3f3d51ccd750c0f96310d6459b7c0636bee17278..34e492c77ec29961bd1796e339a53a25b20a8f2e 100644 (file)
 
 #define NETSPACE_V2_GPIO_BUTTON         32
 
-/* PHY related */
-#define MV88E1116_LED_FCTRL_REG                10
-#define MV88E1116_CPRSP_CR3_REG                21
-#define MV88E1116_MAC_CTRL_REG         21
-#define MV88E1116_PGADR_REG            22
-#define MV88E1116_RGMII_TXTM_CTRL      (1 << 4)
-#define MV88E1116_RGMII_RXTM_CTRL      (1 << 5)
-
 #endif /* NETSPACE_V2_H */
index 35b695e86204c3db80e55edb18a631123b612849..5183466474d259b6a7949263a7b91b48fdf83820 100644 (file)
@@ -34,6 +34,7 @@
 #include "../include/mv_gen_reg.h"
 #include <net.h>
 #include <netdev.h>
+#include <linux/compiler.h>
 
 #include "eth.h"
 #include "mpsc.h"
@@ -410,7 +411,7 @@ int checkboard (void)
 void debug_led (int led, int mode)
 {
        volatile int *addr = 0;
-       int dummy;
+       __maybe_unused int dummy;
 
        if (mode == 1) {
                switch (led) {
index 30304b03248bfebaf3f44066655aadf21ac14b64..6340585e8509b4383a5b9babfb0d2da460da2d6e 100644 (file)
@@ -421,7 +421,7 @@ static int mv64360_eth_real_open (struct eth_device *dev)
        ETH_PORT_INFO *ethernet_private;
        struct mv64360_eth_priv *port_private;
        unsigned int port_num;
-       u32 port_status, phy_reg_data;
+       u32 phy_reg_data;
 
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        /* ronen - when we update the MAC env params we only update dev->enetaddr
@@ -519,7 +519,7 @@ static int mv64360_eth_real_open (struct eth_device *dev)
         */
 
        MV_REG_WRITE (MV64360_ETH_MAXIMUM_TRANSMIT_UNIT (port_num), 0);
-       port_status = MV_REG_READ (MV64360_ETH_PORT_STATUS_REG (port_num));
+       MV_REG_READ (MV64360_ETH_PORT_STATUS_REG (port_num));
 
        /* Check Link status on phy */
        eth_port_read_smi_reg (port_num, 1, &phy_reg_data);
@@ -637,15 +637,6 @@ static int mv64360_eth_free_rx_rings (struct eth_device *dev)
 
 int mv64360_eth_stop (struct eth_device *dev)
 {
-       ETH_PORT_INFO *ethernet_private;
-       struct mv64360_eth_priv *port_private;
-       unsigned int port_num;
-
-       ethernet_private = (ETH_PORT_INFO *) dev->priv;
-       port_private =
-               (struct mv64360_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
-
        /* Disable all gigE address decoder */
        MV_REG_WRITE (MV64360_ETH_BASE_ADDR_ENABLE_REG, 0x3f);
        DP (printf ("%s Ethernet stop called ... \n", __FUNCTION__));
@@ -715,7 +706,6 @@ int mv64360_eth_xmit (struct eth_device *dev, volatile void *dataPtr,
 {
        ETH_PORT_INFO *ethernet_private;
        struct mv64360_eth_priv *port_private;
-       unsigned int port_num;
        PKT_INFO pkt_info;
        ETH_FUNC_RET_STATUS status;
        struct net_device_stats *stats;
@@ -724,7 +714,6 @@ int mv64360_eth_xmit (struct eth_device *dev, volatile void *dataPtr,
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64360_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
 
        stats = port_private->stats;
 
@@ -800,15 +789,12 @@ int mv64360_eth_receive (struct eth_device *dev)
 {
        ETH_PORT_INFO *ethernet_private;
        struct mv64360_eth_priv *port_private;
-       unsigned int port_num;
        PKT_INFO pkt_info;
        struct net_device_stats *stats;
 
-
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64360_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
        stats = port_private->stats;
 
        while ((eth_port_receive (ethernet_private, ETH_Q0, &pkt_info) ==
@@ -899,12 +885,10 @@ static struct net_device_stats *mv64360_eth_get_stats (struct eth_device *dev)
 {
        ETH_PORT_INFO *ethernet_private;
        struct mv64360_eth_priv *port_private;
-       unsigned int port_num;
 
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64360_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
 
        mv64360_eth_update_stat (dev);
 
@@ -926,13 +910,10 @@ static void mv64360_eth_update_stat (struct eth_device *dev)
        ETH_PORT_INFO *ethernet_private;
        struct mv64360_eth_priv *port_private;
        struct net_device_stats *stats;
-       unsigned int port_num;
-       volatile unsigned int dummy;
 
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64360_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
        stats = port_private->stats;
 
        /* These are false updates */
@@ -955,12 +936,12 @@ static void mv64360_eth_update_stat (struct eth_device *dev)
         * But the unsigned long in PowerPC and MIPS are 32bit. So the next read
         * is just a dummy read for proper work of the GigE port
         */
-       dummy = eth_read_mib_counter (ethernet_private->port_num,
+       eth_read_mib_counter (ethernet_private->port_num,
                                      ETH_MIB_GOOD_OCTETS_RECEIVED_HIGH);
        stats->tx_bytes += (unsigned long)
                eth_read_mib_counter (ethernet_private->port_num,
                                      ETH_MIB_GOOD_OCTETS_SENT_LOW);
-       dummy = eth_read_mib_counter (ethernet_private->port_num,
+       eth_read_mib_counter (ethernet_private->port_num,
                                      ETH_MIB_GOOD_OCTETS_SENT_HIGH);
        stats->rx_errors += (unsigned long)
                eth_read_mib_counter (ethernet_private->port_num,
@@ -1008,12 +989,10 @@ static void mv64360_eth_print_stat (struct eth_device *dev)
        ETH_PORT_INFO *ethernet_private;
        struct mv64360_eth_priv *port_private;
        struct net_device_stats *stats;
-       unsigned int port_num;
 
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64360_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
        stats = port_private->stats;
 
        /* These are false updates */
@@ -2065,13 +2044,11 @@ static void eth_port_init_mac_tables (ETH_PORT eth_port_num)
 static void eth_clear_mib_counters (ETH_PORT eth_port_num)
 {
        int i;
-       unsigned int dummy;
 
        /* Perform dummy reads from MIB counters */
        for (i = ETH_MIB_GOOD_OCTETS_RECEIVED_LOW; i < ETH_MIB_LATE_COLLISION;
             i += 4)
-               dummy = MV_REG_READ ((MV64360_ETH_MIB_COUNTERS_BASE
-                                     (eth_port_num) + i));
+               MV_REG_READ((MV64360_ETH_MIB_COUNTERS_BASE(eth_port_num) + i));
 
        return;
 }
index d52d3f0e52d3bbeb2d9039dfd5405c8d22613954..e62ed0c1b39c90b8ec0b300cca0f3d967619bf94 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#undef DEBUG
 #define MAP_PCI
 
-#ifdef DEBUG
-#define DP(x) x
-#else
-#define DP(x)
-#endif
-
 int set_dfcdlInit (void);      /* setup delay line of Mv64360 */
 int mvDmaIsChannelActive (int);
 int mvDmaSetMemorySpace (ulong, ulong, ulong, ulong, ulong);
@@ -276,7 +269,7 @@ return 0;
 #else
        uchar addr = slot == 0 ? DIMM0_I2C_ADDR : DIMM1_I2C_ADDR;
        int ret;
-       unsigned int i, j, density = 1, devicesForErrCheck = 0;
+       unsigned int i, j, density = 1;
 
 #ifdef DEBUG
        unsigned int k;
@@ -286,17 +279,17 @@ return 0;
        uchar supp_cal, cal_val;
        ulong memclk, tmemclk;
        ulong tmp;
-       uchar trp_clocks = 0, trcd_clocks, tras_clocks, trrd_clocks;
+       uchar trp_clocks = 0, tras_clocks;
        uchar data[128];
 
        memclk = gd->bus_clk;
        tmemclk = 1000000000 / (memclk / 100);  /* in 10 ps units */
 
-       DP (puts ("before i2c read\n"));
+       debug("before i2c read\n");
 
        ret = i2c_read (addr, 0, 1, data, 128);
 
-       DP (puts ("after i2c read\n"));
+       debug("after i2c read\n");
 
        /* zero all the values */
        memset (dimmInfo, 0, sizeof (*dimmInfo));
@@ -307,7 +300,7 @@ return 0;
        }
 
        if (ret) {
-               DP (printf ("No DIMM in slot %d [err = %x]\n", slot, ret));
+               debug("No DIMM in slot %d [err = %x]\n", slot, ret);
                return 0;
        } else
                dimmInfo->slot = slot;  /* start to fill up dimminfo for this "slot" */
@@ -385,48 +378,46 @@ return 0;
                switch (i) {
                case 2: /* Memory type (DDR / SDRAM) */
                        dimmInfo->memoryType = (data[i] == 0x7) ? DDR : SDRAM;
-#ifdef DEBUG
                        if (dimmInfo->memoryType == 0)
-                               DP (printf
+                               debug
                                    ("Dram_type in slot %d is:                  SDRAM\n",
-                                    dimmInfo->slot));
+                                    dimmInfo->slot);
                        if (dimmInfo->memoryType == 1)
-                               DP (printf
+                               debug
                                    ("Dram_type in slot %d is:                  DDRAM\n",
-                                    dimmInfo->slot));
-#endif
+                                    dimmInfo->slot);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 3: /* Number Of Row Addresses */
                        dimmInfo->numOfRowAddresses = data[i];
-                       DP (printf
+                       debug
                            ("Module Number of row addresses:           %d\n",
-                            dimmInfo->numOfRowAddresses));
+                            dimmInfo->numOfRowAddresses);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 4: /* Number Of Column Addresses */
                        dimmInfo->numOfColAddresses = data[i];
-                       DP (printf
+                       debug
                            ("Module Number of col addresses:           %d\n",
-                            dimmInfo->numOfColAddresses));
+                            dimmInfo->numOfColAddresses);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 5: /* Number Of Module Banks */
                        dimmInfo->numOfModuleBanks = data[i];
-                       DP (printf
+                       debug
                            ("Number of Banks on Mod. :                                 %d\n",
-                            dimmInfo->numOfModuleBanks));
+                            dimmInfo->numOfModuleBanks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 6: /* Data Width */
                        dimmInfo->dataWidth = data[i];
-                       DP (printf
+                       debug
                            ("Module Data Width:                                %d\n",
-                            dimmInfo->dataWidth));
+                            dimmInfo->dataWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -434,33 +425,33 @@ return 0;
                        switch (data[i]) {
                        case 0x0:
                                dimmInfo->voltageInterface = TTL_5V_TOLERANT;
-                               DP (printf
-                                   ("Module is                                         TTL_5V_TOLERANT\n"));
+                               debug
+                                   ("Module is                                         TTL_5V_TOLERANT\n");
                                break;
                        case 0x1:
                                dimmInfo->voltageInterface = LVTTL;
-                               DP (printf
-                                   ("Module is                                         LVTTL\n"));
+                               debug
+                                   ("Module is                                         LVTTL\n");
                                break;
                        case 0x2:
                                dimmInfo->voltageInterface = HSTL_1_5V;
-                               DP (printf
-                                   ("Module is                                         TTL_5V_TOLERANT\n"));
+                               debug
+                                   ("Module is                                         TTL_5V_TOLERANT\n");
                                break;
                        case 0x3:
                                dimmInfo->voltageInterface = SSTL_3_3V;
-                               DP (printf
-                                   ("Module is                                         HSTL_1_5V\n"));
+                               debug
+                                   ("Module is                                         HSTL_1_5V\n");
                                break;
                        case 0x4:
                                dimmInfo->voltageInterface = SSTL_2_5V;
-                               DP (printf
-                                   ("Module is                                         SSTL_2_5V\n"));
+                               debug
+                                   ("Module is                                         SSTL_2_5V\n");
                                break;
                        default:
                                dimmInfo->voltageInterface = VOLTAGE_UNKNOWN;
-                               DP (printf
-                                   ("Module is                                         VOLTAGE_UNKNOWN\n"));
+                               debug
+                                   ("Module is                                         VOLTAGE_UNKNOWN\n");
                                break;
                        }
                        break;
@@ -479,9 +470,9 @@ return 0;
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancy_RoP =
                                rightOfPoint;
-                       DP (printf
+                       debug
                            ("Minimum Cycle Time At Max CasLatancy:             %d.%d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -494,49 +485,49 @@ return 0;
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOut_LoP = leftOfPoint;
                        dimmInfo->clockToDataOut_RoP = rightOfPoint;
-                       DP (printf ("Clock To Data Out:                                 %d.%2d [ns]\n", leftOfPoint, rightOfPoint));    /*dimmInfo->clockToDataOut */
+                       debug("Clock To Data Out:                                       %d.%2d [ns]\n", leftOfPoint, rightOfPoint);     /*dimmInfo->clockToDataOut */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
 /*#ifdef CONFIG_ECC */
                case 11:        /* Error Check Type */
                        dimmInfo->errorCheckType = data[i];
-                       DP (printf
+                       debug
                            ("Error Check Type (0=NONE):                        %d\n",
-                            dimmInfo->errorCheckType));
+                            dimmInfo->errorCheckType);
                        break;
 /* #endif */
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 12:        /* Refresh Interval */
                        dimmInfo->RefreshInterval = data[i];
-                       DP (printf
+                       debug
                            ("RefreshInterval (80= Self refresh Normal, 15.625us) : %x\n",
-                            dimmInfo->RefreshInterval));
+                            dimmInfo->RefreshInterval);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 13:        /* Sdram Width */
                        dimmInfo->sdramWidth = data[i];
-                       DP (printf
+                       debug
                            ("Sdram Width:                                      %d\n",
-                            dimmInfo->sdramWidth));
+                            dimmInfo->sdramWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 14:        /* Error Check Data Width */
                        dimmInfo->errorCheckDataWidth = data[i];
-                       DP (printf
+                       debug
                            ("Error Check Data Width:                   %d\n",
-                            dimmInfo->errorCheckDataWidth));
+                            dimmInfo->errorCheckDataWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 15:        /* Minimum Clock Delay */
                        dimmInfo->minClkDelay = data[i];
-                       DP (printf
+                       debug
                            ("Minimum Clock Delay:                              %d\n",
-                            dimmInfo->minClkDelay));
+                            dimmInfo->minClkDelay);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -552,26 +543,26 @@ return 0;
 
                        dimmInfo->burstLengthSupported = data[i];
 #ifdef DEBUG
-                       DP (printf
-                           ("Burst Length Supported:                   "));
+                       debug
+                           ("Burst Length Supported:                   ");
                        if (dimmInfo->burstLengthSupported & 0x01)
-                               DP (printf ("1, "));
+                               debug("1, ");
                        if (dimmInfo->burstLengthSupported & 0x02)
-                               DP (printf ("2, "));
+                               debug("2, ");
                        if (dimmInfo->burstLengthSupported & 0x04)
-                               DP (printf ("4, "));
+                               debug("4, ");
                        if (dimmInfo->burstLengthSupported & 0x08)
-                               DP (printf ("8, "));
-                       DP (printf (" Bit \n"));
+                               debug("8, ");
+                       debug(" Bit \n");
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 17:        /* Number Of Banks On Each Device */
                        dimmInfo->numOfBanksOnEachDevice = data[i];
-                       DP (printf
+                       debug
                            ("Number Of Banks On Each Chip:                     %d\n",
-                            dimmInfo->numOfBanksOnEachDevice));
+                            dimmInfo->numOfBanksOnEachDevice);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -591,34 +582,34 @@ return 0;
                         ********************************************************/
                        dimmInfo->suportedCasLatencies = data[i];
 #ifdef DEBUG
-                       DP (printf
-                           ("Suported Cas Latencies: (CL)                      "));
+                       debug
+                           ("Suported Cas Latencies: (CL)                      ");
                        if (dimmInfo->memoryType == 0) {        /* SDRAM */
                                for (k = 0; k <= 7; k++) {
                                        if (dimmInfo->
                                            suportedCasLatencies & (1 << k))
-                                               DP (printf
+                                               debug
                                                    ("%d,                       ",
-                                                    k + 1));
+                                                    k + 1);
                                }
 
                        } else {        /* DDR-RAM */
 
                                if (dimmInfo->suportedCasLatencies & 1)
-                                       DP (printf ("1, "));
+                                       debug("1, ");
                                if (dimmInfo->suportedCasLatencies & 2)
-                                       DP (printf ("1.5, "));
+                                       debug("1.5, ");
                                if (dimmInfo->suportedCasLatencies & 4)
-                                       DP (printf ("2, "));
+                                       debug("2, ");
                                if (dimmInfo->suportedCasLatencies & 8)
-                                       DP (printf ("2.5, "));
+                                       debug("2.5, ");
                                if (dimmInfo->suportedCasLatencies & 16)
-                                       DP (printf ("3, "));
+                                       debug("3, ");
                                if (dimmInfo->suportedCasLatencies & 32)
-                                       DP (printf ("3.5, "));
+                                       debug("3.5, ");
 
                        }
-                       DP (printf ("\n"));
+                       debug("\n");
 #endif
                        /* Calculating MAX CAS latency */
                        for (j = 7; j > 0; j--) {
@@ -630,8 +621,8 @@ return 0;
                                                /* CAS latency 1, 1.5, 2, 2.5, 3, 3.5 */
                                                switch (j) {
                                                case 7:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                =
@@ -639,8 +630,8 @@ return 0;
                                                        hang ();
                                                        break;
                                                case 6:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                =
@@ -648,36 +639,36 @@ return 0;
                                                        hang ();
                                                        break;
                                                case 5:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         3.5 clk's\n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         3.5 clk's\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_3_5;
                                                        break;
                                                case 4:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         3 clk's \n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         3 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_3;
                                                        break;
                                                case 3:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         2.5 clk's \n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         2.5 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_2_5;
                                                        break;
                                                case 2:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         2 clk's \n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         2 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_2;
                                                        break;
                                                case 1:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         1.5 clk's \n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         1.5 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_1_5;
@@ -707,8 +698,8 @@ return 0;
                                                                dimmInfo->
                                                                maxClSupported_DDR
                                                                >> 1;
-                                                       DP (printf
-                                                           ("*** Change actual Cas Latencies cause of minimumCycleTime n"));
+                                                       debug
+                                                           ("*** Change actual Cas Latencies cause of minimumCycleTime n");
                                                }
                                                /* ronen - checkif the Dimm frequency compared to the Sysclock. */
                                                if ((dimmInfo->
@@ -744,32 +735,32 @@ return 0;
                                                        dimmInfo->
                                                                maxCASlatencySupported_RoP
                                                                = 0;
-                                               DP (printf
+                                               debug
                                                    ("Max. Cas Latencies (DDR LoP.RoP Notation):        %d.%d \n",
                                                     dimmInfo->
                                                     maxCASlatencySupported_LoP,
                                                     dimmInfo->
-                                                    maxCASlatencySupported_RoP));
+                                                    maxCASlatencySupported_RoP);
                                                break;
                                        case SDRAM:
                                                /* CAS latency 1, 2, 3, 4, 5, 6, 7 */
                                                dimmInfo->maxClSupported_SD = j;        /*  Cas Latency DDR-RAM Coded                   */
-                                               DP (printf
+                                               debug
                                                    ("Max. Cas Latencies (SD): %d\n",
                                                     dimmInfo->
-                                                    maxClSupported_SD));
+                                                    maxClSupported_SD);
                                                dimmInfo->
                                                        maxCASlatencySupported_LoP
                                                        = j;
                                                dimmInfo->
                                                        maxCASlatencySupported_RoP
                                                        = 0;
-                                               DP (printf
+                                               debug
                                                    ("Max. Cas Latencies (DDR LoP.RoP Notation): %d.%d \n",
                                                     dimmInfo->
                                                     maxCASlatencySupported_LoP,
                                                     dimmInfo->
-                                                    maxCASlatencySupported_RoP));
+                                                    maxCASlatencySupported_RoP);
                                                break;
                                        }
                                        break;
@@ -779,7 +770,7 @@ return 0;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 21:        /* Buffered Address And Control Inputs */
-                       DP (printf ("\nModul Attributes (SPD Byte 21): \n"));
+                       debug("\nModul Attributes (SPD Byte 21): \n");
                        dimmInfo->bufferedAddrAndControlInputs =
                                data[i] & BIT0;
                        dimmInfo->registeredAddrAndControlInputs =
@@ -794,60 +785,60 @@ return 0;
                                (data[i] & BIT6) >> 6;
 #ifdef DEBUG
                        if (dimmInfo->bufferedAddrAndControlInputs == 1)
-                               DP (printf
-                                   (" - Buffered Address/Control Input:                Yes \n"));
+                               debug
+                                   (" - Buffered Address/Control Input:                Yes \n");
                        else
-                               DP (printf
-                                   (" - Buffered Address/Control Input:                No \n"));
+                               debug
+                                   (" - Buffered Address/Control Input:                No \n");
 
                        if (dimmInfo->registeredAddrAndControlInputs == 1)
-                               DP (printf
-                                   (" - Registered Address/Control Input:              Yes \n"));
+                               debug
+                                   (" - Registered Address/Control Input:              Yes \n");
                        else
-                               DP (printf
-                                   (" - Registered Address/Control Input:              No \n"));
+                               debug
+                                   (" - Registered Address/Control Input:              No \n");
 
                        if (dimmInfo->onCardPLL == 1)
-                               DP (printf
-                                   (" - On-Card PLL (clock):                           Yes \n"));
+                               debug
+                                   (" - On-Card PLL (clock):                           Yes \n");
                        else
-                               DP (printf
-                                   (" - On-Card PLL (clock):                           No \n"));
+                               debug
+                                   (" - On-Card PLL (clock):                           No \n");
 
                        if (dimmInfo->bufferedDQMBinputs == 1)
-                               DP (printf
-                                   (" - Bufferd DQMB Inputs:                           Yes \n"));
+                               debug
+                                   (" - Bufferd DQMB Inputs:                           Yes \n");
                        else
-                               DP (printf
-                                   (" - Bufferd DQMB Inputs:                           No \n"));
+                               debug
+                                   (" - Bufferd DQMB Inputs:                           No \n");
 
                        if (dimmInfo->registeredDQMBinputs == 1)
-                               DP (printf
-                                   (" - Registered DQMB Inputs:                        Yes \n"));
+                               debug
+                                   (" - Registered DQMB Inputs:                        Yes \n");
                        else
-                               DP (printf
-                                   (" - Registered DQMB Inputs:                        No \n"));
+                               debug
+                                   (" - Registered DQMB Inputs:                        No \n");
 
                        if (dimmInfo->differentialClockInput == 1)
-                               DP (printf
-                                   (" - Differential Clock Input:                      Yes \n"));
+                               debug
+                                   (" - Differential Clock Input:                      Yes \n");
                        else
-                               DP (printf
-                                   (" - Differential Clock Input:                      No \n"));
+                               debug
+                                   (" - Differential Clock Input:                      No \n");
 
                        if (dimmInfo->redundantRowAddressing == 1)
-                               DP (printf
-                                   (" - redundant Row Addressing:                      Yes \n"));
+                               debug
+                                   (" - redundant Row Addressing:                      Yes \n");
                        else
-                               DP (printf
-                                   (" - redundant Row Addressing:                      No \n"));
+                               debug
+                                   (" - redundant Row Addressing:                      No \n");
 
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 22:        /* Suported AutoPreCharge */
-                       DP (printf ("\nModul Attributes (SPD Byte 22): \n"));
+                       debug("\nModul Attributes (SPD Byte 22): \n");
                        dimmInfo->suportedEarlyRasPreCharge = data[i] & BIT0;
                        dimmInfo->suportedAutoPreCharge =
                                (data[i] & BIT1) >> 1;
@@ -861,46 +852,46 @@ return 0;
                                (data[i] & BIT5) >> 5;
 #ifdef DEBUG
                        if (dimmInfo->suportedEarlyRasPreCharge == 1)
-                               DP (printf
-                                   (" - Early Ras Precharge:                   Yes \n"));
+                               debug
+                                   (" - Early Ras Precharge:                   Yes \n");
                        else
-                               DP (printf
-                                   (" -  Early Ras Precharge:                  No \n"));
+                               debug
+                                   (" -  Early Ras Precharge:                  No \n");
 
                        if (dimmInfo->suportedAutoPreCharge == 1)
-                               DP (printf
-                                   (" - AutoPreCharge:                         Yes \n"));
+                               debug
+                                   (" - AutoPreCharge:                         Yes \n");
                        else
-                               DP (printf
-                                   (" -  AutoPreCharge:                                No \n"));
+                               debug
+                                   (" -  AutoPreCharge:                                No \n");
 
                        if (dimmInfo->suportedPreChargeAll == 1)
-                               DP (printf
-                                   (" - Precharge All:                         Yes \n"));
+                               debug
+                                   (" - Precharge All:                         Yes \n");
                        else
-                               DP (printf
-                                   (" -  Precharge All:                                No \n"));
+                               debug
+                                   (" -  Precharge All:                                No \n");
 
                        if (dimmInfo->suportedWrite1ReadBurst == 1)
-                               DP (printf
-                                   (" - Write 1/ReadBurst:                             Yes \n"));
+                               debug
+                                   (" - Write 1/ReadBurst:                             Yes \n");
                        else
-                               DP (printf
-                                   (" -  Write 1/ReadBurst:                            No \n"));
+                               debug
+                                   (" -  Write 1/ReadBurst:                            No \n");
 
                        if (dimmInfo->suported5PercentLowVCC == 1)
-                               DP (printf
-                                   (" - lower VCC tolerance:                   5 Percent \n"));
+                               debug
+                                   (" - lower VCC tolerance:                   5 Percent \n");
                        else
-                               DP (printf
-                                   ("  - lower VCC tolerance:                  10 Percent \n"));
+                               debug
+                                   ("  - lower VCC tolerance:                  10 Percent \n");
 
                        if (dimmInfo->suported5PercentUpperVCC == 1)
-                               DP (printf
-                                   (" - upper VCC tolerance:                   5 Percent \n"));
+                               debug
+                                   (" - upper VCC tolerance:                   5 Percent \n");
                        else
-                               DP (printf
-                                   (" -  upper VCC tolerance:                  10 Percent \n"));
+                               debug
+                                   (" -  upper VCC tolerance:                  10 Percent \n");
 
 #endif
                        break;
@@ -919,7 +910,7 @@ return 0;
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancyMinus1_RoP =
                                rightOfPoint;
-                       DP (printf ("Minimum Cycle Time At 2nd highest CasLatancy (0 = Not supported): %d.%d [ns]\n", leftOfPoint, rightOfPoint));      /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
+                       debug("Minimum Cycle Time At 2nd highest CasLatancy (0 = Not supported): %d.%d [ns]\n", leftOfPoint, rightOfPoint);     /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -932,9 +923,9 @@ return 0;
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOutMinus1_LoP = leftOfPoint;
                        dimmInfo->clockToDataOutMinus1_RoP = rightOfPoint;
-                       DP (printf
+                       debug
                            ("Clock To Data Out (2nd CL value):                 %d.%2d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -951,7 +942,7 @@ return 0;
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancyMinus2_RoP =
                                rightOfPoint;
-                       DP (printf ("Minimum Cycle Time At 3rd highest CasLatancy (0 = Not supported): %d.%d [ns]\n", leftOfPoint, rightOfPoint));      /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
+                       debug("Minimum Cycle Time At 3rd highest CasLatancy (0 = Not supported): %d.%d [ns]\n", leftOfPoint, rightOfPoint);     /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -964,9 +955,9 @@ return 0;
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOutMinus2_LoP = leftOfPoint;
                        dimmInfo->clockToDataOutMinus2_RoP = rightOfPoint;
-                       DP (printf
+                       debug
                            ("Clock To Data Out (3rd CL value):                 %d.%2d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -983,12 +974,12 @@ return 0;
                        trp_clocks =
                                (dimmInfo->minRowPrechargeTime +
                                 (tmemclk - 1)) / tmemclk;
-                       DP (printf
+                       debug
                            ("*** 1 clock cycle = %ld  10ps intervalls = %ld.%ld ns****\n",
-                            tmemclk, tmemclk / 100, tmemclk % 100));
-                       DP (printf
+                            tmemclk, tmemclk / 100, tmemclk % 100);
+                       debug
                            ("Minimum Row Precharge Time [ns]:          %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1002,12 +993,9 @@ return 0;
                        rightOfPoint = (data[i] & maskRightOfPoint) * 25;
 
                        dimmInfo->minRowActiveRowActiveDelay = ((leftOfPoint * 100) + rightOfPoint);    /* measured in 100ns Intervals */
-                       trrd_clocks =
-                               (dimmInfo->minRowActiveRowActiveDelay +
-                                (tmemclk - 1)) / tmemclk;
-                       DP (printf
+                       debug
                            ("Minimum Row Active -To- Row Active Delay [ns]:    %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1021,12 +1009,9 @@ return 0;
                        rightOfPoint = (data[i] & maskRightOfPoint) * 25;
 
                        dimmInfo->minRowActiveRowActiveDelay = ((leftOfPoint * 100) + rightOfPoint);    /* measured in 100ns Intervals */
-                       trcd_clocks =
-                               (dimmInfo->minRowActiveRowActiveDelay +
-                                (tmemclk - 1)) / tmemclk;
-                       DP (printf
+                       debug
                            ("Minimum Ras-To-Cas Delay [ns]:                    %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1035,41 +1020,41 @@ return 0;
                        tras_clocks =
                                (NSto10PS (data[i]) +
                                 (tmemclk - 1)) / tmemclk;
-                       DP (printf
+                       debug
                            ("Minimum Ras Pulse Width [ns]:                     %d = in Clk cycles %d\n",
-                            dimmInfo->minRasPulseWidth, tras_clocks));
+                            dimmInfo->minRasPulseWidth, tras_clocks);
 
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 31:        /* Module Bank Density */
                        dimmInfo->moduleBankDensity = data[i];
-                       DP (printf
+                       debug
                            ("Module Bank Density:                              %d\n",
-                            dimmInfo->moduleBankDensity));
+                            dimmInfo->moduleBankDensity);
 #ifdef DEBUG
-                       DP (printf
-                           ("*** Offered Densities (more than 1 = Multisize-Module): "));
+                       debug
+                           ("*** Offered Densities (more than 1 = Multisize-Module): ");
                        {
                                if (dimmInfo->moduleBankDensity & 1)
-                                       DP (printf ("4MB, "));
+                                       debug("4MB, ");
                                if (dimmInfo->moduleBankDensity & 2)
-                                       DP (printf ("8MB, "));
+                                       debug("8MB, ");
                                if (dimmInfo->moduleBankDensity & 4)
-                                       DP (printf ("16MB, "));
+                                       debug("16MB, ");
                                if (dimmInfo->moduleBankDensity & 8)
-                                       DP (printf ("32MB, "));
+                                       debug("32MB, ");
                                if (dimmInfo->moduleBankDensity & 16)
-                                       DP (printf ("64MB, "));
+                                       debug("64MB, ");
                                if (dimmInfo->moduleBankDensity & 32)
-                                       DP (printf ("128MB, "));
+                                       debug("128MB, ");
                                if ((dimmInfo->moduleBankDensity & 64)
                                    || (dimmInfo->moduleBankDensity & 128)) {
-                                       DP (printf ("ERROR, "));
+                                       debug("ERROR, ");
                                        hang ();
                                }
                        }
-                       DP (printf ("\n"));
+                       debug("\n");
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
@@ -1095,9 +1080,9 @@ return 0;
                        }
                        dimmInfo->addrAndCommandSetupTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
+                       debug
                            ("Address And Command Setup Time [ns]:              %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1122,9 +1107,9 @@ return 0;
                        }
                        dimmInfo->addrAndCommandHoldTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
+                       debug
                            ("Address And Command Hold Time [ns]:               %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1149,9 +1134,9 @@ return 0;
                        }
                        dimmInfo->dataInputSetupTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
+                       debug
                            ("Data Input Setup Time [ns]:                       %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1176,9 +1161,9 @@ return 0;
                        }
                        dimmInfo->dataInputHoldTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
+                       debug
                            ("Data Input Hold Time [ns]:                        %d.%d\n\n",
-                            sign * leftOfPoint, rightOfPoint));
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
                }
@@ -1194,8 +1179,6 @@ return 0;
        dimmInfo->numberOfDevices =
                (dimmInfo->dataWidth / dimmInfo->sdramWidth) *
                dimmInfo->numOfModuleBanks;
-       devicesForErrCheck =
-               (dimmInfo->dataWidth - 64) / dimmInfo->sdramWidth;
        if ((dimmInfo->errorCheckType == 0x1)
            || (dimmInfo->errorCheckType == 0x2)
            || (dimmInfo->errorCheckType == 0x3)) {
@@ -1217,7 +1200,7 @@ return 0;
        tmp *= dimmInfo->sdramWidth;
        tmp = tmp >> 24;        /* div by 0x4000000 (64M)       */
        dimmInfo->drb_size = (uchar) tmp;
-       DP (printf ("Module DRB size (n*64Mbit): %d\n", dimmInfo->drb_size));
+       debug("Module DRB size (n*64Mbit): %d\n", dimmInfo->drb_size);
 
        /* try a CAS latency of 3 first... */
 
@@ -1236,11 +1219,11 @@ return 0;
                        cal_val = 2;
        }
 
-       DP (printf ("cal_val = %d\n", cal_val));
+       debug("cal_val = %d\n", cal_val);
 
        /* bummer, did't work... */
        if (cal_val == 0) {
-               DP (printf ("Couldn't find a good CAS latency\n"));
+               debug("Couldn't find a good CAS latency\n");
                hang ();
                return 0;
        }
@@ -1272,13 +1255,13 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
 
        /* delay line */
        set_dfcdlInit ();       /* may be its not needed */
-       DP (printf ("Delay line set done\n"));
+       debug("Delay line set done\n");
 
        /* set SDRAM mode NOP */ /* To_do check it */
        GT_REG_WRITE (SDRAM_OPERATION, 0x5);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 1418: Module still busy ... please wait... ***\n"));
+               debug
+                   ("\n*** SDRAM_OPERATION 1418: Module still busy ... please wait... ***\n");
        }
 
        /* SDRAM configuration */
@@ -1329,12 +1312,12 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                hang ();
                break;
        }
-       DP (printf ("calculated refresh interval %0x\n", sdram_config_reg));
+       debug("calculated refresh interval %0x\n", sdram_config_reg);
 
        /* make sure the refresh value is only 14 bits */
        if (sdram_config_reg > 0x1fff)
                sdram_config_reg = 0x1fff;
-       DP (printf ("adjusted refresh interval %0x\n", sdram_config_reg));
+       debug("adjusted refresh interval %0x\n", sdram_config_reg);
 
        /* we want physical bank interleaving and */
        /* virtual bank interleaving enabled so do nothing */
@@ -1344,30 +1327,30 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        if (info->registeredAddrAndControlInputs == 1) {
                /* it's registered DRAM, so set the reg. DRAM bit */
                sdram_config_reg = sdram_config_reg | BIT17;
-               DP (printf ("Enabling registered DRAM bit\n"));
+               debug("Enabling registered DRAM bit\n");
        }
        /* turn on DRAM ECC? */
 #ifdef CONFIG_MV64360_ECC
        if (info->errorCheckType == 0x2) {
                /* DRAM has ECC, so turn it on */
                sdram_config_reg = sdram_config_reg | BIT18;
-               DP (printf ("Enabling ECC\n"));
+               debug("Enabling ECC\n");
        }
 #endif
        /* set the data DQS pin configuration */
        switch (info->sdramWidth) {
        case 0x4:               /* memory is x4 */
                sdram_config_reg = sdram_config_reg | BIT20 | BIT21;
-               DP (printf ("Data DQS pins set for 16 pins\n"));
+               debug("Data DQS pins set for 16 pins\n");
                break;
        case 0x8:               /* memory is x8 or x16 */
        case 0x10:
                sdram_config_reg = sdram_config_reg | BIT21;
-               DP (printf ("Data DQS pins set for 8 pins\n"));
+               debug("Data DQS pins set for 8 pins\n");
                break;
        case 0x20:              /* memory is x32 */
                /* both bits are cleared for x32 so nothing to do */
-               DP (printf ("Data DQS pins set for 2 pins\n"));
+               debug("Data DQS pins set for 2 pins\n");
                break;
        default:                /* memory width unsupported */
                printf ("DRAM chip width is unknown!\n");
@@ -1390,23 +1373,23 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
 
        /* write the value into the SDRAM configuration register */
        GT_REG_WRITE (SDRAM_CONFIG, sdram_config_reg);
-       DP (printf
+       debug
            ("OOOOOOOOO sdram_conf 0x1400: %08x\n",
-            GTREGREAD (SDRAM_CONFIG)));
+            GTREGREAD (SDRAM_CONFIG));
 
        /* SDRAM open pages control keep open as much as I can */
        GT_REG_WRITE (SDRAM_OPEN_PAGES_CONTROL, 0x0);
-       DP (printf
+       debug
            ("sdram_open_pages_controll 0x1414: %08x\n",
-            GTREGREAD (SDRAM_OPEN_PAGES_CONTROL)));
+            GTREGREAD (SDRAM_OPEN_PAGES_CONTROL));
 
        /* SDRAM D_UNIT_CONTROL_LOW 0x1404 */
        tmp = (GTREGREAD (D_UNIT_CONTROL_LOW) & 0x01);  /* Clock Domain Sync from power on reset */
        if (tmp == 0)
-               DP (printf ("Core Signals are sync (by HW-Setting)!!!\n"));
+               debug("Core Signals are sync (by HW-Setting)!!!\n");
        else
-               DP (printf
-                   ("Core Signals syncs. are bypassed (by HW-Setting)!!!\n"));
+               debug
+                   ("Core Signals syncs. are bypassed (by HW-Setting)!!!\n");
 
        /* SDRAM set CAS Latency according to SPD information */
        switch (info->memoryType) {
@@ -1419,7 +1402,7 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                /* Calculate the settings for SDRAM mode and Dunit control low registers */
                /* Values set according to technical bulletin TB-92 rev. c */
        case DDR:
-               DP (printf ("### SET-CL for DDR-RAM\n"));
+               debug("### SET-CL for DDR-RAM\n");
                switch (info->maxClSupported_DDR) {
                case DDR_CL_3:
                        tmp_sdram_mode = 0x32;  /* CL=3 Burstlength = 4 */
@@ -1428,18 +1411,18 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0x05110051;
                                else
                                        tmp_dunit_control_low = 0x24110051;
-                               DP (printf
+                               debug
                                    ("Max. CL is 3 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        } else {        /* clk sync. bypassed   */
 
                                if (info->registeredAddrAndControlInputs == 1)  /* registerd DDR SDRAM? */
                                        tmp_dunit_control_low = 0x2C1107F2;
                                else
                                        tmp_dunit_control_low = 0x3C1107d2;
-                               DP (printf
+                               debug
                                    ("Max. CL is 3 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
                case DDR_CL_2_5:
@@ -1449,9 +1432,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0x25110051;
                                else
                                        tmp_dunit_control_low = 0x24110051;
-                               DP (printf
+                               debug
                                    ("Max. CL is 2.5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        } else {        /* clk sync. bypassed   */
 
                                if (info->registeredAddrAndControlInputs == 1) {        /* registerd DDR SDRAM? */
@@ -1460,9 +1443,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        hang ();
                                } else
                                        tmp_dunit_control_low = 0x1B1107d2;
-                               DP (printf
+                               debug
                                    ("Max. CL is 2.5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
                case DDR_CL_2:
@@ -1472,9 +1455,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0x04110051;
                                else
                                        tmp_dunit_control_low = 0x03110051;
-                               DP (printf
+                               debug
                                    ("Max. CL is 2 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        } else {        /* clk sync. bypassed   */
 
                                if (info->registeredAddrAndControlInputs == 1) {        /* registerd DDR SDRAM? */
@@ -1483,9 +1466,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        hang ();
                                } else
                                        tmp_dunit_control_low = 0x3B1107d2;
-                               DP (printf
+                               debug
                                    ("Max. CL is 2 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
                case DDR_CL_1_5:
@@ -1495,9 +1478,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0x24110051;
                                else
                                        tmp_dunit_control_low = 0x23110051;
-                               DP (printf
+                               debug
                                    ("Max. CL is 1.5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        } else {        /* clk sync. bypassed   */
 
                                if (info->registeredAddrAndControlInputs == 1) {        /* registerd DDR SDRAM? */
@@ -1506,9 +1489,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        hang ();
                                } else
                                        tmp_dunit_control_low = 0x1A1107d2;
-                               DP (printf
+                               debug
                                    ("Max. CL is 1.5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
 
@@ -1528,8 +1511,8 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        /* set SDRAM mode SetCommand 0x1418 */
        GT_REG_WRITE (SDRAM_OPERATION, 0x3);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 0x1418 after SDRAM_MODE: Module still busy ... please wait... ***\n"));
+               debug
+                   ("\n*** SDRAM_OPERATION 0x1418 after SDRAM_MODE: Module still busy ... please wait... ***\n");
        }
 
        /* SDRAM D_UNIT_CONTROL_LOW 0x1404 */
@@ -1538,8 +1521,8 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        /* set SDRAM mode SetCommand 0x1418 */
        GT_REG_WRITE (SDRAM_OPERATION, 0x3);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 1418 after D_UNIT_CONTROL_LOW: Module still busy ... please wait... ***\n"));
+               debug
+                   ("\n*** SDRAM_OPERATION 1418 after D_UNIT_CONTROL_LOW: Module still busy ... please wait... ***\n");
        }
 
 /*------------------------------------------------------------------------------ */
@@ -1549,29 +1532,29 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        /* program this with the default value */
        tmp = 0x02;             /* power-up default address select decoding value */
 
-       DP (printf ("drb_size (n*64Mbit): %d\n", info->drb_size));
+       debug("drb_size (n*64Mbit): %d\n", info->drb_size);
 /* figure out the DRAM chip size */
        sdram_chip_size =
                (1 << (info->numOfRowAddresses + info->numOfColAddresses));
        sdram_chip_size *= info->sdramWidth;
        sdram_chip_size *= 4;
-       DP (printf ("computed sdram chip size is %#lx\n", sdram_chip_size));
+       debug("computed sdram chip size is %#lx\n", sdram_chip_size);
        /* divide sdram chip size by 64 Mbits */
        sdram_chip_size = sdram_chip_size / 0x4000000;
        switch (sdram_chip_size) {
        case 1:         /* 64 Mbit */
        case 2:         /* 128 Mbit */
-               DP (printf ("RAM-Device_size 64Mbit or 128Mbit)\n"));
+               debug("RAM-Device_size 64Mbit or 128Mbit)\n");
                tmp |= (0x00 << 4);
                break;
        case 4:         /* 256 Mbit */
        case 8:         /* 512 Mbit */
-               DP (printf ("RAM-Device_size 256Mbit or 512Mbit)\n"));
+               debug("RAM-Device_size 256Mbit or 512Mbit)\n");
                tmp |= (0x01 << 4);
                break;
        case 16:                /* 1 Gbit */
        case 32:                /* 2 Gbit */
-               DP (printf ("RAM-Device_size 1Gbit or 2Gbit)\n"));
+               debug("RAM-Device_size 1Gbit or 2Gbit)\n");
                tmp |= (0x02 << 4);
                break;
        default:
@@ -1582,15 +1565,15 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
 
        /* SDRAM address control */
        GT_REG_WRITE (SDRAM_ADDR_CONTROL, tmp);
-       DP (printf
+       debug
            ("setting up sdram address control (0x1410) with: %08lx \n",
-            tmp));
+            tmp);
 
 /* ------------------------------------------------------------------------------ */
 /* same settings for registerd & non-registerd DDR SDRAM */
-       DP (printf
+       debug
            ("setting up sdram_timing_control_low (0x1408) with: %08x \n",
-            0x11511220));
+            0x11511220);
        GT_REG_WRITE (SDRAM_TIMING_CONTROL_LOW, 0x11511220);
 
 
@@ -1602,42 +1585,38 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        if (info->registeredAddrAndControlInputs
            || info->registeredDQMBinputs) {
                tmp |= (1 << 17);
-               DP (printf
+               debug
                    ("SPD says: registered Addr. and Cont.: %d; registered DQMBinputs: %d\n",
                     info->registeredAddrAndControlInputs,
-                    info->registeredDQMBinputs));
+                    info->registeredDQMBinputs);
        }
 
        /* Use buffer 1 to return read data to the CPU
         * Page 426 MV64360 */
        tmp |= (1 << 26);
-       DP (printf
+       debug
            ("Before Buffer assignment - sdram_conf (0x1400): %08x\n",
-            GTREGREAD (SDRAM_CONFIG)));
-       DP (printf
+            GTREGREAD (SDRAM_CONFIG));
+       debug
            ("After Buffer assignment - sdram_conf (0x1400): %08x\n",
-            GTREGREAD (SDRAM_CONFIG)));
+            GTREGREAD (SDRAM_CONFIG));
 
        /* SDRAM timing To_do: */
 /* ------------------------------------------------------------------------------ */
 
-       DP (printf
+       debug
            ("setting up sdram_timing_control_high (0x140c) with: %08x \n",
-            0x9));
+            0x9);
        GT_REG_WRITE (SDRAM_TIMING_CONTROL_HIGH, 0x9);
 
-       DP (printf
+       debug
            ("setting up sdram address pads control (0x14c0) with: %08x \n",
-            0x7d5014a));
+            0x7d5014a);
        GT_REG_WRITE (SDRAM_ADDR_CTRL_PADS_CALIBRATION, 0x7d5014a);
 
-       DP (printf
-         indent: Standard input:1450: Warning:old style assignment ambiguity in "=*".  Assuming "= *"
-
-indent: Standard input:1451: Warning:old style assignment ambiguity in "=*".  Assuming "= *"
-
+       debug
   ("setting up sdram data pads control (0x14c4) with: %08x \n",
-            0x7d5014a));
+            0x7d5014a);
        GT_REG_WRITE (SDRAM_DATA_PADS_CALIBRATION, 0x7d5014a);
 
 /* ------------------------------------------------------------------------------ */
@@ -1647,8 +1626,8 @@ indent: Standard input:1451: Warning:old style assignment ambiguity in "=*".  As
 /*     for (i = info->slot * 2; i < ((info->slot * 2) + info->banks); i++) */
        {
                i = info->slot;
-               DP (printf
-                   ("\n*** Running a MRS cycle for bank %d ***\n", i));
+               debug
+                   ("\n*** Running a MRS cycle for bank %d ***\n", i);
 
                /* map the bank */
                memory_map_bank (i, 0, GB / 4);
@@ -1656,17 +1635,17 @@ indent: Standard input:1451: Warning:old style assignment ambiguity in "=*".  As
                /* set SDRAM mode */ /* To_do check it */
                GT_REG_WRITE (SDRAM_OPERATION, 0x3);
                check = GTREGREAD (SDRAM_OPERATION);
-               DP (printf
+               debug
                    ("\n*** SDRAM_OPERATION 1418 (0 = Normal Operation) = %08lx ***\n",
-                    check));
+                    check);
 
 
                /* switch back to normal operation mode */
                GT_REG_WRITE (SDRAM_OPERATION, 0);
                check = GTREGREAD (SDRAM_OPERATION);
-               DP (printf
+               debug
                    ("\n*** SDRAM_OPERATION 1418 (0 = Normal Operation) = %08lx ***\n",
-                    check));
+                    check);
 
                /* unmap the bank */
                memory_map_bank (i, 0, 0);
@@ -1712,9 +1691,9 @@ long int dram_size (long int *base, long int maxsize)
                *b = save2;
 
                if (val != cnt) {
-                       DP (printf
+                       debug
                            ("Found %08x  at Address %08x (failure)\n",
-                            (unsigned int) val, (unsigned int) addr));
+                            (unsigned int) val, (unsigned int) addr);
                        /* fix boundary condition.. STARTVAL means zero */
                        if (cnt == STARTVAL / sizeof (long))
                                cnt = 0;
@@ -1730,9 +1709,8 @@ long int dram_size (long int *base, long int maxsize)
  * controlling logic happens */
 phys_size_t initdram (int board_type)
 {
-       int s0 = 0, s1 = 0;
        int checkbank[4] = {[0 ... 3] = 0 };
-       ulong realsize, total, check;
+       ulong realsize, total;
        AUX_MEM_DIMM_INFO dimmInfo1;
        AUX_MEM_DIMM_INFO dimmInfo2;
        int nhr, bank_no;
@@ -1747,10 +1725,10 @@ phys_size_t initdram (int board_type)
                printf ("Skipping SD- DDRRAM setup due to NHR bit being set\n");
        } else {
                /* DIMM0 */
-               s0 = check_dimm (0, &dimmInfo1);
+               check_dimm (0, &dimmInfo1);
 
                /* DIMM1 */
-               s1 = check_dimm (1, &dimmInfo2);
+               check_dimm (1, &dimmInfo2);
 
                memory_map_bank (0, 0, 0);
                memory_map_bank (1, 0, 0);
@@ -1784,7 +1762,6 @@ phys_size_t initdram (int board_type)
        /* next, size the SDRAM banks */
 
        realsize = total = 0;
-       check = GB / 4;
        if (dimmInfo1.numOfModuleBanks > 0) {
                checkbank[0] = 1;
        }
index 14e635592ee5acd1cb4e51b0273a8edabbffc1cb..a7836edb4d6d32bcb75493c3cc3aa101bee7feac 100644 (file)
@@ -34,6 +34,7 @@
 #include "../include/mv_gen_reg.h"
 #include <net.h>
 #include <netdev.h>
+#include <linux/compiler.h>
 
 #include "eth.h"
 #include "mpsc.h"
@@ -410,7 +411,7 @@ int checkboard (void)
 void debug_led (int led, int mode)
 {
        volatile int *addr = 0;
-       int dummy;
+       __maybe_unused int dummy;
 
        if (mode == 1) {
                switch (led) {
index cd9d5a47f7f29486efde4f08fef472593de904db..4aefbaf0c1f1ddbc27820b39e5563a094a8ba77f 100644 (file)
@@ -420,7 +420,7 @@ static int mv64460_eth_real_open (struct eth_device *dev)
        ETH_PORT_INFO *ethernet_private;
        struct mv64460_eth_priv *port_private;
        unsigned int port_num;
-       u32 port_status, phy_reg_data;
+       u32 phy_reg_data;
 
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        /* ronen - when we update the MAC env params we only update dev->enetaddr
@@ -518,7 +518,7 @@ static int mv64460_eth_real_open (struct eth_device *dev)
         */
 
        MV_REG_WRITE (MV64460_ETH_MAXIMUM_TRANSMIT_UNIT (port_num), 0);
-       port_status = MV_REG_READ (MV64460_ETH_PORT_STATUS_REG (port_num));
+       MV_REG_READ (MV64460_ETH_PORT_STATUS_REG (port_num));
 
        /* Check Link status on phy */
        eth_port_read_smi_reg (port_num, 1, &phy_reg_data);
@@ -636,15 +636,6 @@ static int mv64460_eth_free_rx_rings (struct eth_device *dev)
 
 int mv64460_eth_stop (struct eth_device *dev)
 {
-       ETH_PORT_INFO *ethernet_private;
-       struct mv64460_eth_priv *port_private;
-       unsigned int port_num;
-
-       ethernet_private = (ETH_PORT_INFO *) dev->priv;
-       port_private =
-               (struct mv64460_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
-
        /* Disable all gigE address decoder */
        MV_REG_WRITE (MV64460_ETH_BASE_ADDR_ENABLE_REG, 0x3f);
        DP (printf ("%s Ethernet stop called ... \n", __FUNCTION__));
@@ -714,7 +705,6 @@ int mv64460_eth_xmit (struct eth_device *dev, volatile void *dataPtr,
 {
        ETH_PORT_INFO *ethernet_private;
        struct mv64460_eth_priv *port_private;
-       unsigned int port_num;
        PKT_INFO pkt_info;
        ETH_FUNC_RET_STATUS status;
        struct net_device_stats *stats;
@@ -723,7 +713,6 @@ int mv64460_eth_xmit (struct eth_device *dev, volatile void *dataPtr,
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64460_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
 
        stats = port_private->stats;
 
@@ -799,15 +788,12 @@ int mv64460_eth_receive (struct eth_device *dev)
 {
        ETH_PORT_INFO *ethernet_private;
        struct mv64460_eth_priv *port_private;
-       unsigned int port_num;
        PKT_INFO pkt_info;
        struct net_device_stats *stats;
 
-
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64460_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
        stats = port_private->stats;
 
        while ((eth_port_receive (ethernet_private, ETH_Q0, &pkt_info) ==
@@ -898,12 +884,10 @@ static struct net_device_stats *mv64460_eth_get_stats (struct eth_device *dev)
 {
        ETH_PORT_INFO *ethernet_private;
        struct mv64460_eth_priv *port_private;
-       unsigned int port_num;
 
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64460_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
 
        mv64460_eth_update_stat (dev);
 
@@ -925,13 +909,10 @@ static void mv64460_eth_update_stat (struct eth_device *dev)
        ETH_PORT_INFO *ethernet_private;
        struct mv64460_eth_priv *port_private;
        struct net_device_stats *stats;
-       unsigned int port_num;
-       volatile unsigned int dummy;
 
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64460_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
        stats = port_private->stats;
 
        /* These are false updates */
@@ -954,12 +935,12 @@ static void mv64460_eth_update_stat (struct eth_device *dev)
         * But the unsigned long in PowerPC and MIPS are 32bit. So the next read
         * is just a dummy read for proper work of the GigE port
         */
-       dummy = eth_read_mib_counter (ethernet_private->port_num,
+       eth_read_mib_counter (ethernet_private->port_num,
                                      ETH_MIB_GOOD_OCTETS_RECEIVED_HIGH);
        stats->tx_bytes += (unsigned long)
                eth_read_mib_counter (ethernet_private->port_num,
                                      ETH_MIB_GOOD_OCTETS_SENT_LOW);
-       dummy = eth_read_mib_counter (ethernet_private->port_num,
+       eth_read_mib_counter (ethernet_private->port_num,
                                      ETH_MIB_GOOD_OCTETS_SENT_HIGH);
        stats->rx_errors += (unsigned long)
                eth_read_mib_counter (ethernet_private->port_num,
@@ -1007,12 +988,10 @@ static void mv64460_eth_print_stat (struct eth_device *dev)
        ETH_PORT_INFO *ethernet_private;
        struct mv64460_eth_priv *port_private;
        struct net_device_stats *stats;
-       unsigned int port_num;
 
        ethernet_private = (ETH_PORT_INFO *) dev->priv;
        port_private =
                (struct mv64460_eth_priv *) ethernet_private->port_private;
-       port_num = port_private->port_num;
        stats = port_private->stats;
 
        /* These are false updates */
@@ -2064,13 +2043,11 @@ static void eth_port_init_mac_tables (ETH_PORT eth_port_num)
 static void eth_clear_mib_counters (ETH_PORT eth_port_num)
 {
        int i;
-       unsigned int dummy;
 
        /* Perform dummy reads from MIB counters */
        for (i = ETH_MIB_GOOD_OCTETS_RECEIVED_LOW; i < ETH_MIB_LATE_COLLISION;
             i += 4)
-               dummy = MV_REG_READ ((MV64460_ETH_MIB_COUNTERS_BASE
-                                     (eth_port_num) + i));
+               MV_REG_READ((MV64460_ETH_MIB_COUNTERS_BASE(eth_port_num) + i));
 
        return;
 }
index e328d8ff1340f0bd85750bc01521e5047cedc18a..6297447c745394975fa1c52816d2ed209c073bbe 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#undef DEBUG
 #define        MAP_PCI
 
-#ifdef DEBUG
-#define DP(x) x
-#else
-#define DP(x)
-#endif
-
 int set_dfcdlInit (void);      /* setup delay line of Mv64460 */
 int mvDmaIsChannelActive (int);
 int mvDmaSetMemorySpace (ulong, ulong, ulong, ulong, ulong);
@@ -69,14 +62,12 @@ memory_map_bank (unsigned int bankNo,
 #endif
 
 
-#ifdef DEBUG
        if (bankLength > 0) {
-               printf ("mapping bank %d at %08x - %08x\n",
+               debug("mapping bank %d at %08x - %08x\n",
                        bankNo, bankBase, bankBase + bankLength - 1);
        } else {
-               printf ("unmapping bank %d\n", bankNo);
+               debug("unmapping bank %d\n", bankNo);
        }
-#endif
 
        memoryMapBank (bankNo, bankBase, bankLength);
 
@@ -276,7 +267,7 @@ return 0;
 #else
        uchar addr = slot == 0 ? DIMM0_I2C_ADDR : DIMM1_I2C_ADDR;
        int ret;
-       unsigned int i, j, density = 1, devicesForErrCheck = 0;
+       unsigned int i, j, density = 1;
 
 #ifdef DEBUG
        unsigned int k;
@@ -286,17 +277,17 @@ return 0;
        uchar supp_cal, cal_val;
        ulong memclk, tmemclk;
        ulong tmp;
-       uchar trp_clocks = 0, trcd_clocks, tras_clocks, trrd_clocks;
+       uchar trp_clocks = 0, tras_clocks;
        uchar data[128];
 
        memclk = gd->bus_clk;
        tmemclk = 1000000000 / (memclk / 100);  /* in 10 ps units */
 
-       DP (puts ("before i2c read\n"));
+       debug("before i2c read\n");
 
        ret = i2c_read (addr, 0, 1, data, 128);
 
-       DP (puts ("after i2c read\n"));
+       debug("after i2c read\n");
 
        /* zero all the values */
        memset (dimmInfo, 0, sizeof (*dimmInfo));
@@ -307,7 +298,7 @@ return 0;
        }
 
        if (ret) {
-               DP (printf ("No DIMM in slot %d [err = %x]\n", slot, ret));
+               debug("No DIMM in slot %d [err = %x]\n", slot, ret);
                return 0;
        } else
                dimmInfo->slot = slot;  /* start to fill up dimminfo for this "slot" */
@@ -387,46 +378,46 @@ return 0;
                        dimmInfo->memoryType = (data[i] == 0x7) ? DDR : SDRAM;
 #ifdef DEBUG
                        if (dimmInfo->memoryType == 0)
-                               DP (printf
+                               debug
                                    ("Dram_type in slot %d is:                  SDRAM\n",
-                                    dimmInfo->slot));
+                                    dimmInfo->slot);
                        if (dimmInfo->memoryType == 1)
-                               DP (printf
+                               debug
                                    ("Dram_type in slot %d is:                  DDRAM\n",
-                                    dimmInfo->slot));
+                                    dimmInfo->slot);
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 3: /* Number Of Row Addresses */
                        dimmInfo->numOfRowAddresses = data[i];
-                       DP (printf
+                       debug
                            ("Module Number of row addresses:           %d\n",
-                            dimmInfo->numOfRowAddresses));
+                            dimmInfo->numOfRowAddresses);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 4: /* Number Of Column Addresses */
                        dimmInfo->numOfColAddresses = data[i];
-                       DP (printf
+                       debug
                            ("Module Number of col addresses:           %d\n",
-                            dimmInfo->numOfColAddresses));
+                            dimmInfo->numOfColAddresses);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 5: /* Number Of Module Banks */
                        dimmInfo->numOfModuleBanks = data[i];
-                       DP (printf
+                       debug
                            ("Number of Banks on Mod. :                                 %d\n",
-                            dimmInfo->numOfModuleBanks));
+                            dimmInfo->numOfModuleBanks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 6: /* Data Width */
                        dimmInfo->dataWidth = data[i];
-                       DP (printf
+                       debug
                            ("Module Data Width:                                %d\n",
-                            dimmInfo->dataWidth));
+                            dimmInfo->dataWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -434,33 +425,33 @@ return 0;
                        switch (data[i]) {
                        case 0x0:
                                dimmInfo->voltageInterface = TTL_5V_TOLERANT;
-                               DP (printf
-                                   ("Module is                                         TTL_5V_TOLERANT\n"));
+                               debug
+                                   ("Module is                                         TTL_5V_TOLERANT\n");
                                break;
                        case 0x1:
                                dimmInfo->voltageInterface = LVTTL;
-                               DP (printf
-                                   ("Module is                                         LVTTL\n"));
+                               debug
+                                   ("Module is                                         LVTTL\n");
                                break;
                        case 0x2:
                                dimmInfo->voltageInterface = HSTL_1_5V;
-                               DP (printf
-                                   ("Module is                                         TTL_5V_TOLERANT\n"));
+                               debug
+                                   ("Module is                                         TTL_5V_TOLERANT\n");
                                break;
                        case 0x3:
                                dimmInfo->voltageInterface = SSTL_3_3V;
-                               DP (printf
-                                   ("Module is                                         HSTL_1_5V\n"));
+                               debug
+                                   ("Module is                                         HSTL_1_5V\n");
                                break;
                        case 0x4:
                                dimmInfo->voltageInterface = SSTL_2_5V;
-                               DP (printf
-                                   ("Module is                                         SSTL_2_5V\n"));
+                               debug
+                                   ("Module is                                         SSTL_2_5V\n");
                                break;
                        default:
                                dimmInfo->voltageInterface = VOLTAGE_UNKNOWN;
-                               DP (printf
-                                   ("Module is                                         VOLTAGE_UNKNOWN\n"));
+                               debug
+                                   ("Module is                                         VOLTAGE_UNKNOWN\n");
                                break;
                        }
                        break;
@@ -479,9 +470,9 @@ return 0;
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancy_RoP =
                                rightOfPoint;
-                       DP (printf
+                       debug
                            ("Minimum Cycle Time At Max CasLatancy:             %d.%d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -494,49 +485,49 @@ return 0;
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOut_LoP = leftOfPoint;
                        dimmInfo->clockToDataOut_RoP = rightOfPoint;
-                       DP (printf ("Clock To Data Out:                                 %d.%2d [ns]\n", leftOfPoint, rightOfPoint));    /*dimmInfo->clockToDataOut */
+                       debug("Clock To Data Out:                               %d.%2d [ns]\n", leftOfPoint, rightOfPoint);     /*dimmInfo->clockToDataOut */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
 /*#ifdef CONFIG_ECC */
                case 11:        /* Error Check Type */
                        dimmInfo->errorCheckType = data[i];
-                       DP (printf
+                       debug
                            ("Error Check Type (0=NONE):                        %d\n",
-                            dimmInfo->errorCheckType));
+                            dimmInfo->errorCheckType);
                        break;
 /* #endif */
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 12:        /* Refresh Interval */
                        dimmInfo->RefreshInterval = data[i];
-                       DP (printf
+                       debug
                            ("RefreshInterval (80= Self refresh Normal, 15.625us) : %x\n",
-                            dimmInfo->RefreshInterval));
+                            dimmInfo->RefreshInterval);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 13:        /* Sdram Width */
                        dimmInfo->sdramWidth = data[i];
-                       DP (printf
+                       debug
                            ("Sdram Width:                                      %d\n",
-                            dimmInfo->sdramWidth));
+                            dimmInfo->sdramWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 14:        /* Error Check Data Width */
                        dimmInfo->errorCheckDataWidth = data[i];
-                       DP (printf
+                       debug
                            ("Error Check Data Width:                   %d\n",
-                            dimmInfo->errorCheckDataWidth));
+                            dimmInfo->errorCheckDataWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 15:        /* Minimum Clock Delay */
                        dimmInfo->minClkDelay = data[i];
-                       DP (printf
+                       debug
                            ("Minimum Clock Delay:                              %d\n",
-                            dimmInfo->minClkDelay));
+                            dimmInfo->minClkDelay);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -552,26 +543,26 @@ return 0;
 
                        dimmInfo->burstLengthSupported = data[i];
 #ifdef DEBUG
-                       DP (printf
-                           ("Burst Length Supported:                   "));
+                       debug
+                           ("Burst Length Supported:                   ");
                        if (dimmInfo->burstLengthSupported & 0x01)
-                               DP (printf ("1, "));
+                               debug("1, ");
                        if (dimmInfo->burstLengthSupported & 0x02)
-                               DP (printf ("2, "));
+                               debug("2, ");
                        if (dimmInfo->burstLengthSupported & 0x04)
-                               DP (printf ("4, "));
+                               debug("4, ");
                        if (dimmInfo->burstLengthSupported & 0x08)
-                               DP (printf ("8, "));
-                       DP (printf (" Bit \n"));
+                               debug("8, ");
+                       debug(" Bit \n");
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 17:        /* Number Of Banks On Each Device */
                        dimmInfo->numOfBanksOnEachDevice = data[i];
-                       DP (printf
+                       debug
                            ("Number Of Banks On Each Chip:                     %d\n",
-                            dimmInfo->numOfBanksOnEachDevice));
+                            dimmInfo->numOfBanksOnEachDevice);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -591,34 +582,34 @@ return 0;
                         ********************************************************/
                        dimmInfo->suportedCasLatencies = data[i];
 #ifdef DEBUG
-                       DP (printf
-                           ("Suported Cas Latencies: (CL)                      "));
+                       debug
+                           ("Suported Cas Latencies: (CL)                      ");
                        if (dimmInfo->memoryType == 0) {        /* SDRAM */
                                for (k = 0; k <= 7; k++) {
                                        if (dimmInfo->
                                            suportedCasLatencies & (1 << k))
-                                               DP (printf
+                                               debug
                                                    ("%d,                       ",
-                                                    k + 1));
+                                                    k + 1);
                                }
 
                        } else {        /* DDR-RAM */
 
                                if (dimmInfo->suportedCasLatencies & 1)
-                                       DP (printf ("1, "));
+                                       debug("1, ");
                                if (dimmInfo->suportedCasLatencies & 2)
-                                       DP (printf ("1.5, "));
+                                       debug("1.5, ");
                                if (dimmInfo->suportedCasLatencies & 4)
-                                       DP (printf ("2, "));
+                                       debug("2, ");
                                if (dimmInfo->suportedCasLatencies & 8)
-                                       DP (printf ("2.5, "));
+                                       debug("2.5, ");
                                if (dimmInfo->suportedCasLatencies & 16)
-                                       DP (printf ("3, "));
+                                       debug("3, ");
                                if (dimmInfo->suportedCasLatencies & 32)
-                                       DP (printf ("3.5, "));
+                                       debug("3.5, ");
 
                        }
-                       DP (printf ("\n"));
+                       debug("\n");
 #endif
                        /* Calculating MAX CAS latency */
                        for (j = 7; j > 0; j--) {
@@ -630,8 +621,8 @@ return 0;
                                                /* CAS latency 1, 1.5, 2, 2.5, 3, 3.5 */
                                                switch (j) {
                                                case 7:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                =
@@ -639,8 +630,8 @@ return 0;
                                                        hang ();
                                                        break;
                                                case 6:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                =
@@ -648,36 +639,36 @@ return 0;
                                                        hang ();
                                                        break;
                                                case 5:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         3.5 clk's\n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         3.5 clk's\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_3_5;
                                                        break;
                                                case 4:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         3 clk's \n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         3 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_3;
                                                        break;
                                                case 3:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         2.5 clk's \n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         2.5 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_2_5;
                                                        break;
                                                case 2:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         2 clk's \n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         2 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_2;
                                                        break;
                                                case 1:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         1.5 clk's \n"));
+                                                       debug
+                                                           ("Max. Cas Latencies (DDR):                         1.5 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_1_5;
@@ -707,8 +698,8 @@ return 0;
                                                                dimmInfo->
                                                                maxClSupported_DDR
                                                                >> 1;
-                                                       DP (printf
-                                                           ("*** Change actual Cas Latencies cause of minimumCycleTime n"));
+                                                       debug
+                                                           ("*** Change actual Cas Latencies cause of minimumCycleTime n");
                                                }
                                                /* ronen - checkif the Dimm frequency compared to the Sysclock. */
                                                if ((dimmInfo->
@@ -744,32 +735,32 @@ return 0;
                                                        dimmInfo->
                                                                maxCASlatencySupported_RoP
                                                                = 0;
-                                               DP (printf
+                                               debug
                                                    ("Max. Cas Latencies (DDR LoP.RoP Notation):        %d.%d \n",
                                                     dimmInfo->
                                                     maxCASlatencySupported_LoP,
                                                     dimmInfo->
-                                                    maxCASlatencySupported_RoP));
+                                                    maxCASlatencySupported_RoP);
                                                break;
                                        case SDRAM:
                                                /* CAS latency 1, 2, 3, 4, 5, 6, 7 */
                                                dimmInfo->maxClSupported_SD = j;        /*  Cas Latency DDR-RAM Coded                   */
-                                               DP (printf
+                                               debug
                                                    ("Max. Cas Latencies (SD): %d\n",
                                                     dimmInfo->
-                                                    maxClSupported_SD));
+                                                    maxClSupported_SD);
                                                dimmInfo->
                                                        maxCASlatencySupported_LoP
                                                        = j;
                                                dimmInfo->
                                                        maxCASlatencySupported_RoP
                                                        = 0;
-                                               DP (printf
+                                               debug
                                                    ("Max. Cas Latencies (DDR LoP.RoP Notation): %d.%d \n",
                                                     dimmInfo->
                                                     maxCASlatencySupported_LoP,
                                                     dimmInfo->
-                                                    maxCASlatencySupported_RoP));
+                                                    maxCASlatencySupported_RoP);
                                                break;
                                        }
                                        break;
@@ -779,7 +770,7 @@ return 0;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 21:        /* Buffered Address And Control Inputs */
-                       DP (printf ("\nModul Attributes (SPD Byte 21): \n"));
+                       debug("\nModul Attributes (SPD Byte 21): \n");
                        dimmInfo->bufferedAddrAndControlInputs =
                                data[i] & BIT0;
                        dimmInfo->registeredAddrAndControlInputs =
@@ -794,60 +785,60 @@ return 0;
                                (data[i] & BIT6) >> 6;
 #ifdef DEBUG
                        if (dimmInfo->bufferedAddrAndControlInputs == 1)
-                               DP (printf
-                                   (" - Buffered Address/Control Input:                Yes \n"));
+                               debug
+                                   (" - Buffered Address/Control Input:                Yes \n");
                        else
-                               DP (printf
-                                   (" - Buffered Address/Control Input:                No \n"));
+                               debug
+                                   (" - Buffered Address/Control Input:                No \n");
 
                        if (dimmInfo->registeredAddrAndControlInputs == 1)
-                               DP (printf
-                                   (" - Registered Address/Control Input:              Yes \n"));
+                               debug
+                                   (" - Registered Address/Control Input:              Yes \n");
                        else
-                               DP (printf
-                                   (" - Registered Address/Control Input:              No \n"));
+                               debug
+                                   (" - Registered Address/Control Input:              No \n");
 
                        if (dimmInfo->onCardPLL == 1)
-                               DP (printf
-                                   (" - On-Card PLL (clock):                           Yes \n"));
+                               debug
+                                   (" - On-Card PLL (clock):                           Yes \n");
                        else
-                               DP (printf
-                                   (" - On-Card PLL (clock):                           No \n"));
+                               debug
+                                   (" - On-Card PLL (clock):                           No \n");
 
                        if (dimmInfo->bufferedDQMBinputs == 1)
-                               DP (printf
-                                   (" - Bufferd DQMB Inputs:                           Yes \n"));
+                               debug
+                                   (" - Bufferd DQMB Inputs:                           Yes \n");
                        else
-                               DP (printf
-                                   (" - Bufferd DQMB Inputs:                           No \n"));
+                               debug
+                                   (" - Bufferd DQMB Inputs:                           No \n");
 
                        if (dimmInfo->registeredDQMBinputs == 1)
-                               DP (printf
-                                   (" - Registered DQMB Inputs:                        Yes \n"));
+                               debug
+                                   (" - Registered DQMB Inputs:                        Yes \n");
                        else
-                               DP (printf
-                                   (" - Registered DQMB Inputs:                        No \n"));
+                               debug
+                                   (" - Registered DQMB Inputs:                        No \n");
 
                        if (dimmInfo->differentialClockInput == 1)
-                               DP (printf
-                                   (" - Differential Clock Input:                      Yes \n"));
+                               debug
+                                   (" - Differential Clock Input:                      Yes \n");
                        else
-                               DP (printf
-                                   (" - Differential Clock Input:                      No \n"));
+                               debug
+                                   (" - Differential Clock Input:                      No \n");
 
                        if (dimmInfo->redundantRowAddressing == 1)
-                               DP (printf
-                                   (" - redundant Row Addressing:                      Yes \n"));
+                               debug
+                                   (" - redundant Row Addressing:                      Yes \n");
                        else
-                               DP (printf
-                                   (" - redundant Row Addressing:                      No \n"));
+                               debug
+                                   (" - redundant Row Addressing:                      No \n");
 
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 22:        /* Suported AutoPreCharge */
-                       DP (printf ("\nModul Attributes (SPD Byte 22): \n"));
+                       debug("\nModul Attributes (SPD Byte 22): \n");
                        dimmInfo->suportedEarlyRasPreCharge = data[i] & BIT0;
                        dimmInfo->suportedAutoPreCharge =
                                (data[i] & BIT1) >> 1;
@@ -861,46 +852,46 @@ return 0;
                                (data[i] & BIT5) >> 5;
 #ifdef DEBUG
                        if (dimmInfo->suportedEarlyRasPreCharge == 1)
-                               DP (printf
-                                   (" - Early Ras Precharge:                   Yes \n"));
+                               debug
+                                   (" - Early Ras Precharge:                   Yes \n");
                        else
-                               DP (printf
-                                   (" -  Early Ras Precharge:                  No \n"));
+                               debug
+                                   (" -  Early Ras Precharge:                  No \n");
 
                        if (dimmInfo->suportedAutoPreCharge == 1)
-                               DP (printf
-                                   (" - AutoPreCharge:                         Yes \n"));
+                               debug
+                                   (" - AutoPreCharge:                         Yes \n");
                        else
-                               DP (printf
-                                   (" -  AutoPreCharge:                                No \n"));
+                               debug
+                                   (" -  AutoPreCharge:                                No \n");
 
                        if (dimmInfo->suportedPreChargeAll == 1)
-                               DP (printf
-                                   (" - Precharge All:                         Yes \n"));
+                               debug
+                                   (" - Precharge All:                         Yes \n");
                        else
-                               DP (printf
-                                   (" -  Precharge All:                                No \n"));
+                               debug
+                                   (" -  Precharge All:                                No \n");
 
                        if (dimmInfo->suportedWrite1ReadBurst == 1)
-                               DP (printf
-                                   (" - Write 1/ReadBurst:                             Yes \n"));
+                               debug
+                                   (" - Write 1/ReadBurst:                             Yes \n");
                        else
-                               DP (printf
-                                   (" -  Write 1/ReadBurst:                            No \n"));
+                               debug
+                                   (" -  Write 1/ReadBurst:                            No \n");
 
                        if (dimmInfo->suported5PercentLowVCC == 1)
-                               DP (printf
-                                   (" - lower VCC tolerance:                   5 Percent \n"));
+                               debug
+                                   (" - lower VCC tolerance:                   5 Percent \n");
                        else
-                               DP (printf
-                                   ("  - lower VCC tolerance:                  10 Percent \n"));
+                               debug
+                                   ("  - lower VCC tolerance:                  10 Percent \n");
 
                        if (dimmInfo->suported5PercentUpperVCC == 1)
-                               DP (printf
-                                   (" - upper VCC tolerance:                   5 Percent \n"));
+                               debug
+                                   (" - upper VCC tolerance:                   5 Percent \n");
                        else
-                               DP (printf
-                                   (" -  upper VCC tolerance:                  10 Percent \n"));
+                               debug
+                                   (" -  upper VCC tolerance:                  10 Percent \n");
 
 #endif
                        break;
@@ -919,7 +910,7 @@ return 0;
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancyMinus1_RoP =
                                rightOfPoint;
-                       DP (printf ("Minimum Cycle Time At 2nd highest CasLatancy (0 = Not supported): %d.%d [ns]\n", leftOfPoint, rightOfPoint));      /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
+                       debug("Minimum Cycle Time At 2nd highest CasLatancy (0 = Not supported): %d.%d [ns]\n", leftOfPoint, rightOfPoint);     /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -932,9 +923,9 @@ return 0;
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOutMinus1_LoP = leftOfPoint;
                        dimmInfo->clockToDataOutMinus1_RoP = rightOfPoint;
-                       DP (printf
+                       debug
                            ("Clock To Data Out (2nd CL value):                 %d.%2d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -951,7 +942,7 @@ return 0;
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancyMinus2_RoP =
                                rightOfPoint;
-                       DP (printf ("Minimum Cycle Time At 3rd highest CasLatancy (0 = Not supported): %d.%d [ns]\n", leftOfPoint, rightOfPoint));      /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
+                       debug("Minimum Cycle Time At 3rd highest CasLatancy (0 = Not supported): %d.%d [ns]\n", leftOfPoint, rightOfPoint);     /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -964,9 +955,9 @@ return 0;
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOutMinus2_LoP = leftOfPoint;
                        dimmInfo->clockToDataOutMinus2_RoP = rightOfPoint;
-                       DP (printf
+                       debug
                            ("Clock To Data Out (3rd CL value):                 %d.%2d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -983,12 +974,12 @@ return 0;
                        trp_clocks =
                                (dimmInfo->minRowPrechargeTime +
                                 (tmemclk - 1)) / tmemclk;
-                       DP (printf
+                       debug
                            ("*** 1 clock cycle = %ld  10ps intervalls = %ld.%ld ns****\n",
-                            tmemclk, tmemclk / 100, tmemclk % 100));
-                       DP (printf
+                            tmemclk, tmemclk / 100, tmemclk % 100);
+                       debug
                            ("Minimum Row Precharge Time [ns]:          %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1002,12 +993,9 @@ return 0;
                        rightOfPoint = (data[i] & maskRightOfPoint) * 25;
 
                        dimmInfo->minRowActiveRowActiveDelay = ((leftOfPoint * 100) + rightOfPoint);    /* measured in 100ns Intervals */
-                       trrd_clocks =
-                               (dimmInfo->minRowActiveRowActiveDelay +
-                                (tmemclk - 1)) / tmemclk;
-                       DP (printf
+                       debug
                            ("Minimum Row Active -To- Row Active Delay [ns]:    %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1021,12 +1009,9 @@ return 0;
                        rightOfPoint = (data[i] & maskRightOfPoint) * 25;
 
                        dimmInfo->minRowActiveRowActiveDelay = ((leftOfPoint * 100) + rightOfPoint);    /* measured in 100ns Intervals */
-                       trcd_clocks =
-                               (dimmInfo->minRowActiveRowActiveDelay +
-                                (tmemclk - 1)) / tmemclk;
-                       DP (printf
+                       debug
                            ("Minimum Ras-To-Cas Delay [ns]:                    %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1035,41 +1020,41 @@ return 0;
                        tras_clocks =
                                (NSto10PS (data[i]) +
                                 (tmemclk - 1)) / tmemclk;
-                       DP (printf
+                       debug
                            ("Minimum Ras Pulse Width [ns]:                     %d = in Clk cycles %d\n",
-                            dimmInfo->minRasPulseWidth, tras_clocks));
+                            dimmInfo->minRasPulseWidth, tras_clocks);
 
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 31:        /* Module Bank Density */
                        dimmInfo->moduleBankDensity = data[i];
-                       DP (printf
+                       debug
                            ("Module Bank Density:                              %d\n",
-                            dimmInfo->moduleBankDensity));
+                            dimmInfo->moduleBankDensity);
 #ifdef DEBUG
-                       DP (printf
-                           ("*** Offered Densities (more than 1 = Multisize-Module): "));
+                       debug
+                           ("*** Offered Densities (more than 1 = Multisize-Module): ");
                        {
                                if (dimmInfo->moduleBankDensity & 1)
-                                       DP (printf ("4MB, "));
+                                       debug("4MB, ");
                                if (dimmInfo->moduleBankDensity & 2)
-                                       DP (printf ("8MB, "));
+                                       debug("8MB, ");
                                if (dimmInfo->moduleBankDensity & 4)
-                                       DP (printf ("16MB, "));
+                                       debug("16MB, ");
                                if (dimmInfo->moduleBankDensity & 8)
-                                       DP (printf ("32MB, "));
+                                       debug("32MB, ");
                                if (dimmInfo->moduleBankDensity & 16)
-                                       DP (printf ("64MB, "));
+                                       debug("64MB, ");
                                if (dimmInfo->moduleBankDensity & 32)
-                                       DP (printf ("128MB, "));
+                                       debug("128MB, ");
                                if ((dimmInfo->moduleBankDensity & 64)
                                    || (dimmInfo->moduleBankDensity & 128)) {
-                                       DP (printf ("ERROR, "));
+                                       debug("ERROR, ");
                                        hang ();
                                }
                        }
-                       DP (printf ("\n"));
+                       debug("\n");
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
@@ -1095,9 +1080,9 @@ return 0;
                        }
                        dimmInfo->addrAndCommandSetupTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
+                       debug
                            ("Address And Command Setup Time [ns]:              %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1122,9 +1107,9 @@ return 0;
                        }
                        dimmInfo->addrAndCommandHoldTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
+                       debug
                            ("Address And Command Hold Time [ns]:               %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1149,9 +1134,9 @@ return 0;
                        }
                        dimmInfo->dataInputSetupTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
+                       debug
                            ("Data Input Setup Time [ns]:                       %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1176,9 +1161,9 @@ return 0;
                        }
                        dimmInfo->dataInputHoldTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
+                       debug
                            ("Data Input Hold Time [ns]:                        %d.%d\n\n",
-                            sign * leftOfPoint, rightOfPoint));
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
                }
@@ -1194,8 +1179,6 @@ return 0;
        dimmInfo->numberOfDevices =
                (dimmInfo->dataWidth / dimmInfo->sdramWidth) *
                dimmInfo->numOfModuleBanks;
-       devicesForErrCheck =
-               (dimmInfo->dataWidth - 64) / dimmInfo->sdramWidth;
        if ((dimmInfo->errorCheckType == 0x1)
            || (dimmInfo->errorCheckType == 0x2)
            || (dimmInfo->errorCheckType == 0x3)) {
@@ -1217,7 +1200,7 @@ return 0;
        tmp *= dimmInfo->sdramWidth;
        tmp = tmp >> 24;        /* div by 0x4000000 (64M)       */
        dimmInfo->drb_size = (uchar) tmp;
-       DP (printf ("Module DRB size (n*64Mbit): %d\n", dimmInfo->drb_size));
+       debug("Module DRB size (n*64Mbit): %d\n", dimmInfo->drb_size);
 
        /* try a CAS latency of 3 first... */
 
@@ -1236,11 +1219,11 @@ return 0;
                        cal_val = 2;
        }
 
-       DP (printf ("cal_val = %d\n", cal_val));
+       debug("cal_val = %d\n", cal_val);
 
        /* bummer, did't work... */
        if (cal_val == 0) {
-               DP (printf ("Couldn't find a good CAS latency\n"));
+               debug("Couldn't find a good CAS latency\n");
                hang ();
                return 0;
        }
@@ -1271,13 +1254,13 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
 
        /* delay line */
        set_dfcdlInit ();       /* may be its not needed */
-       DP (printf ("Delay line set done\n"));
+       debug("Delay line set done\n");
 
        /* set SDRAM mode NOP */ /* To_do check it */
        GT_REG_WRITE (SDRAM_OPERATION, 0x5);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 1418: Module still busy ... please wait... ***\n"));
+               debug
+                   ("\n*** SDRAM_OPERATION 1418: Module still busy ... please wait... ***\n");
        }
 
        /* SDRAM configuration */
@@ -1328,12 +1311,12 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                hang ();
                break;
        }
-       DP (printf ("calculated refresh interval %0x\n", sdram_config_reg));
+       debug("calculated refresh interval %0x\n", sdram_config_reg);
 
        /* make sure the refresh value is only 14 bits */
        if (sdram_config_reg > 0x1fff)
                sdram_config_reg = 0x1fff;
-       DP (printf ("adjusted refresh interval %0x\n", sdram_config_reg));
+       debug("adjusted refresh interval %0x\n", sdram_config_reg);
 
        /* we want physical bank interleaving and */
        /* virtual bank interleaving enabled so do nothing */
@@ -1343,30 +1326,30 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        if (info->registeredAddrAndControlInputs == 1) {
                /* it's registered DRAM, so set the reg. DRAM bit */
                sdram_config_reg = sdram_config_reg | BIT17;
-               DP (printf ("Enabling registered DRAM bit\n"));
+               debug("Enabling registered DRAM bit\n");
        }
        /* turn on DRAM ECC? */
 #ifdef CONFIG_MV64460_ECC
        if (info->errorCheckType == 0x2) {
                /* DRAM has ECC, so turn it on */
                sdram_config_reg = sdram_config_reg | BIT18;
-               DP (printf ("Enabling ECC\n"));
+               debug("Enabling ECC\n");
        }
 #endif
        /* set the data DQS pin configuration */
        switch (info->sdramWidth) {
        case 0x4:               /* memory is x4 */
                sdram_config_reg = sdram_config_reg | BIT20 | BIT21;
-               DP (printf ("Data DQS pins set for 16 pins\n"));
+               debug("Data DQS pins set for 16 pins\n");
                break;
        case 0x8:               /* memory is x8 or x16 */
        case 0x10:
                sdram_config_reg = sdram_config_reg | BIT21;
-               DP (printf ("Data DQS pins set for 8 pins\n"));
+               debug("Data DQS pins set for 8 pins\n");
                break;
        case 0x20:              /* memory is x32 */
                /* both bits are cleared for x32 so nothing to do */
-               DP (printf ("Data DQS pins set for 2 pins\n"));
+               debug("Data DQS pins set for 2 pins\n");
                break;
        default:                /* memory width unsupported */
                printf ("DRAM chip width is unknown!\n");
@@ -1392,21 +1375,21 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
 
        /* write the value into the SDRAM configuration register */
        GT_REG_WRITE (SDRAM_CONFIG, sdram_config_reg);
-       DP (printf ("sdram_conf 0x1400: %08x\n", GTREGREAD (SDRAM_CONFIG)));
+       debug("sdram_conf 0x1400: %08x\n", GTREGREAD (SDRAM_CONFIG));
 
        /* SDRAM open pages control keep open as much as I can */
        GT_REG_WRITE (SDRAM_OPEN_PAGES_CONTROL, 0x0);
-       DP (printf
+       debug
            ("sdram_open_pages_controll 0x1414: %08x\n",
-            GTREGREAD (SDRAM_OPEN_PAGES_CONTROL)));
+            GTREGREAD (SDRAM_OPEN_PAGES_CONTROL));
 
        /* SDRAM D_UNIT_CONTROL_LOW 0x1404 */
        tmp = (GTREGREAD (D_UNIT_CONTROL_LOW) & 0x01);  /* Clock Domain Sync from power on reset */
        if (tmp == 0)
-               DP (printf ("Core Signals are sync (by HW-Setting)!!!\n"));
+               debug("Core Signals are sync (by HW-Setting)!!!\n");
        else
-               DP (printf
-                   ("Core Signals syncs. are bypassed (by HW-Setting)!!!\n"));
+               debug
+                   ("Core Signals syncs. are bypassed (by HW-Setting)!!!\n");
 
        /* SDRAM set CAS Latency according to SPD information */
        switch (info->memoryType) {
@@ -1419,7 +1402,7 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                /* Calculate the settings for SDRAM mode and Dunit control low registers */
                /* Values set according to technical bulletin TB-92 rev. c */
        case DDR:
-               DP (printf ("### SET-CL for DDR-RAM\n"));
+               debug("### SET-CL for DDR-RAM\n");
                /* ronen db64460 - change the tmp_dunit_control_low setting!!! */
                switch (info->maxClSupported_DDR) {
                case DDR_CL_3:
@@ -1429,9 +1412,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0x05110051;
                                else
                                        tmp_dunit_control_low = 0x24110051;
-                               DP (printf
+                               debug
                                    ("Max. CL is 3 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                                printf ("Warnning: DRAM ClkSync was never tested(db64460)!!!!!\n");
                        } else {        /* clk sync. bypassed   */
 
@@ -1439,9 +1422,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0xC5000540;
                                else
                                        tmp_dunit_control_low = 0xC4000540;
-                               DP (printf
+                               debug
                                    ("Max. CL is 3 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
                case DDR_CL_2_5:
@@ -1451,9 +1434,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0x25110051;
                                else
                                        tmp_dunit_control_low = 0x24110051;
-                               DP (printf
+                               debug
                                    ("Max. CL is 2.5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                                printf ("Warnning: DRAM ClkSync was never tested(db64460)!!!!!\n");
                        } else {        /* clk sync. bypassed   */
 
@@ -1464,9 +1447,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        /* hang();1 */
                                } else
                                        tmp_dunit_control_low = 0xC4000540;
-                               DP (printf
+                               debug
                                    ("Max. CL is 2.5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
                case DDR_CL_2:
@@ -1476,9 +1459,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0x04110051;
                                else
                                        tmp_dunit_control_low = 0x03110051;
-                               DP (printf
+                               debug
                                    ("Max. CL is 2 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                                printf ("Warnning: DRAM ClkSync was never tested(db64460)!!!!!\n");
                        } else {        /* clk sync. bypassed   */
 
@@ -1489,9 +1472,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0xC4000540;
                                } else
                                        tmp_dunit_control_low = 0xC3000540;;
-                               DP (printf
+                               debug
                                    ("Max. CL is 2 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
                case DDR_CL_1_5:
@@ -1501,9 +1484,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0x24110051;
                                else
                                        tmp_dunit_control_low = 0x23110051;
-                               DP (printf
+                               debug
                                    ("Max. CL is 1.5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                                printf ("Warnning: DRAM ClkSync was never tested(db64460)!!!!!\n");
                        } else {        /* clk sync. bypassed   */
 
@@ -1514,9 +1497,9 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                                        tmp_dunit_control_low = 0xC4000540;
                                } else
                                        tmp_dunit_control_low = 0xC3000540;
-                               DP (printf
+                               debug
                                    ("Max. CL is 1.5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
 
@@ -1536,8 +1519,8 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        /* set SDRAM mode SetCommand 0x1418 */
        GT_REG_WRITE (SDRAM_OPERATION, 0x3);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 0x1418 after SDRAM_MODE: Module still busy ... please wait... ***\n"));
+               debug
+                   ("\n*** SDRAM_OPERATION 0x1418 after SDRAM_MODE: Module still busy ... please wait... ***\n");
        }
 
        /* SDRAM D_UNIT_CONTROL_LOW 0x1404 */
@@ -1546,8 +1529,8 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        /* set SDRAM mode SetCommand 0x1418 */
        GT_REG_WRITE (SDRAM_OPERATION, 0x3);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 1418 after D_UNIT_CONTROL_LOW: Module still busy ... please wait... ***\n"));
+               debug
+                   ("\n*** SDRAM_OPERATION 1418 after D_UNIT_CONTROL_LOW: Module still busy ... please wait... ***\n");
        }
 
 /*------------------------------------------------------------------------------ */
@@ -1557,29 +1540,29 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        /* program this with the default value */
        tmp = 0x02;             /* power-up default address select decoding value */
 
-       DP (printf ("drb_size (n*64Mbit): %d\n", info->drb_size));
+       debug("drb_size (n*64Mbit): %d\n", info->drb_size);
 /* figure out the DRAM chip size */
        sdram_chip_size =
                (1 << (info->numOfRowAddresses + info->numOfColAddresses));
        sdram_chip_size *= info->sdramWidth;
        sdram_chip_size *= 4;
-       DP (printf ("computed sdram chip size is %#lx\n", sdram_chip_size));
+       debug("computed sdram chip size is %#lx\n", sdram_chip_size);
        /* divide sdram chip size by 64 Mbits */
        sdram_chip_size = sdram_chip_size / 0x4000000;
        switch (sdram_chip_size) {
        case 1:         /* 64 Mbit */
        case 2:         /* 128 Mbit */
-               DP (printf ("RAM-Device_size 64Mbit or 128Mbit)\n"));
+               debug("RAM-Device_size 64Mbit or 128Mbit)\n");
                tmp |= (0x00 << 4);
                break;
        case 4:         /* 256 Mbit */
        case 8:         /* 512 Mbit */
-               DP (printf ("RAM-Device_size 256Mbit or 512Mbit)\n"));
+               debug("RAM-Device_size 256Mbit or 512Mbit)\n");
                tmp |= (0x01 << 4);
                break;
        case 16:                /* 1 Gbit */
        case 32:                /* 2 Gbit */
-               DP (printf ("RAM-Device_size 1Gbit or 2Gbit)\n"));
+               debug("RAM-Device_size 1Gbit or 2Gbit)\n");
                tmp |= (0x02 << 4);
                break;
        default:
@@ -1590,15 +1573,15 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
 
        /* SDRAM address control */
        GT_REG_WRITE (SDRAM_ADDR_CONTROL, tmp);
-       DP (printf
+       debug
            ("setting up sdram address control (0x1410) with: %08lx \n",
-            tmp));
+            tmp);
 
 /* ------------------------------------------------------------------------------ */
 /* same settings for registerd & non-registerd DDR SDRAM */
-       DP (printf
+       debug
            ("setting up sdram_timing_control_low (0x1408) with: %08x \n",
-            0x01501220));
+            0x01501220);
        /*ronen db64460 */
        GT_REG_WRITE (SDRAM_TIMING_CONTROL_LOW, 0x01501220);
 
@@ -1611,10 +1594,10 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        if (info->registeredAddrAndControlInputs
            || info->registeredDQMBinputs) {
                tmp |= (1 << 17);
-               DP (printf
+               debug
                    ("SPD says: registered Addr. and Cont.: %d; registered DQMBinputs: %d\n",
                     info->registeredAddrAndControlInputs,
-                    info->registeredDQMBinputs));
+                    info->registeredDQMBinputs);
        }
 
        /* Use buffer 1 to return read data to the CPU
@@ -1624,29 +1607,29 @@ indent: Standard input:1465: Warning:old style assignment ambiguity in "=*".  As
 
 4460 */
        tmp |= (1 << 26);
-       DP (printf
+       debug
            ("Before Buffer assignment - sdram_conf (0x1400): %08x\n",
-            GTREGREAD (SDRAM_CONFIG)));
-       DP (printf
+            GTREGREAD (SDRAM_CONFIG));
+       debug
            ("After Buffer assignment - sdram_conf (0x1400): %08x\n",
-            GTREGREAD (SDRAM_CONFIG)));
+            GTREGREAD (SDRAM_CONFIG));
 
        /* SDRAM timing To_do: */
 /* ------------------------------------------------------------------------------ */
        /* ronen db64460 */
-       DP (printf
+       debug
            ("setting up sdram_timing_control_high (0x140c) with: %08x \n",
-            0xc));
+            0xc);
        GT_REG_WRITE (SDRAM_TIMING_CONTROL_HIGH, 0xc);
 
-       DP (printf
+       debug
            ("setting up sdram address pads control (0x14c0) with: %08x \n",
-            0x7d5014a));
+            0x7d5014a);
        GT_REG_WRITE (SDRAM_ADDR_CTRL_PADS_CALIBRATION, 0x7d5014a);
 
-       DP (printf
+       debug
            ("setting up sdram data pads control (0x14c4) with: %08x \n",
-            0x7d5014a));
+            0x7d5014a);
        GT_REG_WRITE (SDRAM_DATA_PADS_CALIBRATION, 0x7d5014a);
 
 /* ------------------------------------------------------------------------------ */
@@ -1656,8 +1639,8 @@ indent: Standard input:1465: Warning:old style assignment ambiguity in "=*".  As
 /*      for (i = info->slot * 2; i < ((info->slot * 2) + info->banks); i++) */
        {
                i = info->slot;
-               DP (printf
-                   ("\n*** Running a MRS cycle for bank %d ***\n", i));
+               debug
+                   ("\n*** Running a MRS cycle for bank %d ***\n", i);
 
                /* map the bank */
                memory_map_bank (i, 0, GB / 4);
@@ -1665,17 +1648,17 @@ indent: Standard input:1465: Warning:old style assignment ambiguity in "=*".  As
                /* set SDRAM mode */ /* To_do check it */
                GT_REG_WRITE (SDRAM_OPERATION, 0x3);
                check = GTREGREAD (SDRAM_OPERATION);
-               DP (printf
+               debug
                    ("\n*** SDRAM_OPERATION 1418 (0 = Normal Operation) = %08lx ***\n",
-                    check));
+                    check);
 
 
                /* switch back to normal operation mode */
                GT_REG_WRITE (SDRAM_OPERATION, 0);
                check = GTREGREAD (SDRAM_OPERATION);
-               DP (printf
+               debug
                    ("\n*** SDRAM_OPERATION 1418 (0 = Normal Operation) = %08lx ***\n",
-                    check));
+                    check);
 
                /* unmap the bank */
                memory_map_bank (i, 0, 0);
@@ -1721,9 +1704,9 @@ long int dram_size (long int *base, long int maxsize)
                *b = save2;
 
                if (val != cnt) {
-                       DP (printf
+                       debug
                            ("Found %08x  at Address %08x (failure)\n",
-                            (unsigned int) val, (unsigned int) addr));
+                            (unsigned int) val, (unsigned int) addr);
                        /* fix boundary condition.. STARTVAL means zero */
                        if (cnt == STARTVAL / sizeof (long))
                                cnt = 0;
@@ -1739,9 +1722,8 @@ long int dram_size (long int *base, long int maxsize)
  * controlling logic happens */
 phys_size_t initdram (int board_type)
 {
-       int s0 = 0, s1 = 0;
        int checkbank[4] = {[0 ... 3] = 0 };
-       ulong realsize, total, check;
+       ulong realsize, total;
        AUX_MEM_DIMM_INFO dimmInfo1;
        AUX_MEM_DIMM_INFO dimmInfo2;
        int nhr, bank_no;
@@ -1756,10 +1738,10 @@ phys_size_t initdram (int board_type)
                printf ("Skipping SD- DDRRAM setup due to NHR bit being set\n");
        } else {
                /* DIMM0 */
-               s0 = check_dimm (0, &dimmInfo1);
+               check_dimm (0, &dimmInfo1);
 
                /* DIMM1 */
-               s1 = check_dimm (1, &dimmInfo2);
+               check_dimm (1, &dimmInfo2);
 
                memory_map_bank (0, 0, 0);
                memory_map_bank (1, 0, 0);
@@ -1793,7 +1775,6 @@ phys_size_t initdram (int board_type)
        /* next, size the SDRAM banks */
 
        realsize = total = 0;
-       check = GB / 4;
        if (dimmInfo1.numOfModuleBanks > 0) {
                checkbank[0] = 1;
        }
index 9134856e28dc1702e6560f3a62cb5c82618c0c1e..c56bcf8da3d72538960d4ea1e322b7dc7f071c87 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index f0e2e801c4385aed115a79cfb281dc91c8f793cb..dda69e02917bcc079e6819a4847b2279904ba64a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * (C) Copyright 2008 Sergey Lapin <slapin@ossfans.org>
  *
index 1351358298718c6bf187bc4edb689e3a0eda0246..f438c150a38d2f352d3a1dfb2fddb6d69851e567 100644 (file)
 DECLARE_GLOBAL_DATA_PTR;
 
 #ifndef CONFIG_SPL_BUILD
-int dram_init(void)
-{
-       /* dram_init must store complete ramsize in gd->ram_size */
-       gd->ram_size = get_ram_size(
-                       (void *)CONFIG_SYS_SDRAM_BASE,
-                       CONFIG_MAX_RAM_BANK_SIZE);
-       return 0;
-}
-
-void dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
-       gd->bd->bi_dram[0].size = gd->ram_size;
-}
-
 static struct davinci_timer *timer =
        (struct davinci_timer *)DAVINCI_TIMER3_BASE;
 
index 359f5902195a3dc412209656ae7b0af72c50264c..59fd465c6b4178eba0edd9d0b10d87ac95c243cc 100644 (file)
@@ -32,7 +32,6 @@ LIB   = $(obj)lib$(BOARD).o
 COBJS-y        := $(BOARD).o
 COBJS-$(CONFIG_CMD_IDE) += ../common/cfide.o
 COBJS-$(CONFIG_EPLED) += ../common/epled.o
-COBJS-$(CONFIG_GPIO) += gpio.o
 COBJS-$(CONFIG_SEVENSEG) += ../common/sevenseg.o
 
 SOBJS-y        := text_base.o
index f7f38535fa557389a09de3d45525f65134bcbaca..fd3ec9a8d8ee2550bca30e9a8e637b42da0ebd47 100644 (file)
@@ -51,6 +51,7 @@
 /* led_pio.s1 is a altera_avalon_pio */
 #define LED_PIO_BASE 0x82120870
 #define LED_PIO_WIDTH 8
+#define LED_PIO_RSTVAL 0x0
 
 /* high_res_timer.s1 is a altera_avalon_timer */
 #define CONFIG_SYS_TIMER_BASE 0x82120820
diff --git a/board/altera/nios2-generic/gpio.c b/board/altera/nios2-generic/gpio.c
deleted file mode 100644 (file)
index 4a30564..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * board gpio driver
- *
- * Copyright (C) 2010 Thomas Chou <thomas@wytron.com.tw>
- * Licensed under the GPL-2 or later.
- */
-#include <common.h>
-#include <asm/io.h>
-
-#ifndef CONFIG_SYS_GPIO_BASE
-
-#define ALTERA_PIO_BASE LED_PIO_BASE
-#define ALTERA_PIO_WIDTH LED_PIO_WIDTH
-#define ALTERA_PIO_DATA (ALTERA_PIO_BASE + 0)
-#define ALTERA_PIO_DIR (ALTERA_PIO_BASE + 4)
-static u32 pio_data_reg;
-static u32 pio_dir_reg;
-
-int gpio_request(unsigned gpio, const char *label)
-{
-       return 0;
-}
-
-int gpio_free(unsigned gpio)
-{
-       return 0;
-}
-
-int gpio_direction_input(unsigned gpio)
-{
-       u32 mask = 1 << gpio;
-       writel(pio_dir_reg &= ~mask, ALTERA_PIO_DIR);
-       return 0;
-}
-
-int gpio_direction_output(unsigned gpio, int value)
-{
-       u32 mask = 1 << gpio;
-       if (value)
-               pio_data_reg |= mask;
-       else
-               pio_data_reg &= ~mask;
-       writel(pio_data_reg, ALTERA_PIO_DATA);
-       writel(pio_dir_reg |= mask, ALTERA_PIO_DIR);
-       return 0;
-}
-
-int gpio_get_value(unsigned gpio)
-{
-       u32 mask = 1 << gpio;
-       if (pio_dir_reg & mask)
-               return (pio_data_reg & mask) ? 1 : 0;
-       else
-               return (readl(ALTERA_PIO_DATA) & mask) ? 1 : 0;
-}
-
-void gpio_set_value(unsigned gpio, int value)
-{
-       u32 mask = 1 << gpio;
-       if (value)
-               pio_data_reg |= mask;
-       else
-               pio_data_reg &= ~mask;
-       writel(pio_data_reg, ALTERA_PIO_DATA);
-}
-
-int gpio_is_valid(int number)
-{
-       return ((unsigned)number) < ALTERA_PIO_WIDTH;
-}
-#endif
index 49ef80de96dd36b494b960f8aa7c42908d10c979..0f882756f5ef23b6d23b494e2361f9e5a8da0577 100644 (file)
@@ -26,6 +26,7 @@
 #include <netdev.h>
 #include <mtd/cfi_flash.h>
 #include <asm/io.h>
+#include <asm/gpio.h>
 
 void text_base_hook(void); /* nop hook for text_base.S */
 
@@ -43,6 +44,13 @@ void early_flash_cmd_reset(void)
 int board_early_init_f(void)
 {
        text_base_hook();
+#ifdef CONFIG_ALTERA_PIO
+#ifdef LED_PIO_BASE
+       altera_pio_init(LED_PIO_BASE, LED_PIO_WIDTH, 'o',
+                       LED_PIO_RSTVAL, (1 << LED_PIO_WIDTH) - 1,
+                       "led");
+#endif
+#endif
 #if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_ENV_ADDR)
        early_flash_cmd_reset();
 #endif
index 8f23375170998ff8ee35e3c7c179a74d63fd5487..1960fc1905a708d2b112257ff4abf6da560d2da0 100644 (file)
@@ -396,7 +396,7 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
 {
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *) (info->start[0]);
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
+       int flag, prot, sect;
        int i;
 
        if ((s_first < 0) || (s_first > s_last)) {
@@ -427,8 +427,6 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
                printf("\n");
        }
 
-       l_sect = -1;
-
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
@@ -454,7 +452,6 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
                                addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00550055;
                                addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00300030;     /* sector erase */
                        }
-                       l_sect = sect;
                        /*
                         * Wait for each sector to complete, it's more
                         * reliable.  According to AMD Spec, you must
@@ -825,7 +822,7 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
 {
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *) (info->start[0]);
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
+       int flag, prot, sect;
        int i;
 
        if ((s_first < 0) || (s_first > s_last)) {
@@ -856,8 +853,6 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
                printf("\n");
        }
 
-       l_sect = -1;
-
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
@@ -883,7 +878,6 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
                                addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00550055;
                                addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00300030;     /* sector erase */
                        }
-                       l_sect = sect;
                        /*
                         * Wait for each sector to complete, it's more
                         * reliable.  According to AMD Spec, you must
index e9fbbb1029e237a7aa5b59722f73314be8ba25e6..63968a410a89fb79af9c4eaa699cc0dc2ad35736 100644 (file)
@@ -511,7 +511,7 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
 {
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *) (info->start[0]);
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
+       int flag, prot, sect;
        int i;
 
        if ((s_first < 0) || (s_first > s_last)) {
@@ -542,8 +542,6 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
                printf("\n");
        }
 
-       l_sect = -1;
-
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
@@ -569,7 +567,6 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
                                addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00550055;
                                addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00300030;     /* sector erase */
                        }
-                       l_sect = sect;
                        /*
                         * Wait for each sector to complete, it's more
                         * reliable.  According to AMD Spec, you must
@@ -953,7 +950,7 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
 {
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *) (info->start[0]);
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
+       int flag, prot, sect;
        int i;
 
        if ((s_first < 0) || (s_first > s_last)) {
@@ -984,8 +981,6 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
                printf("\n");
        }
 
-       l_sect = -1;
-
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
@@ -1011,7 +1006,6 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
                                addr[CONFIG_SYS_FLASH_CHAR_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x55555555;
                                addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x30303030;     /* sector erase */
                        }
-                       l_sect = sect;
                        /*
                         * Wait for each sector to complete, it's more
                         * reliable.  According to AMD Spec, you must
index e9cd333f3a5452cf36bfa817bba5ad854dcda889..f45325e920262297b697a31c2d97997726d42d43 100644 (file)
@@ -51,7 +51,6 @@ static int setBootStrapClock(cmd_tbl_t *cmdtp, int incrflag, int flag,
        uchar   chip;
        ulong   data;
        int     nbytes;
-       extern char console_buffer[];
 
        char sysClock[4];
        char cpuClock[4];
index 20b6af9a6b0f1a079fde4402c3423d591d9c5a2c..ab513f9dd535774f511a2602a5b40d100f52306c 100644 (file)
@@ -422,7 +422,7 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
 {
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *) (info->start[0]);
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
+       int flag, prot, sect;
        int i;
 
        if ((s_first < 0) || (s_first > s_last)) {
@@ -449,8 +449,6 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
 
        printf("\n");
 
-       l_sect = -1;
-
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
@@ -476,7 +474,6 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
                                addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00550055;
                                addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00300030;     /* sector erase */
                        }
-                       l_sect = sect;
                        /*
                         * Wait for each sector to complete, it's more
                         * reliable.  According to AMD Spec, you must
@@ -831,7 +828,7 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
 {
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *) (info->start[0]);
        volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
+       int flag, prot, sect;
        int i;
 
        if ((s_first < 0) || (s_first > s_last)) {
@@ -858,8 +855,6 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
 
        printf("\n");
 
-       l_sect = -1;
-
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
@@ -885,7 +880,6 @@ static int flash_erase_2(flash_info_t * info, int s_first, int s_last)
                                addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00550055;
                                addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE) 0x00300030;     /* sector erase */
                        }
-                       l_sect = sect;
                        /*
                         * Wait for each sector to complete, it's more
                         * reliable.  According to AMD Spec, you must
index 1e742e5275489f5a7763449ecc690b4b62319ae9..bf8877ec6a1727cb44469c09c91ab45f82d283cd 100644 (file)
@@ -774,12 +774,9 @@ static ulong flash_get_size (ulong base, int banknum)
 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 */
diff --git a/board/armltd/integrator/arm-ebi.h b/board/armltd/integrator/arm-ebi.h
new file mode 100644 (file)
index 0000000..2d85e3f
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * (C) Copyright 2011
+ * Linaro
+ * Linus Walleij <linus.walleij@linaro.org>
+ * Register definitions for the External Bus Interface (EBI)
+ * found in the ARM Integrator AP and CP reference designs
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __ARM_EBI_H
+#define __ARM_EBI_H
+
+#define EBI_BASE               0x12000000
+
+#define EBI_CSR0_REG           0x00 /* CS0 = Boot ROM */
+#define EBI_CSR1_REG           0x04 /* CS1 = Flash */
+#define EBI_CSR2_REG           0x08 /* CS2 = SSRAM */
+#define EBI_CSR3_REG           0x0C /* CS3 = Expansion memory */
+/*
+ * The four upper bits are the waitstates for each chip select
+ * 0x00 = 2 cycles, 0x10 = 3 cycles, ... 0xe0 = 16 cycles, 0xf0 = 16 cycles
+ */
+#define EBI_CSR_WAIT_MASK      0xF0
+/* Whether memory is synchronous or asynchronous */
+#define EBI_CSR_SYNC_MASK      0xF7
+#define EBI_CSR_ASYNC          0x00
+#define EBI_CSR_SYNC           0x08
+/* Whether memory is write enabled or not */
+#define EBI_CSR_WREN_MASK      0xFB
+#define EBI_CSR_WREN_DISABLE   0x00
+#define EBI_CSR_WREN_ENABLE    0x04
+/* Memory bit width for each chip select */
+#define EBI_CSR_MEMSIZE_MASK   0xFC
+#define EBI_CSR_MEMSIZE_8BIT   0x00
+#define EBI_CSR_MEMSIZE_16BIT  0x01
+#define EBI_CSR_MEMSIZE_32BIT  0x02
+
+/*
+ * The lock register need to be written with 0xa05f before anything in the
+ * EBI can be changed.
+ */
+#define EBI_LOCK_REG           0x20
+#define EBI_UNLOCK_MAGIC       0xA05F
+
+#endif
diff --git a/board/armltd/integrator/config.mk b/board/armltd/integrator/config.mk
deleted file mode 100644 (file)
index 8b57af1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# image should be loaded at 0x01000000
-#
-
-CONFIG_SYS_TEXT_BASE = 0x01000000
diff --git a/board/armltd/integrator/integrator-sc.h b/board/armltd/integrator/integrator-sc.h
new file mode 100644 (file)
index 0000000..279dc55
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * (C) Copyright 2011
+ * Linaro
+ * Linus Walleij <linus.walleij@linaro.org>
+ * Register definitions for the System Controller (SC) and
+ * the similar "CP Controller" found in the ARM Integrator/AP and
+ * Integrator/CP reference designs
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __ARM_SC_H
+#define __ARM_SC_H
+
+#define SC_BASE                        0x11000000
+
+/*
+ * The system controller registers
+ */
+#define SC_ID_OFFSET           0x00
+#define SC_OSC_OFFSET          0x04
+/* Setting this bit switches to 25 MHz mode, clear means 33 MHz */
+#define SC_OSC_DIVXY           (1 << 8)
+#define SC_CTRLS_OFFSET                0x08
+#define SC_CTRLC_OFFSET                0x0C
+/* Set bits by writing CTRLS, clear bits by writing CTRLC */
+#define SC_CTRL_SOFTRESET      (1 << 0)
+#define SC_CTRL_FLASHVPP       (1 << 1)
+#define SC_CTRL_FLASHWP                (1 << 2)
+#define SC_CTRL_UART1DTR       (1 << 4)
+#define SC_CTRL_UART1RTS       (1 << 5)
+#define SC_CTRL_UART0DTR       (1 << 6)
+#define SC_CTRL_UART0RTS       (1 << 7)
+#define SC_DEC_OFFSET          0x10
+#define SC_ARB_OFFSET          0x14
+#define SC_PCI_OFFSET          0x18
+#define SC_PCI_PCIEN           (1 << 0)
+#define SC_PCI_PCIBINT_CLR     (1 << 1)
+#define SC_LOCK_OFFSET         0x1C
+#define SC_LBFADDR_OFFSET      0x20
+#define SC_LBFCODE_OFFSET      0x24
+
+#define SC_ID (SC_BASE + SC_ID_OFFSET)
+#define SC_OSC (SC_BASE + SC_OSC_OFFSET)
+#define SC_CTRLS (SC_BASE + SC_CTRLS_OFFSET)
+#define SC_CTRLC (SC_BASE + SC_CTRLC_OFFSET)
+#define SC_DEC (SC_BASE + SC_DEC_OFFSET)
+#define SC_ARB (SC_BASE + SC_ARB_OFFSET)
+#define SC_PCI (SC_BASE + SC_PCI_OFFSET)
+#define SC_LOCK (SC_BASE + SC_LOCK_OFFSET)
+#define SC_LBFADDR (SC_BASE + SC_LBFADDR_OFFSET)
+#define SC_LBFCODE (SC_BASE + SC_LBFCODE_OFFSET)
+
+/*
+ * The Integrator/CP as a smaller set of registers, at a different
+ * offset - probably not to disturb old software.
+ */
+
+#define CP_BASE                        0xCB000000
+
+#define CP_IDFIELD_OFFSET      0x00
+#define CP_FLASHPROG_OFFSET    0x04
+#define CP_FLASHPROG_FLVPPEN   (1 << 0)
+#define CP_FLASHPROG_FLWREN    (1 << 1)
+#define CP_FLASHPROG_FLASHSIZE (1 << 2)
+#define CP_FLASHPROG_EXTRABANK (1 << 3)
+#define CP_INTREG_OFFSET       0x08
+#define CP_DECODE_OFFSET       0x0C
+
+#define CP_IDFIELD (CP_BASE + CP_ID_OFFSET)
+#define CP_FLASHPROG (CP_BASE + CP_FLASHPROG_OFFSET)
+#define CP_INTREG (CP_BASE + CP_INTREG_OFFSET)
+#define CP_DECODE (CP_BASE + CP_DECODE_OFFSET)
+
+#endif
index c8d2bc7bacb34cbca6222620120cfe48a35c2c3f..a507c093aaac973ca25be29817f029d70affd06b 100644 (file)
@@ -35,6 +35,9 @@
 
 #include <common.h>
 #include <netdev.h>
+#include <asm/io.h>
+#include "arm-ebi.h"
+#include "integrator-sc.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -55,6 +58,8 @@ void show_boot_progress(int progress)
 
 int board_init (void)
 {
+       u32 val;
+
        /* arch number of Integrator Board */
 #ifdef CONFIG_ARCH_CINTEGRATOR
        gd->bd->bi_arch_number = MACH_TYPE_CINTEGRATOR;
@@ -72,6 +77,37 @@ extern void cm_remap(void);
        cm_remap();     /* remaps writeable memory to 0x00000000 */
 #endif
 
+#ifdef CONFIG_ARCH_CINTEGRATOR
+       /*
+        * Flash protection on the Integrator/CP is in a simple register
+        */
+       val = readl(CP_FLASHPROG);
+       val |= (CP_FLASHPROG_FLVPPEN | CP_FLASHPROG_FLWREN);
+       writel(val, CP_FLASHPROG);
+#else
+       /*
+        * The Integrator/AP has some special protection mechanisms
+        * for the external memories, first the External Bus Interface (EBI)
+        * then the system controller (SC).
+        *
+        * The system comes up with the flash memory non-writable and
+        * configuration locked. If we want U-Boot to be used for flash
+        * access we cannot have the flash memory locked.
+        */
+       writel(EBI_UNLOCK_MAGIC, EBI_BASE + EBI_LOCK_REG);
+       val = readl(EBI_BASE + EBI_CSR1_REG);
+       val &= EBI_CSR_WREN_MASK;
+       val |= EBI_CSR_WREN_ENABLE;
+       writel(val, EBI_BASE + EBI_CSR1_REG);
+       writel(0, EBI_BASE + EBI_LOCK_REG);
+
+       /*
+        * Set up the system controller to remove write protection from
+        * the flash memory and enable Vpp
+        */
+       writel(SC_CTRL_FLASHVPP | SC_CTRL_FLASHWP, SC_CTRLS);
+#endif
+
        icache_enable ();
 
        return 0;
@@ -86,21 +122,30 @@ int misc_init_r (void)
        return (0);
 }
 
+/*
+ * The Integrator remaps the Flash memory to 0x00000000 and executes U-Boot
+ * from there, which means we cannot test the RAM underneath the ROM at this
+ * point. It will be unmapped later on, when we are executing from the
+ * relocated in RAM U-Boot. We simply assume that this RAM is usable if the
+ * RAM on higher addresses works fine.
+ */
+#define REMAPPED_FLASH_SZ 0x40000
+
 int dram_init (void)
 {
        gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
 #ifdef CONFIG_CM_SPD_DETECT
        {
 extern void dram_query(void);
-       unsigned long cm_reg_sdram;
-       unsigned long sdram_shift;
+       u32 cm_reg_sdram;
+       u32 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);
+       cm_reg_sdram = readl(CM_BASE + OS_SDRAM);
        /*   Register         SDRAM size
         *
         *   0xXXXXXXbbb000bb    16 MB
@@ -110,16 +155,18 @@ extern void dram_query(void);
         *   0xXXXXXXbbb100bb   256 MB
         *
         */
-       sdram_shift              = ((cm_reg_sdram & 0x0000001C)/4)%4;
-       gd->bd->bi_dram[0].size  = 0x01000000 << sdram_shift;
-       gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
+       sdram_shift = ((cm_reg_sdram & 0x0000001C)/4)%4;
+       gd->ram_size = get_ram_size((long *) CONFIG_SYS_SDRAM_BASE +
+                                   REMAPPED_FLASH_SZ,
                                    0x01000000 << sdram_shift);
        }
 #else
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-       gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
+       gd->ram_size = get_ram_size((long *) CONFIG_SYS_SDRAM_BASE +
+                                   REMAPPED_FLASH_SZ,
                                    PHYS_SDRAM_1_SIZE);
 #endif /* CM_SPD_DETECT */
+       /* We only have one bank of RAM, set it to whatever was detected */
+       gd->bd->bi_dram[0].size  = gd->ram_size;
 
        return 0;
 }
index b9ecc886ed58c5df479ce12b2d84ee458ab53b0f..66706eb95b3a1ebc9b7b23960344bac4e05851a6 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index b3ed91d432e7b130ab2d734013ec53ca7352d839..25556725242e5597f41afea17562aca15cbadc19 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index daf81e805bb5de0de7f14e9d5764de82396283e5..9bdd3857645f298e8d7550ca486b897977a7d55e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 080f289edd1efb095217efc9365133c90b364ab7..f44dcdb25e7b79d33900025723127b2f93cb2a50 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index b6c7d9e02c5c576aca2d1aa816c43e1c1ca11cf7..47ab83967dc5122efb01cba059bb76a2c37bb1d0 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 0c2f522825c5d0a6c7d404a4835127da07eadb9c..7fa6136b78ac182a590c2a413d544d0f9e238f97 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 84930433837cdc8fca895538799715cf37821909..af8726d338283e546a4aa84c16a33adc1d22679c 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index 4d2937d2dbbb2ce0beaa69b8aab13a475922ed21..41ec75257047643a442618737cf856cbb6ce69e2 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index c44455e66413a83d1e15225de64ca2bd01a4f036..ce3cf0997c8bc284507e51439bef2c576d2aef57 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 6c37827d146c30168fe1449432e259b987715898..191511185d62beea3d7fc684087f6113b0df98c7 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index 24a86063bff18437fdb67828c18db11d6222c6e2..5a042749fe068f5c52f750e4c69e1436451eec87 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index dadbd6a7619c004fb8072e45268172a18f9fa9ce..0fd38f681ffd3516a2a5dd616c1b3aebc6619c3b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 7de889717b783a88aea82582a7b128ce49a43337..36df7afa579f4ce26c3ee2906f65557da30ea748 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index e55908464175b9bdc11efd8a00d30dc7159459f7..ef0ddd780ba510f51589e35a0e07aeb094c4e444 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 987e8c061cc546d9e6937c30bc5c50215ae38d57..4a1e8d7d91f66254374403dce2f6ac9c72a7efa1 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 26e34e99d7db071057705c82e9f001d1da3d8154..f360323c9b715d47cfdc8bbd601bdb5d43b0a11a 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <common.h>
 #include <asm/arch/hardware.h>
+#include <asm/arch/pxa.h>
 #include <serial.h>
 #include <asm/io.h>
 #include <spartan3.h>
@@ -57,10 +58,9 @@ struct serial_device *default_serial_console(void)
        return &serial_stuart_device;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
index 7b7cc29683a7e5d5a9493fbb456c81811891adf7..8a0618ebc7abc033fe9f467cd26efb1b6956e594 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index 5f448d9f5017c795a2040bbc49e72ede12f90da5..4f5cff68ec842dde12b131521c1acf2667226d79 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Copyright (C) 2009
index 1bf21e12ccc20d4ee4e5895d59bc04f53bc1d766..5a6c6b89465462cff0d16f2e0ef14e494f100e09 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index ab51a335a0263a27f422a51c56e4891c07b18a8f..24de177dded3ac3e30c539be1ada6c1c0ef4962c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Copyright (C) 2009
diff --git a/board/cerf250/cerf250.c b/board/cerf250/cerf250.c
deleted file mode 100644 (file)
index 043afea..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * (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>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 <netdev.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/* ------------------------------------------------------------------------- */
-
-
-/*
- * Miscelaneous platform dependent initialisations
- */
-
-int board_init (void)
-{
-       /* We have RAM, disable cache */
-       dcache_disable();
-       icache_disable();
-
-       /* arch number of cerf PXA Board */
-       gd->bd->bi_arch_number = MACH_TYPE_PXA_CERF;
-
-       /* adress of boot parameters */
-       gd->bd->bi_boot_params = 0xa0000100;
-
-       return 0;
-}
-
-int board_late_init(void)
-{
-       setenv("stdout", "serial");
-       setenv("stderr", "serial");
-       return 0;
-}
-
-extern void pxa_dram_init(void);
-int dram_init(void)
-{
-       pxa_dram_init();
-       gd->ram_size = PHYS_SDRAM_1_SIZE;
-       return 0;
-}
-
-void dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-}
-
-#ifdef CONFIG_CMD_NET
-int board_eth_init(bd_t *bis)
-{
-       int rc = 0;
-#ifdef CONFIG_SMC91111
-       rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
-       return rc;
-}
-#endif
diff --git a/board/cerf250/flash.c b/board/cerf250/flash.c
deleted file mode 100644 (file)
index e1e7807..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * (C) Copyright 2001
- * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
- *
- * (C) Copyright 2001
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <linux/byteorder/swab.h>
-
-
-flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];   /* info for FLASH chips    */
-
-/* Board support for 1 or 2 flash devices */
-#define FLASH_PORT_WIDTH32
-#undef FLASH_PORT_WIDTH16
-
-#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 mb() __asm__ __volatile__ ("" : : : "memory")
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-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);
-
-/*-----------------------------------------------------------------------
- */
-
-unsigned long flash_init (void)
-{
-       int i;
-       ulong size = 0;
-
-       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) {
-               switch (i) {
-               case 0:
-                       flash_get_size ((FPW *) PHYS_FLASH_1, &flash_info[i]);
-                       flash_get_offsets (PHYS_FLASH_1, &flash_info[i]);
-                       break;
-               case 1:
-                       flash_get_size ((FPW *) PHYS_FLASH_2, &flash_info[i]);
-                       flash_get_offsets (PHYS_FLASH_2, &flash_info[i]);
-                       break;
-               default:
-                       panic ("configured too many flash banks!\n");
-                       break;
-               }
-               size += flash_info[i].size;
-       }
-
-       /* Protect monitor and environment sectors
-        */
-       flash_protect ( FLAG_PROTECT_SET,
-                       CONFIG_SYS_FLASH_BASE,
-                       CONFIG_SYS_FLASH_BASE + monitor_flash_len - 1,
-                       &flash_info[0] );
-
-       flash_protect ( FLAG_PROTECT_SET,
-                       CONFIG_ENV_ADDR,
-                       CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1, &flash_info[0] );
-
-       return size;
-}
-
-/*-----------------------------------------------------------------------
- */
-static void flash_get_offsets (ulong base, flash_info_t *info)
-{
-       int i;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               return;
-       }
-
-       if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) {
-               for (i = 0; i < info->sector_count; i++) {
-                       info->start[i] = base + (i * PHYS_FLASH_SECT_SIZE);
-                       info->protect[i] = 0;
-               }
-       }
-}
-
-/*-----------------------------------------------------------------------
- */
-void flash_print_info (flash_info_t *info)
-{
-       int i;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               printf ("missing or unknown FLASH type\n");
-               return;
-       }
-
-       switch (info->flash_id & FLASH_VENDMASK) {
-       case FLASH_MAN_INTEL:
-               printf ("INTEL ");
-               break;
-       default:
-               printf ("Unknown Vendor ");
-               break;
-       }
-
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_28F128J3A:
-               printf ("28F128J3A\n");
-               break;
-       default:
-               printf ("Unknown Chip Type\n");
-               break;
-       }
-
-       printf ("  Size: %ld MB in %d Sectors\n",
-                       info->size >> 20, info->sector_count);
-
-       printf ("  Sector Start Addresses:");
-       for (i = 0; i < info->sector_count; ++i) {
-               if ((i % 5) == 0)
-                       printf ("\n   ");
-               printf (" %08lX%s",
-                       info->start[i],
-                       info->protect[i] ? " (RO)" : "     ");
-       }
-       printf ("\n");
-       return;
-}
-
-/*
- * The following code cannot be run from FLASH!
- */
-static ulong flash_get_size (FPW *addr, flash_info_t *info)
-{
-       volatile FPW value;
-
-       /* Write auto select command: read Manufacturer ID */
-       addr[0x5555] = (FPW) 0x00AA00AA;
-       addr[0x2AAA] = (FPW) 0x00550055;
-       addr[0x5555] = (FPW) 0x00900090;
-
-       mb ();
-       value = addr[0];
-
-       switch (value) {
-
-       case (FPW) INTEL_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  */
-       }
-
-       mb ();
-       value = addr[1];                        /* device ID        */
-
-       switch (value) {
-
-       case (FPW) INTEL_ID_28F128J3A:
-               info->flash_id += FLASH_28F128J3A;
-               info->sector_count = 128;
-               info->size = 0x02000000;
-               break;                          /* => 16 MB     */
-
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               break;
-       }
-
-       if (info->sector_count > CONFIG_SYS_MAX_FLASH_SECT) {
-               printf ("** ERROR: sector count %d > max (%d) **\n",
-                       info->sector_count, CONFIG_SYS_MAX_FLASH_SECT);
-               info->sector_count = CONFIG_SYS_MAX_FLASH_SECT;
-       }
-
-       addr[0] = (FPW) 0x00FF00FF;             /* restore read mode */
-
-       return (info->size);
-}
-
-
-/*-----------------------------------------------------------------------
- */
-
-int flash_erase (flash_info_t *info, int s_first, int s_last)
-{
-       int flag, prot, sect;
-       ulong type, start;
-       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;
-       }
-
-       type = (info->flash_id & FLASH_VENDMASK);
-       if ((type != FLASH_MAN_INTEL)) {
-               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");
-       }
-
-       /* 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 */
-                       FPWV *addr = (FPWV *) (info->start[sect]);
-                       FPW status;
-
-                       printf ("Erasing sector %2d ... ", sect);
-
-                       /* arm simple, non interrupt dependent timer */
-                       start = get_timer(0);
-
-                       *addr = (FPW) 0x00500050;       /* clear status register */
-                       *addr = (FPW) 0x00200020;       /* erase setup */
-                       *addr = (FPW) 0x00D000D0;       /* erase confirm */
-
-                       while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
-                               if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
-                                       printf ("Timeout\n");
-                                       *addr = (FPW) 0x00B000B0;       /* suspend erase     */
-                                       *addr = (FPW) 0x00FF00FF;       /* reset to read mode */
-                                       rcode = 1;
-                                       break;
-                               }
-                       }
-
-                       *addr = 0x00500050;     /* clear status register cmd.   */
-                       *addr = 0x00FF00FF;     /* resest to read mode          */
-
-                       printf (" done\n");
-               }
-       }
-       return rcode;
-}
-
-/*-----------------------------------------------------------------------
- * Copy memory to flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- * 4 - Flash not identified
- */
-
-int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
-{
-       ulong cp, wp;
-       FPW data;
-       int count, i, l, rc, port_width;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               return 4;
-       }
-/* get lower word aligned address */
-#ifdef FLASH_PORT_WIDTH16
-       wp = (addr & ~1);
-       port_width = 2;
-#else
-       wp = (addr & ~3);
-       port_width = 4;
-#endif
-
-       /*
-        * 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 < port_width && cnt > 0; ++i) {
-                       data = (data << 8) | *src++;
-                       --cnt;
-                       ++cp;
-               }
-               for (; cnt == 0 && i < port_width; ++i, ++cp) {
-                       data = (data << 8) | (*(uchar *) cp);
-               }
-
-               if ((rc = write_data (info, wp, SWAP (data))) != 0) {
-                       return (rc);
-               }
-               wp += port_width;
-       }
-
-       /*
-        * handle word aligned part
-        */
-       count = 0;
-       while (cnt >= port_width) {
-               data = 0;
-               for (i = 0; i < port_width; ++i) {
-                       data = (data << 8) | *src++;
-               }
-               if ((rc = write_data (info, wp, SWAP (data))) != 0) {
-                       return (rc);
-               }
-               wp += port_width;
-               cnt -= port_width;
-               if (count++ > 0x800) {
-                       spin_wheel ();
-                       count = 0;
-               }
-       }
-
-       if (cnt == 0) {
-               return (0);
-       }
-
-       /*
-        * handle unaligned tail bytes
-        */
-       data = 0;
-       for (i = 0, cp = wp; i < port_width && cnt > 0; ++i, ++cp) {
-               data = (data << 8) | *src++;
-               --cnt;
-       }
-       for (; i < port_width; ++i, ++cp) {
-               data = (data << 8) | (*(uchar *) cp);
-       }
-
-       return (write_data (info, wp, SWAP (data)));
-}
-
-/*-----------------------------------------------------------------------
- * 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, ulong dest, FPW data)
-{
-       FPWV *addr = (FPWV *) dest;
-       ulong status;
-       int flag;
-       ulong start;
-
-       /* 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) 0x00400040;       /* write setup */
-       *addr = data;
-
-       /* arm simple, non interrupt dependent timer */
-       start = get_timer(0);
-
-       /* wait while polling the status register */
-       while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
-               if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
-                       *addr = (FPW) 0x00FF00FF;       /* restore read mode */
-                       return (1);
-               }
-       }
-
-       *addr = (FPW) 0x00FF00FF;       /* restore read mode */
-
-       return (0);
-}
-
-void inline spin_wheel (void)
-{
-       static int p = 0;
-       static char w[] = "\\/-";
-
-       printf ("\010%c", w[p]);
-       (++p == 3) ? (p = 0) : 0;
-}
index 2e1356f9f4a6d6f62676d0a96888ba99c4009b14..5522bf085ecd6024af4519247c2469512b02d697 100644 (file)
@@ -206,7 +206,7 @@ static ulong flash_get_size (unsigned char * addr, flash_info_t * info)
 
 int flash_erase (flash_info_t * info, int s_first, int s_last)
 {
-       int flag, prot, sect;
+       int prot, sect;
        ulong type;
        int rcode = 0;
        ulong start;
@@ -240,7 +240,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
                printf ("\n");
 
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       disable_interrupts();
 
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect <= s_last; sect++) {
@@ -370,7 +370,6 @@ static int write_data (flash_info_t * info, ulong dest, unsigned char data)
 {
        volatile unsigned char *addr = (volatile unsigned char *) dest;
        ulong status;
-       int flag;
        ulong start;
 
        /* Check if Flash is (sufficiently) erased */
@@ -380,7 +379,7 @@ static int write_data (flash_info_t * info, ulong dest, unsigned char data)
                return (2);
        }
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       disable_interrupts();
 
        *addr = 0x40;   /* write setup */
        *addr = data;
index 2e1356f9f4a6d6f62676d0a96888ba99c4009b14..5522bf085ecd6024af4519247c2469512b02d697 100644 (file)
@@ -206,7 +206,7 @@ static ulong flash_get_size (unsigned char * addr, flash_info_t * info)
 
 int flash_erase (flash_info_t * info, int s_first, int s_last)
 {
-       int flag, prot, sect;
+       int prot, sect;
        ulong type;
        int rcode = 0;
        ulong start;
@@ -240,7 +240,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
                printf ("\n");
 
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       disable_interrupts();
 
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect <= s_last; sect++) {
@@ -370,7 +370,6 @@ static int write_data (flash_info_t * info, ulong dest, unsigned char data)
 {
        volatile unsigned char *addr = (volatile unsigned char *) dest;
        ulong status;
-       int flag;
        ulong start;
 
        /* Check if Flash is (sufficiently) erased */
@@ -380,7 +379,7 @@ static int write_data (flash_info_t * info, ulong dest, unsigned char data)
                return (2);
        }
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       disable_interrupts();
 
        *addr = 0x40;   /* write setup */
        *addr = data;
diff --git a/board/cradle/cradle.c b/board/cradle/cradle.c
deleted file mode 100644 (file)
index 2bbf2d5..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * (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>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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/arch/pxa-regs.h>
-#include <common.h>
-#include <netdev.h>
-#include <asm/io.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/* ------------------------------------------------------------------------- */
-
-
-/* local prototypes */
-void set_led (int led, int color);
-void error_code_halt (int code);
-int init_sio (int led, unsigned long base);
-inline void cradle_outb (unsigned short val, unsigned long base,
-                        unsigned long reg);
-inline unsigned char cradle_inb (unsigned long base, unsigned long reg);
-inline void sleep (int i);
-
-inline void
-/**********************************************************/
-sleep (int i)
-/**********************************************************/
-{
-       while (i--) {
-               udelay (1000000);
-       }
-}
-
-void
-/**********************************************************/
-error_code_halt (int code)
-/**********************************************************/
-{
-       while (1) {
-               led_code (code, RED);
-               sleep (1);
-               led_code (0, OFF);
-               sleep (1);
-       }
-}
-
-void
-/**********************************************************/
-led_code (int code, int color)
-/**********************************************************/
-{
-       int i;
-
-       code &= 0xf;            /* only 4 leds */
-
-       for (i = 0; i < 4; i++) {
-               if (code & (1 << i)) {
-                       set_led (i, color);
-               } else {
-                       set_led (i, OFF);
-               }
-       }
-}
-
-void
-/**********************************************************/
-set_led (int led, int color)
-/**********************************************************/
-{
-       int shift = led * 2;
-       unsigned long mask = 0x3 << shift;
-
-       writel(mask, GPCR2);    /* clear bits */
-       writel((color << shift), GPSR2);        /* set bits */
-       udelay (5000);
-}
-
-inline void
-/**********************************************************/
-cradle_outb (unsigned short val, unsigned long base, unsigned long reg)
-/**********************************************************/
-{
-       *(volatile unsigned short *) (base + (reg * 2)) = val;
-}
-
-inline unsigned char
-/**********************************************************/
-cradle_inb (unsigned long base, unsigned long reg)
-/**********************************************************/
-{
-       unsigned short val;
-
-       val = *(volatile unsigned short *) (base + (reg * 2));
-       return (val & 0xff);
-}
-
-int
-/**********************************************************/
-init_sio (int led, unsigned long base)
-/**********************************************************/
-{
-       unsigned char val;
-
-       set_led (led, YELLOW);
-       val = cradle_inb (base, CRADLE_SIO_INDEX);
-       val = cradle_inb (base, CRADLE_SIO_INDEX);
-       if (val != 0) {
-               set_led (led, RED);
-               return -1;
-       }
-
-       /* map SCC2 to COM1 */
-       cradle_outb (0x01, base, CRADLE_SIO_INDEX);
-       cradle_outb (0x00, base, CRADLE_SIO_DATA);
-
-       /* enable SCC2 extended regs */
-       cradle_outb (0x40, base, CRADLE_SIO_INDEX);
-       cradle_outb (0xa0, base, CRADLE_SIO_DATA);
-
-       /* enable SCC2 clock multiplier */
-       cradle_outb (0x51, base, CRADLE_SIO_INDEX);
-       cradle_outb (0x04, base, CRADLE_SIO_DATA);
-
-       /* enable SCC2 */
-       cradle_outb (0x00, base, CRADLE_SIO_INDEX);
-       cradle_outb (0x04, base, CRADLE_SIO_DATA);
-
-       /* map SCC2 DMA to channel 0 */
-       cradle_outb (0x4f, base, CRADLE_SIO_INDEX);
-       cradle_outb (0x09, base, CRADLE_SIO_DATA);
-
-       /* read ID from SIO to check operation */
-       cradle_outb (0xe4, base, 0x3f8 + 0x3);
-       val = cradle_inb (base, 0x3f8 + 0x0);
-       if ((val & 0xf0) != 0x20) {
-               set_led (led, RED);
-               /* disable SCC2 */
-               cradle_outb (0, base, CRADLE_SIO_INDEX);
-               cradle_outb (0, base, CRADLE_SIO_DATA);
-               return -1;
-       }
-       /* set back to bank 0 */
-       cradle_outb (0, base, 0x3f8 + 0x3);
-       set_led (led, GREEN);
-       return 0;
-}
-
-/*
- * Miscelaneous platform dependent initialisations
- */
-
-int
-/**********************************************************/
-board_late_init (void)
-/**********************************************************/
-{
-       return (0);
-}
-
-int
-/**********************************************************/
-board_init (void)
-/**********************************************************/
-{
-       /* We have RAM, disable cache */
-       dcache_disable();
-       icache_disable();
-
-       led_code (0xf, YELLOW);
-
-       /* arch number of HHP Cradle */
-       gd->bd->bi_arch_number = MACH_TYPE_HHP_CRADLE;
-
-       /* adress of boot parameters */
-       gd->bd->bi_boot_params = 0xa0000100;
-
-       /* Init SIOs to enable SCC2 */
-       udelay (100000);                /* delay makes it look neat */
-       init_sio (0, CRADLE_SIO1_PHYS);
-       udelay (100000);
-       init_sio (1, CRADLE_SIO2_PHYS);
-       udelay (100000);
-       init_sio (2, CRADLE_SIO3_PHYS);
-       udelay (100000);
-       set_led (3, GREEN);
-
-       return 1;
-}
-
-extern void pxa_dram_init(void);
-int dram_init(void)
-{
-       pxa_dram_init();
-       gd->ram_size = PHYS_SDRAM_1_SIZE;
-       return 0;
-}
-
-void dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-}
-
-#ifdef CONFIG_CMD_NET
-int board_eth_init(bd_t *bis)
-{
-       int rc = 0;
-#ifdef CONFIG_SMC91111
-       rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
-       return rc;
-}
-#endif
diff --git a/board/cradle/flash.c b/board/cradle/flash.c
deleted file mode 100644 (file)
index 1601782..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * (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>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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
-#define MAIN_SECT_SIZE  0x20000
-
-flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];
-
-
-/*-----------------------------------------------------------------------
- */
-
-ulong flash_init (void)
-{
-       int i, j;
-       ulong size = 0;
-
-       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) {
-               ulong flashbase = 0;
-
-               flash_info[i].flash_id =
-                       (INTEL_MANUFACT & FLASH_VENDMASK) |
-                       (INTEL_ID_28F128J3 & FLASH_TYPEMASK);
-               flash_info[i].size = FLASH_BANK_SIZE;
-               flash_info[i].sector_count = CONFIG_SYS_MAX_FLASH_SECT;
-               memset (flash_info[i].protect, 0, CONFIG_SYS_MAX_FLASH_SECT);
-               switch (i) {
-               case 0:
-                       flashbase = PHYS_FLASH_1;
-                       break;
-               case 1:
-                       flashbase = PHYS_FLASH_2;
-                       break;
-               default:
-                       panic ("configured too many flash banks!\n");
-                       break;
-               }
-               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,
-                      CONFIG_SYS_FLASH_BASE,
-                      CONFIG_SYS_FLASH_BASE + monitor_flash_len - 1,
-                      &flash_info[0]);
-
-       flash_protect (FLAG_PROTECT_SET,
-                      CONFIG_ENV_ADDR,
-                      CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1, &flash_info[0]);
-
-       return size;
-}
-
-/*-----------------------------------------------------------------------
- */
-void flash_print_info (flash_info_t * info)
-{
-       int i, j;
-
-       for (j = 0; j < CONFIG_SYS_MAX_FLASH_BANKS; j++) {
-               switch (info->flash_id & FLASH_VENDMASK) {
-               case (INTEL_MANUFACT & FLASH_VENDMASK):
-                       printf ("Intel: ");
-                       break;
-               default:
-                       printf ("Unknown Vendor ");
-                       break;
-               }
-
-               switch (info->flash_id & FLASH_TYPEMASK) {
-               case (INTEL_ID_28F320J3A & FLASH_TYPEMASK):
-                       printf ("28F320J3A (32Mbit)\n");
-                       break;
-               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");
-               info++;
-       }
-
-Done:  ;
-}
-
-/*-----------------------------------------------------------------------
- */
-
-int flash_erase (flash_info_t * info, int s_first, int s_last)
-{
-       int flag, prot, sect;
-       int rc = ERR_OK;
-       ulong start;
-
-       if (info->flash_id == FLASH_UNKNOWN)
-               return ERR_UNKNOWN_FLASH_TYPE;
-
-       if ((s_first < 0) || (s_first > s_last)) {
-               return ERR_INVAL;
-       }
-
-       if ((info->flash_id & FLASH_VENDMASK) !=
-           (INTEL_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 ();
-
-       /* Start erase on unprotected sectors */
-       for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
-
-               printf ("Erasing sector %2d ... ", sect);
-
-               /* arm simple, non interrupt dependent timer */
-               start = get_timer(0);
-
-               if (info->protect[sect] == 0) { /* not protected */
-                       vu_short *addr = (vu_short *) (info->start[sect]);
-
-                       *addr = 0x20;   /* erase setup */
-                       *addr = 0xD0;   /* erase confirm */
-
-                       while ((*addr & 0x80) != 0x80) {
-                               if (get_timer(start) >
-                                   CONFIG_SYS_FLASH_ERASE_TOUT) {
-                                       *addr = 0xB0;   /* suspend erase */
-                                       *addr = 0xFF;   /* reset to read mode */
-                                       rc = ERR_TIMOUT;
-                                       goto outahere;
-                               }
-                       }
-
-                       /* clear status register command */
-                       *addr = 0x50;
-                       /* reset to read mode */
-                       *addr = 0xFF;
-               }
-               printf ("ok.\n");
-       }
-       if (ctrlc ())
-               printf ("User Interrupt!\n");
-
-outahere:
-
-       /* 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)
-{
-       vu_short *addr = (vu_short *) dest, val;
-       int rc = ERR_OK;
-       int flag;
-       ulong start;
-
-       /* Check if Flash is (sufficiently) erased
-        */
-       if ((*addr & data) != data)
-               return ERR_NOT_ERASED;
-
-       /*
-        * 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 ();
-
-       /* clear status register command */
-       *addr = 0x50;
-
-       /* program set-up command */
-       *addr = 0x40;
-
-       /* latch address/data */
-       *addr = data;
-
-       /* arm simple, non interrupt dependent timer */
-       start = get_timer(0);
-
-       /* wait while polling the status register */
-       while (((val = *addr) & 0x80) != 0x80) {
-               if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
-                       rc = ERR_TIMOUT;
-                       /* suspend program command */
-                       *addr = 0xB0;
-                       goto outahere;
-               }
-       }
-
-       if (val & 0x1A) {       /* check for error */
-               printf ("\nFlash write error %02x at address %08lx\n",
-                       (int) val, (unsigned long) dest);
-               if (val & (1 << 3)) {
-                       printf ("Voltage range error.\n");
-                       rc = ERR_PROG_ERROR;
-                       goto outahere;
-               }
-               if (val & (1 << 1)) {
-                       printf ("Device protect error.\n");
-                       rc = ERR_PROTECTED;
-                       goto outahere;
-               }
-               if (val & (1 << 4)) {
-                       printf ("Programming error.\n");
-                       rc = ERR_PROG_ERROR;
-                       goto outahere;
-               }
-               rc = ERR_PROG_ERROR;
-               goto outahere;
-       }
-
-outahere:
-       /* read array command */
-       *addr = 0xFF;
-
-       if (flag)
-               enable_interrupts ();
-
-       return rc;
-}
-
-/*-----------------------------------------------------------------------
- * 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 */
-
-       /*
-        * 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) {
-               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);
-}
index a3d893e925e36915afe4a1d9653e609c45dd9b76..77a2100dea7580584de0d9ecd22dff4802ac412d 100644 (file)
@@ -273,7 +273,7 @@ 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;
+       int flag, prot, sect;
 
        if ((s_first < 0) || (s_first > s_last)) {
                if (info->flash_id == FLASH_UNKNOWN) {
@@ -303,16 +303,14 @@ int       flash_erase (flash_info_t *info, int s_first, int s_last)
                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);
+                       addr2 = (FLASH_WORD_SIZE *)(info->start[sect]);
+                       printf("Erasing sector %p\n", addr2);
 
                        addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;
                        addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;
@@ -320,15 +318,14 @@ int       flash_erase (flash_info_t *info, int s_first, int s_last)
                        addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;
                        addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;
                        addr2[0] = (FLASH_WORD_SIZE)0x00300030;  /* sector erase */
-                   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);
+                       /*
+                        * 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);
                }
        }
 
diff --git a/board/csb226/csb226.c b/board/csb226/csb226.c
deleted file mode 100644 (file)
index dd29e62..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * (C) Copyright 2002
- * Robert Schwebel, Pengutronix, r.schwebel@pengutronix.de
- * Kyle Harris, Nexus Technologies, Inc., kharris@nexus-tech.net
- * Marius Groeger, Sysgo Real-Time Solutions GmbH, 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 <common.h>
-#include <netdev.h>
-#include <asm/arch/pxa-regs.h>
-#include <asm/io.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#ifdef CONFIG_SHOW_BOOT_PROGRESS
-# define SHOW_BOOT_PROGRESS(arg)        show_boot_progress(arg)
-#else
-# define SHOW_BOOT_PROGRESS(arg)
-#endif
-
-/**
- * misc_init_r: - misc initialisation routines
- */
-
-int misc_init_r(void)
-{
-#if 0
-       uchar *str;
-
-       /* determine if the software update key is pressed during startup */
-       /* not ported yet... */
-       if (GPLR0 & 0x00000800) {
-               printf("using bootcmd_normal (sw-update button not pressed)\n");
-               str = getenv("bootcmd_normal");
-       } else {
-               printf("using bootcmd_update (sw-update button pressed)\n");
-               str = getenv("bootcmd_update");
-       }
-
-       setenv("bootcmd",str);
-#endif
-       return 0;
-}
-
-
-/**
- * board_init: - setup some data structures
- *
- * @return: 0 in case of success
- */
-
-int board_init (void)
-{
-       /* We have RAM, disable cache */
-       dcache_disable();
-       icache_disable();
-
-       /* arch number of CSB226 board */
-       gd->bd->bi_arch_number = MACH_TYPE_CSB226;
-
-       /* adress of boot parameters */
-       gd->bd->bi_boot_params = 0xa0000100;
-
-       return 0;
-}
-
-
-extern void pxa_dram_init(void);
-int dram_init(void)
-{
-       pxa_dram_init();
-       gd->ram_size = PHYS_SDRAM_1_SIZE;
-       return 0;
-}
-
-void dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-}
-
-/**
- * csb226_set_led: - switch LEDs on or off
- *
- * @param led:   LED to switch (0,1,2)
- * @param state: switch on (1) or off (0)
- */
-
-void csb226_set_led(int led, int state)
-{
-       switch(led) {
-
-               case 0: if (state==1) {
-                               writel(readl(GPCR0) | CSB226_USER_LED0, GPCR0);
-                       } else if (state==0) {
-                               writel(readl(GPSR0) | CSB226_USER_LED0, GPSR0);
-                       }
-                       break;
-
-               case 1: if (state==1) {
-                               writel(readl(GPCR0) | CSB226_USER_LED1, GPCR0);
-                       } else if (state==0) {
-                               writel(readl(GPSR0) | CSB226_USER_LED1, GPSR0);
-                       }
-                       break;
-
-               case 2: if (state==1) {
-                               writel(readl(GPCR0) | CSB226_USER_LED2, GPCR0);
-                       } else if (state==0) {
-                               writel(readl(GPSR0) | CSB226_USER_LED2, GPSR0);
-                       }
-                       break;
-       }
-
-       return;
-}
-
-
-/**
- * show_boot_progress: - indicate state of the boot process
- *
- * @param status: Status number - see README for details.
- *
- * The CSB226 does only have 3 LEDs, so we switch them on at the most
- * important states (1, 5, 15).
- */
-
-void show_boot_progress (int status)
-{
-       switch(status) {
-               case  1: csb226_set_led(0,1); break;
-               case  5: csb226_set_led(1,1); break;
-               case 15: csb226_set_led(2,1); break;
-       }
-
-       return;
-}
-
-#ifdef CONFIG_CMD_NET
-int board_eth_init(bd_t *bis)
-{
-       int rc = 0;
-#ifdef CONFIG_CS8900
-       rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
-#endif
-       return rc;
-}
-#endif
diff --git a/board/csb226/flash.c b/board/csb226/flash.c
deleted file mode 100644 (file)
index e103470..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * (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 2002
- * Robert Schwebel, Pengutronix, <r.schwebel@pengutronix.de>
- *
- * (C) Copyright 2003 (2 x 16 bit Flash bank patches)
- * Rolf Peukert, IMMS gGmbH, <rolf.peukert@imms.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/pxa-regs.h>
-
-#define FLASH_BANK_SIZE 0x02000000
-#define MAIN_SECT_SIZE 0x40000         /* 2x16 = 256k per sector */
-
-flash_info_t   flash_info[CONFIG_SYS_MAX_FLASH_BANKS];
-
-
-/**
- * flash_init: - initialize data structures for flash chips
- *
- * @return: size of the flash
- */
-
-ulong flash_init(void)
-{
-       int i, j;
-       ulong size = 0;
-
-       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) {
-               ulong flashbase = 0;
-               flash_info[i].flash_id =
-                       (INTEL_MANUFACT & FLASH_VENDMASK) |
-                       (INTEL_ID_28F128J3 & FLASH_TYPEMASK);
-               flash_info[i].size = FLASH_BANK_SIZE;
-               flash_info[i].sector_count = CONFIG_SYS_MAX_FLASH_SECT;
-               memset(flash_info[i].protect, 0, CONFIG_SYS_MAX_FLASH_SECT);
-
-               switch (i) {
-               case 0:
-                       flashbase = PHYS_FLASH_1;
-                       break;
-               default:
-                       panic("configured too many flash banks!\n");
-                       break;
-               }
-               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,
-                       CONFIG_SYS_FLASH_BASE,
-                       CONFIG_SYS_FLASH_BASE + monitor_flash_len - 1,
-                       &flash_info[0]);
-
-       flash_protect(FLAG_PROTECT_SET,
-                       CONFIG_ENV_ADDR,
-                       CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1,
-                       &flash_info[0]);
-
-       return size;
-}
-
-
-/**
- * flash_print_info: - print information about the flash situation
- */
-
-void flash_print_info  (flash_info_t *info)
-{
-       int i, j;
-
-       for (j=0; j<CONFIG_SYS_MAX_FLASH_BANKS; j++) {
-
-               switch (info->flash_id & FLASH_VENDMASK) {
-               case (INTEL_MANUFACT & FLASH_VENDMASK):
-                       printf ("Intel: ");
-                       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");
-                       return;
-               }
-
-               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");
-               info++;
-       }
-}
-
-
-/**
- * flash_erase: - erase flash sectors
- */
-
-int flash_erase(flash_info_t *info, int s_first, int s_last)
-{
-       int flag, prot, sect;
-       int rc = ERR_OK;
-       ulong start;
-
-       if (info->flash_id == FLASH_UNKNOWN)
-               return ERR_UNKNOWN_FLASH_TYPE;
-
-       if ((s_first < 0) || (s_first > s_last)) {
-               return ERR_INVAL;
-       }
-
-       if ((info->flash_id & FLASH_VENDMASK) != (INTEL_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();
-
-       /* Start erase on unprotected sectors */
-       for (sect = s_first; sect<=s_last && !ctrlc(); sect++) {
-
-               printf("Erasing sector %2d ... ", sect);
-
-               /* arm simple, non interrupt dependent timer */
-               start = get_timer(0);
-
-               if (info->protect[sect] == 0) { /* not protected */
-                       u32 * volatile addr = (u32 * volatile)(info->start[sect]);
-
-                       /* erase sector:                                    */
-                       /* The strata flashs are aligned side by side on    */
-                       /* the data bus, so we have to write the commands   */
-                       /* to both chips here:                              */
-
-                       *addr = 0x00200020;     /* erase setup */
-                       *addr = 0x00D000D0;     /* erase confirm */
-
-                       while ((*addr & 0x00800080) != 0x00800080) {
-                               if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
-                                       *addr = 0x00B000B0; /* suspend erase*/
-                                       *addr = 0x00FF00FF; /* read mode    */
-                                       rc = ERR_TIMOUT;
-                                       goto outahere;
-                               }
-                       }
-                       *addr = 0x00500050; /* clear status register cmd.   */
-                       *addr = 0x00FF00FF; /* reset to read mode           */
-               }
-               printf("ok.\n");
-       }
-       if (ctrlc()) printf("User Interrupt!\n");
-
-outahere:
-       /* allow flash to settle - wait 10 ms */
-       udelay_masked(10000);
-
-       if (flag) enable_interrupts();
-
-       return rc;
-}
-
-/**
- * write_long: - copy memory to flash, assume a bank of 2 devices with 16bit each
- */
-
-static int write_long (flash_info_t *info, ulong dest, ulong data)
-{
-       u32 * volatile addr = (u32 * volatile)dest, val;
-       int rc = ERR_OK;
-       int flag;
-       ulong start;
-
-       /* read array command - just for the case... */
-       *addr = 0x00FF00FF;
-
-       /* Check if Flash is (sufficiently) erased */
-       if ((*addr & data) != data) return ERR_NOT_ERASED;
-
-       /*
-        * 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();
-
-       /* clear status register command */
-       *addr = 0x00500050;
-
-       /* program set-up command */
-       *addr = 0x00400040;
-
-       /* latch address/data */
-       *addr = data;
-
-       /* arm simple, non interrupt dependent timer */
-       start = get_timer(0);
-
-       /* wait while polling the status register */
-       while(((val = *addr) & 0x00800080) != 0x00800080) {
-               if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
-                       rc = ERR_TIMOUT;
-                       /* suspend program command */
-                       *addr = 0x00B000B0;
-                       goto outahere;
-               }
-       }
-
-       /* check for errors */
-       if(val & 0x001A001A) {
-               printf("\nFlash write error %02x at address %08lx\n",
-                       (int)val, (unsigned long)dest);
-               if(val & 0x00080008) {
-                       printf("Voltage range error.\n");
-                       rc = ERR_PROG_ERROR;
-                       goto outahere;
-               }
-               if(val & 0x00020002) {
-                       printf("Device protect error.\n");
-                       rc = ERR_PROTECTED;
-                       goto outahere;
-               }
-               if(val & 0x00100010) {
-                       printf("Programming error.\n");
-                       rc = ERR_PROG_ERROR;
-                       goto outahere;
-               }
-               rc = ERR_PROG_ERROR;
-               goto outahere;
-       }
-
-outahere:
-       /* read array command */
-       *addr = 0x00FF00FF;
-       if (flag) enable_interrupts();
-
-       return rc;
-}
-
-
-/**
- * write_buf: - Copy memory to flash.
- *
- * @param info:
- * @param src: source of copy transaction
- * @param addr: where to copy to
- * @param cnt: number of bytes to copy
- *
- * @return     error code
- */
-
-/* "long" version, uses 32bit words */
-int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
-{
-       ulong cp, wp;
-       ulong data;
-       int l;
-       int i, 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 << 24);
-               }
-               for (; i<4 && cnt>0; ++i) {
-                       data = (data >> 8) | (*src++ << 24);
-                       --cnt;
-                       ++cp;
-               }
-               for (; cnt==0 && i<4; ++i, ++cp) {
-                       data = (data >> 8) | (*(uchar *)cp << 24);
-               }
-
-               if ((rc = write_long(info, wp, data)) != 0) {
-                       return (rc);
-               }
-               wp += 4;
-       }
-
-       /*
-        * handle word aligned part
-        */
-       while (cnt >= 4) {
-               data = *((ulong*)src);
-               if ((rc = write_long(info, wp, data)) != 0) {
-                       return (rc);
-               }
-               src += 4;
-               wp  += 4;
-               cnt -= 4;
-       }
-
-       if (cnt == 0) return ERR_OK;
-
-       /*
-        * handle unaligned tail bytes
-        */
-       data = 0;
-       for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) {
-               data = (data >> 8) | (*src++ << 24);
-               --cnt;
-       }
-       for (; i<4; ++i, ++cp) {
-               data = (data >> 8) | (*(uchar *)cp << 24);
-       }
-
-       return write_long(info, wp, data);
-}
index 665aedf0b5f8f60568cdd283653ff6c1c72bb7f3..c41f11d60c75a4ed1687a5dca0334ac728262680 100644 (file)
@@ -231,7 +231,7 @@ static void board_nand_setup(void)
 
        mxc_setup_weimcs(3, &cs3);
 
-       __REG(IOMUXC_GPR) |= 1 << 13;
+       mx31_set_gpr(MUX_SDCTL_CSD1_SEL, 1);
 
        mx31_gpio_mux(IOMUX_MODE(MUX_CTL_NFC_WP, MUX_CTL_IN_GPIO));
        mx31_gpio_mux(IOMUX_MODE(MUX_CTL_NFC_CE, MUX_CTL_IN_GPIO));
index 2021e7324298dd0a41728d47b02ba5ce4bbc72e2..c45c94b4c0d6ccc231dfe6db5f74ba8e715e2ec9 100644 (file)
@@ -46,8 +46,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define pinmux(x)      (&davinci_syscfg_regs->pinmux[x])
-
 /* SPI0 pin muxer settings */
 static const struct pinmux_config spi0_pins[] = {
        { pinmux(7), 1, 3 },
index e0a3bbefcf0477e577efb71e2c44b9173487e4a6..9c0eadea900c0150aa9d2d49a6f1efe3eee42c0e 100644 (file)
 #include <asm/arch/hardware.h>
 #include <asm/arch/emif_defs.h>
 #include <asm/arch/emac_defs.h>
+#include <asm/arch/pinmux_defs.h>
 #include <asm/io.h>
 #include <asm/arch/davinci_misc.h>
 #include <hwconfig.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define pinmux(x)      (&davinci_syscfg_regs->pinmux[x])
-
-/* SPI0 pin muxer settings */
-static const struct pinmux_config spi1_pins[] = {
-       { pinmux(5), 1, 1 },
-       { pinmux(5), 1, 2 },
-       { pinmux(5), 1, 4 },
-       { pinmux(5), 1, 5 }
-};
-
-/* UART pin muxer settings */
-static const struct pinmux_config uart_pins[] = {
-       { pinmux(0), 4, 6 },
-       { pinmux(0), 4, 7 },
-       { pinmux(4), 2, 4 },
-       { pinmux(4), 2, 5 }
-};
-
 #ifdef CONFIG_DRIVER_TI_EMAC
-static const struct pinmux_config emac_pins[] = {
-#ifdef CONFIG_DRIVER_TI_EMAC_USE_RMII
-       { pinmux(14), 8, 2 },
-       { pinmux(14), 8, 3 },
-       { pinmux(14), 8, 4 },
-       { pinmux(14), 8, 5 },
-       { pinmux(14), 8, 6 },
-       { pinmux(14), 8, 7 },
-       { pinmux(15), 8, 1 },
-#else /* ! CONFIG_DRIVER_TI_EMAC_USE_RMII */
-       { pinmux(2), 8, 1 },
-       { pinmux(2), 8, 2 },
-       { pinmux(2), 8, 3 },
-       { pinmux(2), 8, 4 },
-       { pinmux(2), 8, 5 },
-       { pinmux(2), 8, 6 },
-       { pinmux(2), 8, 7 },
-       { pinmux(3), 8, 0 },
-       { pinmux(3), 8, 1 },
-       { pinmux(3), 8, 2 },
-       { pinmux(3), 8, 3 },
-       { pinmux(3), 8, 4 },
-       { pinmux(3), 8, 5 },
-       { pinmux(3), 8, 6 },
-       { pinmux(3), 8, 7 },
-#endif /* CONFIG_DRIVER_TI_EMAC_USE_RMII */
-       { pinmux(4), 8, 0 },
-       { pinmux(4), 8, 1 }
-};
-
-/* I2C pin muxer settings */
-static const struct pinmux_config i2c_pins[] = {
-       { pinmux(4), 2, 2 },
-       { pinmux(4), 2, 3 }
-};
-
-#ifdef CONFIG_NAND_DAVINCI
-const struct pinmux_config nand_pins[] = {
-       { pinmux(7), 1, 1 },
-       { pinmux(7), 1, 2 },
-       { pinmux(7), 1, 4 },
-       { pinmux(7), 1, 5 },
-       { pinmux(9), 1, 0 },
-       { pinmux(9), 1, 1 },
-       { pinmux(9), 1, 2 },
-       { pinmux(9), 1, 3 },
-       { pinmux(9), 1, 4 },
-       { pinmux(9), 1, 5 },
-       { pinmux(9), 1, 6 },
-       { pinmux(9), 1, 7 },
-       { pinmux(12), 1, 5 },
-       { pinmux(12), 1, 6 }
-};
-#elif defined(CONFIG_USE_NOR)
-/* NOR pin muxer settings */
-const struct pinmux_config nor_pins[] = {
-       /* GP0[11] is required for NOR to work on Rev 3 EVMs */
-       { pinmux(0), 8, 4 },    /* GP0[11] */
-       { pinmux(5), 1, 6 },
-       { pinmux(6), 1, 6 },
-       { pinmux(7), 1, 0 },
-       { pinmux(7), 1, 4 },
-       { pinmux(7), 1, 5 },
-       { pinmux(8), 1, 0 },
-       { pinmux(8), 1, 1 },
-       { pinmux(8), 1, 2 },
-       { pinmux(8), 1, 3 },
-       { pinmux(8), 1, 4 },
-       { pinmux(8), 1, 5 },
-       { pinmux(8), 1, 6 },
-       { pinmux(8), 1, 7 },
-       { pinmux(9), 1, 0 },
-       { pinmux(9), 1, 1 },
-       { pinmux(9), 1, 2 },
-       { pinmux(9), 1, 3 },
-       { pinmux(9), 1, 4 },
-       { pinmux(9), 1, 5 },
-       { pinmux(9), 1, 6 },
-       { pinmux(9), 1, 7 },
-       { pinmux(10), 1, 0 },
-       { pinmux(10), 1, 1 },
-       { pinmux(10), 1, 2 },
-       { pinmux(10), 1, 3 },
-       { pinmux(10), 1, 4 },
-       { pinmux(10), 1, 5 },
-       { pinmux(10), 1, 6 },
-       { pinmux(10), 1, 7 },
-       { pinmux(11), 1, 0 },
-       { pinmux(11), 1, 1 },
-       { pinmux(11), 1, 2 },
-       { pinmux(11), 1, 3 },
-       { pinmux(11), 1, 4 },
-       { pinmux(11), 1, 5 },
-       { pinmux(11), 1, 6 },
-       { pinmux(11), 1, 7 },
-       { pinmux(12), 1, 0 },
-       { pinmux(12), 1, 1 },
-       { pinmux(12), 1, 2 },
-       { pinmux(12), 1, 3 },
-       { pinmux(12), 1, 4 },
-       { pinmux(12), 1, 5 },
-       { pinmux(12), 1, 6 },
-       { pinmux(12), 1, 7 }
-};
-#endif
-
 #ifdef CONFIG_DRIVER_TI_EMAC_USE_RMII
 #define HAS_RMII 1
 #else
@@ -224,17 +101,38 @@ int misc_init_r(void)
        return 0;
 }
 
+static const struct pinmux_config gpio_pins[] = {
+#ifdef CONFIG_USE_NOR
+       /* GP0[11] is required for NOR to work on Rev 3 EVMs */
+       { pinmux(0), 8, 4 },    /* GP0[11] */
+#endif
+};
+
 static const struct pinmux_resource pinmuxes[] = {
+#ifdef CONFIG_DRIVER_TI_EMAC
+       PINMUX_ITEM(emac_pins_mdio),
+#ifdef CONFIG_DRIVER_TI_EMAC_USE_RMII
+       PINMUX_ITEM(emac_pins_rmii),
+#else
+       PINMUX_ITEM(emac_pins_mii),
+#endif
+#endif
 #ifdef CONFIG_SPI_FLASH
-       PINMUX_ITEM(spi1_pins),
+       PINMUX_ITEM(spi1_pins_base),
+       PINMUX_ITEM(spi1_pins_scs0),
 #endif
-       PINMUX_ITEM(uart_pins),
-       PINMUX_ITEM(i2c_pins),
+       PINMUX_ITEM(uart2_pins_txrx),
+       PINMUX_ITEM(uart2_pins_rtscts),
+       PINMUX_ITEM(i2c0_pins),
 #ifdef CONFIG_NAND_DAVINCI
-       PINMUX_ITEM(nand_pins),
+       PINMUX_ITEM(emifa_pins_cs3),
+       PINMUX_ITEM(emifa_pins_cs4),
+       PINMUX_ITEM(emifa_pins_nand),
 #elif defined(CONFIG_USE_NOR)
-       PINMUX_ITEM(nor_pins),
+       PINMUX_ITEM(emifa_pins_cs2),
+       PINMUX_ITEM(emifa_pins_nor),
 #endif
+       PINMUX_ITEM(gpio_pins),
 };
 
 static const struct lpsc_resource lpsc[] = {
@@ -249,6 +147,8 @@ static const struct lpsc_resource lpsc[] = {
 #define CONFIG_DA850_EVM_MAX_CPU_CLK   300000000
 #endif
 
+#define REV_AM18X_EVM          0x100
+
 /*
  * get_board_rev() - setup to pass kernel board revision information
  * Returns:
@@ -274,7 +174,9 @@ u32 get_board_rev(void)
                rev = 2;
        else if (maxcpuclk >= 372000000)
                rev = 1;
-
+#ifdef CONFIG_DA850_AM18X_EVM
+       rev |= REV_AM18X_EVM;
+#endif
        return rev;
 }
 
@@ -346,9 +248,6 @@ int board_init(void)
 #endif
 
 #ifdef CONFIG_DRIVER_TI_EMAC
-       if (davinci_configure_pin_mux(emac_pins, ARRAY_SIZE(emac_pins)) != 0)
-               return 1;
-
        davinci_emac_mii_mode_sel(HAS_RMII);
 #endif /* CONFIG_DRIVER_TI_EMAC */
 
index f34830ed2426ac55539ba19f36cf7e3c0f182e71..9d4e238bfc9ae288dbc47c81e37c19ab8ba17897 100644 (file)
@@ -47,8 +47,8 @@ int board_early_init_f(void)
        /*
         * Kick Registers need to be set to allow access to Pin Mux registers
         */
-       writel(HAWKBOARD_KICK0_UNLOCK, &davinci_syscfg_regs->kick0);
-       writel(HAWKBOARD_KICK1_UNLOCK, &davinci_syscfg_regs->kick1);
+       writel(DV_SYSCFG_KICK0_UNLOCK, &davinci_syscfg_regs->kick0);
+       writel(DV_SYSCFG_KICK1_UNLOCK, &davinci_syscfg_regs->kick1);
 
        /* set cfgchip3 to select mii */
        writel(readl(&davinci_syscfg_regs->cfgchip3) &
index e5e65e5fd00a0e68704913b9b0dfabcbd435e915..df97963f6daa51afcf937b9e3a10f0d16799598d 100644 (file)
 #include <asm/arch/hardware.h>
 #include <asm/io.h>
 #include <asm/arch/davinci_misc.h>
+#include <asm/arch/pinmux_defs.h>
 #include <ns16550.h>
 #include <nand.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define pinmux(x)                      (&davinci_syscfg_regs->pinmux[x])
-
-static const struct pinmux_config mii_pins[] = {
-       { pinmux(2), 8, 1 },
-       { pinmux(2), 8, 2 },
-       { pinmux(2), 8, 3 },
-       { pinmux(2), 8, 4 },
-       { pinmux(2), 8, 5 },
-       { pinmux(2), 8, 6 },
-       { pinmux(2), 8, 7 }
-};
-
-static const struct pinmux_config mdio_pins[] = {
-       { pinmux(4), 8, 0 },
-       { pinmux(4), 8, 1 }
-};
-
-static const struct pinmux_config nand_pins[] = {
-       { pinmux(7), 1, 1 },
-       { pinmux(7), 1, 2 },
-       { pinmux(7), 1, 4 },
-       { pinmux(7), 1, 5 },
-       { pinmux(9), 1, 0 },
-       { pinmux(9), 1, 1 },
-       { pinmux(9), 1, 2 },
-       { pinmux(9), 1, 3 },
-       { pinmux(9), 1, 4 },
-       { pinmux(9), 1, 5 },
-       { pinmux(9), 1, 6 },
-       { pinmux(9), 1, 7 },
-       { pinmux(12), 1, 5 },
-       { pinmux(12), 1, 6 }
-};
-
-static const struct pinmux_config uart2_pins[] = {
-       { pinmux(0), 4, 6 },
-       { pinmux(0), 4, 7 },
-       { pinmux(4), 2, 4 },
-       { pinmux(4), 2, 5 }
-};
-
-static const struct pinmux_config i2c_pins[] = {
-       { pinmux(4), 2, 4 },
-       { pinmux(4), 2, 5 }
-};
-
 static const struct pinmux_resource pinmuxes[] = {
-       PINMUX_ITEM(mii_pins),
-       PINMUX_ITEM(mdio_pins),
-       PINMUX_ITEM(i2c_pins),
-       PINMUX_ITEM(nand_pins),
-       PINMUX_ITEM(uart2_pins),
+       PINMUX_ITEM(emac_pins_mii),
+       PINMUX_ITEM(emac_pins_mdio),
+       PINMUX_ITEM(emifa_pins_cs3),
+       PINMUX_ITEM(emifa_pins_cs4),
+       PINMUX_ITEM(emifa_pins_nand),
+       PINMUX_ITEM(uart2_pins_txrx),
+       PINMUX_ITEM(uart2_pins_rtscts),
 };
 
 static const struct lpsc_resource lpsc[] = {
@@ -99,8 +56,8 @@ void board_init_f(ulong bootflag)
        /*
         * Kick Registers need to be set to allow access to Pin Mux registers
         */
-       writel(HAWKBOARD_KICK0_UNLOCK, &davinci_syscfg_regs->kick0);
-       writel(HAWKBOARD_KICK1_UNLOCK, &davinci_syscfg_regs->kick1);
+       writel(DV_SYSCFG_KICK0_UNLOCK, &davinci_syscfg_regs->kick0);
+       writel(DV_SYSCFG_KICK1_UNLOCK, &davinci_syscfg_regs->kick1);
 
        /* setup the SUSPSRC for ARM to control emulation suspend */
        writel(readl(&davinci_syscfg_regs->suspsrc) &
index 1a01c3ce2cab58bfba2bf283828274f79ab2cc71..ac82d5cf3db80d8e2ef7254d0a97e0687ca6da64 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#define REV_DM6467EVM          0
+#define REV_DM6467TEVM         1
+/*
+ * get_board_rev() - setup to pass kernel board revision information
+ * Returns:
+ * bit[0-3]    System clock frequency
+ * 0000b       - 27 MHz
+ * 0001b       - 33 MHz
+ */
+u32 get_board_rev(void)
+{
+
+#ifdef DAVINCI_DM6467TEVM
+       return REV_DM6467TEVM;
+#else
+       return REV_DM6467EVM;
+#endif
+
+}
+
 int board_init(void)
 {
        gd->bd->bi_arch_number = MACH_TYPE_DAVINCI_DM6467_EVM;
index 720a3607a75edb32d1524b38d83c5f871646d335..9b6c4c047dd4b7cefa98d6183a6c0ed6a91eab23 100644 (file)
@@ -40,8 +40,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define pinmux(x)      (&davinci_syscfg_regs->pinmux[x])
-
 static const struct da8xx_panel lcd_panel = {
        /* Casio COM57H531x */
        .name = "Casio_COM57H531x",
index 8b615a9929c4b5b5e94dbf03c36c3cc1cf03adc2..52d00e42060d136c8fbdb0f468850a23f855d4ac 100644 (file)
@@ -33,9 +33,6 @@ DECLARE_GLOBAL_DATA_PTR;
 
 int board_init(void)
 {
-       /* arch number of the board */
-       gd->bd->bi_arch_number = MACH_TYPE_SCHMOOGIE;
-
        /* address of boot parameters */
        gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
 
index c194290c09e88ab4125951b7d61a4683f4c23a3d..55110fb278c417688aaf4d409644ac575087f341 100644 (file)
@@ -34,9 +34,6 @@ DECLARE_GLOBAL_DATA_PTR;
 
 int board_init(void)
 {
-       /* arch number of the board */
-       gd->bd->bi_arch_number = MACH_TYPE_SONATA;
-
        /* address of boot parameters */
        gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
 
similarity index 85%
rename from board/innokom/Makefile
rename to board/denx/m28evk/Makefile
index 8b58b7f1913ea02d2f72a84cd7bb7020033937be..b6f002fe36f466e570c819b782e543e5468d3023 100644 (file)
@@ -25,7 +25,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := innokom.o flash.o
+ifndef CONFIG_SPL_BUILD
+COBJS  := m28evk.o
+endif
+
+ifdef  CONFIG_SPL_BUILD
+COBJS  := mem_init.o mmc_boot.o power_init.o memsize.o
+endif
 
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
@@ -33,6 +39,13 @@ OBJS := $(addprefix $(obj),$(COBJS))
 $(LIB):        $(obj).depend $(OBJS)
        $(call cmd_link_o_target, $(OBJS))
 
+all:   $(ALL)
+
+ifdef  CONFIG_SPL_BUILD
+memsize.c:
+       ln -sf $(TOPDIR)/common/memsize.c $@
+endif
+
 #########################################################################
 
 # defines $(obj).depend target
similarity index 64%
rename from onenand_ipl/board/vpac270/vpac270.c
rename to board/denx/m28evk/m28_init.h
index a1eb331fd8ff294ac439d986eb5821c00385372c..98d363199dc242be5a78cbec25d992ab01694396 100644 (file)
@@ -1,13 +1,8 @@
 /*
- * (C) Copyright 2004
- * Robert Whaley, Applied Data Systems, Inc. rwhaley@applieddata.net
+ * Freescale i.MX28 SPL functions
  *
- * (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>
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
  *
  * See file CREDITS for list of people who contributed to this
  * project.
  * MA 02111-1307 USA
  */
 
-#include <common.h>
-#include <asm/arch/hardware.h>
+#ifndef        __M28_INIT_H__
+#define        __M28_INIT_H__
+
+void early_delay(int delay);
+
+void mx28_power_init(void);
+
+#ifdef CONFIG_SPL_MX28_PSWITCH_WAIT
+void mx28_power_wait_pswitch(void);
+#else
+static inline void mx28_power_wait_pswitch(void) { }
+#endif
 
-int board_init (void)
-{
-       return 0;
-}
+void mx28_mem_init(void);
 
-int s_init(int skip)
-{
-       return 0;
-}
+#endif /* __M28_INIT_H__ */
diff --git a/board/denx/m28evk/m28evk.c b/board/denx/m28evk/m28evk.c
new file mode 100644 (file)
index 0000000..8cf3dc9
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * DENX M28 module
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/iomux-mx28.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/sys_proto.h>
+#include <linux/mii.h>
+#include <miiphy.h>
+#include <netdev.h>
+#include <errno.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Functions
+ */
+int board_early_init_f(void)
+{
+       /* IO0 clock at 480MHz */
+       mx28_set_ioclk(MXC_IOCLK0, 480000);
+       /* IO1 clock at 480MHz */
+       mx28_set_ioclk(MXC_IOCLK1, 480000);
+
+       /* SSP0 clock at 96MHz */
+       mx28_set_sspclk(MXC_SSPCLK0, 96000, 0);
+       /* SSP2 clock at 96MHz */
+       mx28_set_sspclk(MXC_SSPCLK2, 96000, 0);
+
+#ifdef CONFIG_CMD_USB
+       mxs_iomux_setup_pad(MX28_PAD_SSP2_SS1__USB1_OVERCURRENT);
+       mxs_iomux_setup_pad(MX28_PAD_AUART3_TX__GPIO_3_13 |
+                       MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_PULLUP);
+       gpio_direction_output(MX28_PAD_AUART3_TX__GPIO_3_13, 0);
+#endif
+
+       return 0;
+}
+
+int board_init(void)
+{
+       /* Adress of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
+
+       return 0;
+}
+
+#define        HW_DIGCTRL_SCRATCH0     0x8001c280
+#define        HW_DIGCTRL_SCRATCH1     0x8001c290
+int dram_init(void)
+{
+       uint32_t sz[2];
+
+       sz[0] = readl(HW_DIGCTRL_SCRATCH0);
+       sz[1] = readl(HW_DIGCTRL_SCRATCH1);
+
+       if (sz[0] != sz[1]) {
+               printf("MX28:\n"
+                       "Error, the RAM size in HW_DIGCTRL_SCRATCH0 and\n"
+                       "HW_DIGCTRL_SCRATCH1 is not the same. Please\n"
+                       "verify these two registers contain valid RAM size!\n");
+               hang();
+       }
+
+       gd->ram_size = sz[0];
+       return 0;
+}
+
+#ifdef CONFIG_CMD_MMC
+static int m28_mmc_wp(int id)
+{
+       if (id != 0) {
+               printf("MXS MMC: Invalid card selected (card id = %d)\n", id);
+               return 1;
+       }
+
+       return gpio_get_value(MX28_PAD_AUART2_CTS__GPIO_3_10);
+}
+
+int board_mmc_init(bd_t *bis)
+{
+       /* Configure WP as output */
+       gpio_direction_input(MX28_PAD_AUART2_CTS__GPIO_3_10);
+
+       return mxsmmc_initialize(bis, 0, m28_mmc_wp);
+}
+#endif
+
+#ifdef CONFIG_CMD_NET
+
+#define        MII_OPMODE_STRAP_OVERRIDE       0x16
+#define        MII_PHY_CTRL1                   0x1e
+#define        MII_PHY_CTRL2                   0x1f
+
+int fecmxc_mii_postcall(int phy)
+{
+       miiphy_write("FEC1", phy, MII_BMCR, 0x9000);
+       miiphy_write("FEC1", phy, MII_OPMODE_STRAP_OVERRIDE, 0x0202);
+       if (phy == 3)
+               miiphy_write("FEC1", 3, MII_PHY_CTRL2, 0x8180);
+       return 0;
+}
+
+int board_eth_init(bd_t *bis)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+       struct eth_device *dev;
+       int ret;
+
+       ret = cpu_eth_init(bis);
+
+       clrsetbits_le32(&clkctrl_regs->hw_clkctrl_enet,
+               CLKCTRL_ENET_TIME_SEL_MASK | CLKCTRL_ENET_CLK_OUT_EN,
+               CLKCTRL_ENET_TIME_SEL_RMII_CLK);
+
+       ret = fecmxc_initialize_multi(bis, 0, 0, MXS_ENET0_BASE);
+       if (ret) {
+               printf("FEC MXS: Unable to init FEC0\n");
+               return ret;
+       }
+
+       ret = fecmxc_initialize_multi(bis, 1, 3, MXS_ENET1_BASE);
+       if (ret) {
+               printf("FEC MXS: Unable to init FEC1\n");
+               return ret;
+       }
+
+       dev = eth_get_dev_by_name("FEC0");
+       if (!dev) {
+               printf("FEC MXS: Unable to get FEC0 device entry\n");
+               return -EINVAL;
+       }
+
+       ret = fecmxc_register_mii_postcall(dev, fecmxc_mii_postcall);
+       if (ret) {
+               printf("FEC MXS: Unable to register FEC0 mii postcall\n");
+               return ret;
+       }
+
+       dev = eth_get_dev_by_name("FEC1");
+       if (!dev) {
+               printf("FEC MXS: Unable to get FEC1 device entry\n");
+               return -EINVAL;
+       }
+
+       ret = fecmxc_register_mii_postcall(dev, fecmxc_mii_postcall);
+       if (ret) {
+               printf("FEC MXS: Unable to register FEC1 mii postcall\n");
+               return ret;
+       }
+
+       return ret;
+}
+
+#ifdef CONFIG_M28_FEC_MAC_IN_OCOTP
+
+#define        MXS_OCOTP_MAX_TIMEOUT   1000000
+void imx_get_mac_from_fuse(char *mac)
+{
+       struct mx28_ocotp_regs *ocotp_regs =
+               (struct mx28_ocotp_regs *)MXS_OCOTP_BASE;
+       uint32_t data;
+
+       memset(mac, 0, 6);
+
+       writel(OCOTP_CTRL_RD_BANK_OPEN, &ocotp_regs->hw_ocotp_ctrl_set);
+
+       if (mx28_wait_mask_clr(&ocotp_regs->hw_ocotp_ctrl_reg, OCOTP_CTRL_BUSY,
+                               MXS_OCOTP_MAX_TIMEOUT)) {
+               printf("MXS FEC: Can't get MAC from OCOTP\n");
+               return;
+       }
+
+       data = readl(&ocotp_regs->hw_ocotp_cust0);
+
+       mac[0] = 0x00;
+       mac[1] = 0x04;
+       mac[2] = (data >> 24) & 0xff;
+       mac[3] = (data >> 16) & 0xff;
+       mac[4] = (data >> 8) & 0xff;
+       mac[5] = data & 0xff;
+}
+#else
+void imx_get_mac_from_fuse(char *mac)
+{
+       memset(mac, 0, 6);
+}
+#endif
+
+#endif
diff --git a/board/denx/m28evk/mem_init.c b/board/denx/m28evk/mem_init.c
new file mode 100644 (file)
index 0000000..17d1f9b
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ * Freescale i.MX28 RAM init
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/io.h>
+#include <asm/arch/iomux-mx28.h>
+#include <asm/arch/imx-regs.h>
+
+#include "m28_init.h"
+
+uint32_t dram_vals[] = {
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000100, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00010101, 0x01010101, 0x000f0f01, 0x0f02020a,
+       0x00000000, 0x00010101, 0x00000100, 0x00000100, 0x00000000,
+       0x00000002, 0x01010000, 0x05060302, 0x06005003, 0x0a0000c8,
+       0x02009c40, 0x0000030c, 0x0036a609, 0x031a0612, 0x02030202,
+       0x00c8001c, 0x00000000, 0x00000000, 0x00012100, 0xffff0303,
+       0x00012100, 0xffff0303, 0x00012100, 0xffff0303, 0x00012100,
+       0xffff0303, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000612, 0x01000F02, 0x06120612, 0x00000200,
+       0x00020007, 0xf5014b27, 0xf5014b27, 0xf5014b27, 0xf5014b27,
+       0x07000300, 0x07000300, 0x07000300, 0x07000300, 0x00000006,
+       0x00000000, 0x00000000, 0x01000000, 0x01020408, 0x08040201,
+       0x000f1133, 0x00000000, 0x00001f04, 0x00001f04, 0x00001f04,
+       0x00001f04, 0x00001f04, 0x00001f04, 0x00001f04, 0x00001f04,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x00000000, 0x00010000, 0x00020304, 0x00000004,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+       0x00000000, 0x01010000, 0x01000000, 0x03030000, 0x00010303,
+       0x01020202, 0x00000000, 0x02040303, 0x21002103, 0x00061200,
+       0x06120612, 0x04320432, 0x04320432, 0x00040004, 0x00040004,
+       0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010001
+};
+
+void init_m28_200mhz_ddr2(void)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(dram_vals); i++)
+               writel(dram_vals[i], MXS_DRAM_BASE + (4 * i));
+}
+
+void mx28_mem_init_clock(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       /* Gate EMI clock */
+       writel(CLKCTRL_FRAC0_CLKGATEEMI,
+               &clkctrl_regs->hw_clkctrl_frac0_set);
+
+       /* EMI = 205MHz */
+       writel(CLKCTRL_FRAC0_EMIFRAC_MASK,
+               &clkctrl_regs->hw_clkctrl_frac0_set);
+       writel((0x2a << CLKCTRL_FRAC0_EMIFRAC_OFFSET) &
+               CLKCTRL_FRAC0_EMIFRAC_MASK,
+               &clkctrl_regs->hw_clkctrl_frac0_clr);
+
+       /* Ungate EMI clock */
+       writel(CLKCTRL_FRAC0_CLKGATEEMI,
+               &clkctrl_regs->hw_clkctrl_frac0_clr);
+
+       early_delay(11000);
+
+       writel((2 << CLKCTRL_EMI_DIV_EMI_OFFSET) |
+               (1 << CLKCTRL_EMI_DIV_XTAL_OFFSET),
+               &clkctrl_regs->hw_clkctrl_emi);
+
+       /* Unbypass EMI */
+       writel(CLKCTRL_CLKSEQ_BYPASS_EMI,
+               &clkctrl_regs->hw_clkctrl_clkseq_clr);
+
+       early_delay(10000);
+}
+
+void mx28_mem_setup_cpu_and_hbus(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       /* CPU = 454MHz and ungate CPU clock */
+       clrsetbits_le32(&clkctrl_regs->hw_clkctrl_frac0,
+               CLKCTRL_FRAC0_CPUFRAC_MASK | CLKCTRL_FRAC0_CLKGATECPU,
+               19 << CLKCTRL_FRAC0_CPUFRAC_OFFSET);
+
+       /* Set CPU bypass */
+       writel(CLKCTRL_CLKSEQ_BYPASS_CPU,
+               &clkctrl_regs->hw_clkctrl_clkseq_set);
+
+       /* HBUS = 151MHz */
+       writel(CLKCTRL_HBUS_DIV_MASK, &clkctrl_regs->hw_clkctrl_hbus_set);
+       writel(((~3) << CLKCTRL_HBUS_DIV_OFFSET) & CLKCTRL_HBUS_DIV_MASK,
+               &clkctrl_regs->hw_clkctrl_hbus_clr);
+
+       early_delay(10000);
+
+       /* CPU clock divider = 1 */
+       clrsetbits_le32(&clkctrl_regs->hw_clkctrl_cpu,
+                       CLKCTRL_CPU_DIV_CPU_MASK, 1);
+
+       /* Disable CPU bypass */
+       writel(CLKCTRL_CLKSEQ_BYPASS_CPU,
+               &clkctrl_regs->hw_clkctrl_clkseq_clr);
+}
+
+void mx28_mem_setup_vdda(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       writel((0xc << POWER_VDDACTRL_TRG_OFFSET) |
+               (0x7 << POWER_VDDACTRL_BO_OFFSET_OFFSET) |
+               POWER_VDDACTRL_LINREG_OFFSET_1STEPS_BELOW,
+               &power_regs->hw_power_vddactrl);
+}
+
+void mx28_mem_setup_vddd(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       writel((0x1c << POWER_VDDDCTRL_TRG_OFFSET) |
+               (0x7 << POWER_VDDDCTRL_BO_OFFSET_OFFSET) |
+               POWER_VDDDCTRL_LINREG_OFFSET_1STEPS_BELOW,
+               &power_regs->hw_power_vdddctrl);
+}
+
+#define        HW_DIGCTRL_SCRATCH0     0x8001c280
+#define        HW_DIGCTRL_SCRATCH1     0x8001c290
+void data_abort_memdetect_handler(void) __attribute__((naked));
+void data_abort_memdetect_handler(void)
+{
+       asm volatile("subs pc, r14, #4");
+}
+
+void mx28_mem_get_size(void)
+{
+       uint32_t sz, da;
+       uint32_t *vt = (uint32_t *)0x20;
+
+       /* Replace the DABT handler. */
+       da = vt[4];
+       vt[4] = (uint32_t)&data_abort_memdetect_handler;
+
+       sz = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE);
+       writel(sz, HW_DIGCTRL_SCRATCH0);
+       writel(sz, HW_DIGCTRL_SCRATCH1);
+
+       /* Restore the old DABT handler. */
+       vt[4] = da;
+}
+
+void mx28_mem_init(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+       struct mx28_pinctrl_regs *pinctrl_regs =
+               (struct mx28_pinctrl_regs *)MXS_PINCTRL_BASE;
+
+       /* Set DDR2 mode */
+       writel(PINCTRL_EMI_DS_CTRL_DDR_MODE_DDR2,
+               &pinctrl_regs->hw_pinctrl_emi_ds_ctrl_set);
+
+       /* Power up PLL0 */
+       writel(CLKCTRL_PLL0CTRL0_POWER,
+               &clkctrl_regs->hw_clkctrl_pll0ctrl0_set);
+
+       early_delay(11000);
+
+       mx28_mem_init_clock();
+
+       mx28_mem_setup_vdda();
+
+       /*
+        * Configure the DRAM registers
+        */
+
+       /* Clear START bit from DRAM_CTL16 */
+       clrbits_le32(MXS_DRAM_BASE + 0x40, 1);
+
+       init_m28_200mhz_ddr2();
+
+       /* Clear SREFRESH bit from DRAM_CTL17 */
+       clrbits_le32(MXS_DRAM_BASE + 0x44, 1);
+
+       /* Set START bit in DRAM_CTL16 */
+       setbits_le32(MXS_DRAM_BASE + 0x40, 1);
+
+       /* Wait for bit 20 (DRAM init complete) in DRAM_CTL58 */
+       while (!(readl(MXS_DRAM_BASE + 0xe8) & (1 << 20)))
+               ;
+
+       mx28_mem_setup_vddd();
+
+       early_delay(10000);
+
+       mx28_mem_setup_cpu_and_hbus();
+
+       mx28_mem_get_size();
+}
diff --git a/board/denx/m28evk/mmc_boot.c b/board/denx/m28evk/mmc_boot.c
new file mode 100644 (file)
index 0000000..86d3ab5
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+ * Freescale i.MX28 Boot setup
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/io.h>
+#include <asm/arch/iomux-mx28.h>
+
+#include "m28_init.h"
+
+/*
+ * This delay function is intended to be used only in early stage of boot, where
+ * clock are not set up yet. The timer used here is reset on every boot and
+ * takes a few seconds to roll. The boot doesn't take that long, so to keep the
+ * code simple, it doesn't take rolling into consideration.
+ */
+#define        HW_DIGCTRL_MICROSECONDS 0x8001c0c0
+void early_delay(int delay)
+{
+       uint32_t st = readl(HW_DIGCTRL_MICROSECONDS);
+       st += delay;
+       while (st > readl(HW_DIGCTRL_MICROSECONDS))
+               ;
+}
+
+#define        MUX_CONFIG_LED  (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define        MUX_CONFIG_LCD  (MXS_PAD_3V3 | MXS_PAD_4MA)
+#define        MUX_CONFIG_TSC  (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
+#define        MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP)
+#define        MUX_CONFIG_SSP2 (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_PULLUP)
+#define        MUX_CONFIG_GPMI (MXS_PAD_1V8 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define        MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_PULLUP)
+#define        MUX_CONFIG_EMI  (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL)
+
+const iomux_cfg_t iomux_setup[] = {
+       /* LED */
+       MX28_PAD_ENET0_RXD3__GPIO_4_10 | MUX_CONFIG_LED,
+
+       /* framebuffer */
+       MX28_PAD_LCD_D00__LCD_D0 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D01__LCD_D1 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D02__LCD_D2 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D03__LCD_D3 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D04__LCD_D4 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D05__LCD_D5 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D06__LCD_D6 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D07__LCD_D7 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D08__LCD_D8 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D09__LCD_D9 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D18__LCD_D18 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D19__LCD_D19 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D20__LCD_D20 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D21__LCD_D21 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D22__LCD_D22 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D23__LCD_D23 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_RD_E__LCD_VSYNC | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_WR_RWN__LCD_HSYNC | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_RS__LCD_DOTCLK | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_CS__LCD_CS | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_VSYNC__LCD_VSYNC | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_HSYNC__LCD_HSYNC | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_DOTCLK__LCD_DOTCLK | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_ENABLE__GPIO_1_31 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_RESET__GPIO_3_30 | MUX_CONFIG_LCD,
+
+       /* UART1 */
+       MX28_PAD_PWM0__DUART_RX,
+       MX28_PAD_PWM1__DUART_TX,
+       MX28_PAD_AUART0_TX__DUART_RTS,
+       MX28_PAD_AUART0_RX__DUART_CTS,
+
+       /* UART2 */
+       MX28_PAD_AUART1_RX__AUART1_RX,
+       MX28_PAD_AUART1_TX__AUART1_TX,
+       MX28_PAD_AUART1_RTS__AUART1_RTS,
+       MX28_PAD_AUART1_CTS__AUART1_CTS,
+
+       /* CAN */
+       MX28_PAD_GPMI_RDY2__CAN0_TX,
+       MX28_PAD_GPMI_RDY3__CAN0_RX,
+
+       /* I2C */
+       MX28_PAD_I2C0_SCL__I2C0_SCL,
+       MX28_PAD_I2C0_SDA__I2C0_SDA,
+
+       /* TSC2007 */
+       MX28_PAD_SAIF0_MCLK__GPIO_3_20 | MUX_CONFIG_TSC,
+
+       /* MMC0 */
+       MX28_PAD_SSP0_DATA0__SSP0_D0 | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_DATA1__SSP0_D1 | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_DATA2__SSP0_D2 | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_DATA3__SSP0_D3 | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_DATA4__SSP0_D4 | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_DATA5__SSP0_D5 | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_DATA6__SSP0_D6 | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_DATA7__SSP0_D7 | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_CMD__SSP0_CMD | MUX_CONFIG_SSP0,
+       MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT |
+               (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL),
+       MX28_PAD_SSP0_SCK__SSP0_SCK |
+               (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL),
+       MX28_PAD_PWM3__GPIO_3_28 | MUX_CONFIG_SSP0,     /* Power .. FIXME */
+       MX28_PAD_AUART2_CTS__GPIO_3_10, /* WP ... FIXME */
+
+       /* GPMI NAND */
+       MX28_PAD_GPMI_D00__GPMI_D0 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_D01__GPMI_D1 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_D02__GPMI_D2 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_D03__GPMI_D3 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_D04__GPMI_D4 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_D05__GPMI_D5 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_D06__GPMI_D6 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_D07__GPMI_D7 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_CE0N__GPMI_CE0N | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_RDY0__GPMI_READY0 | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_RDN__GPMI_RDN |
+               (MXS_PAD_1V8 | MXS_PAD_8MA | MXS_PAD_PULLUP),
+       MX28_PAD_GPMI_WRN__GPMI_WRN | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_ALE__GPMI_ALE | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_CLE__GPMI_CLE | MUX_CONFIG_GPMI,
+       MX28_PAD_GPMI_RESETN__GPMI_RESETN | MUX_CONFIG_GPMI,
+
+       /* FEC Ethernet */
+       MX28_PAD_ENET0_MDC__ENET0_MDC | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_MDIO__ENET0_MDIO | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_RX_EN__ENET0_RX_EN | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_TX_EN__ENET0_TX_EN | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_RXD0__ENET0_RXD0 | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_RXD1__ENET0_RXD1 | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_TXD0__ENET0_TXD0 | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_TXD1__ENET0_TXD1 | MUX_CONFIG_ENET,
+       MX28_PAD_ENET_CLK__CLKCTRL_ENET | MUX_CONFIG_ENET,
+
+       MX28_PAD_ENET0_COL__ENET1_TX_EN | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_CRS__ENET1_RX_EN | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_RXD2__ENET1_RXD0 | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_RXD3__ENET1_RXD1 | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_TXD2__ENET1_TXD0 | MUX_CONFIG_ENET,
+       MX28_PAD_ENET0_TXD3__ENET1_TXD1 | MUX_CONFIG_ENET,
+
+       /* I2C */
+       MX28_PAD_I2C0_SCL__I2C0_SCL,
+       MX28_PAD_I2C0_SDA__I2C0_SDA,
+
+       /* EMI */
+       MX28_PAD_EMI_D00__EMI_DATA0 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D01__EMI_DATA1 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D02__EMI_DATA2 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D03__EMI_DATA3 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D04__EMI_DATA4 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D05__EMI_DATA5 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D06__EMI_DATA6 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D07__EMI_DATA7 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D08__EMI_DATA8 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D09__EMI_DATA9 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D10__EMI_DATA10 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D11__EMI_DATA11 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D12__EMI_DATA12 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D13__EMI_DATA13 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D14__EMI_DATA14 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_D15__EMI_DATA15 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_ODT0__EMI_ODT0 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_ODT1__EMI_ODT1 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN | MUX_CONFIG_EMI,
+
+       MX28_PAD_EMI_A00__EMI_ADDR0 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A01__EMI_ADDR1 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A02__EMI_ADDR2 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A03__EMI_ADDR3 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A04__EMI_ADDR4 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A05__EMI_ADDR5 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A06__EMI_ADDR6 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A07__EMI_ADDR7 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A08__EMI_ADDR8 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A09__EMI_ADDR9 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A10__EMI_ADDR10 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A11__EMI_ADDR11 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A12__EMI_ADDR12 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A13__EMI_ADDR13 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_A14__EMI_ADDR14 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_BA2__EMI_BA2 | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
+       MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
+
+       /* SPI2 (for flash) */
+       MX28_PAD_SSP2_SCK__SSP2_SCK | MUX_CONFIG_SSP2,
+       MX28_PAD_SSP2_MOSI__SSP2_CMD | MUX_CONFIG_SSP2,
+       MX28_PAD_SSP2_MISO__SSP2_D0 | MUX_CONFIG_SSP2,
+       MX28_PAD_SSP2_SS0__SSP2_D3 |
+               (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP),
+};
+
+void board_init_ll(void)
+{
+       mxs_iomux_setup_multiple_pads(iomux_setup, ARRAY_SIZE(iomux_setup));
+       mx28_power_init();
+       mx28_mem_init();
+       mx28_power_wait_pswitch();
+}
+
+/* Support aparatus */
+inline void board_init_f(unsigned long bootflag)
+{
+       for (;;)
+               ;
+}
+
+inline void board_init_r(gd_t *id, ulong dest_addr)
+{
+       for (;;)
+               ;
+}
+
+inline int printf(const char *fmt, ...)
+{
+       return 0;
+}
+
+inline void __coloured_LED_init(void) {}
+inline void __red_LED_on(void) {}
+void coloured_LED_init(void)
+       __attribute__((weak, alias("__coloured_LED_init")));
+void red_LED_on(void)
+       __attribute__((weak, alias("__red_LED_on")));
+void hang(void) __attribute__ ((noreturn));
+void hang(void)
+{
+       for (;;)
+               ;
+}
diff --git a/board/denx/m28evk/power_init.c b/board/denx/m28evk/power_init.c
new file mode 100644 (file)
index 0000000..27322b4
--- /dev/null
@@ -0,0 +1,913 @@
+/*
+ * Freescale i.MX28 Boot PMIC init
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+
+#include "m28_init.h"
+
+void mx28_power_clock2xtal(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       /* Set XTAL as CPU reference clock */
+       writel(CLKCTRL_CLKSEQ_BYPASS_CPU,
+               &clkctrl_regs->hw_clkctrl_clkseq_set);
+}
+
+void mx28_power_clock2pll(void)
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       writel(CLKCTRL_PLL0CTRL0_POWER,
+               &clkctrl_regs->hw_clkctrl_pll0ctrl0_set);
+       early_delay(100);
+       writel(CLKCTRL_CLKSEQ_BYPASS_CPU,
+               &clkctrl_regs->hw_clkctrl_clkseq_clr);
+}
+
+void mx28_power_clear_auto_restart(void)
+{
+       struct mx28_rtc_regs *rtc_regs =
+               (struct mx28_rtc_regs *)MXS_RTC_BASE;
+
+       writel(RTC_CTRL_SFTRST, &rtc_regs->hw_rtc_ctrl_clr);
+       while (readl(&rtc_regs->hw_rtc_ctrl) & RTC_CTRL_SFTRST)
+               ;
+
+       writel(RTC_CTRL_CLKGATE, &rtc_regs->hw_rtc_ctrl_clr);
+       while (readl(&rtc_regs->hw_rtc_ctrl) & RTC_CTRL_CLKGATE)
+               ;
+
+       /*
+        * Due to the hardware design bug of mx28 EVK-A
+        * we need to set the AUTO_RESTART bit.
+        */
+       if (readl(&rtc_regs->hw_rtc_persistent0) & RTC_PERSISTENT0_AUTO_RESTART)
+               return;
+
+       while (readl(&rtc_regs->hw_rtc_stat) & RTC_STAT_NEW_REGS_MASK)
+               ;
+
+       setbits_le32(&rtc_regs->hw_rtc_persistent0,
+                       RTC_PERSISTENT0_AUTO_RESTART);
+       writel(RTC_CTRL_FORCE_UPDATE, &rtc_regs->hw_rtc_ctrl_set);
+       writel(RTC_CTRL_FORCE_UPDATE, &rtc_regs->hw_rtc_ctrl_clr);
+       while (readl(&rtc_regs->hw_rtc_stat) & RTC_STAT_NEW_REGS_MASK)
+               ;
+       while (readl(&rtc_regs->hw_rtc_stat) & RTC_STAT_STALE_REGS_MASK)
+               ;
+}
+
+void mx28_power_set_linreg(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       /* Set linear regulator 25mV below switching converter */
+       clrsetbits_le32(&power_regs->hw_power_vdddctrl,
+                       POWER_VDDDCTRL_LINREG_OFFSET_MASK,
+                       POWER_VDDDCTRL_LINREG_OFFSET_1STEPS_BELOW);
+
+       clrsetbits_le32(&power_regs->hw_power_vddactrl,
+                       POWER_VDDACTRL_LINREG_OFFSET_MASK,
+                       POWER_VDDACTRL_LINREG_OFFSET_1STEPS_BELOW);
+
+       clrsetbits_le32(&power_regs->hw_power_vddioctrl,
+                       POWER_VDDIOCTRL_LINREG_OFFSET_MASK,
+                       POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_BELOW);
+}
+
+void mx28_power_setup_5v_detect(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       /* Start 5V detection */
+       clrsetbits_le32(&power_regs->hw_power_5vctrl,
+                       POWER_5VCTRL_VBUSVALID_TRSH_MASK,
+                       POWER_5VCTRL_VBUSVALID_TRSH_4V4 |
+                       POWER_5VCTRL_PWRUP_VBUS_CMPS);
+}
+
+void mx28_src_power_init(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       /* Improve efficieny and reduce transient ripple */
+       writel(POWER_LOOPCTRL_TOGGLE_DIF | POWER_LOOPCTRL_EN_CM_HYST |
+               POWER_LOOPCTRL_EN_DF_HYST, &power_regs->hw_power_loopctrl_set);
+
+       clrsetbits_le32(&power_regs->hw_power_dclimits,
+                       POWER_DCLIMITS_POSLIMIT_BUCK_MASK,
+                       0x30 << POWER_DCLIMITS_POSLIMIT_BUCK_OFFSET);
+
+       setbits_le32(&power_regs->hw_power_battmonitor,
+                       POWER_BATTMONITOR_EN_BATADJ);
+
+       /* Increase the RCSCALE level for quick DCDC response to dynamic load */
+       clrsetbits_le32(&power_regs->hw_power_loopctrl,
+                       POWER_LOOPCTRL_EN_RCSCALE_MASK,
+                       POWER_LOOPCTRL_RCSCALE_THRESH |
+                       POWER_LOOPCTRL_EN_RCSCALE_8X);
+
+       clrsetbits_le32(&power_regs->hw_power_minpwr,
+                       POWER_MINPWR_HALFFETS, POWER_MINPWR_DOUBLE_FETS);
+
+       /* 5V to battery handoff ... FIXME */
+       setbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_DCDC_XFER);
+       early_delay(30);
+       clrbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_DCDC_XFER);
+}
+
+void mx28_power_init_4p2_params(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       /* Setup 4P2 parameters */
+       clrsetbits_le32(&power_regs->hw_power_dcdc4p2,
+               POWER_DCDC4P2_CMPTRIP_MASK | POWER_DCDC4P2_TRG_MASK,
+               POWER_DCDC4P2_TRG_4V2 | (31 << POWER_DCDC4P2_CMPTRIP_OFFSET));
+
+       clrsetbits_le32(&power_regs->hw_power_5vctrl,
+               POWER_5VCTRL_HEADROOM_ADJ_MASK,
+               0x4 << POWER_5VCTRL_HEADROOM_ADJ_OFFSET);
+
+       clrsetbits_le32(&power_regs->hw_power_dcdc4p2,
+               POWER_DCDC4P2_DROPOUT_CTRL_MASK,
+               POWER_DCDC4P2_DROPOUT_CTRL_100MV |
+               POWER_DCDC4P2_DROPOUT_CTRL_SRC_SEL);
+
+       clrsetbits_le32(&power_regs->hw_power_5vctrl,
+               POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
+               0x3f << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
+}
+
+void mx28_enable_4p2_dcdc_input(int xfer)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t tmp, vbus_thresh, vbus_5vdetect, pwd_bo;
+       uint32_t prev_5v_brnout, prev_5v_droop;
+
+       prev_5v_brnout = readl(&power_regs->hw_power_5vctrl) &
+                               POWER_5VCTRL_PWDN_5VBRNOUT;
+       prev_5v_droop = readl(&power_regs->hw_power_ctrl) &
+                               POWER_CTRL_ENIRQ_VDD5V_DROOP;
+
+       clrbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_PWDN_5VBRNOUT);
+       writel(POWER_RESET_UNLOCK_KEY | POWER_RESET_PWD_OFF,
+               &power_regs->hw_power_reset);
+
+       clrbits_le32(&power_regs->hw_power_ctrl, POWER_CTRL_ENIRQ_VDD5V_DROOP);
+
+       if (xfer && (readl(&power_regs->hw_power_5vctrl) &
+                       POWER_5VCTRL_ENABLE_DCDC)) {
+               return;
+       }
+
+       /*
+        * Recording orignal values that will be modified temporarlily
+        * to handle a chip bug. See chip errata for CQ ENGR00115837
+        */
+       tmp = readl(&power_regs->hw_power_5vctrl);
+       vbus_thresh = tmp & POWER_5VCTRL_VBUSVALID_TRSH_MASK;
+       vbus_5vdetect = tmp & POWER_5VCTRL_VBUSVALID_5VDETECT;
+
+       pwd_bo = readl(&power_regs->hw_power_minpwr) & POWER_MINPWR_PWD_BO;
+
+       /*
+        * Disable mechanisms that get erroneously tripped by when setting
+        * the DCDC4P2 EN_DCDC
+        */
+       clrbits_le32(&power_regs->hw_power_5vctrl,
+               POWER_5VCTRL_VBUSVALID_5VDETECT |
+               POWER_5VCTRL_VBUSVALID_TRSH_MASK);
+
+       writel(POWER_MINPWR_PWD_BO, &power_regs->hw_power_minpwr_set);
+
+       if (xfer) {
+               setbits_le32(&power_regs->hw_power_5vctrl,
+                               POWER_5VCTRL_DCDC_XFER);
+               early_delay(20);
+               clrbits_le32(&power_regs->hw_power_5vctrl,
+                               POWER_5VCTRL_DCDC_XFER);
+
+               setbits_le32(&power_regs->hw_power_5vctrl,
+                               POWER_5VCTRL_ENABLE_DCDC);
+       } else {
+               setbits_le32(&power_regs->hw_power_dcdc4p2,
+                               POWER_DCDC4P2_ENABLE_DCDC);
+       }
+
+       early_delay(25);
+
+       clrsetbits_le32(&power_regs->hw_power_5vctrl,
+                       POWER_5VCTRL_VBUSVALID_TRSH_MASK, vbus_thresh);
+
+       if (vbus_5vdetect)
+               writel(vbus_5vdetect, &power_regs->hw_power_5vctrl_set);
+
+       if (!pwd_bo)
+               clrbits_le32(&power_regs->hw_power_minpwr, POWER_MINPWR_PWD_BO);
+
+       while (readl(&power_regs->hw_power_ctrl) & POWER_CTRL_VBUS_VALID_IRQ)
+               clrbits_le32(&power_regs->hw_power_ctrl,
+                               POWER_CTRL_VBUS_VALID_IRQ);
+
+       if (prev_5v_brnout) {
+               writel(POWER_5VCTRL_PWDN_5VBRNOUT,
+                       &power_regs->hw_power_5vctrl_set);
+               writel(POWER_RESET_UNLOCK_KEY,
+                       &power_regs->hw_power_reset);
+       } else {
+               writel(POWER_5VCTRL_PWDN_5VBRNOUT,
+                       &power_regs->hw_power_5vctrl_clr);
+               writel(POWER_RESET_UNLOCK_KEY | POWER_RESET_PWD_OFF,
+                       &power_regs->hw_power_reset);
+       }
+
+       while (readl(&power_regs->hw_power_ctrl) & POWER_CTRL_VDD5V_DROOP_IRQ)
+               clrbits_le32(&power_regs->hw_power_ctrl,
+                               POWER_CTRL_VDD5V_DROOP_IRQ);
+
+       if (prev_5v_droop)
+               clrbits_le32(&power_regs->hw_power_ctrl,
+                               POWER_CTRL_ENIRQ_VDD5V_DROOP);
+       else
+               setbits_le32(&power_regs->hw_power_ctrl,
+                               POWER_CTRL_ENIRQ_VDD5V_DROOP);
+}
+
+void mx28_power_init_4p2_regulator(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t tmp, tmp2;
+
+       setbits_le32(&power_regs->hw_power_dcdc4p2, POWER_DCDC4P2_ENABLE_4P2);
+
+       writel(POWER_CHARGE_ENABLE_LOAD, &power_regs->hw_power_charge_set);
+
+       writel(POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
+               &power_regs->hw_power_5vctrl_clr);
+       clrbits_le32(&power_regs->hw_power_dcdc4p2, POWER_DCDC4P2_TRG_MASK);
+
+       /* Power up the 4p2 rail and logic/control */
+       writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
+               &power_regs->hw_power_5vctrl_clr);
+
+       /*
+        * Start charging up the 4p2 capacitor. We ramp of this charge
+        * gradually to avoid large inrush current from the 5V cable which can
+        * cause transients/problems
+        */
+       mx28_enable_4p2_dcdc_input(0);
+
+       if (readl(&power_regs->hw_power_ctrl) & POWER_CTRL_VBUS_VALID_IRQ) {
+               /*
+                * If we arrived here, we were unable to recover from mx23 chip
+                * errata 5837. 4P2 is disabled and sufficient battery power is
+                * not present. Exiting to not enable DCDC power during 5V
+                * connected state.
+                */
+               clrbits_le32(&power_regs->hw_power_dcdc4p2,
+                       POWER_DCDC4P2_ENABLE_DCDC);
+               writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
+                       &power_regs->hw_power_5vctrl_set);
+               hang();
+       }
+
+       /*
+        * Here we set the 4p2 brownout level to something very close to 4.2V.
+        * We then check the brownout status. If the brownout status is false,
+        * the voltage is already close to the target voltage of 4.2V so we
+        * can go ahead and set the 4P2 current limit to our max target limit.
+        * If the brownout status is true, we need to ramp us the current limit
+        * so that we don't cause large inrush current issues. We step up the
+        * current limit until the brownout status is false or until we've
+        * reached our maximum defined 4p2 current limit.
+        */
+       clrsetbits_le32(&power_regs->hw_power_dcdc4p2,
+                       POWER_DCDC4P2_BO_MASK,
+                       22 << POWER_DCDC4P2_BO_OFFSET); /* 4.15V */
+
+       if (!(readl(&power_regs->hw_power_sts) & POWER_STS_DCDC_4P2_BO)) {
+               setbits_le32(&power_regs->hw_power_5vctrl,
+                       0x3f << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
+       } else {
+               tmp = (readl(&power_regs->hw_power_5vctrl) &
+                       POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK) >>
+                       POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET;
+               while (tmp < 0x3f) {
+                       if (!(readl(&power_regs->hw_power_sts) &
+                                       POWER_STS_DCDC_4P2_BO)) {
+                               tmp = readl(&power_regs->hw_power_5vctrl);
+                               tmp |= POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK;
+                               early_delay(100);
+                               writel(tmp, &power_regs->hw_power_5vctrl);
+                               break;
+                       } else {
+                               tmp++;
+                               tmp2 = readl(&power_regs->hw_power_5vctrl);
+                               tmp2 &= ~POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK;
+                               tmp2 |= tmp <<
+                                       POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET;
+                               writel(tmp2, &power_regs->hw_power_5vctrl);
+                               early_delay(100);
+                       }
+               }
+       }
+
+       clrbits_le32(&power_regs->hw_power_dcdc4p2, POWER_DCDC4P2_BO_MASK);
+       writel(POWER_CTRL_DCDC4P2_BO_IRQ, &power_regs->hw_power_ctrl_clr);
+}
+
+void mx28_power_init_dcdc_4p2_source(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       if (!(readl(&power_regs->hw_power_dcdc4p2) &
+               POWER_DCDC4P2_ENABLE_DCDC)) {
+               hang();
+       }
+
+       mx28_enable_4p2_dcdc_input(1);
+
+       if (readl(&power_regs->hw_power_ctrl) & POWER_CTRL_VBUS_VALID_IRQ) {
+               clrbits_le32(&power_regs->hw_power_dcdc4p2,
+                       POWER_DCDC4P2_ENABLE_DCDC);
+               writel(POWER_5VCTRL_ENABLE_DCDC,
+                       &power_regs->hw_power_5vctrl_clr);
+               writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
+                       &power_regs->hw_power_5vctrl_set);
+       }
+}
+
+void mx28_power_enable_4p2(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t vdddctrl, vddactrl, vddioctrl;
+       uint32_t tmp;
+
+       vdddctrl = readl(&power_regs->hw_power_vdddctrl);
+       vddactrl = readl(&power_regs->hw_power_vddactrl);
+       vddioctrl = readl(&power_regs->hw_power_vddioctrl);
+
+       setbits_le32(&power_regs->hw_power_vdddctrl,
+               POWER_VDDDCTRL_DISABLE_FET | POWER_VDDDCTRL_ENABLE_LINREG |
+               POWER_VDDDCTRL_PWDN_BRNOUT);
+
+       setbits_le32(&power_regs->hw_power_vddactrl,
+               POWER_VDDACTRL_DISABLE_FET | POWER_VDDACTRL_ENABLE_LINREG |
+               POWER_VDDACTRL_PWDN_BRNOUT);
+
+       setbits_le32(&power_regs->hw_power_vddioctrl,
+               POWER_VDDIOCTRL_DISABLE_FET | POWER_VDDIOCTRL_PWDN_BRNOUT);
+
+       mx28_power_init_4p2_params();
+       mx28_power_init_4p2_regulator();
+
+       /* Shutdown battery (none present) */
+       clrbits_le32(&power_regs->hw_power_dcdc4p2, POWER_DCDC4P2_BO_MASK);
+       writel(POWER_CTRL_DCDC4P2_BO_IRQ, &power_regs->hw_power_ctrl_clr);
+       writel(POWER_CTRL_ENIRQ_DCDC4P2_BO, &power_regs->hw_power_ctrl_clr);
+
+       mx28_power_init_dcdc_4p2_source();
+
+       writel(vdddctrl, &power_regs->hw_power_vdddctrl);
+       early_delay(20);
+       writel(vddactrl, &power_regs->hw_power_vddactrl);
+       early_delay(20);
+       writel(vddioctrl, &power_regs->hw_power_vddioctrl);
+
+       /*
+        * Check if FET is enabled on either powerout and if so,
+        * disable load.
+        */
+       tmp = 0;
+       tmp |= !(readl(&power_regs->hw_power_vdddctrl) &
+                       POWER_VDDDCTRL_DISABLE_FET);
+       tmp |= !(readl(&power_regs->hw_power_vddactrl) &
+                       POWER_VDDACTRL_DISABLE_FET);
+       tmp |= !(readl(&power_regs->hw_power_vddioctrl) &
+                       POWER_VDDIOCTRL_DISABLE_FET);
+       if (tmp)
+               writel(POWER_CHARGE_ENABLE_LOAD,
+                       &power_regs->hw_power_charge_clr);
+}
+
+void mx28_boot_valid_5v(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       /*
+        * Use VBUSVALID level instead of VDD5V_GT_VDDIO level to trigger a 5V
+        * disconnect event. FIXME
+        */
+       writel(POWER_5VCTRL_VBUSVALID_5VDETECT,
+               &power_regs->hw_power_5vctrl_set);
+
+       /* Configure polarity to check for 5V disconnection. */
+       writel(POWER_CTRL_POLARITY_VBUSVALID |
+               POWER_CTRL_POLARITY_VDD5V_GT_VDDIO,
+               &power_regs->hw_power_ctrl_clr);
+
+       writel(POWER_CTRL_VBUS_VALID_IRQ | POWER_CTRL_VDD5V_GT_VDDIO_IRQ,
+               &power_regs->hw_power_ctrl_clr);
+
+       mx28_power_enable_4p2();
+}
+
+void mx28_powerdown(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       writel(POWER_RESET_UNLOCK_KEY, &power_regs->hw_power_reset);
+       writel(POWER_RESET_UNLOCK_KEY | POWER_RESET_PWD_OFF,
+               &power_regs->hw_power_reset);
+}
+
+void mx28_handle_5v_conflict(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t tmp;
+
+       setbits_le32(&power_regs->hw_power_vddioctrl,
+                       POWER_VDDIOCTRL_BO_OFFSET_MASK);
+
+       for (;;) {
+               tmp = readl(&power_regs->hw_power_sts);
+
+               if (tmp & POWER_STS_VDDIO_BO) {
+                       mx28_powerdown();
+                       break;
+               }
+
+               if (tmp & POWER_STS_VDD5V_GT_VDDIO) {
+                       mx28_boot_valid_5v();
+                       break;
+               } else {
+                       mx28_powerdown();
+                       break;
+               }
+       }
+}
+
+int mx28_get_batt_volt(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t volt = readl(&power_regs->hw_power_battmonitor);
+       volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
+       volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
+       volt *= 8;
+       return volt;
+}
+
+int mx28_is_batt_ready(void)
+{
+       return (mx28_get_batt_volt() >= 3600);
+}
+
+void mx28_5v_boot(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       /*
+        * NOTE: In original IMX-Bootlets, this also checks for VBUSVALID,
+        * but their implementation always returns 1 so we omit it here.
+        */
+       if (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO) {
+               mx28_boot_valid_5v();
+               return;
+       }
+
+       early_delay(1000);
+       if (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO) {
+               mx28_boot_valid_5v();
+               return;
+       }
+
+       mx28_handle_5v_conflict();
+}
+
+void mx28_init_batt_bo(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       /* Brownout at 3V */
+       clrsetbits_le32(&power_regs->hw_power_battmonitor,
+               POWER_BATTMONITOR_BRWNOUT_LVL_MASK,
+               15 << POWER_BATTMONITOR_BRWNOUT_LVL_OFFSET);
+
+       writel(POWER_CTRL_BATT_BO_IRQ, &power_regs->hw_power_ctrl_clr);
+       writel(POWER_CTRL_ENIRQ_BATT_BO, &power_regs->hw_power_ctrl_clr);
+}
+
+void mx28_switch_vddd_to_dcdc_source(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       clrsetbits_le32(&power_regs->hw_power_vdddctrl,
+               POWER_VDDDCTRL_LINREG_OFFSET_MASK,
+               POWER_VDDDCTRL_LINREG_OFFSET_1STEPS_BELOW);
+
+       clrbits_le32(&power_regs->hw_power_vdddctrl,
+               POWER_VDDDCTRL_DISABLE_FET | POWER_VDDDCTRL_ENABLE_LINREG |
+               POWER_VDDDCTRL_DISABLE_STEPPING);
+}
+
+int mx28_is_batt_good(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t volt;
+
+       volt = readl(&power_regs->hw_power_battmonitor);
+       volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
+       volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
+       volt *= 8;
+
+       if ((volt >= 2400) && (volt <= 4300))
+               return 1;
+
+       clrsetbits_le32(&power_regs->hw_power_5vctrl,
+               POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
+               0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
+       writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
+               &power_regs->hw_power_5vctrl_clr);
+
+       clrsetbits_le32(&power_regs->hw_power_charge,
+               POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
+               POWER_CHARGE_STOP_ILIMIT_10MA | 0x3);
+
+       writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr);
+       writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
+               &power_regs->hw_power_5vctrl_clr);
+
+       early_delay(500000);
+
+       volt = readl(&power_regs->hw_power_battmonitor);
+       volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
+       volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
+       volt *= 8;
+
+       if (volt >= 3500)
+               return 0;
+
+       if (volt >= 2400)
+               return 1;
+
+       writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
+               &power_regs->hw_power_charge_clr);
+       writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set);
+
+       return 0;
+}
+
+void mx28_power_configure_power_source(void)
+{
+       mx28_src_power_init();
+
+       mx28_5v_boot();
+       mx28_power_clock2pll();
+
+       mx28_init_batt_bo();
+       mx28_switch_vddd_to_dcdc_source();
+}
+
+void mx28_enable_output_rail_protection(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       writel(POWER_CTRL_VDDD_BO_IRQ | POWER_CTRL_VDDA_BO_IRQ |
+               POWER_CTRL_VDDIO_BO_IRQ, &power_regs->hw_power_ctrl_clr);
+
+       setbits_le32(&power_regs->hw_power_vdddctrl,
+                       POWER_VDDDCTRL_PWDN_BRNOUT);
+
+       setbits_le32(&power_regs->hw_power_vddactrl,
+                       POWER_VDDACTRL_PWDN_BRNOUT);
+
+       setbits_le32(&power_regs->hw_power_vddioctrl,
+                       POWER_VDDIOCTRL_PWDN_BRNOUT);
+}
+
+int mx28_get_vddio_power_source_off(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t tmp;
+
+       if (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO) {
+               tmp = readl(&power_regs->hw_power_vddioctrl);
+               if (tmp & POWER_VDDIOCTRL_DISABLE_FET) {
+                       if ((tmp & POWER_VDDIOCTRL_LINREG_OFFSET_MASK) ==
+                               POWER_VDDDCTRL_LINREG_OFFSET_0STEPS) {
+                               return 1;
+                       }
+               }
+
+               if (!(readl(&power_regs->hw_power_5vctrl) &
+                       POWER_5VCTRL_ENABLE_DCDC)) {
+                       if ((tmp & POWER_VDDIOCTRL_LINREG_OFFSET_MASK) ==
+                               POWER_VDDDCTRL_LINREG_OFFSET_0STEPS) {
+                               return 1;
+                       }
+               }
+       }
+
+       return 0;
+
+}
+
+int mx28_get_vddd_power_source_off(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t tmp;
+
+       tmp = readl(&power_regs->hw_power_vdddctrl);
+       if (tmp & POWER_VDDDCTRL_DISABLE_FET) {
+               if ((tmp & POWER_VDDDCTRL_LINREG_OFFSET_MASK) ==
+                       POWER_VDDDCTRL_LINREG_OFFSET_0STEPS) {
+                       return 1;
+               }
+       }
+
+       if (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO) {
+               if (!(readl(&power_regs->hw_power_5vctrl) &
+                       POWER_5VCTRL_ENABLE_DCDC)) {
+                       return 1;
+               }
+       }
+
+       if (!(tmp & POWER_VDDDCTRL_ENABLE_LINREG)) {
+               if ((tmp & POWER_VDDDCTRL_LINREG_OFFSET_MASK) ==
+                       POWER_VDDDCTRL_LINREG_OFFSET_1STEPS_BELOW) {
+                       return 1;
+               }
+       }
+
+       return 0;
+}
+
+void mx28_power_set_vddio(uint32_t new_target, uint32_t new_brownout)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t cur_target, diff, bo_int = 0;
+       uint32_t powered_by_linreg = 0;
+
+       new_brownout = new_target - new_brownout;
+
+       cur_target = readl(&power_regs->hw_power_vddioctrl);
+       cur_target &= POWER_VDDIOCTRL_TRG_MASK;
+       cur_target *= 50;       /* 50 mV step*/
+       cur_target += 2800;     /* 2800 mV lowest */
+
+       powered_by_linreg = mx28_get_vddio_power_source_off();
+       if (new_target > cur_target) {
+
+               if (powered_by_linreg) {
+                       bo_int = readl(&power_regs->hw_power_vddioctrl);
+                       clrbits_le32(&power_regs->hw_power_vddioctrl,
+                                       POWER_CTRL_ENIRQ_VDDIO_BO);
+               }
+
+               setbits_le32(&power_regs->hw_power_vddioctrl,
+                               POWER_VDDIOCTRL_BO_OFFSET_MASK);
+               do {
+                       if (new_target - cur_target > 100)
+                               diff = cur_target + 100;
+                       else
+                               diff = new_target;
+
+                       diff -= 2800;
+                       diff /= 50;
+
+                       clrsetbits_le32(&power_regs->hw_power_vddioctrl,
+                               POWER_VDDIOCTRL_TRG_MASK, diff);
+
+                       if (powered_by_linreg)
+                               early_delay(1500);
+                       else {
+                               while (!(readl(&power_regs->hw_power_sts) &
+                                       POWER_STS_DC_OK))
+                                       ;
+
+                       }
+
+                       cur_target = readl(&power_regs->hw_power_vddioctrl);
+                       cur_target &= POWER_VDDIOCTRL_TRG_MASK;
+                       cur_target *= 50;       /* 50 mV step*/
+                       cur_target += 2800;     /* 2800 mV lowest */
+               } while (new_target > cur_target);
+
+               if (powered_by_linreg) {
+                       writel(POWER_CTRL_VDDIO_BO_IRQ,
+                               &power_regs->hw_power_ctrl_clr);
+                       if (bo_int & POWER_CTRL_ENIRQ_VDDIO_BO)
+                               setbits_le32(&power_regs->hw_power_vddioctrl,
+                                               POWER_CTRL_ENIRQ_VDDIO_BO);
+               }
+       } else {
+               do {
+                       if (cur_target - new_target > 100)
+                               diff = cur_target - 100;
+                       else
+                               diff = new_target;
+
+                       diff -= 2800;
+                       diff /= 50;
+
+                       clrsetbits_le32(&power_regs->hw_power_vddioctrl,
+                               POWER_VDDIOCTRL_TRG_MASK, diff);
+
+                       if (powered_by_linreg)
+                               early_delay(1500);
+                       else {
+                               while (!(readl(&power_regs->hw_power_sts) &
+                                       POWER_STS_DC_OK))
+                                       ;
+
+                       }
+
+                       cur_target = readl(&power_regs->hw_power_vddioctrl);
+                       cur_target &= POWER_VDDIOCTRL_TRG_MASK;
+                       cur_target *= 50;       /* 50 mV step*/
+                       cur_target += 2800;     /* 2800 mV lowest */
+               } while (new_target < cur_target);
+       }
+
+       clrsetbits_le32(&power_regs->hw_power_vddioctrl,
+                       POWER_VDDDCTRL_BO_OFFSET_MASK,
+                       new_brownout << POWER_VDDDCTRL_BO_OFFSET_OFFSET);
+}
+
+void mx28_power_set_vddd(uint32_t new_target, uint32_t new_brownout)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+       uint32_t cur_target, diff, bo_int = 0;
+       uint32_t powered_by_linreg = 0;
+
+       new_brownout = new_target - new_brownout;
+
+       cur_target = readl(&power_regs->hw_power_vdddctrl);
+       cur_target &= POWER_VDDDCTRL_TRG_MASK;
+       cur_target *= 25;       /* 25 mV step*/
+       cur_target += 800;      /* 800 mV lowest */
+
+       powered_by_linreg = mx28_get_vddd_power_source_off();
+       if (new_target > cur_target) {
+               if (powered_by_linreg) {
+                       bo_int = readl(&power_regs->hw_power_vdddctrl);
+                       clrbits_le32(&power_regs->hw_power_vdddctrl,
+                                       POWER_CTRL_ENIRQ_VDDD_BO);
+               }
+
+               setbits_le32(&power_regs->hw_power_vdddctrl,
+                               POWER_VDDDCTRL_BO_OFFSET_MASK);
+
+               do {
+                       if (new_target - cur_target > 100)
+                               diff = cur_target + 100;
+                       else
+                               diff = new_target;
+
+                       diff -= 800;
+                       diff /= 25;
+
+                       clrsetbits_le32(&power_regs->hw_power_vdddctrl,
+                               POWER_VDDDCTRL_TRG_MASK, diff);
+
+                       if (powered_by_linreg)
+                               early_delay(1500);
+                       else {
+                               while (!(readl(&power_regs->hw_power_sts) &
+                                       POWER_STS_DC_OK))
+                                       ;
+
+                       }
+
+                       cur_target = readl(&power_regs->hw_power_vdddctrl);
+                       cur_target &= POWER_VDDDCTRL_TRG_MASK;
+                       cur_target *= 25;       /* 25 mV step*/
+                       cur_target += 800;      /* 800 mV lowest */
+               } while (new_target > cur_target);
+
+               if (powered_by_linreg) {
+                       writel(POWER_CTRL_VDDD_BO_IRQ,
+                               &power_regs->hw_power_ctrl_clr);
+                       if (bo_int & POWER_CTRL_ENIRQ_VDDD_BO)
+                               setbits_le32(&power_regs->hw_power_vdddctrl,
+                                               POWER_CTRL_ENIRQ_VDDD_BO);
+               }
+       } else {
+               do {
+                       if (cur_target - new_target > 100)
+                               diff = cur_target - 100;
+                       else
+                               diff = new_target;
+
+                       diff -= 800;
+                       diff /= 25;
+
+                       clrsetbits_le32(&power_regs->hw_power_vdddctrl,
+                                       POWER_VDDDCTRL_TRG_MASK, diff);
+
+                       if (powered_by_linreg)
+                               early_delay(1500);
+                       else {
+                               while (!(readl(&power_regs->hw_power_sts) &
+                                       POWER_STS_DC_OK))
+                                       ;
+
+                       }
+
+                       cur_target = readl(&power_regs->hw_power_vdddctrl);
+                       cur_target &= POWER_VDDDCTRL_TRG_MASK;
+                       cur_target *= 25;       /* 25 mV step*/
+                       cur_target += 800;      /* 800 mV lowest */
+               } while (new_target < cur_target);
+       }
+
+       clrsetbits_le32(&power_regs->hw_power_vdddctrl,
+                       POWER_VDDDCTRL_BO_OFFSET_MASK,
+                       new_brownout << POWER_VDDDCTRL_BO_OFFSET_OFFSET);
+}
+
+void mx28_power_init(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       mx28_power_clock2xtal();
+       mx28_power_clear_auto_restart();
+       mx28_power_set_linreg();
+       mx28_power_setup_5v_detect();
+       mx28_power_configure_power_source();
+       mx28_enable_output_rail_protection();
+
+       mx28_power_set_vddio(3300, 3150);
+
+       mx28_power_set_vddd(1350, 1200);
+
+       writel(POWER_CTRL_VDDD_BO_IRQ | POWER_CTRL_VDDA_BO_IRQ |
+               POWER_CTRL_VDDIO_BO_IRQ | POWER_CTRL_VDD5V_DROOP_IRQ |
+               POWER_CTRL_VBUS_VALID_IRQ | POWER_CTRL_BATT_BO_IRQ |
+               POWER_CTRL_DCDC4P2_BO_IRQ, &power_regs->hw_power_ctrl_clr);
+
+       writel(POWER_5VCTRL_PWDN_5VBRNOUT, &power_regs->hw_power_5vctrl_set);
+
+       early_delay(1000);
+}
+
+#ifdef CONFIG_SPL_MX28_PSWITCH_WAIT
+void mx28_power_wait_pswitch(void)
+{
+       struct mx28_power_regs *power_regs =
+               (struct mx28_power_regs *)MXS_POWER_BASE;
+
+       while (!(readl(&power_regs->hw_power_sts) & POWER_STS_PSWITCH_MASK))
+               ;
+}
+#endif
diff --git a/board/denx/m28evk/start.S b/board/denx/m28evk/start.S
new file mode 100644 (file)
index 0000000..94696d6
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ *  armboot - Startup Code for ARM926EJS CPU-core
+ *
+ *  Copyright (c) 2003  Texas Instruments
+ *
+ *  ----- Adapted for OMAP1610 OMAP730 from ARM925t code ------
+ *
+ *  Copyright (c) 2001 Marius Groger <mag@sysgo.de>
+ *  Copyright (c) 2002 Alex Zupke <azu@sysgo.de>
+ *  Copyright (c) 2002 Gary Jennejohn <garyj@denx.de>
+ *  Copyright (c) 2003 Richard Woodruff <r-woodruff2@ti.com>
+ *  Copyright (c) 2003 Kshitij <kshitij@ti.com>
+ *  Copyright (c) 2010 Albert Aribaud <albert.u.boot@aribaud.net>
+ *
+ * Change to support call back into iMX28 bootrom
+ * Copyright (c) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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-offsets.h>
+#include <config.h>
+#include <common.h>
+#include <version.h>
+
+#if defined(CONFIG_OMAP1610)
+#include <./configs/omap1510.h>
+#elif defined(CONFIG_OMAP730)
+#include <./configs/omap730.h>
+#endif
+
+/*
+ *************************************************************************
+ *
+ * Jump vector table as in table 3.1 in [1]
+ *
+ *************************************************************************
+ */
+
+
+.globl _start
+_start:
+       b       reset
+       b       undefined_instruction
+       b       software_interrupt
+       b       prefetch_abort
+       b       data_abort
+       b       not_used
+       b       irq
+       b       fiq
+
+/*
+ * Vector table, located at address 0x20.
+ * This table allows the code running AFTER SPL, the U-Boot, to install it's
+ * interrupt handlers here. The problem is that the U-Boot is loaded into RAM,
+ * including it's interrupt vectoring table and the table at 0x0 is still the
+ * SPLs. So if interrupt happens in U-Boot, the SPLs interrupt vectoring table
+ * is still used.
+ */
+_vt_reset:
+       .word   _reset
+_vt_undefined_instruction:
+       .word   _hang
+_vt_software_interrupt:
+       .word   _hang
+_vt_prefetch_abort:
+       .word   _hang
+_vt_data_abort:
+       .word   _hang
+_vt_not_used:
+       .word   _reset
+_vt_irq:
+       .word   _hang
+_vt_fiq:
+       .word   _hang
+
+reset:
+       ldr     pc, _vt_reset
+undefined_instruction:
+       ldr     pc, _vt_undefined_instruction
+software_interrupt:
+       ldr     pc, _vt_software_interrupt
+prefetch_abort:
+       ldr     pc, _vt_prefetch_abort
+data_abort:
+       ldr     pc, _vt_data_abort
+not_used:
+       ldr     pc, _vt_not_used
+irq:
+       ldr     pc, _vt_irq
+fiq:
+       ldr     pc, _vt_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
+ *
+ *************************************************************************
+ */
+
+.globl _TEXT_BASE
+_TEXT_BASE:
+       .word   CONFIG_SYS_TEXT_BASE
+
+/*
+ * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
+ */
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
+
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
+       .word _end - _start
+
+#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
+
+/* IRQ stack memory (calculated at run-time) + 8 bytes */
+.globl IRQ_STACK_START_IN
+IRQ_STACK_START_IN:
+       .word   0x0badc0de
+
+/*
+ * the actual reset code
+ */
+
+_reset:
+       /*
+        * Store all registers on old stack pointer, this will allow us later to
+        * return to the BootROM and let the BootROM load U-Boot into RAM.
+        */
+       push    {r0-r12,r14}
+
+       /*
+        * 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!
+        */
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
+       bl      cpu_init_crit
+#endif
+
+       bl      board_init_ll
+
+       pop     {r0-r12,r14}
+       bx      lr
+
+/*
+ *************************************************************************
+ *
+ * CPU_init_critical registers
+ *
+ * setup important registers
+ * setup memory timing
+ *
+ *************************************************************************
+ */
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
+cpu_init_crit:
+       /*
+        * flush v4 I/D caches
+        */
+       mov     r0, #0
+       mcr     p15, 0, r0, c7, c7, 0   /* flush v3/v4 cache */
+       mcr     p15, 0, r0, c8, c7, 0   /* flush v4 TLB */
+
+       /*
+        * 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
+
+       mov     pc, lr          /* back to my caller */
+
+       .align  5
+#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
+
+_hang:
+       ldr     sp, _TEXT_BASE                  /* switch to abort stack */
+1:
+       bl      1b                              /* hang and never return */
diff --git a/board/denx/m28evk/u-boot-spl.lds b/board/denx/m28evk/u-boot-spl.lds
new file mode 100644 (file)
index 0000000..e296a92
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * January 2004 - Changed to support H4 device
+ * Copyright (c) 2004-2008 Texas Instruments
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@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   :
+       {
+               board/denx/m28evk/start.o       (.text)
+               *(.text)
+       }
+
+       . = ALIGN(4);
+       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+
+       . = ALIGN(4);
+       .data : {
+               *(.data)
+       }
+
+       . = ALIGN(4);
+       __u_boot_cmd_start = .;
+       .u_boot_cmd : { *(.u_boot_cmd) }
+       __u_boot_cmd_end = .;
+
+       . = ALIGN(4);
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       _end = .;
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               __bss_end__ = .;
+       }
+
+       /DISCARD/ : { *(.bss*) }
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynsym*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.hash*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
+}
diff --git a/board/denx/m28evk/u-boot.bd b/board/denx/m28evk/u-boot.bd
new file mode 100644 (file)
index 0000000..3ce7f92
--- /dev/null
@@ -0,0 +1,14 @@
+sources {
+       u_boot_spl="spl/u-boot-spl.bin";
+       u_boot="u-boot.bin";
+}
+
+section (0) {
+        load u_boot_spl > 0x0000;
+        load ivt (entry = 0x0014) > 0x8000;
+       hab call 0x8000;
+
+        load u_boot > 0x40000100;
+        load ivt (entry = 0x40000100) > 0x8000;
+       hab call 0x8000;
+}
index c4ed82029df72c5089af8ad6d6c9b348a191366a..429fe1b4ff3f6c8886a4f257f88d9e30903c389c 100644 (file)
@@ -223,7 +223,7 @@ void setup_pcat_compatibility()
         *  active low polarity on PIC interrupt pins,
         *  active high polarity on all other irq pins
         */
-       writew(0x0000,&sc520_mmcr->intpinpol);
+       writew(0x0000, &sc520_mmcr->intpinpol);
 
        /*
         * PIT 0 -> IRQ0
@@ -252,7 +252,7 @@ void setup_pcat_compatibility()
 
 void enet_timer_isr(void)
 {
-       static long enet_ticks = 0;
+       static long enet_ticks;
 
        enet_ticks++;
 
@@ -281,9 +281,9 @@ void hw_watchdog_reset(void)
 
 void enet_toggle_run_led(void)
 {
-       unsigned char leds_state= inb(LED_LATCH_ADDRESS);
+       unsigned char leds_state = inb(LED_LATCH_ADDRESS);
        if (leds_state & LED_RUN_BITMASK)
-               outb(leds_state &LED_RUN_BITMASK, LED_LATCH_ADDRESS);
+               outb(leds_state & ~LED_RUN_BITMASK, LED_LATCH_ADDRESS);
        else
                outb(leds_state | LED_RUN_BITMASK, LED_LATCH_ADDRESS);
 }
index 29d13d2518a3f0c209377498bdaaac510027f804..5af4ef7d078daa4c3bd56c5b0b50ec36fe019c8c 100644 (file)
@@ -38,7 +38,7 @@ static void pci_enet_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
                CONFIG_SYS_THIRD_PCI_IRQ,
                CONFIG_SYS_FORTH_PCI_IRQ
        };
-       static int next_irq_index=0;
+       static int next_irq_index;
 
        uchar tmp_pin;
        int pin;
@@ -47,9 +47,8 @@ static void pci_enet_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
        pin = tmp_pin;
 
        pin -= 1; /* PCI config space use 1-based numbering */
-       if (pin == -1) {
+       if (pin == -1)
                return; /* device use no irq */
-       }
 
        /* map device number +  pin to a pin on the sc520 */
        switch (PCI_DEV(dev)) {
@@ -69,19 +68,19 @@ static void pci_enet_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
 
        if (sc520_pci_ints[pin] == -1) {
                /* re-route one interrupt for us */
-               if (next_irq_index > 3) {
+               if (next_irq_index > 3)
                        return;
-               }
-               if (pci_sc520_set_irq(pin, irq_list[next_irq_index])) {
+
+               if (pci_sc520_set_irq(pin, irq_list[next_irq_index]))
                        return;
-               }
+
                next_irq_index++;
        }
 
-       if (-1 != sc520_pci_ints[pin]) {
-       pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE,
+       if (-1 != sc520_pci_ints[pin])
+               pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE,
                                           sc520_pci_ints[pin]);
-       }
+
        printf("fixup_irq: device %d pin %c irq %d\n",
               PCI_DEV(dev), 'A' + pin, sc520_pci_ints[pin]);
 }
index 4241f6e10411dc82326d4e04753833876f40a299..5e3f44c66436e0d277a01ec0b3794ba65029a025 100644 (file)
@@ -30,6 +30,7 @@
 #include "config.h"
 #include "hardware.h"
 #include <asm/arch/sc520.h>
+#include <generated/asm-offsets.h>
 
 .text
 .section .start16, "ax"
@@ -46,12 +47,12 @@ board_init16:
        movw    %ax, %ds
 
        /* Map PAR for Boot Flash (BOOTCS, 512kB @ 0x380000000) */
-       movl    $(SC520_PAR14 - SC520_MMCR_BASE), %edi
+       movl    $GENERATED_SC520_PAR14, %edi
        movl    $CONFIG_SYS_SC520_BOOTCS_PAR, %eax
        movl    %eax, (%di)
 
        /* Map PAR for LED, Hex Switches (GPCS6, 20 Bytes @ 0x1000) */
-       movl    $(SC520_PAR15 - SC520_MMCR_BASE), %edi
+       movl    $GENERATED_SC520_PAR15, %edi
        movl    $CONFIG_SYS_SC520_LLIO_PAR, %eax
        movl    %eax, (%di)
 
index b78bf6ccba17d05cec33b6a4a3f278a842965965..3d2cc1a7f137f6d70fee78d1b38bf20ee1ad5c36 100644 (file)
@@ -226,7 +226,7 @@ static void power_init(void)
 
        /* Set core voltage to 1.1V */
        pmic_reg_read(p, REG_SW_0, &val);
-       val = (val & ~SWx_VOLT_MASK) | SWx_1_100V;
+       val = (val & ~SWx_VOLT_MASK) | SWx_1_200V;
        pmic_reg_write(p, REG_SW_0, val);
 
        /* Setup VCC (SW2) to 1.25 */
@@ -260,18 +260,23 @@ static void power_init(void)
                (SWMODE_AUTO_AUTO << SWMODE4_SHIFT);
        pmic_reg_write(p, REG_SW_5, val);
 
-       /* Set VDIG to 1.65V, VGEN3 to 1.8V, VCAM to 2.6V */
+       /* Set VDIG to 1.8V, VGEN3 to 1.8V, VCAM to 2.6V */
        pmic_reg_read(p, REG_SETTING_0, &val);
        val &= ~(VCAM_MASK | VGEN3_MASK | VDIG_MASK);
-       val |= VDIG_1_65 | VGEN3_1_8 | VCAM_2_6;
+       val |= VDIG_1_8 | VGEN3_1_8 | VCAM_2_6;
        pmic_reg_write(p, REG_SETTING_0, val);
 
        /* Set VVIDEO to 2.775V, VAUDIO to 3V, VSD to 3.15V */
        pmic_reg_read(p, REG_SETTING_1, &val);
        val &= ~(VVIDEO_MASK | VSD_MASK | VAUDIO_MASK);
-       val |= VSD_3_15 | VAUDIO_3_0 | VVIDEO_2_775;
+       val |= VSD_3_15 | VAUDIO_3_0 | VVIDEO_2_775 | VGEN1_1_2 | VGEN2_3_15;
        pmic_reg_write(p, REG_SETTING_1, val);
 
+       /* Enable VGEN1, VGEN2, VDIG, VPLL */
+       pmic_reg_read(p, REG_MODE_0, &val);
+       val |= VGEN1EN | VDIGEN | VGEN2EN | VPLLEN;
+       pmic_reg_write(p, REG_MODE_0, val);
+
        /* Configure VGEN3 and VCAM regulators to use external PNP */
        val = VGEN3CONFIG | VCAMCONFIG;
        pmic_reg_write(p, REG_MODE_1, val);
@@ -279,7 +284,7 @@ static void power_init(void)
 
        /* Enable VGEN3, VCAM, VAUDIO, VVIDEO, VSD regulators */
        val = VGEN3EN | VGEN3CONFIG | VCAMEN | VCAMCONFIG |
-               VVIDEOEN | VAUDIOEN  | VSDEN;
+               VVIDEOEN | VAUDIOEN | VSDEN;
        pmic_reg_write(p, REG_MODE_1, val);
 
        pmic_reg_read(p, REG_POWER_CTL2, &val);
diff --git a/board/egnite/ethernut5/Makefile b/board/egnite/ethernut5/Makefile
new file mode 100644 (file)
index 0000000..8dc85d2
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2003-2008
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# (C) Copyright 2010
+# egnite GmbH
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).o
+
+COBJS-y        += $(BOARD).o
+COBJS-y        += $(BOARD)_pwrman.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/egnite/ethernut5/ethernut5.c b/board/egnite/ethernut5/ethernut5.c
new file mode 100644 (file)
index 0000000..e42e91e
--- /dev/null
@@ -0,0 +1,270 @@
+/*
+ * (C) Copyright 2011
+ * egnite GmbH <info@egnite.de>
+ *
+ * (C) Copyright 2010
+ * Ole Reinhardt <ole.reinhardt@thermotemp.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
+ */
+
+/*
+ * Ethernut 5 general board support
+ *
+ * Ethernut is an open source hardware and software project for
+ * embedded Ethernet devices. Hardware layouts and CAD files are
+ * freely available under BSD-like license.
+ *
+ * Ethernut 5 is the first member of the Ethernut board family
+ * with U-Boot and Linux support. This implementation is based
+ * on the original work done by Ole Reinhardt, but heavily modified
+ * to support additional features and the latest board revision 5.0F.
+ *
+ * Main board components are by default:
+ *
+ * Atmel AT91SAM9XE512 CPU with 512 kBytes NOR Flash
+ * 2 x 64 MBytes Micron MT48LC32M16A2P SDRAM
+ * 512 MBytes Micron MT29F4G08ABADA NAND Flash
+ * 4 MBytes Atmel AT45DB321D DataFlash
+ * SMSC LAN8710 Ethernet PHY
+ * Atmel ATmega168 MCU used for power management
+ * Linear Technology LTC4411 PoE controller
+ *
+ * U-Boot relevant board interfaces are:
+ *
+ * 100 Mbit Ethernet with IEEE 802.3af PoE
+ * RS-232 serial port
+ * USB host and device
+ * MMC/SD-Card slot
+ * Expansion port with I2C, SPI and more...
+ *
+ * Typically the U-Boot image is loaded from serial DataFlash into
+ * SDRAM by the samboot boot loader, which is located in internal
+ * NOR Flash and provides all essential initializations like CPU
+ * and peripheral clocks and, of course, the SDRAM configuration.
+ *
+ * For testing purposes it is also possibly to directly transfer
+ * the image into SDRAM via JTAG. A tested configuration exists
+ * for the Turtelizer 2 hardware dongle and the OpenOCD software.
+ * In this case the latter will do the basic hardware configuration
+ * via its reset-init script.
+ *
+ * For additional information visit the project home page at
+ * http://www.ethernut.de/
+ */
+
+#include <common.h>
+#include <net.h>
+#include <netdev.h>
+#include <miiphy.h>
+#include <i2c.h>
+#include <spi.h>
+#include <dataflash.h>
+#include <mmc.h>
+
+#include <asm/arch/at91sam9260.h>
+#include <asm/arch/at91sam9260_matrix.h>
+#include <asm/arch/at91sam9_smc.h>
+#include <asm/arch/at91_common.h>
+#include <asm/arch/at91_pmc.h>
+#include <asm/arch/at91_spi.h>
+#include <asm/arch/gpio.h>
+#include <asm/io.h>
+
+#include "ethernut5_pwrman.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+AT91S_DATAFLASH_INFO dataflash_info[CONFIG_SYS_MAX_DATAFLASH_BANKS];
+
+struct dataflash_addr cs[CONFIG_SYS_MAX_DATAFLASH_BANKS] = {
+       {CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0, 0}
+};
+
+/*
+ * In fact we have 7 partitions, but u-boot supports 5 only. This is
+ * no big deal, because the first partition is reserved for applications
+ * and the last one is used by Nut/OS. Both need not to be visible here.
+ */
+dataflash_protect_t area_list[NB_DATAFLASH_AREA] = {
+       { 0x00021000, 0x00041FFF, FLAG_PROTECT_SET, 0, "setup" },
+       { 0x00042000, 0x000C5FFF, FLAG_PROTECT_SET, 0, "uboot" },
+       { 0x000C6000, 0x00359FFF, FLAG_PROTECT_SET, 0, "kernel" },
+       { 0x0035A000, 0x003DDFFF, FLAG_PROTECT_SET, 0, "nutos" },
+       { 0x003DE000, 0x003FEFFF, FLAG_PROTECT_CLEAR, 0, "env" }
+};
+
+/*
+ * This is called last during early initialization. Most of the basic
+ * hardware interfaces are up and running.
+ *
+ * The SDRAM hardware has been configured by the first stage boot loader.
+ * We only need to announce its size, using u-boot's memory check.
+ */
+int dram_init(void)
+{
+       gd->ram_size = get_ram_size(
+                       (void *)CONFIG_SYS_SDRAM_BASE,
+                       CONFIG_SYS_SDRAM_SIZE);
+       return 0;
+}
+
+#ifdef CONFIG_CMD_NAND
+static void ethernut5_nand_hw_init(void)
+{
+       struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC;
+       struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX;
+       unsigned long csa;
+
+       /* Assign CS3 to NAND/SmartMedia Interface */
+       csa = readl(&matrix->ebicsa);
+       csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA;
+       writel(csa, &matrix->ebicsa);
+
+       /* Configure SMC CS3 for NAND/SmartMedia */
+       writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) |
+               AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0),
+               &smc->cs[3].setup);
+       writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(3) |
+               AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(3),
+               &smc->cs[3].pulse);
+       writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5),
+               &smc->cs[3].cycle);
+       writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
+               AT91_SMC_MODE_EXNW_DISABLE |
+               AT91_SMC_MODE_DBW_8 |
+               AT91_SMC_MODE_TDF_CYCLE(2),
+               &smc->cs[3].mode);
+
+#ifdef CONFIG_SYS_NAND_READY_PIN
+       /* Ready pin is optional. */
+       at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1);
+#endif
+       at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);
+}
+#endif
+
+/*
+ * This is called first during late initialization.
+ */
+int board_init(void)
+{
+       struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
+
+       /* Enable clocks for all PIOs */
+       writel((1 << ATMEL_ID_PIOA) | (1 << ATMEL_ID_PIOB) |
+               (1 << ATMEL_ID_PIOC),
+               &pmc->pcer);
+       /* Set adress of boot parameters. */
+       gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
+       /* Initialize UARTs and power management. */
+       at91_seriald_hw_init();
+       ethernut5_power_init();
+#ifdef CONFIG_CMD_NAND
+       ethernut5_nand_hw_init();
+#endif
+#ifdef CONFIG_HAS_DATAFLASH
+       at91_spi0_hw_init(1 << 0);
+#endif
+       return 0;
+}
+
+#ifdef CONFIG_MACB
+/*
+ * This is optionally called last during late initialization.
+ */
+int board_eth_init(bd_t *bis)
+{
+       const char *devname;
+       unsigned short mode;
+       struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
+
+       /* Enable on-chip EMAC clock. */
+       writel(1 << ATMEL_ID_EMAC0, &pmc->pcer);
+       /* Need to reset PHY via power management. */
+       ethernut5_phy_reset();
+       /* Set peripheral pins. */
+       at91_macb_hw_init();
+       /* Basic EMAC initialization. */
+       if (macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, CONFIG_PHY_ID))
+               return -1;
+       /*
+        * Early board revisions have a pull-down at the PHY's MODE0
+        * strap pin, which forces the PHY into power down. Here we
+        * switch to all-capable mode.
+        */
+       devname = miiphy_get_current_dev();
+       if (miiphy_read(devname, 0, 18, &mode) == 0) {
+               /* Set mode[2:0] to 0b111. */
+               mode |= 0x00E0;
+               miiphy_write(devname, 0, 18, mode);
+               /* Soft reset overrides strap pins. */
+               miiphy_write(devname, 0, MII_BMCR, BMCR_RESET);
+       }
+       /* Sync environment with network devices, needed for nfsroot. */
+       return eth_init(gd->bd);
+}
+#endif
+
+#ifdef CONFIG_GENERIC_ATMEL_MCI
+int board_mmc_init(bd_t *bd)
+{
+       struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
+
+       /* Enable MCI clock. */
+       writel(1 << ATMEL_ID_MCI, &pmc->pcer);
+       /* Initialize MCI hardware. */
+       at91_mci_hw_init();
+       /* Register the device. */
+       return atmel_mci_init((void *)ATMEL_BASE_MCI);
+}
+
+int board_mmc_getcd(u8 *cd, struct mmc *mmc)
+{
+       *cd = at91_get_pio_value(CONFIG_SYS_MMC_CD_PIN) ? 1 : 0;
+       return 0;
+}
+#endif
+
+#ifdef CONFIG_ATMEL_SPI
+/*
+ * Note, that u-boot uses different code for SPI bus access. While
+ * memory routines use automatic chip select control, the serial
+ * flash support requires 'manual' GPIO control. Thus, we switch
+ * modes.
+ */
+void spi_cs_activate(struct spi_slave *slave)
+{
+       /* Enable NPCS0 in GPIO mode. This disables peripheral control. */
+       at91_set_pio_output(AT91_PIO_PORTA, 3, 0);
+}
+
+void spi_cs_deactivate(struct spi_slave *slave)
+{
+       /* Disable NPCS0 in GPIO mode. */
+       at91_set_pio_output(AT91_PIO_PORTA, 3, 1);
+       /* Switch back to peripheral chip select control. */
+       at91_set_a_periph(AT91_PIO_PORTA, 3, 1);
+}
+
+int spi_cs_is_valid(unsigned int bus, unsigned int cs)
+{
+       return bus == 0 && cs == 0;
+}
+#endif
diff --git a/board/egnite/ethernut5/ethernut5_pwrman.c b/board/egnite/ethernut5/ethernut5_pwrman.c
new file mode 100644 (file)
index 0000000..4b00038
--- /dev/null
@@ -0,0 +1,338 @@
+/*
+ * (C) Copyright 2011
+ * egnite GmbH <info@egnite.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
+ */
+
+/*
+ * Ethernut 5 power management support
+ *
+ * This board may be supplied via USB, IEEE 802.3af PoE or an
+ * auxiliary DC input. An on-board ATmega168 microcontroller,
+ * the so called power management controller or PMC, is used
+ * to select the supply source and to switch on and off certain
+ * energy consuming board components. This allows to reduce the
+ * total stand-by consumption to less than 70mW.
+ *
+ * The main CPU communicates with the PMC via I2C. When
+ * CONFIG_CMD_BSP is defined in the board configuration file,
+ * then the board specific command 'pwrman' becomes available,
+ * which allows to manually deal with the PMC.
+ *
+ * Two distinct registers are provided by the PMC for enabling
+ * and disabling specific features. This avoids the often seen
+ * read-modify-write cycle or shadow register requirement.
+ * Additional registers are available to query the board
+ * status and temperature, the auxiliary voltage and to control
+ * the green user LED that is integrated in the reset switch.
+ *
+ * Note, that the AVR firmware of the PMC is released under BSDL.
+ *
+ * For additional information visit the project home page at
+ * http://www.ethernut.de/
+ */
+#include <common.h>
+#include <asm/arch/at91sam9260.h>
+#include <asm/arch/at91_common.h>
+#include <asm/arch/gpio.h>
+#include <asm/io.h>
+#include <i2c.h>
+
+#include "ethernut5_pwrman.h"
+
+/* PMC firmware version */
+static int pwrman_major;
+static int pwrman_minor;
+
+/*
+ * Enable Ethernut 5 power management.
+ *
+ * This function must be called during board initialization.
+ * While we are using u-boot's I2C subsystem, it may be required
+ * to enable the serial port before calling this function,
+ * in particular when debugging is enabled.
+ *
+ * If board specific commands are not available, we will activate
+ * all board components.
+ */
+void ethernut5_power_init(void)
+{
+       pwrman_minor = i2c_reg_read(PWRMAN_I2C_ADDR, PWRMAN_REG_VERS);
+       pwrman_major = pwrman_minor >> 4;
+       pwrman_minor &= 15;
+
+#ifndef CONFIG_CMD_BSP
+       /* Do not modify anything, if we do not have a known version. */
+       if (pwrman_major == 2) {
+               /* Without board specific commands we enable all features. */
+               i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_ENA, ~PWRMAN_ETHRST);
+               i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_DIS, PWRMAN_ETHRST);
+       }
+#endif
+}
+
+/*
+ * Reset Ethernet PHY.
+ *
+ * This function allows the re-configure the PHY after
+ * changing its strap pins.
+ */
+void ethernut5_phy_reset(void)
+{
+       /* Do not modify anything, if we do not have a known version. */
+       if (pwrman_major != 2)
+               return;
+
+       /*
+        * Make sure that the Ethernet clock is enabled and the PHY reset
+        * is disabled for at least 100 us.
+        */
+       i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_ENA, PWRMAN_ETHCLK);
+       i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_DIS, PWRMAN_ETHRST);
+       udelay(100);
+
+       /*
+        * LAN8710 strap pins are
+        * PA14 => PHY MODE0
+        * PA15 => PHY MODE1
+        * PA17 => PHY MODE2 => 111b all capable
+        * PA18 => PHY ADDR0 => 0b
+        */
+       at91_set_pio_input(AT91_PIO_PORTA, 14, 1);
+       at91_set_pio_input(AT91_PIO_PORTA, 15, 1);
+       at91_set_pio_input(AT91_PIO_PORTA, 17, 1);
+       at91_set_pio_input(AT91_PIO_PORTA, 18, 0);
+
+       /* Activate PHY reset for 100 us. */
+       i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_ENA, PWRMAN_ETHRST);
+       udelay(100);
+       i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_DIS, PWRMAN_ETHRST);
+
+       at91_set_pio_input(AT91_PIO_PORTA, 14, 1);
+}
+
+/*
+ * Output the firmware version we got during initialization.
+ */
+void ethernut5_print_version(void)
+{
+       printf("%u.%u\n", pwrman_major, pwrman_minor);
+}
+
+/*
+ * All code below this point is optional and implements
+ * the 'pwrman' command.
+ */
+#ifdef CONFIG_CMD_BSP
+
+/* Human readable names of PMC features */
+char *pwrman_feat[8] = {
+       "board", "vbin", "vbout", "mmc",
+       "rs232", "ethclk", "ethrst", "wakeup"
+};
+
+/*
+ * Print all feature names, that have its related flags enabled.
+ */
+static void print_flagged_features(u8 flags)
+{
+       int i;
+
+       for (i = 0; i < 8; i++) {
+               if (flags & (1 << i))
+                       printf("%s ", pwrman_feat[i]);
+       }
+}
+
+/*
+ * Return flags of a given list of feature names.
+ *
+ * The function stops at the first unknown list entry and
+ * returns the number of detected names as a function result.
+ */
+static int feature_flags(char * const names[], int num, u8 *flags)
+{
+       int i, j;
+
+       *flags = 0;
+       for (i = 0; i < num; i++) {
+               for (j = 0; j < 8; j++) {
+                       if (strcmp(pwrman_feat[j], names[i]) == 0) {
+                               *flags |= 1 << j;
+                               break;
+                       }
+               }
+               if (j > 7)
+                       break;
+       }
+       return i;
+}
+
+void ethernut5_print_power(void)
+{
+       u8 flags;
+       int i;
+
+       flags = i2c_reg_read(PWRMAN_I2C_ADDR, PWRMAN_REG_ENA);
+       for (i = 0; i < 2; i++) {
+               if (flags) {
+                       print_flagged_features(flags);
+                       printf("%s\n", i ? "off" : "on");
+               }
+               flags = ~flags;
+       }
+}
+
+void ethernut5_print_celsius(void)
+{
+       int val;
+
+       /* Read ADC value from LM50 and return Celsius degrees. */
+       val = i2c_reg_read(PWRMAN_I2C_ADDR, PWRMAN_REG_TEMP);
+       val *= 5000;    /* 100mV/degree with 5V reference */
+       val += 128;     /* 8 bit resolution */
+       val /= 256;
+       val -= 450;     /* Celsius offset, still x10 */
+       /* Output full degrees. */
+       printf("%d\n", (val + 5) / 10);
+}
+
+void ethernut5_print_voltage(void)
+{
+       int val;
+
+       /* Read ADC value from divider and return voltage. */
+       val = i2c_reg_read(PWRMAN_I2C_ADDR, PWRMAN_REG_VAUX);
+       /* Resistors are 100k and 12.1k */
+       val += 5;
+       val *= 180948;
+       val /= 100000;
+       val++;
+       /* Calculation was done in 0.1V units. */
+       printf("%d\n", (val + 5) / 10);
+}
+
+/*
+ * Process the board specific 'pwrman' command.
+ */
+int do_pwrman(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       u8 val;
+       int i;
+
+       if (argc == 1) {
+               ethernut5_print_power();
+       } else if (argc == 2 && strcmp(argv[1], "reset") == 0) {
+               at91_set_pio_output(AT91_PIO_PORTB, 8, 1);
+               udelay(100);
+               at91_set_pio_output(AT91_PIO_PORTB, 8, 0);
+               udelay(100000);
+       } else if (argc == 2 && strcmp(argv[1], "temp") == 0) {
+               ethernut5_print_celsius();
+       } else if (argc == 2 && strcmp(argv[1], "vaux") == 0) {
+               ethernut5_print_voltage();
+       } else if (argc == 2 && strcmp(argv[1], "version") == 0) {
+               ethernut5_print_version();
+       } else if (strcmp(argv[1], "led") == 0) {
+               /* Control the green status LED. Blink frequency unit
+               ** is 0.1s, very roughly. */
+               if (argc == 2) {
+                       /* No more arguments, output current settings. */
+                       val = i2c_reg_read(PWRMAN_I2C_ADDR, PWRMAN_REG_LEDCTL);
+                       printf("led %u %u\n", val >> 4, val & 15);
+               } else {
+                       /* First argument specifies the on-time. */
+                       val = (u8) simple_strtoul(argv[2], NULL, 0);
+                       val <<= 4;
+                       if (argc > 3) {
+                               /* Second argument specifies the off-time. */
+                               val |= (u8) (simple_strtoul(argv[3], NULL, 0)
+                                               & 15);
+                       }
+                       /* Update the LED control register. */
+                       i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_LEDCTL, val);
+               }
+       } else {
+               /* We expect a list of features followed an optional status. */
+               argc--;
+               i = feature_flags(&argv[1], argc, &val);
+               if (argc == i) {
+                       /* We got a list only, print status. */
+                       val &= i2c_reg_read(PWRMAN_I2C_ADDR, PWRMAN_REG_STA);
+                       if (val) {
+                               if (i > 1)
+                                       print_flagged_features(val);
+                               printf("active\n");
+                       } else {
+                               printf("inactive\n");
+                       }
+               } else {
+                       /* More arguments. */
+                       if (i == 0) {
+                               /* No given feature, use despensibles. */
+                               val = PWRMAN_DISPENSIBLE;
+                       }
+                       if (strcmp(argv[i + 1], "on") == 0) {
+                               /* Enable features. */
+                               i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_ENA,
+                                               val);
+                       } else if (strcmp(argv[i + 1], "off") == 0) {
+                               /* Disable features. */
+                               i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_DIS,
+                                               val);
+                       } else {
+                               printf("Bad parameter %s\n", argv[i + 1]);
+                               return 1;
+                       }
+               }
+       }
+       return 0;
+}
+
+U_BOOT_CMD(
+       pwrman, CONFIG_SYS_MAXARGS, 1, do_pwrman,
+       "power management",
+                  "- print settings\n"
+       "pwrman feature ...\n"
+       "       - print status\n"
+       "pwrman [feature ...] on|off\n"
+       "       - enable/disable specified or all dispensible features\n"
+       "pwrman led [on-time [off-time]]\n"
+       "       - print or set led blink timer\n"
+       "pwrman temp\n"
+       "       - print board temperature (Celsius)\n"
+       "pwrman vaux\n"
+       "       - print auxiliary input voltage\n"
+       "pwrman reset\n"
+       "       - reset power management controller\n"
+       "pwrman version\n"
+       "       - print firmware version\n"
+       "\n"
+       "        features, (*)=dispensible:\n"
+       "          board  - 1.8V and 3.3V supply\n"
+       "          vbin   - supply via USB device connector\n"
+       "          vbout  - USB host connector supply(*)\n"
+       "          mmc    - MMC slot supply(*)\n"
+       "          rs232  - RS232 driver\n"
+       "          ethclk - Ethernet PHY clock(*)\n"
+       "          ethrst - Ethernet PHY reset\n"
+       "          wakeup - RTC alarm"
+);
+#endif /* CONFIG_CMD_BSP */
diff --git a/board/egnite/ethernut5/ethernut5_pwrman.h b/board/egnite/ethernut5/ethernut5_pwrman.h
new file mode 100644 (file)
index 0000000..0541884
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * (C) Copyright 2011
+ * egnite GmbH <info@egnite.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
+ */
+
+/*
+ * Ethernut 5 power management support
+ *
+ * For additional information visit the project home page at
+ * http://www.ethernut.de/
+ */
+
+/* I2C address of the PMC */
+#define PWRMAN_I2C_ADDR 0x22
+
+/* PMC registers */
+#define PWRMAN_REG_VERS                0       /* Version register */
+#define PWRMAN_REG_STA         1       /* Feature status register */
+#define PWRMAN_REG_ENA         2       /* Feature enable register */
+#define PWRMAN_REG_DIS         3       /* Feature disable register */
+#define PWRMAN_REG_TEMP                4       /* Board temperature */
+#define PWRMAN_REG_VAUX                6       /* Auxiliary input voltage */
+#define PWRMAN_REG_LEDCTL      8       /* LED blinking timer. */
+
+/* Feature flags used in status, enable and disable registers */
+#define PWRMAN_BOARD   0x01    /* 1.8V and 3.3V supply */
+#define PWRMAN_VBIN    0x02    /* VBUS input at device connector */
+#define PWRMAN_VBOUT   0x04    /* VBUS output at host connector */
+#define PWRMAN_MMC     0x08    /* Memory card supply */
+#define PWRMAN_RS232   0x10    /* RS-232 driver shutdown */
+#define PWRMAN_ETHCLK  0x20    /* Ethernet clock enable */
+#define PWRMAN_ETHRST  0x40    /* Ethernet PHY reset */
+#define PWRMAN_WAKEUP  0x80    /* RTC wake-up */
+
+/* Features, which are not essential to keep u-boot alive */
+#define PWRMAN_DISPENSIBLE     (PWRMAN_VBOUT | PWRMAN_MMC | PWRMAN_ETHCLK)
+
+/* Enable Ethernut 5 power management. */
+extern void ethernut5_power_init(void);
+
+/* Reset Ethernet PHY. */
+extern void ethernut5_phy_reset(void);
+
+extern void ethernut5_print_version(void);
+
+#ifdef CONFIG_CMD_BSP
+extern void ethernut5_print_power(void);
+extern void ethernut5_print_celsius(void);
+extern void ethernut5_print_voltage(void);
+#endif
index bc6eb405565d29e3cba440abcab151e9aa42957c..d05e226f83d7274ea1a8da9c657e166d2c87c66a 100644 (file)
@@ -31,7 +31,6 @@
 #include "srom.h"
 
 /* imports  */
-extern char console_buffer[CONFIG_SYS_CBSIZE];
 extern int l2_cache_enable (int l2control);
 extern void *nvram_read (void *dest, const short src, size_t count);
 extern void nvram_write (short dest, const void *src, size_t count);
index cbaf10b7e676533040c22f41bbc7e594cb4a4635..d476cd5c1c7e0be392bc6f7cf588c74f5aa68ad1 100644 (file)
@@ -29,7 +29,6 @@
 #include "srom.h"
 
 /* imports  */
-extern char console_buffer[CONFIG_SYS_CBSIZE];
 extern int l2_cache_enable (int l2control);
 extern int eepro100_write_eeprom (struct eth_device *dev, int location,
                                  int addr_len, unsigned short data);
index 7cca6b28c1c168acfb04ce4e0c7b721186ca98bd..e806b3e87be33aeda33ed588ad10261da183d1b7 100644 (file)
@@ -35,9 +35,6 @@
 #include "mpc8xx.h"
 #include <video_fb.h>
 
-/* imports from common/main.c */
-extern char console_buffer[CONFIG_SYS_CBSIZE];
-
 extern void eeprom_init (void);
 extern int eeprom_read (unsigned dev_addr, unsigned offset,
                        unsigned char *buffer, unsigned cnt);
index 76f7a0c5f9c84e0769cbee59a1f16f757ef7cc9e..4df7f0e24222337d83bb003fe60cca32923a1d75 100644 (file)
@@ -34,6 +34,7 @@
 #include <common.h>
 #include <commproc.h>
 #include <mpc8xx.h>
+#include <asm/io.h>
 
 /*****************************************************************************
  * UPM table for 60ns EDO RAM at 25 MHz bus/external clock
@@ -87,7 +88,7 @@ phys_size_t initdram (int board_type)
         */
        if ((ulong) initdram & 0xff000000) {
                volatile uint *addr1, *addr2;
-               uint i, j;
+               uint i;
 
                upmconfig (UPMA, (uint *) edo_60ns_25MHz_tbl,
                           sizeof (edo_60ns_25MHz_tbl) / sizeof (uint));
@@ -100,8 +101,8 @@ phys_size_t initdram (int board_type)
                 */
                addr1 = (volatile uint *) 0;
                addr2 = (volatile uint *) 0x00400000;
-               for (i = 0, j = 0; i < 8; i++)
-                       j = addr1[0];
+               for (i = 0; i < 8; i++)
+                       in_be32(addr1);
 
                /*
                 * Now check whether we got 4MB or 16MB populated
index 61dee62de1bc97a8b7e5d2e51c2e05d02b9a1e66..6f5662a96d506f5b195f92dd17bb1ed7e380b5c3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * (C) Copyright 2010
similarity index 88%
rename from board/davinci/common/Makefile
rename to board/enbw/enbw_cmc/Makefile
index 9d7b1642386bbe11fe12fc4493c1ce4341d697bc..cd1f0d4ed86cc9bb56c7f235d489e599524037b3 100644 (file)
@@ -1,7 +1,9 @@
 #
-# (C) Copyright 2006
+# (C) Copyright 2000, 2001, 2002
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
 # See file CREDITS for list of people who contributed to this
 # project.
 #
 
 include $(TOPDIR)/config.mk
 
-ifneq ($(OBJTREE),$(SRCTREE))
-$(shell mkdir -p $(obj)board/$(VENDOR)/common)
-endif
-
-LIB    = $(obj)lib$(VENDOR).o
+LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := misc.o davinci_pinmux.o
+COBJS   := $(BOARD).o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/enbw/enbw_cmc/enbw_cmc.c b/board/enbw/enbw_cmc/enbw_cmc.c
new file mode 100644 (file)
index 0000000..5cd5357
--- /dev/null
@@ -0,0 +1,607 @@
+/*
+ * (C) Copyright 2011
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Based on da830evm.c. Original Copyrights follow:
+ *
+ * Copyright (C) 2009 Nick Thompson, GE Fanuc, Ltd. <nick.thompson@gefanuc.com>
+ * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <environment.h>
+#include <hwconfig.h>
+#include <i2c.h>
+#include <malloc.h>
+#include <miiphy.h>
+#include <mmc.h>
+#include <net.h>
+#include <netdev.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <asm/arch/da850_lowlevel.h>
+#include <asm/arch/davinci_misc.h>
+#include <asm/arch/emif_defs.h>
+#include <asm/arch/emac_defs.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/pinmux_defs.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/sdmmc_defs.h>
+#include <asm/arch/timer_defs.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static const struct lpsc_resource lpsc[] = {
+       { DAVINCI_LPSC_AEMIF },
+       { DAVINCI_LPSC_SPI1 },
+       { DAVINCI_LPSC_ARM_RAM_ROM },
+       { DAVINCI_LPSC_UART0 },
+       { DAVINCI_LPSC_EMAC },
+       { DAVINCI_LPSC_UART0 },
+       { DAVINCI_LPSC_GPIO },
+       { DAVINCI_LPSC_DDR_EMIF },
+       { DAVINCI_LPSC_UART1 },
+       { DAVINCI_LPSC_UART2 },
+       { DAVINCI_LPSC_MMC_SD1 },
+       { DAVINCI_LPSC_USB20 },
+       { DAVINCI_LPSC_USB11 },
+};
+
+static const struct pinmux_config enbw_pins[] = {
+       { pinmux(0), 8, 0 },
+       { pinmux(0), 8, 1 },
+       { pinmux(0), 8, 2 },
+       { pinmux(0), 8, 3 },
+       { pinmux(0), 8, 4 },
+       { pinmux(0), 8, 5 },
+       { pinmux(1), 4, 0 },
+       { pinmux(1), 8, 1 },
+       { pinmux(1), 8, 2 },
+       { pinmux(1), 8, 3 },
+       { pinmux(1), 8, 4 },
+       { pinmux(1), 8, 5 },
+       { pinmux(1), 8, 6 },
+       { pinmux(1), 4, 7 },
+       { pinmux(2), 8, 0 },
+       { pinmux(5), 1, 0 },
+       { pinmux(5), 1, 3 },
+       { pinmux(5), 1, 7 },
+       { pinmux(6), 1, 0 },
+       { pinmux(6), 1, 1 },
+       { pinmux(6), 8, 2 },
+       { pinmux(6), 8, 3 },
+       { pinmux(6), 1, 4 },
+       { pinmux(6), 8, 5 },
+       { pinmux(6), 1, 7 },
+       { pinmux(7), 8, 2 },
+       { pinmux(7), 1, 3 },
+       { pinmux(7), 1, 6 },
+       { pinmux(7), 1, 7 },
+       { pinmux(13), 8, 2 },
+       { pinmux(13), 8, 3 },
+       { pinmux(13), 8, 4 },
+       { pinmux(13), 8, 5 },
+       { pinmux(13), 8, 6 },
+       { pinmux(13), 8, 7 },
+       { pinmux(14), 8, 0 },
+       { pinmux(14), 8, 1 },
+       { pinmux(16), 8, 1 },
+       { pinmux(16), 8, 2 },
+       { pinmux(16), 8, 3 },
+       { pinmux(16), 8, 4 },
+       { pinmux(16), 8, 5 },
+       { pinmux(16), 8, 6 },
+       { pinmux(16), 8, 7 },
+       { pinmux(17), 1, 0 },
+       { pinmux(17), 1, 1 },
+       { pinmux(17), 1, 2 },
+       { pinmux(17), 8, 3 },
+       { pinmux(17), 8, 4 },
+       { pinmux(17), 8, 5 },
+       { pinmux(17), 8, 6 },
+       { pinmux(17), 8, 7 },
+       { pinmux(18), 8, 0 },
+       { pinmux(18), 8, 1 },
+       { pinmux(18), 2, 2 },
+       { pinmux(18), 2, 3 },
+       { pinmux(18), 2, 4 },
+       { pinmux(18), 8, 6 },
+       { pinmux(18), 8, 7 },
+       { pinmux(19), 8, 0 },
+       { pinmux(19), 2, 1 },
+       { pinmux(19), 2, 2 },
+       { pinmux(19), 2, 3 },
+       { pinmux(19), 2, 4 },
+       { pinmux(19), 8, 5 },
+       { pinmux(19), 8, 6 },
+};
+
+const struct pinmux_resource pinmuxes[] = {
+       PINMUX_ITEM(emac_pins_mii),
+       PINMUX_ITEM(emac_pins_mdio),
+       PINMUX_ITEM(i2c0_pins),
+       PINMUX_ITEM(emifa_pins_cs2),
+       PINMUX_ITEM(emifa_pins_cs3),
+       PINMUX_ITEM(emifa_pins_cs4),
+       PINMUX_ITEM(emifa_pins_nand),
+       PINMUX_ITEM(emifa_pins_nor),
+       PINMUX_ITEM(spi1_pins_base),
+       PINMUX_ITEM(spi1_pins_scs0),
+       PINMUX_ITEM(uart1_pins_txrx),
+       PINMUX_ITEM(uart2_pins_txrx),
+       PINMUX_ITEM(uart2_pins_rtscts),
+       PINMUX_ITEM(enbw_pins),
+};
+
+const int pinmuxes_size = ARRAY_SIZE(pinmuxes);
+
+struct gpio_config {
+       char name[GPIO_NAME_SIZE];
+       unsigned char bank;
+       unsigned char gpio;
+       unsigned char out;
+       unsigned char value;
+};
+
+static const struct gpio_config enbw_gpio_config[] = {
+       { "RS485 enable",       8, 11, 1, 0 },
+       { "RS485 iso",          8, 10, 1, 0 },
+       { "W2HUT RS485 Rx ena", 8,  9, 1, 0 },
+       { "W2HUT RS485 iso",    8,  8, 1, 0 },
+       { "LAN reset",          7, 15, 1, 1 },
+       { "ena 11V PLC",        7, 14, 1, 0 },
+       { "ena 1.5V PLC",       7, 13, 1, 0 },
+       { "disable VBUS",       7, 12, 1, 1 },
+       { "PLC reset",          6, 13, 1, 1 },
+       { "LCM RS",             6, 12, 1, 0 },
+       { "LCM R/W",            6, 11, 1, 0 },
+       { "PLC pairing",        6, 10, 1, 1 },
+       { "PLC MDIO CLK",       6,  9, 1, 0 },
+       { "HK218",              6,  8, 1, 0 },
+       { "HK218 Rx",           6,  1, 1, 1 },
+       { "TPM reset",          6,  0, 1, 1 },
+       { "LCM E",              2,  2, 1, 1 },
+       { "PV-IF RxD ena",      0, 15, 1, 1 },
+       { "LED1",               1, 15, 1, 1 },
+       { "LED2",               0,  1, 1, 1 },
+       { "LED3",               0,  2, 1, 1 },
+       { "LED4",               0,  3, 1, 1 },
+       { "LED5",               0,  4, 1, 1 },
+       { "LED6",               0,  5, 1, 0 },
+       { "LED7",               0,  6, 1, 0 },
+       { "LED8",               0, 14, 1, 0 },
+       { "USER1",              0, 12, 0, 0 },
+       { "USER2",              0, 13, 0, 0 },
+};
+
+#define PHY_POWER      0x0800
+
+static void enbw_cmc_switch(int port, int on)
+{
+       const char      *devname;
+       unsigned char phyaddr = 3;
+       unsigned char   reg = 0;
+       unsigned short  data;
+
+       if (port == 1)
+               phyaddr = 2;
+
+       devname = miiphy_get_current_dev();
+       if (!devname) {
+               printf("Error: no mii device\n");
+               return;
+       }
+       if (miiphy_read(devname, phyaddr, reg, &data) != 0) {
+               printf("Error reading from the PHY addr=%02x reg=%02x\n",
+                       phyaddr, reg);
+               return;
+       }
+
+       if (on)
+               data &= ~PHY_POWER;
+       else
+               data |= PHY_POWER;
+
+       if (miiphy_write(devname, phyaddr, reg, data) != 0) {
+               printf("Error writing to the PHY addr=%02x reg=%02x\n",
+                       phyaddr, reg);
+               return;
+       }
+}
+
+int board_init(void)
+{
+       int i, ret;
+
+#ifndef CONFIG_USE_IRQ
+       irq_init();
+#endif
+       /* address of boot parameters, not used as booting with DTT */
+       gd->bd->bi_boot_params = 0;
+
+       for (i = 0; i < ARRAY_SIZE(enbw_gpio_config); i++) {
+               int gpio = enbw_gpio_config[i].bank * 16 +
+                       enbw_gpio_config[i].gpio;
+
+               ret = gpio_request(gpio, enbw_gpio_config[i].name);
+               if (ret) {
+                       printf("%s: Could not get %s gpio\n", __func__,
+                               enbw_gpio_config[i].name);
+                       return -1;
+               }
+
+               if (enbw_gpio_config[i].out)
+                       gpio_direction_output(gpio,
+                               enbw_gpio_config[i].value);
+               else
+                       gpio_direction_input(gpio);
+       }
+
+       /* setup the SUSPSRC for ARM to control emulation suspend */
+       clrbits_le32(&davinci_syscfg_regs->suspsrc,
+               (DAVINCI_SYSCFG_SUSPSRC_EMAC | DAVINCI_SYSCFG_SUSPSRC_I2C |
+               DAVINCI_SYSCFG_SUSPSRC_SPI1 | DAVINCI_SYSCFG_SUSPSRC_TIMER0 |
+               DAVINCI_SYSCFG_SUSPSRC_UART2));
+
+       return 0;
+}
+
+#ifdef CONFIG_DRIVER_TI_EMAC
+/*
+ * Initializes on-board ethernet controllers.
+ */
+int board_eth_init(bd_t *bis)
+{
+#ifdef CONFIG_DRIVER_TI_EMAC
+       davinci_emac_mii_mode_sel(0);
+#endif /* CONFIG_DRIVER_TI_EMAC */
+
+       if (!davinci_emac_initialize()) {
+               printf("Error: Ethernet init failed!\n");
+               return -1;
+       }
+
+       if (hwconfig_subarg_cmp("switch", "lan", "on"))
+               /* Switch port lan on */
+               enbw_cmc_switch(1, 1);
+       else
+               enbw_cmc_switch(1, 0);
+
+       if (hwconfig_subarg_cmp("switch", "pwl", "on"))
+               /* Switch port pwl on */
+               enbw_cmc_switch(2, 1);
+       else
+               enbw_cmc_switch(2, 0);
+
+       return 0;
+}
+#endif /* CONFIG_DRIVER_TI_EMAC */
+
+#ifdef CONFIG_PREBOOT
+static uchar kbd_magic_prefix[]                = "key_magic_";
+static uchar kbd_command_prefix[]      = "key_cmd_";
+
+struct kbd_data_t {
+       char s1;
+};
+
+struct kbd_data_t *get_keys(struct kbd_data_t *kbd_data)
+{
+       /* read SW1 + SW2 */
+       kbd_data->s1 = gpio_get_value(12) +
+               (gpio_get_value(13) << 1);
+       return kbd_data;
+}
+
+static int compare_magic(const struct kbd_data_t *kbd_data, char *str)
+{
+       char s1 = str[0];
+
+       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 != kbd_data->s1)
+               return -1;
+
+       return 0;
+}
+
+static char *key_match(const struct kbd_data_t *kbd_data)
+{
+       char magic[sizeof(kbd_magic_prefix) + 1];
+       char *suffix;
+       char *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.
+        */
+       kbd_magic_keys = getenv("magic_keys");
+       if (kbd_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) {
+                       char 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)
+{
+       char *s, buf[32];
+#ifdef CONFIG_PREBOOT
+       struct kbd_data_t kbd_data;
+       /* Decode keys */
+       char *str = strdup(key_match(get_keys(&kbd_data)));
+       /* Set or delete definition */
+       setenv("preboot", str);
+       free(str);
+#endif /* CONFIG_PREBOOT */
+
+       /* count all restarts, and save this in an environment var */
+       s = getenv("restartcount");
+
+       if (s)
+               sprintf(buf, "%ld", simple_strtoul(s, NULL, 10) + 1);
+       else
+               strcpy(buf, "1");
+
+       setenv("restartcount", buf);
+       saveenv();
+
+#ifdef CONFIG_HW_WATCHDOG
+       davinci_hw_watchdog_enable();
+#endif
+
+       return 0;
+}
+
+struct cmc_led {
+       char name[20];
+       unsigned char bank;
+       unsigned char gpio;
+};
+
+struct cmc_led led_table[] = {
+       {"led1", 1, 15},
+       {"led2", 0, 1},
+       {"led3", 0, 2},
+       {"led4", 0, 3},
+       {"led5", 0, 4},
+       {"led6", 0, 5},
+       {"led7", 0, 6},
+       {"led8", 0, 14},
+};
+
+static int cmc_get_led_state(struct cmc_led *led)
+{
+       int value;
+       int gpio = led->bank * 16 + led->gpio;
+
+       value = gpio_get_value(gpio);
+
+       return value;
+}
+
+static int cmc_set_led_state(struct cmc_led *led, int state)
+{
+       int gpio = led->bank * 16 + led->gpio;
+
+       gpio_set_value(gpio, state);
+       return 0;
+}
+
+static int do_led(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+       struct cmc_led *led;
+       int found = 0;
+       int i = 0;
+       int only_print = 0;
+       int len = ARRAY_SIZE(led_table);
+
+       if (argc < 2)
+               return cmd_usage(cmdtp);
+
+       if (argc < 3)
+               only_print = 1;
+
+       led = led_table;
+       while ((!found) && (i < len)) {
+               if (strcmp(argv[1], led->name) == 0) {
+                       found = 1;
+               } else {
+                       led++;
+                       i++;
+               }
+       }
+       if (!found)
+               return cmd_usage(cmdtp);
+
+       if (only_print) {
+               if (cmc_get_led_state(led))
+                       printf("on\n");
+               else
+                       printf("off\n");
+
+               return 0;
+       }
+       if (strcmp(argv[2], "on") == 0)
+               cmc_set_led_state(led, 1);
+       else
+               cmc_set_led_state(led, 0);
+
+       return 0;
+}
+
+U_BOOT_CMD(led, 3, 1, do_led,
+       "switch on/off board led",
+       "[name] [on/off]"
+);
+
+#ifdef CONFIG_HW_WATCHDOG
+void hw_watchdog_reset(void)
+{
+       davinci_hw_watchdog_reset();
+}
+#endif
+
+#if defined(CONFIG_POST)
+void arch_memory_failure_handle(void)
+{
+       struct davinci_gpio *gpio = davinci_gpio_bank01;
+       int state = 1;
+
+       /*
+        * if memor< failure blink with the LED 1,2 and 3
+        * as we running from flash, we cannot use the gpio
+        * api here, so access the gpio pin direct through
+        * the gpio register.
+        */
+       while (1) {
+               if (state) {
+                       clrbits_le32(&gpio->out_data, 0x80000006);
+                       state = 0;
+               } else {
+                       setbits_le32(&gpio->out_data, 0x80000006);
+                       state = 1;
+               }
+               udelay(500);
+       }
+}
+#endif
+
+#if defined(CONFIG_BOOTCOUNT_LIMIT)
+void bootcount_store(ulong a)
+{
+       struct davinci_rtc *reg =
+               (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR;
+
+       /*
+        * write RTC kick register to enable write
+        * for RTC Scratch registers. Cratch0 and 1 are
+        * used for bootcount values.
+        */
+       out_be32(&reg->kick0r, RTC_KICK0R_WE);
+       out_be32(&reg->kick1r, RTC_KICK1R_WE);
+       out_be32(&reg->scratch0, a);
+       out_be32(&reg->scratch1, BOOTCOUNT_MAGIC);
+}
+
+ulong bootcount_load(void)
+{
+       struct davinci_rtc *reg =
+               (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR;
+
+       if (in_be32(&reg->scratch1) != BOOTCOUNT_MAGIC)
+               return 0;
+       else
+               return in_be32(&reg->scratch0);
+}
+#endif
+
+void board_gpio_init(void)
+{
+       struct davinci_gpio *gpio = davinci_gpio_bank01;
+
+       /*
+        * Power on required peripherals
+        * ARM does not have access by default to PSC0 and PSC1
+        * assuming here that the DSP bootloader has set the IOPU
+        * such that PSC access is available to ARM
+        */
+       if (da8xx_configure_lpsc_items(lpsc, ARRAY_SIZE(lpsc)))
+               return;
+
+       /*
+        * set LED (gpio Interface not usable here)
+        * set LED pins to output and state 0
+        */
+       clrbits_le32(&gpio->dir, 0x8000407e);
+       clrbits_le32(&gpio->out_data, 0x8000407e);
+       /* set LED 1 - 5 to state on */
+       setbits_le32(&gpio->out_data, 0x8000001e);
+}
+
+int board_late_init(void)
+{
+       cmc_set_led_state(&led_table[4], 0);
+
+       return 0;
+}
+
+void show_boot_progress(int val)
+{
+       switch (val) {
+       case 1:
+               cmc_set_led_state(&led_table[4], 1);
+               break;
+       case 4:
+               cmc_set_led_state(&led_table[4], 0);
+               break;
+       case 15:
+               cmc_set_led_state(&led_table[4], 1);
+               break;
+       }
+}
+
+#ifdef CONFIG_DAVINCI_MMC
+static struct davinci_mmc mmc_sd1 = {
+       .reg_base       = (struct davinci_mmc_regs *)DAVINCI_MMC_SD1_BASE,
+       .input_clk      = 228000000,
+       .host_caps      = MMC_MODE_4BIT,
+       .voltages       = MMC_VDD_32_33 | MMC_VDD_33_34,
+       .version        = MMC_CTLR_VERSION_2,
+};
+
+int board_mmc_init(bd_t *bis)
+{
+       mmc_sd1.input_clk = clk_get(DAVINCI_MMC_CLKID);
+       /* Add slot-0 to mmc subsystem */
+       return davinci_mmc_init(bis, &mmc_sd1);
+}
+#endif
index 4dfea71966b9ed62fdd9a670e00509f378bc14ba..fc60545d048b249febd17993929c17192d191193 100644 (file)
@@ -91,7 +91,6 @@ int au_check_cksum_valid(int i, long nbytes)
 int au_check_header_valid(int i, long nbytes)
 {
        image_header_t *hdr;
-       unsigned long checksum;
 
        hdr = (image_header_t *)LOAD_ADDR;
 #if defined(CONFIG_FIT)
@@ -127,9 +126,6 @@ int au_check_header_valid(int i, long nbytes)
                return -1;
        }
 
-       /* recycle checksum */
-       checksum = image_get_data_size (hdr);
-
        return 0;
 }
 
@@ -397,7 +393,7 @@ int do_auto_update(void)
 {
        block_dev_desc_t *stor_dev = NULL;
        long sz;
-       int i, res, cnt, old_ctrlc, got_ctrlc;
+       int i, res, cnt, old_ctrlc;
        char buffer[32];
        char str[80];
        int n;
@@ -473,8 +469,6 @@ int do_auto_update(void)
                        /* let the user break out of the loop */
                        if (ctrlc() || had_ctrlc ()) {
                                clear_ctrlc ();
-                               if (res < 0)
-                                       got_ctrlc = 1;
                                break;
                        }
                        cnt++;
index 9823e5e8a73aeaf7233c9f55b0c6d245438c4b2d..cba33b8123ecf170adb577f87ddb44548bf3cf74 100644 (file)
@@ -1831,7 +1831,6 @@ int xsvfExecute(void)
 int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        int     iErrorCode;
-       char*   pzXsvfFileName;
        unsigned long duration;
        unsigned long long startClock, endClock;
 
@@ -1847,7 +1846,6 @@ int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        }
 
        iErrorCode          = XSVF_ERRORCODE( XSVF_ERROR_NONE );
-       pzXsvfFileName      = 0;
        xsvf_iDebugLevel    = 0;
 
        printf("XSVF Player v%s, Xilinx, Inc.\n", XSVF_VERSION);
index 98a8584156b5f9f31e3345f02a28dc2bd177a4b1..41b5ba0490673c737f5e76181b20ff5f82f459f6 100644 (file)
@@ -656,7 +656,6 @@ int do_onewire(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        int i;
        unsigned char ow_id[6];
        char str[32];
-       unsigned char ow_crc;
 
        /*
         * Clear 1-wire bit (open drain with pull-up)
@@ -675,11 +674,10 @@ int do_onewire(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        OWReadByte(); /* skip family code ( == 0x01) */
        for (i = 0; i < 6; i++)
                ow_id[i] = OWReadByte();
-       ow_crc = OWReadByte(); /* read crc */
+       OWReadByte(); /* read crc */
 
-       sprintf(str, "%08X%04X",
-               *(unsigned int *)&ow_id[0],
-               *(unsigned short *)&ow_id[4]);
+       sprintf(str, "%02X%02X%02X%02X%02X%02X",
+               ow_id[0], ow_id[1], ow_id[2], ow_id[3], ow_id[4], ow_id[5]);
        printf("Setting environment variable 'ow_id' to %s\n", str);
        setenv("ow_id", str);
 
index f27d65ed16509cf723f1d3cfa2376dfcd45ace52..08311c963052d808d30f6d13d149504477e2c16d 100644 (file)
@@ -566,7 +566,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        volatile unsigned int *ptr;
        int count = 0;
        int count2 = 0;
-       int status;
+       int status = 0;
        char addr[16];
        char str[] = "\\|/-";
        char *local_args[2];
@@ -622,7 +622,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                break;
        }
 
-       return 0;
+       return status;
 }
 
 U_BOOT_CMD(
index 615e32af9f9d36bc52c3ddee2cbad5196c063aac..9767cf2ca04f96c558546566ec59f9d87ce9bf5b 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#undef DEBUG
-/* #define DEBUG */
-#ifdef CONFIG_PCI
-#define        MAP_PCI
-#endif /* of CONFIG_PCI */
-
-#ifdef DEBUG
-#define DP(x) x
-#else
-#define DP(x)
-#endif
-
 int set_dfcdlInit(void);       /* setup delay line of Mv64360 */
 
 /* ------------------------------------------------------------------------- */
@@ -250,8 +238,6 @@ NSto10PS(unsigned char spd_byte)
 /* static int check_dimm(uchar slot, AUX_MEM_DIMM_INFO *info) */
 static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
 {
-       unsigned long spd_checksum;
-
        uchar addr = slot == 0 ? DIMM0_I2C_ADDR : DIMM1_I2C_ADDR;
        int ret;
        unsigned int i, j, density = 1, devicesForErrCheck = 0;
@@ -264,7 +250,7 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
        uchar supp_cal, cal_val;
        ulong memclk, tmemclk;
        ulong tmp;
-       uchar trp_clocks = 0, trcd_clocks, tras_clocks, trrd_clocks;
+       uchar trp_clocks = 0, tras_clocks;
        uchar data[128];
 
        memclk = gd->bus_clk;
@@ -275,11 +261,11 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
 
        ret = 0;
 
-       DP (puts ("before i2c read\n"));
+       debug("before i2c read\n");
 
        ret = i2c_read (addr, 0, 2, data, 128);
 
-       DP (puts ("after i2c read\n"));
+       debug("after i2c read\n");
 
        if ((data[64] != 'e') || (data[65] != 's') || (data[66] != 'd')
            || (data[67] != '-') || (data[68] != 'g') || (data[69] != 'm')
@@ -345,7 +331,7 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
        }
 
        if (ret) {
-               DP (printf ("No DIMM in slot %d [err = %x]\n", slot, ret));
+               debug("No DIMM in slot %d [err = %x]\n", slot, ret);
                return 0;
        } else
                dimmInfo->slot = slot;  /* start to fill up dimminfo for this "slot" */
@@ -402,8 +388,9 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
 /*------------------------------------------------------------------------------------------------------------------------------*/
 /* calculate SPD checksum */
 /*------------------------------------------------------------------------------------------------------------------------------*/
-       spd_checksum = 0;
 #if 0                          /* test-only */
+       spd_checksum = 0;
+
        for (i = 0; i <= 62; i++) {
                spd_checksum += data[i];
        }
@@ -424,46 +411,40 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        dimmInfo->memoryType = (data[i] == 0x7) ? DDR : SDRAM;
 #ifdef DEBUG
                        if (dimmInfo->memoryType == 0)
-                               DP (printf
-                                   ("Dram_type in slot %d is:                  SDRAM\n",
-                                    dimmInfo->slot));
+                               debug("Dram_type in slot %d is:                 SDRAM\n",
+                                    dimmInfo->slot);
                        if (dimmInfo->memoryType == 1)
-                               DP (printf
-                                   ("Dram_type in slot %d is:                  DDRAM\n",
-                                    dimmInfo->slot));
+                               debug("Dram_type in slot %d is:                 DDRAM\n",
+                                    dimmInfo->slot);
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 3: /* Number Of Row Addresses */
                        dimmInfo->numOfRowAddresses = data[i];
-                       DP (printf
-                           ("Module Number of row addresses:           %d\n",
-                            dimmInfo->numOfRowAddresses));
+                       debug("Module Number of row addresses:          %d\n",
+                            dimmInfo->numOfRowAddresses);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 4: /* Number Of Column Addresses */
                        dimmInfo->numOfColAddresses = data[i];
-                       DP (printf
-                           ("Module Number of col addresses:           %d\n",
-                            dimmInfo->numOfColAddresses));
+                       debug("Module Number of col addresses:          %d\n",
+                            dimmInfo->numOfColAddresses);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 5: /* Number Of Module Banks */
                        dimmInfo->numOfModuleBanks = data[i];
-                       DP (printf
-                           ("Number of Banks on Mod. :                                 %d\n",
-                            dimmInfo->numOfModuleBanks));
+                       debug("Number of Banks on Mod. :                                %d\n",
+                            dimmInfo->numOfModuleBanks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 6: /* Data Width */
                        dimmInfo->dataWidth = data[i];
-                       DP (printf
-                           ("Module Data Width:                                %d\n",
-                            dimmInfo->dataWidth));
+                       debug("Module Data Width:                               %d\n",
+                            dimmInfo->dataWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -471,33 +452,27 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        switch (data[i]) {
                        case 0x0:
                                dimmInfo->voltageInterface = TTL_5V_TOLERANT;
-                               DP (printf
-                                   ("Module is                                         TTL_5V_TOLERANT\n"));
+                               debug("Module is                                        TTL_5V_TOLERANT\n");
                                break;
                        case 0x1:
                                dimmInfo->voltageInterface = LVTTL;
-                               DP (printf
-                                   ("Module is                                         LVTTL\n"));
+                               debug("Module is                                        LVTTL\n");
                                break;
                        case 0x2:
                                dimmInfo->voltageInterface = HSTL_1_5V;
-                               DP (printf
-                                   ("Module is                                         TTL_5V_TOLERANT\n"));
+                               debug("Module is                                        TTL_5V_TOLERANT\n");
                                break;
                        case 0x3:
                                dimmInfo->voltageInterface = SSTL_3_3V;
-                               DP (printf
-                                   ("Module is                                         HSTL_1_5V\n"));
+                               debug("Module is                                        HSTL_1_5V\n");
                                break;
                        case 0x4:
                                dimmInfo->voltageInterface = SSTL_2_5V;
-                               DP (printf
-                                   ("Module is                                         SSTL_2_5V\n"));
+                               debug("Module is                                        SSTL_2_5V\n");
                                break;
                        default:
                                dimmInfo->voltageInterface = VOLTAGE_UNKNOWN;
-                               DP (printf
-                                   ("Module is                                         VOLTAGE_UNKNOWN\n"));
+                               debug("Module is                                        VOLTAGE_UNKNOWN\n");
                                break;
                        }
                        break;
@@ -516,9 +491,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancy_RoP =
                                rightOfPoint;
-                       DP (printf
-                           ("Minimum Cycle Time At Max CasLatancy:             %d.%d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                       debug("Minimum Cycle Time At Max CasLatancy:            %d.%d [ns]\n",
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -531,9 +505,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOut_LoP = leftOfPoint;
                        dimmInfo->clockToDataOut_RoP = rightOfPoint;
-                       DP (printf
-                           ("Clock To Data Out:                                %d.%2d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                       debug("Clock To Data Out:                               %d.%2d [ns]\n",
+                            leftOfPoint, rightOfPoint);
                        /*dimmInfo->clockToDataOut */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
@@ -541,42 +514,37 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
 #ifdef CONFIG_MV64360_ECC
                case 11:        /* Error Check Type */
                        dimmInfo->errorCheckType = data[i];
-                       DP (printf
-                           ("Error Check Type (0=NONE):                        %d\n",
-                            dimmInfo->errorCheckType));
+                       debug("Error Check Type (0=NONE):                       %d\n",
+                            dimmInfo->errorCheckType);
                        break;
 #endif /* of ifdef CONFIG_MV64360_ECC */
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 12:        /* Refresh Interval */
                        dimmInfo->RefreshInterval = data[i];
-                       DP (printf
-                           ("RefreshInterval (80= Self refresh Normal, 15.625us) : %x\n",
-                            dimmInfo->RefreshInterval));
+                       debug("RefreshInterval (80= Self refresh Normal, 15.625us) : %x\n",
+                            dimmInfo->RefreshInterval);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 13:        /* Sdram Width */
                        dimmInfo->sdramWidth = data[i];
-                       DP (printf
-                           ("Sdram Width:                                      %d\n",
-                            dimmInfo->sdramWidth));
+                       debug("Sdram Width:                                     %d\n",
+                            dimmInfo->sdramWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 14:        /* Error Check Data Width */
                        dimmInfo->errorCheckDataWidth = data[i];
-                       DP (printf
-                           ("Error Check Data Width:                   %d\n",
-                            dimmInfo->errorCheckDataWidth));
+                       debug("Error Check Data Width:                  %d\n",
+                            dimmInfo->errorCheckDataWidth);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 15:        /* Minimum Clock Delay */
                        dimmInfo->minClkDelay = data[i];
-                       DP (printf
-                           ("Minimum Clock Delay:                              %d\n",
-                            dimmInfo->minClkDelay));
+                       debug("Minimum Clock Delay:                             %d\n",
+                            dimmInfo->minClkDelay);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -592,26 +560,24 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
 
                        dimmInfo->burstLengthSupported = data[i];
 #ifdef DEBUG
-                       DP (printf
-                           ("Burst Length Supported:                   "));
+                       debug("Burst Length Supported:                  ");
                        if (dimmInfo->burstLengthSupported & 0x01)
-                               DP (printf ("1, "));
+                               debug("1, ");
                        if (dimmInfo->burstLengthSupported & 0x02)
-                               DP (printf ("2, "));
+                               debug("2, ");
                        if (dimmInfo->burstLengthSupported & 0x04)
-                               DP (printf ("4, "));
+                               debug("4, ");
                        if (dimmInfo->burstLengthSupported & 0x08)
-                               DP (printf ("8, "));
-                       DP (printf (" Bit \n"));
+                               debug("8, ");
+                       debug(" Bit \n");
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 17:        /* Number Of Banks On Each Device */
                        dimmInfo->numOfBanksOnEachDevice = data[i];
-                       DP (printf
-                           ("Number Of Banks On Each Chip:                     %d\n",
-                            dimmInfo->numOfBanksOnEachDevice));
+                       debug("Number Of Banks On Each Chip:                    %d\n",
+                            dimmInfo->numOfBanksOnEachDevice);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -631,34 +597,32 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                         ********************************************************/
                        dimmInfo->suportedCasLatencies = data[i];
 #ifdef DEBUG
-                       DP (printf
-                           ("Suported Cas Latencies: (CL)                      "));
+                       debug("Suported Cas Latencies: (CL)                     ");
                        if (dimmInfo->memoryType == 0) {        /* SDRAM */
                                for (k = 0; k <= 7; k++) {
                                        if (dimmInfo->
                                            suportedCasLatencies & (1 << k))
-                                               DP (printf
-                                                   ("%d,                       ",
-                                                    k + 1));
+                                               debug("%d,                      ",
+                                                    k + 1);
                                }
 
                        } else {        /* DDR-RAM */
 
                                if (dimmInfo->suportedCasLatencies & 1)
-                                       DP (printf ("1, "));
+                                       debug("1, ");
                                if (dimmInfo->suportedCasLatencies & 2)
-                                       DP (printf ("1.5, "));
+                                       debug("1.5, ");
                                if (dimmInfo->suportedCasLatencies & 4)
-                                       DP (printf ("2, "));
+                                       debug("2, ");
                                if (dimmInfo->suportedCasLatencies & 8)
-                                       DP (printf ("2.5, "));
+                                       debug("2.5, ");
                                if (dimmInfo->suportedCasLatencies & 16)
-                                       DP (printf ("3, "));
+                                       debug("3, ");
                                if (dimmInfo->suportedCasLatencies & 32)
-                                       DP (printf ("3.5, "));
+                                       debug("3.5, ");
 
                        }
-                       DP (printf ("\n"));
+                       debug("\n");
 #endif
                        /* Calculating MAX CAS latency */
                        for (j = 7; j > 0; j--) {
@@ -670,8 +634,7 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                                /* CAS latency 1, 1.5, 2, 2.5, 3, 3.5 */
                                                switch (j) {
                                                case 7:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n"));
+                                                       debug("Max. Cas Latencies (DDR):                        ERROR !!!\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                =
@@ -679,8 +642,7 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                                        hang ();
                                                        break;
                                                case 6:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         ERROR !!!\n"));
+                                                       debug("Max. Cas Latencies (DDR):                        ERROR !!!\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                =
@@ -688,36 +650,31 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                                        hang ();
                                                        break;
                                                case 5:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         3.5 clk's\n"));
+                                                       debug("Max. Cas Latencies (DDR):                        3.5 clk's\n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_3_5;
                                                        break;
                                                case 4:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         3 clk's \n"));
+                                                       debug("Max. Cas Latencies (DDR):                        3 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_3;
                                                        break;
                                                case 3:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         2.5 clk's \n"));
+                                                       debug("Max. Cas Latencies (DDR):                        2.5 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_2_5;
                                                        break;
                                                case 2:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         2 clk's \n"));
+                                                       debug("Max. Cas Latencies (DDR):                        2 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_2;
                                                        break;
                                                case 1:
-                                                       DP (printf
-                                                           ("Max. Cas Latencies (DDR):                         1.5 clk's \n"));
+                                                       debug("Max. Cas Latencies (DDR):                        1.5 clk's \n");
                                                        dimmInfo->
                                                                maxClSupported_DDR
                                                                = DDR_CL_1_5;
@@ -736,32 +693,29 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                                        dimmInfo->
                                                                maxCASlatencySupported_RoP
                                                                = 0;
-                                               DP (printf
-                                                   ("Max. Cas Latencies (DDR LoP.RoP Notation):        %d.%d \n",
+                                               debug("Max. Cas Latencies (DDR LoP.RoP Notation):       %d.%d \n",
                                                     dimmInfo->
                                                     maxCASlatencySupported_LoP,
                                                     dimmInfo->
-                                                    maxCASlatencySupported_RoP));
+                                                    maxCASlatencySupported_RoP);
                                                break;
                                        case SDRAM:
                                                /* CAS latency 1, 2, 3, 4, 5, 6, 7 */
                                                dimmInfo->maxClSupported_SD = j;        /*  Cas Latency DDR-RAM Coded                   */
-                                               DP (printf
-                                                   ("Max. Cas Latencies (SD): %d\n",
+                                               debug("Max. Cas Latencies (SD): %d\n",
                                                     dimmInfo->
-                                                    maxClSupported_SD));
+                                                    maxClSupported_SD);
                                                dimmInfo->
                                                        maxCASlatencySupported_LoP
                                                        = j;
                                                dimmInfo->
                                                        maxCASlatencySupported_RoP
                                                        = 0;
-                                               DP (printf
-                                                   ("Max. Cas Latencies (DDR LoP.RoP Notation): %d.%d \n",
+                                               debug("Max. Cas Latencies (DDR LoP.RoP Notation): %d.%d \n",
                                                     dimmInfo->
                                                     maxCASlatencySupported_LoP,
                                                     dimmInfo->
-                                                    maxCASlatencySupported_RoP));
+                                                    maxCASlatencySupported_RoP);
                                                break;
                                        }
                                        break;
@@ -771,7 +725,7 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 21:        /* Buffered Address And Control Inputs */
-                       DP (printf ("\nModul Attributes (SPD Byte 21): \n"));
+                       debug("\nModul Attributes (SPD Byte 21): \n");
                        dimmInfo->bufferedAddrAndControlInputs =
                                data[i] & BIT0;
                        dimmInfo->registeredAddrAndControlInputs =
@@ -784,62 +738,47 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                (data[i] & BIT5) >> 5;
                        dimmInfo->redundantRowAddressing =
                                (data[i] & BIT6) >> 6;
-#ifdef DEBUG
+
                        if (dimmInfo->bufferedAddrAndControlInputs == 1)
-                               DP (printf
-                                   (" - Buffered Address/Control Input:                Yes \n"));
+                               debug(" - Buffered Address/Control Input:               Yes \n");
                        else
-                               DP (printf
-                                   (" - Buffered Address/Control Input:                No \n"));
+                               debug(" - Buffered Address/Control Input:               No \n");
 
                        if (dimmInfo->registeredAddrAndControlInputs == 1)
-                               DP (printf
-                                   (" - Registered Address/Control Input:              Yes \n"));
+                               debug(" - Registered Address/Control Input:             Yes \n");
                        else
-                               DP (printf
-                                   (" - Registered Address/Control Input:              No \n"));
+                               debug(" - Registered Address/Control Input:             No \n");
 
                        if (dimmInfo->onCardPLL == 1)
-                               DP (printf
-                                   (" - On-Card PLL (clock):                           Yes \n"));
+                               debug(" - On-Card PLL (clock):                          Yes \n");
                        else
-                               DP (printf
-                                   (" - On-Card PLL (clock):                           No \n"));
+                               debug(" - On-Card PLL (clock):                          No \n");
 
                        if (dimmInfo->bufferedDQMBinputs == 1)
-                               DP (printf
-                                   (" - Bufferd DQMB Inputs:                           Yes \n"));
+                               debug(" - Bufferd DQMB Inputs:                          Yes \n");
                        else
-                               DP (printf
-                                   (" - Bufferd DQMB Inputs:                           No \n"));
+                               debug(" - Bufferd DQMB Inputs:                          No \n");
 
                        if (dimmInfo->registeredDQMBinputs == 1)
-                               DP (printf
-                                   (" - Registered DQMB Inputs:                        Yes \n"));
+                               debug(" - Registered DQMB Inputs:                       Yes \n");
                        else
-                               DP (printf
-                                   (" - Registered DQMB Inputs:                        No \n"));
+                               debug(" - Registered DQMB Inputs:                       No \n");
 
                        if (dimmInfo->differentialClockInput == 1)
-                               DP (printf
-                                   (" - Differential Clock Input:                      Yes \n"));
+                               debug(" - Differential Clock Input:                     Yes \n");
                        else
-                               DP (printf
-                                   (" - Differential Clock Input:                      No \n"));
+                               debug(" - Differential Clock Input:                     No \n");
 
                        if (dimmInfo->redundantRowAddressing == 1)
-                               DP (printf
-                                   (" - redundant Row Addressing:                      Yes \n"));
+                               debug(" - redundant Row Addressing:                     Yes \n");
                        else
-                               DP (printf
-                                   (" - redundant Row Addressing:                      No \n"));
+                               debug(" - redundant Row Addressing:                     No \n");
 
-#endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 22:        /* Suported AutoPreCharge */
-                       DP (printf ("\nModul Attributes (SPD Byte 22): \n"));
+                       debug("\nModul Attributes (SPD Byte 22): \n");
                        dimmInfo->suportedEarlyRasPreCharge = data[i] & BIT0;
                        dimmInfo->suportedAutoPreCharge =
                                (data[i] & BIT1) >> 1;
@@ -851,50 +790,37 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                (data[i] & BIT4) >> 4;
                        dimmInfo->suported5PercentUpperVCC =
                                (data[i] & BIT5) >> 5;
-#ifdef DEBUG
+
                        if (dimmInfo->suportedEarlyRasPreCharge == 1)
-                               DP (printf
-                                   (" - Early Ras Precharge:                   Yes \n"));
+                               debug(" - Early Ras Precharge:                  Yes \n");
                        else
-                               DP (printf
-                                   (" -  Early Ras Precharge:                  No \n"));
+                               debug(" -  Early Ras Precharge:                 No \n");
 
                        if (dimmInfo->suportedAutoPreCharge == 1)
-                               DP (printf
-                                   (" - AutoPreCharge:                         Yes \n"));
+                               debug(" - AutoPreCharge:                                Yes \n");
                        else
-                               DP (printf
-                                   (" -  AutoPreCharge:                                No \n"));
+                               debug(" -  AutoPreCharge:                               No \n");
 
                        if (dimmInfo->suportedPreChargeAll == 1)
-                               DP (printf
-                                   (" - Precharge All:                         Yes \n"));
+                               debug(" - Precharge All:                                Yes \n");
                        else
-                               DP (printf
-                                   (" -  Precharge All:                                No \n"));
+                               debug(" -  Precharge All:                               No \n");
 
                        if (dimmInfo->suportedWrite1ReadBurst == 1)
-                               DP (printf
-                                   (" - Write 1/ReadBurst:                             Yes \n"));
+                               debug(" - Write 1/ReadBurst:                            Yes \n");
                        else
-                               DP (printf
-                                   (" -  Write 1/ReadBurst:                            No \n"));
+                               debug(" -  Write 1/ReadBurst:                           No \n");
 
                        if (dimmInfo->suported5PercentLowVCC == 1)
-                               DP (printf
-                                   (" - lower VCC tolerance:                   5 Percent \n"));
+                               debug(" - lower VCC tolerance:                  5 Percent \n");
                        else
-                               DP (printf
-                                   ("  - lower VCC tolerance:                  10 Percent \n"));
+                               debug(" - lower VCC tolerance:                  10 Percent \n");
 
                        if (dimmInfo->suported5PercentUpperVCC == 1)
-                               DP (printf
-                                   (" - upper VCC tolerance:                   5 Percent \n"));
+                               debug(" - upper VCC tolerance:                  5 Percent \n");
                        else
-                               DP (printf
-                                   (" -  upper VCC tolerance:                  10 Percent \n"));
+                               debug(" -  upper VCC tolerance:                 10 Percent \n");
 
-#endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -911,9 +837,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancyMinus1_RoP =
                                rightOfPoint;
-                       DP (printf
-                           ("Minimum Cycle Time At 2nd highest CasLatancy (0 = Not supported): %d.%d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                       debug("Minimum Cycle Time At 2nd highest CasLatancy (0 = Not supported): %d.%d [ns]\n",
+                            leftOfPoint, rightOfPoint);
                        /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
@@ -927,9 +852,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOutMinus1_LoP = leftOfPoint;
                        dimmInfo->clockToDataOutMinus1_RoP = rightOfPoint;
-                       DP (printf
-                           ("Clock To Data Out (2nd CL value):                 %d.%2d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                       debug("Clock To Data Out (2nd CL value):                %d.%2d [ns]\n",
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -946,9 +870,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                                leftOfPoint;
                        dimmInfo->minimumCycleTimeAtMaxCasLatancyMinus2_RoP =
                                rightOfPoint;
-                       DP (printf
-                           ("Minimum Cycle Time At 3rd highest CasLatancy (0 = Not supported): %d.%d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                       debug("Minimum Cycle Time At 3rd highest CasLatancy (0 = Not supported): %d.%d [ns]\n",
+                            leftOfPoint, rightOfPoint);
                        /*dimmInfo->minimumCycleTimeAtMaxCasLatancy */
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
@@ -962,9 +885,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        rightOfPoint = time_tmp % div;
                        dimmInfo->clockToDataOutMinus2_LoP = leftOfPoint;
                        dimmInfo->clockToDataOutMinus2_RoP = rightOfPoint;
-                       DP (printf
-                           ("Clock To Data Out (3rd CL value):                 %d.%2d [ns]\n",
-                            leftOfPoint, rightOfPoint));
+                       debug("Clock To Data Out (3rd CL value):                %d.%2d [ns]\n",
+                            leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -981,12 +903,10 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        trp_clocks =
                                (dimmInfo->minRowPrechargeTime +
                                 (tmemclk - 1)) / tmemclk;
-                       DP (printf
-                           ("*** 1 clock cycle = %ld  10ps intervalls = %ld.%ld ns****\n",
-                            tmemclk, tmemclk / 100, tmemclk % 100));
-                       DP (printf
-                           ("Minimum Row Precharge Time [ns]:          %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                       debug("*** 1 clock cycle = %ld  10ps intervalls = %ld.%ld ns****\n",
+                            tmemclk, tmemclk / 100, tmemclk % 100);
+                       debug("Minimum Row Precharge Time [ns]:         %d.%2d = in Clk cycles %d\n",
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1000,12 +920,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        rightOfPoint = (data[i] & maskRightOfPoint) * 25;
 
                        dimmInfo->minRowActiveRowActiveDelay = ((leftOfPoint * 100) + rightOfPoint);    /* measured in 100ns Intervals */
-                       trrd_clocks =
-                               (dimmInfo->minRowActiveRowActiveDelay +
-                                (tmemclk - 1)) / tmemclk;
-                       DP (printf
-                           ("Minimum Row Active -To- Row Active Delay [ns]:    %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                       debug("Minimum Row Active -To- Row Active Delay [ns]:   %d.%2d = in Clk cycles %d\n",
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1019,12 +935,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        rightOfPoint = (data[i] & maskRightOfPoint) * 25;
 
                        dimmInfo->minRowActiveRowActiveDelay = ((leftOfPoint * 100) + rightOfPoint);    /* measured in 100ns Intervals */
-                       trcd_clocks =
-                               (dimmInfo->minRowActiveRowActiveDelay +
-                                (tmemclk - 1)) / tmemclk;
-                       DP (printf
-                           ("Minimum Ras-To-Cas Delay [ns]:                    %d.%2d = in Clk cycles %d\n",
-                            leftOfPoint, rightOfPoint, trp_clocks));
+                       debug("Minimum Ras-To-Cas Delay [ns]:                   %d.%2d = in Clk cycles %d\n",
+                            leftOfPoint, rightOfPoint, trp_clocks);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1033,41 +945,38 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        tras_clocks =
                                (NSto10PS (data[i]) +
                                 (tmemclk - 1)) / tmemclk;
-                       DP (printf
-                           ("Minimum Ras Pulse Width [ns]:                     %d = in Clk cycles %d\n",
-                            dimmInfo->minRasPulseWidth, tras_clocks));
+                       debug("Minimum Ras Pulse Width [ns]:                    %d = in Clk cycles %d\n",
+                            dimmInfo->minRasPulseWidth, tras_clocks);
 
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
                case 31:        /* Module Bank Density */
                        dimmInfo->moduleBankDensity = data[i];
-                       DP (printf
-                           ("Module Bank Density:                              %d\n",
-                            dimmInfo->moduleBankDensity));
+                       debug("Module Bank Density:                             %d\n",
+                            dimmInfo->moduleBankDensity);
 #ifdef DEBUG
-                       DP (printf
-                           ("*** Offered Densities (more than 1 = Multisize-Module): "));
+                       debug("*** Offered Densities (more than 1 = Multisize-Module): ");
                        {
                                if (dimmInfo->moduleBankDensity & 1)
-                                       DP (printf ("4MB, "));
+                                       debug("4MB, ");
                                if (dimmInfo->moduleBankDensity & 2)
-                                       DP (printf ("8MB, "));
+                                       debug("8MB, ");
                                if (dimmInfo->moduleBankDensity & 4)
-                                       DP (printf ("16MB, "));
+                                       debug("16MB, ");
                                if (dimmInfo->moduleBankDensity & 8)
-                                       DP (printf ("32MB, "));
+                                       debug("32MB, ");
                                if (dimmInfo->moduleBankDensity & 16)
-                                       DP (printf ("64MB, "));
+                                       debug("64MB, ");
                                if (dimmInfo->moduleBankDensity & 32)
-                                       DP (printf ("128MB, "));
+                                       debug("128MB, ");
                                if ((dimmInfo->moduleBankDensity & 64)
                                    || (dimmInfo->moduleBankDensity & 128)) {
-                                       DP (printf ("ERROR, "));
+                                       debug("ERROR, ");
                                        hang ();
                                }
                        }
-                       DP (printf ("\n"));
+                       debug("\n");
 #endif
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
@@ -1093,9 +1002,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        }
                        dimmInfo->addrAndCommandSetupTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
-                           ("Address And Command Setup Time [ns]:              %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                       debug("Address And Command Setup Time [ns]:             %d.%d\n",
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1120,9 +1028,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        }
                        dimmInfo->addrAndCommandHoldTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
-                           ("Address And Command Hold Time [ns]:               %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                       debug("Address And Command Hold Time [ns]:              %d.%d\n",
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1147,9 +1054,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        }
                        dimmInfo->dataInputSetupTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
-                           ("Data Input Setup Time [ns]:                       %d.%d\n",
-                            sign * leftOfPoint, rightOfPoint));
+                       debug("Data Input Setup Time [ns]:                      %d.%d\n",
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
 
@@ -1174,9 +1080,8 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        }
                        dimmInfo->dataInputHoldTime =
                                (leftOfPoint * 100 + rightOfPoint) * sign;
-                       DP (printf
-                           ("Data Input Hold Time [ns]:                        %d.%d\n\n",
-                            sign * leftOfPoint, rightOfPoint));
+                       debug("Data Input Hold Time [ns]:                       %d.%d\n\n",
+                            sign * leftOfPoint, rightOfPoint);
                        break;
 /*------------------------------------------------------------------------------------------------------------------------------*/
                }
@@ -1213,7 +1118,7 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
        tmp *= dimmInfo->sdramWidth;
        tmp = tmp >> 24;        /* div by 0x4000000 (64M)       */
        dimmInfo->drb_size = (uchar) tmp;
-       DP (printf ("Module DRB size (n*64Mbit): %d\n", dimmInfo->drb_size));
+       debug("Module DRB size (n*64Mbit): %d\n", dimmInfo->drb_size);
 
        /* try a CAS latency of 3 first... */
 
@@ -1236,11 +1141,11 @@ static int check_dimm (uchar slot, AUX_MEM_DIMM_INFO * dimmInfo)
                        cal_val = 4;
        }
 
-       DP (printf ("cal_val = %d\n", cal_val * 5));
+       debug("cal_val = %d\n", cal_val * 5);
 
        /* bummer, did't work... */
        if (cal_val == 0) {
-               DP (printf ("Couldn't find a good CAS latency\n"));
+               debug("Couldn't find a good CAS latency\n");
                hang ();
                return 0;
        }
@@ -1267,81 +1172,74 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
 
        /* Program the GT with the discovered data */
        if (info->registeredAddrAndControlInputs == true)
-               DP (printf
-                   ("Module is registered, but we do not support registered Modules !!!\n"));
+               debug("Module is registered, but we do not support registered Modules !!!\n");
 
        /* delay line */
        set_dfcdlInit ();       /* may be its not needed */
-       DP (printf ("Delay line set done\n"));
+       debug("Delay line set done\n");
 
        /* set SDRAM mode NOP */ /* To_do check it */
        GT_REG_WRITE (SDRAM_OPERATION, 0x5);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 1418: Module still busy ... please wait... ***\n"));
+               debug("\n*** SDRAM_OPERATION 1418: Module still busy ... please wait... ***\n");
        }
 
 #ifdef CONFIG_MV64360_ECC
        if ((info->errorCheckType == 0x2) && (CPCI750_ECC_TEST)) {
                /* DRAM has ECC, so turn it on */
                sdram_config_reg |= BIT18;
-               DP(printf("Enabling ECC\n"));
+               debug("Enabling ECC\n");
        }
 #endif /* of ifdef CONFIG_MV64360_ECC */
 
        /* SDRAM configuration */
        GT_REG_WRITE(SDRAM_CONFIG, sdram_config_reg);
-       DP (printf ("sdram_conf 0x1400: %08x\n", GTREGREAD (SDRAM_CONFIG)));
+       debug("sdram_conf 0x1400: %08x\n", GTREGREAD (SDRAM_CONFIG));
 
        /* SDRAM open pages controll keep open as much as I can */
        GT_REG_WRITE (SDRAM_OPEN_PAGES_CONTROL, 0x0);
-       DP (printf
-           ("sdram_open_pages_controll 0x1414: %08x\n",
-            GTREGREAD (SDRAM_OPEN_PAGES_CONTROL)));
+       debug("sdram_open_pages_controll 0x1414: %08x\n",
+            GTREGREAD (SDRAM_OPEN_PAGES_CONTROL));
 
 
        /* SDRAM D_UNIT_CONTROL_LOW 0x1404 */
        tmp = (GTREGREAD (D_UNIT_CONTROL_LOW) & 0x01);  /* Clock Domain Sync from power on reset */
        if (tmp == 0)
-               DP (printf ("Core Signals are sync (by HW-Setting)!!!\n"));
+               debug("Core Signals are sync (by HW-Setting)!!!\n");
        else
-               DP (printf
-                   ("Core Signals syncs. are bypassed (by HW-Setting)!!!\n"));
+               debug("Core Signals syncs. are bypassed (by HW-Setting)!!!\n");
 
        /* SDRAM set CAS Lentency according to SPD information */
        switch (info->memoryType) {
        case SDRAM:
-               DP (printf ("### SD-RAM not supported yet !!!\n"));
+               debug("### SD-RAM not supported yet !!!\n");
                hang ();
                /* ToDo fill SD-RAM if needed !!!!! */
                break;
 
        case DDR:
-               DP (printf ("### SET-CL for DDR-RAM\n"));
+               debug("### SET-CL for DDR-RAM\n");
 
                switch (info->maxClSupported_DDR) {
                case DDR_CL_3:
                        tmp_dunit_control_low = 0x3c000000;     /* Read-Data sampled on falling edge of Clk */
                        tmp_sdram_mode = 0x32;  /* CL=3 Burstlength = 4 */
-                       DP (printf
-                           ("Max. CL is 3 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                            tmp_sdram_mode, tmp_dunit_control_low));
+                       debug("Max. CL is 3 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
+                            tmp_sdram_mode, tmp_dunit_control_low);
                        break;
 
                case DDR_CL_2_5:
                        if (tmp == 1) { /* clocks sync */
                                tmp_dunit_control_low = 0x24000000;     /* Read-Data sampled on falling edge of Clk */
                                tmp_sdram_mode = 0x62;  /* CL=2,5 Burstlength = 4 */
-                               DP (printf
-                                   ("Max. CL is 2,5s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                               debug("Max. CL is 2,5s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        } else {        /* clk sync. bypassed     */
 
                                tmp_dunit_control_low = 0x03000000;     /* Read-Data sampled on rising edge of Clk */
                                tmp_sdram_mode = 0x62;  /* CL=2,5 Burstlength = 4 */
-                               DP (printf
-                                   ("Max. CL is 2,5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                               debug("Max. CL is 2,5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
 
@@ -1349,16 +1247,14 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                        if (tmp == 1) { /* Sync */
                                tmp_dunit_control_low = 0x03000000;     /* Read-Data sampled on rising edge of Clk */
                                tmp_sdram_mode = 0x22;  /* CL=2 Burstlength = 4 */
-                               DP (printf
-                                   ("Max. CL is 2s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                               debug("Max. CL is 2s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        } else {        /* Not sync.      */
 
                                tmp_dunit_control_low = 0x3b000000;     /* Read-Data sampled on rising edge of Clk */
                                tmp_sdram_mode = 0x22;  /* CL=2 Burstlength = 4 */
-                               DP (printf
-                                   ("Max. CL is 2 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                               debug("Max. CL is 2 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
 
@@ -1366,16 +1262,14 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                        if (tmp == 1) { /* Sync */
                                tmp_dunit_control_low = 0x23000000;     /* Read-Data sampled on falling edge of Clk */
                                tmp_sdram_mode = 0x52;  /* CL=1,5 Burstlength = 4 */
-                               DP (printf
-                                   ("Max. CL is 1,5s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                               debug("Max. CL is 1,5s CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        } else {        /* not sync */
 
                                tmp_dunit_control_low = 0x1a000000;     /* Read-Data sampled on rising edge of Clk */
                                tmp_sdram_mode = 0x52;  /* CL=1,5 Burstlength = 4 */
-                               DP (printf
-                                   ("Max. CL is 1,5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
-                                    tmp_sdram_mode, tmp_dunit_control_low));
+                               debug("Max. CL is 1,5 CLKs 0x141c= %08lx, 0x1404 = %08lx\n",
+                                    tmp_sdram_mode, tmp_dunit_control_low);
                        }
                        break;
 
@@ -1393,8 +1287,7 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        /* set SDRAM mode SetCommand 0x1418 */
        GT_REG_WRITE (SDRAM_OPERATION, 0x3);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n"));
+               debug("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n");
        }
 
 
@@ -1415,8 +1308,7 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        /* set SDRAM mode SetCommand 0x1418 */
        GT_REG_WRITE (SDRAM_OPERATION, 0x3);
        while (GTREGREAD (SDRAM_OPERATION) != 0) {
-               DP (printf
-                   ("\n*** SDRAM_OPERATION 1418 after D_UNIT_CONTROL_LOW: Module still busy ... please wait... ***\n"));
+               debug("\n*** SDRAM_OPERATION 1418 after D_UNIT_CONTROL_LOW: Module still busy ... please wait... ***\n");
        }
 
 /*------------------------------------------------------------------------------ */
@@ -1428,41 +1320,39 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        tmp = 0x02;
 
 
-       DP (printf ("drb_size (n*64Mbit): %d\n", info->drb_size));
+       debug("drb_size (n*64Mbit): %d\n", info->drb_size);
        switch (info->drb_size) {
        case 1:         /* 64 Mbit */
        case 2:         /* 128 Mbit */
-               DP (printf ("RAM-Device_size 64Mbit or 128Mbit)\n"));
+               debug("RAM-Device_size 64Mbit or 128Mbit)\n");
                tmp |= (0x00 << 4);
                break;
        case 4:         /* 256 Mbit */
        case 8:         /* 512 Mbit */
-               DP (printf ("RAM-Device_size 256Mbit or 512Mbit)\n"));
+               debug("RAM-Device_size 256Mbit or 512Mbit)\n");
                tmp |= (0x01 << 4);
                break;
        case 16:                /* 1 Gbit */
        case 32:                /* 2 Gbit */
-               DP (printf ("RAM-Device_size 1Gbit or 2Gbit)\n"));
+               debug("RAM-Device_size 1Gbit or 2Gbit)\n");
                tmp |= (0x02 << 4);
                break;
        default:
                printf ("Error in dram size calculation\n");
-               DP (printf ("Assume: RAM-Device_size 1Gbit or 2Gbit)\n"));
+               debug("Assume: RAM-Device_size 1Gbit or 2Gbit)\n");
                tmp |= (0x02 << 4);
                return 1;
        }
 
        /* SDRAM bank parameters */
        /* the param registers for slot 1 (banks 2+3) are offset by 0x8 */
-       DP (printf
-           ("setting up slot %d config with: %08lx \n", info->slot, tmp));
+       debug("setting up slot %d config with: %08lx \n", info->slot, tmp);
        GT_REG_WRITE (SDRAM_ADDR_CONTROL, tmp);
 
 /* ------------------------------------------------------------------------------ */
 
-       DP (printf
-           ("setting up sdram_timing_control_low with: %08x \n",
-            0x11511220));
+       debug("setting up sdram_timing_control_low with: %08x \n",
+            0x11511220);
        GT_REG_WRITE (SDRAM_TIMING_CONTROL_LOW, 0x11511220);
 
 
@@ -1474,38 +1364,33 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
        if (info->registeredAddrAndControlInputs
            || info->registeredDQMBinputs) {
                tmp |= (1 << 17);
-               DP (printf
-                   ("SPD says: registered Addr. and Cont.: %d; registered DQMBinputs: %d\n",
+               debug("SPD says: registered Addr. and Cont.: %d; registered DQMBinputs: %d\n",
                     info->registeredAddrAndControlInputs,
-                    info->registeredDQMBinputs));
+                    info->registeredDQMBinputs);
        }
 
        /* Use buffer 1 to return read data to the CPU
         * Page 426 MV64360 */
        tmp |= (1 << 26);
-       DP (printf
-           ("Before Buffer assignment - sdram_conf: %08x\n",
-            GTREGREAD (SDRAM_CONFIG)));
-       DP (printf
-           ("After Buffer assignment - sdram_conf: %08x\n",
-            GTREGREAD (SDRAM_CONFIG)));
+       debug("Before Buffer assignment - sdram_conf: %08x\n",
+            GTREGREAD (SDRAM_CONFIG));
+       debug("After Buffer assignment - sdram_conf: %08x\n",
+            GTREGREAD (SDRAM_CONFIG));
 
        /* SDRAM timing To_do: */
 
 
        tmp = GTREGREAD (SDRAM_TIMING_CONTROL_HIGH);
-       DP (printf ("# sdram_timing_control_high is : %08lx \n", tmp));
+       debug("# sdram_timing_control_high is : %08lx \n", tmp);
 
        /* SDRAM address decode register */
        /* program this with the default value */
        tmp = GTREGREAD (SDRAM_ADDR_CONTROL);
-       DP (printf
-           ("SDRAM address control (before: decode): %08x  ",
-            GTREGREAD (SDRAM_ADDR_CONTROL)));
+       debug("SDRAM address control (before: decode): %08x  ",
+            GTREGREAD (SDRAM_ADDR_CONTROL));
        GT_REG_WRITE (SDRAM_ADDR_CONTROL, (tmp | 0x2));
-       DP (printf
-           ("SDRAM address control (after: decode): %08x\n",
-            GTREGREAD (SDRAM_ADDR_CONTROL)));
+       debug("SDRAM address control (after: decode): %08x\n",
+            GTREGREAD (SDRAM_ADDR_CONTROL));
 
        /* set the SDRAM configuration for each bank */
 
@@ -1514,8 +1399,7 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                int l, l1;
 
                i = info->slot;
-               DP (printf
-                   ("\n*** Running a MRS cycle for bank %d ***\n", i));
+               debug("\n*** Running a MRS cycle for bank %d ***\n", i);
 
                /* map the bank */
                memory_map_bank (i, 0, GB / 4);
@@ -1525,15 +1409,13 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                GT_REG_WRITE (EXTENDED_DRAM_MODE, 0x0);
                GT_REG_WRITE (SDRAM_OPERATION, 0x4);
                while (GTREGREAD (SDRAM_OPERATION) != 0) {
-                       DP (printf
-                           ("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n"));
+                       debug("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n");
                }
 
                GT_REG_WRITE (SDRAM_MODE, tmp | 0x80);
                GT_REG_WRITE (SDRAM_OPERATION, 0x3);
                while (GTREGREAD (SDRAM_OPERATION) != 0) {
-                       DP (printf
-                           ("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n"));
+                       debug("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n");
                }
                l1 = 0;
                for (l=0;l<200;l++)
@@ -1542,15 +1424,13 @@ int setup_sdram (AUX_MEM_DIMM_INFO * info)
                GT_REG_WRITE (SDRAM_MODE, tmp);
                GT_REG_WRITE (SDRAM_OPERATION, 0x3);
                while (GTREGREAD (SDRAM_OPERATION) != 0) {
-                       DP (printf
-                           ("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n"));
+                       debug("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n");
                }
 
                /* switch back to normal operation mode */
                GT_REG_WRITE (SDRAM_OPERATION, 0x5);
                while (GTREGREAD (SDRAM_OPERATION) != 0) {
-                       DP (printf
-                           ("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n"));
+                       debug("\n*** SDRAM_OPERATION 1418 after SDRAM_MODE: Module still busy ... please wait... ***\n");
                }
 
 #endif /* test only */
@@ -1597,7 +1477,7 @@ dram_size(long int *base, long int maxsize)
            *b=save2;
 
            if (val != cnt) {
-                   DP(printf("Found %08x  at Address %08x (failure)\n", (unsigned int)val, (unsigned int) addr));
+                   debug("Found %08x  at Address %08x (failure)\n", (unsigned int)val, (unsigned int) addr);
                    /* fix boundary condition.. STARTVAL means zero */
                    if(cnt==STARTVAL/sizeof(long)) cnt=0;
                    return (cnt * sizeof(long));
@@ -1690,7 +1570,6 @@ int mv_dma_transfer(int engine, ulong source_addr,
 phys_size_t
 initdram(int board_type)
 {
-       int s0 = 0, s1 = 0;
        int checkbank[4] = { [0 ... 3] = 0 };
        ulong realsize, total, check;
        AUX_MEM_DIMM_INFO dimmInfo1;
@@ -1709,10 +1588,10 @@ initdram(int board_type)
                printf("Skipping SD- DDRRAM setup due to NHR bit being set\n");
        } else {
                /* DIMM0 */
-               s0 = check_dimm(0, &dimmInfo1);
+               (void)check_dimm(0, &dimmInfo1);
 
                /* DIMM1 */
-               s1 = check_dimm(1, &dimmInfo2);
+               (void)check_dimm(1, &dimmInfo2);
 
                memory_map_bank(0, 0, 0);
                memory_map_bank(1, 0, 0);
index 4946538f4bbcf31f13468f12867864cbb4c2f7e3..001480876245399e9fb9a43a2d74a1274bdfbde7 100644 (file)
@@ -132,8 +132,6 @@ static void showPci9054 (void)
 
 static void updatePci9054 (void)
 {
-       int val;
-
        /*
         * Set EEPROM write-protect register to 0
         */
@@ -141,44 +139,44 @@ static void updatePci9054 (void)
                  in_be32 ((void *)(pci9054_iobase + 0x0c)) & 0xffff00ff);
 
        /* Long Serial EEPROM Load Registers... */
-       val = PciEepromWriteLongVPD (0x00, 0x905410b5);
-       val = PciEepromWriteLongVPD (0x04, 0x09800001); /* other input controller */
-       val = PciEepromWriteLongVPD (0x08, 0x28140100);
+       PciEepromWriteLongVPD (0x00, 0x905410b5);
+       PciEepromWriteLongVPD (0x04, 0x09800001);       /* other input controller */
+       PciEepromWriteLongVPD (0x08, 0x28140100);
 
-       val = PciEepromWriteLongVPD (0x0c, 0x00000000); /* MBOX0... */
-       val = PciEepromWriteLongVPD (0x10, 0x00000000);
+       PciEepromWriteLongVPD (0x0c, 0x00000000);       /* MBOX0... */
+       PciEepromWriteLongVPD (0x10, 0x00000000);
 
        /* las0: fpga access (0x0000.0000 ... 0x0003.ffff) */
-       val = PciEepromWriteLongVPD (0x14, 0xfffc0000); /* LAS0RR... */
-       val = PciEepromWriteLongVPD (0x18, 0x00000001); /* LAS0BA */
+       PciEepromWriteLongVPD (0x14, 0xfffc0000);       /* LAS0RR... */
+       PciEepromWriteLongVPD (0x18, 0x00000001);       /* LAS0BA */
 
-       val = PciEepromWriteLongVPD (0x1c, 0x00200000); /* MARBR... */
-       val = PciEepromWriteLongVPD (0x20, 0x00300500); /* LMISC/BIGEND */
+       PciEepromWriteLongVPD (0x1c, 0x00200000);       /* MARBR... */
+       PciEepromWriteLongVPD (0x20, 0x00300500);       /* LMISC/BIGEND */
 
-       val = PciEepromWriteLongVPD (0x24, 0x00000000); /* EROMRR... */
-       val = PciEepromWriteLongVPD (0x28, 0x00000000); /* EROMBA */
+       PciEepromWriteLongVPD (0x24, 0x00000000);       /* EROMRR... */
+       PciEepromWriteLongVPD (0x28, 0x00000000);       /* EROMBA */
 
-       val = PciEepromWriteLongVPD (0x2c, 0x43030000); /* LBRD0... */
+       PciEepromWriteLongVPD (0x2c, 0x43030000);       /* LBRD0... */
 
-       val = PciEepromWriteLongVPD (0x30, 0x00000000); /* DMRR... */
-       val = PciEepromWriteLongVPD (0x34, 0x00000000);
-       val = PciEepromWriteLongVPD (0x38, 0x00000000);
+       PciEepromWriteLongVPD (0x30, 0x00000000);       /* DMRR... */
+       PciEepromWriteLongVPD (0x34, 0x00000000);
+       PciEepromWriteLongVPD (0x38, 0x00000000);
 
-       val = PciEepromWriteLongVPD (0x3c, 0x00000000); /* DMPBAM... */
-       val = PciEepromWriteLongVPD (0x40, 0x00000000);
+       PciEepromWriteLongVPD (0x3c, 0x00000000);       /* DMPBAM... */
+       PciEepromWriteLongVPD (0x40, 0x00000000);
 
        /* Extra Long Serial EEPROM Load Registers... */
-       val = PciEepromWriteLongVPD (0x44, 0x010212fe); /* PCISID... */
+       PciEepromWriteLongVPD (0x44, 0x010212fe);       /* PCISID... */
 
        /* las1: 505-sram access (0x0004.0000 ... 0x001f.ffff) */
        /* Offset to LAS1: Group 1: 0x00040000                 */
        /*                 Group 2: 0x00080000                 */
        /*                 Group 3: 0x000c0000                 */
-       val = PciEepromWriteLongVPD (0x48, 0xffe00000); /* LAS1RR */
-       val = PciEepromWriteLongVPD (0x4c, 0x00040001); /* LAS1BA */
-       val = PciEepromWriteLongVPD (0x50, 0x00000208); /* LBRD1 */ /* so wars bisher */
+       PciEepromWriteLongVPD (0x48, 0xffe00000);       /* LAS1RR */
+       PciEepromWriteLongVPD (0x4c, 0x00040001);       /* LAS1BA */
+       PciEepromWriteLongVPD (0x50, 0x00000208);       /* LBRD1 */ /* so wars bisher */
 
-       val = PciEepromWriteLongVPD (0x54, 0x00004c06); /* HotSwap... */
+       PciEepromWriteLongVPD (0x54, 0x00004c06);       /* HotSwap... */
 
        printf ("Finished writing defaults into PLX PCI9054 EEPROM!\n");
 }
@@ -186,8 +184,6 @@ static void updatePci9054 (void)
 
 static void clearPci9054 (void)
 {
-       int val;
-
        /*
         * Set EEPROM write-protect register to 0
         */
@@ -195,8 +191,8 @@ static void clearPci9054 (void)
                  in_be32 ((void *)(pci9054_iobase + 0x0c)) & 0xffff00ff);
 
        /* Long Serial EEPROM Load Registers... */
-       val = PciEepromWriteLongVPD (0x00, 0xffffffff);
-       val = PciEepromWriteLongVPD (0x04, 0xffffffff); /* other input controller */
+       PciEepromWriteLongVPD (0x00, 0xffffffff);
+       PciEepromWriteLongVPD (0x04, 0xffffffff);       /* other input controller */
 
        printf ("Finished clearing PLX PCI9054 EEPROM!\n");
 }
index d6a773797514226432d69c9af666dfcc59b80b07..e2f2aac7dc65d9a844c622176ad00b70752fad90 100644 (file)
@@ -44,7 +44,6 @@ unsigned long flash_init (void)
 {
        unsigned long size_b0;
        int i;
-       unsigned long base_b0;
 
        /* Init: no FLASHes known */
        for (i=0; i<CONFIG_SYS_MAX_FLASH_BANKS; ++i) {
@@ -63,8 +62,6 @@ unsigned long flash_init (void)
        /* Setup offsets */
        flash_get_offsets (-size_b0, &flash_info[0]);
 
-       base_b0 = -size_b0;
-
        /* Monitor protection ON by default */
        (void)flash_protect(FLAG_PROTECT_SET,
                            -monitor_flash_len,
index 74cfce9d5f2304c94f938e4ba92c8f97461d88a2..2c95ceda7575682ed4fd977ab42dec1c7c5efda1 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index ad43531cb1d92ce94019d0162e6a909a8d60e6f4..4882ffc0f9c377812ee9c9c96ee395e6f705aa98 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * (C) Copyright 2009-2011
index 181929230dbd79297e75975dbae119254fb6525d..3e94d19784c1dc61cacb8b4184d32c3f8086fe00 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index 15faa1627ed9f28b88c8c088f7edb759808de122..5dded41be7c189d8a53977b5ffce635424459dae 100644 (file)
@@ -4,7 +4,7 @@
  * esd electronic system design gmbh <www.esd.eu>
  *
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
index 13f90194264828e7fa2749245dfd6b6aa69195f0..f570ef340fa91df1e193c37eff808c19f768c5c2 100644 (file)
@@ -42,7 +42,6 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        unsigned int *ptr = 0;
        int count = 0;
        int count2 = 0;
-       int status;
        int i;
        char addr[16];
        char str[] = "\\|/-";
@@ -99,7 +98,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
                local_args[0] = argv[0];
                local_args[1] = NULL;
-               status = do_bootm (cmdtp, 0, 1, local_args);
+               do_bootm (cmdtp, 0, 1, local_args);
        }
 
        return 0;
index 02028768f94e38dd15bf29575713359efd29e889..f1ffb7b540782d0578ca2cf0c4dd6bc5610c5352 100644 (file)
@@ -342,7 +342,8 @@ U_BOOT_CMD(
 
 #if defined(CONFIG_PRAM)
 #include <environment.h>
-extern env_t *env_ptr;
+#include <search.h>
+#include <errno.h>
 
 int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
@@ -351,6 +352,10 @@ int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        u32 param;
        ulong *lptr;
 
+       env_t *envp;
+       char *res;
+       int len;
+
        v = getenv("pram");
        if (v)
                pram = simple_strtoul(v, NULL, 10);
@@ -384,7 +389,15 @@ int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
        /* env is first (4k aligned) */
        nextbase -= ((CONFIG_ENV_SIZE + 4096 - 1) & ~(4096 - 1));
-       memcpy((void*)nextbase, env_ptr, CONFIG_ENV_SIZE);
+       envp = (env_t *)nextbase;
+       res = (char *)envp->data;
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
+       if (len < 0) {
+               error("Cannot export environment: errno = %d\n", errno);
+               return 1;
+       }
+       envp->crc = crc32(0, envp->data, ENV_SIZE);
+
        *(--lptr) = CONFIG_ENV_SIZE;     /* size */
        *(--lptr) = base - nextbase;  /* offset | type=0 */
 
index 5236f44468f9d494ad6edd9dada2c9dadbd79102..3713e374b08e9781944db97412f0161fbb60b40c 100644 (file)
@@ -574,8 +574,6 @@ void pci_target_init(struct pci_controller *hose)
        /* No error reporting */
        pci_hose_write_config_word(hose, 0, PCI_ERREN, 0);
 
-       pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
-
        if (!is_monarch()) {
                /* Program the board's subsystem id/classcode */
                pci_hose_write_config_word(hose, 0, PCI_SUBSYSTEM_ID,
@@ -617,21 +615,6 @@ void pci_master_init(struct pci_controller *hose)
 
 static void wait_for_pci_ready(void)
 {
-       int i;
-       char *s = getenv("pcidelay");
-       /*
-        * We have our own handling of the pcidelay variable.
-        * Using CONFIG_PCI_BOOTDELAY enables pausing for host
-        * and adapter devices. For adapter devices we do not
-        * want this.
-        */
-       if (s) {
-               int ms = simple_strtoul(s, NULL, 10);
-               printf("PCI:   Waiting for %d ms\n", ms);
-               for (i=0; i<ms; i++)
-                       udelay(1000);
-       }
-
        if (!(in_be32((void*)GPIO1_IR) & GPIO1_PPC_EREADY)) {
                printf("PCI:   Waiting for EREADY (CTRL-C to skip) ... ");
                while (1) {
index 897fe3e19b53b7d8f4f4b913db1aefe1572fb6de..2ec6338a5718f62683957e3615cc03f1894c4894 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com
+# Stelian Pop <stelian@popies.net
 # Lead Tech Design <www.leadtechdesign.com>
 # Ilko Iliev <www.ronetix.at>
 #
index 402f19ff8b2d21886a751e98c2a28ed0928c98f7..ecb07969689862654245bb7b7e6067c24e31d1fb 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Ilko Iliev <www.ronetix.at>
  *
index 1492ffce900f053d73c0ac6cbc8416f6ac343e01..c02a9cdfddf29e11fdcb6626a6a2b91b99e7fc0e 100644 (file)
@@ -127,31 +127,32 @@ static void gt6426x_handle_SMI(struct eth_dev_s *p, unsigned int icr)
 #endif
 
     if(icr&0x10000000) {
+#ifdef DEBUG
        unsigned int psr;
+
        psr=GTREGREAD(ETHERNET0_PORT_STATUS_REGISTER + p->reg_base);
-#ifdef DEBUG
        printf("PHY state change:\n"
               "  GT:%s:%s:%s:%s\n",
-               psr&1?"100":" 10",
-               psr&8?" Link":"nLink",
-               psr&2?"FD":"HD",
-               psr&4?" FC":"nFC");
+               psr & 1 ? "100" : " 10",
+               psr & 8 ? " Link" : "nLink",
+               psr & 2 ? "FD" : "HD",
+               psr & 4 ? " FC" : "nFC");
 
 #ifdef CONFIG_INTEL_LXT97X /* non-standard mii reg (intel lxt972a) */
        {
-       unsigned short mii_11;
-       mii_11=miiphy_read_ret(ether_port_phy_addr[p->dev],0x11);
-
-       printf(" mii:%s:%s:%s:%s %s:%s %s\n",
-               mii_11&(1<<14)?"100":" 10",
-               mii_11&(1<<10)?" Link":"nLink",
-               mii_11&(1<<9)?"FD":"HD",
-               mii_11&(1<<4)?" FC":"nFC",
-
-               mii_11&(1<<7)?"ANc":"ANnc",
-               mii_11&(1<<8)?"AN":"Manual",
-               ""
-               );
+               unsigned short mii_11;
+               mii_11 = miiphy_read_ret(ether_port_phy_addr[p->dev], 0x11);
+
+               printf(" mii:%s:%s:%s:%s %s:%s %s\n",
+                       mii_11 & (1 << 14) ? "100" : " 10",
+                       mii_11 & (1 << 10) ? " Link" : "nLink",
+                       mii_11 & (1 << 9) ? "FD" : "HD",
+                       mii_11 & (1 << 4) ? " FC" : "nFC",
+
+                       mii_11 & (1 << 7) ? "ANc" : "ANnc",
+                       mii_11 & (1 << 8) ? "AN" : "Manual",
+                       ""
+                       );
        }
 #endif /* CONFIG_INTEL_LXT97X */
 #endif /* DEBUG */
index 80756a5cdf5828e5499f3d5c68419e714545da1e..393320ac1887d39362654c99b9971df292fa1ab9 100644 (file)
@@ -32,6 +32,7 @@
 #include <galileo/gt64260R.h>
 #include <net.h>
 #include <netdev.h>
+#include <linux/compiler.h>
 
 #include <asm/io.h>
 #include "eth.h"
@@ -360,7 +361,7 @@ debug_led(int led, int mode)
 {
 #if !defined(CONFIG_ZUMA_V2) && !defined(CONFIG_P3G4)
        volatile int *addr = NULL;
-       int dummy;
+       __maybe_unused int dummy;
 
        if (mode == 1) {
                switch (led) {
index 88d0dac469189d54f20f9c9f8a3d2dc08672a0a5..8119fced486926d7d174fdcd18c1d29f016d67e0 100644 (file)
@@ -20,29 +20,25 @@ static void
 i2c_init(int speed, int slaveaddr)
 {
        unsigned int n, m, freq, margin, power;
-       unsigned int actualFreq, actualN=0, actualM=0;
+       unsigned int actualn = 0, actualm = 0;
        unsigned int control, status;
-       unsigned int minMargin = 0xffffffff;
+       unsigned int minmargin = 0xffffffff;
        unsigned int tclk = 125000000;
 
        DP(puts("i2c_init\n"));
 
-       for(n = 0 ; n < 8 ; n++)
-       {
-               for(m = 0 ; m < 16 ; m++)
-               {
-                       power = 2<<n; /* power = 2^(n+1) */
-                       freq = tclk/(10*(m+1)*power);
+       for (n = 0 ; n < 8 ; n++) {
+               for (m = 0 ; m < 16 ; m++) {
+                       power = 2 << n; /* power = 2^(n+1) */
+                       freq = tclk / (10 * (m + 1) * power);
                        if (speed > freq)
                                margin = speed - freq;
                        else
                                margin = freq - speed;
-                       if(margin < minMargin)
-                       {
-                               minMargin   = margin;
-                               actualFreq  = freq;
-                               actualN     = n;
-                               actualM     = m;
+                       if (margin < minmargin) {
+                               minmargin   = margin;
+                               actualn     = n;
+                               actualm     = m;
                        }
                }
        }
@@ -59,7 +55,7 @@ i2c_init(int speed, int slaveaddr)
 
        DP(puts("set baudrate\n"));
 
-       GT_REG_WRITE(I2C_STATUS_BAUDE_RATE, (actualM << 3) | actualN);
+       GT_REG_WRITE(I2C_STATUS_BAUDE_RATE, (actualm << 3) | actualn);
        GT_REG_WRITE(I2C_CONTROL, (0x1 << 2) | (0x1 << 6));
 
        udelay(I2C_DELAY * 10);
@@ -91,13 +87,13 @@ i2c_start(void)
                udelay(I2C_DELAY);
                if (count > 20) {
                        GT_REG_WRITE(I2C_CONTROL, (0x1 << 4)); /*stop*/
-                       return (status);
+                       return status;
                }
                GT_REG_READ(I2C_STATUS_BAUDE_RATE, &status);
                count++;
        }
 
-       return (0);
+       return 0;
 }
 
 static uchar
@@ -110,9 +106,8 @@ i2c_select_device(uchar dev_addr, uchar read, int ten_bit)
 
        /* Output slave address */
 
-       if (ten_bit) {
+       if (ten_bit)
                bits = 10;
-       }
 
        data = (dev_addr << 1);
        /* set the read bit */
@@ -129,7 +124,7 @@ i2c_select_device(uchar dev_addr, uchar read, int ten_bit)
                udelay(I2C_DELAY);
                if (count > 20) {
                        GT_REG_WRITE(I2C_CONTROL, (0x1 << 4)); /*stop*/
-                       return(status);
+                       return status;
                }
                GT_REG_READ(I2C_STATUS_BAUDE_RATE, &status);
                count++;
@@ -137,14 +132,14 @@ i2c_select_device(uchar dev_addr, uchar read, int ten_bit)
 
        if (bits == 10) {
                printf("10 bit I2C addressing not yet implemented\n");
-               return (0xff);
+               return 0xff;
        }
 
-       return (0);
+       return 0;
 }
 
 static uchar
-i2c_get_data(ucharreturn_data, int len) {
+i2c_get_data(uchar *return_data, int len) {
 
        unsigned int data, status = 0;
        int count = 0;
@@ -163,7 +158,7 @@ i2c_get_data(uchar* return_data, int len) {
                count++;
                while ((status & 0xff) != 0x50) {
                        udelay(I2C_DELAY);
-                       if(count > 2) {
+                       if (count > 2) {
                                GT_REG_WRITE(I2C_CONTROL, (0x1 << 4)); /*stop*/
                                return 0;
                        }
@@ -178,16 +173,16 @@ i2c_get_data(uchar* return_data, int len) {
        RESET_REG_BITS(I2C_CONTROL, BIT2|BIT3);
        while ((status & 0xff) != 0x58) {
                udelay(I2C_DELAY);
-               if(count > 200) {
+               if (count > 200) {
                        GT_REG_WRITE(I2C_CONTROL, (0x1 << 4)); /*stop*/
-                       return (status);
+                       return status;
                }
                GT_REG_READ(I2C_STATUS_BAUDE_RATE, &status);
                count++;
        }
        GT_REG_WRITE(I2C_CONTROL, (0x1 << 4)); /* stop */
 
-       return (0);
+       return 0;
 }
 
 static uchar
@@ -213,9 +208,9 @@ i2c_write_data(unsigned int data, int len)
                count++;
                while ((status & 0xff) != 0x28) {
                        udelay(I2C_DELAY);
-                       if(count > 20) {
+                       if (count > 20) {
                                GT_REG_WRITE(I2C_CONTROL, (0x1 << 4)); /*stop*/
-                               return (status);
+                               return status;
                        }
                        GT_REG_READ(I2C_STATUS_BAUDE_RATE, &status);
                        count++;
@@ -227,7 +222,7 @@ i2c_write_data(unsigned int data, int len)
 
        udelay(I2C_DELAY * 10);
 
-       return (0);
+       return 0;
 }
 
 static uchar
@@ -254,19 +249,19 @@ i2c_set_dev_offset(uchar dev_addr, unsigned int offset, int ten_bit)
                return status;
        }
 
-       return (0);
+       return 0;
 }
 
 uchar
-i2c_read(uchar dev_addr, unsigned int offset, int len, uchardata,
+i2c_read(uchar dev_addr, unsigned int offset, int len, uchar *data,
         int ten_bit)
 {
        uchar status = 0;
-       unsigned int i2cFreq = 400000;
+       unsigned int i2cfreq = 400000;
 
        DP(puts("i2c_read\n"));
 
-       i2c_init(i2cFreq,0);
+       i2c_init(i2cfreq, 0);
 
        status = i2c_start();
 
@@ -285,7 +280,7 @@ i2c_read(uchar dev_addr, unsigned int offset, int len, uchar* data,
                return status;
        }
 
-       i2c_init(i2cFreq,0);
+       i2c_init(i2cfreq, 0);
 
        status = i2c_start();
        if (status) {
index e2f07699c3df1ccea1042d38193918de03757056..6f725f67f8141ed553524f8f8ee01c739f626b12 100644 (file)
@@ -29,6 +29,7 @@
 #include <galileo/pci.h>
 #include <galileo/gt64260R.h>
 #include <net.h>
+#include <linux/compiler.h>
 
 #include "eth.h"
 #include "mpsc.h"
@@ -330,7 +331,8 @@ static int check_dimm (uchar slot, sdram_info_t * info)
 static int setup_sdram_common (sdram_info_t info[2])
 {
        ulong tmp;
-       int tpar = 2, tras_clocks = 5, registered = 1, ecc = 2;
+       int tpar = 2, tras_clocks = 5, registered = 1;
+       __maybe_unused int ecc = 2;
 
        if (!info[0].banks && !info[1].banks)
                return 0;
@@ -407,8 +409,9 @@ static int setup_sdram_common (sdram_info_t info[2])
 /* sets up the GT properly with information passed in */
 static int setup_sdram (sdram_info_t * info)
 {
-       ulong tmp, check;
+       ulong tmp;
        ulong *addr = 0;
+       __maybe_unused ulong check;
        int i;
 
        /* sanity checking */
index 8e381024b724ab9eba6375947486f61063a55523..621c64cd820dcb86651c7de377fdeabad81f87d2 100644 (file)
@@ -12,57 +12,62 @@ struct _zuma_mbox_dev zuma_mbox_dev;
 
 static int zuma_mbox_write(struct _zuma_mbox_dev *dev, unsigned int data)
 {
-  unsigned int status, count = 0, i;
-
-  status = (volatile int)le32_to_cpu(dev->sip->mbox_status);
-
-  while((status & OUT_PENDING) && count < 1000) {
-    count++;
-    for(i=0;i<1000;i++);
-    status = (volatile int)le32_to_cpu(dev->sip->mbox_status);
-  }
-  if(count < 1000) {
-    /* if SET it means msg pending */
-    /* printf("mbox real write %08x\n",data); */
-    dev->sip->mbox_out = cpu_to_le32(data);
-    return 4;
-  }
-
-  printf("mbox tx timeout\n");
-  return 0;
+       unsigned int status, count = 0, i;
+
+       status = (volatile int) le32_to_cpu(dev->sip->mbox_status);
+
+       while ((status & OUT_PENDING) && count < 1000) {
+               count++;
+               for (i = 0; i < 1000; i++)
+                       ;
+               status = (volatile int) le32_to_cpu(dev->sip->mbox_status);
+       }
+       if (count < 1000) {
+               /* if SET it means msg pending */
+               /* printf("mbox real write %08x\n",data); */
+               dev->sip->mbox_out = cpu_to_le32(data);
+               return 4;
+       }
+
+       printf("mbox tx timeout\n");
+       return 0;
 }
 
 static int zuma_mbox_read(struct _zuma_mbox_dev *dev, unsigned int *data)
 {
-  unsigned int status, count = 0, i;
-
-  status = (volatile int)le32_to_cpu(dev->sip->mbox_status);
-
-  while(!(status & IN_VALID) && count < 1000) {
-    count++;
-    for(i=0;i<1000;i++);
-    status = (volatile int)le32_to_cpu(dev->sip->mbox_status);
-  }
-  if(count < 1000) {
-    /* if SET it means msg pending */
-    *data=le32_to_cpu(dev->sip->mbox_in);
-    /*printf("mbox real read %08x\n", *data); */
-    return 4;
-  }
-  printf("mbox rx timeout\n");
-  return 0;
+       unsigned int status, count = 0, i;
+
+       status = (volatile int) le32_to_cpu(dev->sip->mbox_status);
+
+       while (!(status & IN_VALID) && count < 1000) {
+               count++;
+               for (i = 0; i < 1000; i++)
+                       ;
+               status = (volatile int) le32_to_cpu(dev->sip->mbox_status);
+       }
+       if (count < 1000) {
+               /* if SET it means msg pending */
+               *data = le32_to_cpu(dev->sip->mbox_in);
+               /*printf("mbox real read %08x\n", *data); */
+               return 4;
+       }
+       printf("mbox rx timeout\n");
+       return 0;
 }
 
 static int zuma_mbox_do_one_mailbox(unsigned int out, unsigned int *in)
 {
-  int ret;
-  ret=zuma_mbox_write(&zuma_mbox_dev,out);
-  /*printf("write 0x%08x (%d bytes)\n", out, ret); */
-  if(ret!=4) return -1;
-  ret=zuma_mbox_read(&zuma_mbox_dev,in);
-  /*printf("read 0x%08x (%d bytes)\n", *in, ret); */
-  if(ret!=4) return -1;
-  return 0;
+       int ret;
+
+       ret = zuma_mbox_write(&zuma_mbox_dev, out);
+       /*printf("write 0x%08x (%d bytes)\n", out, ret); */
+       if (ret != 4)
+               return -1;
+       ret = zuma_mbox_read(&zuma_mbox_dev, in);
+       /*printf("read 0x%08x (%d bytes)\n", *in, ret); */
+       if (ret != 4)
+               return -1;
+       return 0;
 }
 
 
@@ -70,81 +75,93 @@ static int zuma_mbox_do_one_mailbox(unsigned int out, unsigned int *in)
 
 static int zuma_mbox_do_all_mailbox(void)
 {
-  unsigned int data_in;
-  unsigned short sdata_in;
+       unsigned int data_in;
+       unsigned short sdata_in;
 
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_START, &data_in));
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_START, &data_in));
 
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_MACL, &data_in));
-  memcpy(zuma_acc_mac+2,&data_in,4);
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_MACH, &data_in));
-  sdata_in=data_in&0xffff;
-  memcpy(zuma_acc_mac,&sdata_in,2);
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_MACL, &data_in));
+       memcpy(zuma_acc_mac + 2, &data_in, 4);
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_MACH, &data_in));
+       sdata_in = data_in & 0xffff;
+       memcpy(zuma_acc_mac, &sdata_in, 2);
 
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_IP, &data_in));
-  zuma_ip=data_in;
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_IP, &data_in));
+       zuma_ip = data_in;
 
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_SLOT, &data_in));
-  zuma_slot_bac=data_in>>3;
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_SLOT, &data_in));
+       zuma_slot_bac = data_in >> 3;
 
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_BAUD, &data_in));
-  zuma_console_baud = data_in & 0xffff;
-  zuma_debug_baud   = data_in >> 16;
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_BAUD, &data_in));
+       zuma_console_baud = data_in & 0xffff;
+       zuma_debug_baud = data_in >> 16;
 
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_ENG_PRV_MACL, &data_in));
-  memcpy(zuma_prv_mac+2,&data_in,4);
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_ENG_PRV_MACH, &data_in));
-  sdata_in=data_in&0xffff;
-  memcpy(zuma_prv_mac,&sdata_in,2);
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox
+                     (ZUMA_MBOXMSG_ENG_PRV_MACL, &data_in));
+       memcpy(zuma_prv_mac + 2, &data_in, 4);
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox
+                     (ZUMA_MBOXMSG_ENG_PRV_MACH, &data_in));
+       sdata_in = data_in & 0xffff;
+       memcpy(zuma_prv_mac, &sdata_in, 2);
 
-  RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_DONE, &data_in));
+       RET_IF_FAILED(zuma_mbox_do_one_mailbox(ZUMA_MBOXMSG_DONE, &data_in));
 
-  return 0;
+       return 0;
 }
 
 
-static void
-zuma_mbox_dump(void)
+static void zuma_mbox_dump(void)
 {
-  printf("ACC MAC=%04x%08x\n",*(unsigned short *)(&zuma_acc_mac),*(unsigned int *)((char *)&zuma_acc_mac+2));
-  printf("PRV MAC=%04x%08x\n",*(unsigned short *)(&zuma_prv_mac),*(unsigned int *)((char *)&zuma_prv_mac+2));
-  printf("slot:bac=%d:%d\n",(zuma_slot_bac>>2)&0xf, zuma_slot_bac & 0x3);
-  printf("BAUD1=%d BAUD2=%d\n",zuma_console_baud,zuma_debug_baud);
+       unsigned short s;
+       unsigned int i;
+
+       memcpy(&s, &zuma_acc_mac,    sizeof(s));
+       memcpy(&i, &zuma_acc_mac[2], sizeof(i));
+       printf("ACC MAC=%04x%08x\n", s, i);
+
+       memcpy(&s, &zuma_prv_mac,    sizeof(s));
+       memcpy(&s, &zuma_prv_mac[2], sizeof(i));
+       printf("PRV MAC=%04x%08x\n", s, i);
+
+       printf("slot:bac=%d:%d\n",
+               (zuma_slot_bac >> 2) & 0xf,
+               zuma_slot_bac & 0x3);
+
+       printf("BAUD1=%d BAUD2=%d\n",
+               zuma_console_baud,
+               zuma_debug_baud);
 }
 
 
-static void
-zuma_mbox_setenv(void)
+static void zuma_mbox_setenv(void)
 {
-  char *data, buf[32];
-  unsigned char save = 0;
-
-  data = getenv("baudrate");
-
-  if(!data || (zuma_console_baud != simple_strtoul(data, NULL, 10))) {
-    sprintf(buf, "%6d", zuma_console_baud);
-    setenv("baudrate", buf);
-    save=1;
-    printf("baudrate doesn't match from mbox\n");
-  }
-
-  ip_to_string(zuma_ip, buf);
-  setenv("ipaddr", buf);
-
-  sprintf(buf,"%02x:%02x:%02x:%02x:%02x:%02x",
-         zuma_prv_mac[0],
-         zuma_prv_mac[1],
-         zuma_prv_mac[2],
-         zuma_prv_mac[3],
-         zuma_prv_mac[4],
-         zuma_prv_mac[5]);
-  setenv("ethaddr", buf);
-
-  sprintf(buf,"%02x",zuma_slot_bac);
-  setenv("bacslot", buf);
-
-  if(save)
-    saveenv();
+       char *data, buf[32];
+       unsigned char save = 0;
+
+       data = getenv("baudrate");
+
+       if (!data || (zuma_console_baud != simple_strtoul(data, NULL, 10))) {
+               sprintf(buf, "%6d", zuma_console_baud);
+               setenv("baudrate", buf);
+               save = 1;
+               printf("baudrate doesn't match from mbox\n");
+       }
+
+       ip_to_string(zuma_ip, buf);
+       setenv("ipaddr", buf);
+
+       sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x",
+               zuma_prv_mac[0],
+               zuma_prv_mac[1],
+               zuma_prv_mac[2],
+               zuma_prv_mac[3], zuma_prv_mac[4], zuma_prv_mac[5]);
+       setenv("ethaddr", buf);
+
+       sprintf(buf, "%02x", zuma_slot_bac);
+       setenv("bacslot", buf);
+
+       if (save)
+               saveenv();
 }
 
 /**
@@ -153,37 +170,39 @@ zuma_mbox_setenv(void)
 
 int zuma_mbox_init(void)
 {
-  unsigned int iobase;
-  memset(&zuma_mbox_dev, 0, sizeof(struct _zuma_mbox_dev));
+       unsigned int iobase;
+
+       memset(&zuma_mbox_dev, 0, sizeof(struct _zuma_mbox_dev));
 
-  zuma_mbox_dev.dev = pci_find_device(VENDOR_ID_ZUMA, DEVICE_ID_ZUMA_PBB, 0);
+       zuma_mbox_dev.dev =
+               pci_find_device(VENDOR_ID_ZUMA, DEVICE_ID_ZUMA_PBB, 0);
 
-  if(zuma_mbox_dev.dev == -1) {
-    printf("no zuma pbb\n");
-    return -1;
-  }
+       if (zuma_mbox_dev.dev == -1) {
+               printf("no zuma pbb\n");
+               return -1;
+       }
 
-  pci_read_config_dword(zuma_mbox_dev.dev, PCI_BASE_ADDRESS_0, &iobase);
+       pci_read_config_dword(zuma_mbox_dev.dev, PCI_BASE_ADDRESS_0, &iobase);
 
-  iobase &= PCI_BASE_ADDRESS_MEM_MASK;
+       iobase &= PCI_BASE_ADDRESS_MEM_MASK;
 
-  zuma_mbox_dev.sip = (PBB_DMA_REG_MAP *)iobase;
+       zuma_mbox_dev.sip = (PBB_DMA_REG_MAP *) iobase;
 
-  zuma_mbox_dev.sip->int_mask.word=0;
+       zuma_mbox_dev.sip->int_mask.word = 0;
 
-  printf("pbb @ %p v%d.%d, timestamp %08x\n", zuma_mbox_dev.sip,
-        zuma_mbox_dev.sip->version.pci_bits.rev_major,
-        zuma_mbox_dev.sip->version.pci_bits.rev_minor,
-        zuma_mbox_dev.sip->timestamp);
+       printf("pbb @ %p v%d.%d, timestamp %08x\n", zuma_mbox_dev.sip,
+              zuma_mbox_dev.sip->version.pci_bits.rev_major,
+              zuma_mbox_dev.sip->version.pci_bits.rev_minor,
+              zuma_mbox_dev.sip->timestamp);
 
-  if (zuma_mbox_do_all_mailbox() == -1) {
-         printf("mailbox failed.. no ACC?\n");
-         return -1;
-  }
+       if (zuma_mbox_do_all_mailbox() == -1) {
+               printf("mailbox failed.. no ACC?\n");
+               return -1;
+       }
 
-  zuma_mbox_dump();
+       zuma_mbox_dump();
 
-  zuma_mbox_setenv();
+       zuma_mbox_setenv();
 
-  return 0;
+       return 0;
 }
index 2578be4f92c469e6eef4ee5f86ed48580244c908..dfd186ba8a9481ede518b5c84fc52c83f090206d 100644 (file)
@@ -31,7 +31,6 @@ DECLARE_GLOBAL_DATA_PTR;
 
 int board_init(void)
 {
-       gd->bd->bi_arch_number = MACH_TYPE_FARADAY;
        gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
 
        ftsmc020_init();        /* initialize Flash */
index 353d3c6f019af1587cec0ddfcba77cfb03b99665..9077aaf106cd4c8c59b96443b6dc5635636f7bb6 100644 (file)
@@ -34,6 +34,7 @@ COBJS-$(CONFIG_FSL_VIA)               += cds_via.o
 COBJS-$(CONFIG_FMAN_ENET)      += fman.o
 COBJS-$(CONFIG_FSL_PIXIS)      += pixis.o
 COBJS-$(CONFIG_FSL_NGPIXIS)    += ngpixis.o
+COBJS-$(CONFIG_FSL_QIXIS)      += qixis.o
 COBJS-$(CONFIG_PQ_MDS_PIB)     += pq-mds-pib.o
 COBJS-$(CONFIG_ID_EEPROM)      += sys_eeprom.o
 COBJS-$(CONFIG_FSL_SGMII_RISER)        += sgmii_riser.o
@@ -50,12 +51,14 @@ COBJS-$(CONFIG_MPC8572DS)   += ics307_clk.o
 COBJS-$(CONFIG_P1022DS)                += ics307_clk.o
 COBJS-$(CONFIG_P2020DS)                += ics307_clk.o
 COBJS-$(CONFIG_P3041DS)                += ics307_clk.o
+COBJS-$(CONFIG_P3060QDS)               += ics307_clk.o
 COBJS-$(CONFIG_P4080DS)                += ics307_clk.o
 COBJS-$(CONFIG_P5020DS)                += ics307_clk.o
 
 # deal with common files for P-series corenet based devices
 SUBLIB-$(CONFIG_P2041RDB)      += p_corenet/libp_corenet.o
 SUBLIB-$(CONFIG_P3041DS)       += p_corenet/libp_corenet.o
+SUBLIB-$(CONFIG_P3060QDS)      += p_corenet/libp_corenet.o
 SUBLIB-$(CONFIG_P4080DS)       += p_corenet/libp_corenet.o
 SUBLIB-$(CONFIG_P5020DS)       += p_corenet/libp_corenet.o
 
index 6f221aff26fcfa79969fb563c128850cbbd01e3c..8a09f99cc4e7e852ea79cc0454269d9efde3b681 100644 (file)
 #if defined(CONFIG_OF_BOARD_SETUP)
 static void cds_pci_fixup(void *blob)
 {
-       int node, tmp[2];
+       int node;
        const char *path;
        int len, slot, i;
        u32 *map = NULL;
 
        node = fdt_path_offset(blob, "/aliases");
-       tmp[0] = 0;
        if (node >= 0) {
                path = fdt_getprop(blob, node, "pci0", NULL);
                if (path) {
index 89d8810f74e64b3992a7afd23515038188234734..95a3cd778f43c33f3538695e9c992950a5afa21f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2010 Freescale Semiconductor, Inc.
+ * Copyright 2010-2011 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 
 #include "ics307_clk.h"
 
-#ifdef CONFIG_FSL_NGPIXIS
+#if defined(CONFIG_FSL_NGPIXIS)
 #include "ngpixis.h"
+#define fpga_reg pixis
+#elif defined(CONFIG_FSL_QIXIS)
+#include "qixis.h"
+#define fpga_reg ((struct qixis *)QIXIS_BASE)
 #else
 #include "pixis.h"
+#define fpga_reg pixis
 #endif
 
+/* define for SYS CLK or CLK1Frequency */
+#define TTL            1
+#define CLK2           0
+#define CRYSTAL                0
+#define MAX_VDW                (511 + 8)
+#define MAX_RDW                (127 + 2)
+#define MIN_VDW                (4 + 8)
+#define MIN_RDW                (1 + 2)
+#define NUM_OD_SETTING 8
+/*
+ * These defines cover the industrial temperature range part,
+ * for commercial, change below to 400000 and 55000, respectively
+ */
+#define MAX_VCO                360000
+#define MIN_VCO                60000
+
 /* decode S[0-2] to Output Divider (OD) */
 static u8 ics307_s_to_od[] = {
        10, 2, 8, 4, 5, 7, 3, 6
 };
 
+/*
+ * Find one solution to generate required frequency for SYSCLK
+ * out_freq: KHz, required frequency to the SYSCLK
+ * the result will be retuned with component RDW, VDW, OD, TTL,
+ * CLK2 and crystal
+ */
+unsigned long ics307_sysclk_calculator(unsigned long out_freq)
+{
+       const unsigned long input_freq = CONFIG_ICS307_REFCLK_HZ;
+       unsigned long vdw, rdw, odp, s_vdw = 0, s_rdw = 0, s_odp = 0, od;
+       unsigned long tmp_out, diff, result = 0;
+       int found = 0;
+
+       for (odp = 0; odp < NUM_OD_SETTING; odp++) {
+               od = ics307_s_to_od[odp];
+               if (od * out_freq < MIN_VCO || od * out_freq > MAX_VCO)
+                       continue;
+               for (rdw = MIN_RDW; rdw <= MAX_RDW; rdw++) {
+                       /* Calculate the VDW */
+                       vdw = out_freq * 1000 * od * rdw / (input_freq * 2);
+                       if (vdw > MAX_VDW)
+                               vdw = MAX_VDW;
+                       if (vdw < MIN_VDW)
+                               continue;
+                       /* Calculate the temp out frequency */
+                       tmp_out = input_freq * 2 * vdw / (rdw * od * 1000);
+                       diff = MAX(out_freq, tmp_out) - MIN(out_freq, tmp_out);
+                       /*
+                        * calculate the percent, the precision is 1/1000
+                        * If greater than 1/1000, continue
+                        * otherwise, we think the solution is we required
+                        */
+                       if (diff * 1000 / out_freq > 1)
+                               continue;
+                       else {
+                               s_vdw = vdw;
+                               s_rdw = rdw;
+                               s_odp = odp;
+                               found = 1;
+                               break;
+                       }
+               }
+       }
+
+       if (found)
+               result = (s_rdw - 2) | (s_vdw - 8) << 7 | s_odp << 16 |
+                       CLK2 << 19 | TTL << 21 | CRYSTAL << 22;
+
+       debug("ICS307-02: RDW: %ld, VDW: %ld, OD: %d\n", s_rdw - 2, s_vdw - 8,
+                       ics307_s_to_od[s_odp]);
+       return result;
+}
+
 /*
  * Calculate frequency being generated by ICS307-02 clock chip based upon
  * the control bytes being programmed into it.
@@ -74,15 +148,15 @@ static unsigned long ics307_clk_freq(u8 cw0, u8 cw1, u8 cw2)
 unsigned long get_board_sys_clk(void)
 {
        return ics307_clk_freq(
-                       in_8(&pixis->sclk[0]),
-                       in_8(&pixis->sclk[1]),
-                       in_8(&pixis->sclk[2]));
+                       in_8(&fpga_reg->sclk[0]),
+                       in_8(&fpga_reg->sclk[1]),
+                       in_8(&fpga_reg->sclk[2]));
 }
 
 unsigned long get_board_ddr_clk(void)
 {
        return ics307_clk_freq(
-                       in_8(&pixis->dclk[0]),
-                       in_8(&pixis->dclk[1]),
-                       in_8(&pixis->dclk[2]));
+                       in_8(&fpga_reg->dclk[0]),
+                       in_8(&fpga_reg->dclk[1]),
+                       in_8(&fpga_reg->dclk[2]));
 }
index db3dbc41f7fad2848d268ea8a5cfad1932ccb245..37579124bce8da74c8b35a9d59672c96f755dd3b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2010 Freescale Semiconductor, Inc.
+ * Copyright 2010-2011 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 #define __ICS_CLK_H_   1
 
 #ifndef __ASSEMBLY__
+
 extern unsigned long get_board_sys_clk(void);
 extern unsigned long get_board_ddr_clk(void);
+extern unsigned long ics307_sysclk_calculator(unsigned long out_freq);
 #endif
 
 #endif /* __ICS_CLK_H_ */
index 765f0359bfb03abdbf7cb19ee83be27252518e09..276ae3c5cf321ae590ddd05c1e6178826d401935 100644 (file)
@@ -156,9 +156,29 @@ static void pixis_dump_regs(void)
 }
 #endif
 
+void pixis_sysclk_set(unsigned long sysclk)
+{
+       unsigned long freq_word;
+       u8 sclk0, sclk1, sclk2;
+
+       freq_word = ics307_sysclk_calculator(sysclk);
+       sclk2 = freq_word & 0xff;
+       sclk1 = (freq_word >> 8) & 0xff;
+       sclk0 = (freq_word >> 16) & 0xff;
+
+       /* set SYSCLK enable bit */
+       PIXIS_WRITE(vcfgen0, 0x01);
+
+       /* SYSCLK to required frequency */
+       PIXIS_WRITE(sclk[0], sclk0);
+       PIXIS_WRITE(sclk[1], sclk1);
+       PIXIS_WRITE(sclk[2], sclk2);
+}
+
 int pixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        unsigned int i;
+       unsigned long sysclk;
        char *p_altbank = NULL;
 #ifdef DEBUG
        char *p_dump = NULL;
@@ -182,6 +202,12 @@ int pixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                        continue;
                }
 #endif
+               if (strcmp(argv[i], "sysclk") == 0) {
+                       sysclk = simple_strtoul(argv[i + 1], NULL, 0);
+                       i += 1;
+                       pixis_sysclk_set(sysclk);
+                       continue;
+               }
 
                unknown_param = argv[i];
        }
@@ -219,4 +245,5 @@ U_BOOT_CMD(
 #ifdef DEBUG
        "pixis_reset dump - display the PIXIS registers\n"
 #endif
+       "pixis_reset sysclk <SYSCLK_freq> - reset with SYSCLK frequency(KHz)\n"
        );
index a35b5cfe3e352af0e4d28bc35ff649a853589eec..8d07061c36f36a67481484719ab44436eb4a9b02 100644 (file)
@@ -380,7 +380,7 @@ static unsigned long strfractoint(char *strptr)
 {
        int i, j;
        int mulconst;
-       int intarr_len, no_dec = 0;
+       int no_dec = 0;
        unsigned long intval = 0, decval = 0;
        char intarr[3], decarr[3];
 
@@ -399,8 +399,6 @@ static unsigned long strfractoint(char *strptr)
                i++;
        }
 
-       /* Assign length of integer part to intarr_len. */
-       intarr_len = i;
        intarr[i] = '\0';
 
        if (no_dec) {
diff --git a/board/freescale/common/qixis.c b/board/freescale/common/qixis.c
new file mode 100644 (file)
index 0000000..6cd7e51
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2011 Freescale Semiconductor
+ * Author: Shengzhou Liu <Shengzhou.Liu@freescale.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This file provides support for the QIXIS of some Freescale reference boards.
+ *
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/io.h>
+#include "qixis.h"
+
+u8 qixis_read(unsigned int reg)
+{
+       void *p = (void *)QIXIS_BASE;
+
+       return in_8(p + reg);
+}
+
+void qixis_write(unsigned int reg, u8 value)
+{
+       void *p = (void *)QIXIS_BASE;
+
+       out_8(p + reg, value);
+}
+
+void qixis_reset(void)
+{
+       QIXIS_WRITE(rst_ctl, 0x83);
+}
+
+void qixis_bank_reset(void)
+{
+       QIXIS_WRITE(rcfg_ctl, 0x20);
+       QIXIS_WRITE(rcfg_ctl, 0x21);
+}
+
+/* Set the boot bank to the power-on default bank0 */
+void clear_altbank(void)
+{
+       u8 reg;
+
+       reg = QIXIS_READ(brdcfg[0]);
+       reg = reg & ~QIXIS_LBMAP_MASK;
+       QIXIS_WRITE(brdcfg[0], reg);
+}
+
+/* Set the boot bank to the alternate bank */
+void set_altbank(void)
+{
+       u8 reg;
+
+       reg = QIXIS_READ(brdcfg[0]);
+       reg = (reg & ~QIXIS_LBMAP_MASK) | QIXIS_LBMAP_ALTBANK;
+       QIXIS_WRITE(brdcfg[0], reg);
+}
+
+#ifdef DEBUG
+static void qixis_dump_regs(void)
+{
+       int i;
+
+       printf("id      = %02x\n", QIXIS_READ(id));
+       printf("arch    = %02x\n", QIXIS_READ(arch));
+       printf("scver   = %02x\n", QIXIS_READ(scver));
+       printf("model   = %02x\n", QIXIS_READ(model));
+       printf("rst_ctl = %02x\n", QIXIS_READ(rst_ctl));
+       printf("aux     = %02x\n", QIXIS_READ(aux));
+       for (i = 0; i < 16; i++)
+               printf("brdcfg%02d = %02x\n", i, QIXIS_READ(brdcfg[i]));
+       for (i = 0; i < 16; i++)
+               printf("dutcfg%02d = %02x\n", i, QIXIS_READ(dutcfg[i]));
+       printf("sclk    = %02x%02x%02x\n", QIXIS_READ(sclk[0]),
+               QIXIS_READ(sclk[1]), QIXIS_READ(sclk[2]));
+       printf("dclk    = %02x%02x%02x\n", QIXIS_READ(dclk[0]),
+               QIXIS_READ(dclk[1]), QIXIS_READ(dclk[2]));
+       printf("aux     = %02x\n", QIXIS_READ(aux));
+       printf("watch   = %02x\n", QIXIS_READ(watch));
+       printf("ctl_sys = %02x\n", QIXIS_READ(ctl_sys));
+       printf("rcw_ctl = %02x\n", QIXIS_READ(rcw_ctl));
+       printf("present = %02x\n", QIXIS_READ(present));
+       printf("clk_spd = %02x\n", QIXIS_READ(clk_spd));
+       printf("stat_dut = %02x\n", QIXIS_READ(stat_dut));
+       printf("stat_sys = %02x\n", QIXIS_READ(stat_sys));
+       printf("stat_alrm = %02x\n", QIXIS_READ(stat_alrm));
+       printf("ctl_sys2 = %02x\n", QIXIS_READ(ctl_sys2));
+}
+#endif
+
+int qixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       int i;
+
+       if (argc <= 1) {
+               clear_altbank();
+               qixis_reset();
+       } else if (strcmp(argv[1], "altbank") == 0) {
+               set_altbank();
+               qixis_bank_reset();
+       } else if (strcmp(argv[1], "watchdog") == 0) {
+               static char *period[9] = {"2s", "4s", "8s", "16s", "32s",
+                                         "1min", "2min", "4min", "8min"};
+               u8 rcfg = QIXIS_READ(rcfg_ctl);
+
+               if (argv[2] == NULL) {
+                       printf("qixis watchdog <watchdog_period>\n");
+                       return 0;
+               }
+               for (i = 0; i < ARRAY_SIZE(period); i++) {
+                       if (strcmp(argv[2], period[i]) == 0) {
+                               /* disable watchdog */
+                               QIXIS_WRITE(rcfg_ctl, rcfg & ~0x08);
+                               QIXIS_WRITE(watch, ((i<<2) - 1));
+                               QIXIS_WRITE(rcfg_ctl, rcfg);
+                               return 0;
+                       }
+               }
+       }
+
+#ifdef DEBUG
+       else if (strcmp(argv[1], "dump") == 0) {
+               qixis_dump_regs();
+               return 0;
+       }
+#endif
+
+       else {
+               printf("Invalid option: %s\n", argv[1]);
+               return 1;
+       }
+
+       return 0;
+}
+
+U_BOOT_CMD(
+       qixis_reset, CONFIG_SYS_MAXARGS, 1, qixis_reset_cmd,
+       "Reset the board using the FPGA sequencer",
+       "- hard reset to default bank\n"
+       "qixis_reset altbank - reset to alternate bank\n"
+       "qixis watchdog <watchdog_period> - set the watchdog period\n"
+       "       period: 1s 2s 4s 8s 16s 32s 1min 2min 4min 8min\n"
+#ifdef DEBUG
+       "qixis_reset dump - display the QIXIS registers\n"
+#endif
+       );
diff --git a/board/freescale/common/qixis.h b/board/freescale/common/qixis.h
new file mode 100644 (file)
index 0000000..7a0268a
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2011 Freescale Semiconductor
+ * Author: Shengzhou Liu <Shengzhou.Liu@freescale.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This file provides support for the QIXIS of some Freescale reference boards.
+ */
+
+#ifndef __QIXIS_H_
+#define __QIXIS_H_
+
+struct qixis {
+       u8 id;      /* ID value uniquely identifying each QDS board type */
+       u8 arch;    /* Board version information */
+       u8 scver;   /* QIXIS Version Register */
+       u8 model;   /* Information of software programming model version */
+       u8 tagdata;
+       u8 ctl_sys;
+       u8 aux;         /* Auxiliary Register,0x06 */
+       u8 clk_spd;
+       u8 stat_dut;
+       u8 stat_sys;
+       u8 stat_alrm;
+       u8 present;
+       u8 ctl_sys2;
+       u8 rcw_ctl;
+       u8 ctl_led;
+       u8 i2cblk;
+       u8 rcfg_ctl;    /* Reconfig Control Register,0x10 */
+       u8 rcfg_st;
+       u8 dcm_ad;
+       u8 dcm_da;
+       u8 dcmd;
+       u8 dmsg;
+       u8 gdc;
+       u8 gdd;         /* DCM Debug Data Register,0x17 */
+       u8 dmack;
+       u8 res1[6];
+       u8 watch;       /* Watchdog Register,0x1F */
+       u8 pwr_ctl[2];  /* Power Control Register,0x20 */
+       u8 res2[2];
+       u8 pwr_stat[4]; /* Power Status Register,0x24 */
+       u8 res3[8];
+       u8 clk_spd2[2];  /* SYSCLK clock Speed Register,0x30 */
+       u8 res4[2];
+       u8 sclk[3];  /* Clock Configuration Registers,0x34 */
+       u8 res5;
+       u8 dclk[3];
+       u8 res6;
+       u8 clk_dspd[3];
+       u8 res7;
+       u8 rst_ctl;     /* Reset Control Register,0x40 */
+       u8 rst_stat;    /* Reset Status Register */
+       u8 rst_rsn;     /* Reset Reason Register */
+       u8 rst_frc[2];  /* Reset Force Registers,0x43 */
+       u8 res8[11];
+       u8 brdcfg[16];  /* Board Configuration Register,0x50 */
+       u8 dutcfg[16];
+       u8 rcw_ad[2];   /* RCW SRAM Address Registers,0x70 */
+       u8 rcw_data;
+       u8 res9[5];
+       u8 post_ctl;
+       u8 post_stat;
+       u8 post_dat[2];
+       u8 pi_d[4];
+       u8 gpio_io[4];
+       u8 gpio_dir[4];
+       u8 res10[20];
+       u8 rjtag_ctl;
+       u8 rjtag_dat;
+       u8 res11[2];
+       u8 trig_src[4];
+       u8 trig_dst[4];
+       u8 trig_stat;
+       u8 res12[3];
+       u8 trig_ctr[4];
+       u8 res13[48];
+       u8 aux2[4];     /* Auxiliary Registers,0xE0 */
+       u8 res14[10];
+       u8 aux_ad;
+       u8 aux_da;
+       u8 res15[16];
+};
+
+#define QIXIS_BASE             0xffdf0000
+#define QIXIS_LBMAP_SWITCH     7
+#define QIXIS_LBMAP_MASK       0x0f
+#define QIXIS_LBMAP_SHIFT      0
+#define QIXIS_LBMAP_ALTBANK    0x04
+
+u8 qixis_read(unsigned int reg);
+void qixis_write(unsigned int reg, u8 value);
+
+#define QIXIS_READ(reg) qixis_read(offsetof(struct qixis, reg))
+#define QIXIS_WRITE(reg, value) qixis_write(offsetof(struct qixis, reg), value)
+
+#endif
index a7a5e13af767ef03eac4645cad02d7fef8f552e3..962f380383a3d6744527748165fb07ed66c33998 100644 (file)
@@ -377,7 +377,6 @@ void fdt_fixup_board_enet(void *fdt)
 int board_eth_init(bd_t *bis)
 {
 #ifdef CONFIG_FMAN_ENET
-       struct dtsec *tsec = (void *)CONFIG_SYS_FSL_FM1_DTSEC1_ADDR;
        struct fsl_pq_mdio_info dtsec_mdio_info;
        struct tgec_mdio_info tgec_mdio_info;
        unsigned int i, slot;
@@ -387,13 +386,6 @@ int board_eth_init(bd_t *bis)
 
        initialize_lane_to_slot();
 
-       /*
-        * Set TBIPA on FM1@DTSEC1.  This is needed for configurations
-        * where FM1@DTSEC1 isn't used directly, since it provides
-        * MDIO for other ports.
-        */
-       out_be32(&tsec->tbipa, CONFIG_SYS_TBIPA_VALUE);
-
        /* We want to use the PIXIS to configure MUX routing, not GPIOs. */
        setbits_8(&pixis->brdcfg2, BRDCFG2_REG_GPIO_SEL);
 
index 7ff00d1460aa249b3784260ca5dd9b54d2eb4bc6..1f00c14530d401e031f92c23adb2741b80eef2ba 100644 (file)
@@ -301,7 +301,6 @@ int board_eth_init(bd_t *bis)
 {
 #ifdef CONFIG_FMAN_ENET
        ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
-       struct dtsec *tsec = (void *)CONFIG_SYS_FSL_FM1_DTSEC1_ADDR;
        int i;
        struct fsl_pq_mdio_info dtsec_mdio_info;
        struct tgec_mdio_info tgec_mdio_info;
@@ -327,13 +326,6 @@ int board_eth_init(bd_t *bis)
                SLOT5, /* 17 - Bank 3:D */
        };
 
-       /*
-        * Set TBIPA on FM1@DTSEC1.  This is needed for configurations
-        * where FM1@DTSEC1 isn't used directly, since it provides
-        * MDIO for other ports.
-        */
-       out_be32(&tsec->tbipa, CONFIG_SYS_TBIPA_VALUE);
-
        /* Initialize the mdio_mux array so we can recognize empty elements */
        for (i = 0; i < NUM_FM_PORTS; i++)
                mdio_mux[i] = EMI_NONE;
index be76774fc58b659ae0e7911b60aaee29cf314b6c..bdd12933433467deb23ad83004cc7a4df0cd0bda 100644 (file)
@@ -172,10 +172,11 @@ int board_eth_init(bd_t *bd)
        if (board_handle_erratum2()) {
                int i;
 
-               for (i = 0; i < ARRAY_SIZE(uec_info); i++)
+               for (i = 0; i < ARRAY_SIZE(uec_info); i++) {
                        uec_info[i].enet_interface_type =
                                PHY_INTERFACE_MODE_RGMII_RXID;
                        uec_info[i].speed = SPEED_1000;
+               }
        }
        return uec_eth_init(bd, uec_info, ARRAY_SIZE(uec_info));
 }
index a8d57cdddefead190d69327a00e04b84868b60e2..e5563f7c7595491c544a14dec4f9be7b09b2a845 100644 (file)
@@ -33,6 +33,9 @@
 #include <miiphy.h>
 #include <libfdt.h>
 #include <fdt_support.h>
+#include <tsec.h>
+#include <fsl_mdio.h>
+#include <netdev.h>
 
 #include "../common/cadmus.h"
 #include "../common/eeprom.h"
@@ -81,12 +84,10 @@ local_bus_init(void)
        volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
 
        uint clkdiv;
-       uint lbc_hz;
        sys_info_t sysinfo;
 
        get_sys_info(&sysinfo);
        clkdiv = (lbc->lcrr & LCRR_CLKDIV) * 2;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
 
        gur->lbiuiplldcr1 = 0x00078080;
        if (clkdiv == 16) {
@@ -115,7 +116,6 @@ void lbc_sdram_init(void)
        uint idx;
        volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
        uint *sdram_addr = (uint *)CONFIG_SYS_LBC_SDRAM_BASE;
-       uint cpu_board_rev;
        uint lsdmr_common;
 
        puts("LBC SDRAM: ");
@@ -137,7 +137,6 @@ void lbc_sdram_init(void)
        /*
         * MPC8548 uses "new" 15-16 style addressing.
         */
-       cpu_board_rev = get_cpu_board_revision();
        lsdmr_common = CONFIG_SYS_LBC_LSDMR_COMMON;
        lsdmr_common |= LSDMR_BSMA1516;
 
@@ -287,7 +286,7 @@ void pci_init_board(void)
        fsl_pcie_init_board(first_free_busno);
 }
 
-int last_stage_init(void)
+void configure_rgmii(void)
 {
        unsigned short temp;
 
@@ -295,29 +294,77 @@ int last_stage_init(void)
        /* This is needed to get the RGMII working for the 1.3+
         * CDS cards */
        if (get_board_version() ==  0x13) {
-               miiphy_write(CONFIG_TSEC1_NAME,
+               miiphy_write(DEFAULT_MII_NAME,
                                TSEC1_PHY_ADDR, 29, 18);
 
-               miiphy_read(CONFIG_TSEC1_NAME,
+               miiphy_read(DEFAULT_MII_NAME,
                                TSEC1_PHY_ADDR, 30, &temp);
 
                temp = (temp & 0xf03f);
                temp |= 2 << 9;         /* 36 ohm */
                temp |= 2 << 6;         /* 39 ohm */
 
-               miiphy_write(CONFIG_TSEC1_NAME,
+               miiphy_write(DEFAULT_MII_NAME,
                                TSEC1_PHY_ADDR, 30, temp);
 
-               miiphy_write(CONFIG_TSEC1_NAME,
+               miiphy_write(DEFAULT_MII_NAME,
                                TSEC1_PHY_ADDR, 29, 3);
 
-               miiphy_write(CONFIG_TSEC1_NAME,
+               miiphy_write(DEFAULT_MII_NAME,
                                TSEC1_PHY_ADDR, 30, 0x8000);
        }
 
-       return 0;
+       return;
 }
 
+#ifdef CONFIG_TSEC_ENET
+int board_eth_init(bd_t *bis)
+{
+       struct fsl_pq_mdio_info mdio_info;
+       struct tsec_info_struct tsec_info[4];
+       int num = 0;
+
+#ifdef CONFIG_TSEC1
+       SET_STD_TSEC_INFO(tsec_info[num], 1);
+       num++;
+#endif
+#ifdef CONFIG_TSEC2
+       SET_STD_TSEC_INFO(tsec_info[num], 2);
+       num++;
+#endif
+#ifdef CONFIG_TSEC3
+       /* initialize TSEC3 only if Carrier is 1.3 or above on CDS */
+       if (get_board_version() >= 0x13) {
+               SET_STD_TSEC_INFO(tsec_info[num], 3);
+               tsec_info[num].interface = PHY_INTERFACE_MODE_RGMII_ID;
+               num++;
+       }
+#endif
+#ifdef CONFIG_TSEC4
+       /* initialize TSEC4 only if Carrier is 1.3 or above on CDS */
+       if (get_board_version() >= 0x13) {
+               SET_STD_TSEC_INFO(tsec_info[num], 4);
+               tsec_info[num].interface = PHY_INTERFACE_MODE_RGMII_ID;
+               num++;
+       }
+#endif
+
+       if (!num) {
+               printf("No TSECs initialized\n");
+
+               return 0;
+       }
+
+       mdio_info.regs = (struct tsec_mii_mng *)CONFIG_SYS_MDIO_BASE_ADDR;
+       mdio_info.name = DEFAULT_MII_NAME;
+       fsl_pq_mdio_init(bis, &mdio_info);
+
+       tsec_eth_init(bis, tsec_info, num);
+       configure_rgmii();
+
+       return pci_eth_init(bis);
+}
+#endif
 
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_pci_setup(void *blob, bd_t *bd)
index 225c5d8d07e21eb2503b4d6b81c0c67878bf2cae..6e3945eddbe9ea750cee6e7a05ec26b03d2179fb 100644 (file)
@@ -147,12 +147,10 @@ local_bus_init(void)
        volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
 
        uint clkdiv;
-       uint lbc_hz;
        sys_info_t sysinfo;
 
        get_sys_info(&sysinfo);
        clkdiv = (lbc->lcrr & LCRR_CLKDIV) * 2;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
 
        gur->lbiuiplldcr1 = 0x00078080;
        if (clkdiv == 16) {
@@ -302,6 +300,7 @@ pib_init(void)
        i2c_write(0x27, 0x3, 1, &val8, 1);
 
        asm("eieio");
+       i2c_set_bus_num(orig_i2c_bus);
 }
 
 #ifdef CONFIG_PCI
index 89557d221f99895e65c0012464602d9f1a346453..d119c6517f65c7bbdb1f082db3f52ee1aacc5893 100644 (file)
@@ -303,12 +303,10 @@ local_bus_init(void)
        volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
 
        uint clkdiv;
-       uint lbc_hz;
        sys_info_t sysinfo;
 
        get_sys_info(&sysinfo);
        clkdiv = (lbc->lcrr & LCRR_CLKDIV) * 2;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
 
        out_be32(&gur->lbiuiplldcr1, 0x00078080);
        if (clkdiv == 16)
index 575bdb55ab8b223898ce11f68c25855a35203abb..6d605139fc14c49fceadc83c083956568c7a72a7 100644 (file)
@@ -58,6 +58,7 @@ struct fsl_e_tlb_entry tlb_table[] = {
                      MAS3_SX|MAS3_SR, MAS2_W|MAS2_G,
                      0, 2, BOOKE_PAGESZ_256M, 1),
 
+#ifndef CONFIG_NAND_SPL
        /* *I*G* - PCI */
        SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_MEM_VIRT, CONFIG_SYS_PCIE3_MEM_PHYS,
                      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
@@ -76,6 +77,7 @@ struct fsl_e_tlb_entry tlb_table[] = {
        SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_IO_VIRT, CONFIG_SYS_PCIE3_IO_PHYS,
                      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                      0, 6, BOOKE_PAGESZ_256K, 1),
+#endif
 
        /* *I*G - NAND */
        SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS,
index 5b3b56042613585da16e4efe3c234dc5db7f7496..2bcd5e6b659f6ee7c4d3ffab0598269bf6c0e678 100644 (file)
@@ -235,12 +235,11 @@ void pci_init_board(void)
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_CCSRBAR;
        volatile ccsr_gur_t *gur = &immap->im_gur;
        struct fsl_pci_info pci_info;
-       u32 devdisr, pordevsr;
+       u32 devdisr;
        int first_free_busno;
        int pci_agent;
 
        devdisr = in_be32(&gur->devdisr);
-       pordevsr = in_be32(&gur->pordevsr);
 
        first_free_busno = fsl_pcie_init_board(0);
 
index 37e6e4dbe8014d8c7893a0e2a3158db4164ae5e1..e5b0929f65e0b4641373127e5072805f25713436 100644 (file)
@@ -265,6 +265,9 @@ int board_mmc_getcd(u8 *cd, struct mmc *mmc)
 {
        struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
 
+       mxc_request_iomux(MX51_PIN_GPIO1_0, IOMUX_CONFIG_ALT1);
+       mxc_request_iomux(MX51_PIN_GPIO1_6, IOMUX_CONFIG_ALT0);
+
        if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR)
                *cd = gpio_get_value(0);
        else
index be32aee14f4adb1dc24a4ff52b1f62953e994881..e5a11429f29540688367f92537b423448b99b91a 100644 (file)
@@ -87,6 +87,9 @@ int board_mmc_getcd(u8 *cd, struct mmc *mmc)
 {
        struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
 
+       mxc_request_iomux(MX53_PIN_GPIO_1, IOMUX_CONFIG_ALT1);
+       mxc_request_iomux(MX53_PIN_GPIO_4, IOMUX_CONFIG_ALT1);
+
        if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR)
                *cd = gpio_get_value(1); /*GPIO1_1*/
        else
index 335661fd4120eb2edd8da73692a1498077978854..aa4a2c93dd0eba6a49ba4673bb54aa820dc1ff42 100644 (file)
@@ -212,6 +212,9 @@ int board_mmc_getcd(u8 *cd, struct mmc *mmc)
 {
        struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
 
+       mxc_request_iomux(MX53_PIN_EIM_DA11, IOMUX_CONFIG_ALT1);
+       mxc_request_iomux(MX53_PIN_EIM_DA13, IOMUX_CONFIG_ALT1);
+
        if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR)
                *cd = gpio_get_value(77); /*GPIO3_13*/
        else
index b4c7f33f9304e4342f91a7981910f2ba28a6a812..3cf4195b5e3e75496a27e14df9c288e8ed97ca81 100644 (file)
@@ -140,6 +140,9 @@ int board_mmc_getcd(u8 *cd, struct mmc *mmc)
 {
        struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
 
+       mxc_request_iomux(MX53_PIN_EIM_DA11, IOMUX_CONFIG_ALT1);
+       mxc_request_iomux(MX53_PIN_EIM_DA13, IOMUX_CONFIG_ALT1);
+
        if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR)
                *cd = gpio_get_value(77); /*GPIO3_13*/
        else
index 87fa7fa72e5156d2e62ac7bc3e8b1e6e9a829c96..55af4e480c2e6884e95904f4b2a38cb4356b324b 100644 (file)
@@ -134,6 +134,7 @@ struct fsl_esdhc_cfg esdhc_cfg[1] = {
 
 int board_mmc_getcd(u8 *cd, struct mmc *mmc)
 {
+       mxc_request_iomux(MX53_PIN_EIM_DA13, IOMUX_CONFIG_ALT1);
        *cd = gpio_get_value(77); /*GPIO3_13*/
 
        return 0;
index 03e9da19409163a7e599dba4011bff75e1033548..b9e66f7fa758374dba97032d83492ffcc8cf610f 100644 (file)
@@ -275,7 +275,9 @@ void ft_board_setup(void *blob, bd_t *bd)
 
        fdt_fixup_memory(blob, (u64)base, (u64)size);
 
+#if defined(CONFIG_HAS_FSL_DR_USB)
        fdt_fixup_dr_usb(blob, bd);
+#endif
 
        /* P1014 and it's derivatives don't support CAN and eTSEC3 */
        if (cpu->soc_ver == SVR_P1014 || cpu->soc_ver == SVR_P1014_E) {
index 864b3ce8fb1ed425824a92b6c018c68ee88e777b..cfbae69119872fcff406614afb6ed3bd5f8f06e3 100644 (file)
@@ -264,7 +264,9 @@ void ft_board_setup(void *blob, bd_t *bd)
 
        fdt_fixup_memory(blob, (u64)base, (u64)size);
 
+#if defined(CONFIG_HAS_FSL_DR_USB)
        fdt_fixup_dr_usb(blob, bd);
+#endif
 
 #if defined(CONFIG_SDCARD) || defined(CONFIG_SPIFLASH)
        /* Delete eLBC node as it is muxed with USB2 controller */
index 5ff6ea6aa1f810ddbfcccc65f69c6b1456f80f38..79689199c12f5d9a0bfc41daf8f5cffed1432274 100644 (file)
 #include <asm/mmu.h>
 
 struct law_entry law_table[] = {
-       SET_LAW(CONFIG_SYS_FLASH_BASE_PHYS, LAW_SIZE_64M, LAW_TRGT_IF_LBC),
+#ifndef CONFIG_NAND_SPL
        SET_LAW(CONFIG_SYS_CPLD_BASE_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_LBC),
        SET_LAW(CONFIG_SYS_PMC_BASE_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_LBC),
-#ifdef CONFIG_SYS_NAND_BASE_PHYS
-       SET_LAW(CONFIG_SYS_NAND_BASE_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_LBC),
-#endif
 #ifdef CONFIG_VSC7385_ENET
        SET_LAW(CONFIG_SYS_VSC7385_BASE_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_LBC),
 #endif
+#endif
+       SET_LAW(CONFIG_SYS_FLASH_BASE_PHYS, LAW_SIZE_64M, LAW_TRGT_IF_LBC),
+#ifdef CONFIG_SYS_NAND_BASE_PHYS
+       SET_LAW(CONFIG_SYS_NAND_BASE_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_LBC),
+#endif
 };
 
 int num_law_entries = ARRAY_SIZE(law_table);
index 4671128afd4c23548f7c771b7e63a80720960bc8..a60c5a20a982fdbbe8dfb68654884175788cacec 100644 (file)
@@ -444,6 +444,9 @@ void ft_board_setup(void *blob, bd_t *bd)
        fdt_board_fixup_qe_pins(blob);
 #endif
 #endif
+
+#if defined(CONFIG_HAS_FSL_DR_USB)
        fdt_fixup_dr_usb(blob, bd);
+#endif
 }
 #endif
diff --git a/board/freescale/p2020come/Makefile b/board/freescale/p2020come/Makefile
new file mode 100644 (file)
index 0000000..ba87904
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# Copyright 2009 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                    = $(obj)lib$(BOARD).o
+
+COBJS-y                        += $(BOARD).o
+COBJS-y                        += ddr.o
+COBJS-y                        += law.o
+COBJS-y                        += tlb.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
similarity index 56%
rename from onenand_ipl/board/vpac270/u-boot.onenand.lds
rename to board/freescale/p2020come/ddr.c
index b5b26461a44e60076ba080e28efaf0a771a0739d..85f84c6b1e0ba456deb5481228501ec0d3470e95 100644 (file)
@@ -1,6 +1,5 @@
 /*
- * (C) Copyright 2000
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ * Copyright 2009, 2011 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -12,7 +11,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
+#include <common.h>
 
-OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-SECTIONS
-{
-       . = 0x00000000;
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/fsl_ddr_dimm_params.h>
 
-       . = ALIGN(4);
-       .text      :
-       {
-         start.o       (.text)
-         *(.text)
+void fsl_ddr_board_options(memctl_options_t *popts,
+                               dimm_params_t *pdimm,
+                               unsigned int ctrl_num)
+{
+       if (ctrl_num) {
+               printf("Wrong parameter for controller number %d", ctrl_num);
+               return;
        }
 
-       . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
-
-       . = ALIGN(4);
-       .data : { *(.data) }
-
-       . = ALIGN(4);
-       .got : { *(.got) }
+       if (!pdimm->n_ranks)
+               return;
 
-       . = ALIGN(4);
-       __bss_start = .;
-       .bss : { *(.bss) . = ALIGN(4); }
-       __bss_end__ = .;
+       /*
+        * Set DDR_SDRAM_CLK_CNTL = 0x02800000
+        *
+        * Clock is launched 5/8 applied cycle after address/command
+        */
+       popts->clk_adjust = 5;
 }
diff --git a/board/freescale/p2020come/law.c b/board/freescale/p2020come/law.c
new file mode 100644 (file)
index 0000000..20ba36f
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2009 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * Create a dummy LAW entry for the DDR SDRAM which will be replaced when
+ * the DDR SPD setup code runs.
+ *
+ * This table would be empty, except that it is used before the BSS section is
+ * initialized, and therefore must have at least one entry to push it into
+ * the DATA section.
+ */
+struct law_entry law_table[] = {
+       SET_LAW(CONFIG_SYS_SDRAM_BASE, LAW_SIZE_4K, LAW_TRGT_IF_DDR),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/p2020come/p2020come.c b/board/freescale/p2020come/p2020come.c
new file mode 100644 (file)
index 0000000..8cf7bee
--- /dev/null
@@ -0,0 +1,287 @@
+/*
+ * Copyright 2009 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <hwconfig.h>
+#include <command.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+#include <asm/cache.h>
+#include <asm/immap_85xx.h>
+#include <asm/mpc85xx_gpio.h>
+#include <asm/fsl_serdes.h>
+#include <asm/io.h>
+#include <miiphy.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+#include <fsl_mdio.h>
+#include <tsec.h>
+#include <vsc7385.h>
+#include <netdev.h>
+#include <mmc.h>
+#include <malloc.h>
+#include <i2c.h>
+
+#if defined(CONFIG_PCI)
+#include <asm/fsl_pci.h>
+#include <pci.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if defined(CONFIG_PCI)
+void pci_init_board(void)
+{
+       fsl_pcie_init_board(0);
+}
+
+void ft_pci_board_setup(void *blob)
+{
+       FT_FSL_PCI_SETUP;
+}
+#endif
+
+#define BOARD_PERI_RST_SET     (VSC7385_RST_SET | SLIC_RST_SET | \
+                                SGMII_PHY_RST_SET | PCIE_RST_SET | \
+                                RGMII_PHY_RST_SET)
+
+#define SYSCLK_MASK    0x00200000
+#define BOARDREV_MASK  0x10100000
+#define BOARDREV_B     0x10100000
+#define BOARDREV_C     0x00100000
+#define BOARDREV_D     0x00000000
+
+#define SYSCLK_66      66666666
+#define SYSCLK_50      50000000
+#define SYSCLK_100     100000000
+
+unsigned long get_board_sys_clk(ulong dummy)
+{
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       u32 ddr_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO;
+
+       ddr_ratio >>= MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;
+       switch (ddr_ratio) {
+       case 0x0C:
+               return SYSCLK_66;
+       case 0x0A:
+       case 0x08:
+               return SYSCLK_100;
+       default:
+               puts("ERROR: unknown DDR ratio\n");
+               return SYSCLK_100;
+       }
+}
+
+unsigned long get_board_ddr_clk(ulong dummy)
+{
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       u32 ddr_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO;
+
+       ddr_ratio >>= MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;
+       switch (ddr_ratio) {
+       case 0x0C:
+       case 0x0A:
+               return SYSCLK_66;
+       case 0x08:
+               return SYSCLK_100;
+       default:
+               puts("ERROR: unknown DDR ratio\n");
+               return SYSCLK_100;
+       }
+}
+
+#ifdef CONFIG_MMC
+int board_early_init_f(void)
+{
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+
+       setbits_be32(&gur->pmuxcr,
+                       (MPC85xx_PMUXCR_SDHC_CD |
+                        MPC85xx_PMUXCR_SDHC_WP));
+
+       /* All the device are enable except for SRIO12 */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_SRIO);
+       return 0;
+}
+#endif
+
+#define GPIO_DIR               0x0f3a0000
+#define GPIO_ODR               0x00000000
+#define GPIO_DAT               0x001a0000
+
+int checkboard(void)
+{
+       ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR + 0xC00);
+
+       /*
+        * GPIO
+        * 0 - 3: CarryBoard Input;
+        * 4 - 7: CarryBoard Output;
+        * 8 : Mux as SDHC_CD (card detection)
+        * 9 : Mux as SDHC_WP
+        * 10 : Clear Watchdog timer
+        * 11 : LED Input
+        * 12 : Output to 1
+        * 13 : Open Drain
+        * 14 : LED Output
+        * 15 : Switch Input
+        *
+        * Set GPIOs 11, 12, 14 to 1.
+        */
+       out_be32(&pgpio->gpodr, GPIO_ODR);
+       mpc85xx_gpio_set(0xffffffff, GPIO_DIR, GPIO_DAT);
+
+       puts("Board: Freescale COM Express P2020\n");
+       return 0;
+}
+
+#define M41ST85W_I2C_BUS       1
+#define M41ST85W_I2C_ADDR      0x68
+#define M41ST85W_ERROR(fmt, args...) printf("ERROR: M41ST85W: " fmt, ##args)
+
+static void m41st85w_clear_bit(u8 reg, u8 mask, const char *name)
+{
+       u8 data;
+
+       if (i2c_read(M41ST85W_I2C_ADDR, reg, 1, &data, 1)) {
+               M41ST85W_ERROR("unable to read %s bit\n", name);
+               return;
+       }
+
+       if (data & mask) {
+               data &= ~mask;
+               if (i2c_write(M41ST85W_I2C_ADDR, reg, 1, &data, 1)) {
+                       M41ST85W_ERROR("unable to clear %s bit\n", name);
+                       return;
+               }
+       }
+}
+
+#define M41ST85W_REG_SEC2      0x01
+#define M41ST85W_REG_SEC2_ST   0x80
+
+#define M41ST85W_REG_ALHOUR    0x0c
+#define M41ST85W_REG_ALHOUR_HT 0x40
+
+/*
+ * The P2020COME board has a STMicro M41ST85W RTC/watchdog
+ * at i2c bus 1 address 0x68.
+ */
+static void start_rtc(void)
+{
+       unsigned int bus = i2c_get_bus_num();
+
+       if (i2c_set_bus_num(M41ST85W_I2C_BUS)) {
+               M41ST85W_ERROR("unable to set i2c bus\n");
+               goto out;
+       }
+
+       /* ensure ST (stop) and HT (halt update) bits are cleared */
+       m41st85w_clear_bit(M41ST85W_REG_SEC2, M41ST85W_REG_SEC2_ST, "ST");
+       m41st85w_clear_bit(M41ST85W_REG_ALHOUR, M41ST85W_REG_ALHOUR_HT, "HT");
+
+out:
+       /* reset the i2c bus */
+       i2c_set_bus_num(bus);
+}
+
+int board_early_init_r(void)
+{
+       start_rtc();
+       return 0;
+}
+
+#define M41ST85W_REG_WATCHDOG          0x09
+#define M41ST85W_REG_WATCHDOG_WDS      0x80
+#define M41ST85W_REG_WATCHDOG_BMB0     0x04
+
+void board_reset(void)
+{
+       u8 data = M41ST85W_REG_WATCHDOG_WDS | M41ST85W_REG_WATCHDOG_BMB0;
+
+       /* set the hardware watchdog timeout to 1/16 second, then hang */
+       i2c_set_bus_num(M41ST85W_I2C_BUS);
+       i2c_write(M41ST85W_I2C_ADDR, M41ST85W_REG_WATCHDOG, 1, &data, 1);
+
+       while (1)
+               /* hang */;
+}
+
+#ifdef CONFIG_TSEC_ENET
+int board_eth_init(bd_t *bis)
+{
+       struct fsl_pq_mdio_info mdio_info;
+       struct tsec_info_struct tsec_info[4];
+       int num = 0;
+
+#ifdef CONFIG_TSEC1
+       SET_STD_TSEC_INFO(tsec_info[num], 1);
+       num++;
+#endif
+#ifdef CONFIG_TSEC2
+       SET_STD_TSEC_INFO(tsec_info[num], 2);
+       num++;
+#endif
+#ifdef CONFIG_TSEC3
+       SET_STD_TSEC_INFO(tsec_info[num], 3);
+       if (is_serdes_configured(SGMII_TSEC3)) {
+               puts("eTSEC3 is in sgmii mode.");
+               tsec_info[num].flags |= TSEC_SGMII;
+       }
+       num++;
+#endif
+       if (!num) {
+               printf("No TSECs initialized\n");
+               return 0;
+       }
+
+       mdio_info.regs = (struct tsec_mii_mng *)CONFIG_SYS_MDIO_BASE_ADDR;
+       mdio_info.name = DEFAULT_MII_NAME;
+       fsl_pq_mdio_init(bis, &mdio_info);
+
+       tsec_eth_init(bis, tsec_info, num);
+
+       return pci_eth_init(bis);
+}
+#endif
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       phys_addr_t base;
+       phys_size_t size;
+
+       ft_cpu_setup(blob, bd);
+
+       base = getenv_bootm_low();
+       size = getenv_bootm_size();
+
+#if defined(CONFIG_PCI)
+       ft_pci_board_setup(blob);
+#endif
+
+       fdt_fixup_memory(blob, (u64)base, (u64)size);
+
+       fdt_fixup_dr_usb(blob, bd);
+}
+#endif
diff --git a/board/freescale/p2020come/tlb.c b/board/freescale/p2020come/tlb.c
new file mode 100644 (file)
index 0000000..d787ac3
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR,
+                       CONFIG_SYS_INIT_RAM_ADDR_PHYS,
+                       MAS3_SW|MAS3_SR, 0,
+                       0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024 ,
+                       CONFIG_SYS_INIT_RAM_ADDR_PHYS + 4 * 1024,
+                       MAS3_SW|MAS3_SR, 0,
+                       0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024 ,
+                       CONFIG_SYS_INIT_RAM_ADDR_PHYS + 8 * 1024,
+                       MAS3_SW|MAS3_SR, 0,
+                       0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024 ,
+                       CONFIG_SYS_INIT_RAM_ADDR_PHYS + 12 * 1024,
+                       MAS3_SW|MAS3_SR, 0,
+                       0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /* TLB 1 */
+       /* *I*** - Covers boot page */
+       SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 0, BOOKE_PAGESZ_4K, 1),
+
+       /* *I*G* - CCSRBAR */
+       SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 1, BOOKE_PAGESZ_1M, 1),
+
+#if defined(CONFIG_PCI)
+       /* *I*G* - PCI3 - PCI2 0x8000,0000 - 0xbfff,ffff, size = 1G */
+       SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_MEM_VIRT, CONFIG_SYS_PCIE3_MEM_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 2, BOOKE_PAGESZ_1G, 1),
+
+       /* *I*G* - PCI1 0xC000,0000 - 0xcfff,ffff, size = 256M */
+       SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT, CONFIG_SYS_PCIE1_MEM_VIRT,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /* *I*G* - PCI1  0xD000,0000 - 0xDFFF,FFFF, size = 256M */
+       SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT + 0x10000000,
+                       CONFIG_SYS_PCIE1_MEM_PHYS + 0x10000000,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * *I*G* - PCI I/O
+        *
+        * PCI3 => 0xFFC10000
+        * PCI2 => 0xFFC2,0000
+        * PCI1 => 0xFFC3,0000
+        */
+       SET_TLB_ENTRY(1, CONFIG_SYS_PCIE3_IO_VIRT, CONFIG_SYS_PCIE3_IO_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 5, BOOKE_PAGESZ_256K, 1),
+#endif /* #if defined(CONFIG_PCI) */
+
+#if defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SYS_INIT_L2_ADDR)
+       /* *I*G - DDR3  2G     Part 1: 0 - 0x3fff,ffff , size = 1G */
+       SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L2_ADDR, CONFIG_SYS_INIT_L2_ADDR_PHYS,
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 6, BOOKE_PAGESZ_256K, 1),
+
+       /*        DDR3  2G     Part 2: 0x4000,0000 - 0x7fff,ffff , size = 1G */
+       SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L2_ADDR + 0x40000,
+                       CONFIG_SYS_INIT_L2_ADDR_PHYS + 0x40000,
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 7, BOOKE_PAGESZ_256K, 1),
+#endif
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 0a1dfa7cc656e4b2c6d945c78e266e8afee15469..4b0d577e2c14c81bf739079290701ef9287b6a9e 100644 (file)
@@ -139,7 +139,6 @@ void board_ft_fman_fixup_port(void *fdt, char *compat, phys_addr_t addr,
 int board_eth_init(bd_t *bis)
 {
 #ifdef CONFIG_FMAN_ENET
-       struct dtsec *tsec = (void *)CONFIG_SYS_FSL_FM1_DTSEC1_ADDR;
        struct fsl_pq_mdio_info dtsec_mdio_info;
        struct tgec_mdio_info tgec_mdio_info;
        unsigned int i, slot;
@@ -149,13 +148,6 @@ int board_eth_init(bd_t *bis)
 
        initialize_lane_to_slot();
 
-       /*
-        * Set TBIPA on FM1@DTSEC1.  This is needed for configurations
-        * where FM1@DTSEC1 isn't used directly, since it provides
-        * MDIO for other ports.
-        */
-       out_be32(&tsec->tbipa, CONFIG_SYS_TBIPA_VALUE);
-
        dtsec_mdio_info.regs =
                (struct tsec_mii_mng *)CONFIG_SYS_FM1_DTSEC1_MDIO_ADDR;
        dtsec_mdio_info.name = DEFAULT_FM_MDIO_NAME;
index 6461bd7ddd9741b71e299ed0719f8f51710a5450..1f6a34b3d9434de5c7f945e48e94ba7125e246e4 100644 (file)
@@ -83,10 +83,12 @@ int checkboard(void)
        puts("SERDES Reference Clocks: ");
        sw = in_8(&CPLD_SW(2)) >> 2;
        for (i = 0; i < 2; i++) {
-               static const char * const freq[] = {"0", "100", "125"};
+               static const char * const freq[][3] = {{"0", "100", "125"},
+                                               {"100", "156.25", "125"}
+               };
                unsigned int clock = (sw >> (2 * i)) & 3;
 
-               printf("Bank%u=%sMhz ", i+1, freq[clock]);
+               printf("Bank%u=%sMhz ", i+1, freq[i][clock]);
        }
        puts("\n");
 
@@ -166,22 +168,25 @@ int misc_init_r(void)
        u32 actual[NUM_SRDS_BANKS];
        unsigned int i;
        u8 sw;
+       static const int freq[][3] = {
+               {0, SRDS_PLLCR0_RFCK_SEL_100, SRDS_PLLCR0_RFCK_SEL_125},
+               {SRDS_PLLCR0_RFCK_SEL_100, SRDS_PLLCR0_RFCK_SEL_156_25,
+                       SRDS_PLLCR0_RFCK_SEL_125}
+       };
 
        sw = in_8(&CPLD_SW(2)) >> 2;
        for (i = 0; i < NUM_SRDS_BANKS; i++) {
                unsigned int clock = (sw >> (2 * i)) & 3;
-               switch (clock) {
-               case 1:
-                       actual[i] = SRDS_PLLCR0_RFCK_SEL_100;
-                       break;
-               case 2:
-                       actual[i] = SRDS_PLLCR0_RFCK_SEL_125;
-                       break;
-               default:
+               if (clock == 0x3) {
                        printf("Warning: SDREFCLK%u switch setting of '11' is "
                               "unsupported\n", i + 1);
                        break;
                }
+               if (i == 0 && clock == 0)
+                       puts("Warning: SDREFCLK1 switch setting of"
+                               "'00' is unsupported\n");
+               else
+                       actual[i] = freq[i][clock];
        }
 
        for (i = 0; i < NUM_SRDS_BANKS; i++) {
diff --git a/board/freescale/p3060qds/Makefile b/board/freescale/p3060qds/Makefile
new file mode 100644 (file)
index 0000000..ae136f4
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Copyright 2011 Freescale Semiconductor, Inc.
+# (C) Copyright 2001-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).o
+
+COBJS-y += $(BOARD).o
+COBJS-y += ddr.o
+COBJS-y += eth.o
+COBJS-y += fixed_ddr.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+clean:
+       rm -f $(OBJS) $(SOBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/p3060qds/ddr.c b/board/freescale/p3060qds/ddr.c
new file mode 100644 (file)
index 0000000..9affbf0
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+ * Copyright 2009-2011 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * Version 2 as published by the Free Software Foundation.
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <hwconfig.h>
+#include <asm/mmu.h>
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/fsl_ddr_dimm_params.h>
+#include <asm/fsl_law.h>
+
+#include "p3060qds.h"
+
+/*
+ * Fixed sdram init -- doesn't use serial presence detect.
+ */
+
+phys_size_t fixed_sdram(void)
+{
+       int i;
+       char buf[32];
+       fsl_ddr_cfg_regs_t ddr_cfg_regs;
+       phys_size_t ddr_size;
+       unsigned int lawbar1_target_id;
+       ulong ddr_freq, ddr_freq_mhz;
+
+       ddr_freq = get_ddr_freq(0);
+       ddr_freq_mhz = ddr_freq / 1000000;
+
+       printf("Configuring DDR for %s MT/s data rate\n",
+                               strmhz(buf, ddr_freq));
+
+       for (i = 0; fixed_ddr_parm_0[i].max_freq > 0; i++) {
+               if ((ddr_freq_mhz > fixed_ddr_parm_0[i].min_freq) &&
+                  (ddr_freq_mhz <= fixed_ddr_parm_0[i].max_freq)) {
+                       memcpy(&ddr_cfg_regs,
+                               fixed_ddr_parm_0[i].ddr_settings,
+                               sizeof(ddr_cfg_regs));
+                       break;
+               }
+       }
+
+       if (fixed_ddr_parm_0[i].max_freq == 0)
+               panic("Unsupported DDR data rate %s MT/s data rate\n",
+                       strmhz(buf, ddr_freq));
+
+       ddr_size = (phys_size_t) CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
+       ddr_cfg_regs.ddr_cdr1 = DDR_CDR1_DHC_EN;
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0);
+
+       /*
+        * setup laws for DDR. If not interleaving, presuming half memory on
+        * DDR1 and the other half on DDR2
+        */
+       if (fixed_ddr_parm_0[i].ddr_settings->cs[0].config & 0x20000000) {
+               if (set_ddr_laws(CONFIG_SYS_DDR_SDRAM_BASE,
+                                ddr_size,
+                                LAW_TRGT_IF_DDR_INTRLV) < 0) {
+                       printf("ERROR setting Local Access Windows for DDR\n");
+                       return 0;
+               }
+       } else {
+               lawbar1_target_id = LAW_TRGT_IF_DDR_1;
+               if (set_ddr_laws(CONFIG_SYS_DDR_SDRAM_BASE,
+                                ddr_size,
+                                lawbar1_target_id) < 0) {
+                       printf("ERROR setting Local Access Windows for DDR\n");
+                       return 0;
+               }
+       }
+       return ddr_size;
+}
+
+struct board_specific_params {
+       u32 n_ranks;
+       u32 datarate_mhz_high;
+       u32 clk_adjust;
+       u32 wrlvl_start;
+       u32 cpo;
+       u32 write_data_delay;
+       u32 force_2T;
+};
+
+/*
+ * This table contains all valid speeds we want to override with board
+ * specific parameters. datarate_mhz_high values need to be in ascending order
+ * for each n_ranks group.
+ */
+static const struct board_specific_params udimm[] = {
+       /*
+        * memory controller 0
+        *   num|  hi|  clk| wrlvl | cpo  |wrdata|2T
+        * ranks| mhz|adjst| start |      |delay |
+        */
+       {4,   850,    4,     6,   0xff,    2,  0},
+       {4,   950,    5,     7,   0xff,    2,  0},
+       {4,  1050,    5,     8,   0xff,    2,  0},
+       {4,  1250,    5,    10,   0xff,    2,  0},
+       {4,  1350,    5,    11,   0xff,    2,  0},
+       {4,  1666,    5,    12,   0xff,    2,  0},
+       {2,   850,    5,     6,   0xff,    2,  0},
+       {2,   950,    5,     7,   0xff,    2,  0},
+       {2,  1250,    4,     6,   0xff,    2,  0},
+       {2,  1350,    5,     7,   0xff,    2,  0},
+       {2,  1666,    5,     8,   0xff,    2,  0},
+       {1,   850,    4,     5,   0xff,    2,  0},
+       {1,   950,    4,     7,   0xff,    2,  0},
+       {1,  1666,    4,     8,   0xff,    2,  0},
+       {}
+};
+
+static const struct board_specific_params rdimm[] = {
+       /*
+        * memory controller 0
+        *   num|  hi|  clk| wrlvl | cpo  |wrdata|2T
+        * ranks| mhz|adjst| start |      |delay |
+        */
+       {4,   850,    4,     6,   0xff,    2,  0},
+       {4,   950,    5,     7,   0xff,    2,  0},
+       {4,  1050,    5,     8,   0xff,    2,  0},
+       {4,  1250,    5,    10,   0xff,    2,  0},
+       {4,  1350,    5,    11,   0xff,    2,  0},
+       {4,  1666,    5,    12,   0xff,    2,  0},
+       {2,   850,    4,     6,   0xff,    2,  0},
+       {2,  1050,    4,     7,   0xff,    2,  0},
+       {2,  1666,    4,     8,   0xff,    2,  0},
+       {1,   850,    4,     5,   0xff,    2,  0},
+       {1,   950,    4,     7,   0xff,    2,  0},
+       {1,  1666,    4,     8,   0xff,    2,  0},
+       {}
+};
+
+void fsl_ddr_board_options(memctl_options_t *popts,
+                               dimm_params_t *pdimm,
+                               unsigned int ctrl_num)
+{
+       const struct board_specific_params *pbsp, *pbsp_highest = NULL;
+       ulong ddr_freq;
+
+       if (ctrl_num) {
+               printf("Wrong parameter for controller number %d", ctrl_num);
+               return;
+       }
+       if (!pdimm->n_ranks)
+               return;
+
+       if (popts->registered_dimm_en)
+               pbsp = rdimm;
+       else
+               pbsp = udimm;
+
+       /* Get clk_adjust, cpo, write_data_delay,2T, according to the board ddr
+        * freqency and n_banks specified in board_specific_parameters table.
+        */
+       ddr_freq = get_ddr_freq(0) / 1000000;
+       while (pbsp->datarate_mhz_high) {
+               if (pbsp->n_ranks == pdimm->n_ranks) {
+                       if (ddr_freq <= pbsp->datarate_mhz_high) {
+                               popts->cpo_override = pbsp->cpo;
+                               popts->write_data_delay =
+                                       pbsp->write_data_delay;
+                               popts->clk_adjust = pbsp->clk_adjust;
+                               popts->wrlvl_start = pbsp->wrlvl_start;
+                               popts->twoT_en = pbsp->force_2T;
+                               goto found;
+                       }
+                       pbsp_highest = pbsp;
+               }
+               pbsp++;
+       }
+
+       if (pbsp_highest) {
+               printf("Error: board specific timing not found "
+                       "for data rate %lu MT/s!\n"
+                       "Trying to use the highest speed (%u) parameters\n",
+                       ddr_freq, pbsp_highest->datarate_mhz_high);
+               popts->cpo_override = pbsp_highest->cpo;
+               popts->write_data_delay = pbsp_highest->write_data_delay;
+               popts->clk_adjust = pbsp_highest->clk_adjust;
+               popts->wrlvl_start = pbsp_highest->wrlvl_start;
+               popts->twoT_en = pbsp_highest->force_2T;
+       } else {
+               panic("DIMM is not supported by this board");
+       }
+
+
+found:
+
+       /*
+        * The datasheet of HMT125U7BFR8C-H9 blocks CL=7 as reservered.
+        * However SPD still claims CL=7 is supported. Extensive tests
+        * confirmed this board cannot work stably with CL=7 with this
+        * particular DIMM.
+        */
+       if (ddr_freq >= 800 && ddr_freq < 1066 && \
+               !strncmp(pdimm[0].mpart, "HMT125U7BFR8C-H9", 16)) {
+               popts->cas_latency_override = 1;
+               popts->cas_latency_override_value = 8;
+               debug("Override CL to 8\n");
+       }
+       /*
+        * Factors to consider for half-strength driver enable:
+        *      - number of DIMMs installed
+        */
+       popts->half_strength_driver_enable = 0;
+       /*
+        * Write leveling override
+        */
+       popts->wrlvl_override = 1;
+       popts->wrlvl_sample = 0xf;
+
+       /*
+        * Rtt and Rtt_WR override
+        */
+       popts->rtt_override = 0;
+
+       /* Enable ZQ calibration */
+       popts->zq_en = 1;
+
+       /* DHC_EN =1, ODT = 60 Ohm */
+       popts->ddr_cdr1 = DDR_CDR1_DHC_EN;
+}
+
+phys_size_t initdram(int board_type)
+{
+       phys_size_t dram_size;
+
+       puts("Initializing....");
+
+       if (fsl_use_spd()) {
+               puts("using SPD\n");
+               dram_size = fsl_ddr_sdram();
+       } else {
+               puts("using fixed parameters\n");
+               dram_size = fixed_sdram();
+       }
+
+       dram_size = setup_ddr_tlbs(dram_size / 0x100000);
+       dram_size *= 0x100000;
+
+       debug("    DDR: ");
+       return dram_size;
+}
diff --git a/board/freescale/p3060qds/eth.c b/board/freescale/p3060qds/eth.c
new file mode 100644 (file)
index 0000000..3f812db
--- /dev/null
@@ -0,0 +1,482 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <netdev.h>
+#include <asm/mmu.h>
+#include <asm/processor.h>
+#include <asm/cache.h>
+#include <asm/immap_85xx.h>
+#include <asm/fsl_law.h>
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/fsl_serdes.h>
+#include <asm/fsl_portals.h>
+#include <asm/fsl_liodn.h>
+#include <malloc.h>
+#include <fm_eth.h>
+#include <fsl_mdio.h>
+#include <miiphy.h>
+#include <phy.h>
+#include <asm/fsl_dtsec.h>
+
+#include "../common/qixis.h"
+#include "../common/fman.h"
+
+#include "p3060qds_qixis.h"
+
+#define EMI_NONE       0xffffffff
+#define EMI1_RGMII1    0
+#define EMI1_SLOT1     1
+#define EMI1_SLOT2     2
+#define EMI1_SLOT3     3
+#define EMI1_RGMII2    4
+
+static int mdio_mux[NUM_FM_PORTS];
+
+static char *mdio_names[5] = {
+       "P3060QDS_MDIO0",
+       "P3060QDS_MDIO1",
+       "P3060QDS_MDIO2",
+       "P3060QDS_MDIO3",
+       "P3060QDS_MDIO4",
+};
+
+/*
+ * Mapping of all 18 SERDES lanes to board slots.
+ * A value of '0' here means that the mapping must be determined
+ * dynamically, Lane 8/9/16/17 map to Slot1 or Aurora debug
+ */
+static u8 lane_to_slot[] = {
+       4, 4, 4, 4, 3, 3, 3, 3, 0, 0, 2, 2, 2, 2, 1, 1, 0, 0
+};
+
+static char *p3060qds_mdio_name_for_muxval(u32 muxval)
+{
+       return mdio_names[muxval];
+}
+
+struct mii_dev *mii_dev_for_muxval(u32 muxval)
+{
+       struct mii_dev *bus;
+       char *name = p3060qds_mdio_name_for_muxval(muxval);
+
+       if (!name) {
+               printf("No bus for muxval %x\n", muxval);
+               return NULL;
+       }
+
+       bus = miiphy_get_dev_by_name(name);
+
+       if (!bus) {
+               printf("No bus by name %s\n", name);
+               return NULL;
+       }
+
+       return bus;
+}
+
+struct p3060qds_mdio {
+       u32 muxval;
+       struct mii_dev *realbus;
+};
+
+static void p3060qds_mux_mdio(u32 muxval)
+{
+       u8 brdcfg4;
+
+       brdcfg4 = QIXIS_READ(brdcfg[4]);
+       brdcfg4 &= ~BRDCFG4_EMISEL_MASK;
+       brdcfg4 |= (muxval << 4);
+       QIXIS_WRITE(brdcfg[4], brdcfg4);
+}
+
+static int p3060qds_mdio_read(struct mii_dev *bus, int addr, int devad,
+                               int regnum)
+{
+       struct p3060qds_mdio *priv = bus->priv;
+
+       p3060qds_mux_mdio(priv->muxval);
+
+       return priv->realbus->read(priv->realbus, addr, devad, regnum);
+}
+
+static int p3060qds_mdio_write(struct mii_dev *bus, int addr, int devad,
+                               int regnum, u16 value)
+{
+       struct p3060qds_mdio *priv = bus->priv;
+
+       p3060qds_mux_mdio(priv->muxval);
+
+       return priv->realbus->write(priv->realbus, addr, devad, regnum, value);
+}
+
+static int p3060qds_mdio_reset(struct mii_dev *bus)
+{
+       struct p3060qds_mdio *priv = bus->priv;
+
+       return priv->realbus->reset(priv->realbus);
+}
+
+static int p3060qds_mdio_init(char *realbusname, u32 muxval)
+{
+       struct p3060qds_mdio *pmdio;
+       struct mii_dev *bus = mdio_alloc();
+
+       if (!bus) {
+               printf("Failed to allocate P3060QDS MDIO bus\n");
+               return -1;
+       }
+
+       pmdio = malloc(sizeof(*pmdio));
+       if (!pmdio) {
+               printf("Failed to allocate P3060QDS private data\n");
+               free(bus);
+               return -1;
+       }
+
+       bus->read = p3060qds_mdio_read;
+       bus->write = p3060qds_mdio_write;
+       bus->reset = p3060qds_mdio_reset;
+       sprintf(bus->name, p3060qds_mdio_name_for_muxval(muxval));
+
+       pmdio->realbus = miiphy_get_dev_by_name(realbusname);
+
+       if (!pmdio->realbus) {
+               printf("No bus with name %s\n", realbusname);
+               free(bus);
+               free(pmdio);
+               return -1;
+       }
+
+       pmdio->muxval = muxval;
+       bus->priv = pmdio;
+
+       return mdio_register(bus);
+}
+
+void board_ft_fman_fixup_port(void *blob, char * prop, phys_addr_t pa,
+                               enum fm_port port, int offset)
+{
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       int srds_prtcl = (in_be32(&gur->rcwsr[4]) &
+                         FSL_CORENET_RCWSR4_SRDS_PRTCL) >> 26;
+
+       if (mdio_mux[port] == EMI1_RGMII1)
+               fdt_set_phy_handle(blob, prop, pa, "phy_rgmii1");
+
+       if (mdio_mux[port] == EMI1_RGMII2)
+               fdt_set_phy_handle(blob, prop, pa, "phy_rgmii2");
+
+       if ((mdio_mux[port] == EMI1_SLOT1) && ((srds_prtcl == 0x3)
+               || (srds_prtcl == 0x6))) {
+               switch (port) {
+               case FM2_DTSEC4:
+                       fdt_set_phy_handle(blob, prop, pa, "phy2_slot1");
+                       break;
+               case FM1_DTSEC4:
+                       fdt_set_phy_handle(blob, prop, pa, "phy3_slot1");
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       if (mdio_mux[port] == EMI1_SLOT3) {
+               switch (port) {
+               case FM2_DTSEC3:
+                       fdt_set_phy_handle(blob, prop, pa, "phy0_slot3");
+                       break;
+               case FM1_DTSEC3:
+                       fdt_set_phy_handle(blob, prop, pa, "phy1_slot3");
+                       break;
+               default:
+                       break;
+               }
+       }
+}
+
+void fdt_fixup_board_enet(void *fdt)
+{
+       int i, lane, idx;
+
+       for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) {
+               idx = i - FM1_DTSEC1;
+               switch (fm_info_get_enet_if(i)) {
+               case PHY_INTERFACE_MODE_SGMII:
+                       lane = serdes_get_first_lane(SGMII_FM1_DTSEC1 + idx);
+                       if (lane < 0)
+                               break;
+
+                       switch (mdio_mux[i]) {
+                       case EMI1_SLOT1:
+                               if (lane >= 14) {
+                                       fdt_status_okay_by_alias(fdt,
+                                               "emi1_slot1");
+                                       fdt_status_disabled_by_alias(fdt,
+                                               "emi1_slot1_bk1");
+                               } else {
+                                       fdt_status_disabled_by_alias(fdt,
+                                               "emi1_slot1");
+                                       fdt_status_okay_by_alias(fdt,
+                                               "emi1_slot1_bk1");
+                               }
+                               break;
+                       case EMI1_SLOT2:
+                               fdt_status_okay_by_alias(fdt, "emi1_slot2");
+                               break;
+                       case EMI1_SLOT3:
+                               fdt_status_okay_by_alias(fdt, "emi1_slot3");
+                               break;
+                       }
+               break;
+               case PHY_INTERFACE_MODE_RGMII:
+                       if (i == FM1_DTSEC1)
+                               fdt_status_okay_by_alias(fdt, "emi1_rgmii1");
+
+                       if (i == FM1_DTSEC2)
+                               fdt_status_okay_by_alias(fdt, "emi1_rgmii2");
+                       break;
+               default:
+                       break;
+               }
+       }
+#if (CONFIG_SYS_NUM_FMAN == 2)
+       for (i = FM2_DTSEC1; i < FM2_DTSEC1 + CONFIG_SYS_NUM_FM2_DTSEC; i++) {
+               idx = i - FM2_DTSEC1;
+               switch (fm_info_get_enet_if(i)) {
+               case PHY_INTERFACE_MODE_SGMII:
+                       lane = serdes_get_first_lane(SGMII_FM2_DTSEC1 + idx);
+                       if (lane >= 0) {
+                               switch (mdio_mux[i]) {
+                               case EMI1_SLOT1:
+                                       if (lane >= 14)
+                                               fdt_status_okay_by_alias(fdt,
+                                                       "emi1_slot1");
+                                       else
+                                               fdt_status_okay_by_alias(fdt,
+                                                       "emi1_slot1_bk1");
+                                       break;
+                               case EMI1_SLOT2:
+                                       fdt_status_okay_by_alias(fdt,
+                                               "emi1_slot2");
+                                       break;
+                               case EMI1_SLOT3:
+                                       fdt_status_okay_by_alias(fdt,
+                                               "emi1_slot3");
+                                       break;
+                               }
+                       }
+                       break;
+               default:
+                       break;
+               }
+       }
+#endif
+}
+
+static void initialize_lane_to_slot(void)
+{
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       int sdprtl = (in_be32(&gur->rcwsr[4]) &
+                               FSL_CORENET_RCWSR4_SRDS_PRTCL) >> 26;
+
+       switch (sdprtl) {
+       case 0x03:
+       case 0x06:
+               lane_to_slot[8] = 1;
+               lane_to_slot[9] = lane_to_slot[8];
+               lane_to_slot[16] = 5;
+               lane_to_slot[17] = lane_to_slot[16];
+               break;
+       case 0x16:
+       case 0x19:
+       case 0x1C:
+               lane_to_slot[8] = 5;
+               lane_to_slot[9] = lane_to_slot[8];
+               lane_to_slot[16] = 1;
+               lane_to_slot[17] = lane_to_slot[16];
+               break;
+       default:
+               puts("Invalid SerDes protocol for P3060QDS\n");
+               break;
+       }
+}
+
+int board_eth_init(bd_t *bis)
+{
+#ifdef CONFIG_FMAN_ENET
+       struct dtsec *tsec = (void *)CONFIG_SYS_FSL_FM1_DTSEC1_ADDR;
+       int i;
+       struct fsl_pq_mdio_info dtsec_mdio_info;
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       int srds_cfg = (in_be32(&gur->rcwsr[4]) &
+                               FSL_CORENET_RCWSR4_SRDS_PRTCL) >> 26;
+
+       initialize_lane_to_slot();
+
+       /*
+        * Set TBIPA on FM1@DTSEC1.  This is needed for configurations
+        * where FM1@DTSEC1 isn't used directly, since it provides
+        * MDIO for other ports.
+        */
+       out_be32(&tsec->tbipa, CONFIG_SYS_TBIPA_VALUE);
+
+       /* Initialize the mdio_mux array so we can recognize empty elements */
+       for (i = 0; i < NUM_FM_PORTS; i++)
+               mdio_mux[i] = EMI_NONE;
+
+       dtsec_mdio_info.regs =
+               (struct tsec_mii_mng *)CONFIG_SYS_FM1_DTSEC1_MDIO_ADDR;
+       dtsec_mdio_info.name = DEFAULT_FM_MDIO_NAME;
+
+       /* Register the 1G MDIO bus */
+       fsl_pq_mdio_init(bis, &dtsec_mdio_info);
+
+       /* Register the 5 muxing front-ends to the MDIO buses */
+       if (fm_info_get_enet_if(FM1_DTSEC1) == PHY_INTERFACE_MODE_RGMII)
+               p3060qds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_RGMII1);
+
+       if (fm_info_get_enet_if(FM1_DTSEC2) == PHY_INTERFACE_MODE_RGMII)
+               p3060qds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_RGMII2);
+       p3060qds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_SLOT1);
+       p3060qds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_SLOT2);
+       p3060qds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_SLOT3);
+
+       if (fm_info_get_enet_if(FM1_DTSEC1) == PHY_INTERFACE_MODE_RGMII)
+               fm_info_set_phy_address(FM1_DTSEC1, 1); /* RGMII1 */
+       else if (fm_info_get_enet_if(FM1_DTSEC1) == PHY_INTERFACE_MODE_SGMII)
+               fm_info_set_phy_address(FM1_DTSEC1, SGMII_CARD_PORT2_PHY_ADDR);
+
+       if (fm_info_get_enet_if(FM1_DTSEC2) == PHY_INTERFACE_MODE_RGMII)
+               fm_info_set_phy_address(FM1_DTSEC2, 2); /* RGMII2 */
+       else if (fm_info_get_enet_if(FM1_DTSEC2) == PHY_INTERFACE_MODE_SGMII)
+               fm_info_set_phy_address(FM1_DTSEC2, SGMII_CARD_PORT4_PHY_ADDR);
+
+       fm_info_set_phy_address(FM2_DTSEC1, SGMII_CARD_PORT1_PHY_ADDR);
+       fm_info_set_phy_address(FM2_DTSEC2, SGMII_CARD_PORT3_PHY_ADDR);
+
+       switch (srds_cfg) {
+       case 0x03:
+       case 0x06:
+               fm_info_set_phy_address(FM2_DTSEC3, SGMII_CARD_PORT3_PHY_ADDR);
+               fm_info_set_phy_address(FM1_DTSEC3, SGMII_CARD_PORT4_PHY_ADDR);
+               fm_info_set_phy_address(FM2_DTSEC4, SGMII_CARD_PORT1_PHY_ADDR);
+               fm_info_set_phy_address(FM1_DTSEC4, SGMII_CARD_PORT2_PHY_ADDR);
+               break;
+       case 0x16:
+       case 0x19:
+       case 0x1C:
+               fm_info_set_phy_address(FM2_DTSEC3, SGMII_CARD_PORT1_PHY_ADDR);
+               fm_info_set_phy_address(FM1_DTSEC3, SGMII_CARD_PORT2_PHY_ADDR);
+               fm_info_set_phy_address(FM2_DTSEC4, SGMII_CARD_PORT3_PHY_ADDR);
+               fm_info_set_phy_address(FM1_DTSEC4, SGMII_CARD_PORT4_PHY_ADDR);
+               break;
+       default:
+               puts("Invalid SerDes protocol for P3060QDS\n");
+               break;
+       }
+
+       for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) {
+               int idx = i - FM1_DTSEC1, lane, slot;
+               switch (fm_info_get_enet_if(i)) {
+               case PHY_INTERFACE_MODE_SGMII:
+                       lane = serdes_get_first_lane(SGMII_FM1_DTSEC1 + idx);
+                       if (lane < 0)
+                               break;
+                       slot = lane_to_slot[lane];
+                       if (QIXIS_READ(present) & (1 << (slot - 1)))
+                               fm_disable_port(i);
+                       switch (slot) {
+                       case 1:
+                               mdio_mux[i] = EMI1_SLOT1;
+                               fm_info_set_mdio(i,
+                                       mii_dev_for_muxval(mdio_mux[i]));
+                               break;
+                       case 2:
+                               mdio_mux[i] = EMI1_SLOT2;
+                               fm_info_set_mdio(i,
+                                       mii_dev_for_muxval(mdio_mux[i]));
+                               break;
+                       case 3:
+                               mdio_mux[i] = EMI1_SLOT3;
+                               fm_info_set_mdio(i,
+                                       mii_dev_for_muxval(mdio_mux[i]));
+                               break;
+                       };
+                       break;
+               case PHY_INTERFACE_MODE_RGMII:
+                       if (i == FM1_DTSEC1) {
+                               mdio_mux[i] = EMI1_RGMII1;
+                               fm_info_set_mdio(i,
+                                       mii_dev_for_muxval(mdio_mux[i]));
+                       } else if (i == FM1_DTSEC2) {
+                               mdio_mux[i] = EMI1_RGMII2;
+                               fm_info_set_mdio(i,
+                                       mii_dev_for_muxval(mdio_mux[i]));
+                       }
+                       break;
+               default:
+                       break;
+               }
+       }
+
+#if (CONFIG_SYS_NUM_FMAN == 2)
+       for (i = FM2_DTSEC1; i < FM2_DTSEC1 + CONFIG_SYS_NUM_FM2_DTSEC; i++) {
+               int idx = i - FM2_DTSEC1, lane, slot;
+               switch (fm_info_get_enet_if(i)) {
+               case PHY_INTERFACE_MODE_SGMII:
+                       lane = serdes_get_first_lane(SGMII_FM2_DTSEC1 + idx);
+                       if (lane < 0)
+                               break;
+                       slot = lane_to_slot[lane];
+                       if (QIXIS_READ(present) & (1 << (slot - 1)))
+                               fm_disable_port(i);
+                       switch (slot) {
+                       case 1:
+                               mdio_mux[i] = EMI1_SLOT1;
+                               fm_info_set_mdio(i,
+                                       mii_dev_for_muxval(mdio_mux[i]));
+                               break;
+                       case 2:
+                               mdio_mux[i] = EMI1_SLOT2;
+                               fm_info_set_mdio(i,
+                                       mii_dev_for_muxval(mdio_mux[i]));
+                               break;
+                       case 3:
+                               mdio_mux[i] = EMI1_SLOT3;
+                               fm_info_set_mdio(i,
+                                       mii_dev_for_muxval(mdio_mux[i]));
+                               break;
+                       };
+                       break;
+               default:
+                       break;
+               }
+       }
+#endif /* CONFIG_SYS_NUM_FMAN */
+
+       cpu_eth_init(bis);
+#endif /* CONFIG_FMAN_ENET */
+
+       return pci_eth_init(bis);
+}
diff --git a/board/freescale/p3060qds/fixed_ddr.c b/board/freescale/p3060qds/fixed_ddr.c
new file mode 100644 (file)
index 0000000..125988d
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2009-2011 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * Version 2 as published by the Free Software Foundation.
+ */
+
+#include <common.h>
+#include <asm/fsl_ddr_sdram.h>
+
+#define CONFIG_SYS_DDR_TIMING_3_1200   0x01030000
+#define CONFIG_SYS_DDR_TIMING_0_1200   0xCC550104
+#define CONFIG_SYS_DDR_TIMING_1_1200   0x868FAA45
+#define CONFIG_SYS_DDR_TIMING_2_1200   0x0FB8A912
+#define CONFIG_SYS_DDR_MODE_1_1200     0x00441A40
+#define CONFIG_SYS_DDR_MODE_2_1200     0x00100000
+#define CONFIG_SYS_DDR_INTERVAL_1200   0x12480100
+#define CONFIG_SYS_DDR_CLK_CTRL_1200   0x02800000
+
+#define CONFIG_SYS_DDR_TIMING_3_1000   0x00020000
+#define CONFIG_SYS_DDR_TIMING_0_1000   0xCC440104
+#define CONFIG_SYS_DDR_TIMING_1_1000   0x727DF944
+#define CONFIG_SYS_DDR_TIMING_2_1000   0x0FB088CF
+#define CONFIG_SYS_DDR_MODE_1_1000     0x00441830
+#define CONFIG_SYS_DDR_MODE_2_1000     0x00080000
+#define CONFIG_SYS_DDR_INTERVAL_1000   0x0F3C0100
+#define CONFIG_SYS_DDR_CLK_CTRL_1000   0x02800000
+
+#define CONFIG_SYS_DDR_TIMING_3_900    0x00020000
+#define CONFIG_SYS_DDR_TIMING_0_900    0xCC440104
+#define CONFIG_SYS_DDR_TIMING_1_900    0x616ba844
+#define CONFIG_SYS_DDR_TIMING_2_900    0x0fb088ce
+#define CONFIG_SYS_DDR_MODE_1_900      0x00441620
+#define CONFIG_SYS_DDR_MODE_2_900      0x00080000
+#define CONFIG_SYS_DDR_INTERVAL_900    0x0db60100
+#define CONFIG_SYS_DDR_CLK_CTRL_900    0x02800000
+
+#define CONFIG_SYS_DDR_TIMING_3_800    0x00020000
+#define CONFIG_SYS_DDR_TIMING_0_800    0xcc330104
+#define CONFIG_SYS_DDR_TIMING_1_800    0x6f6b4744
+#define CONFIG_SYS_DDR_TIMING_2_800    0x0fa888cc
+#define CONFIG_SYS_DDR_MODE_1_800      0x00441420
+#define CONFIG_SYS_DDR_MODE_2_800      0x00000000
+#define CONFIG_SYS_DDR_INTERVAL_800    0x0c300100
+#define CONFIG_SYS_DDR_CLK_CTRL_800    0x02800000
+
+#define CONFIG_SYS_DDR_CS0_BNDS                0x000000FF
+#define CONFIG_SYS_DDR_CS1_BNDS                0x00000000
+#define CONFIG_SYS_DDR_CS2_BNDS                0x000000FF
+#define CONFIG_SYS_DDR_CS3_BNDS                0x000000FF
+#define CONFIG_SYS_DDR2_CS0_BNDS       0x000000FF
+#define CONFIG_SYS_DDR2_CS1_BNDS       0x00000000
+#define CONFIG_SYS_DDR2_CS2_BNDS       0x000000FF
+#define CONFIG_SYS_DDR2_CS3_BNDS       0x000000FF
+#define CONFIG_SYS_DDR_CS0_CONFIG      0xA0044202
+#define CONFIG_SYS_DDR_CS0_CONFIG_2    0x00000000
+#define CONFIG_SYS_DDR_CS1_CONFIG      0x80004202
+#define CONFIG_SYS_DDR_CS2_CONFIG      0x00000000
+#define CONFIG_SYS_DDR_CS3_CONFIG      0x00000000
+#define CONFIG_SYS_DDR2_CS0_CONFIG     0x80044202
+#define CONFIG_SYS_DDR2_CS1_CONFIG     0x80004202
+#define CONFIG_SYS_DDR2_CS2_CONFIG     0x00000000
+#define CONFIG_SYS_DDR2_CS3_CONFIG     0x00000000
+#define CONFIG_SYS_DDR_INIT_ADDR       0x00000000
+#define CONFIG_SYS_DDR_INIT_EXT_ADDR   0x00000000
+#define CONFIG_SYS_DDR_CS1_CONFIG      0x80004202
+#define CONFIG_SYS_DDR_DATA_INIT       0xdeadbeef
+#define CONFIG_SYS_DDR_TIMING_4                0x00000001
+#define CONFIG_SYS_DDR_TIMING_5                0x02401400
+#define CONFIG_SYS_DDR_MODE_CONTROL    0x00000000
+#define CONFIG_SYS_DDR_ZQ_CNTL         0x89080600
+#define CONFIG_SYS_DDR_WRLVL_CNTL      0x8675F607
+#define CONFIG_SYS_DDR_SDRAM_CFG       0xE7044000
+#define CONFIG_SYS_DDR_SDRAM_CFG2      0x24401031
+#define CONFIG_SYS_DDR_RCW_1           0x00000000
+#define CONFIG_SYS_DDR_RCW_2           0x00000000
+#define CONFIG_MEM_INIT_VALUE          0xdeadbeef
+
+fsl_ddr_cfg_regs_t ddr_cfg_regs_800 = {
+       .cs[0].bnds = CONFIG_SYS_DDR_CS0_BNDS,
+       .cs[1].bnds = CONFIG_SYS_DDR_CS1_BNDS,
+       .cs[2].bnds = CONFIG_SYS_DDR_CS2_BNDS,
+       .cs[3].bnds = CONFIG_SYS_DDR_CS3_BNDS,
+       .cs[0].config = CONFIG_SYS_DDR_CS0_CONFIG,
+       .cs[0].config_2 = CONFIG_SYS_DDR_CS0_CONFIG_2,
+       .cs[1].config = CONFIG_SYS_DDR_CS1_CONFIG,
+       .cs[2].config = CONFIG_SYS_DDR_CS2_CONFIG,
+       .cs[3].config = CONFIG_SYS_DDR_CS3_CONFIG,
+       .timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3_800,
+       .timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0_800,
+       .timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1_800,
+       .timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2_800,
+       .ddr_sdram_cfg = CONFIG_SYS_DDR_SDRAM_CFG,
+       .ddr_sdram_cfg_2 = CONFIG_SYS_DDR_SDRAM_CFG2,
+       .ddr_sdram_mode = CONFIG_SYS_DDR_MODE_1_800,
+       .ddr_sdram_mode_2 = CONFIG_SYS_DDR_MODE_2_800,
+       .ddr_sdram_md_cntl = CONFIG_SYS_DDR_MODE_CONTROL,
+       .ddr_sdram_interval = CONFIG_SYS_DDR_INTERVAL_800,
+       .ddr_data_init = CONFIG_MEM_INIT_VALUE,
+       .ddr_sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL_800,
+       .ddr_init_addr = CONFIG_SYS_DDR_INIT_ADDR,
+       .ddr_init_ext_addr = CONFIG_SYS_DDR_INIT_EXT_ADDR,
+       .timing_cfg_4 = CONFIG_SYS_DDR_TIMING_4,
+       .timing_cfg_5 = CONFIG_SYS_DDR_TIMING_5,
+       .ddr_zq_cntl = CONFIG_SYS_DDR_ZQ_CNTL,
+       .ddr_wrlvl_cntl = CONFIG_SYS_DDR_WRLVL_CNTL,
+       .ddr_sdram_rcw_1 = CONFIG_SYS_DDR_RCW_1,
+       .ddr_sdram_rcw_2 = CONFIG_SYS_DDR_RCW_2
+};
+
+fsl_ddr_cfg_regs_t ddr_cfg_regs_900 = {
+       .cs[0].bnds = CONFIG_SYS_DDR_CS0_BNDS,
+       .cs[1].bnds = CONFIG_SYS_DDR_CS1_BNDS,
+       .cs[2].bnds = CONFIG_SYS_DDR_CS2_BNDS,
+       .cs[3].bnds = CONFIG_SYS_DDR_CS3_BNDS,
+       .cs[0].config = CONFIG_SYS_DDR_CS0_CONFIG,
+       .cs[0].config_2 = CONFIG_SYS_DDR_CS0_CONFIG_2,
+       .cs[1].config = CONFIG_SYS_DDR_CS1_CONFIG,
+       .cs[2].config = CONFIG_SYS_DDR_CS2_CONFIG,
+       .cs[3].config = CONFIG_SYS_DDR_CS3_CONFIG,
+       .timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3_900,
+       .timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0_900,
+       .timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1_900,
+       .timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2_900,
+       .ddr_sdram_cfg = CONFIG_SYS_DDR_SDRAM_CFG,
+       .ddr_sdram_cfg_2 = CONFIG_SYS_DDR_SDRAM_CFG2,
+       .ddr_sdram_mode = CONFIG_SYS_DDR_MODE_1_900,
+       .ddr_sdram_mode_2 = CONFIG_SYS_DDR_MODE_2_900,
+       .ddr_sdram_md_cntl = CONFIG_SYS_DDR_MODE_CONTROL,
+       .ddr_sdram_interval = CONFIG_SYS_DDR_INTERVAL_900,
+       .ddr_data_init = CONFIG_MEM_INIT_VALUE,
+       .ddr_sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL_900,
+       .ddr_init_addr = CONFIG_SYS_DDR_INIT_ADDR,
+       .ddr_init_ext_addr = CONFIG_SYS_DDR_INIT_EXT_ADDR,
+       .timing_cfg_4 = CONFIG_SYS_DDR_TIMING_4,
+       .timing_cfg_5 = CONFIG_SYS_DDR_TIMING_5,
+       .ddr_zq_cntl = CONFIG_SYS_DDR_ZQ_CNTL,
+       .ddr_wrlvl_cntl = CONFIG_SYS_DDR_WRLVL_CNTL,
+       .ddr_sdram_rcw_1 = CONFIG_SYS_DDR_RCW_1,
+       .ddr_sdram_rcw_2 = CONFIG_SYS_DDR_RCW_2
+};
+
+fsl_ddr_cfg_regs_t ddr_cfg_regs_1000 = {
+       .cs[0].bnds = CONFIG_SYS_DDR_CS0_BNDS,
+       .cs[1].bnds = CONFIG_SYS_DDR_CS1_BNDS,
+       .cs[2].bnds = CONFIG_SYS_DDR_CS2_BNDS,
+       .cs[3].bnds = CONFIG_SYS_DDR_CS3_BNDS,
+       .cs[0].config = CONFIG_SYS_DDR_CS0_CONFIG,
+       .cs[0].config_2 = CONFIG_SYS_DDR_CS0_CONFIG_2,
+       .cs[1].config = CONFIG_SYS_DDR_CS1_CONFIG,
+       .cs[2].config = CONFIG_SYS_DDR_CS2_CONFIG,
+       .cs[3].config = CONFIG_SYS_DDR_CS3_CONFIG,
+       .timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3_1000,
+       .timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0_1000,
+       .timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1_1000,
+       .timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2_1000,
+       .ddr_sdram_cfg = CONFIG_SYS_DDR_SDRAM_CFG,
+       .ddr_sdram_cfg_2 = CONFIG_SYS_DDR_SDRAM_CFG2,
+       .ddr_sdram_mode = CONFIG_SYS_DDR_MODE_1_1000,
+       .ddr_sdram_mode_2 = CONFIG_SYS_DDR_MODE_2_1000,
+       .ddr_sdram_md_cntl = CONFIG_SYS_DDR_MODE_CONTROL,
+       .ddr_sdram_interval = CONFIG_SYS_DDR_INTERVAL_1000,
+       .ddr_data_init = CONFIG_MEM_INIT_VALUE,
+       .ddr_sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL_1000,
+       .ddr_init_addr = CONFIG_SYS_DDR_INIT_ADDR,
+       .ddr_init_ext_addr = CONFIG_SYS_DDR_INIT_EXT_ADDR,
+       .timing_cfg_4 = CONFIG_SYS_DDR_TIMING_4,
+       .timing_cfg_5 = CONFIG_SYS_DDR_TIMING_5,
+       .ddr_zq_cntl = CONFIG_SYS_DDR_ZQ_CNTL,
+       .ddr_wrlvl_cntl = CONFIG_SYS_DDR_WRLVL_CNTL,
+       .ddr_sdram_rcw_1 = CONFIG_SYS_DDR_RCW_1,
+       .ddr_sdram_rcw_2 = CONFIG_SYS_DDR_RCW_2
+};
+
+fsl_ddr_cfg_regs_t ddr_cfg_regs_1200 = {
+       .cs[0].bnds = CONFIG_SYS_DDR_CS0_BNDS,
+       .cs[1].bnds = CONFIG_SYS_DDR_CS1_BNDS,
+       .cs[2].bnds = CONFIG_SYS_DDR_CS2_BNDS,
+       .cs[3].bnds = CONFIG_SYS_DDR_CS3_BNDS,
+       .cs[0].config = CONFIG_SYS_DDR_CS0_CONFIG,
+       .cs[0].config_2 = CONFIG_SYS_DDR_CS0_CONFIG_2,
+       .cs[1].config = CONFIG_SYS_DDR_CS1_CONFIG,
+       .cs[2].config = CONFIG_SYS_DDR_CS2_CONFIG,
+       .cs[3].config = CONFIG_SYS_DDR_CS3_CONFIG,
+       .timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3_1200,
+       .timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0_1200,
+       .timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1_1200,
+       .timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2_1200,
+       .ddr_sdram_cfg = CONFIG_SYS_DDR_SDRAM_CFG,
+       .ddr_sdram_cfg_2 = CONFIG_SYS_DDR_SDRAM_CFG2,
+       .ddr_sdram_mode = CONFIG_SYS_DDR_MODE_1_1200,
+       .ddr_sdram_mode_2 = CONFIG_SYS_DDR_MODE_2_1200,
+       .ddr_sdram_md_cntl = CONFIG_SYS_DDR_MODE_CONTROL,
+       .ddr_sdram_interval = CONFIG_SYS_DDR_INTERVAL_1200,
+       .ddr_data_init = CONFIG_MEM_INIT_VALUE,
+       .ddr_sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL_1200,
+       .ddr_init_addr = CONFIG_SYS_DDR_INIT_ADDR,
+       .ddr_init_ext_addr = CONFIG_SYS_DDR_INIT_EXT_ADDR,
+       .timing_cfg_4 = CONFIG_SYS_DDR_TIMING_4,
+       .timing_cfg_5 = CONFIG_SYS_DDR_TIMING_5,
+       .ddr_zq_cntl = CONFIG_SYS_DDR_ZQ_CNTL,
+       .ddr_wrlvl_cntl = CONFIG_SYS_DDR_WRLVL_CNTL,
+       .ddr_sdram_rcw_1 = CONFIG_SYS_DDR_RCW_1,
+       .ddr_sdram_rcw_2 = CONFIG_SYS_DDR_RCW_2
+};
+
+fixed_ddr_parm_t fixed_ddr_parm_0[] = {
+       {750, 850, &ddr_cfg_regs_800},
+       {850, 950, &ddr_cfg_regs_900},
+       {950, 1050, &ddr_cfg_regs_1000},
+       {1050, 1250, &ddr_cfg_regs_1200},
+       {0, 0, NULL}
+};
diff --git a/board/freescale/p3060qds/p3060qds.c b/board/freescale/p3060qds/p3060qds.c
new file mode 100644 (file)
index 0000000..c6c74f2
--- /dev/null
@@ -0,0 +1,341 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <netdev.h>
+#include <linux/compiler.h>
+#include <asm/mmu.h>
+#include <asm/processor.h>
+#include <asm/cache.h>
+#include <asm/immap_85xx.h>
+#include <asm/fsl_law.h>
+#include <asm/fsl_serdes.h>
+#include <asm/fsl_portals.h>
+#include <asm/fsl_liodn.h>
+#include <fm_eth.h>
+#include <configs/P3060QDS.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+
+#include "../common/qixis.h"
+#include "p3060qds.h"
+#include "p3060qds_qixis.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+       u8 sw;
+       struct cpu_type *cpu = gd->cpu;
+       ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
+       unsigned int i;
+
+       printf("Board: %s", cpu->name);
+       puts("QDS, ");
+
+       printf("Sys ID: 0x%02x, Sys Ver: 0x%02x, FPGA Ver: 0x%02x, ",
+               QIXIS_READ(id), QIXIS_READ(arch), QIXIS_READ(scver));
+
+       sw = QIXIS_READ(brdcfg[0]);
+       sw = (sw & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
+
+       if (sw < 0x8)
+               printf("vBank: %d\n", sw);
+       else if (sw == 0x8)
+               puts("Promjet\n");
+       else if (sw == 0x9)
+               puts("NAND\n");
+       else
+               printf("invalid setting of SW%u\n", PIXIS_LBMAP_SWITCH);
+
+#ifdef CONFIG_PHYS_64BIT
+       puts("36-bit Addressing\n");
+#endif
+       puts("Reset Configuration Word (RCW):");
+       for (i = 0; i < ARRAY_SIZE(gur->rcwsr); i++) {
+               u32 rcw = in_be32(&gur->rcwsr[i]);
+
+               if ((i % 4) == 0)
+                       printf("\n       %08x:", i * 4);
+               printf(" %08x", rcw);
+       }
+       puts("\n");
+
+       puts("SERDES Reference Clocks: ");
+       sw = QIXIS_READ(brdcfg[2]);
+       for (i = 0; i < 3; i++) {
+               static const char * const freq[] = {"100", "125", "Reserved",
+                                               "156.25"};
+               unsigned int clock = (sw >> (2 * i)) & 3;
+
+               printf("Bank%u=%sMhz ", i+1, freq[clock]);
+       }
+       puts("\n");
+
+       return 0;
+}
+
+int board_early_init_f(void)
+{
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+
+       /* only single DDR controller on QDS board, disable DDR1_MCK4/5 */
+       setbits_be32(&gur->ddrclkdr, 0x00030000);
+
+       return 0;
+}
+
+void board_config_serdes_mux(void)
+{
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       int cfg = (in_be32(&gur->rcwsr[4]) &
+                       FSL_CORENET_RCWSR4_SRDS_PRTCL) >> 26;
+
+       switch (cfg) {
+       case 0x03:
+       case 0x06:
+               /* set Lane I,J as SGMII */
+               QIXIS_WRITE(brdcfg[6], BRDCFG6_SD4MX_B | BRDCFG6_SD3MX_A |
+                                      BRDCFG6_SD2MX_B | BRDCFG6_SD1MX_A);
+               break;
+       case 0x16:
+       case 0x19:
+       case 0x1c:
+               /* set Lane I,J as Aurora Debug */
+               QIXIS_WRITE(brdcfg[6], BRDCFG6_SD4MX_A | BRDCFG6_SD3MX_B |
+                                      BRDCFG6_SD2MX_A | BRDCFG6_SD1MX_B);
+               break;
+       default:
+               puts("Invalid SerDes protocol for P3060QDS\n");
+               break;
+       }
+}
+
+void board_config_usb_mux(void)
+{
+       u8 brdcfg4, brdcfg5, brdcfg7;
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       u32 rcwsr11 = in_be32(&gur->rcwsr[11]);
+       u32 ec1 = rcwsr11 & FSL_CORENET_RCWSR11_EC1;
+       u32 ec2 = rcwsr11 & FSL_CORENET_RCWSR11_EC2;
+
+       brdcfg4 = QIXIS_READ(brdcfg[4]);
+       brdcfg4 &= ~BRDCFG4_EC_MODE_MASK;
+       if ((ec1 == FSL_CORENET_RCWSR11_EC1_FM1_USB1) &&
+                (ec2 == FSL_CORENET_RCWSR11_EC2_USB2)) {
+               brdcfg4 |= BRDCFG4_EC2_USB_EC1_USB;
+
+       } else if ((ec1 == FSL_CORENET_RCWSR11_EC1_FM1_USB1) &&
+                ((ec2 == FSL_CORENET_RCWSR11_EC2_FM1_DTSEC2) ||
+                (ec2 == FSL_CORENET_RCWSR11_EC2_FM2_DTSEC1))) {
+               brdcfg4 |= BRDCFG4_EC2_RGMII_EC1_USB;
+
+       } else if ((ec1 == FSL_CORENET_RCWSR11_EC1_FM1_DTSEC1) &&
+                (ec2 == FSL_CORENET_RCWSR11_EC2_USB2)) {
+               brdcfg4 |= BRDCFG4_EC2_USB_EC1_RGMII;
+
+       } else if ((ec1 == FSL_CORENET_RCWSR11_EC1_FM1_DTSEC1) &&
+                ((ec2 == FSL_CORENET_RCWSR11_EC2_FM1_DTSEC2) ||
+                (ec2 == FSL_CORENET_RCWSR11_EC2_FM2_DTSEC1))) {
+               brdcfg4 |= BRDCFG4_EC2_RGMII_EC1_RGMII;
+       } else {
+               brdcfg4 |= BRDCFG4_EC2_MII_EC1_MII;
+       }
+       QIXIS_WRITE(brdcfg[4], brdcfg4);
+
+       brdcfg5 = QIXIS_READ(brdcfg[5]);
+       brdcfg5 &= ~(BRDCFG5_USB1ID_MASK | BRDCFG5_USB2ID_MASK);
+       brdcfg5 |= (BRDCFG5_USB1ID_CTRL | BRDCFG5_USB2ID_CTRL);
+       QIXIS_WRITE(brdcfg[5], brdcfg5);
+
+       brdcfg7 = BRDCFG7_JTAGMX_COP_JTAG | BRDCFG7_IQ1MX_IRQ_EVT |
+               BRDCFG7_G1MX_USB1 | BRDCFG7_D1MX_TSEC3USB | BRDCFG7_I3MX_USB1;
+       QIXIS_WRITE(brdcfg[7], brdcfg7);
+}
+
+int board_early_init_r(void)
+{
+       const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
+       const u8 flash_esel = find_tlb_idx((void *)flashbase, 1);
+
+       /*
+        * Remap Boot flash + PROMJET region to caching-inhibited
+        * so that flash can be erased properly.
+        */
+
+       /* Flush d-cache and invalidate i-cache of any FLASH data */
+       flush_dcache();
+       invalidate_icache();
+
+       /* invalidate existing TLB entry for flash + promjet */
+       disable_tlb(flash_esel);
+
+       set_tlb(1, flashbase, CONFIG_SYS_FLASH_BASE_PHYS,
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, flash_esel, BOOKE_PAGESZ_256M, 1);
+
+       set_liodns();
+#ifdef CONFIG_SYS_DPAA_QBMAN
+       setup_portals();
+#endif
+       board_config_serdes_mux();
+       board_config_usb_mux();
+
+       return 0;
+}
+
+static const char *serdes_clock_to_string(u32 clock)
+{
+       switch (clock) {
+       case SRDS_PLLCR0_RFCK_SEL_100:
+               return "100";
+       case SRDS_PLLCR0_RFCK_SEL_125:
+               return "125";
+       case SRDS_PLLCR0_RFCK_SEL_156_25:
+               return "156.25";
+       default:
+               return "150";
+       }
+}
+
+#define NUM_SRDS_BANKS 3
+
+int misc_init_r(void)
+{
+       serdes_corenet_t *srds_regs;
+       u32 actual[NUM_SRDS_BANKS];
+       unsigned int i;
+       u8 sw;
+
+       sw = QIXIS_READ(brdcfg[2]);
+       for (i = 0; i < 3; i++) {
+               unsigned int clock = (sw >> (2 * i)) & 3;
+               switch (clock) {
+               case 0:
+                       actual[i] = SRDS_PLLCR0_RFCK_SEL_100;
+                       break;
+               case 1:
+                       actual[i] = SRDS_PLLCR0_RFCK_SEL_125;
+                       break;
+               case 3:
+                       actual[i] = SRDS_PLLCR0_RFCK_SEL_156_25;
+                       break;
+               default:
+                       printf("Warning: SDREFCLK%u switch setting of '10' is "
+                               "unsupported\n", i + 1);
+                       break;
+               }
+       }
+
+       srds_regs = (void *)CONFIG_SYS_FSL_CORENET_SERDES_ADDR;
+       for (i = 0; i < NUM_SRDS_BANKS; i++) {
+               u32 pllcr0 = in_be32(&srds_regs->bank[i].pllcr0);
+               u32 expected = pllcr0 & SRDS_PLLCR0_RFCK_SEL_MASK;
+               if (expected != actual[i]) {
+                       printf("Warning: SERDES bank %u expects reference clock"
+                              " %sMHz, but actual is %sMHz\n", i + 1,
+                              serdes_clock_to_string(expected),
+                              serdes_clock_to_string(actual[i]));
+               }
+       }
+
+       return 0;
+}
+
+/*
+ * This is map of CVDD values. 33 means CVDD is 3.3v, 25 means CVDD is 2.5v,
+ * 18 means CVDD is 1.8v.
+ */
+static u8 IO_VSEL[] = {
+       33, 33, 33, 25, 25, 25, 18, 18, 18,
+       33, 33, 33, 25, 25, 25, 18, 18, 18,
+       33, 33, 33, 25, 25, 25, 18, 18, 18,
+       33, 33, 33, 33, 33
+};
+
+#define IO_VSEL_MASK   0x1f
+
+/*
+ * different CVDD selects diffenert spi flashs, read dutcfg[3] to get CVDD,
+ * then set status of  spi flash nodes to 'disabled' according to CVDD.
+ * CVDD '33' will select spi flash0 and flash1, CVDD '25' will select spi
+ * flash2, CVDD '18' will select spi flash3.
+ */
+void fdt_fixup_board_spi(void *blob)
+{
+       u8 sw5 = QIXIS_READ(dutcfg[3]);
+
+       switch (IO_VSEL[sw5 & IO_VSEL_MASK]) {
+       /* 3.3v */
+       case 33:
+               do_fixup_by_compat(blob, "atmel,at45db081d", "status",
+                               "disabled", strlen("disabled") + 1, 1);
+               do_fixup_by_compat(blob, "spansion,sst25wf040", "status",
+                               "disabled", strlen("disabled") + 1, 1);
+               break;
+       /* 2.5v */
+       case 25:
+               do_fixup_by_compat(blob, "spansion,s25sl12801", "status",
+                               "disabled", strlen("disabled") + 1, 1);
+               do_fixup_by_compat(blob, "spansion,en25q32", "status",
+                               "disabled", strlen("disabled") + 1, 1);
+               do_fixup_by_compat(blob, "spansion,sst25wf040", "status",
+                               "disabled", strlen("disabled") + 1, 1);
+               break;
+       /* 1.8v */
+       case 18:
+               do_fixup_by_compat(blob, "spansion,s25sl12801", "status",
+                               "disabled", strlen("disabled") + 1, 1);
+               do_fixup_by_compat(blob, "spansion,en25q32", "status",
+                               "disabled", strlen("disabled") + 1, 1);
+               do_fixup_by_compat(blob, "atmel,at45db081d", "status",
+                               "disabled", strlen("disabled") + 1, 1);
+               break;
+       }
+}
+
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       phys_addr_t base;
+       phys_size_t size;
+
+       ft_cpu_setup(blob, bd);
+
+       base = getenv_bootm_low();
+       size = getenv_bootm_size();
+
+       fdt_fixup_memory(blob, (u64)base, (u64)size);
+
+#ifdef CONFIG_PCI
+       pci_of_setup(blob, bd);
+#endif
+
+       fdt_fixup_liodn(blob);
+       fdt_fixup_dr_usb(blob, bd);
+       fdt_fixup_board_spi(blob);
+
+#ifdef CONFIG_SYS_DPAA_FMAN
+       fdt_fixup_fman_ethernet(blob);
+       fdt_fixup_board_enet(blob);
+#endif
+}
diff --git a/board/freescale/p3060qds/p3060qds.h b/board/freescale/p3060qds/p3060qds.h
new file mode 100644 (file)
index 0000000..3da6815
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __P3060QDS_H__
+#define __P3060QDS_H__
+
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/u-boot.h>
+
+void fdt_fixup_board_enet(void *blob);
+void pci_of_setup(void *blob, bd_t *bd);
+extern fixed_ddr_parm_t fixed_ddr_parm_0[];
+
+#endif
diff --git a/board/freescale/p3060qds/p3060qds_qixis.h b/board/freescale/p3060qds/p3060qds_qixis.h
new file mode 100644 (file)
index 0000000..4d5d6a2
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __P3060QDS_QIXIS_H__
+#define __P3060QDS_QIXIS_H__
+
+/* Definitions of QIXIS Registers for P3060QDS */
+
+/* BRDCFG4[4:7]] select EC1 and EC2 as a pair */
+#define BRDCFG4_EC_MODE_MASK           0x0F
+#define BRDCFG4_EC2_MII_EC1_MII        0x00
+#define BRDCFG4_EC2_MII_EC1_USB        0x03
+#define BRDCFG4_EC2_USB_EC1_MII        0x0C
+#define BRDCFG4_EC2_USB_EC1_USB        0x0F
+#define BRDCFG4_EC2_USB_EC1_RGMII      0x0E
+#define BRDCFG4_EC2_RGMII_EC1_USB      0x0B
+#define BRDCFG4_EC2_RGMII_EC1_RGMII    0x0A
+#define BRDCFG4_EMISEL_MASK            0xF0
+
+#define BRDCFG5_ECLKS_MASK             0x80
+#define BRDCFG5_USB1ID_MASK            0x40
+#define BRDCFG5_USB2ID_MASK            0x20
+#define BRDCFG5_GC2MX_MASK             0x0C
+#define BRDCFG5_T15MX_MASK             0x03
+#define BRDCFG5_ECLKS_IEEE1588_CM      0x80
+#define BRDCFG5_USB1ID_CTRL            0x40
+#define BRDCFG5_USB2ID_CTRL            0x20
+
+#define BRDCFG6_SD1MX_A                0x01
+#define BRDCFG6_SD1MX_B                0x00
+#define BRDCFG6_SD2MX_A                0x02
+#define BRDCFG6_SD2MX_B                0x00
+#define BRDCFG6_SD3MX_A                0x04
+#define BRDCFG6_SD3MX_B                0x00
+#define BRDCFG6_SD4MX_A                0x08
+#define BRDCFG6_SD4MX_B                0x00
+
+#define BRDCFG7_JTAGMX_MASK            0xC0
+#define BRDCFG7_IQ1MX_MASK             0x20
+#define BRDCFG7_G1MX_MASK              0x10
+#define BRDCFG7_D1MX_MASK              0x0C
+#define BRDCFG7_I3MX_MASK              0x03
+#define BRDCFG7_JTAGMX_AURORA          0x00
+#define BRDCFG7_JTAGMX_FPGA            0x80
+#define BRDCFG7_JTAGMX_COP_JTAG        0xC0
+#define BRDCFG7_IQ1MX_IRQ_EVT          0x00
+#define BRDCFG7_IQ1MX_USB2             0x20
+#define BRDCFG7_G1MX_USB1              0x00
+#define BRDCFG7_G1MX_TSEC3             0x10
+#define BRDCFG7_D1MX_DMA               0x00
+#define BRDCFG7_D1MX_TSEC3USB          0x04
+#define BRDCFG7_D1MX_HDLC2             0x08
+#define BRDCFG7_I3MX_UART2_I2C34       0x00
+#define BRDCFG7_I3MX_GPIO_EVT          0x01
+#define BRDCFG7_I3MX_USB1              0x02
+#define BRDCFG7_I3MX_TSEC3             0x03
+
+#endif
index ecba66ec71be6b3cea945e8cb737ed1de5fc804d..f55afbd1294967406abf84dfc2b2e367f8ecc558 100644 (file)
@@ -87,7 +87,6 @@ static void print_fpga_info(unsigned dev)
        u16 fpga_features = in_le16(&fpga->fpga_features);
        unsigned unit_type;
        unsigned hardware_version;
-       unsigned feature_compression;
        unsigned feature_rs232;
        unsigned feature_audio;
        unsigned feature_sysclock;
@@ -111,7 +110,6 @@ static void print_fpga_info(unsigned dev)
 
        unit_type = (versions >> 4) & 0x000f;
        hardware_version = versions & 0x000f;
-       feature_compression = (fpga_features >> 13) & 0x0003;
        feature_rs232 = fpga_features & (1<<11);
        feature_audio = (fpga_features >> 9) & 0x0003;
        feature_sysclock = (fpga_features >> 7) & 0x0003;
diff --git a/board/gdsys/405ex/405ex.c b/board/gdsys/405ex/405ex.c
new file mode 100644 (file)
index 0000000..0d25214
--- /dev/null
@@ -0,0 +1,250 @@
+#include <common.h>
+#include <asm/ppc4xx.h>
+#include <asm/ppc405.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+
+#include <gdsys_fpga.h>
+
+#include "405ex.h"
+
+#define REFLECTION_TESTPATTERN 0xdede
+#define REFLECTION_TESTPATTERN_INV (~REFLECTION_TESTPATTERN & 0xffff)
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int get_fpga_state(unsigned dev)
+{
+       return gd->fpga_state[dev];
+}
+
+void print_fpga_state(unsigned dev)
+{
+       if (gd->fpga_state[dev] & FPGA_STATE_DONE_FAILED)
+               puts("       Waiting for FPGA-DONE timed out.\n");
+       if (gd->fpga_state[dev] & FPGA_STATE_REFLECTION_FAILED)
+               puts("       FPGA reflection test failed.\n");
+}
+
+int board_early_init_f(void)
+{
+       u32 val;
+
+       /*--------------------------------------------------------------------+
+        | Interrupt controller setup
+        +--------------------------------------------------------------------+
+       +---------------------------------------------------------------------+
+       |Interrupt| Source                            | Pol.  | Sensi.| Crit. |
+       +---------+-----------------------------------+-------+-------+-------+
+       | IRQ 00  | UART0                             | High  | Level | Non   |
+       | IRQ 01  | UART1                             | High  | Level | Non   |
+       | IRQ 02  | IIC0                              | High  | Level | Non   |
+       | IRQ 03  | TBD                               | High  | Level | Non   |
+       | IRQ 04  | TBD                               | High  | Level | Non   |
+       | IRQ 05  | EBM                               | High  | Level | Non   |
+       | IRQ 06  | BGI                               | High  | Level | Non   |
+       | IRQ 07  | IIC1                              | Rising| Edge  | Non   |
+       | IRQ 08  | SPI                               | High  | Lvl/ed| Non   |
+       | IRQ 09  | External IRQ 0 - (PCI-Express)    | pgm H | Pgm   | Non   |
+       | IRQ 10  | MAL TX EOB                        | High  | Level | Non   |
+       | IRQ 11  | MAL RX EOB                        | High  | Level | Non   |
+       | IRQ 12  | DMA Channel 0 FIFO Full           | High  | Level | Non   |
+       | IRQ 13  | DMA Channel 0 Stat FIFO           | High  | Level | Non   |
+       | IRQ 14  | DMA Channel 1 FIFO Full           | High  | Level | Non   |
+       | IRQ 15  | DMA Channel 1 Stat FIFO           | High  | Level | Non   |
+       | IRQ 16  | PCIE0 AL                          | high  | Level | Non   |
+       | IRQ 17  | PCIE0 VPD access                  | rising| Edge  | Non   |
+       | IRQ 18  | PCIE0 hot reset request           | rising| Edge  | Non   |
+       | IRQ 19  | PCIE0 hot reset request           | faling| Edge  | Non   |
+       | IRQ 20  | PCIE0 TCR                         | High  | Level | Non   |
+       | IRQ 21  | PCIE0 MSI level0                  | High  | Level | Non   |
+       | IRQ 22  | PCIE0 MSI level1                  | High  | Level | Non   |
+       | IRQ 23  | Security EIP-94                   | High  | Level | Non   |
+       | IRQ 24  | EMAC0 interrupt                   | High  | Level | Non   |
+       | IRQ 25  | EMAC1 interrupt                   | High  | Level | Non   |
+       | IRQ 26  | PCIE0 MSI level2                  | High  | Level | Non   |
+       | IRQ 27  | External IRQ 4                    | pgm H | Pgm   | Non   |
+       | IRQ 28  | UIC2 Non-critical Int.            | High  | Level | Non   |
+       | IRQ 29  | UIC2 Critical Interrupt           | High  | Level | Crit. |
+       | IRQ 30  | UIC1 Non-critical Int.            | High  | Level | Non   |
+       | IRQ 31  | UIC1 Critical Interrupt           | High  | Level | Crit. |
+       |----------------------------------------------------------------------
+       | IRQ 32  | MAL Serr                          | High  | Level | Non   |
+       | IRQ 33  | MAL Txde                          | High  | Level | Non   |
+       | IRQ 34  | MAL Rxde                          | High  | Level | Non   |
+       | IRQ 35  | PCIE0 bus master VC0              |falling| Edge  | Non   |
+       | IRQ 36  | PCIE0 DCR Error                   | High  | Level | Non   |
+       | IRQ 37  | EBC                               | High  |Lvl Edg| Non   |
+       | IRQ 38  | NDFC                              | High  | Level | Non   |
+       | IRQ 39  | GPT Compare Timer 8               | Risin | Edge  | Non   |
+       | IRQ 40  | GPT Compare Timer 9               | Risin | Edge  | Non   |
+       | IRQ 41  | PCIE1 AL                          | high  | Level | Non   |
+       | IRQ 42  | PCIE1 VPD access                  | rising| edge  | Non   |
+       | IRQ 43  | PCIE1 hot reset request           | rising| Edge  | Non   |
+       | IRQ 44  | PCIE1 hot reset request           | faling| Edge  | Non   |
+       | IRQ 45  | PCIE1 TCR                         | High  | Level | Non   |
+       | IRQ 46  | PCIE1 bus master VC0              |falling| Edge  | Non   |
+       | IRQ 47  | GPT Compare Timer 3               | Risin | Edge  | Non   |
+       | IRQ 48  | GPT Compare Timer 4               | Risin | Edge  | Non   |
+       | IRQ 49  | Ext. IRQ 7                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 50  | Ext. IRQ 8 -                      |pgm (H)|pgm/Lvl| Non   |
+       | IRQ 51  | Ext. IRQ 9                        |pgm (H)|pgm/Lvl| Non   |
+       | IRQ 52  | GPT Compare Timer 5               | high  | Edge  | Non   |
+       | IRQ 53  | GPT Compare Timer 6               | high  | Edge  | Non   |
+       | IRQ 54  | GPT Compare Timer 7               | high  | Edge  | Non   |
+       | IRQ 55  | Serial ROM                        | High  | Level | Non   |
+       | IRQ 56  | GPT Decrement Pulse               | High  | Level | Non   |
+       | IRQ 57  | Ext. IRQ 2                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 58  | Ext. IRQ 5                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 59  | Ext. IRQ 6                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 60  | EMAC0 Wake-up                     | High  | Level | Non   |
+       | IRQ 61  | Ext. IRQ 1                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 62  | EMAC1 Wake-up                     | High  | Level | Non   |
+       |----------------------------------------------------------------------
+       | IRQ 64  | PE0 AL                            | High  | Level | Non   |
+       | IRQ 65  | PE0 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 66  | PE0 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 67  | PE0 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 68  | PE0 TCR                           | High  | Level | Non   |
+       | IRQ 69  | PE0 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 70  | PE0 DCR Error                     | High  | Level | Non   |
+       | IRQ 71  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 72  | PE1 AL                            | High  | Level | Non   |
+       | IRQ 73  | PE1 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 74  | PE1 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 75  | PE1 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 76  | PE1 TCR                           | High  | Level | Non   |
+       | IRQ 77  | PE1 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 78  | PE1 DCR Error                     | High  | Level | Non   |
+       | IRQ 79  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 80  | PE2 AL                            | High  | Level | Non   |
+       | IRQ 81  | PE2 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 82  | PE2 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 83  | PE2 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 84  | PE2 TCR                           | High  | Level | Non   |
+       | IRQ 85  | PE2 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 86  | PE2 DCR Error                     | High  | Level | Non   |
+       | IRQ 87  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 88  | External IRQ(5)                   | Progr | Progr | Non   |
+       | IRQ 89  | External IRQ 4 - Ethernet         | Progr | Progr | Non   |
+       | IRQ 90  | External IRQ 3 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 91  | External IRQ 2 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 92  | External IRQ 1 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 93  | External IRQ 0 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 94  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 95  | Reserved                          | N/A   | N/A   | Non   |
+       |---------------------------------------------------------------------
+       +---------+-----------------------------------+-------+-------+------*/
+       /*--------------------------------------------------------------------+
+        | Initialise UIC registers.  Clear all interrupts.  Disable all
+        | interrupts.
+        | Set critical interrupt values.  Set interrupt polarities.  Set
+        | interrupt trigger levels.  Make bit 0 High  priority.  Clear all
+        | interrupts again.
+        +-------------------------------------------------------------------*/
+
+       mtdcr(UIC2SR, 0xffffffff); /* Clear all interrupts */
+       mtdcr(UIC2ER, 0x00000000); /* disable all interrupts */
+       mtdcr(UIC2CR, 0x00000000); /* Set Critical / Non Critical interrupts */
+       mtdcr(UIC2PR, 0xf7ffffff); /* Set Interrupt Polarities */
+       mtdcr(UIC2TR, 0x01e1fff8); /* Set Interrupt Trigger Levels */
+       mtdcr(UIC2VR, 0x00000001); /* Set Vect base=0,INT31 Highest priority */
+       mtdcr(UIC2SR, 0x00000000); /* clear all interrupts */
+       mtdcr(UIC2SR, 0xffffffff); /* clear all interrupts */
+
+       mtdcr(UIC1SR, 0xffffffff); /* Clear all interrupts */
+       mtdcr(UIC1ER, 0x00000000); /* disable all interrupts */
+       mtdcr(UIC1CR, 0x00000000); /* Set Critical / Non Critical interrupts */
+       mtdcr(UIC1PR, 0xfffac785); /* Set Interrupt Polarities */
+       mtdcr(UIC1TR, 0x001d0040); /* Set Interrupt Trigger Levels */
+       mtdcr(UIC1VR, 0x00000001); /* Set Vect base=0,INT31 Highest priority */
+       mtdcr(UIC1SR, 0x00000000); /* clear all interrupts */
+       mtdcr(UIC1SR, 0xffffffff); /* clear all interrupts */
+
+       mtdcr(UIC0SR, 0xffffffff); /* Clear all interrupts */
+       mtdcr(UIC0ER, 0x0000000a); /* Disable all interrupts */
+                                  /* Except cascade UIC0 and UIC1 */
+       mtdcr(UIC0CR, 0x00000000); /* Set Critical / Non Critical interrupts */
+       mtdcr(UIC0PR, 0xffbfefef); /* Set Interrupt Polarities */
+       mtdcr(UIC0TR, 0x00007000); /* Set Interrupt Trigger Levels */
+       mtdcr(UIC0VR, 0x00000001); /* Set Vect base=0,INT31 Highest priority */
+       mtdcr(UIC0SR, 0x00000000); /* clear all interrupts */
+       mtdcr(UIC0SR, 0xffffffff); /* clear all interrupts */
+
+       /*
+        * Note: Some cores are still in reset when the chip starts, so
+        * take them out of reset
+        */
+       mtsdr(SDR0_SRST, 0);
+
+       /*
+        * Configure PFC (Pin Function Control) registers
+        */
+       val = SDR0_PFC1_GPT_FREQ;
+       mtsdr(SDR0_PFC1, val);
+
+       return 0;
+}
+
+int board_early_init_r(void)
+{
+       unsigned k;
+       unsigned ctr;
+
+       for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k)
+               gd->fpga_state[k] = 0;
+
+       /*
+        * reset FPGA
+        */
+       gd405ex_init();
+
+       gd405ex_set_fpga_reset(1);
+
+       gd405ex_setup_hw();
+
+       for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) {
+               ctr = 0;
+               while (!gd405ex_get_fpga_done(k)) {
+                       udelay(100000);
+                       if (ctr++ > 5) {
+                               gd->fpga_state[k] |= FPGA_STATE_DONE_FAILED;
+                               break;
+                       }
+               }
+       }
+
+       udelay(10);
+
+       gd405ex_set_fpga_reset(0);
+
+       for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) {
+               ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(k);
+#ifdef CONFIG_SYS_FPGA_NO_RFL_HI
+               u16 *reflection_target = &fpga->reflection_low;
+#else
+               u16 *reflection_target = &fpga->reflection_high;
+#endif
+               /*
+                * wait for fpga out of reset
+                */
+               ctr = 0;
+               while (1) {
+                       out_le16(&fpga->reflection_low,
+                               REFLECTION_TESTPATTERN);
+
+                       if (in_le16(reflection_target) ==
+                               REFLECTION_TESTPATTERN_INV)
+                               break;
+
+                       udelay(100000);
+                       if (ctr++ > 5) {
+                               gd->fpga_state[k] |=
+                                       FPGA_STATE_REFLECTION_FAILED;
+                               break;
+                       }
+               }
+       }
+
+       return 0;
+}
diff --git a/board/gdsys/405ex/405ex.h b/board/gdsys/405ex/405ex.h
new file mode 100644 (file)
index 0000000..b15623f
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __405EX_H_
+#define __405EX_H_
+
+/* functions to be provided by board implementation */
+void gd405ex_init(void);
+void gd405ex_set_fpga_reset(unsigned state);
+void gd405ex_setup_hw(void);
+int gd405ex_get_fpga_done(unsigned fpga);
+
+#endif /* __405EX_H_ */
diff --git a/board/gdsys/405ex/Makefile b/board/gdsys/405ex/Makefile
new file mode 100644 (file)
index 0000000..4549705
--- /dev/null
@@ -0,0 +1,53 @@
+#
+# (C) Copyright 2007
+# Stefan Roese, DENX Software Engineering, sr@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).o
+
+COBJS-$(CONFIG_IO64) += io64.o
+
+COBJS-$(CONFIG_CMD_CHIP_CONFIG) += chip_config.o
+
+COBJS   := $(BOARD).o $(COBJS-y)
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+clean:
+       rm -f $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/gdsys/405ex/chip_config.c b/board/gdsys/405ex/chip_config.c
new file mode 100644 (file)
index 0000000..12cb3bf
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * (C) Copyright 2009
+ * 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/ppc4xx_config.h>
+
+/* NAND booting versions differ in bytes: 6, 8, 9, 11, 12 */
+
+struct ppc4xx_config ppc4xx_config_val[] = {
+       {
+               "333-nor", "NOR  CPU: 333 PLB: 166 OPB:  83 EBC:  83",
+               {
+                       0x8c, 0x12, 0xec, 0x12, 0x98, 0x00, 0x0a, 0x00,
+                       0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+               }
+       },
+       {
+               "400-133-nor", "NOR  CPU: 400 PLB: 133 OPB:  66 EBC:  66",
+               {
+                       0x8e, 0x0e, 0xe8, 0x13, 0x98, 0x00, 0x0a, 0x00,
+                       0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+               }
+       },
+       {
+               "400-200-66-nor", "NOR  CPU: 400 PLB: 200 OPB:  66 EBC:  66",
+               {
+                       0x8e, 0x0e, 0xe8, 0x12, 0xd8, 0x00, 0x0a, 0x00,
+                       0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+               }
+       },
+       {
+               "400-nor", "NOR  CPU: 400 PLB: 200 OPB: 100 EBC: 100",
+               {
+                       0x8e, 0x0e, 0xe8, 0x12, 0x98, 0x00, 0x0a, 0x00,
+                       0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+               }
+       },
+       {
+               "533-nor", "NOR  CPU: 533 PLB: 177 OPB:  88 EBC:  88",
+               {
+                       0x8e, 0x43, 0x60, 0x13, 0x98, 0x00, 0x0a, 0x00,
+                       0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+               }
+       },
+       {
+               "533-nand", "NOR  CPU: 533 PLB: 177 OPB:  88 EBC:  88",
+               {
+                       0x8e, 0x43, 0x60, 0x13, 0x98, 0x00, 0x0f, 0x00,
+                       0xa0, 0x68, 0x23, 0x58, 0x0d, 0x05, 0x00, 0x00
+               }
+       },
+       {
+               "600-nor", "NOR  CPU: 600 PLB: 200 OPB: 100 EBC: 100",
+               {
+                       0x8d, 0x02, 0x34, 0x13, 0x98, 0x00, 0x0a, 0x00,
+                       0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+               }
+       },
+       {
+               "600-nand", "NOR  CPU: 600 PLB: 200 OPB: 100 EBC: 100",
+               {
+                       0x8d, 0x02, 0x34, 0x13, 0x98, 0x00, 0x0f, 0x00,
+                       0xa0, 0x68, 0x23, 0x58, 0x0d, 0x05, 0x00, 0x00
+               }
+       },
+       {
+               "666-nor", "NOR  CPU: 666 PLB: 222 OPB: 111 EBC: 111",
+               {
+                       0x8d, 0x03, 0x78, 0x13, 0x98, 0x00, 0x0a, 0x00,
+                       0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+               }
+       },
+};
+
+int ppc4xx_config_count = ARRAY_SIZE(ppc4xx_config_val);
diff --git a/board/gdsys/405ex/io64.c b/board/gdsys/405ex/io64.c
new file mode 100644 (file)
index 0000000..a997571
--- /dev/null
@@ -0,0 +1,384 @@
+/*
+ * (C) Copyright 2010
+ * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.de
+ *
+ * based on kilauea.c
+ * by 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/ppc4xx.h>
+#include <asm/ppc405.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <asm/errno.h>
+#include <asm/ppc4xx-gpio.h>
+#include <flash.h>
+
+#include <pca9698.h>
+
+#include "405ex.h"
+#include <gdsys_fpga.h>
+
+#include <miiphy.h>
+#include <i2c.h>
+#include <dtt.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define PHYREG_CONTROL                         0
+#define PHYREG_PAGE_ADDRESS                    22
+#define PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1   16
+#define PHYREG_PG2_COPPER_SPECIFIC_CONTROL_2   26
+#define PHYREG_PG2_MAC_SPECIFIC_STATUS_1       17
+#define PHYREG_PG2_MAC_SPECIFIC_CONTROL                21
+
+#define LATCH0_BASE (CONFIG_SYS_LATCH_BASE)
+#define LATCH1_BASE (CONFIG_SYS_LATCH_BASE + 0x100)
+#define LATCH2_BASE (CONFIG_SYS_LATCH_BASE + 0x200)
+#define LATCH3_BASE (CONFIG_SYS_LATCH_BASE + 0x300)
+
+enum {
+       UNITTYPE_CCD_SWITCH = 1,
+};
+
+enum {
+       HWVER_100 = 0,
+       HWVER_110 = 1,
+};
+
+static inline void blank_string(int size)
+{
+       int i;
+
+       for (i = 0; i < size; i++)
+               putc('\b');
+       for (i = 0; i < size; i++)
+               putc(' ');
+       for (i = 0; i < size; i++)
+               putc('\b');
+}
+
+/*
+ * Board early initialization function
+ */
+int misc_init_r(void)
+{
+       /* startup fans */
+       dtt_init();
+
+#ifdef CONFIG_ENV_IS_IN_FLASH
+       /* Monitor protection ON by default */
+       flash_protect(FLAG_PROTECT_SET,
+                     -CONFIG_SYS_MONITOR_LEN,
+                     0xffffffff,
+                     &flash_info[0]);
+#endif
+
+       return 0;
+}
+
+static void print_fpga_info(unsigned dev)
+{
+       ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(dev);
+       u16 versions = in_le16(&fpga->versions);
+       u16 fpga_version = in_le16(&fpga->fpga_version);
+       u16 fpga_features = in_le16(&fpga->fpga_features);
+       int fpga_state = get_fpga_state(dev);
+
+       unsigned unit_type;
+       unsigned hardware_version;
+       unsigned feature_channels;
+       unsigned feature_expansion;
+
+       printf("FPGA%d: ", dev);
+       if (fpga_state & FPGA_STATE_PLATFORM)
+               printf("(legacy) ");
+
+       if (fpga_state & FPGA_STATE_DONE_FAILED) {
+               printf(" done timed out\n");
+               return;
+       }
+
+       if (fpga_state & FPGA_STATE_REFLECTION_FAILED) {
+               printf(" refelectione test failed\n");
+               return;
+       }
+
+       unit_type = (versions & 0xf000) >> 12;
+       hardware_version = versions & 0x000f;
+       feature_channels = fpga_features & 0x007f;
+       feature_expansion = fpga_features & (1<<15);
+
+       switch (unit_type) {
+       case UNITTYPE_CCD_SWITCH:
+               printf("CCD-Switch");
+               break;
+
+       default:
+               printf("UnitType %d(not supported)", unit_type);
+               break;
+       }
+
+       switch (hardware_version) {
+       case HWVER_100:
+               printf(" HW-Ver 1.00\n");
+               break;
+
+       case HWVER_110:
+               printf(" HW-Ver 1.10\n");
+               break;
+
+       default:
+               printf(" HW-Ver %d(not supported)\n",
+                      hardware_version);
+               break;
+       }
+
+       printf("       FPGA V %d.%02d, features:",
+               fpga_version / 100, fpga_version % 100);
+
+       printf(" %d channel(s)", feature_channels);
+
+       printf(", expansion %ssupported\n", feature_expansion ? "" : "un");
+}
+
+int checkboard(void)
+{
+       char *s = getenv("serial#");
+
+       printf("Board: CATCenter Io64\n");
+
+       if (s != NULL) {
+               puts(", serial# ");
+               puts(s);
+       }
+
+       return 0;
+}
+
+int configure_gbit_phy(char *bus, unsigned char addr)
+{
+       unsigned short value;
+
+       /* select page 0 */
+       if (miiphy_write(bus, addr, PHYREG_PAGE_ADDRESS, 0x0000))
+               goto err_out;
+       /* switch to powerdown */
+       if (miiphy_read(bus, addr, PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1,
+               &value))
+               goto err_out;
+       if (miiphy_write(bus, addr, PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1,
+               value | 0x0004))
+               goto err_out;
+       /* select page 2 */
+       if (miiphy_write(bus, addr, PHYREG_PAGE_ADDRESS, 0x0002))
+               goto err_out;
+       /* disable SGMII autonegotiation */
+       if (miiphy_write(bus, addr, PHYREG_PG2_MAC_SPECIFIC_CONTROL, 48))
+               goto err_out;
+       /* select page 0 */
+       if (miiphy_write(bus, addr, PHYREG_PAGE_ADDRESS, 0x0000))
+               goto err_out;
+       /* switch from powerdown to normal operation */
+       if (miiphy_read(bus, addr, PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1,
+               &value))
+               goto err_out;
+       if (miiphy_write(bus, addr, PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1,
+               value & ~0x0004))
+               goto err_out;
+       /* reset phy so settings take effect */
+       if (miiphy_write(bus, addr, PHYREG_CONTROL, 0x9140))
+               goto err_out;
+
+       return 0;
+
+err_out:
+       printf("Error writing to the PHY addr=%02x\n", addr);
+       return -1;
+}
+
+int verify_gbit_phy(char *bus, unsigned char addr)
+{
+       unsigned short value;
+
+       /* select page 2 */
+       if (miiphy_write(bus, addr, PHYREG_PAGE_ADDRESS, 0x0002))
+               goto err_out;
+       /* verify SGMII link status */
+       if (miiphy_read(bus, addr, PHYREG_PG2_MAC_SPECIFIC_STATUS_1, &value))
+               goto err_out;
+       if (!(value & (1 << 10)))
+               return -2;
+
+       return 0;
+
+err_out:
+       printf("Error writing to the PHY addr=%02x\n", addr);
+       return -1;
+}
+
+int last_stage_init(void)
+{
+       unsigned int k;
+       unsigned int fpga;
+       ihs_fpga_t *fpga0 = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0);
+       ihs_fpga_t *fpga1 = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(1);
+       int failed = 0;
+       char str_phys[] = "Setup PHYs -";
+       char str_serdes[] = "Start SERDES blocks";
+       char str_channels[] = "Start FPGA channels";
+       char str_locks[] = "Verify SERDES locks";
+       char str_status[] = "Verify PHY status -";
+       char slash[] = "\\|/-\\|/-";
+
+       print_fpga_info(0);
+       print_fpga_info(1);
+
+       /* setup Gbit PHYs */
+       puts("TRANS: ");
+       puts(str_phys);
+       miiphy_register(CONFIG_SYS_GBIT_MII_BUSNAME,
+               bb_miiphy_read, bb_miiphy_write);
+
+       for (k = 0; k < 32; ++k) {
+               configure_gbit_phy(CONFIG_SYS_GBIT_MII_BUSNAME, k);
+               putc('\b');
+               putc(slash[k % 8]);
+       }
+
+       miiphy_register(CONFIG_SYS_GBIT_MII1_BUSNAME,
+               bb_miiphy_read, bb_miiphy_write);
+
+       for (k = 0; k < 32; ++k) {
+               configure_gbit_phy(CONFIG_SYS_GBIT_MII1_BUSNAME, k);
+               putc('\b');
+               putc(slash[k % 8]);
+       }
+       blank_string(strlen(str_phys));
+
+       /* take fpga serdes blocks out of reset */
+       puts(str_serdes);
+       udelay(500000);
+       out_le16(&fpga0->quad_serdes_reset, 0);
+       out_le16(&fpga1->quad_serdes_reset, 0);
+       blank_string(strlen(str_serdes));
+
+       /* take channels out of reset */
+       puts(str_channels);
+       udelay(500000);
+       for (fpga = 0; fpga < 2; ++fpga) {
+               u16 *ch0_config_int = &(fpga ? fpga1 : fpga0)->ch0_config_int;
+               for (k = 0; k < 32; ++k)
+                       out_le16(ch0_config_int + 4 * k, 0);
+       }
+       blank_string(strlen(str_channels));
+
+       /* verify channels serdes lock */
+       puts(str_locks);
+       udelay(500000);
+       for (fpga = 0; fpga < 2; ++fpga) {
+               u16 *ch0_status_int = &(fpga ? fpga1 : fpga0)->ch0_status_int;
+               for (k = 0; k < 32; ++k) {
+                       u16 status = in_le16(ch0_status_int + 4*k);
+                       if (!(status & (1 << 4))) {
+                               failed = 1;
+                               printf("fpga %d channel %d: no serdes lock\n",
+                                       fpga, k);
+                       }
+                       /* reset events */
+                       out_le16(ch0_status_int + 4*k, status);
+               }
+       }
+       blank_string(strlen(str_locks));
+
+       /* verify phy status */
+       puts(str_status);
+       for (k = 0; k < 32; ++k) {
+               if (verify_gbit_phy(CONFIG_SYS_GBIT_MII_BUSNAME, k)) {
+                       printf("verify baseboard phy %d failed\n", k);
+                       failed = 1;
+               }
+               putc('\b');
+               putc(slash[k % 8]);
+       }
+       for (k = 0; k < 32; ++k) {
+               if (verify_gbit_phy(CONFIG_SYS_GBIT_MII1_BUSNAME, k)) {
+                       printf("verify extensionboard phy %d failed\n", k);
+                       failed = 1;
+               }
+               putc('\b');
+               putc(slash[k % 8]);
+       }
+       blank_string(strlen(str_status));
+
+       printf("Starting 64 channels %s\n", failed ? "failed" : "ok");
+
+       return 0;
+}
+
+void gd405ex_init(void)
+{
+       unsigned int k;
+
+       if (i2c_probe(0x22)) { /* i2c_probe returns 0 on success */
+               for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k)
+                       gd->fpga_state[k] |= FPGA_STATE_PLATFORM;
+       } else {
+               pca9698_direction_output(0x22, 39, 1);
+       }
+}
+
+void gd405ex_set_fpga_reset(unsigned state)
+{
+       int legacy = get_fpga_state(0) & FPGA_STATE_PLATFORM;
+
+       if (legacy) {
+               if (state) {
+                       out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_RESET);
+                       out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_RESET);
+               } else {
+                       out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_BOOT);
+                       out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_BOOT);
+               }
+       } else {
+               pca9698_set_value(0x22, 39, state ? 0 : 1);
+       }
+}
+
+void gd405ex_setup_hw(void)
+{
+       gpio_write_bit(CONFIG_SYS_GPIO_STARTUP_FINISHED_N, 0);
+       gpio_write_bit(CONFIG_SYS_GPIO_STARTUP_FINISHED, 1);
+}
+
+int gd405ex_get_fpga_done(unsigned fpga)
+{
+       int legacy = get_fpga_state(0) & FPGA_STATE_PLATFORM;
+
+       if (legacy)
+               return in_le16((void *)LATCH3_BASE)
+                       & CONFIG_SYS_FPGA_DONE(fpga);
+       else
+               return pca9698_get_value(0x22, fpga ? 9 : 8);
+}
index 2868cc8bdd414b236009e9c3403e98f4f96c0ca5..05dd65df7ac74875602abeae743c40ccf32cbe46 100644 (file)
@@ -30,6 +30,7 @@ endif
 LIB    = $(obj)lib$(VENDOR).o
 
 COBJS-$(CONFIG_IO) += miiphybb.o
+COBJS-$(CONFIG_IO64) += miiphybb.o
 COBJS-$(CONFIG_IOCON) += osd.o
 COBJS-$(CONFIG_DLVISION_10G) += osd.o
 
index e56e966509cd62d2a17dc4fffd863bfd91e80efb..46f1a1ecbb4f706b7c604a10c82f260b08cb208f 100644 (file)
 
 #include <asm/io.h>
 
+struct io_bb_pinset {
+       int mdio;
+       int mdc;
+};
+
 static int io_bb_mii_init(struct bb_miiphy_bus *bus)
 {
        return 0;
@@ -33,47 +38,57 @@ static int io_bb_mii_init(struct bb_miiphy_bus *bus)
 
 static int io_bb_mdio_active(struct bb_miiphy_bus *bus)
 {
+       struct io_bb_pinset *pins = bus->priv;
+
        out_be32((void *)GPIO0_TCR,
-               in_be32((void *)GPIO0_TCR) | CONFIG_SYS_MDIO_PIN);
+               in_be32((void *)GPIO0_TCR) | pins->mdio);
 
        return 0;
 }
 
 static int io_bb_mdio_tristate(struct bb_miiphy_bus *bus)
 {
+       struct io_bb_pinset *pins = bus->priv;
+
        out_be32((void *)GPIO0_TCR,
-               in_be32((void *)GPIO0_TCR) & ~CONFIG_SYS_MDIO_PIN);
+               in_be32((void *)GPIO0_TCR) & ~pins->mdio);
 
        return 0;
 }
 
 static int io_bb_set_mdio(struct bb_miiphy_bus *bus, int v)
 {
+       struct io_bb_pinset *pins = bus->priv;
+
        if (v)
                out_be32((void *)GPIO0_OR,
-                       in_be32((void *)GPIO0_OR) | CONFIG_SYS_MDIO_PIN);
+                       in_be32((void *)GPIO0_OR) | pins->mdio);
        else
                out_be32((void *)GPIO0_OR,
-                       in_be32((void *)GPIO0_OR) & ~CONFIG_SYS_MDIO_PIN);
+                       in_be32((void *)GPIO0_OR) & ~pins->mdio);
 
        return 0;
 }
 
 static int io_bb_get_mdio(struct bb_miiphy_bus *bus, int *v)
 {
-       *v = ((in_be32((void *)GPIO0_IR) & CONFIG_SYS_MDIO_PIN) != 0);
+       struct io_bb_pinset *pins = bus->priv;
+
+       *v = ((in_be32((void *)GPIO0_IR) & pins->mdio) != 0);
 
        return 0;
 }
 
 static int io_bb_set_mdc(struct bb_miiphy_bus *bus, int v)
 {
+       struct io_bb_pinset *pins = bus->priv;
+
        if (v)
                out_be32((void *)GPIO0_OR,
-                       in_be32((void *)GPIO0_OR) | CONFIG_SYS_MDC_PIN);
+                       in_be32((void *)GPIO0_OR) | pins->mdc);
        else
                out_be32((void *)GPIO0_OR,
-                       in_be32((void *)GPIO0_OR) & ~CONFIG_SYS_MDC_PIN);
+                       in_be32((void *)GPIO0_OR) & ~pins->mdc);
 
        return 0;
 }
@@ -85,6 +100,19 @@ static int io_bb_delay(struct bb_miiphy_bus *bus)
        return 0;
 }
 
+struct io_bb_pinset io_bb_pinsets[] = {
+       {
+               .mdio = CONFIG_SYS_MDIO_PIN,
+               .mdc = CONFIG_SYS_MDC_PIN,
+       },
+#ifdef CONFIG_SYS_GBIT_MII1_BUSNAME
+       {
+               .mdio = CONFIG_SYS_MDIO1_PIN,
+               .mdc = CONFIG_SYS_MDC1_PIN,
+       },
+#endif
+};
+
 struct bb_miiphy_bus bb_miiphy_buses[] = {
        {
                .name = CONFIG_SYS_GBIT_MII_BUSNAME,
@@ -95,7 +123,21 @@ struct bb_miiphy_bus bb_miiphy_buses[] = {
                .get_mdio = io_bb_get_mdio,
                .set_mdc = io_bb_set_mdc,
                .delay = io_bb_delay,
-       }
+               .priv = &io_bb_pinsets[0],
+       },
+#ifdef CONFIG_SYS_GBIT_MII1_BUSNAME
+       {
+               .name = CONFIG_SYS_GBIT_MII1_BUSNAME,
+               .init = io_bb_mii_init,
+               .mdio_active = io_bb_mdio_active,
+               .mdio_tristate = io_bb_mdio_tristate,
+               .set_mdio = io_bb_set_mdio,
+               .get_mdio = io_bb_get_mdio,
+               .set_mdc = io_bb_set_mdc,
+               .delay = io_bb_delay,
+               .priv = &io_bb_pinsets[1],
+       },
+#endif
 };
 
 int bb_miiphy_buses_num = sizeof(bb_miiphy_buses) /
index 1a2b8d23a7be380c6ce7c9bd3f5dc83ee678487c..0a58015bcd36bc28cf8075aa0e2bc3749e56fb0d 100644 (file)
@@ -23,9 +23,6 @@
 
 #include <common.h>
 
-/* imports from common/main.c */
-extern char console_buffer[CONFIG_SYS_CBSIZE];
-
 int
 hymod_get_serno (const char *prompt)
 {
diff --git a/board/innokom/flash.c b/board/innokom/flash.c
deleted file mode 100644 (file)
index ed4b987..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * (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 2002
- * Robert Schwebel, Pengutronix, <r.schwebel@pengutronix.de>
- *
- * (C) Copyright 2002
- * Auerswald GmbH & Co KG, Germany
- * Kai-Uwe Bloem <kai-uwe.bloem@auerswald.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/pxa-regs.h>
-
-/* Debugging macros ------------------------------------------------------  */
-
-#undef FLASH_DEBUG
-
-/* Some debug macros */
-#if (FLASH_DEBUG > 2 )
-#define PRINTK3(args...) printf(args)
-#else
-#define PRINTK3(args...)
-#endif
-
-#if FLASH_DEBUG > 1
-#define PRINTK2(args...) printf(args)
-#else
-#define PRINTK2(args...)
-#endif
-
-#ifdef FLASH_DEBUG
-#define PRINTK(args...) printf(args)
-#else
-#define PRINTK(args...)
-#endif
-
-/* ------------------------------------------------------------------------ */
-
-/* Development system: we have only 16 MB Flash                             */
-#ifdef CONFIG_MTD_INNOKOM_16MB
-#define FLASH_BANK_SIZE 0x01000000     /* 16 MB (during development)       */
-#define MAIN_SECT_SIZE  0x00020000     /* 128k per sector                  */
-#endif
-
-/* Production system: we have 64 MB Flash                                   */
-#ifdef CONFIG_MTD_INNOKOM_64MB
-#define FLASH_BANK_SIZE 0x04000000     /* 64 MB                            */
-#define MAIN_SECT_SIZE  0x00020000     /* 128k per sector                  */
-#endif
-
-flash_info_t    flash_info[CONFIG_SYS_MAX_FLASH_BANKS];
-
-/**
- * flash_init: - initialize data structures for flash chips
- *
- * @return: size of the flash
- */
-
-ulong flash_init(void)
-{
-       int i, j;
-       ulong size = 0;
-
-       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) {
-               ulong flashbase = 0;
-               flash_info[i].flash_id =
-                       (INTEL_MANUFACT & FLASH_VENDMASK) |
-                       (INTEL_ID_28F128J3 & FLASH_TYPEMASK);
-               flash_info[i].size = FLASH_BANK_SIZE;
-               flash_info[i].sector_count = CONFIG_SYS_MAX_FLASH_SECT;
-               memset(flash_info[i].protect, 0, CONFIG_SYS_MAX_FLASH_SECT);
-
-               switch (i) {
-                       case 0:
-                               flashbase = PHYS_FLASH_1;
-                               break;
-                       default:
-                               panic("configured too many flash banks!\n");
-                               break;
-               }
-               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 u-boot sectors */
-       flash_protect(FLAG_PROTECT_SET,
-                       CONFIG_SYS_FLASH_BASE,
-                       CONFIG_SYS_FLASH_BASE + (256*1024) - 1,
-                       &flash_info[0]);
-
-#ifdef CONFIG_ENV_IS_IN_FLASH
-       flash_protect(FLAG_PROTECT_SET,
-                       CONFIG_ENV_ADDR,
-                       CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1,
-                       &flash_info[0]);
-#endif
-
-       return size;
-}
-
-
-/**
- * flash_print_info: - print information about the flash situation
- *
- * @param info:
- */
-
-void flash_print_info  (flash_info_t *info)
-{
-       int i, j;
-
-       for (j=0; j<CONFIG_SYS_MAX_FLASH_BANKS; j++) {
-
-               switch (info->flash_id & FLASH_VENDMASK) {
-
-                       case (INTEL_MANUFACT & FLASH_VENDMASK):
-                               printf("Intel: ");
-                               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");
-                               return;
-               }
-
-               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");
-               info++;
-       }
-}
-
-
-/**
- * flash_erase: - erase flash sectors
- *
- */
-
-int flash_erase(flash_info_t *info, int s_first, int s_last)
-{
-       int flag, prot, sect;
-       int rc = ERR_OK;
-       ulong start;
-
-       if (info->flash_id == FLASH_UNKNOWN)
-               return ERR_UNKNOWN_FLASH_TYPE;
-
-       if ((s_first < 0) || (s_first > s_last)) {
-               return ERR_INVAL;
-       }
-
-       if ((info->flash_id & FLASH_VENDMASK) != (INTEL_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();
-
-       /* Start erase on unprotected sectors */
-       for (sect = s_first; sect<=s_last && !ctrlc(); sect++) {
-
-               printf("Erasing sector %2d ... ", sect);
-
-               PRINTK("\n");
-
-               /* arm simple, non interrupt dependent timer */
-               start = get_timer(0);
-
-               if (info->protect[sect] == 0) { /* not protected */
-                       u16 * volatile addr = (u16 * volatile)(info->start[sect]);
-
-                       PRINTK("unlocking sector\n");
-                       *addr = 0x0060;
-                       *addr = 0x00d0;
-                       *addr = 0x00ff;
-
-                       PRINTK("erasing sector\n");
-                       *addr = 0x0020;
-                       PRINTK("confirming erase\n");
-                       *addr = 0x00D0;
-
-                       while ((*addr & 0x0080) != 0x0080) {
-                               PRINTK(".");
-                               if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
-                                       *addr = 0x00B0; /* suspend erase*/
-                                       *addr = 0x00FF; /* read mode    */
-                                       rc = ERR_TIMOUT;
-                                       goto outahere;
-                               }
-                       }
-
-                       PRINTK("clearing status register\n");
-                       *addr = 0x0050;
-                       PRINTK("resetting to read mode");
-                       *addr = 0x00FF;
-               }
-
-               printf("ok.\n");
-       }
-
-       if (ctrlc()) printf("User Interrupt!\n");
-
-       outahere:
-
-       /* allow flash to settle - wait 10 ms */
-       udelay_masked(10000);
-
-       if (flag) enable_interrupts();
-
-       return rc;
-}
-
-
-/**
- * write_word: - copy memory to flash
- *
- * @param info:
- * @param dest:
- * @param data:
- * @return:
- */
-
-static int write_word (flash_info_t *info, ulong dest, ushort data)
-{
-       volatile u16 *addr = (u16 *)dest, val;
-       int rc = ERR_OK;
-       int flag;
-       ulong start;
-
-       /* Check if Flash is (sufficiently) erased */
-       if ((*addr & data) != data) return ERR_NOT_ERASED;
-
-       /*
-        * 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();
-
-       /* clear status register command */
-       *addr = 0x50;
-
-       /* program set-up command */
-       *addr = 0x40;
-
-       /* latch address/data */
-       *addr = data;
-
-       /* arm simple, non interrupt dependent timer */
-       start = get_timer(0);
-
-       /* wait while polling the status register */
-       while(((val = *addr) & 0x80) != 0x80) {
-               if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
-                       rc = ERR_TIMOUT;
-                       *addr = 0xB0; /* suspend program command */
-                       goto outahere;
-               }
-       }
-
-       if(val & 0x1A) {        /* check for error */
-               printf("\nFlash write error %02x at address %08lx\n",
-                       (int)val, (unsigned long)dest);
-               if(val & (1<<3)) {
-                       printf("Voltage range error.\n");
-                       rc = ERR_PROG_ERROR;
-                       goto outahere;
-               }
-               if(val & (1<<1)) {
-                       printf("Device protect error.\n");
-                       rc = ERR_PROTECTED;
-                       goto outahere;
-               }
-               if(val & (1<<4)) {
-                       printf("Programming error.\n");
-                       rc = ERR_PROG_ERROR;
-                       goto outahere;
-               }
-               rc = ERR_PROG_ERROR;
-               goto outahere;
-       }
-
-       outahere:
-
-       *addr = 0xFF; /* read array command */
-       if (flag) enable_interrupts();
-
-       return rc;
-}
-
-
-/**
- * write_buf: - Copy memory to flash.
- *
- * @param info:
- * @param src: source of copy transaction
- * @param addr:        where to copy to
- * @param cnt: number of bytes to copy
- *
- * @return     error code
- */
-
-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 */
-
-       /*
-        * 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 = *((vushort*)src); */
-               data = *((ushort*)src);
-               if ((rc = write_word(info, wp, data)) != 0) {
-                       return (rc);
-               }
-               src += 2;
-               wp  += 2;
-               cnt -= 2;
-       }
-
-       if (cnt == 0) 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/innokom/innokom.c b/board/innokom/innokom.c
deleted file mode 100644 (file)
index 22de7e3..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * (C) Copyright 2002
- * Robert Schwebel, Pengutronix, r.schwebel@pengutronix.de
- * Kyle Harris, Nexus Technologies, Inc., kharris@nexus-tech.net
- * Marius Groeger, Sysgo Real-Time Solutions GmbH, 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 <common.h>
-#include <netdev.h>
-#include <asm/arch/pxa-regs.h>
-#include <asm/mach-types.h>
-#include <asm/io.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#ifdef CONFIG_SHOW_BOOT_PROGRESS
-# define SHOW_BOOT_PROGRESS(arg)        show_boot_progress(arg)
-#else
-# define SHOW_BOOT_PROGRESS(arg)
-#endif
-
-/**
- * i2c_init_board - reset i2c bus. When the board is powercycled during a
- * bus transfer it might hang; for details see doc/I2C_Edge_Conditions.
- * The Innokom board has GPIO70 connected to SCLK which can be toggled
- * until all chips think that their current cycles are finished.
- */
-int i2c_init_board(void)
-{
-       int i;
-
-       /* set gpio pin low _before_ we change direction to output          */
-       writel(GPIO_bit(70), GPCR(70));
-
-       /* now toggle between output=low and high-impedance                 */
-       for (i = 0; i < 20; i++) {
-               writel(readl(GPDR(70)) | GPIO_bit(70), GPDR(70));  /* output */
-               udelay(10);
-               writel(readl(GPDR(70)) & ~GPIO_bit(70), GPDR(70)); /* input  */
-               udelay(10);
-       }
-
-       return 0;
-}
-
-
-/**
- * misc_init_r: - misc initialisation routines
- */
-
-int misc_init_r(void)
-{
-       char *str;
-
-       /* determine if the software update key is pressed during startup   */
-       if (readl(GPLR0) & 0x00000800) {
-               printf("using bootcmd_normal (sw-update button not pressed)\n");
-               str = getenv("bootcmd_normal");
-       } else {
-               printf("using bootcmd_update (sw-update button pressed)\n");
-               str = getenv("bootcmd_update");
-       }
-
-       setenv("bootcmd",str);
-
-       return 0;
-}
-
-
-/**
- * board_init: - setup some data structures
- *
- * @return: 0 in case of success
- */
-
-int board_init (void)
-{
-       /* We have RAM, disable cache */
-       dcache_disable();
-       icache_disable();
-
-       gd->bd->bi_arch_number = MACH_TYPE_INNOKOM;
-       gd->bd->bi_boot_params = 0xa0000100;
-       gd->bd->bi_baudrate = CONFIG_BAUDRATE;
-
-       return 0;
-}
-
-extern void pxa_dram_init(void);
-int dram_init(void)
-{
-       pxa_dram_init();
-       gd->ram_size = PHYS_SDRAM_1_SIZE;
-       return 0;
-}
-
-void dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-}
-
-/**
- * innokom_set_led: - switch LEDs on or off
- *
- * @param led:   LED to switch (0,1,2)
- * @param state: switch on (1) or off (0)
- */
-
-void innokom_set_led(int led, int state)
-{
-       switch(led) {
-/*
-               case 0: if (state==1) {
-                               GPCR0 |= CSB226_USER_LED0;
-                       } else if (state==0) {
-                               GPSR0 |= CSB226_USER_LED0;
-                       }
-                       break;
-
-               case 1: if (state==1) {
-                               GPCR0 |= CSB226_USER_LED1;
-                       } else if (state==0) {
-                               GPSR0 |= CSB226_USER_LED1;
-                       }
-                       break;
-
-               case 2: if (state==1) {
-                               GPCR0 |= CSB226_USER_LED2;
-                       } else if (state==0) {
-                               GPSR0 |= CSB226_USER_LED2;
-                       }
-                       break;
-*/
-       }
-
-       return;
-}
-
-
-/**
- * show_boot_progress: - indicate state of the boot process
- *
- * @param status: Status number - see README for details.
- *
- * The CSB226 does only have 3 LEDs, so we switch them on at the most
- * important states (1, 5, 15).
- */
-
-void show_boot_progress (int status)
-{
-       switch(status) {
-/*
-               case  1: csb226_set_led(0,1); break;
-               case  5: csb226_set_led(1,1); break;
-               case 15: csb226_set_led(2,1); break;
-*/
-       }
-
-       return;
-}
-
-#ifdef CONFIG_CMD_NET
-int board_eth_init(bd_t *bis)
-{
-       int rc = 0;
-#ifdef CONFIG_SMC91111
-       rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
-       return rc;
-}
-#endif
index be177753c5906bc7f46c23ffca8bf357849f9422..8df92d8874aa415f16d8ebe44497af9d667fb9c9 100644 (file)
@@ -41,7 +41,6 @@ int i2c_make_abort(void)
 {
        struct fsl_i2c *dev;
        dev = (struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_I2C_OFFSET);
-       uchar   dummy;
        uchar   last;
        int     nbr_read = 0;
        int     i = 0;
@@ -52,7 +51,7 @@ int i2c_make_abort(void)
        udelay(DELAY_ABORT_SEQ);
        out_8(&dev->cr, (I2C_CR_MEN | I2C_CR_MSTA));
        udelay(DELAY_ABORT_SEQ);
-       dummy = in_8(&dev->dr);
+       in_8(&dev->dr);
        udelay(DELAY_ABORT_SEQ);
        last = in_8(&dev->dr);
        nbr_read++;
index c0a006a7b341b8b26706c7f6737e5fff72490274..0a105bf2818314f6584ddbf8408884f6eb13ae7d 100644 (file)
@@ -76,7 +76,7 @@ void set_muxconf_regs(void)
        MUX_AM3517EVM();
 }
 
-#ifdef CONFIG_GENERIC_MMC
+#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
 int board_mmc_init(bd_t *bis)
 {
        omap_mmc_init(0);
index 3d74ef13210285516835996dc0f2c5214aa92105..68d746ccd0d35e4b6fe08f6e612a0b724efb60a1 100644 (file)
@@ -31,46 +31,6 @@ const omap3_sysinfo sysinfo = {
        "AM3517EVM Board",
        "NAND",
 };
-/* AM3517 specific mux configuration */
-#define CONTROL_PADCONF_SYS_NRESWARM   0x0A08
-/* CCDC */
-#define CONTROL_PADCONF_CCDC_PCLK      0x01E4
-#define CONTROL_PADCONF_CCDC_FIELD     0x01E6
-#define CONTROL_PADCONF_CCDC_HD                0x01E8
-#define CONTROL_PADCONF_CCDC_VD                0x01EA
-#define CONTROL_PADCONF_CCDC_WEN       0x01EC
-#define CONTROL_PADCONF_CCDC_DATA0     0x01EE
-#define CONTROL_PADCONF_CCDC_DATA1     0x01F0
-#define CONTROL_PADCONF_CCDC_DATA2     0x01F2
-#define CONTROL_PADCONF_CCDC_DATA3     0x01F4
-#define CONTROL_PADCONF_CCDC_DATA4     0x01F6
-#define CONTROL_PADCONF_CCDC_DATA5     0x01F8
-#define CONTROL_PADCONF_CCDC_DATA6     0x01FA
-#define CONTROL_PADCONF_CCDC_DATA7     0x01FC
-/* RMII */
-#define CONTROL_PADCONF_RMII_MDIO_DATA 0x01FE
-#define CONTROL_PADCONF_RMII_MDIO_CLK  0x0200
-#define CONTROL_PADCONF_RMII_RXD0      0x0202
-#define CONTROL_PADCONF_RMII_RXD1      0x0204
-#define CONTROL_PADCONF_RMII_CRS_DV    0x0206
-#define CONTROL_PADCONF_RMII_RXER      0x0208
-#define CONTROL_PADCONF_RMII_TXD0      0x020A
-#define CONTROL_PADCONF_RMII_TXD1      0x020C
-#define CONTROL_PADCONF_RMII_TXEN      0x020E
-#define CONTROL_PADCONF_RMII_50MHZ_CLK 0x0210
-#define CONTROL_PADCONF_USB0_DRVBUS    0x0212
-/* CAN */
-#define CONTROL_PADCONF_HECC1_TXD      0x0214
-#define CONTROL_PADCONF_HECC1_RXD      0x0216
-
-#define CONTROL_PADCONF_SYS_BOOT7      0x0218
-#define CONTROL_PADCONF_SDRC_DQS0N     0x021A
-#define CONTROL_PADCONF_SDRC_DQS1N     0x021C
-#define CONTROL_PADCONF_SDRC_DQS2N     0x021E
-#define CONTROL_PADCONF_SDRC_DQS3N     0x0220
-#define CONTROL_PADCONF_STRBEN_DLY0    0x0222
-#define CONTROL_PADCONF_STRBEN_DLY1    0x0224
-#define CONTROL_PADCONF_SYS_BOOT8      0x0226
 
 /*
  * IEN  - Input Enable
diff --git a/board/logicpd/am3517evm/config.mk b/board/logicpd/am3517evm/config.mk
deleted file mode 100644 (file)
index 71ec5d0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Author: Vaibhav Hiremath <hvaibhav@ti.com>
-#
-# Based on ti/evm/config.mk
-#
-# Copyright (C) 2010
-# Texas Instruments Incorporated - http://www.ti.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., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-# Physical Address:
-# 8000'0000 (bank0)
-# A000/0000 (bank1)
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
-
-# For use with external or internal boots.
-CONFIG_SYS_TEXT_BASE = 0x80008000
index e1e7807bc10d62bf959d9cd77cb9c787d0383e2c..bf8f0c912353895e5bddbbeae1ddf4305a003985 100644 (file)
@@ -220,7 +220,7 @@ static ulong flash_get_size (FPW *addr, flash_info_t *info)
 
 int flash_erase (flash_info_t *info, int s_first, int s_last)
 {
-       int flag, prot, sect;
+       int prot, sect;
        ulong type, start;
        int rcode = 0;
 
@@ -255,7 +255,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
        }
 
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       disable_interrupts();
 
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect <= s_last; sect++) {
@@ -389,7 +389,6 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
 {
        FPWV *addr = (FPWV *) dest;
        ulong status;
-       int flag;
        ulong start;
 
        /* Check if Flash is (sufficiently) erased */
@@ -398,7 +397,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
                return (2);
        }
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       disable_interrupts();
 
        *addr = (FPW) 0x00400040;       /* write setup */
        *addr = data;
index f791c5b904098b38eebb150918353daf6c0199bf..437f9447159d5e655bcc2212d42c0d9b41f0b558 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <common.h>
 #include <netdev.h>
+#include <asm/arch/pxa.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -56,10 +57,9 @@ int board_late_init(void)
        return 0;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
index 404c8b41c0b3909cf7ec58fc9a5a3b081f324fb2..acb72c563c712bcf39cabe9fa0c2f4abc01ab150 100644 (file)
@@ -29,6 +29,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#ifndef CONFIG_ENV_IS_NOWHERE
 static char* entries_to_keep[] = {
        "serial#", "ethaddr", "eth1addr", "model_info", "sensor_cnt",
        "fpgadatasize", "ddr_size", "use_dhcp", "use_static_ipaddr",
@@ -38,7 +39,6 @@ static char* entries_to_keep[] = {
 #define MV_MAX_ENV_ENTRY_LENGTH        64
 #define MV_KEEP_ENTRIES                ARRAY_SIZE(entries_to_keep)
 
-#ifndef CONFIG_ENV_IS_NOWHERE
 void mv_reset_environment(void)
 {
        int i;
index 01cb5171569eb148c246b646b98fa1b99df0cd57..f519a5d27450163b5e386a17a0132114d5214990 100644 (file)
@@ -37,12 +37,6 @@ CFLAGS += -Werror
 $(LIB):        $(obj).depend $(OBJS)
        $(call cmd_link_o_target, $(OBJS))
 
-clean:
-       rm -f $(OBJS)
-
-distclean:     clean
-       rm -f $(LIB) core *.bak $(obj).depend
-
 #########################################################################
 
 # defines $(obj).depend target
index 726366ddf0dccd4086efc033017a1c7a90f2ce5e..d8f754c4a18ff0606b585402c9e89762df20e3d6 100644 (file)
@@ -55,6 +55,9 @@
 #define PSOC_RETRIES   10      /* each of PSOC_WAIT_TIME */
 #define PSOC_WAIT_TIME 10      /* usec */
 
+#include <video_font.h>
+#define FONT_WIDTH     VIDEO_FONT_WIDTH
+
 DECLARE_GLOBAL_DATA_PTR;
 
 /*
@@ -185,7 +188,6 @@ void lcd_enable (void)
 }
 #ifdef CONFIG_PROGRESSBAR
 
-#define FONT_WIDTH      8 /* the same as VIDEO_FONT_WIDTH in video_font.h */
 void show_progress (int size, int tot)
 {
        int cnt;
index 81d7271a1bfc66596421a653dec8e56a727e55a9..d5b63c01964ca7de5f449f2e76aa41774ed9f2c9 100644 (file)
@@ -157,7 +157,7 @@ unsigned long flash_init (void)
        int i;
 
 #if !defined(CONFIG_PATI)
-       unsigned long size_b1,flashcr,size_reg;
+       unsigned long flashcr,size_reg;
        int mode;
        extern char version_string;
        char *p = &version_string;
@@ -197,7 +197,6 @@ unsigned long flash_init (void)
 #if !defined(CONFIG_PATI)
        /* protect reset vector */
        flash_info[0].protect[flash_info[0].sector_count-1] = 1;
-       size_b1 = 0 ;
        flash_info[0].size = size_b0;
        /* set up flash cs according to the size */
        size_reg=(flash_info[0].size >>20);
index e93d99407c543625bcfc718fe0204805e2cef236..9d0db644626900a655e3c95e21dbaec124b2e28e 100644 (file)
@@ -246,8 +246,7 @@ int init_sdram (void)
        unsigned char   trp_clocks,
                        trcd_clocks,
                        tras_clocks,
-                       trc_clocks,
-                       tctp_clocks;
+                       trc_clocks;
        unsigned char   cal_val;
        unsigned char   bc;
        unsigned long   sdram_tim, sdram_bank;
@@ -345,7 +344,6 @@ int init_sdram (void)
        trcd_clocks = sdram_table[i].trcd;      /* 20ns /7.5 ns (datain[29]) */
        tras_clocks = sdram_table[i].tras;      /* 44ns /7.5 ns  (datain[30]) */
        /* ctp = ((trp + tras) - trp - trcd) => tras - trcd */
-       tctp_clocks = sdram_table[i].tctp;      /* 44 - 20ns = 24ns */
        /* trc_clocks is sum of trp_clocks + tras_clocks */
        trc_clocks = trp_clocks + tras_clocks;
        /* get SDRAM timing register */
@@ -626,10 +624,9 @@ phys_size_t initdram (int board_type)
 {
 
        unsigned long bank_reg[4], tmp, bank_size;
-       int i, ds;
+       int i;
        unsigned long TotalSize;
 
-       ds = 0;
        /* since the DRAM controller is allready set up, calculate the size with the
           bank registers    */
        mtdcr (SDRAM0_CFGADDR, SDRAM0_B0CR);
@@ -646,8 +643,7 @@ phys_size_t initdram (int board_type)
                        tmp = (bank_reg[i] >> 17) & 0x7;
                        bank_size = 4 << tmp;
                        TotalSize += bank_size;
-               } else
-                       ds = 1;
+               }
        }
        mtdcr (SDRAM0_CFGADDR, SDRAM0_ECCCFG);
        tmp = mfdcr (SDRAM0_CFGDATA);
index 7b48c0617ca2b92ef09b729147c4654a5d7b95f2..a1f0b656d4ee22efd51454dab66d33a17f79a557 100644 (file)
@@ -179,7 +179,6 @@ void write_4hex (unsigned long val)
 
 int board_early_init_f (void)
 {
-       unsigned char dataout[1];
        unsigned char datain[128];
        unsigned long sdram_size = 0;
        SDRAM_SETUP *t = (SDRAM_SETUP *) sdram_setup_table;
@@ -189,9 +188,13 @@ int board_early_init_f (void)
        unsigned short i;
        unsigned char rows, cols, banks, sdram_banks, density;
        unsigned char supported_cal, trp_clocks, trcd_clocks, tras_clocks,
-                       trc_clocks, tctp_clocks;
+               trc_clocks;
        unsigned char cal_index, cal_val, spd_version, spd_chksum;
        unsigned char buf[8];
+#ifdef SDRAM_DEBUG
+       unsigned char tctp_clocks;
+#endif
+
        /* set up the config port */
        mtdcr (EBC0_CFGADDR, PB7AP);
        mtdcr (EBC0_CFGDATA, CONFIG_PORT_AP);
@@ -210,7 +213,6 @@ int board_early_init_f (void)
 
        /* Read Serial Presence Detect Information */
        i2c_init (CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
-       dataout[0] = 0;
        for (i = 0; i < 128; i++)
                datain[i] = 127;
        i2c_read(SPD_EEPROM_ADDRESS,0,1,datain,128);
@@ -307,12 +309,13 @@ int board_early_init_f (void)
 
        /* trc_clocks is sum of trp_clocks + tras_clocks */
        trc_clocks = trp_clocks + tras_clocks;
+
+#ifdef SDRAM_DEBUG
        /* ctp = ((trp + tras) - trp - trcd) => tras - trcd */
        tctp_clocks =
                        ((NSto10PS (datain[30]) - NSto10PS (datain[29])) +
                         (tmemclk - 1)) / tmemclk;
 
-#ifdef SDRAM_DEBUG
        serial_puts ("c_RP: ");
        write_hex (trp_clocks);
        serial_puts ("\nc_RCD: ");
index e63625bf93130663221c712e23168e82774219ae..9f259c220bfd218dd13e0078474b972e5fd2a6a2 100644 (file)
@@ -72,9 +72,6 @@ int board_early_init_f(void)
 
 int board_init(void)
 {
-       /* arch number of VCMA9-Board */
-       gd->bd->bi_arch_number = MACH_TYPE_MPL_VCMA9;
-
        /* adress of boot parameters */
        gd->bd->bi_boot_params = 0x30000100;
 
index 86b49fb60dffa67bbcf79ad9396b833af23ac985..da9e21dddbb7bc64f38c33dcafa3c2ef256b0b5f 100644 (file)
@@ -27,6 +27,7 @@
 #include <netdev.h>
 /*#include <mc9328.h>*/
 #include <asm/arch/imx-regs.h>
+#include <asm/io.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -80,8 +81,6 @@ static u32 mc9328sid;
 
 int board_early_init_f(void)
 {
-       volatile unsigned int tmp;
-
        mc9328sid = SIDR;
 
        GPCR = 0x000003AB;      /* I/O pad driving strength     */
@@ -107,8 +106,8 @@ int board_early_init_f(void)
        GIUS (0) &= 0xFF3FFFFF;
        GPR (0) &= 0xFF3FFFFF;
 
-       tmp = *(unsigned int *) (0x1500000C);
-       tmp = *(unsigned int *) (0x1500000C);
+       readl(0x1500000C);
+       readl(0x1500000C);
 
        SetAsynchMode ();
 
index 7331efa95649b39d8412dbe20201e222252b2fd6..61a882e00b20c2b37ff3e8a302abd8015b2095ed 100644 (file)
@@ -57,7 +57,7 @@ flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];  /* info for FLASH chips
 
 /* Get Status register                 */
 u32 SF_SR(void) {
-       u32 tmp,tmp1;
+       u32 tmp;
 
        reg_SFCTL       = CMD_PROGRAM;
        tmp             = __REG(CONFIG_SYS_FLASH_BASE);
@@ -65,7 +65,7 @@ u32 SF_SR(void) {
        reg_SFCTL       = CMD_NORMAL;
 
        reg_SFCTL       = CMD_LCR;                      /* Activate LCR Mode            */
-       tmp1            = __REG(CONFIG_SYS_FLASH_BASE + LCR_SR_CLEAR);
+       __REG(CONFIG_SYS_FLASH_BASE + LCR_SR_CLEAR);
 
        return tmp;
 }
@@ -93,10 +93,10 @@ u8 SF_Ready(void) {
 /* Issue the precharge all command             */
 void SF_PrechargeAll(void) {
 
-       u32 tmp;
-
-       reg_SFCTL       = CMD_PREC;                     /* Set Precharge Command        */
-       tmp             = __REG(CONFIG_SYS_FLASH_BASE + SYNCFLASH_A10); /* Issue Precharge All Command */
+       /* Set Precharge Command        */
+       reg_SFCTL       = CMD_PREC;
+       /* Issue Precharge All Command */
+       __REG(CONFIG_SYS_FLASH_BASE + SYNCFLASH_A10);
 }
 
 /* set SyncFlash to normal mode                        */
@@ -109,13 +109,12 @@ void SF_Normal(void) {
 
 /* Erase SyncFlash                             */
 void SF_Erase(u32 RowAddress) {
-       u32 tmp;
 
        reg_SFCTL       = CMD_NORMAL;
-       tmp             = __REG(RowAddress);
+       __REG(RowAddress);
 
        reg_SFCTL       = CMD_PREC;
-       tmp             = __REG(RowAddress);
+       __REG(RowAddress);
 
        reg_SFCTL       = CMD_LCR;                      /* Set LCR mode         */
        __REG(RowAddress + LCR_ERASE_CONFIRM)   = 0;    /* Issue Erase Setup Command    */
@@ -152,7 +151,6 @@ void SF_NvmodeWrite(void) {
 
 ulong flash_init(void) {
        int i, j;
-       u32 tmp;
 
 /* Turn on CSD1 for negating RESETSF of SyncFLash */
 
@@ -160,7 +158,7 @@ ulong flash_init(void) {
        udelay(200);
 
        reg_SFCTL       = CMD_LMR;              /* Set Load Mode Register Command       */
-       tmp             = __REG(MODE_REG_VAL);  /* Issue Load Mode Register Command     */
+       __REG(MODE_REG_VAL);    /* Issue Load Mode Register Command     */
 
        SF_Normal();
 
index 5588fe732f2c04be019612676c3b1138ef37bc9f..2f1ad200808a1bd440602ed5b2c3dd72fbc47a68 100644 (file)
@@ -23,6 +23,7 @@
 #include <command.h>
 #include <serial.h>
 #include <asm/arch/pxa-regs.h>
+#include <asm/arch/pxa.h>
 #include <asm/io.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -56,10 +57,9 @@ struct serial_device *default_serial_console(void)
        return &serial_ffuart_device;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
index 25186aefa8c1360014e5c3bf90b2e7fee2a85a0f..4adf152a4edc02e78863ca44d35641249aff1666 100644 (file)
@@ -23,6 +23,7 @@
 #include <command.h>
 #include <serial.h>
 #include <asm/io.h>
+#include <asm/arch/pxa.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -55,10 +56,9 @@ struct serial_device *default_serial_console(void)
        return &serial_ffuart_device;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
diff --git a/board/pleb2/flash.c b/board/pleb2/flash.c
deleted file mode 100644 (file)
index 2406c5f..0000000
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- * (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 <mpc8xx.h>
-/* environment.h defines the various CONFIG_ENV_... values in terms
- * of whichever ones are given in the configuration file.
- */
-#include <environment.h>
-
-flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];   /* info for FLASH chips        */
-
-/* NOTE - CONFIG_FLASH_16BIT means the CPU interface is 16-bit, it
- *        has nothing to do with the flash chip being 8-bit or 16-bit.
- */
-#ifdef CONFIG_FLASH_16BIT
-typedef unsigned short FLASH_PORT_WIDTH;
-typedef volatile unsigned short FLASH_PORT_WIDTHV;
-
-#define        FLASH_ID_MASK   0xFFFF
-#else
-typedef unsigned long FLASH_PORT_WIDTH;
-typedef volatile unsigned long FLASH_PORT_WIDTHV;
-
-#define        FLASH_ID_MASK   0xFFFFFFFF
-#endif
-
-#define FPW    FLASH_PORT_WIDTH
-#define FPWV   FLASH_PORT_WIDTHV
-
-#define ORMASK(size) ((-size) & OR_AM_MSK)
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-static ulong flash_get_size (FPWV * addr, flash_info_t * info);
-static void flash_reset (flash_info_t * info);
-static int write_word_intel (flash_info_t * info, FPWV * dest, FPW data);
-static int write_word_amd (flash_info_t * info, FPWV * dest, FPW data);
-static void flash_get_offsets (ulong base, flash_info_t * info);
-
-#ifdef CONFIG_SYS_FLASH_PROTECTION
-static void flash_sync_real_protect (flash_info_t * info);
-#endif
-
-/*-----------------------------------------------------------------------
- * flash_init()
- *
- * sets up flash_info and returns size of FLASH (bytes)
- */
-unsigned long flash_init (void)
-{
-       unsigned long size_b;
-       int i;
-
-       /* Init: no FLASHes known */
-       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; ++i) {
-               flash_info[i].flash_id = FLASH_UNKNOWN;
-       }
-
-       size_b = flash_get_size ((FPW *) CONFIG_SYS_FLASH_BASE, &flash_info[0]);
-
-       flash_info[0].size = size_b;
-
-       if (flash_info[0].flash_id == FLASH_UNKNOWN) {
-               printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx\n",
-                       size_b);
-       }
-
-       /* Do this again (was done already in flast_get_size), just
-        * in case we move it when remap the FLASH.
-        */
-       flash_get_offsets (CONFIG_SYS_FLASH_BASE, &flash_info[0]);
-
-#ifdef CONFIG_SYS_FLASH_PROTECTION
-       /* read the hardware protection status (if any) into the
-        * protection array in flash_info.
-        */
-       flash_sync_real_protect (&flash_info[0]);
-#endif
-
-#if CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH_BASE
-       /* monitor protection ON by default */
-       flash_protect (FLAG_PROTECT_SET,
-                      CONFIG_SYS_MONITOR_BASE,
-                      CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1,
-                      &flash_info[0]);
-#endif
-
-#ifdef CONFIG_ENV_ADDR
-       flash_protect (FLAG_PROTECT_SET,
-                      CONFIG_ENV_ADDR,
-                      CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE - 1, &flash_info[0]);
-#endif
-
-#ifdef CONFIG_ENV_ADDR_REDUND
-       flash_protect (FLAG_PROTECT_SET,
-                      CONFIG_ENV_ADDR_REDUND,
-                      CONFIG_ENV_ADDR_REDUND + CONFIG_ENV_SECT_SIZE - 1,
-                      &flash_info[0]);
-#endif
-
-       return (size_b);
-}
-
-/*-----------------------------------------------------------------------
- */
-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 void flash_get_offsets (ulong base, flash_info_t * info)
-{
-       int i;
-
-       /* set up sector start address table */
-       if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL
-           && (info->flash_id & FLASH_BTYPE)) {
-               int bootsect_size;      /* number of bytes/boot sector  */
-               int sect_size;  /* number of bytes/regular sector */
-
-               bootsect_size = 0x00002000 * (sizeof (FPW) / 2);
-               sect_size = 0x00010000 * (sizeof (FPW) / 2);
-
-               /* set sector offsets for bottom boot block type        */
-               for (i = 0; i < 8; ++i) {
-                       info->start[i] = base + (i * bootsect_size);
-               }
-               for (i = 8; i < info->sector_count; i++) {
-                       info->start[i] = base + ((i - 7) * sect_size);
-               }
-       } else if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_AMD
-                  && (info->flash_id & FLASH_TYPEMASK) == FLASH_AM640U) {
-
-               int sect_size;  /* number of bytes/sector */
-
-               sect_size = 0x00010000 * (sizeof (FPW) / 2);
-
-               /* set up sector start address table (uniform sector type) */
-               for (i = 0; i < info->sector_count; i++)
-                       info->start[i] = base + (i * sect_size);
-       } else if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_AMD
-                  && (info->flash_id & FLASH_TYPEMASK) == FLASH_AM800T) {
-
-               int sect_size;  /* number of bytes/sector */
-
-               sect_size = 0x00010000 * (sizeof (FPW) / 2);
-
-               /* set up sector start address table (top boot sector type) */
-               for (i = 0; i < info->sector_count - 3; i++)
-                       info->start[i] = base + (i * sect_size);
-               i = info->sector_count - 1;
-               info->start[i--] =
-                       base + (info->size - 0x00004000) * (sizeof (FPW) / 2);
-               info->start[i--] =
-                       base + (info->size - 0x00006000) * (sizeof (FPW) / 2);
-               info->start[i--] =
-                       base + (info->size - 0x00008000) * (sizeof (FPW) / 2);
-       }
-}
-
-/*-----------------------------------------------------------------------
- */
-
-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_AMD:
-               printf ("AMD ");
-               break;
-       case FLASH_MAN_BM:
-               printf ("BRIGHT MICRO ");
-               break;
-       case FLASH_MAN_FUJ:
-               printf ("FUJITSU ");
-               break;
-       case FLASH_MAN_SST:
-               printf ("SST ");
-               break;
-       case FLASH_MAN_STM:
-               printf ("STM ");
-               break;
-       case FLASH_MAN_INTEL:
-               printf ("INTEL ");
-               break;
-       default:
-               printf ("Unknown Vendor ");
-               break;
-       }
-
-       /* 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_AM800T:
-               fmt = "29LV800B%s (8 Mbit, %s)\n";
-               break;
-       case FLASH_AM640U:
-               fmt = "29LV641D (64 Mbit, uniform sectors)\n";
-               break;
-       case FLASH_28F800C3B:
-       case FLASH_28F800C3T:
-               fmt = "28F800C3%s (8 Mbit, %s)\n";
-               break;
-       case FLASH_INTEL800B:
-       case FLASH_INTEL800T:
-               fmt = "28F800B3%s (8 Mbit, %s)\n";
-               break;
-       case FLASH_28F160C3B:
-       case FLASH_28F160C3T:
-               fmt = "28F160C3%s (16 Mbit, %s)\n";
-               break;
-       case FLASH_INTEL160B:
-       case FLASH_INTEL160T:
-               fmt = "28F160B3%s (16 Mbit, %s)\n";
-               break;
-       case FLASH_28F320C3B:
-       case FLASH_28F320C3T:
-               fmt = "28F320C3%s (32 Mbit, %s)\n";
-               break;
-       case FLASH_INTEL320B:
-       case FLASH_INTEL320T:
-               fmt = "28F320B3%s (32 Mbit, %s)\n";
-               break;
-       case FLASH_28F640C3B:
-       case FLASH_28F640C3T:
-               fmt = "28F640C3%s (64 Mbit, %s)\n";
-               break;
-       case FLASH_INTEL640B:
-       case FLASH_INTEL640T:
-               fmt = "28F640B3%s (64 Mbit, %s)\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)
-{
-       /* Write auto select command: read Manufacturer ID */
-
-       /* Write auto select command sequence and test FLASH answer */
-       addr[0x0555] = (FPW) 0x00AA00AA;        /* for AMD, Intel ignores this */
-       addr[0x02AA] = (FPW) 0x00550055;        /* for AMD, Intel ignores this */
-       addr[0x0555] = (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.
-        */
-       switch (addr[0] & 0xff) {
-
-       case (uchar) AMD_MANUFACT:
-               info->flash_id = FLASH_MAN_AMD;
-               break;
-
-       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;
-       }
-
-       /* Check 16 bits or 32 bits of ID so work on 32 or 16 bit bus. */
-       if (info->flash_id != FLASH_UNKNOWN)
-               switch (addr[1]) {
-
-               case (FPW) AMD_ID_LV800T:
-                       info->flash_id += FLASH_AM800T;
-                       info->sector_count = 19;
-                       info->size = 0x00100000 * (sizeof (FPW) / 2);
-                       break;  /* => 1 or 2 MiB        */
-
-               case (FPW) AMD_ID_LV640U:       /* 29LV640 and 29LV641 have same ID */
-                       info->flash_id += FLASH_AM640U;
-                       info->sector_count = 128;
-                       info->size = 0x00800000 * (sizeof (FPW) / 2);
-                       break;  /* => 8 or 16 MB        */
-
-               case (FPW) INTEL_ID_28F800C3B:
-                       info->flash_id += FLASH_28F800C3B;
-                       info->sector_count = 23;
-                       info->size = 0x00100000 * (sizeof (FPW) / 2);
-                       break;  /* => 1 or 2 MB         */
-
-               case (FPW) INTEL_ID_28F800B3B:
-                       info->flash_id += FLASH_INTEL800B;
-                       info->sector_count = 23;
-                       info->size = 0x00100000 * (sizeof (FPW) / 2);
-                       break;  /* => 1 or 2 MB         */
-
-               case (FPW) INTEL_ID_28F160C3B:
-                       info->flash_id += FLASH_28F160C3B;
-                       info->sector_count = 39;
-                       info->size = 0x00200000 * (sizeof (FPW) / 2);
-                       break;  /* => 2 or 4 MB         */
-
-               case (FPW) INTEL_ID_28F160B3B:
-                       info->flash_id += FLASH_INTEL160B;
-                       info->sector_count = 39;
-                       info->size = 0x00200000 * (sizeof (FPW) / 2);
-                       break;  /* => 2 or 4 MB         */
-
-               case (FPW) INTEL_ID_28F320C3B:
-                       info->flash_id += FLASH_28F320C3B;
-                       info->sector_count = 71;
-                       info->size = 0x00400000 * (sizeof (FPW) / 2);
-                       break;  /* => 4 or 8 MB         */
-
-               case (FPW) INTEL_ID_28F320B3B:
-                       info->flash_id += FLASH_INTEL320B;
-                       info->sector_count = 71;
-                       info->size = 0x00400000 * (sizeof (FPW) / 2);
-                       break;  /* => 4 or 8 MB         */
-
-               case (FPW) INTEL_ID_28F640C3B:
-                       info->flash_id += FLASH_28F640C3B;
-                       info->sector_count = 135;
-                       info->size = 0x00800000 * (sizeof (FPW) / 2);
-                       break;  /* => 8 or 16 MB        */
-
-               case (FPW) INTEL_ID_28F640B3B:
-                       info->flash_id += FLASH_INTEL640B;
-                       info->sector_count = 135;
-                       info->size = 0x00800000 * (sizeof (FPW) / 2);
-                       break;  /* => 8 or 16 MB        */
-
-               default:
-                       info->flash_id = FLASH_UNKNOWN;
-                       info->sector_count = 0;
-                       info->size = 0;
-                       return (0);     /* => no or unknown flash */
-               }
-
-       flash_get_offsets ((ulong) addr, info);
-
-       /* Put FLASH back in read mode */
-       flash_reset (info);
-
-       return (info->size);
-}
-
-#ifdef CONFIG_SYS_FLASH_PROTECTION
-/*-----------------------------------------------------------------------
- */
-
-static void flash_sync_real_protect (flash_info_t * info)
-{
-       FPWV *addr = (FPWV *) (info->start[0]);
-       FPWV *sect;
-       int i;
-
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_28F800C3B:
-       case FLASH_28F800C3T:
-       case FLASH_28F160C3B:
-       case FLASH_28F160C3T:
-       case FLASH_28F320C3B:
-       case FLASH_28F320C3T:
-       case FLASH_28F640C3B:
-       case FLASH_28F640C3T:
-               /* check for protected sectors */
-               *addr = (FPW) 0x00900090;
-               for (i = 0; i < info->sector_count; i++) {
-                       /* read sector protection at sector address, (A7 .. A0) = 0x02.
-                        * D0 = 1 for each device if protected.
-                        * If at least one device is protected the sector is marked
-                        * protected, but mixed protected and  unprotected devices
-                        * within a sector should never happen.
-                        */
-                       sect = (FPWV *) (info->start[i]);
-                       info->protect[i] =
-                               (sect[2] & (FPW) (0x00010001)) ? 1 : 0;
-               }
-
-               /* Put FLASH back in read mode */
-               flash_reset (info);
-               break;
-
-       case FLASH_AM640U:
-       case FLASH_AM800T:
-       default:
-               /* no hardware protect that we support */
-               break;
-       }
-}
-#endif
-
-/*-----------------------------------------------------------------------
- */
-
-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_INTEL800B:
-       case FLASH_INTEL160B:
-       case FLASH_INTEL320B:
-       case FLASH_INTEL640B:
-       case FLASH_28F800C3B:
-       case FLASH_28F160C3B:
-       case FLASH_28F320C3B:
-       case FLASH_28F640C3B:
-       case FLASH_AM640U:
-       case FLASH_AM800T:
-               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");
-       }
-
-       /* 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 ();
-
-               start = get_timer(0);
-               last = 0;
-
-               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[0x0555] = (FPW) 0x00AA00AA;        /* unlock */
-                       base[0x02AA] = (FPW) 0x00550055;        /* unlock */
-                       base[0x0555] = (FPW) 0x00800080;        /* erase mode */
-                       base[0x0555] = (FPW) 0x00AA00AA;        /* unlock */
-                       base[0x02AA] = (FPW) 0x00550055;        /* unlock */
-                       *addr = (FPW) 0x00300030;       /* erase sector */
-               }
-
-               /* re-enable interrupts if necessary */
-               if (flag)
-                       enable_interrupts ();
-
-               /* 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)) > CONFIG_SYS_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 ((now - last) > 1 * CONFIG_SYS_HZ) { /* every second */
-                               putc ('.');
-                               last = now;
-                       }
-               }
-
-               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
-                */
-#ifdef CONFIG_SYS_LITTLE_ENDIAN
-               for (i = 0; i < sizeof (data); i++) {
-                       data >>= 8;
-                       if (i < bytes || i - bytes >= left)
-                               data += (*((uchar *) addr + i)) << 24;
-                       else
-                               data += (*src++) << 24;
-               }
-#else
-               for (i = 0; i < sizeof (data); i++) {
-                       data <<= 8;
-                       if (i < bytes || i - bytes >= left)
-                               data += *((uchar *) addr + i);
-                       else
-                               data += *src++;
-               }
-#endif
-
-               /* 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;
-               case FLASH_MAN_INTEL:
-                       res = write_word_intel (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)
-{
-       int flag;
-       int res = 0;            /* result, assume success       */
-       FPWV *base;             /* first address in flash bank  */
-       ulong start;
-
-       /* 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[0x0555] = (FPW) 0x00AA00AA;        /* unlock */
-       base[0x02AA] = (FPW) 0x00550055;        /* unlock */
-       base[0x0555] = (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) > CONFIG_SYS_FLASH_WRITE_TOUT) {
-                       *dest = (FPW) 0x00F000F0;       /* reset bank */
-                       res = 1;
-               }
-       }
-
-       return (res);
-}
-
-/*-----------------------------------------------------------------------
- * Write a word to Flash for Intel 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_intel (flash_info_t * info, FPWV * dest, FPW data)
-{
-       int flag;
-       int res = 0;            /* result, assume success       */
-       ulong start;
-
-       /* Check if Flash is (sufficiently) erased */
-       if ((*dest & data) != data) {
-               return (2);
-       }
-
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
-
-       *dest = (FPW) 0x00500050;       /* clear status register        */
-       *dest = (FPW) 0x00FF00FF;       /* make sure in read mode       */
-       *dest = (FPW) 0x00400040;       /* program setup                */
-
-       *dest = data;           /* start programming the data   */
-
-       /* re-enable interrupts if necessary */
-       if (flag)
-               enable_interrupts ();
-
-       start = get_timer(0);
-
-       while (res == 0 && (*dest & (FPW) 0x00800080) != (FPW) 0x00800080) {
-               if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
-                       *dest = (FPW) 0x00B000B0;       /* Suspend program      */
-                       res = 1;
-               }
-       }
-
-       if (res == 0 && (*dest & (FPW) 0x00100010))
-               res = 1;        /* write failed, time out error is close enough */
-
-       *dest = (FPW) 0x00500050;       /* clear status register        */
-       *dest = (FPW) 0x00FF00FF;       /* make sure in read mode       */
-
-       return (res);
-}
-
-#ifdef CONFIG_SYS_FLASH_PROTECTION
-/*-----------------------------------------------------------------------
- */
-int flash_real_protect (flash_info_t * info, long sector, int prot)
-{
-       int rcode = 0;          /* assume success */
-       FPWV *addr;             /* address of sector */
-       FPW value;
-
-       addr = (FPWV *) (info->start[sector]);
-
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_28F800C3B:
-       case FLASH_28F800C3T:
-       case FLASH_28F160C3B:
-       case FLASH_28F160C3T:
-       case FLASH_28F320C3B:
-       case FLASH_28F320C3T:
-       case FLASH_28F640C3B:
-       case FLASH_28F640C3T:
-               flash_reset (info);     /* make sure in read mode */
-               *addr = (FPW) 0x00600060L;      /* lock command setup */
-               if (prot)
-                       *addr = (FPW) 0x00010001L;      /* lock sector */
-               else
-                       *addr = (FPW) 0x00D000D0L;      /* unlock sector */
-               flash_reset (info);     /* reset to read mode */
-
-               /* now see if it really is locked/unlocked as requested */
-               *addr = (FPW) 0x00900090;
-               /* read sector protection at sector address, (A7 .. A0) = 0x02.
-                * D0 = 1 for each device if protected.
-                * If at least one device is protected the sector is marked
-                * protected, but return failure. Mixed protected and
-                * unprotected devices within a sector should never happen.
-                */
-               value = addr[2] & (FPW) 0x00010001;
-               if (value == 0)
-                       info->protect[sector] = 0;
-               else if (value == (FPW) 0x00010001)
-                       info->protect[sector] = 1;
-               else {
-                       /* error, mixed protected and unprotected */
-                       rcode = 1;
-                       info->protect[sector] = 1;
-               }
-               if (info->protect[sector] != prot)
-                       rcode = 1;      /* failed to protect/unprotect as requested */
-
-               /* reload all protection bits from hardware for now */
-               flash_sync_real_protect (info);
-               break;
-
-       case FLASH_AM640U:
-       case FLASH_AM800T:
-       default:
-               /* no hardware protect that we support */
-               info->protect[sector] = prot;
-               break;
-       }
-
-       return rcode;
-}
-#endif
diff --git a/board/pleb2/pleb2.c b/board/pleb2/pleb2.c
deleted file mode 100644 (file)
index 5a16cc7..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * (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>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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/mach-types.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/*
- * Miscelaneous platform dependent initialisations
- */
-
-int board_init (void)
-{
-       /* We have RAM, disable cache */
-       dcache_disable();
-       icache_disable();
-
-       /* arch number of Lubbock-Board */
-       gd->bd->bi_arch_number = MACH_TYPE_PLEB2;
-
-       /* adress of boot parameters */
-       gd->bd->bi_boot_params = 0xa0000100;
-
-       return 0;
-}
-
-int board_late_init(void)
-{
-       setenv("stdout", "serial");
-       setenv("stderr", "serial");
-       return 0;
-}
-
-extern void pxa_dram_init(void);
-int dram_init(void)
-{
-       pxa_dram_init();
-       gd->ram_size = PHYS_SDRAM_1_SIZE;
-       return 0;
-}
-
-void dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-}
index e7686ad27b52b3b6870d72059537c36b30ffcb9b..1cce798ee6264764c8c40363c189a961357fb457 100644 (file)
@@ -85,9 +85,6 @@ static unsigned long regval;
 /* PROGRAM_SEL_DPR     = LOW */
 int fpga_pre_fn(int cookie)
 {
-       unsigned long   reg;
-
-       reg = in32(GPIO0_IR);
        /* Enable the FPGA Chain */
        SET_GPIO_REG_1(GPIO0_TCR, CONFIG_SYS_GPIO_PROG_EN);
        SET_GPIO_REG_0(GPIO0_ODR, CONFIG_SYS_GPIO_PROG_EN);
index b18c96b297746fc0d053861b09bbe20fef1c8dad..d35cfed3ce14dc9851fe99c35dcec3df766b2a6a 100644 (file)
@@ -122,12 +122,10 @@ static int alpr_nand_verify_buf(struct mtd_info *mtd, const u_char *buf, int len
 
 static int alpr_nand_dev_ready(struct mtd_info *mtd)
 {
-       volatile u_char val;
-
        /*
         * Blocking read to wait for NAND to be ready
         */
-       val = readb(&(alpr_ndfc->addr_wait));
+       (void)readb(&(alpr_ndfc->addr_wait));
 
        /*
         * Return always true
index 804d09c22bd72ad18268763b5c6ba21021323c68..877e8d9b2a8d5a467dccb6120f54f43d849ab551 100644 (file)
@@ -34,6 +34,7 @@
 #include <netdev.h>
 #include <command.h>
 #include <asm/io.h>
+#include <asm/arch/pxa.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -83,10 +84,9 @@ int board_late_init(void)
        return 0;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
similarity index 74%
rename from board/xm250/Makefile
rename to board/renesas/ecovec/Makefile
index 6a0cca0f9cfea2dd1aa3d93a6a831b9f75064c43..8fdc0c9322b35ceda77ce689b5e60393fe2ba06f 100644 (file)
@@ -1,9 +1,6 @@
 #
-# (C) Copyright 2000-2006
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-#
-# See file CREDITS for list of people who contributed to this
-# project.
+# Copyright (C) 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+# Copyright (C) 2011 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
-#
 
-include $(TOPDIR)/config.mk
 
-LIB    = $(obj)lib$(BOARD).o
+include $(TOPDIR)/config.mk
 
-COBJS  := xm250.o flash.o
+LIB = $(obj)lib$(BOARD).o
 
-SRCS   := $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+COBJS   := ecovec.o
+SOBJS   := lowlevel_init.o
 
-$(LIB):        $(obj).depend $(OBJS)
-       $(call cmd_link_o_target, $(OBJS))
+$(LIB): $(obj).depend $(COBJS) $(SOBJS)
+               $(call cmd_link_o_target, $(COBJS) $(SOBJS))
 
 #########################################################################
 
diff --git a/board/renesas/ecovec/ecovec.c b/board/renesas/ecovec/ecovec.c
new file mode 100644 (file)
index 0000000..275b0ba
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2009, 2011 Renesas Solutions Corp.
+ * Copyright (C) 2009 Kuninori Morimoto <morimoto.kuninori@renesas.com>
+ * Copyright (C) 2011 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.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 <command.h>
+#include <asm/io.h>
+#include <asm/processor.h>
+#include <i2c.h>
+#include <netdev.h>
+
+/* USB power management register */
+#define UPONCR0 0xA40501D4
+
+int checkboard(void)
+{
+       puts("BOARD: ecovec\n");
+       return 0;
+}
+
+int dram_init(void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
+       gd->bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
+       printf("DRAM: %dMB\n", CONFIG_SYS_SDRAM_SIZE / (1024 * 1024));
+       return 0;
+}
+
+static void debug_led(u8 led)
+{
+       /* PDGR[0-4] is debug LED */
+       outb((inb(PGDR) & ~0x0F) | (led & 0x0F), PGDR);
+}
+
+int board_late_init(void)
+{
+       u8 mac[6];
+       char env_mac[17];
+       int i;
+
+       udelay(1000);
+
+       /* SH-Eth (PLCR, PNCR, PXCR, PSELx )*/
+       outw(inw(PLCR) & ~0xFFF0, PLCR);
+       outw(inw(PNCR) & ~0x000F, PNCR);
+       outw(inw(PXCR) & ~0x0FC0, PXCR);
+       outw((inw(PSELB) & ~0x030F) | 0x020A, PSELB);
+       outw((inw(PSELC) & ~0x0307) | 0x0207, PSELC);
+       outw((inw(PSELE) & ~0x00c0) | 0x0080, PSELE);
+
+       debug_led(1 << 3);
+
+       outl(inl(MSTPCR2) & ~0x10000000, MSTPCR2);
+
+       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+       i2c_set_bus_num(CONFIG_SYS_I2C_MODULE); /* Use I2C 1 */
+
+       /* Read MAC address */
+       i2c_read(0x50, 0x10, 0, mac, 6);
+
+       /* Set MAC address */
+       sprintf(env_mac, "%02X:%02X:%02X:%02X:%02X:%02X",
+               mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+       setenv("ethaddr", env_mac);
+
+       debug_led(0x0F);
+
+       return 0;
+}
+
+int board_init(void)
+{
+
+       /* LED (PTG) */
+       outw((inw(PGCR) & ~0xFF) | 0x66, PGCR);
+       outw((inw(HIZCRA) & ~0x02), HIZCRA);
+
+       debug_led(1 << 0);
+
+       /* SCIF0 (PTF, PTM) */
+       outw(inw(PFCR) & ~0x30, PFCR);
+       outw(inw(PMCR) & ~0x0C, PMCR);
+       outw((inw(PSELA) & ~0x40) | 0x40, PSELA);
+
+       debug_led(1 << 1);
+
+       /* RMII (PTA) */
+       outw((inw(PACR) & ~0x0C) | 0x04, PACR);
+       outb((inb(PADR) & ~0x02) | 0x02, PADR);
+
+       debug_led(1 << 2);
+
+       /* USB host */
+       outw((inw(PBCR) & ~0x300) | 0x100, PBCR);
+       outb((inb(PBDR) & ~0x10) | 0x10, PBDR);
+       outl(inl(MSTPCR2) & 0x100000, MSTPCR2);
+       outw(0x0600, UPONCR0);
+
+       debug_led(1 << 3);
+
+       /* debug switch */
+       outw((inw(PVCR) & ~0x03) | 0x02 , PVCR);
+
+       return 0;
+}
diff --git a/board/renesas/ecovec/lowlevel_init.S b/board/renesas/ecovec/lowlevel_init.S
new file mode 100644 (file)
index 0000000..9fc63e0
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2011 Renesas Solutions Corp.
+ * Copyright (C) 2011 Nobuhiro Iwamatsu <nobuhiro.Iwamatsu.yj@renesas.com>
+ *
+ * board/renesas/ecovec/lowlevel_init.S
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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/processor.h>
+#include <asm/macro.h>
+#include <configs/ecovec.h>
+
+       .global lowlevel_init
+
+       .text
+       .align  2
+
+lowlevel_init:
+
+       /* jump to 0xA0020000 if bit 1 of PVDR_A */
+       mov.l   PVDR_A, r1
+       mov.l   PVDR_D, r2
+       mov.b   @r1, r0
+       tst     r0, r2
+       bt      1f
+       mov.l   JUMP_A, r1
+       jmp     @r1
+       nop
+
+1:
+       /* Disable watchdog */
+       write16 RWTCSR_A, RWTCSR_D
+
+       /* MMU Disable */
+       write32 MMUCR_A, MMUCR_D
+
+       /* Setup clocks */
+       write32 PLLCR_A, PLLCR_D
+       write32 FRQCRA_A, FRQCRA_D
+       write32 FRQCRB_A, FRQCRB_D
+
+       wait_timer TIMER_D
+
+       write32 MMSELR_A, MMSELR_D
+
+       /* Srtup BSC */
+       write32 CMNCR_A, CMNCR_D
+       write32 CS0BCR_A, CS0BCR_D
+       write32 CS0WCR_A, CS0WCR_D
+
+       wait_timer TIMER_D
+
+       /* Setup SDRAM */
+       write32 DBPDCNT0_A,     DBPDCNT0_D0
+       write32 DBCONF_A,       DBCONF_D
+       write32 DBTR0_A,        DBTR0_D
+       write32 DBTR1_A,        DBTR1_D
+       write32 DBTR2_A,        DBTR2_D
+       write32 DBTR3_A,        DBTR3_D
+       write32 DBKIND_A,       DBKIND_D
+       write32 DBCKECNT_A,     DBCKECNT_D
+
+       wait_timer TIMER_D
+
+       write32 DBCMDCNT_A,     DBCMDCNT_D0
+       write32 DBMRCNT_A, DBMRCNT_D0
+       write32 DBMRCNT_A, DBMRCNT_D1
+       write32 DBMRCNT_A, DBMRCNT_D2
+       write32 DBMRCNT_A, DBMRCNT_D3
+       write32 DBCMDCNT_A, DBCMDCNT_D0
+       write32 DBCMDCNT_A, DBCMDCNT_D1
+       write32 DBCMDCNT_A, DBCMDCNT_D1
+       write32 DBMRCNT_A, DBMRCNT_D4
+       write32 DBMRCNT_A, DBMRCNT_D5
+       write32 DBMRCNT_A, DBMRCNT_D6
+
+       wait_timer TIMER_D
+
+       write32 DBEN_A, DBEN_D
+       write32 DBRFPDN1_A, DBRFPDN1_D
+       write32 DBRFPDN2_A, DBRFPDN2_D
+       write32 DBCMDCNT_A, DBCMDCNT_D0
+
+
+       /* Dummy read */
+       mov.l DUMMY_A ,r1
+       synco
+       mov.l @r1, r0
+       synco
+
+       mov.l SDRAM_A ,r1
+       synco
+       mov.l @r1, r0
+       synco
+       wait_timer TIMER_D
+
+       add #4, r1
+       synco
+       mov.l @r1, r0
+       synco
+       wait_timer TIMER_D
+
+       add #4, r1
+       synco
+       mov.l @r1, r0
+       synco
+       wait_timer TIMER_D
+
+       add #4, r1
+       synco
+       mov.l @r1, r0
+       synco
+       wait_timer TIMER_D
+
+       write32 DBCMDCNT_A, DBCMDCNT_D0
+       write32 DBCMDCNT_A, DBCMDCNT_D1
+       write32 DBPDCNT0_A, DBPDCNT0_D1
+       write32 DBRFPDN0_A, DBRFPDN0_D
+
+       wait_timer TIMER_D
+
+       write32 CCR_A, CCR_D
+
+       stc     sr, r0
+       mov.l   SR_MASK_D, r1
+       and     r1, r0
+       ldc     r0, sr
+
+       rts
+
+       .align  2
+
+PVDR_A:                .long   PVDR
+PVDR_D:                .long   0x00000001
+JUMP_A:                .long   CONFIG_ECOVEC_ROMIMAGE_ADDR
+TIMER_D:       .long   64
+RWTCSR_A:      .long   RWTCSR
+RWTCSR_D:      .long   0x0000A507
+MMUCR_A:       .long   MMUCR
+MMUCR_D:       .long   0x00000004
+PLLCR_A:       .long   PLLCR
+PLLCR_D:       .long   0x00004000
+FRQCRA_A:      .long   FRQCRA
+FRQCRA_D:      .long   0x8E003508
+FRQCRB_A:      .long   FRQCRB
+FRQCRB_D:      .long   0x0
+MMSELR_A:      .long   MMSELR
+MMSELR_D:      .long   0xA5A50000
+CMNCR_A:       .long   CMNCR
+CMNCR_D:       .long   0x00000013
+CS0BCR_A:      .long   CS0BCR
+CS0BCR_D:      .long   0x11110400
+CS0WCR_A:      .long   CS0WCR
+CS0WCR_D:      .long   0x00000440
+DBPDCNT0_A:    .long   DBPDCNT0
+DBPDCNT0_D0: .long     0x00000181
+DBPDCNT0_D1: .long     0x00000080
+DBCONF_A:      .long   DBCONF
+DBCONF_D:      .long   0x015B0002
+DBTR0_A:       .long   DBTR0
+DBTR0_D:       .long   0x03061502
+DBTR1_A:       .long   DBTR1
+DBTR1_D:       .long   0x02020102
+DBTR2_A:       .long   DBTR2
+DBTR2_D:       .long   0x01090305
+DBTR3_A:       .long   DBTR3
+DBTR3_D:       .long   0x00000002
+DBKIND_A:      .long   DBKIND
+DBKIND_D:      .long   0x00000005
+DBCKECNT_A:    .long   DBCKECNT
+DBCKECNT_D:    .long   0x00000001
+DBCMDCNT_A:    .long   DBCMDCNT
+DBCMDCNT_D0:.long      0x2
+DBCMDCNT_D1:.long      0x4
+DBMRCNT_A:     .long   DBMRCNT
+DBMRCNT_D0:    .long   0x00020000
+DBMRCNT_D1:    .long   0x00030000
+DBMRCNT_D2:    .long   0x00010040
+DBMRCNT_D3:    .long   0x00000532
+DBMRCNT_D4:    .long   0x00000432
+DBMRCNT_D5:    .long   0x000103C0
+DBMRCNT_D6:    .long   0x00010040
+DBEN_A:                .long   DBEN
+DBEN_D:                .long   0x01
+DBRFPDN0_A:    .long   DBRFPDN0
+DBRFPDN1_A:    .long   DBRFPDN1
+DBRFPDN2_A:    .long   DBRFPDN2
+DBRFPDN0_D:    .long   0x00010000
+DBRFPDN1_D:    .long   0x00000613
+DBRFPDN2_D:    .long   0x238C003A
+SDRAM_A:       .long   0xa8000000
+DUMMY_A:       .long   0x0c400000
+CCR_A:         .long   CCR
+CCR_D:         .long   0x0000090B
+SR_MASK_D:     .long   0xEFFFFF0F
index ab1aa494ab08472f7a7c7e82d680c8406fb47264..5090fd093c47b802f0eb7437463d20e4e108e07a 100644 (file)
@@ -326,12 +326,13 @@ PC_MASK:  .long   0x20000000
        /* step 26 */
        wait_DBCMD
 
+#if defined(CONFIG_SH7757LCR_DDR_ECC)
        /* enable DDR-ECC */
        write32 ECD_ECDEN_A, ECD_ECDEN_D
        write32 ECD_INTSR_A, ECD_INTSR_D
        write32 ECD_SPACER_A, ECD_SPACER_D
        write32 ECD_MCR_A, ECD_MCR_D
-
+#endif
        bra     exit_ddr
        nop
 
index 0abca0d11246b8b2a3cc479fddfec08aba358d79..a288b281cf0b8ad0609c632e186d93e02580f594 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 # Ilko Iliev <www.ronetix.at>
 #
index f65987035da63394c7f95968b7bacb4006ac0b40..1a2a81d07e8f876442b05c09350478e44e8784de 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Ilko Iliev <www.ronetix.at>
  *
index 871b94ada756431b0d106198ed07f0fef10ebfc0..c6b582d2b97d21aebfbdd64a95285fd314ab279e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Copyright (C) 2008 Ronetix Ilko Iliev (www.ronetix.at)
  * Copyright (C) 2009 Jean-Christopher PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
@@ -248,9 +248,6 @@ int board_init(void)
                1 << ATMEL_ID_PIOC,
                &pmc->pcer);
 
-       /* arch number of PM9261-Board */
-       gd->bd->bi_arch_number = MACH_TYPE_PM9261;
-
        /* adress of boot parameters */
        gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
 
index 68baec72759f95d052ef634991efcc2962f1507b..db8de825e4d9f738111b47ecf1bad81b15abab3a 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 # Ilko Iliev <www.ronetix.at>
 #
index d6eb69f04ad5b1ad6da000198e5a757076d898dd..e6883a34ac8b3478a3c212f4e82fbcd05bba32fa 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Ilko Iliev <www.ronetix.at>
  *
index cfc9847ccc6867b4e4b5dba98aa3cec6949e0a38..59cca87a9b3f982dde715b0020a80e0f151bd18b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Copyright (C) 2008 Ronetix Ilko Iliev (www.ronetix.at)
  * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
@@ -164,7 +164,6 @@ void lcd_disable(void)
 /* Initialize the PSRAM memory */
 static int pm9263_lcd_hw_psram_init(void)
 {
-       volatile uint16_t x;
        unsigned long csa;
        struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC1;
        struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX;
@@ -196,14 +195,14 @@ static int pm9263_lcd_hw_psram_init(void)
        at91_set_pio_value(PSRAM_CRE_PIN, 0);   /* set PSRAM_CRE_PIN to '0' */
 
        /* PSRAM: write BCR */
-       x = readw(PSRAM_CTRL_REG);
-       x = readw(PSRAM_CTRL_REG);
+       readw(PSRAM_CTRL_REG);
+       readw(PSRAM_CTRL_REG);
        writew(1, PSRAM_CTRL_REG);      /* 0 - RCR,1 - BCR */
        writew(0x9d4f, PSRAM_CTRL_REG); /* write the BCR */
 
        /* write RCR of the PSRAM */
-       x = readw(PSRAM_CTRL_REG);
-       x = readw(PSRAM_CTRL_REG);
+       readw(PSRAM_CTRL_REG);
+       readw(PSRAM_CTRL_REG);
        writew(0, PSRAM_CTRL_REG);      /* 0 - RCR,1 - BCR */
        /* set RCR; 0x10-async mode,0x90-page mode */
        writew(0x90, PSRAM_CTRL_REG);
@@ -222,8 +221,8 @@ static int pm9263_lcd_hw_psram_init(void)
                at91_set_pio_value(PSRAM_CRE_PIN, 1); /* set PSRAM_CRE_PIN to '1' */
 
                /* write RCR of the PSRAM */
-               x = readw(PSRAM_CTRL_REG);
-               x = readw(PSRAM_CTRL_REG);
+               readw(PSRAM_CTRL_REG);
+               readw(PSRAM_CTRL_REG);
                writew(0, PSRAM_CTRL_REG);      /* 0 - RCR,1 - BCR */
                /* set RCR;0x10-async mode,0x90-page mode */
                writew(0x90, PSRAM_CTRL_REG);
@@ -349,9 +348,6 @@ int board_init(void)
                (1 << ATMEL_ID_PIOB),
                &pmc->pcer);
 
-       /* arch number of AT91SAM9263EK-Board */
-       gd->bd->bi_arch_number = MACH_TYPE_PM9263;
-
        /* adress of boot parameters */
        gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
 
index e5869646637fde507960edc696c579e741bc48ce..bebc5b406e31fb506f937f9af2cd9dcd3a6f3455 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index f3374a44298af5fb8180c895cd36221dad1d6157..d29d0763acaaa2c374d82e53425c09ddce4733cf 100644 (file)
@@ -5,7 +5,7 @@
  * Ronetix GmbH <www.ronetix.at>
  *
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * See file CREDITS for list of people who contributed to this
@@ -139,8 +139,6 @@ int board_init(void)
                (1 << ATMEL_ID_PIOC) |
                (1 << ATMEL_ID_PIODE), &pmc->pcer);
 
-       /* arch number of AT91SAM9M10G45EK-Board */
-       gd->bd->bi_arch_number = MACH_TYPE_PM9G45;
        /* adress of boot parameters */
        gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
 
index c65cb9607068294ff52e841c7e58d122728ef6d8..818a7c3929cefaf6293b2ea40232a682ea9c65a6 100644 (file)
@@ -304,7 +304,7 @@ 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;
+       int flag, prot, sect;
        int i;
 
        if ((s_first < 0) || (s_first > s_last)) {
@@ -335,8 +335,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
                printf ("\n");
        }
 
-       l_sect = -1;
-
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
@@ -363,7 +361,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
                                addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;
                                addr2[0] = (FLASH_WORD_SIZE)0x00300030;  /* sector erase */
                        }
-                       l_sect = sect;
                        /*
                         * Wait for each sector to complete, it's more
                         * reliable.  According to AMD Spec, you must
index e5863d6cedf1f94531c81279da21c16a78f3e235..b0d3c6c76faa46baccf23cee7edf0efe2d054a96 100644 (file)
@@ -670,14 +670,11 @@ static ulong flash_get_size (ulong base, int banknum)
 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:
index e1a3ea36e95564f2375b168f6c5e4dce7392ddf0..26095a545596f96a48f775b18ebed7bad0084a31 100644 (file)
@@ -77,12 +77,10 @@ local_bus_init(void)
        volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
 
        uint clkdiv;
-       uint lbc_hz;
        sys_info_t sysinfo;
 
        get_sys_info(&sysinfo);
        clkdiv = (in_be32(&lbc->lcrr) & LCRR_CLKDIV) * 2;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
 
        out_be32(&gur->lbiuiplldcr1, 0x00078080);
        if (clkdiv == 16) {
index c5fe92e06154cd694f08683cc7921b947919a305..98bc7df4c8a934098b055bca7745002dbfd159a4 100644 (file)
@@ -348,7 +348,7 @@ phys_size_t fixed_sdram(void)
 void
 ft_board_setup(void *blob, bd_t *bd)
 {
-       int node, tmp[2];
+       int node;
 #ifdef CONFIG_PCI
        const char *path;
 #endif
@@ -356,7 +356,6 @@ ft_board_setup(void *blob, bd_t *bd)
        ft_cpu_setup(blob, bd);
 
        node = fdt_path_offset(blob, "/aliases");
-       tmp[0] = 0;
        if (node >= 0) {
 #ifdef CONFIG_PCI
                path = fdt_getprop(blob, node, "pci0", NULL);
index c99252c825d8fa3b6f19ccbb1a01cc20114956cd..a2951a4efb71d7106cdd3862e0abb1a3239201cd 100644 (file)
@@ -3,7 +3,7 @@
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # (C) Copyright 2008
-# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Stelian Pop <stelian@popies.net>
 # Lead Tech Design <www.leadtechdesign.com>
 #
 # See file CREDITS for list of people who contributed to this
index a89ee1a086bae29bd82afb96d424acea3d0deb59..c56b195ae1643330d1d355d291aa0812bad8c690 100644 (file)
@@ -128,7 +128,6 @@ int board_late_init(void)
 
 #ifdef CONFIG_FEC_MXC
        struct iomuxc_mux_ctl *muxctl;
-       struct iomuxc_pad_ctl *padctl;
        u32 gpio_mux_mode2 = MX25_PIN_MUX_MODE(2);
        u32 gpio_mux_mode5 = MX25_PIN_MUX_MODE(5);
 
@@ -144,7 +143,6 @@ int board_late_init(void)
         * FEC_RX_ERR: FEC_RX_ERR is ALT 2 mode of pin R2
         */
        muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE;
-       padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE;
 
        writel(gpio_mux_mode5, &muxctl->pad_upll_bypclk);
        writel(gpio_mux_mode2, &muxctl->pad_uart2_cts);
index cd5683d9be6895b7ef40ee232ad67a40d552ae93..436645a83f7c4f37310f6f38d4bdfcd4f0545a03 100644 (file)
@@ -75,7 +75,7 @@ void set_muxconf_regs(void)
        MUX_AM3517CRANE();
 }
 
-#ifdef CONFIG_GENERIC_MMC
+#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
 int board_mmc_init(bd_t *bis)
 {
        omap_mmc_init(0);
index 41db97272791582296d9a9266be4cc957fe969ee..71335a3fc59f5f3e966ef8114f107cf88a2e912d 100644 (file)
@@ -30,45 +30,6 @@ const omap3_sysinfo sysinfo = {
        "CraneBoard",
        "NAND",
 };
-/* AM3517 specific mux configuration */
-#define CONTROL_PADCONF_SYS_NRESWARM   0x0A08
-/* CCDC */
-#define CONTROL_PADCONF_CCDC_PCLK      0x01E4
-#define CONTROL_PADCONF_CCDC_FIELD     0x01E6
-#define CONTROL_PADCONF_CCDC_HD                0x01E8
-#define CONTROL_PADCONF_CCDC_VD                0x01EA
-#define CONTROL_PADCONF_CCDC_WEN       0x01EC
-#define CONTROL_PADCONF_CCDC_DATA0     0x01EE
-#define CONTROL_PADCONF_CCDC_DATA1     0x01F0
-#define CONTROL_PADCONF_CCDC_DATA2     0x01F2
-#define CONTROL_PADCONF_CCDC_DATA3     0x01F4
-#define CONTROL_PADCONF_CCDC_DATA4     0x01F6
-#define CONTROL_PADCONF_CCDC_DATA5     0x01F8
-#define CONTROL_PADCONF_CCDC_DATA6     0x01FA
-#define CONTROL_PADCONF_CCDC_DATA7     0x01FC
-/* RMII */
-#define CONTROL_PADCONF_RMII_MDIO_DATA 0x01FE
-#define CONTROL_PADCONF_RMII_MDIO_CLK  0x0200
-#define CONTROL_PADCONF_RMII_RXD0      0x0202
-#define CONTROL_PADCONF_RMII_RXD1      0x0204
-#define CONTROL_PADCONF_RMII_CRS_DV    0x0206
-#define CONTROL_PADCONF_RMII_RXER      0x0208
-#define CONTROL_PADCONF_RMII_TXD0      0x020A
-#define CONTROL_PADCONF_RMII_TXD1      0x020C
-#define CONTROL_PADCONF_RMII_TXEN      0x020E
-#define CONTROL_PADCONF_RMII_50MHZ_CLK 0x0210
-#define CONTROL_PADCONF_USB0_DRVBUS    0x0212
-/* CAN */
-#define CONTROL_PADCONF_HECC1_TXD      0x0214
-#define CONTROL_PADCONF_HECC1_RXD      0x0216
-#define CONTROL_PADCONF_SYS_BOOT7      0x0218
-#define CONTROL_PADCONF_SDRC_DQS0N     0x021A
-#define CONTROL_PADCONF_SDRC_DQS1N     0x021C
-#define CONTROL_PADCONF_SDRC_DQS2N     0x021E
-#define CONTROL_PADCONF_SDRC_DQS3N     0x0220
-#define CONTROL_PADCONF_STRBEN_DLY0    0x0222
-#define CONTROL_PADCONF_STRBEN_DLY1    0x0224
-#define CONTROL_PADCONF_SYS_BOOT8      0x0226
 
 /*
  * IEN  - Input Enable
diff --git a/board/ti/am3517crane/config.mk b/board/ti/am3517crane/config.mk
deleted file mode 100644 (file)
index c6a18b5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Author: Srinath R <srinath@mistralsolutions.com>
-#
-# Based on logicpd/am3517evm/config.mk
-#
-# Copyright (C) 2011 Mistral Solutions Pvt Ltd
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-# Physical Address:
-# 8000'0000 (bank0)
-# A000/0000 (bank1)
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
-
-# For use with external or internal boots.
-CONFIG_SYS_TEXT_BASE = 0x80008000
index 9482c5eac74d7d7622b95b14875f6368475fde55..6a457cbb5df31e5ca90e328a331fcfa06f10ed31 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2004-2008
+ * (C) Copyright 2004-2011
  * Texas Instruments, <www.ti.com>
  *
  * Author :
 #include <status_led.h>
 #endif
 #include <twl4030.h>
+#include <linux/mtd/nand.h>
 #include <asm/io.h>
 #include <asm/arch/mmc_host_def.h>
 #include <asm/arch/mux.h>
+#include <asm/arch/mem.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/gpio.h>
 #include <asm/mach-types.h>
@@ -135,6 +137,69 @@ int get_board_revision(void)
        return revision;
 }
 
+#ifdef CONFIG_SPL_BUILD
+/*
+ * Routine: get_board_mem_timings
+ * Description: If we use SPL then there is no x-loader nor config header
+ * so we have to setup the DDR timings ourself on both banks.
+ */
+void get_board_mem_timings(u32 *mcfg, u32 *ctrla, u32 *ctrlb, u32 *rfr_ctrl,
+               u32 *mr)
+{
+       int pop_mfr, pop_id;
+
+       /*
+        * We need to identify what PoP memory is on the board so that
+        * we know what timings to use.  If we can't identify it then
+        * we know it's an xM.  To map the ID values please see nand_ids.c
+        */
+       identify_nand_chip(&pop_mfr, &pop_id);
+
+       *mr = MICRON_V_MR_165;
+       switch (get_board_revision()) {
+       case REVISION_C4:
+               if (pop_mfr == NAND_MFR_STMICRO && pop_id == 0xba) {
+                       /* 512MB DDR */
+                       *mcfg = NUMONYX_V_MCFG_165(512 << 20);
+                       *ctrla = NUMONYX_V_ACTIMA_165;
+                       *ctrlb = NUMONYX_V_ACTIMB_165;
+                       *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
+                       break;
+               } else if (pop_mfr == NAND_MFR_MICRON && pop_id == 0xbc) {
+                       /* Beagleboard Rev C5, 256MB DDR */
+                       *mcfg = MICRON_V_MCFG_200(256 << 20);
+                       *ctrla = MICRON_V_ACTIMA_200;
+                       *ctrlb = MICRON_V_ACTIMB_200;
+                       *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz;
+                       break;
+               }
+       case REVISION_XM_A:
+       case REVISION_XM_B:
+       case REVISION_XM_C:
+               if (pop_mfr == 0) {
+                       /* 256MB DDR */
+                       *mcfg = MICRON_V_MCFG_200(256 << 20);
+                       *ctrla = MICRON_V_ACTIMA_200;
+                       *ctrlb = MICRON_V_ACTIMB_200;
+                       *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz;
+               } else {
+                       /* 512MB DDR */
+                       *mcfg = NUMONYX_V_MCFG_165(512 << 20);
+                       *ctrla = NUMONYX_V_ACTIMA_165;
+                       *ctrlb = NUMONYX_V_ACTIMB_165;
+                       *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
+               }
+               break;
+       default:
+               /* Assume 128MB and Micron/165MHz timings to be safe */
+               *mcfg = MICRON_V_MCFG_165(128 << 20);
+               *ctrla = MICRON_V_ACTIMA_165;
+               *ctrlb = MICRON_V_ACTIMB_165;
+               *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
+       }
+}
+#endif
+
 /*
  * Routine: get_expansion_id
  * Description: This function checks for expansion board by checking I2C
@@ -367,7 +432,7 @@ void set_muxconf_regs(void)
        MUX_BEAGLE();
 }
 
-#ifdef CONFIG_GENERIC_MMC
+#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
 int board_mmc_init(bd_t *bis)
 {
        omap_mmc_init(0);
@@ -476,6 +541,7 @@ int ehci_hcd_init(void)
 
 #endif /* CONFIG_USB_EHCI */
 
+#ifndef CONFIG_SPL_BUILD
 /*
  * This command returns the status of the user button on beagle xM
  * Input - none
@@ -528,3 +594,4 @@ U_BOOT_CMD(
        "Return the status of the BeagleBoard USER button",
        ""
 );
+#endif
diff --git a/board/ti/beagle/config.mk b/board/ti/beagle/config.mk
deleted file mode 100644 (file)
index cf055db..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# (C) Copyright 2006
-# Texas Instruments, <www.ti.com>
-#
-# Beagle Board uses OMAP3 (ARM-CortexA8) cpu
-# see http://www.ti.com/ for more information on Texas Instruments
-#
-# See file CREDITS for list of people who contributed to this
-# project.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-# MA 02111-1307 USA
-#
-# Physical Address:
-# 8000'0000 (bank0)
-# A000/0000 (bank1)
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
-
-# For use with external or internal boots.
-CONFIG_SYS_TEXT_BASE = 0x80008000
index 8c434633ddc277ece3bdcd4a4f625c850069dfc2..8497aee6de8dd45cc8bb3dfb1e3f55b84497bbf8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2004-2008
+ * (C) Copyright 2004-2011
  * Texas Instruments, <www.ti.com>
  *
  * Author :
@@ -37,6 +37,7 @@
 #include <asm/gpio.h>
 #include <i2c.h>
 #include <asm/mach-types.h>
+#include <linux/mtd/nand.h>
 #include "evm.h"
 
 #define OMAP3EVM_GPIO_ETH_RST_GEN1             64
@@ -119,6 +120,42 @@ int board_init(void)
        return 0;
 }
 
+#ifdef CONFIG_SPL_BUILD
+/*
+ * Routine: get_board_mem_timings
+ * Description: If we use SPL then there is no x-loader nor config header
+ * so we have to setup the DDR timings ourself on the first bank.  This
+ * provides the timing values back to the function that configures
+ * the memory.
+ */
+void get_board_mem_timings(u32 *mcfg, u32 *ctrla, u32 *ctrlb, u32 *rfr_ctrl,
+               u32 *mr)
+{
+       int pop_mfr, pop_id;
+
+       /*
+        * We need to identify what PoP memory is on the board so that
+        * we know what timings to use.  To map the ID values please see
+        * nand_ids.c
+        */
+       identify_nand_chip(&pop_mfr, &pop_id);
+
+       if (pop_mfr == NAND_MFR_HYNIX && pop_id == 0xbc) {
+               /* 256MB DDR */
+               *mcfg = HYNIX_V_MCFG_200(256 << 20);
+               *ctrla = HYNIX_V_ACTIMA_200;
+               *ctrlb = HYNIX_V_ACTIMB_200;
+       } else {
+               /* 128MB DDR */
+               *mcfg = MICRON_V_MCFG_165(128 << 20);
+               *ctrla = MICRON_V_ACTIMA_165;
+               *ctrlb = MICRON_V_ACTIMB_165;
+       }
+       *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
+       *mr = MICRON_V_MR_165;
+}
+#endif
+
 /*
  * Routine: misc_init_r
  * Description: Init ethernet (done here so udelay works)
@@ -238,7 +275,7 @@ int board_eth_init(bd_t *bis)
 }
 #endif /* CONFIG_CMD_NET */
 
-#ifdef CONFIG_GENERIC_MMC
+#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
 int board_mmc_init(bd_t *bis)
 {
        omap_mmc_init(0);
similarity index 86%
rename from board/cerf250/Makefile
rename to board/ti/omap5_evm/Makefile
index cf4742ee17f9ebe7f53c4896e726042fbdb66e3b..fa81d64beed84471741c57c5a01f2e16c65d02bc 100644 (file)
@@ -1,5 +1,5 @@
 #
-# (C) Copyright 2000-2006
+# (C) Copyright 2000, 2001, 2002
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # See file CREDITS for list of people who contributed to this
@@ -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
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := cerf250.o flash.o
+COBJS  := evm.o
 
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
@@ -33,6 +33,12 @@ OBJS := $(addprefix $(obj),$(COBJS))
 $(LIB):        $(obj).depend $(OBJS)
        $(call cmd_link_o_target, $(OBJS))
 
+clean:
+       rm -f $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak $(obj).depend
+
 #########################################################################
 
 # defines $(obj).depend target
diff --git a/board/ti/omap5_evm/evm.c b/board/ti/omap5_evm/evm.c
new file mode 100644 (file)
index 0000000..ea0cb13
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * (C) Copyright 2010
+ * Texas Instruments Incorporated, <www.ti.com>
+ * Aneesh V       <aneesh@ti.com>
+ * Steve Sakoman  <steve@sakoman.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 <twl6030.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/mmc_host_def.h>
+
+#include "mux_data.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+const struct omap_sysinfo sysinfo = {
+       "Board: OMAP5430 EVM\n"
+};
+
+/**
+ * @brief board_init
+ *
+ * @return 0
+ */
+int board_init(void)
+{
+       gpmc_init();
+       gd->bd->bi_arch_number = MACH_TYPE_OMAP5_SEVM;
+       gd->bd->bi_boot_params = (0x80000000 + 0x100); /* boot param addr */
+
+       return 0;
+}
+
+int board_eth_init(bd_t *bis)
+{
+       return 0;
+}
+
+/**
+ * @brief misc_init_r - Configure EVM board specific configurations
+ * such as power configurations, ethernet initialization as phase2 of
+ * boot sequence
+ *
+ * @return 0
+ */
+int misc_init_r(void)
+{
+#ifdef CONFIG_TWL6030_POWER
+       twl6030_init_battery_charging();
+#endif
+       return 0;
+}
+
+void set_muxconf_regs_essential(void)
+{
+       do_set_mux(CONTROL_PADCONF_CORE, core_padconf_array_essential,
+                  sizeof(core_padconf_array_essential) /
+                  sizeof(struct pad_conf_entry));
+
+       do_set_mux(CONTROL_PADCONF_WKUP, wkup_padconf_array_essential,
+                  sizeof(wkup_padconf_array_essential) /
+                  sizeof(struct pad_conf_entry));
+}
+
+void set_muxconf_regs_non_essential(void)
+{
+       do_set_mux(CONTROL_PADCONF_CORE, core_padconf_array_non_essential,
+                  sizeof(core_padconf_array_non_essential) /
+                  sizeof(struct pad_conf_entry));
+
+       do_set_mux(CONTROL_PADCONF_WKUP, wkup_padconf_array_non_essential,
+                  sizeof(wkup_padconf_array_non_essential) /
+                  sizeof(struct pad_conf_entry));
+}
+
+#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
+int board_mmc_init(bd_t *bis)
+{
+       omap_mmc_init(0);
+       omap_mmc_init(1);
+       return 0;
+}
+#endif
diff --git a/board/ti/omap5_evm/mux_data.h b/board/ti/omap5_evm/mux_data.h
new file mode 100644 (file)
index 0000000..18f4729
--- /dev/null
@@ -0,0 +1,275 @@
+/*
+ * (C) Copyright 2010
+ * Texas Instruments Incorporated, <www.ti.com>
+ *
+ *     Balaji Krishnamoorthy   <balajitk@ti.com>
+ *     Aneesh V                <aneesh@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 _EVM5430_MUX_DATA_H
+#define _EVM5430_MUX_DATA_H
+
+#include <asm/arch/mux_omap5.h>
+
+const struct pad_conf_entry core_padconf_array_essential[] = {
+
+{GPMC_AD0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat0 */
+{GPMC_AD1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat1 */
+{GPMC_AD2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat2 */
+{GPMC_AD3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat3 */
+{GPMC_AD4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat4 */
+{GPMC_AD5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat5 */
+{GPMC_AD6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat6 */
+{GPMC_AD7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat7 */
+{GPMC_NOE, (PTU | IEN | OFF_EN | OFF_OUT_PTD | M1)},    /* sdmmc2_clk */
+{GPMC_NWE, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_cmd */
+{SDMMC1_CLK, (PTU | OFF_EN | OFF_OUT_PTD | M0)},        /* sdmmc1_clk */
+{SDMMC1_CMD, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_cmd */
+{SDMMC1_DAT0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat0 */
+{SDMMC1_DAT1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat1 */
+{SDMMC1_DAT2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat2 */
+{SDMMC1_DAT3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat3 */
+{SDMMC1_DAT4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat4 */
+{SDMMC1_DAT5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat5 */
+{SDMMC1_DAT6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat6 */
+{SDMMC1_DAT7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat7 */
+{UART3_CTS_RCTX, (PTU | IEN | M0)},                    /* uart3_tx */
+{UART3_RTS_SD, (M0)},                                  /* uart3_rts_sd */
+{UART3_RX_IRRX, (IEN | M0)},                           /* uart3_rx */
+{UART3_TX_IRTX, (M0)}                                  /* uart3_tx */
+
+};
+
+const struct pad_conf_entry wkup_padconf_array_essential[] = {
+
+{PAD1_SR_SCL, (PTU | IEN | M0)}, /* sr_scl */
+{PAD0_SR_SDA, (PTU | IEN | M0)}, /* sr_sda */
+{PAD1_SYS_32K, (IEN | M0)}      /* sys_32k */
+
+};
+
+const struct pad_conf_entry core_padconf_array_non_essential[] = {
+       {GPMC_AD8, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M3)},        /* gpio_32 */
+       {GPMC_AD9, (PTU | IEN | M3)},                                   /* gpio_33 */
+       {GPMC_AD10, (PTU | IEN | M3)},                                  /* gpio_34 */
+       {GPMC_AD11, (PTU | IEN | M3)},                                  /* gpio_35 */
+       {GPMC_AD12, (PTU | IEN | M3)},                                  /* gpio_36 */
+       {GPMC_AD13, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M3)},        /* gpio_37 */
+       {GPMC_AD14, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M3)},        /* gpio_38 */
+       {GPMC_AD15, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M3)},        /* gpio_39 */
+       {GPMC_A16, (M3)},                                               /* gpio_40 */
+       {GPMC_A17, (PTD | M3)},                                         /* gpio_41 */
+       {GPMC_A18, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)},        /* kpd_row6 */
+       {GPMC_A19, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)},        /* kpd_row7 */
+       {GPMC_A20, (IEN | M3)},                                         /* gpio_44 */
+       {GPMC_A21, (M3)},                                               /* gpio_45 */
+       {GPMC_A22, (OFF_EN | OFF_PD | OFF_IN | M1)},                    /* kpd_col6 */
+       {GPMC_A23, (OFF_EN | OFF_PD | OFF_IN | M1)},                    /* kpd_col7 */
+       {GPMC_A24, (PTD | M3)},                                         /* gpio_48 */
+       {GPMC_A25, (PTD | M3)},                                         /* gpio_49 */
+       {GPMC_NCS0, (M3)},                                              /* gpio_50 */
+       {GPMC_NCS1, (IEN | M3)},                                        /* gpio_51 */
+       {GPMC_NCS2, (IEN | M3)},                                        /* gpio_52 */
+       {GPMC_NCS3, (IEN | M3)},                                        /* gpio_53 */
+       {GPMC_NWP, (M3)},                                               /* gpio_54 */
+       {GPMC_CLK, (PTD | M3)},                                         /* gpio_55 */
+       {GPMC_NADV_ALE, (M3)},                                          /* gpio_56 */
+       {GPMC_NBE0_CLE, (M3)},                                          /* gpio_59 */
+       {GPMC_NBE1, (PTD | M3)},                                        /* gpio_60 */
+       {GPMC_WAIT0, (PTU | IEN | M3)},                                 /* gpio_61 */
+       {GPMC_WAIT1, (IEN | M3)},                                       /* gpio_62 */
+       {C2C_DATA11, (PTD | M3)},                                       /* gpio_100 */
+       {C2C_DATA12, (M1)},                                             /* dsi1_te0 */
+       {C2C_DATA13, (PTD | M3)},                                       /* gpio_102 */
+       {C2C_DATA14, (M1)},                                             /* dsi2_te0 */
+       {C2C_DATA15, (PTD | M3)},                                       /* gpio_104 */
+       {HDMI_HPD, (M0)},                                               /* hdmi_hpd */
+       {HDMI_CEC, (M0)},                                               /* hdmi_cec */
+       {HDMI_DDC_SCL, (PTU | M0)},                                     /* hdmi_ddc_scl */
+       {HDMI_DDC_SDA, (PTU | IEN | M0)},                               /* hdmi_ddc_sda */
+       {CSI21_DX0, (IEN | M0)},                                        /* csi21_dx0 */
+       {CSI21_DY0, (IEN | M0)},                                        /* csi21_dy0 */
+       {CSI21_DX1, (IEN | M0)},                                        /* csi21_dx1 */
+       {CSI21_DY1, (IEN | M0)},                                        /* csi21_dy1 */
+       {CSI21_DX2, (IEN | M0)},                                        /* csi21_dx2 */
+       {CSI21_DY2, (IEN | M0)},                                        /* csi21_dy2 */
+       {CSI21_DX3, (PTD | M7)},                                        /* csi21_dx3 */
+       {CSI21_DY3, (PTD | M7)},                                        /* csi21_dy3 */
+       {CSI21_DX4, (PTD | OFF_EN | OFF_PD | OFF_IN | M7)},             /* csi21_dx4 */
+       {CSI21_DY4, (PTD | OFF_EN | OFF_PD | OFF_IN | M7)},             /* csi21_dy4 */
+       {CSI22_DX0, (IEN | M0)},                                        /* csi22_dx0 */
+       {CSI22_DY0, (IEN | M0)},                                        /* csi22_dy0 */
+       {CSI22_DX1, (IEN | M0)},                                        /* csi22_dx1 */
+       {CSI22_DY1, (IEN | M0)},                                        /* csi22_dy1 */
+       {CAM_SHUTTER, (OFF_EN | OFF_PD | OFF_OUT_PTD | M0)},            /* cam_shutter */
+       {CAM_STROBE, (OFF_EN | OFF_PD | OFF_OUT_PTD | M0)},             /* cam_strobe */
+       {CAM_GLOBALRESET, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M3)},  /* gpio_83 */
+       {USBB1_ULPITLL_CLK, (IEN | OFF_EN | OFF_IN | M1)},              /* hsi1_cawake */
+       {USBB1_ULPITLL_STP, (IEN | OFF_EN | OFF_IN | M1)},              /* hsi1_cadata */
+       {USBB1_ULPITLL_DIR, (IEN | OFF_EN | OFF_IN | M1)},              /* hsi1_caflag */
+       {USBB1_ULPITLL_NXT, (OFF_EN | M1)},                             /* hsi1_acready */
+       {USBB1_ULPITLL_DAT0, (OFF_EN | M1)},                            /* hsi1_acwake */
+       {USBB1_ULPITLL_DAT1, (OFF_EN | M1)},                            /* hsi1_acdata */
+       {USBB1_ULPITLL_DAT2, (OFF_EN | M1)},                            /* hsi1_acflag */
+       {USBB1_ULPITLL_DAT3, (IEN | OFF_EN | OFF_IN | M1)},             /* hsi1_caready */
+       {USBB1_ULPITLL_DAT4, (IEN | OFF_EN | OFF_PD | OFF_IN | M4)},    /* usbb1_ulpiphy_dat4 */
+       {USBB1_ULPITLL_DAT5, (IEN | OFF_EN | OFF_PD | OFF_IN | M4)},    /* usbb1_ulpiphy_dat5 */
+       {USBB1_ULPITLL_DAT6, (IEN | OFF_EN | OFF_PD | OFF_IN | M4)},    /* usbb1_ulpiphy_dat6 */
+       {USBB1_ULPITLL_DAT7, (IEN | OFF_EN | OFF_PD | OFF_IN | M4)},    /* usbb1_ulpiphy_dat7 */
+       {USBB1_HSIC_DATA, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},       /* usbb1_hsic_data */
+       {USBB1_HSIC_STROBE, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},     /* usbb1_hsic_strobe */
+       {USBC1_ICUSB_DP, (IEN | M0)},                                   /* usbc1_icusb_dp */
+       {USBC1_ICUSB_DM, (IEN | M0)},                                   /* usbc1_icusb_dm */
+       {ABE_MCBSP2_CLKX, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},       /* abe_mcbsp2_clkx */
+       {ABE_MCBSP2_DR, (IEN | OFF_EN | OFF_OUT_PTD | M0)},             /* abe_mcbsp2_dr */
+       {ABE_MCBSP2_DX, (OFF_EN | OFF_OUT_PTD | M0)},                   /* abe_mcbsp2_dx */
+       {ABE_MCBSP2_FSX, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},        /* abe_mcbsp2_fsx */
+       {ABE_MCBSP1_CLKX, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},       /* abe_mcbsp1_clkx */
+       {ABE_MCBSP1_DR, (IEN | OFF_EN | OFF_OUT_PTD | M0)},             /* abe_mcbsp1_dr */
+       {ABE_MCBSP1_DX, (OFF_EN | OFF_OUT_PTD | M0)},                   /* abe_mcbsp1_dx */
+       {ABE_MCBSP1_FSX, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},        /* abe_mcbsp1_fsx */
+       {ABE_PDM_UL_DATA, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_pdm_ul_data */
+       {ABE_PDM_DL_DATA, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_pdm_dl_data */
+       {ABE_PDM_FRAME, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},   /* abe_pdm_frame */
+       {ABE_PDM_LB_CLK, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},  /* abe_pdm_lb_clk */
+       {ABE_CLKS, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},        /* abe_clks */
+       {ABE_DMIC_CLK1, (M0)},                                          /* abe_dmic_clk1 */
+       {ABE_DMIC_DIN1, (IEN | M0)},                                    /* abe_dmic_din1 */
+       {ABE_DMIC_DIN2, (IEN | M0)},                                    /* abe_dmic_din2 */
+       {ABE_DMIC_DIN3, (IEN | M0)},                                    /* abe_dmic_din3 */
+       {UART2_CTS, (PTU | IEN | M0)},                                  /* uart2_cts */
+       {UART2_RTS, (M0)},                                              /* uart2_rts */
+       {UART2_RX, (PTU | IEN | M0)},                                   /* uart2_rx */
+       {UART2_TX, (M0)},                                               /* uart2_tx */
+       {HDQ_SIO, (M3)},                                                /* gpio_127 */
+       {MCSPI1_CLK, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},            /* mcspi1_clk */
+       {MCSPI1_SOMI, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},           /* mcspi1_somi */
+       {MCSPI1_SIMO, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},           /* mcspi1_simo */
+       {MCSPI1_CS0, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},      /* mcspi1_cs0 */
+       {MCSPI1_CS1, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M3)},      /* mcspi1_cs1 */
+       {MCSPI1_CS2, (PTU | OFF_EN | OFF_OUT_PTU | M3)},                /* gpio_139 */
+       {MCSPI1_CS3, (PTU | IEN | M3)},                                 /* gpio_140 */
+       {SDMMC5_CLK, (PTU | IEN | OFF_EN | OFF_OUT_PTD | M0)},          /* sdmmc5_clk */
+       {SDMMC5_CMD, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},      /* sdmmc5_cmd */
+       {SDMMC5_DAT0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},     /* sdmmc5_dat0 */
+       {SDMMC5_DAT1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},     /* sdmmc5_dat1 */
+       {SDMMC5_DAT2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},     /* sdmmc5_dat2 */
+       {SDMMC5_DAT3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},     /* sdmmc5_dat3 */
+       {MCSPI4_CLK, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},            /* mcspi4_clk */
+       {MCSPI4_SIMO, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},           /* mcspi4_simo */
+       {MCSPI4_SOMI, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},           /* mcspi4_somi */
+       {MCSPI4_CS0, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)},      /* mcspi4_cs0 */
+       {UART4_RX, (IEN | M0)},                                         /* uart4_rx */
+       {UART4_TX, (M0)},                                               /* uart4_tx */
+       {USBB2_ULPITLL_CLK, (PTD | IEN | M3)},                          /* gpio_157 */
+       {USBB2_ULPITLL_STP, (IEN | M5)},                                /* dispc2_data23 */
+       {USBB2_ULPITLL_DIR, (IEN | M5)},                                /* dispc2_data22 */
+       {USBB2_ULPITLL_NXT, (IEN | M5)},                                /* dispc2_data21 */
+       {USBB2_ULPITLL_DAT0, (IEN | M5)},                               /* dispc2_data20 */
+       {USBB2_ULPITLL_DAT1, (IEN | M5)},                               /* dispc2_data19 */
+       {USBB2_ULPITLL_DAT2, (IEN | M5)},                               /* dispc2_data18 */
+       {USBB2_ULPITLL_DAT3, (IEN | M5)},                               /* dispc2_data15 */
+       {USBB2_ULPITLL_DAT4, (IEN | M5)},                               /* dispc2_data14 */
+       {USBB2_ULPITLL_DAT5, (IEN | M5)},                               /* dispc2_data13 */
+       {USBB2_ULPITLL_DAT6, (IEN | M5)},                               /* dispc2_data12 */
+       {USBB2_ULPITLL_DAT7, (IEN | M5)},                               /* dispc2_data11 */
+       {USBB2_HSIC_DATA, (PTD | OFF_EN | OFF_OUT_PTU | M3)},           /* gpio_169 */
+       {USBB2_HSIC_STROBE, (PTD | OFF_EN | OFF_OUT_PTU | M3)},         /* gpio_170 */
+       {UNIPRO_TX0, (OFF_EN | OFF_PD | OFF_IN | M1)},                  /* kpd_col0 */
+       {UNIPRO_TY0, (OFF_EN | OFF_PD | OFF_IN | M1)},                  /* kpd_col1 */
+       {UNIPRO_TX1, (OFF_EN | OFF_PD | OFF_IN | M1)},                  /* kpd_col2 */
+       {UNIPRO_TY1, (OFF_EN | OFF_PD | OFF_IN | M1)},                  /* kpd_col3 */
+       {UNIPRO_TX2, (OFF_EN | OFF_PD | OFF_IN | M1)},                  /* kpd_col4 */
+       {UNIPRO_TY2, (OFF_EN | OFF_PD | OFF_IN | M1)},                  /* kpd_col5 */
+       {UNIPRO_RX0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)},      /* kpd_row0 */
+       {UNIPRO_RY0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)},      /* kpd_row1 */
+       {UNIPRO_RX1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)},      /* kpd_row2 */
+       {UNIPRO_RY1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)},      /* kpd_row3 */
+       {UNIPRO_RX2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)},      /* kpd_row4 */
+       {UNIPRO_RY2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)},      /* kpd_row5 */
+       {USBA0_OTG_CE, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M0)},     /* usba0_otg_ce */
+       {USBA0_OTG_DP, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},          /* usba0_otg_dp */
+       {USBA0_OTG_DM, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)},          /* usba0_otg_dm */
+       {FREF_CLK1_OUT, (M0)},                                          /* fref_clk1_out */
+       {FREF_CLK2_OUT, (M0)},                                          /* fref_clk2_out */
+       {SYS_NIRQ1, (PTU | IEN | M0)},                                  /* sys_nirq1 */
+       {SYS_NIRQ2, (M7)},                                              /* sys_nirq2 */
+       {SYS_BOOT0, (PTU | IEN | M3)},                                  /* gpio_184 */
+       {SYS_BOOT1, (M3)},                                              /* gpio_185 */
+       {SYS_BOOT2, (PTD | IEN | M3)},                                  /* gpio_186 */
+       {SYS_BOOT3, (PTD | IEN | M3)},                                  /* gpio_187 */
+       {SYS_BOOT4, (M3)},                                              /* gpio_188 */
+       {SYS_BOOT5, (PTD | IEN | M3)},                                  /* gpio_189 */
+       {DPM_EMU0, (IEN | M0)},                                         /* dpm_emu0 */
+       {DPM_EMU1, (IEN | M0)},                                         /* dpm_emu1 */
+       {DPM_EMU2, (IEN | M0)},                                         /* dpm_emu2 */
+       {DPM_EMU3, (IEN | M5)},                                         /* dispc2_data10 */
+       {DPM_EMU4, (IEN | M5)},                                         /* dispc2_data9 */
+       {DPM_EMU5, (IEN | M5)},                                         /* dispc2_data16 */
+       {DPM_EMU6, (IEN | M5)},                                         /* dispc2_data17 */
+       {DPM_EMU7, (IEN | M5)},                                         /* dispc2_hsync */
+       {DPM_EMU8, (IEN | M5)},                                         /* dispc2_pclk */
+       {DPM_EMU9, (IEN | M5)},                                         /* dispc2_vsync */
+       {DPM_EMU10, (IEN | M5)},                                        /* dispc2_de */
+       {DPM_EMU11, (IEN | M5)},                                        /* dispc2_data8 */
+       {DPM_EMU12, (IEN | M5)},                                        /* dispc2_data7 */
+       {DPM_EMU13, (IEN | M5)},                                        /* dispc2_data6 */
+       {DPM_EMU14, (IEN | M5)},                                        /* dispc2_data5 */
+       {DPM_EMU15, (IEN | M5)},                                        /* dispc2_data4 */
+       {DPM_EMU16, (M3)},                                              /* gpio_27 */
+       {DPM_EMU17, (IEN | M5)},                                        /* dispc2_data2 */
+       {DPM_EMU18, (IEN | M5)},                                        /* dispc2_data1 */
+       {DPM_EMU19, (IEN | M5)},                                        /* dispc2_data0 */
+       {I2C1_SCL, (PTU | IEN | M0)},                           /* i2c1_scl */
+       {I2C1_SDA, (PTU | IEN | M0)},                           /* i2c1_sda */
+       {I2C2_SCL, (PTU | IEN | M0)},                           /* i2c2_scl */
+       {I2C2_SDA, (PTU | IEN | M0)},                           /* i2c2_sda */
+       {I2C3_SCL, (PTU | IEN | M0)},                           /* i2c3_scl */
+       {I2C3_SDA, (PTU | IEN | M0)},                           /* i2c3_sda */
+       {I2C4_SCL, (PTU | IEN | M0)},                           /* i2c4_scl */
+       {I2C4_SDA, (PTU | IEN | M0)}                            /* i2c4_sda */
+};
+
+const struct pad_conf_entry wkup_padconf_array_non_essential[] = {
+       {PAD0_SIM_IO, (IEN | M0)},              /* sim_io */
+       {PAD1_SIM_CLK, (M0)},                   /* sim_clk */
+       {PAD0_SIM_RESET, (M0)},                 /* sim_reset */
+       {PAD1_SIM_CD, (PTU | IEN | M0)},        /* sim_cd */
+       {PAD0_SIM_PWRCTRL, (M0)},               /* sim_pwrctrl */
+       {PAD1_FREF_XTAL_IN, (M0)},              /* # */
+       {PAD0_FREF_SLICER_IN, (M0)},            /* fref_slicer_in */
+       {PAD1_FREF_CLK_IOREQ, (M0)},            /* fref_clk_ioreq */
+       {PAD0_FREF_CLK0_OUT, (M2)},             /* sys_drm_msecure */
+       {PAD1_FREF_CLK3_REQ, (PTU | IEN | M0)}, /* # */
+       {PAD0_FREF_CLK3_OUT, (M0)},             /* fref_clk3_out */
+       {PAD1_FREF_CLK4_REQ, (PTU | IEN | M0)}, /* # */
+       {PAD0_FREF_CLK4_OUT, (M0)},             /* # */
+       {PAD0_SYS_NRESPWRON, (M0)},             /* sys_nrespwron */
+       {PAD1_SYS_NRESWARM, (M0)},              /* sys_nreswarm */
+       {PAD0_SYS_PWR_REQ, (PTU | M0)},         /* sys_pwr_req */
+       {PAD1_SYS_PWRON_RESET, (M3)},           /* gpio_wk29 */
+       {PAD0_SYS_BOOT6, (IEN | M3)},           /* gpio_wk9 */
+       {PAD1_SYS_BOOT7, (IEN | M3)},           /* gpio_wk10 */
+       {PAD1_FREF_CLK3_REQ, (M3)},             /* gpio_wk30 */
+       {PAD1_FREF_CLK4_REQ, (M3)},             /* gpio_wk7 */
+       {PAD0_FREF_CLK4_OUT, (M3)},             /* gpio_wk8 */
+};
+
+#endif /* _EVM4430_MUX_DATA_H */
index ec493f5c38162e4aa828425b44e1006502596058..b299e2fff8cc15ffcb717ac4377937050418c337 100644 (file)
@@ -25,9 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-ifndef CONFIG_SPL_BUILD
 COBJS  := panda.o
-endif
 
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
index 97320cb278abc754c3dd7eded7a9f8425db35d77..b4271fb58a82b776941d90e46460109e5d43368b 100644 (file)
@@ -65,6 +65,23 @@ int misc_init_r(void)
        return 0;
 }
 
+void set_muxconf_regs_essential(void)
+{
+       do_set_mux(CONTROL_PADCONF_CORE, core_padconf_array_essential,
+                  sizeof(core_padconf_array_essential) /
+                  sizeof(struct pad_conf_entry));
+
+       do_set_mux(CONTROL_PADCONF_WKUP, wkup_padconf_array_essential,
+                  sizeof(wkup_padconf_array_essential) /
+                  sizeof(struct pad_conf_entry));
+
+       if (omap_revision() >= OMAP4460_ES1_0)
+               do_set_mux(CONTROL_PADCONF_WKUP,
+                                wkup_padconf_array_essential_4460,
+                                sizeof(wkup_padconf_array_essential_4460) /
+                                sizeof(struct pad_conf_entry));
+}
+
 void set_muxconf_regs_non_essential(void)
 {
        do_set_mux(CONTROL_PADCONF_CORE, core_padconf_array_non_essential,
@@ -93,10 +110,18 @@ void set_muxconf_regs_non_essential(void)
                                sizeof(struct pad_conf_entry));
 }
 
-#ifdef CONFIG_GENERIC_MMC
+#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
 int board_mmc_init(bd_t *bis)
 {
        omap_mmc_init(0);
        return 0;
 }
 #endif
+
+/*
+ * get_board_rev() - get board revision
+ */
+u32 get_board_rev(void)
+{
+       return 0x20;
+}
index 83d0c3fd81167da8799cfd223e1974a24404088b..2970ccd60922b6b7d093643cc42291994a9edf65 100644 (file)
 
 #include <asm/arch/mux_omap4.h>
 
+
+const struct pad_conf_entry core_padconf_array_essential[] = {
+
+{GPMC_AD0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat0 */
+{GPMC_AD1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat1 */
+{GPMC_AD2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat2 */
+{GPMC_AD3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat3 */
+{GPMC_AD4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat4 */
+{GPMC_AD5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat5 */
+{GPMC_AD6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat6 */
+{GPMC_AD7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat7 */
+{GPMC_NOE, (PTU | IEN | OFF_EN | OFF_OUT_PTD | M1)},    /* sdmmc2_clk */
+{GPMC_NWE, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_cmd */
+{SDMMC1_CLK, (PTU | OFF_EN | OFF_OUT_PTD | M0)},        /* sdmmc1_clk */
+{SDMMC1_CMD, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_cmd */
+{SDMMC1_DAT0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat0 */
+{SDMMC1_DAT1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat1 */
+{SDMMC1_DAT2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat2 */
+{SDMMC1_DAT3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat3 */
+{SDMMC1_DAT4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat4 */
+{SDMMC1_DAT5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat5 */
+{SDMMC1_DAT6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat6 */
+{SDMMC1_DAT7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat7 */
+{I2C1_SCL, (PTU | IEN | M0)},                          /* i2c1_scl */
+{I2C1_SDA, (PTU | IEN | M0)},                          /* i2c1_sda */
+{I2C2_SCL, (PTU | IEN | M0)},                          /* i2c2_scl */
+{I2C2_SDA, (PTU | IEN | M0)},                          /* i2c2_sda */
+{I2C3_SCL, (PTU | IEN | M0)},                          /* i2c3_scl */
+{I2C3_SDA, (PTU | IEN | M0)},                          /* i2c3_sda */
+{I2C4_SCL, (PTU | IEN | M0)},                          /* i2c4_scl */
+{I2C4_SDA, (PTU | IEN | M0)},                          /* i2c4_sda */
+{UART3_CTS_RCTX, (PTU | IEN | M0)},                    /* uart3_tx */
+{UART3_RTS_SD, (M0)},                                  /* uart3_rts_sd */
+{UART3_RX_IRRX, (IEN | M0)},                           /* uart3_rx */
+{UART3_TX_IRTX, (M0)}                                  /* uart3_tx */
+
+};
+
+const struct pad_conf_entry wkup_padconf_array_essential[] = {
+
+{PAD1_SR_SCL, (PTU | IEN | M0)}, /* sr_scl */
+{PAD0_SR_SDA, (PTU | IEN | M0)}, /* sr_sda */
+{PAD1_SYS_32K, (IEN | M0)}      /* sys_32k */
+
+};
+
+const struct pad_conf_entry wkup_padconf_array_essential_4460[] = {
+
+{PAD1_FREF_CLK4_REQ, (PTU | M7)}, /* gpio_wk7 for TPS: safe mode + pull up */
+
+};
+
 const struct pad_conf_entry core_padconf_array_non_essential[] = {
        {GPMC_AD8, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M3)},        /* gpio_32 */
        {GPMC_AD9, (PTU | IEN | M3)},                                   /* gpio_33 */
@@ -219,7 +271,7 @@ const struct pad_conf_entry wkup_padconf_array_non_essential[] = {
        {PAD0_FREF_SLICER_IN, (M0)},            /* fref_slicer_in */
        {PAD1_FREF_CLK_IOREQ, (M0)},            /* fref_clk_ioreq */
        {PAD0_FREF_CLK0_OUT, (M2)},             /* sys_drm_msecure */
-       {PAD1_FREF_CLK3_REQ, M7},                                       /* safe mode */
+       {PAD1_FREF_CLK3_REQ, M7},               /* safe mode */
        {PAD0_FREF_CLK3_OUT, (M0)},             /* fref_clk3_out */
        {PAD0_FREF_CLK4_OUT, (PTU | M3)},       /* led status_2 */
        {PAD0_SYS_NRESPWRON, (M0)},             /* sys_nrespwron */
index 806fdf4761edd75a35720f5211799087dcc6b933..72ad3eb07fef6a08c09b34760708a449b991f69f 100644 (file)
@@ -25,8 +25,10 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
+COBJS  := sdp.o
+
 ifndef CONFIG_SPL_BUILD
-COBJS  := sdp.o cmd_bat.o
+COBJS  += cmd_bat.o
 endif
 
 SRCS   := $(COBJS:.o=.c)
index a5ea6829cd28d1b1ef5bb4c638b993ac3b6df3ca..9ae9e2c602c3dc10706b62cd2d60a6b99947fcc7 100644 (file)
@@ -70,6 +70,23 @@ int misc_init_r(void)
        return 0;
 }
 
+void set_muxconf_regs_essential(void)
+{
+       do_set_mux(CONTROL_PADCONF_CORE, core_padconf_array_essential,
+                  sizeof(core_padconf_array_essential) /
+                  sizeof(struct pad_conf_entry));
+
+       do_set_mux(CONTROL_PADCONF_WKUP, wkup_padconf_array_essential,
+                  sizeof(wkup_padconf_array_essential) /
+                  sizeof(struct pad_conf_entry));
+
+       if (omap_revision() >= OMAP4460_ES1_0)
+               do_set_mux(CONTROL_PADCONF_WKUP,
+                                wkup_padconf_array_essential_4460,
+                                sizeof(wkup_padconf_array_essential_4460) /
+                                sizeof(struct pad_conf_entry));
+}
+
 void set_muxconf_regs_non_essential(void)
 {
        do_set_mux(CONTROL_PADCONF_CORE, core_padconf_array_non_essential,
@@ -79,9 +96,16 @@ void set_muxconf_regs_non_essential(void)
        do_set_mux(CONTROL_PADCONF_WKUP, wkup_padconf_array_non_essential,
                   sizeof(wkup_padconf_array_non_essential) /
                   sizeof(struct pad_conf_entry));
+
+       if (omap_revision() < OMAP4460_ES1_0) {
+               do_set_mux(CONTROL_PADCONF_WKUP,
+                       wkup_padconf_array_non_essential_4430,
+                       sizeof(wkup_padconf_array_non_essential_4430) /
+                       sizeof(struct pad_conf_entry));
+       }
 }
 
-#ifdef CONFIG_GENERIC_MMC
+#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
 int board_mmc_init(bd_t *bis)
 {
        omap_mmc_init(0);
@@ -89,3 +113,11 @@ int board_mmc_init(bd_t *bis)
        return 0;
 }
 #endif
+
+/*
+ * get_board_rev() - get board revision
+ */
+u32 get_board_rev(void)
+{
+       return 0x20;
+}
index 06efaeaa47a070aad62a2945da4a2abe76ebcb55..0a20968978923d10a0ea76eaa809365460eae1e6 100644 (file)
 
 #include <asm/arch/mux_omap4.h>
 
+const struct pad_conf_entry core_padconf_array_essential[] = {
+
+{GPMC_AD0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat0 */
+{GPMC_AD1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat1 */
+{GPMC_AD2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat2 */
+{GPMC_AD3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat3 */
+{GPMC_AD4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat4 */
+{GPMC_AD5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat5 */
+{GPMC_AD6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat6 */
+{GPMC_AD7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat7 */
+{GPMC_NOE, (PTU | IEN | OFF_EN | OFF_OUT_PTD | M1)},    /* sdmmc2_clk */
+{GPMC_NWE, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_cmd */
+{SDMMC1_CLK, (PTU | OFF_EN | OFF_OUT_PTD | M0)},        /* sdmmc1_clk */
+{SDMMC1_CMD, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_cmd */
+{SDMMC1_DAT0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat0 */
+{SDMMC1_DAT1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat1 */
+{SDMMC1_DAT2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat2 */
+{SDMMC1_DAT3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat3 */
+{SDMMC1_DAT4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat4 */
+{SDMMC1_DAT5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat5 */
+{SDMMC1_DAT6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat6 */
+{SDMMC1_DAT7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat7 */
+{UART3_CTS_RCTX, (PTU | IEN | M0)},                    /* uart3_tx */
+{UART3_RTS_SD, (M0)},                                  /* uart3_rts_sd */
+{UART3_RX_IRRX, (IEN | M0)},                           /* uart3_rx */
+{UART3_TX_IRTX, (M0)}                                  /* uart3_tx */
+
+};
+
+const struct pad_conf_entry wkup_padconf_array_essential[] = {
+
+{PAD1_SR_SCL, (PTU | IEN | M0)}, /* sr_scl */
+{PAD0_SR_SDA, (PTU | IEN | M0)}, /* sr_sda */
+{PAD1_SYS_32K, (IEN | M0)}      /* sys_32k */
+
+};
+
+const struct pad_conf_entry wkup_padconf_array_essential_4460[] = {
+
+{PAD1_FREF_CLK4_REQ, (PTU | M7)}, /* gpio_wk7 for TPS: safe mode + pull up */
+
+};
+
 const struct pad_conf_entry core_padconf_array_non_essential[] = {
        {GPMC_AD8, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M3)},        /* gpio_32 */
        {GPMC_AD9, (PTU | IEN | M3)},                                   /* gpio_33 */
@@ -200,6 +243,15 @@ const struct pad_conf_entry core_padconf_array_non_essential[] = {
        {DPM_EMU17, (IEN | M5)},                                        /* dispc2_data2 */
        {DPM_EMU18, (IEN | M5)},                                        /* dispc2_data1 */
        {DPM_EMU19, (IEN | M5)},                                        /* dispc2_data0 */
+       {I2C1_SCL, (PTU | IEN | M0)},                                   /* i2c1_scl */
+       {I2C1_SDA, (PTU | IEN | M0)},                                   /* i2c1_sda */
+       {I2C2_SCL, (PTU | IEN | M0)},                                   /* i2c2_scl */
+       {I2C2_SDA, (PTU | IEN | M0)},                                   /* i2c2_sda */
+       {I2C3_SCL, (PTU | IEN | M0)},                                   /* i2c3_scl */
+       {I2C3_SDA, (PTU | IEN | M0)},                                   /* i2c3_sda */
+       {I2C4_SCL, (PTU | IEN | M0)},                                   /* i2c4_scl */
+       {I2C4_SDA, (PTU | IEN | M0)}                                    /* i2c4_sda */
+
 };
 
 const struct pad_conf_entry wkup_padconf_array_non_essential[] = {
@@ -214,7 +266,6 @@ const struct pad_conf_entry wkup_padconf_array_non_essential[] = {
        {PAD0_FREF_CLK0_OUT, (M2)},             /* sys_drm_msecure */
        {PAD1_FREF_CLK3_REQ, (M3)},             /* gpio_wk30 - Debug led-1 */
        {PAD0_FREF_CLK3_OUT, (M0)},             /* fref_clk3_out */
-       {PAD1_FREF_CLK4_REQ, (M3)},             /* gpio_wk7 - Debug led-2 */
        {PAD0_FREF_CLK4_OUT, (M3)},             /* gpio_wk8 - Debug led-3 */
        {PAD0_SYS_NRESPWRON, (M0)},             /* sys_nrespwron */
        {PAD1_SYS_NRESWARM, (M0)},              /* sys_nreswarm */
@@ -224,4 +275,8 @@ const struct pad_conf_entry wkup_padconf_array_non_essential[] = {
        {PAD1_SYS_BOOT7, (IEN | M3)},           /* gpio_wk10 */
 };
 
+const struct pad_conf_entry wkup_padconf_array_non_essential_4430[] = {
+       {PAD1_FREF_CLK4_REQ, (M3)}      /* gpio_wk7 - Debug led-2 */
+};
+
 #endif /* _SDP4430_MUX_DATA_H */
index fee0dff33c7277eaf51210226cd98cd6ac45fbca..b06aab6176e95a353dfdabb582f317d9e79ae929 100644 (file)
@@ -138,3 +138,24 @@ int board_eth_init(bd_t *bis)
        return dm9000_initialize(bis);
 }
 #endif
+
+/*
+ * Routine: get_board_mem_timings
+ * Description: If we use SPL then there is no x-loader nor config header
+ * so we have to setup the DDR timings ourself on the first bank.  This
+ * provides the timing values back to the function that configures
+ * the memory.  We have either one or two banks of 128MB DDR.
+ */
+void get_board_mem_timings(u32 *mcfg, u32 *ctrla, u32 *ctrlb, u32 *rfr_ctrl,
+               u32 *mr)
+{
+       /* General SDRC config */
+       *mcfg = MICRON_V_MCFG_165(128 << 20);
+       *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
+
+       /* AC timings */
+       *ctrla = MICRON_V_ACTIMA_165;
+       *ctrlb = MICRON_V_ACTIMB_165;
+
+       *mr = MICRON_V_MR_165;
+}
similarity index 81%
rename from board/colibri_pxa270/colibri_pxa270.c
rename to board/toradex/colibri_pxa270/colibri_pxa270.c
index 191fb333e40ff53f9aba9c7c414b16fe2898df4d..d72e5d6b5a09d68c715fa5b35c031ddf7974360e 100644 (file)
 
 #include <common.h>
 #include <asm/arch/hardware.h>
+#include <asm/arch/regs-mmc.h>
+#include <asm/arch/pxa.h>
 #include <netdev.h>
 #include <asm/io.h>
+#include <serial.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-/* ------------------------------------------------------------------------- */
-
-/*
- * Miscelaneous platform dependent initialisations
- */
-extern struct serial_device serial_ffuart_device;
-extern struct serial_device serial_btuart_device;
-extern struct serial_device serial_stuart_device;
-
-struct serial_device *default_serial_console (void)
+struct serial_device *default_serial_console(void)
 {
        return &serial_ffuart_device;
 }
 
-int board_init (void)
+int board_init(void)
 {
        /* We have RAM, disable cache */
        dcache_disable();
@@ -55,20 +49,13 @@ int board_init (void)
        return 0;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
 
-void dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-}
-
 #ifdef CONFIG_CMD_USB
 int usb_board_init(void)
 {
@@ -78,7 +65,8 @@ int usb_board_init(void)
 
        writel(readl(UHCHR) | UHCHR_FSBIR, UHCHR);
 
-       while (UHCHR & UHCHR_FSBIR);
+       while (UHCHR & UHCHR_FSBIR)
+               ;
 
        writel(readl(UHCHR) & ~UHCHR_SSE, UHCHR);
        writel((UHCHIE_UPRIE | UHCHIE_RWIE), UHCHIE);
@@ -126,3 +114,11 @@ int board_eth_init(bd_t *bis)
        return dm9000_initialize(bis);
 }
 #endif
+
+#ifdef CONFIG_CMD_MMC
+int board_mmc_init(bd_t *bis)
+{
+       pxa_mmc_register(0);
+       return 0;
+}
+#endif
index 99f665b47273092d2da96a41fcc224cf6c5d1001..129119528fe960215cd8a9acd6055a3558b2d395 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <common.h>
 #include <asm/arch/pxa-regs.h>
+#include <asm/arch/pxa.h>
 #include <netdev.h>
 #include <asm/io.h>
 
@@ -139,10 +140,9 @@ struct serial_device *default_serial_console (void)
        return &serial_ffuart_device;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
index b5c60fd209c84aa8ba540414a86f193c781c4c20..5967055996f83e1c38436375b0fcb39d9a30e15a 100644 (file)
@@ -23,7 +23,11 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
+ifndef CONFIG_SPL_BUILD
 COBJS  := vpac270.o
+else
+COBJS  := onenand.o
+endif
 
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/vpac270/onenand.c b/board/vpac270/onenand.c
new file mode 100644 (file)
index 0000000..c2ae9a7
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Voipac PXA270 OneNAND SPL
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/io.h>
+#include <onenand_uboot.h>
+#include <asm/arch/pxa.h>
+
+void board_init_f(unsigned long unused)
+{
+       extern uint32_t _end;
+       uint32_t tmp;
+
+       asm volatile("mov %0, pc" : "=r"(tmp));
+       tmp >>= 24;
+
+       /* The code runs from OneNAND RAM, copy SPL to SRAM and execute it. */
+       if (tmp == 0) {
+               tmp = (uint32_t)&_end - CONFIG_SPL_TEXT_BASE;
+               onenand_spl_load_image(0, tmp, (void *)CONFIG_SPL_TEXT_BASE);
+               asm volatile("mov pc, %0" : : "r"(CONFIG_SPL_TEXT_BASE));
+       }
+
+       /* Hereby, the code runs from (S)RAM, copy U-Boot and execute it. */
+       arch_cpu_init();
+       pxa2xx_dram_init();
+       onenand_spl_load_image(CONFIG_SPL_ONENAND_LOAD_ADDR,
+                               CONFIG_SPL_ONENAND_LOAD_SIZE,
+                               (void *)CONFIG_SYS_TEXT_BASE);
+       asm volatile("mov pc, %0" : : "r"(CONFIG_SYS_TEXT_BASE));
+
+       for (;;)
+               ;
+}
+
+void __attribute__((noreturn)) hang(void)
+{
+       for (;;)
+               ;
+}
+
+void icache_disable(void) {}
+void dcache_disable(void) {}
diff --git a/board/vpac270/u-boot-spl.lds b/board/vpac270/u-boot-spl.lds
new file mode 100644 (file)
index 0000000..1958c2f
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * January 2004 - Changed to support H4 device
+ * Copyright (c) 2004-2008 Texas Instruments
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@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
+{
+       . = CONFIG_SPL_TEXT_BASE;
+       .text.0 :
+       {
+               arch/arm/cpu/pxa/start.o                (.text*)
+               board/vpac270/libvpac270.o              (.text*)
+               drivers/mtd/onenand/libonenand.o        (.text*)
+       }
+
+
+       /* Start of the rest of the SPL */
+       . = CONFIG_SPL_TEXT_BASE + 0x800;
+
+       .text.1 :
+       {
+               *(.text*)
+       }
+
+       . = ALIGN(4);
+       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+
+       . = ALIGN(4);
+       .data : {
+               *(.data)
+       }
+
+       . = ALIGN(4);
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       . = ALIGN(0x800);
+
+       _end = .;
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               __bss_end__ = .;
+       }
+
+       /DISCARD/ : { *(.bss*) }
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynsym*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.hash*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
+}
index 43bbdff70e23fb4d5bb1a644552be130bb733d47..dfdab9b6f683fc55df0292378483849f3aa663c1 100644 (file)
@@ -21,6 +21,8 @@
 
 #include <common.h>
 #include <asm/arch/hardware.h>
+#include <asm/arch/regs-mmc.h>
+#include <asm/arch/pxa.h>
 #include <netdev.h>
 #include <serial.h>
 #include <asm/io.h>
@@ -53,10 +55,11 @@ struct serial_device *default_serial_console(void)
        return &serial_ffuart_device;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+#ifndef        CONFIG_ONENAND
+       pxa2xx_dram_init();
+#endif
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
@@ -72,6 +75,14 @@ void dram_init_banksize(void)
 #endif
 }
 
+#ifdef CONFIG_CMD_MMC
+int board_mmc_init(bd_t *bis)
+{
+       pxa_mmc_register(0);
+       return 0;
+}
+#endif
+
 #ifdef CONFIG_CMD_USB
 int usb_board_init(void)
 {
index 6cb0acaa79fe4b0f8cd48c131eb41654c3231ab0..836c87e1a9d3a2474b891d76ca8178f10bcc2f3b 100644 (file)
@@ -220,7 +220,7 @@ static ulong flash_get_size (FPW *addr, flash_info_t *info)
 
 int flash_erase (flash_info_t *info, int s_first, int s_last)
 {
-       int flag, prot, sect;
+       int prot, sect;
        ulong type, start;
        int rcode = 0;
 
@@ -255,7 +255,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
        }
 
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       disable_interrupts();
 
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect <= s_last; sect++) {
@@ -389,7 +389,6 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
 {
        FPWV *addr = (FPWV *) dest;
        ulong status;
-       int flag;
        ulong start;
 
        /* Check if Flash is (sufficiently) erased */
@@ -398,7 +397,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
                return (2);
        }
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       disable_interrupts();
 
        *addr = (FPW) 0x00400040;       /* write setup */
        *addr = data;
index 40b0f3b30e21b319581350fb58e95da05ec156c4..a4acf6c766aa15d24cf54f9c7bf000b0b5876619 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <common.h>
 #include <netdev.h>
+#include <asm/arch/pxa.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -59,10 +60,9 @@ int board_late_init(void)
        return 0;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
diff --git a/board/xm250/flash.c b/board/xm250/flash.c
deleted file mode 100644 (file)
index e825aba..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * (C) Copyright 2001
- * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
- *
- * (C) Copyright 2001-2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <linux/byteorder/swab.h>
-
-
-flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];   /* info for FLASH chips    */
-
-/* Board support for 1 or 2 flash devices */
-#define FLASH_PORT_WIDTH32
-#undef FLASH_PORT_WIDTH16
-
-#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
-
-/* Intel-compatible flash ID */
-#define INTEL_COMPAT  0x00890089
-#define INTEL_ALT     0x00B000B0
-
-/* Intel-compatible flash commands */
-#define INTEL_PROGRAM 0x00100010
-#define INTEL_ERASE   0x00200020
-#define INTEL_CLEAR   0x00500050
-#define INTEL_LOCKBIT 0x00600060
-#define INTEL_PROTECT 0x00010001
-#define INTEL_STATUS  0x00700070
-#define INTEL_READID  0x00900090
-#define INTEL_CONFIRM 0x00D000D0
-#define INTEL_RESET   0xFFFFFFFF
-
-/* Intel-compatible flash status bits */
-#define INTEL_FINISHED 0x00800080
-#define INTEL_OK       0x00800080
-
-#define FPW       FLASH_PORT_WIDTH
-#define FPWV   FLASH_PORT_WIDTHV
-
-#define mb() __asm__ __volatile__ ("" : : : "memory")
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-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);
-
-/*-----------------------------------------------------------------------
- */
-
-unsigned long flash_init (void)
-{
-       int i;
-       ulong size = 0;
-
-       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) {
-               switch (i) {
-               case 0:
-                       flash_get_size ((FPW *) PHYS_FLASH_1, &flash_info[i]);
-                       flash_get_offsets (PHYS_FLASH_1, &flash_info[i]);
-                       break;
-               case 1:
-                       flash_get_size ((FPW *) PHYS_FLASH_2, &flash_info[i]);
-                       flash_get_offsets (PHYS_FLASH_2, &flash_info[i]);
-                       break;
-               default:
-                       panic ("configured to many flash banks!\n");
-                       break;
-               }
-               size += flash_info[i].size;
-       }
-
-       /* Protect monitor and environment sectors
-        */
-       flash_protect ( FLAG_PROTECT_SET,
-                       CONFIG_SYS_FLASH_BASE,
-                       CONFIG_SYS_FLASH_BASE + monitor_flash_len - 1,
-                       &flash_info[0] );
-
-       flash_protect ( FLAG_PROTECT_SET,
-                       CONFIG_ENV_ADDR,
-                       CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1, &flash_info[0] );
-
-       return size;
-}
-
-/*-----------------------------------------------------------------------
- */
-static void flash_get_offsets (ulong base, flash_info_t *info)
-{
-       int i;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               return;
-       }
-
-       if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) {
-               for (i = 0; i < info->sector_count; i++) {
-                       info->start[i] = base + (i * PHYS_FLASH_SECT_SIZE);
-                       info->protect[i] = 0;
-               }
-       }
-}
-
-/*-----------------------------------------------------------------------
- */
-void flash_print_info (flash_info_t *info)
-{
-       int i;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               printf ("missing or unknown FLASH type\n");
-               return;
-       }
-
-       switch (info->flash_id & FLASH_VENDMASK) {
-       case FLASH_MAN_INTEL:
-               printf ("INTEL ");
-               break;
-       default:
-               printf ("Unknown Vendor ");
-               break;
-       }
-
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_28F128J3A:
-               printf ("28F128J3A\n");
-               break;
-
-       case FLASH_28F640J3A:
-               printf ("28F640J3A\n");
-               break;
-       default:
-               printf ("Unknown Chip Type\n");
-               break;
-       }
-
-       printf ("  Size: %ld MB in %d Sectors\n",
-                       info->size >> 20, info->sector_count);
-
-       printf ("  Sector Start Addresses:");
-       for (i = 0; i < info->sector_count; ++i) {
-               if ((i % 5) == 0)
-                       printf ("\n   ");
-               printf (" %08lX%s",
-                       info->start[i],
-                       info->protect[i] ? " (RO)" : "     ");
-       }
-       printf ("\n");
-       return;
-}
-
-/*
- * The following code cannot be run from FLASH!
- */
-static ulong flash_get_size (FPW *addr, flash_info_t *info)
-{
-       volatile FPW value;
-
-       /* Write auto select command: read Manufacturer ID */
-       addr[0x5555] = (FPW) 0x00AA00AA;
-       addr[0x2AAA] = (FPW) 0x00550055;
-       addr[0x5555] = (FPW) 0x00900090;
-
-       mb ();
-       value = addr[0];
-
-       switch (value) {
-
-       case (FPW) INTEL_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  */
-       }
-
-       mb ();
-       value = addr[1];                        /* device ID        */
-
-       switch (value) {
-
-       case (FPW) INTEL_ID_28F128J3A:
-               info->flash_id += FLASH_28F128J3A;
-               info->sector_count = 128;
-               info->size = 0x02000000;
-               break;                          /* => 32 MB     */
-
-       case (FPW) INTEL_ID_28F640J3A:
-               info->flash_id += FLASH_28F640J3A;
-               info->sector_count = 64;
-               info->size = 0x01000000;
-               break;                          /* => 16 MB     */
-
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               break;
-       }
-
-       if (info->sector_count > CONFIG_SYS_MAX_FLASH_SECT) {
-               printf ("** ERROR: sector count %d > max (%d) **\n",
-                       info->sector_count, CONFIG_SYS_MAX_FLASH_SECT);
-               info->sector_count = CONFIG_SYS_MAX_FLASH_SECT;
-       }
-
-       addr[0] = (FPW) 0x00FF00FF;             /* restore read mode */
-
-       return (info->size);
-}
-
-
-/*-----------------------------------------------------------------------
- */
-
-int flash_erase (flash_info_t *info, int s_first, int s_last)
-{
-       int flag, prot, sect;
-       ulong type, start;
-       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;
-       }
-
-       type = (info->flash_id & FLASH_VENDMASK);
-       if ((type != FLASH_MAN_INTEL)) {
-               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");
-       }
-
-       /* 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 */
-                       FPWV *addr = (FPWV *) (info->start[sect]);
-                       FPW status;
-
-                       printf ("Erasing sector %2d ... ", sect);
-
-                       /* arm simple, non interrupt dependent timer */
-                       start = get_timer(0);
-
-                       *addr = (FPW) 0x00500050;       /* clear status register */
-                       *addr = (FPW) 0x00200020;       /* erase setup */
-                       *addr = (FPW) 0x00D000D0;       /* erase confirm */
-
-                       while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
-                               if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
-                                       printf ("Timeout\n");
-                                       *addr = (FPW) 0x00B000B0;       /* suspend erase     */
-                                       *addr = (FPW) 0x00FF00FF;       /* reset to read mode */
-                                       rcode = 1;
-                                       break;
-                               }
-                       }
-
-                       *addr = 0x00500050;     /* clear status register cmd.   */
-                       *addr = 0x00FF00FF;     /* resest to read mode          */
-
-                       printf (" done\n");
-               }
-       }
-       return rcode;
-}
-
-/*-----------------------------------------------------------------------
- * Copy memory to flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- * 4 - Flash not identified
- */
-
-int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
-{
-       ulong cp, wp;
-       FPW data;
-       int count, i, l, rc, port_width;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               return 4;
-       }
-/* get lower word aligned address */
-#ifdef FLASH_PORT_WIDTH16
-       wp = (addr & ~1);
-       port_width = 2;
-#else
-       wp = (addr & ~3);
-       port_width = 4;
-#endif
-
-       /*
-        * 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 < port_width && cnt > 0; ++i) {
-                       data = (data << 8) | *src++;
-                       --cnt;
-                       ++cp;
-               }
-               for (; cnt == 0 && i < port_width; ++i, ++cp) {
-                       data = (data << 8) | (*(uchar *) cp);
-               }
-
-               if ((rc = write_data (info, wp, SWAP (data))) != 0) {
-                       return (rc);
-               }
-               wp += port_width;
-       }
-
-       /*
-        * handle word aligned part
-        */
-       count = 0;
-       while (cnt >= port_width) {
-               data = 0;
-               for (i = 0; i < port_width; ++i) {
-                       data = (data << 8) | *src++;
-               }
-               if ((rc = write_data (info, wp, SWAP (data))) != 0) {
-                       return (rc);
-               }
-               wp += port_width;
-               cnt -= port_width;
-               if (count++ > 0x800) {
-                       spin_wheel ();
-                       count = 0;
-               }
-       }
-
-       if (cnt == 0) {
-               return (0);
-       }
-
-       /*
-        * handle unaligned tail bytes
-        */
-       data = 0;
-       for (i = 0, cp = wp; i < port_width && cnt > 0; ++i, ++cp) {
-               data = (data << 8) | *src++;
-               --cnt;
-       }
-       for (; i < port_width; ++i, ++cp) {
-               data = (data << 8) | (*(uchar *) cp);
-       }
-
-       return (write_data (info, wp, SWAP (data)));
-}
-
-/*-----------------------------------------------------------------------
- * 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, ulong dest, FPW data)
-{
-       FPWV *addr = (FPWV *) dest;
-       ulong status;
-       int flag;
-       ulong start;
-
-       /* 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) 0x00400040;       /* write setup */
-       *addr = data;
-
-       /* arm simple, non interrupt dependent timer */
-       start = get_timer(0);
-
-       /* wait while polling the status register */
-       while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
-               if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
-                       *addr = (FPW) 0x00FF00FF;       /* restore read mode */
-                       return (1);
-               }
-       }
-
-       *addr = (FPW) 0x00FF00FF;       /* restore read mode */
-
-       return (0);
-}
-
-void inline spin_wheel (void)
-{
-       static int p = 0;
-       static char w[] = "\\/-";
-
-       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;
-       vu_long *addr = (vu_long *)(info->start[sector]);
-       int flag = disable_interrupts();
-       ulong start;
-
-       *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) > CONFIG_SYS_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 = (vu_long *)(info->start[i]);
-                               *addr = INTEL_LOCKBIT;  /* Sector lock bit */
-                               *addr = INTEL_PROTECT;  /* set */
-                               while ((*addr & INTEL_FINISHED) != INTEL_FINISHED)
-                               {
-                                       if (get_timer(start) > CONFIG_SYS_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;
-}
diff --git a/board/xm250/xm250.c b/board/xm250/xm250.c
deleted file mode 100644 (file)
index 3188cf2..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * (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>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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/arch/pxa-regs.h>
-#include <common.h>
-#include <netdev.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/* ------------------------------------------------------------------------- */
-
-/* local prototypes */
-
-inline void sleep (int i);
-
-inline void
-/**********************************************************/
-sleep (int i)
-/**********************************************************/
-{
-       while (i--) {
-               udelay (1000000);
-       }
-}
-
-/*
- * Miscelaneous platform dependent initialisations
- */
-
-int
-/**********************************************************/
-board_init (void)
-/**********************************************************/
-{
-       /* We have RAM, disable cache */
-       dcache_disable();
-       icache_disable();
-
-       /* arch number of MicroSys XM250 */
-       gd->bd->bi_arch_number = MACH_TYPE_XM250;
-
-       /* adress of boot parameters */
-       gd->bd->bi_boot_params = 0xa0000100;
-
-       return 0;
-}
-
-extern void pxa_dram_init(void);
-int dram_init(void)
-{
-       pxa_dram_init();
-       gd->ram_size = PHYS_SDRAM_1_SIZE;
-       return 0;
-}
-
-void dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-}
-
-#ifdef CONFIG_CMD_NET
-int board_eth_init(bd_t *bis)
-{
-       int rc = 0;
-#ifdef CONFIG_SMC91111
-       rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
-       return rc;
-}
-#endif
index 18cb85faf3371797bb18a10ee1fab9427ade3deb..272e59b63a5d46b3f31e0857bf284454eaff16c0 100644 (file)
@@ -40,7 +40,6 @@ DECLARE_GLOBAL_DATA_PTR;
 
 extern flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips    */
 extern env_t *env_ptr;
-extern uchar default_environment[];
 
 ulong flash_get_size(ulong base, int banknum);
 void env_crc_update(void);
index 9e6a0d51c4e8d1e0eddc1cdf41aac20a109c6a45..b093c2f51f89fb73a129d5aa764f3a60472f79ef 100644 (file)
@@ -27,6 +27,7 @@
 #include <command.h>
 #include <serial.h>
 #include <asm/arch/hardware.h>
+#include <asm/arch/pxa.h>
 #include <spi.h>
 #include <asm/io.h>
 
@@ -65,10 +66,9 @@ struct serial_device *default_serial_console (void)
        return &serial_stuart_device;
 }
 
-extern void pxa_dram_init(void);
 int dram_init(void)
 {
-       pxa_dram_init();
+       pxa2xx_dram_init();
        gd->ram_size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
index 8b7a03bbc888de8f6cdb3071b3517bb93883cada..b678547441438a9e970928d813a1d1b42d2a6ec6 100644 (file)
@@ -35,7 +35,7 @@
 # Target                     ARCH        CPU         Board name          Vendor                SoC         Options
 ###########################################################################################################
 
-integratorcp_cm1136          arm         arm1136     integrator          armltd         -           integratorcp
+integratorcp_cm1136          arm         arm1136     integrator          armltd         -           integratorcp:CM1136
 qong                         arm         arm1136     -                   davedenx       mx31
 mx31ads                      arm         arm1136     -                   freescale      mx31
 imx31_litekit                arm         arm1136     -                   logicpd        mx31
@@ -47,9 +47,9 @@ flea3                        arm         arm1136     -                   CarMedi
 mx35pdk                      arm         arm1136     -                   freescale      mx35
 omap2420h4                   arm         arm1136     -                   ti             omap24xx
 tnetv107x_evm                arm         arm1176     tnetv107xevm        ti             tnetv107x
-integratorap_cm720t          arm         arm720t     integrator          armltd         -           integratorap
-integratorap_cm920t          arm         arm920t     integrator          armltd         -           integratorap
-integratorcp_cm920t          arm         arm920t     integrator          armltd         -           integratorcp
+integratorap_cm720t          arm         arm720t     integrator          armltd         -           integratorap:CM720T
+integratorap_cm920t          arm         arm920t     integrator          armltd         -           integratorap:CM920T
+integratorcp_cm920t          arm         arm920t     integrator          armltd         -           integratorcp:CM920T
 a320evb                      arm         arm920t     -                   faraday        a320
 at91rm9200ek                 arm         arm920t     at91rm9200ek        atmel          at91        at91rm9200ek
 at91rm9200ek_ram             arm         arm920t     at91rm9200ek        atmel          at91        at91rm9200ek:RAMBOOT
@@ -63,8 +63,8 @@ cm41xx                       arm         arm920t     -                   -
 VCMA9                        arm         arm920t     vcma9               mpl            s3c24x0
 smdk2410                     arm         arm920t     -                   samsung        s3c24x0
 omap1510inn                  arm         arm925t     -                   ti
-integratorap_cm926ejs        arm         arm926ejs   integrator          armltd         -           integratorap
-integratorcp_cm926ejs        arm         arm926ejs   integrator          armltd         -           integratorcp
+integratorap_cm926ejs        arm         arm926ejs   integrator          armltd         -           integratorap:CM926EJ_S
+integratorcp_cm926ejs        arm         arm926ejs   integrator          armltd         -           integratorcp:CM924EJ_S
 versatileqemu                arm         arm926ejs   versatile           armltd         versatile   versatile:ARCH_VERSATILE_QEMU,ARCH_VERSATILE_PB
 versatilepb                  arm         arm926ejs   versatile           armltd         versatile   versatile:ARCH_VERSATILE_PB
 versatileab                  arm         arm926ejs   versatile           armltd         versatile   versatile:ARCH_VERSATILE_AB
@@ -110,6 +110,7 @@ cpu9G20                      arm         arm926ejs   cpu9260             eukrea
 cpu9G20_nand                 arm         arm926ejs   cpu9260             eukrea         at91        cpu9260:CPU9G20,NANDBOOT
 cpu9G20_128M                 arm         arm926ejs   cpu9260             eukrea         at91        cpu9260:CPU9G20,CPU9G20_128M
 cpu9G20_nand_128M            arm         arm926ejs   cpu9260             eukrea         at91        cpu9260:CPU9G20,CPU9G20_128M,NANDBOOT
+ethernut5                    arm         arm926ejs   ethernut5           egnite         at91        ethernut5:AT91SAM9XE
 top9000eval_xe               arm         arm926ejs   top9000             emk            at91        top9000:EVAL9000
 top9000su_xe                 arm         arm926ejs   top9000             emk            at91        top9000:SU9000
 meesc                        arm         arm926ejs   meesc               esd            at91        meesc:AT91SAM9263,SYS_USE_NANDFLASH
@@ -121,6 +122,7 @@ pm9263                       arm         arm926ejs   pm9263              ronetix
 pm9g45                       arm         arm926ejs   pm9g45              ronetix        at91        pm9g45:AT91SAM9G45
 da830evm                     arm         arm926ejs   da8xxevm            davinci        davinci
 da850evm                     arm         arm926ejs   da8xxevm            davinci        davinci
+da850_am18xxevm              arm         arm926ejs   da8xxevm            davinci        davinci
 cam_enc_4xx                  arm         arm926ejs   cam_enc_4xx         ait            davinci     cam_enc_4xx
 hawkboard                    arm         arm926ejs   da8xxevm            davinci        davinci
 hawkboard_nand               arm         arm926ejs   da8xxevm            davinci        davinci     hawkboard:NAND_U_BOOT
@@ -130,17 +132,20 @@ davinci_dm355evm             arm         arm926ejs   dm355evm            davinci
 davinci_dm355leopard         arm         arm926ejs   dm355leopard        davinci        davinci
 davinci_dm365evm             arm         arm926ejs   dm365evm            davinci        davinci
 davinci_dm6467evm            arm         arm926ejs   dm6467evm           davinci        davinci
+davinci_dm6467Tevm           arm         arm926ejs   dm6467evm           davinci        davinci
 davinci_dvevm                arm         arm926ejs   dvevm               davinci        davinci
 davinci_schmoogie            arm         arm926ejs   schmoogie           davinci        davinci
 davinci_sffsdr               arm         arm926ejs   sffsdr              davinci        davinci
 davinci_sonata               arm         arm926ejs   sonata              davinci        davinci
+enbw_cmc                     arm         arm926ejs   enbw_cmc            enbw           davinci
 km_kirkwood                  arm         arm926ejs   km_arm              keymile        kirkwood       km_kirkwood:KM_DISABLE_PCI
 km_kirkwood_pci              arm         arm926ejs   km_arm              keymile        kirkwood       km_kirkwood:KM_RECONFIG_XLX
 mgcoge3un                    arm         arm926ejs   km_arm              keymile        kirkwood
 portl2                       arm         arm926ejs   km_arm              keymile        kirkwood
-inetspace_v2                 arm         arm926ejs   netspace_v2         LaCie          kirkwood    netspace_v2:INETSPACE_V2
-netspace_v2                  arm         arm926ejs   netspace_v2         LaCie          kirkwood    netspace_v2:NETSPACE_V2
-netspace_max_v2              arm         arm926ejs   netspace_v2         LaCie          kirkwood    netspace_v2:NETSPACE_MAX_V2
+inetspace_v2                 arm         arm926ejs   netspace_v2         LaCie          kirkwood       lacie_kw:INETSPACE_V2
+net2big_v2                   arm         arm926ejs   net2big_v2          LaCie          kirkwood       lacie_kw:NET2BIG_V2
+netspace_v2                  arm         arm926ejs   netspace_v2         LaCie          kirkwood       lacie_kw:NETSPACE_V2
+netspace_max_v2              arm         arm926ejs   netspace_v2         LaCie          kirkwood       lacie_kw:NETSPACE_MAX_V2
 dreamplug                    arm         arm926ejs   -                   Marvell        kirkwood
 guruplug                     arm         arm926ejs   -                   Marvell        kirkwood
 mv88f6281gtw_ge              arm         arm926ejs   -                   Marvell        kirkwood
@@ -156,13 +161,14 @@ tx25                         arm         arm926ejs   tx25                karo
 zmx25                        arm         arm926ejs   zmx25               syteco         mx25
 imx27lite                    arm         arm926ejs   imx27lite           logicpd        mx27
 magnesium                    arm         arm926ejs   imx27lite           logicpd        mx27
+m28evk                       arm         arm926ejs   -                   denx           mx28
 nhk8815                      arm         arm926ejs   nhk8815             st             nomadik
 nhk8815_onenand              arm         arm926ejs   nhk8815             st             nomadik       nhk8815:BOOT_ONENAND
 omap5912osk                  arm         arm926ejs   -                   ti             omap
 edminiv2                     arm         arm926ejs   -                   LaCie          orion5x
 dkb                         arm         arm926ejs   -                   Marvell        pantheon
-integratorap_cm946es         arm         arm946es    integrator          armltd         -               integratorap
-integratorcp_cm946es         arm         arm946es    integrator          armltd         -               integratorcp
+integratorap_cm946es         arm         arm946es    integrator          armltd         -               integratorap:CM946ES
+integratorcp_cm946es         arm         arm946es    integrator          armltd         -               integratorcp:CM946ES
 ca9x4_ct_vxp                 arm         armv7       vexpress            armltd
 highbank                     arm         armv7       highbank            -              highbank
 am335x_evm                   arm         armv7       am335x              ti             am33xx
@@ -193,6 +199,7 @@ omap3_sdp3430                arm         armv7       sdp3430             ti
 devkit8000                   arm         armv7       devkit8000          timll          omap3
 omap4_panda                  arm         armv7       panda               ti             omap4
 omap4_sdp4430                arm         armv7       sdp4430             ti             omap4
+omap5_evm                    arm         armv7       omap5_evm           ti            omap5
 s5p_goni                     arm         armv7       goni                samsung        s5pc1xx
 smdkc100                     arm         armv7       smdkc100            samsung        s5pc1xx
 origen                      arm         armv7       origen              samsung        s5pc2xx
@@ -210,15 +217,10 @@ actux3                       arm         ixp
 actux4                       arm         ixp
 dvlhost                      arm         ixp
 balloon3                     arm         pxa
-cerf250                      arm         pxa
-colibri_pxa270               arm         pxa
-cradle                       arm         pxa
-csb226                       arm         pxa
-innokom                      arm         pxa
+colibri_pxa270               arm         pxa         -                   toradex
 lubbock                      arm         pxa
 palmld                       arm         pxa
 palmtc                       arm         pxa
-pleb2                        arm         pxa
 polaris                      arm         pxa         trizepsiv           -              -           trizepsiv:POLARIS
 pxa255_idp                   arm         pxa
 trizepsiv                    arm         pxa
@@ -226,7 +228,6 @@ vpac270_nor_128              arm         pxa         vpac270             -
 vpac270_nor_256              arm         pxa         vpac270             -              -           vpac270:NOR,RAM_256M
 vpac270_ond_256              arm         pxa         vpac270             -              -           vpac270:ONENAND,RAM_256M
 xaeniax                      arm         pxa
-xm250                        arm         pxa
 zipitz2                      arm         pxa
 jornada                      arm         sa1100
 atngw100                     avr32       at32ap      -                   atmel          at32ap700x
@@ -346,6 +347,7 @@ vct_platinumavc_onenand_small mips       mips32      vct                 microna
 qi_lb60                      mips        xburst      qi_lb60             qi
 nios2-generic                nios2       nios2       nios2-generic       altera
 adp-ag101                    nds32       n1213       adp-ag101           AndesTech      ag101
+adp-ag101p                   nds32       n1213       adp-ag101p          AndesTech      ag101
 PCI5441                      nios2       nios2       pci5441             psyent
 PK1C20                       nios2       nios2       pk1c20              psyent
 EVB64260                     powerpc     74xx_7xx    evb64260            -              -           EVB64260
@@ -714,6 +716,8 @@ P2020RDB-PC_36BIT            powerpc     mpc85xx     p1_p2_rdb_pc        freesca
 P2020RDB-PC_36BIT_NAND       powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P2020RDB,36BIT,NAND
 P2020RDB-PC_36BIT_SDCARD     powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P2020RDB,36BIT,SDCARD
 P2020RDB-PC_36BIT_SPIFLASH   powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P2020RDB,36BIT,SPIFLASH
+P2020COME_SDCARD             powerpc     mpc85xx     p2020come           freescale      -           P2020COME:SDCARD
+P2020COME_SPIFLASH           powerpc     mpc85xx     p2020come           freescale      -           P2020COME:SPIFLASH
 P2041RDB                     powerpc     mpc85xx     p2041rdb            freescale
 P2041RDB_SDCARD              powerpc     mpc85xx     p2041rdb            freescale      -           P2041RDB:RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
 P2041RDB_SECURE_BOOT         powerpc     mpc85xx     p2041rdb            freescale      -           P2041RDB:SECURE_BOOT
@@ -723,6 +727,9 @@ P3041DS_NAND                     powerpc     mpc85xx     corenet_ds          freescale      -
 P3041DS_SDCARD              powerpc     mpc85xx     corenet_ds          freescale      -           P3041DS:RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
 P3041DS_SECURE_BOOT          powerpc     mpc85xx     corenet_ds          freescale      -           P3041DS:SECURE_BOOT
 P3041DS_SPIFLASH            powerpc     mpc85xx     corenet_ds          freescale      -           P3041DS:RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
+P3060QDS                    powerpc     mpc85xx     p3060qds            freescale
+P3060QDS_NAND               powerpc     mpc85xx     p3060qds            freescale      -           P3060QDS:RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF80000
+P3060QDS_SECURE_BOOT         powerpc     mpc85xx     p3060qds            freescale      -           P3060QDS:SECURE_BOOT
 P4080DS                      powerpc     mpc85xx     corenet_ds          freescale
 P4080DS_SDCARD              powerpc     mpc85xx     corenet_ds          freescale      -           P4080DS:RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
 P4080DS_SECURE_BOOT          powerpc     mpc85xx     corenet_ds          freescale      -           P4080DS:SECURE_BOOT
@@ -951,6 +958,7 @@ dlvision-10g                 powerpc     ppc4xx      405ep               gdsys
 gdppc440etx                  powerpc     ppc4xx      -                   gdsys
 intip                        powerpc     ppc4xx      intip               gdsys          -           intip:INTIB
 io                           powerpc     ppc4xx      405ep               gdsys
+io64                         powerpc     ppc4xx      405ex               gdsys
 iocon                        powerpc     ppc4xx      405ep               gdsys
 neo                          powerpc     ppc4xx      -                   gdsys
 icon                         powerpc     ppc4xx      -                   mosaixtech
@@ -984,6 +992,7 @@ sh7763rdp                    sh          sh4         sh7763rdp           renesas
 sh7785lcr                    sh          sh4         sh7785lcr           renesas        -
 sh7785lcr_32bit              sh          sh4         sh7785lcr           renesas        -           sh7785lcr:SH_32BIT=1
 MigoR                        sh          sh4         MigoR               renesas        -
+ecovec                       sh          sh4         ecovec              renesas        -
 grsim_leon2                  sparc       leon2       -                   gaisler
 gr_cpci_ax2000               sparc       leon3       -                   gaisler
 gr_ep2s60                    sparc       leon3       -                   gaisler
index 1b672ad96e8b28186da88351955c5b374909b22e..1be7236035c49eb30eab81549913c1436dbdc8e0 100644 (file)
@@ -152,6 +152,7 @@ COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.o
 COBJS-$(CONFIG_CMD_TERMINAL) += cmd_terminal.o
 COBJS-$(CONFIG_CMD_TIME) += cmd_time.o
 COBJS-$(CONFIG_SYS_HUSH_PARSER) += cmd_test.o
+COBJS-$(CONFIG_CMD_TPM) += cmd_tpm.o
 COBJS-$(CONFIG_CMD_TSI148) += cmd_tsi148.o
 COBJS-$(CONFIG_CMD_UBI) += cmd_ubi.o
 COBJS-$(CONFIG_CMD_UBIFS) += cmd_ubifs.o
index 688b2382a7d59ccb95d7926e3123bc5882b3fa4e..67cb0dad8345c8baf1ef563c53ea52aedb080683 100644 (file)
  */
 #include <common.h>
 #include <command.h>
+#include <linux/compiler.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static void print_num(const char *, ulong);
+__maybe_unused
+static void print_num(const char *name, ulong value)
+{
+       printf("%-12s= 0x%08lX\n", name, value);
+}
 
-#if !(defined(CONFIG_ARM) || defined(CONFIG_M68K) || defined(CONFIG_SANDBOX)) \
-       || defined(CONFIG_CMD_NET)
-#define HAVE_PRINT_ETH
-static void print_eth(int idx);
-#endif
+__maybe_unused
+static void print_eth(int idx)
+{
+       char name[10], *val;
+       if (idx)
+               sprintf(name, "eth%iaddr", idx);
+       else
+               strcpy(name, "ethaddr");
+       val = getenv(name);
+       if (!val)
+               val = "(not set)";
+       printf("%-12s= %s\n", name, val);
+}
 
-#if (!defined(CONFIG_ARM) && !defined(CONFIG_X86) && !defined(CONFIG_SANDBOX))
-#define HAVE_PRINT_LNUM
-static void print_lnum(const char *, u64);
-#endif
+__maybe_unused
+static void print_lnum(const char *name, u64 value)
+{
+       printf("%-12s= 0x%.8llX\n", name, value);
+}
+
+__maybe_unused
+static void print_mhz(const char *name, unsigned long hz)
+{
+       char buf[32];
+
+       printf("%-12s= %6s MHz\n", name, strmhz(buf, hz));
+}
 
 #if defined(CONFIG_PPC)
-static void print_mhz(const char *, unsigned long);
 
 int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
@@ -208,8 +229,6 @@ int do_bdinfo(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
 
 #elif defined(CONFIG_M68K)
 
-static void print_mhz(const char *, unsigned long);
-
 int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        bd_t *bd = gd->bd;
@@ -257,8 +276,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 #elif defined(CONFIG_BLACKFIN)
 
-static void print_mhz(const char *, unsigned long);
-
 int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        bd_t *bd = gd->bd;
@@ -377,8 +394,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 #elif defined(CONFIG_X86)
 
-static void print_mhz(const char *, unsigned long);
-
 int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        int i;
@@ -464,46 +479,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  #error "a case for this architecture does not exist!"
 #endif
 
-static void print_num(const char *name, ulong value)
-{
-       printf("%-12s= 0x%08lX\n", name, value);
-}
-
-#ifdef HAVE_PRINT_ETH
-static void print_eth(int idx)
-{
-       char name[10], *val;
-       if (idx)
-               sprintf(name, "eth%iaddr", idx);
-       else
-               strcpy(name, "ethaddr");
-       val = getenv(name);
-       if (!val)
-               val = "(not set)";
-       printf("%-12s= %s\n", name, val);
-}
-#endif
-
-#ifdef HAVE_PRINT_LNUM
-static void print_lnum(const char *name, u64 value)
-{
-       printf("%-12s= 0x%.8llX\n", name, value);
-}
-#endif
-
-#if    defined(CONFIG_PPC) || \
-       defined(CONFIG_M68K) || \
-       defined(CONFIG_BLACKFIN) || \
-       defined(CONFIG_X86)
-static void print_mhz(const char *name, unsigned long hz)
-{
-       char buf[32];
-
-       printf("%-12s= %6s MHz\n", name, strmhz(buf, hz));
-}
-#endif /* CONFIG_PPC */
-
-
 /* -------------------------------------------------------------------- */
 
 U_BOOT_CMD(
index 2bd62e24381802147454b981e2e7ba9265bddf0d..87b108f84254b8ab7e5ab939dda671d720d8186e 100644 (file)
@@ -15,7 +15,6 @@ DECLARE_GLOBAL_DATA_PTR;
 
 extern void show_regs __P ((struct pt_regs *));
 extern int run_command __P ((const char *, int));
-extern char console_buffer[];
 
 ulong dis_last_addr = 0;       /* Last address disassembled   */
 ulong dis_last_len = 20;       /* Default disassembler length */
index 23fc82fe4b4bff32a16365ac5d8a44219e5ae063..682f395b4d75f19173449581edced54ecc912845 100644 (file)
@@ -237,9 +237,7 @@ static int bmp_display(ulong addr, int x, int y)
        }
 
 #if defined(CONFIG_LCD)
-       extern int lcd_display_bitmap (ulong, int, int);
-
-       ret = lcd_display_bitmap ((unsigned long)bmp, x, y);
+       ret = lcd_display_bitmap((ulong)bmp, x, y);
 #elif defined(CONFIG_VIDEO)
        extern int video_display_bitmap (ulong, int, int);
 
index d301332d36ddb588819613f6fcf29f0bf3b9ba6c..d5745b14e2ce54427ce7153759b0f39a0bb8fa3f 100644 (file)
@@ -36,6 +36,7 @@
 #include <lmb.h>
 #include <linux/ctype.h>
 #include <asm/byteorder.h>
+#include <linux/compiler.h>
 
 #if defined(CONFIG_CMD_USB)
 #include <usb.h>
@@ -271,7 +272,13 @@ static int bootm_start(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
                return 1;
        }
 
+       if (images.os.type == IH_TYPE_KERNEL_NOLOAD) {
+               images.os.load = images.os.image_start;
+               images.ep += images.os.load;
+       }
+
        if (((images.os.type == IH_TYPE_KERNEL) ||
+            (images.os.type == IH_TYPE_KERNEL_NOLOAD) ||
             (images.os.type == IH_TYPE_MULTI)) &&
            (images.os.os == IH_OS_LINUX)) {
                /* find ramdisk */
@@ -312,7 +319,8 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
        ulong blob_end = os.end;
        ulong image_start = os.image_start;
        ulong image_len = os.image_len;
-       uint unc_len = CONFIG_SYS_BOOTM_LEN;
+       __maybe_unused uint unc_len = CONFIG_SYS_BOOTM_LEN;
+       int no_overlap = 0;
 #if defined(CONFIG_LZMA) || defined(CONFIG_LZO)
        int ret;
 #endif /* defined(CONFIG_LZMA) || defined(CONFIG_LZO) */
@@ -323,6 +331,7 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
        case IH_COMP_NONE:
                if (load == blob_start || load == image_start) {
                        printf("   XIP %s ... ", type_name);
+                       no_overlap = 1;
                } else {
                        printf("   Loading %s ... ", type_name);
                        memmove_wd((void *)load, (void *)image_start,
@@ -417,7 +426,7 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
        if (boot_progress)
                show_boot_progress(7);
 
-       if ((load < blob_end) && (*load_end > blob_start)) {
+       if (!no_overlap && (load < blob_end) && (*load_end > blob_start)) {
                debug("images.os.start = 0x%lX, images.os.end = 0x%lx\n",
                        blob_start, blob_end);
                debug("images.os.load = 0x%lx, load_end = 0x%lx\n", load,
@@ -795,7 +804,8 @@ static int fit_check_kernel(const void *fit, int os_noffset, int verify)
        }
 
        show_boot_progress(106);
-       if (!fit_image_check_type(fit, os_noffset, IH_TYPE_KERNEL)) {
+       if (!fit_image_check_type(fit, os_noffset, IH_TYPE_KERNEL) &&
+           !fit_image_check_type(fit, os_noffset, IH_TYPE_KERNEL_NOLOAD)) {
                puts("Not a kernel image\n");
                show_boot_progress(-106);
                return 0;
@@ -873,6 +883,7 @@ static void *boot_get_kernel(cmd_tbl_t *cmdtp, int flag, int argc,
                /* get os_data and os_len */
                switch (image_get_type(hdr)) {
                case IH_TYPE_KERNEL:
+               case IH_TYPE_KERNEL_NOLOAD:
                        *os_data = image_get_data(hdr);
                        *os_len = image_get_data_size(hdr);
                        break;
index 45fe66a7eeb3fb9a2f2ffb2c6f715bc6a8f844fb..568e22641354791764ec80262803e28f7b8b871d 100644 (file)
@@ -68,7 +68,6 @@ int do_setdcr (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
 
        /* DCR's value */
        int nbytes;
-       extern char console_buffer[];
 
        /* Validate arguments */
        if (argc < 2)
index 40d12f68829d5ce3c584d4918f9876d739b9e5a2..4fe410dd327d5a1b47d48615dd9dd1df9bf33a00 100644 (file)
@@ -428,8 +428,8 @@ int fdc_terminate(FDC_COMMAND_STRUCT *pCMD)
 int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG)
 {
   /* first seek to start address */
-       unsigned long len,lastblk,readblk,i,timeout,ii,offset;
-       unsigned char pcn,c,retriesrw,retriescal;
+       unsigned long len,readblk,i,timeout,ii,offset;
+       unsigned char c,retriesrw,retriescal;
        unsigned char *bufferw; /* working buffer */
        int sect_size;
        int flags;
@@ -442,18 +442,19 @@ int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT
        offset=0;
        if(fdc_seek(pCMD,pFG)==FALSE) {
                stop_fdc_drive(pCMD);
-               enable_interrupts();
+               if (flags)
+                       enable_interrupts();
                return FALSE;
        }
        if((pCMD->result[STATUS_0]&0x20)!=0x20) {
                printf("Seek error Status: %02X\n",pCMD->result[STATUS_0]);
                stop_fdc_drive(pCMD);
-               enable_interrupts();
+               if (flags)
+                       enable_interrupts();
                return FALSE;
        }
-       pcn=pCMD->result[STATUS_PCN]; /* current track */
        /* now determine the next seek point */
-       lastblk=pCMD->blnr + blocks;
+       /*      lastblk=pCMD->blnr + blocks; */
        /*      readblk=(pFG->head*pFG->sect)-(pCMD->blnr%(pFG->head*pFG->sect)); */
        readblk=pFG->sect-(pCMD->blnr%pFG->sect);
        PRINTF("1st nr of block possible read %ld start %ld\n",readblk,pCMD->blnr);
@@ -467,7 +468,8 @@ retryrw:
                pCMD->cmd[COMMAND]=FDC_CMD_READ;
                if(fdc_issue_cmd(pCMD,pFG)==FALSE) {
                        stop_fdc_drive(pCMD);
-                       enable_interrupts();
+                       if (flags)
+                               enable_interrupts();
                        return FALSE;
                }
                for (i=0;i<len;i++) {
@@ -488,14 +490,16 @@ retryrw:
                                        if(retriesrw++>FDC_RW_RETRIES) {
                                                if (retriescal++>FDC_CAL_RETRIES) {
                                                        stop_fdc_drive(pCMD);
-                                                       enable_interrupts();
+                                                       if (flags)
+                                                               enable_interrupts();
                                                        return FALSE;
                                                }
                                                else {
                                                        PRINTF(" trying to recalibrate Try %d\n",retriescal);
                                                        if(fdc_recalibrate(pCMD,pFG)==FALSE) {
                                                                stop_fdc_drive(pCMD);
-                                                               enable_interrupts();
+                                                               if (flags)
+                                                                       enable_interrupts();
                                                                return FALSE;
                                                        }
                                                        retriesrw=0;
@@ -528,7 +532,8 @@ retrycal:
                /* a seek is necessary */
                if(fdc_seek(pCMD,pFG)==FALSE) {
                        stop_fdc_drive(pCMD);
-                       enable_interrupts();
+                       if (flags)
+                               enable_interrupts();
                        return FALSE;
                }
                if((pCMD->result[STATUS_0]&0x20)!=0x20) {
@@ -536,10 +541,10 @@ retrycal:
                        stop_fdc_drive(pCMD);
                        return FALSE;
                }
-               pcn=pCMD->result[STATUS_PCN]; /* current track */
        }while(TRUE); /* start over */
        stop_fdc_drive(pCMD); /* switch off drive */
-       enable_interrupts();
+       if (flags)
+               enable_interrupts();
        return TRUE;
 }
 
index a0c5291bff475edb8e7241e3c3164abf2d7edee2..e79513985924d64da809c3f1201cc24e3b00e0b2 100644 (file)
@@ -449,7 +449,6 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const arg
        ulong   data;
        int     size = 1;
        int     nbytes;
-       extern char console_buffer[];
 
        if (argc != 3)
                return cmd_usage(cmdtp);
index 461ee1977d59d4e57f84203c514635b509cacb05..f7e76d6b680596610b85fb81291888a6e9c81c3d 100644 (file)
@@ -33,7 +33,6 @@
 #include <dataflash.h>
 #endif
 #include <watchdog.h>
-#include <asm/io.h>
 
 #ifdef CMD_MEM_DEBUG
 #define        PRINTF(fmt,args...)     printf (fmt ,##args)
@@ -142,13 +141,9 @@ int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 # endif
 
        {
-               ulong bytes = size * length;
-               void *buf = map_physmem(addr, bytes, MAP_WRBACK);
-
                /* Print the lines. */
-               print_buffer(addr, buf, size, length, DISP_LINE_LEN / size);
-               addr += bytes;
-               unmap_physmem(buf, bytes);
+               print_buffer(addr, (void*)addr, size, length, DISP_LINE_LEN/size);
+               addr += size*length;
        }
 #endif
 
@@ -982,7 +977,6 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[])
 {
        ulong   addr, i;
        int     nbytes, size;
-       extern char console_buffer[];
 
        if (argc != 2)
                return cmd_usage(cmdtp);
index 396a17135eb558205ff226d12d54389c6635b4a8..599535449ebf49066f0c5e5dd084e9fd760bd814 100644 (file)
@@ -125,7 +125,7 @@ static int env_print(char *name)
        }
 
        /* print whole list */
-       len = hexport_r(&env_htab, '\n', &res, 0);
+       len = hexport_r(&env_htab, '\n', &res, 0, 0, NULL);
 
        if (len > 0) {
                puts(res);
@@ -165,7 +165,8 @@ int do_env_print (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 }
 
 #ifdef CONFIG_CMD_GREPENV
-static int do_env_grep (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_env_grep(cmd_tbl_t *cmdtp, int flag,
+                      int argc, char * const argv[])
 {
        ENTRY *match;
        unsigned char matched[env_htab.size / 8];
@@ -199,8 +200,7 @@ static int do_env_grep (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
  * Set a new environment variable,
  * or replace or delete an existing one.
  */
-
-int _do_env_set (int flag, int argc, char * const argv[])
+int _do_env_set(int flag, int argc, char * const argv[])
 {
        bd_t  *bd = gd->bd;
        int   i, len;
@@ -211,7 +211,8 @@ int _do_env_set (int flag, int argc, char * const argv[])
        name = argv[1];
 
        if (strchr(name, '=')) {
-               printf("## Error: illegal character '=' in variable name \"%s\"\n", name);
+               printf("## Error: illegal character '=' in variable name"
+                      "\"%s\"\n", name);
                return 1;
        }
 
@@ -259,12 +260,12 @@ int _do_env_set (int flag, int argc, char * const argv[])
         */
        if (ep) {               /* variable exists */
 #ifndef CONFIG_ENV_OVERWRITE
-               if ((strcmp(name, "serial#") == 0) ||
-                   ((strcmp(name, "ethaddr") == 0)
+               if (strcmp(name, "serial#") == 0 ||
+                   (strcmp(name, "ethaddr") == 0
 #if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR)
-                    && (strcmp(ep->data, MK_STR(CONFIG_ETHADDR)) != 0)
+                    && strcmp(ep->data, MK_STR(CONFIG_ETHADDR)) != 0
 #endif /* CONFIG_OVERWRITE_ETHADDR_ONCE && CONFIG_ETHADDR */
-                   ) {
+                       )) {
                        printf("Can't overwrite \"%s\"\n", name);
                        return 1;
                }
@@ -284,8 +285,8 @@ int _do_env_set (int flag, int argc, char * const argv[])
                                        baudrate);
                                return 1;
                        }
-                       printf ("## Switch baudrate to %d bps and press ENTER ...\n",
-                               baudrate);
+                       printf("## Switch baudrate to %d bps and"
+                              "press ENTER ...\n", baudrate);
                        udelay(50000);
                        gd->baudrate = baudrate;
 #if defined(CONFIG_PPC) || defined(CONFIG_MCF52x2)
@@ -294,15 +295,13 @@ int _do_env_set (int flag, int argc, char * const argv[])
 
                        serial_setbrg();
                        udelay(50000);
-                       for (;;) {
-                               if (getc() == '\r')
-                                       break;
-                       }
+                       while (getc() != '\r')
+                               ;
                }
        }
 
        /* Delete only ? */
-       if ((argc < 3) || argv[2] == NULL) {
+       if (argc < 3 || argv[2] == NULL) {
                int rc = hdelete_r(name, &env_htab);
                return !rc;
        }
@@ -323,13 +322,13 @@ int _do_env_set (int flag, int argc, char * const argv[])
 
                while ((*s++ = *v++) != '\0')
                        ;
-               *(s-1) = ' ';
+               *(s - 1) = ' ';
        }
        if (s != value)
                *--s = '\0';
 
-       e.key  = name;
-       e.data = value;
+       e.key   = name;
+       e.data  = value;
        hsearch_r(e, ENTER, &ep, &env_htab);
        free(value);
        if (!ep) {
@@ -342,7 +341,6 @@ int _do_env_set (int flag, int argc, char * const argv[])
         * Some variables should be updated when the corresponding
         * entry in the environment is changed
         */
-
        if (strcmp(name, "ipaddr") == 0) {
                char *s = argv[2];      /* always use only one arg */
                char *e;
@@ -351,8 +349,9 @@ int _do_env_set (int flag, int argc, char * const argv[])
                for (addr = 0, i = 0; i < 4; ++i) {
                        ulong val = s ? simple_strtoul(s, &e, 10) : 0;
                        addr <<= 8;
-                       addr  |= (val & 0xFF);
-                       if (s) s = (*e) ? e+1 : e;
+                       addr  |= val & 0xFF;
+                       if (s)
+                               s = *e ? e + 1 : e;
                }
                bd->bi_ip_addr = htonl(addr);
                return 0;
@@ -373,7 +372,7 @@ int setenv(const char *varname, const char *varvalue)
 {
        const char * const argv[4] = { "setenv", varname, varvalue, NULL };
 
-       if ((varvalue == NULL) || (varvalue[0] == '\0'))
+       if (varvalue == NULL || varvalue[0] == '\0')
                return _do_env_set(0, 2, (char * const *)argv);
        else
                return _do_env_set(0, 3, (char * const *)argv);
@@ -405,7 +404,7 @@ int setenv_addr(const char *varname, const void *addr)
 {
        char str[17];
 
-       sprintf(str, "%x", (uintptr_t)addr);
+       sprintf(str, "%lx", (uintptr_t)addr);
        return setenv(varname, str);
 }
 
@@ -423,7 +422,6 @@ int do_env_set(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #if defined(CONFIG_CMD_ASKENV)
 int do_env_ask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       extern char console_buffer[CONFIG_SYS_CBSIZE];
        char message[CONFIG_SYS_CBSIZE];
        int size = CONFIG_SYS_CBSIZE - 1;
        int i, len, pos;
@@ -453,9 +451,10 @@ int do_env_ask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                        if (pos)
                                message[pos++] = ' ';
 
-                       strcpy(message+pos, argv[i]);
+                       strcpy(message + pos, argv[i]);
                        pos += strlen(argv[i]);
                }
+
                message[pos] = '\0';
                size = simple_strtoul(argv[argc - 1], NULL, 10);
                break;
@@ -516,20 +515,19 @@ int do_env_edit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  */
 char *getenv(const char *name)
 {
-       if (gd->flags & GD_FLG_ENV_READY) {     /* after import into hashtable */
+       if (gd->flags & GD_FLG_ENV_READY) { /* after import into hashtable */
                ENTRY e, *ep;
 
                WATCHDOG_RESET();
 
-               e.key  = name;
-               e.data = NULL;
+               e.key   = name;
+               e.data  = NULL;
                hsearch_r(e, FIND, &ep, &env_htab);
 
                return ep ? ep->data : NULL;
        }
 
        /* restricted capabilities before import */
-
        if (getenv_f(name, (char *)(gd->env_buf), sizeof(gd->env_buf)) > 0)
                return (char *)(gd->env_buf);
 
@@ -543,7 +541,7 @@ int getenv_f(const char *name, char *buf, unsigned len)
 {
        int i, nxt;
 
-       for (i = 0; env_get_char(i) != '\0'; i = nxt+1) {
+       for (i = 0; env_get_char(i) != '\0'; i = nxt + 1) {
                int val, n;
 
                for (nxt = i; env_get_char(nxt) != '\0'; ++nxt) {
@@ -557,7 +555,8 @@ int getenv_f(const char *name, char *buf, unsigned len)
 
                /* found; copy out */
                for (n = 0; n < len; ++n, ++buf) {
-                       if ((*buf = env_get_char(val++)) == '\0')
+                       *buf = env_get_char(val++);
+                       if (*buf == '\0')
                                return n;
                }
 
@@ -569,6 +568,7 @@ int getenv_f(const char *name, char *buf, unsigned len)
 
                return n;
        }
+
        return -1;
 }
 
@@ -593,11 +593,8 @@ ulong getenv_ulong(const char *name, int base, ulong default_val)
 }
 
 #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
-
 int do_env_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       extern char *env_name_spec;
-
        printf("Saving Environment to %s...\n", env_name_spec);
 
        return saveenv() ? 1 : 0;
@@ -608,7 +605,6 @@ U_BOOT_CMD(
        "save environment variables to persistent storage",
        ""
 );
-
 #endif
 
 
@@ -617,29 +613,32 @@ U_BOOT_CMD(
  *
  * s1 is either a simple 'name', or a 'name=value' pair.
  * i2 is the environment index for a 'name2=value2' pair.
- * If the names match, return the index for the value2, else NULL.
+ * If the names match, return the index for the value2, else -1.
  */
-
 int envmatch(uchar *s1, int i2)
 {
        while (*s1 == env_get_char(i2++))
                if (*s1++ == '=')
                        return i2;
+
        if (*s1 == '\0' && env_get_char(i2-1) == '=')
                return i2;
+
        return -1;
 }
 
-static int do_env_default(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_env_default(cmd_tbl_t *cmdtp, int flag,
+                         int argc, char * const argv[])
 {
-       if ((argc != 2) || (strcmp(argv[1], "-f") != 0))
+       if (argc != 2 || strcmp(argv[1], "-f") != 0)
                return cmd_usage(cmdtp);
 
        set_default_env("## Resetting to default environment\n");
        return 0;
 }
 
-static int do_env_delete(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_env_delete(cmd_tbl_t *cmdtp, int flag,
+                        int argc, char * const argv[])
 {
        printf("Not implemented yet\n");
        return 0;
@@ -647,7 +646,7 @@ static int do_env_delete(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
 
 #ifdef CONFIG_CMD_EXPORTENV
 /*
- * env export [-t | -b | -c] addr [size]
+ * env export [-t | -b | -c] [-s size] addr [var ...]
  *     -t:     export as text format; if size is given, data will be
  *             padded with '\0' bytes; if not, one terminating '\0'
  *             will be added (which is included in the "filesize"
@@ -657,8 +656,12 @@ static int do_env_delete(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
  *             '\0', list end marked by double "\0\0")
  *     -c:     export as checksum protected environment format as
  *             used for example by "saveenv" command
+ *     -s size:
+ *             size of output buffer
  *     addr:   memory address where environment gets stored
- *     size:   size of output buffer
+ *     var...  List of variable names that get included into the
+ *             export. Without arguments, the whole environment gets
+ *             exported.
  *
  * With "-c" and size is NOT given, then the export command will
  * format the data as currently used for the persistent storage,
@@ -687,11 +690,12 @@ static int do_env_delete(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
  *
  *     => env import -d -t ${backup_addr}
  */
-static int do_env_export(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_env_export(cmd_tbl_t *cmdtp, int flag,
+                        int argc, char * const argv[])
 {
        char    buf[32];
        char    *addr, *cmd, *res;
-       size_t  size;
+       size_t  size = 0;
        ssize_t len;
        env_t   *envp;
        char    sep = '\n';
@@ -715,6 +719,11 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
                                sep = '\0';
                                chk = 1;
                                break;
+                       case 's':               /* size given */
+                               if (--argc <= 0)
+                                       return cmd_usage(cmdtp);
+                               size = simple_strtoul(*++argv, NULL, 16);
+                               goto NXTARG;
                        case 't':               /* text format */
                                if (fmt++)
                                        goto sep_err;
@@ -724,6 +733,7 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
                                return cmd_usage(cmdtp);
                        }
                }
+NXTARG:                ;
        }
 
        if (argc < 1)
@@ -731,18 +741,16 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
 
        addr = (char *)simple_strtoul(argv[0], NULL, 16);
 
-       if (argc == 2) {
-               size = simple_strtoul(argv[1], NULL, 16);
+       if (size)
                memset(addr, '\0', size);
-       } else {
-               size = 0;
-       }
+
+       argc--;
+       argv++;
 
        if (sep) {              /* export as text file */
-               len = hexport_r(&env_htab, sep, &addr, size);
+               len = hexport_r(&env_htab, sep, &addr, size, argc, argv);
                if (len < 0) {
-                       error("Cannot export environment: errno = %d\n",
-                               errno);
+                       error("Cannot export environment: errno = %d\n", errno);
                        return 1;
                }
                sprintf(buf, "%zX", (size_t)len);
@@ -758,15 +766,14 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
        else                    /* export as raw binary data */
                res = addr;
 
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, argc, argv);
        if (len < 0) {
-               error("Cannot export environment: errno = %d\n",
-                       errno);
+               error("Cannot export environment: errno = %d\n", errno);
                return 1;
        }
 
        if (chk) {
-               envp->crc   = crc32(0, envp->data, ENV_SIZE);
+               envp->crc = crc32(0, envp->data, ENV_SIZE);
 #ifdef CONFIG_ENV_ADDR_REDUND
                envp->flags = ACTIVE_FLAG;
 #endif
@@ -777,8 +784,7 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
        return 0;
 
 sep_err:
-       printf("## %s: only one of \"-b\", \"-c\" or \"-t\" allowed\n",
-               cmd);
+       printf("## %s: only one of \"-b\", \"-c\" or \"-t\" allowed\n", cmd);
        return 1;
 }
 #endif
@@ -796,7 +802,8 @@ sep_err:
  *     size:   length of input data; if missing, proper '\0'
  *             termination is mandatory
  */
-static int do_env_import(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_env_import(cmd_tbl_t *cmdtp, int flag,
+                        int argc, char * const argv[])
 {
        char    *cmd, *addr;
        char    sep = '\n';
@@ -862,7 +869,7 @@ static int do_env_import(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
                                " - truncated\n", MAX_ENV_SIZE);
                }
                ++size;
-               printf("## Info: input data size = %zd = 0x%zX\n", size, size);
+               printf("## Info: input data size = %zu = 0x%zX\n", size, size);
        }
 
        if (chk) {
@@ -894,10 +901,6 @@ sep_err:
 }
 #endif
 
-#if defined(CONFIG_CMD_RUN)
-extern int do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
-#endif
-
 /*
  * New command line interface: "env" command with subcommands
  */
@@ -965,7 +968,7 @@ U_BOOT_CMD(
 #if defined(CONFIG_CMD_EDITENV)
        "env edit name - edit environment variable\n"
 #endif
-       "env export [-t | -b | -c] addr [size] - export environment\n"
+       "env export [-t | -b | -c] [-s size] addr [var ...] - export environment\n"
 #if defined(CONFIG_CMD_GREPENV)
        "env grep string [...] - search environment\n"
 #endif
index 92631ea2dd72db998eb99b3b390f130dc8d2c48b..1e477bc900a4a62b9bd2c548b2463606130dda4d 100644 (file)
@@ -341,7 +341,6 @@ pci_cfg_modify (pci_dev_t bdf, ulong addr, ulong size, ulong value, int incrflag
 {
        ulong   i;
        int     nbytes;
-       extern char console_buffer[];
        uint    val4;
        ushort  val2;
        u_char  val1;
index 3efd7008e95fe1d74bb48e16a7969e6eec700f22..9426f5b05bc6eec210d753d4cb167308c67475e9 100644 (file)
@@ -1273,10 +1273,21 @@ static void handle_pxe_menu(struct pxe_menu *cfg)
 
        menu_destroy(m);
 
-       if (err < 1)
-               return;
+       /*
+        * err == 1 means we got a choice back from menu_get_choice.
+        *
+        * err == -ENOENT if the menu was setup to select the default but no
+        * default was set. in that case, we should continue trying to boot
+        * labels that haven't been attempted yet.
+        *
+        * otherwise, the user interrupted or there was some other error and
+        * we give up.
+        */
 
-       label_boot(choice);
+       if (err == 1)
+               label_boot(choice);
+       else if (err != -ENOENT)
+               return;
 
        boot_unattempted_labels(cfg);
 }
diff --git a/common/cmd_tpm.c b/common/cmd_tpm.c
new file mode 100644 (file)
index 0000000..6f5cd48
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <tpm.h>
+
+#define MAX_TRANSACTION_SIZE 30
+
+/*
+ * tpm_write() expects a variable number of parameters: the internal address
+ * followed by data to write, byte by byte.
+ *
+ * Returns 0 on success or -1 on errors (wrong arguments or TPM failure).
+ */
+static int tpm_process(int argc, char * const argv[], cmd_tbl_t *cmdtp)
+{
+       u8 tpm_buffer[MAX_TRANSACTION_SIZE];
+       u32 write_size, read_size;
+       char *p;
+       int rv = -1;
+
+       for (write_size = 0; write_size < argc; write_size++) {
+               u32 datum = simple_strtoul(argv[write_size], &p, 0);
+               if (*p || (datum > 0xff)) {
+                       printf("\n%s: bad data value\n\n", argv[write_size]);
+                       cmd_usage(cmdtp);
+                       return rv;
+               }
+               tpm_buffer[write_size] = (u8)datum;
+       }
+
+       read_size = sizeof(tpm_buffer);
+       if (!tis_sendrecv(tpm_buffer, write_size, tpm_buffer, &read_size)) {
+               int i;
+               puts("Got TPM response:\n");
+               for (i = 0; i < read_size; i++)
+                       printf(" %2.2x", tpm_buffer[i]);
+               puts("\n");
+               rv = 0;
+       } else {
+               puts("tpm command failed\n");
+       }
+       return rv;
+}
+
+static int do_tpm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       int rv = 0;
+
+       /*
+        * Verify that in case it is present, the first argument, it is
+        * exactly one character in size.
+        */
+       if (argc < 7) {
+               puts("command should be at least six bytes in size\n");
+               return -1;
+       }
+
+       if (tis_init()) {
+               puts("tis_init() failed!\n");
+               return -1;
+       }
+
+       if (tis_open()) {
+               puts("tis_open() failed!\n");
+               return -1;
+       }
+
+       rv = tpm_process(argc - 1, argv + 1, cmdtp);
+
+       if (tis_close()) {
+               puts("tis_close() failed!\n");
+               rv = -1;
+       }
+
+       return rv;
+}
+
+U_BOOT_CMD(tpm, MAX_TRANSACTION_SIZE, 1, do_tpm,
+          "<byte> [<byte> ...]   - write data and read response",
+          "send arbitrary data (at least 6 bytes) to the TPM "
+          "device and read the response"
+);
index 6dc9dab36899c10035af72ea4059043bfa0f376a..7f48ea2e65f72e67a5d79e207f5540fd50b6f6d5 100644 (file)
@@ -53,7 +53,7 @@ static TSI148_DEV *dev;
 
 int tsi148_init(void)
 {
-       int j, result, lastError = 0;
+       int j, result;
        pci_dev_t busdevfn;
        unsigned int val;
 
@@ -69,8 +69,7 @@ int tsi148_init(void)
        dev = malloc(sizeof(*dev));
        if (NULL == dev) {
                puts("Tsi148: No memory!\n");
-               result = -1;
-               goto break_20;
+               return -1;
        }
 
        memset(dev, 0, sizeof(*dev));
@@ -139,8 +138,6 @@ int tsi148_init(void)
  break_30:
        free(dev);
        dev = NULL;
- break_20:
-       lastError = result;
 
        return result;
 }
index a86a5746b0d80a6a88af765a7c336fe4794100e8..58384f3b8bec3a0d485aeaea933182294a7a1133 100644 (file)
@@ -46,7 +46,7 @@ static UNI_DEV   *dev;
 
 int universe_init(void)
 {
-       int j, result, lastError = 0;
+       int j, result;
        pci_dev_t busdevfn;
        unsigned int val;
 
@@ -126,8 +126,6 @@ int universe_init(void)
  break_30:
        free(dev);
  break_20:
-       lastError = result;
-
        return result;
 }
 
index c7e9bea04b299f9e17fe991889cb9219db27ae4a..8a7109645dbd291f3427650fc4c21da3f11db8e5 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-extern env_t *env_ptr;
-
-extern void env_relocate_spec (void);
-extern uchar env_get_char_spec(int);
-
-static uchar env_get_char_init (int index);
-
 /************************************************************************
  * Default settings to be used when no valid environment is found
  */
@@ -94,7 +87,7 @@ const uchar default_environment[] = {
        "serverip="     MK_STR(CONFIG_SERVERIP)         "\0"
 #endif
 #ifdef CONFIG_SYS_AUTOLOAD
-       "autoload="     CONFIG_SYS_AUTOLOAD                     "\0"
+       "autoload="     CONFIG_SYS_AUTOLOAD             "\0"
 #endif
 #ifdef CONFIG_PREBOOT
        "preboot="      CONFIG_PREBOOT                  "\0"
@@ -117,13 +110,13 @@ const uchar default_environment[] = {
 #ifdef CONFIG_LOADADDR
        "loadaddr="     MK_STR(CONFIG_LOADADDR)         "\0"
 #endif
-#ifdef  CONFIG_CLOCKS_IN_MHZ
+#ifdef CONFIG_CLOCKS_IN_MHZ
        "clocks_in_mhz=1\0"
 #endif
 #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
        "pcidelay="     MK_STR(CONFIG_PCI_BOOTDELAY)    "\0"
 #endif
-#ifdef  CONFIG_EXTRA_ENV_SETTINGS
+#ifdef CONFIG_EXTRA_ENV_SETTINGS
        CONFIG_EXTRA_ENV_SETTINGS
 #endif
        "\0"
@@ -131,38 +124,30 @@ const uchar default_environment[] = {
 
 struct hsearch_data env_htab;
 
-static uchar env_get_char_init (int index)
+static uchar env_get_char_init(int index)
 {
-       uchar c;
-
        /* if crc was bad, use the default environment */
        if (gd->env_valid)
-               c = env_get_char_spec(index);
+               return env_get_char_spec(index);
        else
-               c = default_environment[index];
-
-       return (c);
+               return default_environment[index];
 }
 
-uchar env_get_char_memory (int index)
+uchar env_get_char_memory(int index)
 {
        return *env_get_addr(index);
 }
 
-uchar env_get_char (int index)
+uchar env_get_char(int index)
 {
-       uchar c;
-
        /* if relocated to RAM */
        if (gd->flags & GD_FLG_RELOC)
-               c = env_get_char_memory(index);
+               return env_get_char_memory(index);
        else
-               c = env_get_char_init(index);
-
-       return (c);
+               return env_get_char_init(index);
 }
 
-const uchar *env_get_addr (int index)
+const uchar *env_get_addr(int index)
 {
        if (gd->env_valid)
                return (uchar *)(gd->env_addr + index);
@@ -181,7 +166,7 @@ void set_default_env(const char *s)
                if (*s == '!') {
                        printf("*** Warning - %s, "
                                "using default environment\n\n",
-                               s+1);
+                               s + 1);
                } else {
                        puts(s);
                }
@@ -190,9 +175,9 @@ void set_default_env(const char *s)
        }
 
        if (himport_r(&env_htab, (char *)default_environment,
-                   sizeof(default_environment), '\0', 0) == 0) {
+                       sizeof(default_environment), '\0', 0) == 0)
                error("Environment import failed: errno = %d\n", errno);
-       }
+
        gd->flags |= GD_FLG_ENV_READY;
 }
 
@@ -227,22 +212,20 @@ int env_import(const char *buf, int check)
        return 0;
 }
 
-void env_relocate (void)
+void env_relocate(void)
 {
 #if defined(CONFIG_NEEDS_MANUAL_RELOC)
-       extern void env_reloc(void);
-
        env_reloc();
 #endif
        if (gd->env_valid == 0) {
 #if defined(CONFIG_ENV_IS_NOWHERE)     /* Environment not changable */
                set_default_env(NULL);
 #else
-               show_boot_progress (-60);
+               show_boot_progress(-60);
                set_default_env("!bad CRC");
 #endif
        } else {
-               env_relocate_spec ();
+               env_relocate_spec();
        }
 }
 
@@ -272,6 +255,7 @@ int env_complete(char *var, int maxv, char *cmdv[], int bufsz, char *buf)
 
        if (idx)
                cmdv[found++] = "...";
+
        cmdv[found] = NULL;
        return found;
 }
index 1d570790277b2393e24ec4a7591beb4ca984bc71..3c5af37bf50c290afb33f111b945d539926bf0dd 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-env_t *env_ptr = NULL;
+env_t *env_ptr;
 
-char * env_name_spec = "dataflash";
-
-extern int read_dataflash(unsigned long addr, unsigned long size,
-       char *result);
-extern int write_dataflash(unsigned long addr_dest,
-       unsigned long addr_src, unsigned long size);
-extern int AT91F_DataflashInit(void);
-
-extern uchar default_environment[];
+char *env_name_spec = "dataflash";
 
 uchar env_get_char_spec(int index)
 {
        uchar c;
 
-       read_dataflash(CONFIG_ENV_ADDR + index + offsetof(env_t,data),
+       read_dataflash(CONFIG_ENV_ADDR + index + offsetof(env_t, data),
                        1, (char *)&c);
-       return (c);
+       return c;
 }
 
 void env_relocate_spec(void)
@@ -68,12 +60,12 @@ int saveenv(void)
        char    *res;
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
        }
-       env_new.crc   = crc32(0, env_new.data, ENV_SIZE);
+       env_new.crc = crc32(0, env_new.data, ENV_SIZE);
 
        return write_dataflash(CONFIG_ENV_ADDR,
                                (unsigned long)&env_new,
@@ -88,7 +80,7 @@ int saveenv(void)
  */
 int env_init(void)
 {
-       ulong crc, len, new;
+       ulong crc, len = ENV_SIZE, new = 0;
        unsigned off;
        uchar buf[64];
 
@@ -101,25 +93,23 @@ int env_init(void)
        read_dataflash(CONFIG_ENV_ADDR + offsetof(env_t, crc),
                sizeof(ulong), (char *)&crc);
 
-       new = 0;
-       len = ENV_SIZE;
-       off = offsetof(env_t,data);
+       off = offsetof(env_t, data);
        while (len > 0) {
                int n = (len > sizeof(buf)) ? sizeof(buf) : len;
 
                read_dataflash(CONFIG_ENV_ADDR + off, n, (char *)buf);
 
-               new = crc32 (new, buf, n);
+               new = crc32(new, buf, n);
                len -= n;
                off += n;
        }
 
        if (crc == new) {
-               gd->env_addr  = offsetof(env_t,data);
-               gd->env_valid = 1;
+               gd->env_addr    = offsetof(env_t, data);
+               gd->env_valid   = 1;
        } else {
-               gd->env_addr  = (ulong)&default_environment[0];
-               gd->env_valid = 0;
+               gd->env_addr    = (ulong)&default_environment[0];
+               gd->env_valid   = 0;
        }
 
        return 0;
index 0a179ad3d25917104c271718aae19755ed16c587..b66bba29f53fd53251abab1dc724e88c26ff15b5 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-env_t *env_ptr = NULL;
+env_t *env_ptr;
 
 char *env_name_spec = "EEPROM";
 int env_eeprom_bus = -1;
 
 static int eeprom_bus_read(unsigned dev_addr, unsigned offset,
-       uchar *buffer, unsigned cnt)
+                          uchar *buffer, unsigned cnt)
 {
        int rcode;
 #if defined(CONFIG_I2C_ENV_EEPROM_BUS)
@@ -57,7 +57,7 @@ static int eeprom_bus_read(unsigned dev_addr, unsigned offset,
                        if (dev != NULL)
                                env_eeprom_bus = dev->busid;
                        else
-                               printf ("error adding env eeprom bus.\n");
+                               printf("error adding env eeprom bus.\n");
                }
                if (old_bus != env_eeprom_bus) {
                        i2c_set_bus_num(env_eeprom_bus);
@@ -69,7 +69,7 @@ static int eeprom_bus_read(unsigned dev_addr, unsigned offset,
        }
 #endif
 
-       rcode = eeprom_read (dev_addr, offset, buffer, cnt);
+       rcode = eeprom_read(dev_addr, offset, buffer, cnt);
 
 #if defined(CONFIG_I2C_ENV_EEPROM_BUS)
        if (old_bus != env_eeprom_bus)
@@ -79,7 +79,7 @@ static int eeprom_bus_read(unsigned dev_addr, unsigned offset,
 }
 
 static int eeprom_bus_write(unsigned dev_addr, unsigned offset,
-       uchar *buffer, unsigned cnt)
+                           uchar *buffer, unsigned cnt)
 {
        int rcode;
 #if defined(CONFIG_I2C_ENV_EEPROM_BUS)
@@ -94,24 +94,22 @@ static int eeprom_bus_write(unsigned dev_addr, unsigned offset,
        return rcode;
 }
 
-uchar env_get_char_spec (int index)
+uchar env_get_char_spec(int index)
 {
        uchar c;
-       unsigned int off;
-       off = CONFIG_ENV_OFFSET;
+       unsigned int off = CONFIG_ENV_OFFSET;
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
        if (gd->env_valid == 2)
                off = CONFIG_ENV_OFFSET_REDUND;
 #endif
        eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
-                    off + index + offsetof(env_t,data),
-                    &c, 1);
+                       off + index + offsetof(env_t, data), &c, 1);
 
-       return (c);
+       return c;
 }
 
-void env_relocate_spec (void)
+void env_relocate_spec(void)
 {
        char buf[CONFIG_ENV_SIZE];
        unsigned int off = CONFIG_ENV_OFFSET;
@@ -121,9 +119,7 @@ void env_relocate_spec (void)
                off = CONFIG_ENV_OFFSET_REDUND;
 #endif
        eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
-                    off,
-                    (uchar *)buf,
-                    CONFIG_ENV_SIZE);
+                       off, (uchar *)buf, CONFIG_ENV_SIZE);
 
        env_import(buf, 1);
 }
@@ -133,17 +129,17 @@ int saveenv(void)
        env_t   env_new;
        ssize_t len;
        char    *res;
-       int rc;
-       unsigned int off = CONFIG_ENV_OFFSET;
+       int     rc;
+       unsigned int off        = CONFIG_ENV_OFFSET;
 #ifdef CONFIG_ENV_OFFSET_REDUND
-       unsigned int off_red = CONFIG_ENV_OFFSET_REDUND;
-       char flag_obsolete = OBSOLETE_FLAG;
+       unsigned int off_red    = CONFIG_ENV_OFFSET_REDUND;
+       char flag_obsolete      = OBSOLETE_FLAG;
 #endif
 
        BUG_ON(env_ptr != NULL);
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
@@ -152,32 +148,28 @@ int saveenv(void)
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
        if (gd->env_valid == 1) {
-               off = CONFIG_ENV_OFFSET_REDUND;
-               off_red = CONFIG_ENV_OFFSET;
+               off     = CONFIG_ENV_OFFSET_REDUND;
+               off_red = CONFIG_ENV_OFFSET;
        }
 
        env_new.flags = ACTIVE_FLAG;
 #endif
 
        rc = eeprom_bus_write(CONFIG_SYS_DEF_EEPROM_ADDR,
-                            off,
-                            (uchar *)&env_new,
-                            CONFIG_ENV_SIZE);
+                             off, (uchar *)&env_new, CONFIG_ENV_SIZE);
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
        if (rc == 0) {
                eeprom_bus_write(CONFIG_SYS_DEF_EEPROM_ADDR,
-                                 off_red + offsetof(env_t,flags),
-                                 (uchar *)&flag_obsolete,
-                                 1);
+                                off_red + offsetof(env_t, flags),
+                                (uchar *)&flag_obsolete, 1);
+
                if (gd->env_valid == 1)
                        gd->env_valid = 2;
                else
                        gd->env_valid = 1;
-
        }
 #endif
-
        return rc;
 }
 
@@ -187,17 +179,13 @@ int saveenv(void)
  * We are still running from ROM, so data use is limited.
  * Use a (moderately small) buffer on the stack
  */
-
 #ifdef CONFIG_ENV_OFFSET_REDUND
 int env_init(void)
 {
-       ulong len;
-       ulong crc[2], crc_tmp;
+       ulong len, crc[2], crc_tmp;
        unsigned int off, off_env[2];
-       uchar buf[64];
-       int crc_ok[2] = {0,0};
-       unsigned char flags[2];
-       int i;
+       uchar buf[64], flags[2];
+       int i, crc_ok[2] = {0, 0};
 
        eeprom_init();  /* prepare for EEPROM read/write */
 
@@ -207,39 +195,39 @@ int env_init(void)
        for (i = 0; i < 2; i++) {
                /* read CRC */
                eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
-                       off_env[i] + offsetof(env_t,crc),
-                       (uchar *)&crc[i], sizeof(ulong));
+                               off_env[i] + offsetof(env_t, crc),
+                               (uchar *)&crc[i], sizeof(ulong));
                /* read FLAGS */
                eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
-                       off_env[i] + offsetof(env_t,flags),
-                       (uchar *)&flags[i], sizeof(uchar));
+                               off_env[i] + offsetof(env_t, flags),
+                               (uchar *)&flags[i], sizeof(uchar));
 
                crc_tmp = 0;
                len = ENV_SIZE;
-               off = off_env[i] + offsetof(env_t,data);
+               off = off_env[i] + offsetof(env_t, data);
                while (len > 0) {
                        int n = (len > sizeof(buf)) ? sizeof(buf) : len;
 
                        eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR, off,
-                               buf, n);
+                                       buf, n);
 
                        crc_tmp = crc32(crc_tmp, buf, n);
                        len -= n;
                        off += n;
                }
+
                if (crc_tmp == crc[i])
                        crc_ok[i] = 1;
        }
 
        if (!crc_ok[0] && !crc_ok[1]) {
-               gd->env_addr  = 0;
-               gd->env_valid = 0;
+               gd->env_addr    = 0;
+               gd->env_valid   = 0;
 
                return 0;
        } else if (crc_ok[0] && !crc_ok[1]) {
                gd->env_valid = 1;
-       }
-       else if (!crc_ok[0] && crc_ok[1]) {
+       } else if (!crc_ok[0] && crc_ok[1]) {
                gd->env_valid = 2;
        } else {
                /* both ok - check serial */
@@ -249,18 +237,18 @@ int env_init(void)
                        gd->env_valid = 2;
                else if (flags[0] == 0xFF && flags[1] == 0)
                        gd->env_valid = 2;
-               else if(flags[1] == 0xFF && flags[0] == 0)
+               else if (flags[1] == 0xFF && flags[0] == 0)
                        gd->env_valid = 1;
                else /* flags are equal - almost impossible */
                        gd->env_valid = 1;
        }
 
        if (gd->env_valid == 2)
-               gd->env_addr = off_env[1] + offsetof(env_t,data);
+               gd->env_addr = off_env[1] + offsetof(env_t, data);
        else if (gd->env_valid == 1)
-               gd->env_addr = off_env[0] + offsetof(env_t,data);
+               gd->env_addr = off_env[0] + offsetof(env_t, data);
 
-       return (0);
+       return 0;
 }
 #else
 int env_init(void)
@@ -273,12 +261,12 @@ int env_init(void)
 
        /* read old CRC */
        eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
-                    CONFIG_ENV_OFFSET+offsetof(env_t,crc),
-                    (uchar *)&crc, sizeof(ulong));
+                       CONFIG_ENV_OFFSET + offsetof(env_t, crc),
+                       (uchar *)&crc, sizeof(ulong));
 
        new = 0;
        len = ENV_SIZE;
-       off = offsetof(env_t,data);
+       off = offsetof(env_t, data);
 
        while (len > 0) {
                int n = (len > sizeof(buf)) ? sizeof(buf) : len;
@@ -291,13 +279,13 @@ int env_init(void)
        }
 
        if (crc == new) {
-               gd->env_addr  = offsetof(env_t,data);
-               gd->env_valid = 1;
+               gd->env_addr    = offsetof(env_t, data);
+               gd->env_valid   = 1;
        } else {
-               gd->env_addr  = 0;
-               gd->env_valid = 0;
+               gd->env_addr    = 0;
+               gd->env_valid   = 0;
        }
 
-       return (0);
+       return 0;
 }
 #endif
index 6ce1307767a90ae0ef77f9330435d713bdd0e0c5..80fb29dd5e3074ae42d9ceb87e0186e0de92eed6 100644 (file)
  */
 
 #ifndef __ASSEMBLY__
-#define        __ASSEMBLY__                    /* Dirty trick to get only #defines     */
+#define        __ASSEMBLY__                    /* Dirty trick to get only #defines */
 #endif
-#define        __ASM_STUB_PROCESSOR_H__        /* don't include asm/processor.         */
+#define        __ASM_STUB_PROCESSOR_H__        /* don't include asm/processor. */
 #include <config.h>
 #undef __ASSEMBLY__
 #include <environment.h>
 
-/*
- * Handle HOSTS that have prepended
- * crap on symbol names, not TARGETS.
- */
+/* Handle HOSTS that have prepended crap on symbol names, not TARGETS. */
 #if defined(__APPLE__)
 /* Leading underscore on symbols */
 #  define SYM_CHAR "_"
  * U-Boot itself.
  */
 #if (defined(CONFIG_SYS_USE_PPCENV) || defined(CONFIG_NAND_U_BOOT)) && \
-     defined(ENV_CRC) /* Environment embedded in U-Boot .ppcenv section */
+       defined(ENV_CRC) /* Environment embedded in U-Boot .ppcenv section */
 /* XXX - This only works with GNU C */
-#  define __PPCENV__ __attribute__ ((section(".ppcenv")))
-#  define __PPCTEXT__ __attribute__ ((section(".text")))
+#  define __PPCENV__   __attribute__ ((section(".ppcenv")))
+#  define __PPCTEXT__  __attribute__ ((section(".text")))
 
 #elif defined(USE_HOSTCC) /* Native for 'tools/envcrc' */
-#  define __PPCENV__ /*XXX DO_NOT_DEL_THIS_COMMENT*/
-#  define __PPCTEXT__ /*XXX DO_NOT_DEL_THIS_COMMENT*/
+#  define __PPCENV__   /*XXX DO_NOT_DEL_THIS_COMMENT*/
+#  define __PPCTEXT__  /*XXX DO_NOT_DEL_THIS_COMMENT*/
 
 #else /* Environment is embedded in U-Boot's .text section */
 /* XXX - This only works with GNU C */
-#  define __PPCENV__ __attribute__ ((section(".text")))
-#  define __PPCTEXT__ __attribute__ ((section(".text")))
+#  define __PPCENV__   __attribute__ ((section(".text")))
+#  define __PPCTEXT__  __attribute__ ((section(".text")))
 #endif
 
 /*
  * Macros to generate global absolutes.
  */
 #if defined(__bfin__)
-# define GEN_SET_VALUE(name, value) asm (".set " GEN_SYMNAME(name) ", " GEN_VALUE(value))
+# define GEN_SET_VALUE(name, value)    \
+       asm(".set " GEN_SYMNAME(name) ", " GEN_VALUE(value))
 #else
-# define GEN_SET_VALUE(name, value) asm (GEN_SYMNAME(name) " = " GEN_VALUE(value))
-#endif
-#define GEN_SYMNAME(str) SYM_CHAR #str
-#define GEN_VALUE(str) #str
-#define GEN_ABS(name, value) \
-               asm (".globl " GEN_SYMNAME(name)); \
-               GEN_SET_VALUE(name, value)
+# define GEN_SET_VALUE(name, value)    \
+       asm(GEN_SYMNAME(name) " = " GEN_VALUE(value))
+#endif
+#define GEN_SYMNAME(str)       SYM_CHAR #str
+#define GEN_VALUE(str)         #str
+#define GEN_ABS(name, value)                   \
+       asm(".globl " GEN_SYMNAME(name));       \
+       GEN_SET_VALUE(name, value)
 
 /*
  * Macros to transform values
@@ -93,7 +92,7 @@
  * computed CRC.  Otherwise define it as ~0.
  */
 #if !defined(ENV_CRC)
-#  define ENV_CRC      ~0
+#  define ENV_CRC      (~0)
 #endif
 
 env_t environment __PPCENV__ = {
@@ -151,7 +150,7 @@ env_t environment __PPCENV__ = {
        "serverip="     MK_STR(CONFIG_SERVERIP)         "\0"
 #endif
 #ifdef CONFIG_SYS_AUTOLOAD
-       "autoload="     CONFIG_SYS_AUTOLOAD                     "\0"
+       "autoload="     CONFIG_SYS_AUTOLOAD             "\0"
 #endif
 #ifdef CONFIG_ROOTPATH
        "rootpath="     CONFIG_ROOTPATH                 "\0"
@@ -180,7 +179,7 @@ env_t environment __PPCENV__ = {
 #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
        "pcidelay="     MK_STR(CONFIG_PCI_BOOTDELAY)    "\0"
 #endif
-#ifdef  CONFIG_EXTRA_ENV_SETTINGS
+#ifdef CONFIG_EXTRA_ENV_SETTINGS
        CONFIG_EXTRA_ENV_SETTINGS
 #endif
        "\0"            /* Term. env_t.data with 2 NULs */
index 50ca4ffa5687736ad8e99ca36fb9d8d960e681d7..a99f850e91f57d26e3c58bf166792701f7e5463c 100644 (file)
@@ -39,19 +39,18 @@ DECLARE_GLOBAL_DATA_PTR;
 #if defined(CONFIG_CMD_SAVEENV) && defined(CONFIG_CMD_FLASH)
 #define CMD_SAVEENV
 #elif defined(CONFIG_ENV_ADDR_REDUND)
-#error Cannot use CONFIG_ENV_ADDR_REDUND without CONFIG_CMD_SAVEENV & CONFIG_CMD_FLASH
+#error CONFIG_ENV_ADDR_REDUND must have CONFIG_CMD_SAVEENV & CONFIG_CMD_FLASH
 #endif
 
-#if defined(CONFIG_ENV_SIZE_REDUND) && (CONFIG_ENV_SIZE_REDUND < CONFIG_ENV_SIZE)
+#if defined(CONFIG_ENV_SIZE_REDUND) && \
+       (CONFIG_ENV_SIZE_REDUND < CONFIG_ENV_SIZE)
 #error CONFIG_ENV_SIZE_REDUND should not be less then CONFIG_ENV_SIZE
 #endif
 
-char * env_name_spec = "Flash";
+char *env_name_spec = "Flash";
 
 #ifdef ENV_IS_EMBEDDED
-
-extern uchar environment[];
-env_t *env_ptr = (env_t *)(&environment[0]);
+env_t *env_ptr = &environment;
 
 static env_t *flash_addr = (env_t *)CONFIG_ENV_ADDR;
 
@@ -59,7 +58,6 @@ static env_t *flash_addr = (env_t *)CONFIG_ENV_ADDR;
 
 env_t *env_ptr = (env_t *)CONFIG_ENV_ADDR;
 static env_t *flash_addr = (env_t *)CONFIG_ENV_ADDR;
-
 #endif /* ENV_IS_EMBEDDED */
 
 #if defined(CMD_SAVEENV) || defined(CONFIG_ENV_ADDR_REDUND)
@@ -74,17 +72,14 @@ static env_t *flash_addr_new = (env_t *)CONFIG_ENV_ADDR_REDUND;
 static ulong end_addr_new = CONFIG_ENV_ADDR_REDUND + CONFIG_ENV_SECT_SIZE - 1;
 #endif /* CONFIG_ENV_ADDR_REDUND */
 
-extern const uchar default_environment[];
-
 
 uchar env_get_char_spec(int index)
 {
-       return (*((uchar *)(gd->env_addr + index)));
+       return *((uchar *)(gd->env_addr + index));
 }
 
 #ifdef CONFIG_ENV_ADDR_REDUND
-
-int  env_init(void)
+int env_init(void)
 {
        int crc1_ok = 0, crc2_ok = 0;
 
@@ -95,33 +90,34 @@ int  env_init(void)
        ulong addr1 = (ulong)&(flash_addr->data);
        ulong addr2 = (ulong)&(flash_addr_new->data);
 
-       crc1_ok = (crc32(0, flash_addr->data, ENV_SIZE) == flash_addr->crc);
-       crc2_ok = (crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc);
-
-       if (crc1_ok && ! crc2_ok) {
-               gd->env_addr  = addr1;
-               gd->env_valid = 1;
-       } else if (! crc1_ok && crc2_ok) {
-               gd->env_addr  = addr2;
-               gd->env_valid = 1;
-       } else if (! crc1_ok && ! crc2_ok) {
-               gd->env_addr  = addr_default;
-               gd->env_valid = 0;
+       crc1_ok = crc32(0, flash_addr->data, ENV_SIZE) == flash_addr->crc;
+       crc2_ok =
+               crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc;
+
+       if (crc1_ok && !crc2_ok) {
+               gd->env_addr    = addr1;
+               gd->env_valid   = 1;
+       } else if (!crc1_ok && crc2_ok) {
+               gd->env_addr    = addr2;
+               gd->env_valid   = 1;
+       } else if (!crc1_ok && !crc2_ok) {
+               gd->env_addr    = addr_default;
+               gd->env_valid   = 0;
        } else if (flag1 == ACTIVE_FLAG && flag2 == OBSOLETE_FLAG) {
-               gd->env_addr  = addr1;
-               gd->env_valid = 1;
+               gd->env_addr    = addr1;
+               gd->env_valid   = 1;
        } else if (flag1 == OBSOLETE_FLAG && flag2 == ACTIVE_FLAG) {
-               gd->env_addr  = addr2;
-               gd->env_valid = 1;
+               gd->env_addr    = addr2;
+               gd->env_valid   = 1;
        } else if (flag1 == flag2) {
-               gd->env_addr  = addr1;
-               gd->env_valid = 2;
+               gd->env_addr    = addr1;
+               gd->env_valid   = 2;
        } else if (flag1 == 0xFF) {
-               gd->env_addr  = addr1;
-               gd->env_valid = 2;
+               gd->env_addr    = addr1;
+               gd->env_valid   = 2;
        } else if (flag2 == 0xFF) {
-               gd->env_addr  = addr2;
-               gd->env_valid = 2;
+               gd->env_addr    = addr2;
+               gd->env_valid   = 2;
        }
 
        return 0;
@@ -132,74 +128,70 @@ int saveenv(void)
 {
        env_t   env_new;
        ssize_t len;
-       char    *saved_data = NULL;
-       char    *res;
-       int     rc = 1;
+       char    *res, *saved_data = NULL;
        char    flag = OBSOLETE_FLAG, new_flag = ACTIVE_FLAG;
+       int     rc = 1;
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
        ulong   up_data = 0;
 #endif
 
-       debug("Protect off %08lX ... %08lX\n",
-               (ulong)flash_addr, end_addr);
+       debug("Protect off %08lX ... %08lX\n", (ulong)flash_addr, end_addr);
 
-       if (flash_sect_protect(0, (ulong)flash_addr, end_addr)) {
+       if (flash_sect_protect(0, (ulong)flash_addr, end_addr))
                goto done;
-       }
 
        debug("Protect off %08lX ... %08lX\n",
                (ulong)flash_addr_new, end_addr_new);
 
-       if (flash_sect_protect(0, (ulong)flash_addr_new, end_addr_new)) {
+       if (flash_sect_protect(0, (ulong)flash_addr_new, end_addr_new))
                goto done;
-       }
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                goto done;
        }
-       env_new.crc   = crc32(0, env_new.data, ENV_SIZE);
-       env_new.flags = new_flag;
+       env_new.crc     = crc32(0, env_new.data, ENV_SIZE);
+       env_new.flags   = new_flag;
 
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
-       up_data = (end_addr_new + 1 - ((long)flash_addr_new + CONFIG_ENV_SIZE));
+       up_data = end_addr_new + 1 - ((long)flash_addr_new + CONFIG_ENV_SIZE);
        debug("Data to save 0x%lX\n", up_data);
        if (up_data) {
-               if ((saved_data = malloc(up_data)) == NULL) {
+               saved_data = malloc(up_data);
+               if (saved_data == NULL) {
                        printf("Unable to save the rest of sector (%ld)\n",
                                up_data);
                        goto done;
                }
                memcpy(saved_data,
-                       (void *)((long)flash_addr_new + CONFIG_ENV_SIZE), up_data);
+                       (void *)((long)flash_addr_new + CONFIG_ENV_SIZE),
+                       up_data);
                debug("Data (start 0x%lX, len 0x%lX) saved at 0x%p\n",
                        (long)flash_addr_new + CONFIG_ENV_SIZE,
                        up_data, saved_data);
        }
 #endif
        puts("Erasing Flash...");
-       debug(" %08lX ... %08lX ...",
-               (ulong)flash_addr_new, end_addr_new);
+       debug(" %08lX ... %08lX ...", (ulong)flash_addr_new, end_addr_new);
 
-       if (flash_sect_erase((ulong)flash_addr_new, end_addr_new)) {
+       if (flash_sect_erase((ulong)flash_addr_new, end_addr_new))
                goto done;
-       }
 
        puts("Writing to Flash... ");
        debug(" %08lX ... %08lX ...",
                (ulong)&(flash_addr_new->data),
-               sizeof(env_ptr->data)+(ulong)&(flash_addr_new->data));
-       if ((rc = flash_write((char *)&env_new,
-                       (ulong)flash_addr_new,
-                       sizeof(env_new))) ||
-           (rc = flash_write(&flag,
-                       (ulong)&(flash_addr->flags),
-                       sizeof(flash_addr->flags))) ) {
-               flash_perror(rc);
-               goto done;
-       }
+               sizeof(env_ptr->data) + (ulong)&(flash_addr_new->data));
+       rc = flash_write((char *)&env_new, (ulong)flash_addr_new,
+                        sizeof(env_new));
+       if (rc)
+               goto perror;
+
+       rc = flash_write(&flag, (ulong)&(flash_addr->flags),
+                        sizeof(flash_addr->flags));
+       if (rc)
+               goto perror;
 
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
        if (up_data) { /* restore the rest of sector */
@@ -207,16 +199,14 @@ int saveenv(void)
                        (long)flash_addr_new + CONFIG_ENV_SIZE, up_data);
                if (flash_write(saved_data,
                                (long)flash_addr_new + CONFIG_ENV_SIZE,
-                               up_data)) {
-                       flash_perror(rc);
-                       goto done;
-               }
+                               up_data))
+                       goto perror;
        }
 #endif
        puts("done\n");
 
        {
-               env_t * etmp = flash_addr;
+               env_t *etmp = flash_addr;
                ulong ltmp = end_addr;
 
                flash_addr = flash_addr_new;
@@ -227,12 +217,15 @@ int saveenv(void)
        }
 
        rc = 0;
+       goto done;
+perror:
+       flash_perror(rc);
 done:
        if (saved_data)
                free(saved_data);
        /* try to re-protect */
-       (void) flash_sect_protect(1, (ulong)flash_addr, end_addr);
-       (void) flash_sect_protect(1, (ulong)flash_addr_new, end_addr_new);
+       flash_sect_protect(1, (ulong)flash_addr, end_addr);
+       flash_sect_protect(1, (ulong)flash_addr_new, end_addr_new);
 
        return rc;
 }
@@ -240,35 +233,34 @@ done:
 
 #else /* ! CONFIG_ENV_ADDR_REDUND */
 
-int  env_init(void)
+int env_init(void)
 {
        if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
-               gd->env_addr  = (ulong)&(env_ptr->data);
-               gd->env_valid = 1;
-               return(0);
+               gd->env_addr    = (ulong)&(env_ptr->data);
+               gd->env_valid   = 1;
+               return 0;
        }
 
-       gd->env_addr  = (ulong)&default_environment[0];
-       gd->env_valid = 0;
+       gd->env_addr    = (ulong)&default_environment[0];
+       gd->env_valid   = 0;
        return 0;
 }
 
 #ifdef CMD_SAVEENV
-
 int saveenv(void)
 {
        env_t   env_new;
        ssize_t len;
        int     rc = 1;
-       char    *res;
-       char    *saved_data = NULL;
+       char    *res, *saved_data = NULL;
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
        ulong   up_data = 0;
 
-       up_data = (end_addr + 1 - ((long)flash_addr + CONFIG_ENV_SIZE));
+       up_data = end_addr + 1 - ((long)flash_addr + CONFIG_ENV_SIZE);
        debug("Data to save 0x%lx\n", up_data);
        if (up_data) {
-               if ((saved_data = malloc(up_data)) == NULL) {
+               saved_data = malloc(up_data);
+               if (saved_data == NULL) {
                        printf("Unable to save the rest of sector (%ld)\n",
                                up_data);
                        goto done;
@@ -282,14 +274,13 @@ int saveenv(void)
        }
 #endif /* CONFIG_ENV_SECT_SIZE */
 
-       debug("Protect off %08lX ... %08lX\n",
-               (ulong)flash_addr, end_addr);
+       debug("Protect off %08lX ... %08lX\n", (ulong)flash_addr, end_addr);
 
        if (flash_sect_protect(0, (long)flash_addr, end_addr))
                goto done;
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                goto done;
@@ -302,32 +293,31 @@ int saveenv(void)
 
        puts("Writing to Flash... ");
        rc = flash_write((char *)&env_new, (long)flash_addr, CONFIG_ENV_SIZE);
-       if (rc != 0) {
-               flash_perror(rc);
-               goto done;
-       }
+       if (rc != 0)
+               goto perror;
+
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
        if (up_data) {  /* restore the rest of sector */
                debug("Restoring the rest of data to 0x%lx len 0x%lx\n",
                        (ulong)flash_addr + CONFIG_ENV_SIZE, up_data);
                if (flash_write(saved_data,
                                (long)flash_addr + CONFIG_ENV_SIZE,
-                               up_data)) {
-                       flash_perror(rc);
-                       goto done;
-               }
+                               up_data))
+                       goto perror;
        }
 #endif
        puts("done\n");
        rc = 0;
+       goto done;
+perror:
+       flash_perror(rc);
 done:
        if (saved_data)
                free(saved_data);
        /* try to re-protect */
-       (void) flash_sect_protect(1, (long)flash_addr, end_addr);
+       flash_sect_protect(1, (long)flash_addr, end_addr);
        return rc;
 }
-
 #endif /* CMD_SAVEENV */
 
 #endif /* CONFIG_ENV_ADDR_REDUND */
@@ -347,8 +337,7 @@ void env_relocate_spec(void)
        }
 
        if (flash_addr_new->flags != OBSOLETE_FLAG &&
-           crc32(0, flash_addr_new->data, ENV_SIZE) ==
-           flash_addr_new->crc) {
+           crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc) {
                char flag = OBSOLETE_FLAG;
 
                gd->env_valid = 2;
@@ -372,8 +361,8 @@ void env_relocate_spec(void)
        }
 
        if (gd->env_valid == 2)
-               puts ("*** Warning - some problems detected "
-                     "reading environment; recovered successfully\n\n");
+               puts("*** Warning - some problems detected "
+                    "reading environment; recovered successfully\n\n");
 #endif /* CONFIG_ENV_ADDR_REDUND */
 
        env_import((char *)flash_addr, 1);
index a69923b700f69a35be87ed3c3d5b3baf227cb559..5dd92e709c831982eb4d556bf94e5ae3aeb5d4b1 100644 (file)
 #include <linux/stddef.h>
 #include <mg_disk.h>
 
-/* references to names in env_common.c */
-extern uchar default_environment[];
-
 char *env_name_spec = "MG_DISK";
 
-env_t *env_ptr = 0;
+env_t *env_ptr;
 
 DECLARE_GLOBAL_DATA_PTR;
 
 uchar env_get_char_spec(int index)
 {
-       return (*((uchar *)(gd->env_addr + index)));
+       return *((uchar *)(gd->env_addr + index));
 }
 
 void env_relocate_spec(void)
index 83f40f43417ef39ca88b6b94e9e03e84924da920..8441c77ead7e81d677ba0bf6031828b226432ab6 100644 (file)
 #include <search.h>
 #include <errno.h>
 
-/* references to names in env_common.c */
-extern uchar default_environment[];
-
 char *env_name_spec = "MMC";
 
 #ifdef ENV_IS_EMBEDDED
-extern uchar environment[];
-env_t *env_ptr = (env_t *)(&environment[0]);
+env_t *env_ptr = &environment;
 #else /* ! ENV_IS_EMBEDDED */
-env_t *env_ptr = NULL;
+env_t *env_ptr;
 #endif /* ENV_IS_EMBEDDED */
 
-/* local functions */
-#if !defined(ENV_IS_EMBEDDED)
-static void use_default(void);
-#endif
-
 DECLARE_GLOBAL_DATA_PTR;
 
 #if !defined(CONFIG_ENV_OFFSET)
@@ -60,9 +51,8 @@ static int __mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
        *env_addr = CONFIG_ENV_OFFSET;
        return 0;
 }
-__attribute__((weak, alias("__mmc_get_env_addr")))
-int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr);
-
+int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
+       __attribute__((weak, alias("__mmc_get_env_addr")));
 
 uchar env_get_char_spec(int index)
 {
@@ -72,13 +62,13 @@ uchar env_get_char_spec(int index)
 int env_init(void)
 {
        /* use default */
-       gd->env_addr = (ulong)&default_environment[0];
-       gd->env_valid = 1;
+       gd->env_addr    = (ulong)&default_environment[0];
+       gd->env_valid   = 1;
 
        return 0;
 }
 
-int init_mmc_for_env(struct mmc *mmc)
+static int init_mmc_for_env(struct mmc *mmc)
 {
        if (!mmc) {
                puts("No MMC card found\n");
@@ -87,21 +77,20 @@ int init_mmc_for_env(struct mmc *mmc)
 
        if (mmc_init(mmc)) {
                puts("MMC init failed\n");
-               return  -1;
+               return -1;
        }
 
        return 0;
 }
 
 #ifdef CONFIG_CMD_SAVEENV
-
-inline int write_env(struct mmc *mmc, unsigned long size,
-                       unsigned long offset, const void *buffer)
+static inline int write_env(struct mmc *mmc, unsigned long size,
+                           unsigned long offset, const void *buffer)
 {
        uint blk_start, blk_cnt, n;
 
-       blk_start = ALIGN(offset, mmc->write_bl_len) / mmc->write_bl_len;
-       blk_cnt   = ALIGN(size, mmc->write_bl_len) / mmc->write_bl_len;
+       blk_start       = ALIGN(offset, mmc->write_bl_len) / mmc->write_bl_len;
+       blk_cnt         = ALIGN(size, mmc->write_bl_len) / mmc->write_bl_len;
 
        n = mmc->block_dev.block_write(CONFIG_SYS_MMC_ENV_DEV, blk_start,
                                        blk_cnt, (u_char *)buffer);
@@ -115,21 +104,19 @@ int saveenv(void)
        ssize_t len;
        char    *res;
        struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
-       u32 offset;
+       u32     offset;
 
-       if (init_mmc_for_env(mmc))
-               return 1;
-
-       if(mmc_get_env_addr(mmc, &offset))
+       if (init_mmc_for_env(mmc) || mmc_get_env_addr(mmc, &offset))
                return 1;
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
        }
-       env_new.crc   = crc32(0, env_new.data, ENV_SIZE);
+
+       env_new.crc = crc32(0, env_new.data, ENV_SIZE);
        printf("Writing to MMC(%d)... ", CONFIG_SYS_MMC_ENV_DEV);
        if (write_env(mmc, CONFIG_ENV_SIZE, offset, (u_char *)&env_new)) {
                puts("failed\n");
@@ -141,13 +128,13 @@ int saveenv(void)
 }
 #endif /* CONFIG_CMD_SAVEENV */
 
-inline int read_env(struct mmc *mmc, unsigned long size,
-                       unsigned long offset, const void *buffer)
+static inline int read_env(struct mmc *mmc, unsigned long size,
+                          unsigned long offset, const void *buffer)
 {
        uint blk_start, blk_cnt, n;
 
-       blk_start = ALIGN(offset, mmc->read_bl_len) / mmc->read_bl_len;
-       blk_cnt   = ALIGN(size, mmc->read_bl_len) / mmc->read_bl_len;
+       blk_start       = ALIGN(offset, mmc->read_bl_len) / mmc->read_bl_len;
+       blk_cnt         = ALIGN(size, mmc->read_bl_len) / mmc->read_bl_len;
 
        n = mmc->block_dev.block_read(CONFIG_SYS_MMC_ENV_DEV, blk_start,
                                        blk_cnt, (uchar *)buffer);
@@ -159,32 +146,15 @@ void env_relocate_spec(void)
 {
 #if !defined(ENV_IS_EMBEDDED)
        char buf[CONFIG_ENV_SIZE];
-
        struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
        u32 offset;
 
-       if (init_mmc_for_env(mmc)) {
-               use_default();
-               return;
-       }
+       if (init_mmc_for_env(mmc) || mmc_get_env_addr(mmc, &offset))
+               return set_default_env(NULL);
 
-       if(mmc_get_env_addr(mmc, &offset)) {
-               use_default();
-               return ;
-       }
-
-       if (read_env(mmc, CONFIG_ENV_SIZE, offset, buf)) {
-               use_default();
-               return;
-       }
+       if (read_env(mmc, CONFIG_ENV_SIZE, offset, buf))
+               return set_default_env(NULL);
 
        env_import(buf, 1);
 #endif
 }
-
-#if !defined(ENV_IS_EMBEDDED)
-static void use_default()
-{
-       set_default_env(NULL);
-}
-#endif
index 14446a6a5793ce0d37016d7a883445815517d479..3cb75c89624d087019dacfcc6f21a1f4e7e0a3ad 100644 (file)
@@ -30,8 +30,6 @@
  * MA 02111-1307 USA
  */
 
-#define DEBUG
-
 #include <common.h>
 #include <command.h>
 #include <environment.h>
 #if defined(CONFIG_CMD_SAVEENV) && defined(CONFIG_CMD_NAND)
 #define CMD_SAVEENV
 #elif defined(CONFIG_ENV_OFFSET_REDUND)
-#error Cannot use CONFIG_ENV_OFFSET_REDUND without CONFIG_CMD_SAVEENV & CONFIG_CMD_NAND
+#error CONFIG_ENV_OFFSET_REDUND must have CONFIG_CMD_SAVEENV & CONFIG_CMD_NAND
 #endif
 
-#if defined(CONFIG_ENV_SIZE_REDUND) && (CONFIG_ENV_SIZE_REDUND != CONFIG_ENV_SIZE)
+#if defined(CONFIG_ENV_SIZE_REDUND) && \
+       (CONFIG_ENV_SIZE_REDUND != CONFIG_ENV_SIZE)
 #error CONFIG_ENV_SIZE_REDUND should be the same as CONFIG_ENV_SIZE
 #endif
 
 #define CONFIG_ENV_RANGE       CONFIG_ENV_SIZE
 #endif
 
-/* references to names in env_common.c */
-extern uchar default_environment[];
-
 char *env_name_spec = "NAND";
 
-
 #if defined(ENV_IS_EMBEDDED)
-extern uchar environment[];
-env_t *env_ptr = (env_t *)(&environment[0]);
+env_t *env_ptr = &environment;
 #elif defined(CONFIG_NAND_ENV_DST)
 env_t *env_ptr = (env_t *)CONFIG_NAND_ENV_DST;
 #else /* ! ENV_IS_EMBEDDED */
-env_t *env_ptr = 0;
+env_t *env_ptr;
 #endif /* ENV_IS_EMBEDDED */
 
 DECLARE_GLOBAL_DATA_PTR;
 
-uchar env_get_char_spec (int index)
+uchar env_get_char_spec(int index)
 {
-       return ( *((uchar *)(gd->env_addr + index)) );
+       return *((uchar *)(gd->env_addr + index));
 }
 
 /*
@@ -99,16 +93,14 @@ int env_init(void)
        env_t *tmp_env2;
 
        tmp_env2 = (env_t *)((ulong)env_ptr + CONFIG_ENV_SIZE);
-       crc2_ok = (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc);
+       crc2_ok = crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc;
 #endif
-
        tmp_env1 = env_ptr;
-
-       crc1_ok = (crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc);
+       crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc;
 
        if (!crc1_ok && !crc2_ok) {
-               gd->env_addr  = 0;
-               gd->env_valid = 0;
+               gd->env_addr    = 0;
+               gd->env_valid   = 0;
 
                return 0;
        } else if (crc1_ok && !crc2_ok) {
@@ -119,13 +111,13 @@ int env_init(void)
                gd->env_valid = 2;
        } else {
                /* both ok - check serial */
-               if(tmp_env1->flags == 255 && tmp_env2->flags == 0)
+               if (tmp_env1->flags == 255 && tmp_env2->flags == 0)
                        gd->env_valid = 2;
-               else if(tmp_env2->flags == 255 && tmp_env1->flags == 0)
+               else if (tmp_env2->flags == 255 && tmp_env1->flags == 0)
                        gd->env_valid = 1;
-               else if(tmp_env1->flags > tmp_env2->flags)
+               else if (tmp_env1->flags > tmp_env2->flags)
                        gd->env_valid = 1;
-               else if(tmp_env2->flags > tmp_env1->flags)
+               else if (tmp_env2->flags > tmp_env1->flags)
                        gd->env_valid = 2;
                else /* flags are equal - almost impossible */
                        gd->env_valid = 1;
@@ -141,11 +133,11 @@ int env_init(void)
        gd->env_addr = (ulong)env_ptr->data;
 
 #else /* ENV_IS_EMBEDDED || CONFIG_NAND_ENV_DST */
-       gd->env_addr  = (ulong)&default_environment[0];
-       gd->env_valid = 1;
+       gd->env_addr    = (ulong)&default_environment[0];
+       gd->env_valid   = 1;
 #endif /* ENV_IS_EMBEDDED || CONFIG_NAND_ENV_DST */
 
-       return (0);
+       return 0;
 }
 
 #ifdef CMD_SAVEENV
@@ -158,7 +150,6 @@ int writeenv(size_t offset, u_char *buf)
        size_t end = offset + CONFIG_ENV_RANGE;
        size_t amount_saved = 0;
        size_t blocksize, len;
-
        u_char *char_ptr;
 
        blocksize = nand_info[0].erasesize;
@@ -169,9 +160,9 @@ int writeenv(size_t offset, u_char *buf)
                        offset += blocksize;
                } else {
                        char_ptr = &buf[amount_saved];
-                       if (nand_write(&nand_info[0], offset, &len,
-                                       char_ptr))
+                       if (nand_write(&nand_info[0], offset, &len, char_ptr))
                                return 1;
+
                        offset += blocksize;
                        amount_saved += len;
                }
@@ -200,23 +191,22 @@ int saveenv(void)
                return 1;
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
        }
-       env_new.crc   = crc32(0, env_new.data, ENV_SIZE);
-       env_new.flags = ++env_flags; /* increase the serial */
+       env_new.crc     = crc32(0, env_new.data, ENV_SIZE);
+       env_new.flags   = ++env_flags; /* increase the serial */
 
-       if(gd->env_valid == 1) {
+       if (gd->env_valid == 1) {
                puts("Erasing redundant NAND...\n");
                nand_erase_options.offset = CONFIG_ENV_OFFSET_REDUND;
                if (nand_erase_opts(&nand_info[0], &nand_erase_options))
                        return 1;
 
                puts("Writing to redundant NAND... ");
-               ret = writeenv(CONFIG_ENV_OFFSET_REDUND,
-                       (u_char *)&env_new);
+               ret = writeenv(CONFIG_ENV_OFFSET_REDUND, (u_char *)&env_new);
        } else {
                puts("Erasing NAND...\n");
                nand_erase_options.offset = CONFIG_ENV_OFFSET;
@@ -224,8 +214,7 @@ int saveenv(void)
                        return 1;
 
                puts("Writing to NAND... ");
-               ret = writeenv(CONFIG_ENV_OFFSET,
-                       (u_char *)&env_new);
+               ret = writeenv(CONFIG_ENV_OFFSET, (u_char *)&env_new);
        }
        if (ret) {
                puts("FAILED!\n");
@@ -234,14 +223,14 @@ int saveenv(void)
 
        puts("done\n");
 
-       gd->env_valid = (gd->env_valid == 2 ? 1 : 2);
+       gd->env_valid = gd->env_valid == 2 ? 1 : 2;
 
        return ret;
 }
 #else /* ! CONFIG_ENV_OFFSET_REDUND */
 int saveenv(void)
 {
-       int ret = 0;
+       int     ret = 0;
        env_t   env_new;
        ssize_t len;
        char    *res;
@@ -255,12 +244,12 @@ int saveenv(void)
                return 1;
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
        }
-       env_new.crc   = crc32(0, env_new.data, ENV_SIZE);
+       env_new.crc = crc32(0, env_new.data, ENV_SIZE);
 
        puts("Erasing Nand...\n");
        if (nand_erase_opts(&nand_info[0], &nand_erase_options))
@@ -278,17 +267,17 @@ int saveenv(void)
 #endif /* CONFIG_ENV_OFFSET_REDUND */
 #endif /* CMD_SAVEENV */
 
-int readenv(size_t offset, u_char * buf)
+int readenv(size_t offset, u_char *buf)
 {
        size_t end = offset + CONFIG_ENV_RANGE;
        size_t amount_loaded = 0;
        size_t blocksize, len;
-
        u_char *char_ptr;
 
        blocksize = nand_info[0].erasesize;
        if (!blocksize)
                return 1;
+
        len = min(blocksize, CONFIG_ENV_SIZE);
 
        while (amount_loaded < CONFIG_ENV_SIZE && offset < end) {
@@ -296,12 +285,15 @@ int readenv(size_t offset, u_char * buf)
                        offset += blocksize;
                } else {
                        char_ptr = &buf[amount_loaded];
-                       if (nand_read_skip_bad(&nand_info[0], offset, &len, char_ptr))
+                       if (nand_read_skip_bad(&nand_info[0], offset,
+                                              &len, char_ptr))
                                return 1;
+
                        offset += blocksize;
                        amount_loaded += len;
                }
        }
+
        if (amount_loaded != CONFIG_ENV_SIZE)
                return 1;
 
@@ -312,14 +304,14 @@ int readenv(size_t offset, u_char * buf)
 int get_nand_env_oob(nand_info_t *nand, unsigned long *result)
 {
        struct mtd_oob_ops ops;
-       uint32_t oob_buf[ENV_OFFSET_SIZE/sizeof(uint32_t)];
+       uint32_t oob_buf[ENV_OFFSET_SIZE / sizeof(uint32_t)];
        int ret;
 
-       ops.datbuf = NULL;
-       ops.mode = MTD_OOB_AUTO;
-       ops.ooboffs = 0;
-       ops.ooblen = ENV_OFFSET_SIZE;
-       ops.oobbuf = (void *) oob_buf;
+       ops.datbuf      = NULL;
+       ops.mode        = MTD_OOB_AUTO;
+       ops.ooboffs     = 0;
+       ops.ooblen      = ENV_OFFSET_SIZE;
+       ops.oobbuf      = (void *)oob_buf;
 
        ret = nand->read_oob(nand, ENV_OFFSET_SIZE, &ops);
        if (ret) {
@@ -349,13 +341,10 @@ void env_relocate_spec(void)
 
        tmp_env1 = (env_t *)malloc(CONFIG_ENV_SIZE);
        tmp_env2 = (env_t *)malloc(CONFIG_ENV_SIZE);
-
-       if ((tmp_env1 == NULL) || (tmp_env2 == NULL)) {
+       if (tmp_env1 == NULL || tmp_env2 == NULL) {
                puts("Can't allocate buffers for environment\n");
-               free(tmp_env1);
-               free(tmp_env2);
                set_default_env("!malloc() failed");
-               return;
+               goto done;
        }
 
        if (readenv(CONFIG_ENV_OFFSET, (u_char *) tmp_env1))
@@ -364,14 +353,12 @@ void env_relocate_spec(void)
        if (readenv(CONFIG_ENV_OFFSET_REDUND, (u_char *) tmp_env2))
                puts("No Valid Redundant Environment Area found\n");
 
-       crc1_ok = (crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc);
-       crc2_ok = (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc);
+       crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc;
+       crc2_ok = crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc;
 
        if (!crc1_ok && !crc2_ok) {
-               free(tmp_env1);
-               free(tmp_env2);
                set_default_env("!bad CRC");
-               return;
+               goto done;
        } else if (crc1_ok && !crc2_ok) {
                gd->env_valid = 1;
        } else if (!crc1_ok && crc2_ok) {
@@ -388,7 +375,6 @@ void env_relocate_spec(void)
                        gd->env_valid = 2;
                else /* flags are equal - almost impossible */
                        gd->env_valid = 1;
-
        }
 
        free(env_ptr);
@@ -401,6 +387,7 @@ void env_relocate_spec(void)
        env_flags = ep->flags;
        env_import((char *)ep, 0);
 
+done:
        free(tmp_env1);
        free(tmp_env2);
 
@@ -412,7 +399,7 @@ void env_relocate_spec(void)
  * device i.e., nand_dev_desc + 0. This is also the behaviour using
  * the new NAND code.
  */
-void env_relocate_spec (void)
+void env_relocate_spec(void)
 {
 #if !defined(ENV_IS_EMBEDDED)
        int ret;
index 75ef78de87753e36bf314eaf6ae1784ec79d27e0..8a3ca1978ff329b87d33a2ea01cdf14105a9c294 100644 (file)
@@ -31,9 +31,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-env_t *env_ptr = NULL;
-
-extern uchar default_environment[];
+env_t *env_ptr;
 
 void env_relocate_spec(void)
 {
@@ -41,7 +39,7 @@ void env_relocate_spec(void)
 
 uchar env_get_char_spec(int index)
 {
-       return ( *((uchar *)(gd->env_addr + index)) );
+       return *((uchar *)(gd->env_addr + index));
 }
 
 /*
@@ -51,8 +49,8 @@ uchar env_get_char_spec(int index)
  */
 int env_init(void)
 {
-       gd->env_addr  = (ulong)&default_environment[0];
-       gd->env_valid = 0;
+       gd->env_addr    = (ulong)&default_environment[0];
+       gd->env_valid   = 0;
 
-       return (0);
+       return 0;
 }
index 544ce4711ea210517ca7288b19f361ce39f306ce..726eaac55efd3ceb1ee341d6f1efbbe9dcd41540 100644 (file)
@@ -52,21 +52,19 @@ DECLARE_GLOBAL_DATA_PTR;
 #ifdef CONFIG_SYS_NVRAM_ACCESS_ROUTINE
 extern void *nvram_read(void *dest, const long src, size_t count);
 extern void nvram_write(long dest, const void *src, size_t count);
-env_t *env_ptr = NULL;
+env_t *env_ptr;
 #else
 env_t *env_ptr = (env_t *)CONFIG_ENV_ADDR;
 #endif
 
-char * env_name_spec = "NVRAM";
-
-extern uchar default_environment[];
+char *env_name_spec = "NVRAM";
 
 uchar env_get_char_spec(int index)
 {
 #ifdef CONFIG_SYS_NVRAM_ACCESS_ROUTINE
        uchar c;
 
-       nvram_read(&c, CONFIG_ENV_ADDR+index, 1);
+       nvram_read(&c, CONFIG_ENV_ADDR + index, 1);
 
        return c;
 #else
@@ -81,7 +79,7 @@ void env_relocate_spec(void)
 #if defined(CONFIG_SYS_NVRAM_ACCESS_ROUTINE)
        nvram_read(buf, CONFIG_ENV_ADDR, CONFIG_ENV_SIZE);
 #else
-       memcpy(buf, (void*)CONFIG_ENV_ADDR, CONFIG_ENV_SIZE);
+       memcpy(buf, (void *)CONFIG_ENV_ADDR, CONFIG_ENV_SIZE);
 #endif
        env_import(buf, 1);
 }
@@ -94,7 +92,7 @@ int saveenv(void)
        int     rcode = 0;
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
@@ -110,7 +108,6 @@ int saveenv(void)
        return rcode;
 }
 
-
 /*
  * Initialize Environment use
  *
@@ -123,18 +120,19 @@ int env_init(void)
        uchar data[ENV_SIZE];
 
        nvram_read(&crc, CONFIG_ENV_ADDR, sizeof(ulong));
-       nvram_read(data, CONFIG_ENV_ADDR+sizeof(ulong), ENV_SIZE);
+       nvram_read(data, CONFIG_ENV_ADDR + sizeof(ulong), ENV_SIZE);
 
        if (crc32(0, data, ENV_SIZE) == crc) {
-               gd->env_addr  = (ulong)CONFIG_ENV_ADDR + sizeof(long);
+               gd->env_addr    = (ulong)CONFIG_ENV_ADDR + sizeof(long);
 #else
        if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
-               gd->env_addr  = (ulong)&(env_ptr->data);
+               gd->env_addr    = (ulong)&env_ptr->data;
 #endif
-               gd->env_valid = 1;
+               gd->env_valid   = 1;
        } else {
-               gd->env_addr  = (ulong)&default_environment[0];
-               gd->env_valid = 0;
+               gd->env_addr    = (ulong)&default_environment[0];
+               gd->env_valid   = 0;
        }
-       return (0);
+
+       return 0;
 }
index 5e04a06cf537c1faef56b1613ff66d6488d174b3..0ad2fc7a4cd206785449c80584bb182c1dba0a7f 100644 (file)
 #include <malloc.h>
 #include <search.h>
 #include <errno.h>
+#include <onenand_uboot.h>
 
 #include <linux/mtd/compat.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/onenand.h>
 
-extern struct mtd_info onenand_mtd;
-extern struct onenand_chip onenand_chip;
-
-/* References to names in env_common.c */
-extern uchar default_environment[];
-
 char *env_name_spec = "OneNAND";
 
 #define ONENAND_MAX_ENV_SIZE   4096
 #define ONENAND_ENV_SIZE(mtd)  (ONENAND_MAX_ENV_SIZE - ENV_HEADER_SIZE)
 
-#ifdef ENV_IS_EMBEDDED
-extern uchar environment[];
-#endif /* ENV_IS_EMBEDDED */
-
 DECLARE_GLOBAL_DATA_PTR;
 
 uchar env_get_char_spec(int index)
 {
-       return (*((uchar *)(gd->env_addr + index)));
+       return *((uchar *)(gd->env_addr + index));
 }
 
 void env_relocate_spec(void)
@@ -67,7 +58,7 @@ void env_relocate_spec(void)
        int rc;
        size_t retlen;
 #ifdef ENV_IS_EMBEDDED
-       char *buf = (char *)&environment[0];
+       char *buf = (char *)&environment;
 #else
        loff_t env_addr = CONFIG_ENV_ADDR;
        char onenand_env[ONENAND_MAX_ENV_SIZE];
@@ -83,7 +74,7 @@ void env_relocate_spec(void)
        if (mtd->writesize)
                /* Ignore read fail */
                mtd->read(mtd, env_addr, ONENAND_MAX_ENV_SIZE,
-                            &retlen, (u_char *)buf);
+                               &retlen, (u_char *)buf);
        else
                mtd->writesize = MAX_ONENAND_PAGESIZE;
 #endif /* !ENV_IS_EMBEDDED */
@@ -109,7 +100,7 @@ int saveenv(void)
        };
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
@@ -133,7 +124,7 @@ int saveenv(void)
        }
 
        if (mtd->write(mtd, env_addr, ONENAND_MAX_ENV_SIZE, &retlen,
-            (u_char *)&env_new)) {
+                       (u_char *)&env_new)) {
                printf("OneNAND: write failed at 0x%llx\n", instr.addr);
                return 2;
        }
@@ -144,7 +135,7 @@ int saveenv(void)
 int env_init(void)
 {
        /* use default */
-       gd->env_addr = (ulong) & default_environment[0];
+       gd->env_addr = (ulong)&default_environment[0];
        gd->env_valid = 1;
 
        return 0;
index d3b36d01053586b3f8bb155b3eade8460efecc1b..592b87088eeeab7974d83eef18fab50d43c02e6b 100644 (file)
@@ -36,7 +36,7 @@
 # define CONFIG_ENV_SPI_BUS    0
 #endif
 #ifndef CONFIG_ENV_SPI_CS
-# define CONFIG_ENV_SPI_CS             0
+# define CONFIG_ENV_SPI_CS     0
 #endif
 #ifndef CONFIG_ENV_SPI_MAX_HZ
 # define CONFIG_ENV_SPI_MAX_HZ 1000000
 #endif
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
-static ulong env_offset = CONFIG_ENV_OFFSET;
-static ulong env_new_offset = CONFIG_ENV_OFFSET_REDUND;
+static ulong env_offset                = CONFIG_ENV_OFFSET;
+static ulong env_new_offset    = CONFIG_ENV_OFFSET_REDUND;
 
-#define ACTIVE_FLAG   1
-#define OBSOLETE_FLAG 0
+#define ACTIVE_FLAG    1
+#define OBSOLETE_FLAG  0
 #endif /* CONFIG_ENV_OFFSET_REDUND */
 
 DECLARE_GLOBAL_DATA_PTR;
 
-/* references to names in env_common.c */
-extern uchar default_environment[];
-
-char * env_name_spec = "SPI Flash";
+char *env_name_spec = "SPI Flash";
 
 static struct spi_flash *env_flash;
 
@@ -68,17 +65,13 @@ uchar env_get_char_spec(int index)
 }
 
 #if defined(CONFIG_ENV_OFFSET_REDUND)
-
 int saveenv(void)
 {
        env_t   env_new;
        ssize_t len;
-       char    *res;
-       u32     saved_size, saved_offset;
-       char    *saved_buffer = NULL;
-       u32     sector = 1;
+       char    *res, *saved_buffer = NULL, flag = OBSOLETE_FLAG;
+       u32     saved_size, saved_offset, sector = 1;
        int     ret;
-       char    flag = OBSOLETE_FLAG;
 
        if (!env_flash) {
                env_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS,
@@ -91,13 +84,13 @@ int saveenv(void)
        }
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
        }
-       env_new.crc   = crc32(0, env_new.data, ENV_SIZE);
-       env_new.flags = ACTIVE_FLAG;
+       env_new.crc     = crc32(0, env_new.data, ENV_SIZE);
+       env_new.flags   = ACTIVE_FLAG;
 
        if (gd->env_valid == 1) {
                env_new_offset = CONFIG_ENV_OFFSET_REDUND;
@@ -148,21 +141,21 @@ int saveenv(void)
                        goto done;
        }
 
-       ret = spi_flash_write(env_flash,
-               env_offset + offsetof(env_t, flags),
-               sizeof(env_new.flags), &flag);
+       ret = spi_flash_write(env_flash, env_offset + offsetof(env_t, flags),
+                               sizeof(env_new.flags), &flag);
        if (ret)
                goto done;
 
        puts("done\n");
 
-       gd->env_valid = (gd->env_valid == 2 ? 1 : 2);
+       gd->env_valid = gd->env_valid == 2 ? 1 : 2;
 
        printf("Valid environment: %d\n", (int)gd->env_valid);
 
  done:
        if (saved_buffer)
                free(saved_buffer);
+
        return ret;
 }
 
@@ -248,18 +241,14 @@ err_read:
 out:
        free(tmp_env1);
        free(tmp_env2);
-
-       return;
 }
 #else
 int saveenv(void)
 {
-       u32 saved_size, saved_offset;
-       char *saved_buffer = NULL;
-       u32 sector = 1;
-       int ret = 1;
+       u32     saved_size, saved_offset, sector = 1;
+       char    *res, *saved_buffer = NULL;
+       int     ret = 1;
        env_t   env_new;
-       char    *res;
        ssize_t len;
 
        if (!env_flash) {
@@ -277,9 +266,9 @@ int saveenv(void)
                saved_size = CONFIG_ENV_SECT_SIZE - CONFIG_ENV_SIZE;
                saved_offset = CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE;
                saved_buffer = malloc(saved_size);
-               if (!saved_buffer) {
+               if (!saved_buffer)
                        goto done;
-               }
+
                ret = spi_flash_read(env_flash, saved_offset,
                        saved_size, saved_buffer);
                if (ret)
@@ -293,7 +282,7 @@ int saveenv(void)
        }
 
        res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE);
+       len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
        if (len < 0) {
                error("Cannot export environment: errno = %d\n", errno);
                goto done;
@@ -325,6 +314,7 @@ int saveenv(void)
  done:
        if (saved_buffer)
                free(saved_buffer);
+
        return ret;
 }
 
@@ -348,7 +338,6 @@ void env_relocate_spec(void)
        }
 
        ret = env_import(buf, 1);
-
        if (ret)
                gd->env_valid = 1;
 out:
index 717e4afe6d877eca2f5c62e5bcd145cac97f9537..b97ca48307dcba1493d9426bde8e6f706d8fa1ed 100644 (file)
@@ -1,5 +1,6 @@
 #include <common.h>
 #include <exports.h>
+#include <spi.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
index bdda64d2d71887c559916dfddbcfdab660ed957e..593f16c1620138b306ea76b1e15c7612061d0b2b 100644 (file)
@@ -49,8 +49,8 @@ DECLARE_GLOBAL_DATA_PTR;
  * Convenience function to find a node and return it's property or a
  * default value if it doesn't exist.
  */
-u32 fdt_getprop_u32_default(void *fdt, const char *path, const char *prop,
-                               const u32 dflt)
+u32 fdt_getprop_u32_default(const void *fdt, const char *path,
+                               const char *prop, const u32 dflt)
 {
        const u32 *val;
        int off;
@@ -61,7 +61,7 @@ u32 fdt_getprop_u32_default(void *fdt, const char *path, const char *prop,
 
        val = fdt_getprop(fdt, off, prop, NULL);
        if (val)
-               return *val;
+               return fdt32_to_cpu(*val);
        else
                return dflt;
 }
@@ -372,7 +372,7 @@ static int get_cells_len(void *blob, char *nr_cells_name)
        const u32 *cell;
 
        cell = fdt_getprop(blob, 0, nr_cells_name, NULL);
-       if (cell && *cell == 2)
+       if (cell && fdt32_to_cpu(*cell) == 2)
                return 8;
 
        return 4;
index 2495a6d5927d6033fe860e724447769fae731ad7..e8e24d7deab952f7e7d0d429febfa94b464398d1 100644 (file)
@@ -1000,7 +1000,6 @@ static void get_user_input(struct in_str *i)
        fflush(stdout);
        i->p = the_command;
 #else
-       extern char console_buffer[];
        int n;
        static char the_command[CONFIG_SYS_CBSIZE];
 
index 555d9d9d42ba01b89faafa94e83843433c298914..aacae5ac51aab01d3e10499c4e843971f1129000 100644 (file)
@@ -136,6 +136,7 @@ static const table_entry_t uimage_type[] = {
        {       IH_TYPE_FIRMWARE,   "firmware",   "Firmware",           },
        {       IH_TYPE_FLATDT,     "flat_dt",    "Flat Device Tree",   },
        {       IH_TYPE_KERNEL,     "kernel",     "Kernel Image",       },
+       {       IH_TYPE_KERNEL_NOLOAD, "kernel_noload",  "Kernel Image (no loading done)", },
        {       IH_TYPE_KWBIMAGE,   "kwbimage",   "Kirkwood Boot Image",},
        {       IH_TYPE_IMXIMAGE,   "imximage",   "Freescale i.MX Boot Image",},
        {       IH_TYPE_INVALID,    NULL,         "Invalid Image",      },
index d9cb8cae73f3ecea5c7f21ad0a20e4ee47c17f76..bf1a6a9e67759a061fcafe7d6b85d355876876ec 100644 (file)
@@ -41,7 +41,9 @@
 #include <lcd.h>
 #include <watchdog.h>
 
-#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
+#if defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
+       defined(CONFIG_CPU_MONAHANS)
+#define CONFIG_CPU_PXA
 #include <asm/byteorder.h>
 #endif
 
 /* ** FONT DATA                                                                */
 /************************************************************************/
 #include <video_font.h>                /* Get font data, width and height      */
+#include <video_font_data.h>
 
 /************************************************************************/
 /* ** LOGO DATA                                                                */
 /************************************************************************/
 #ifdef CONFIG_LCD_LOGO
 # include <bmp_logo.h>         /* Get logo data, width and height      */
+# include <bmp_logo_data.h>
 # if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET) && (LCD_BPP != LCD_COLOR16)
 #  error Default Color Map overlaps with Logo Color Map
 # endif
@@ -78,7 +82,6 @@ static inline void lcd_putc_xy (ushort x, ushort y, uchar  c);
 
 static int lcd_init (void *lcdbase);
 
-static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]);
 static void *lcd_logo (void);
 
 static int lcd_getbgcolor (void);
@@ -353,7 +356,14 @@ int drv_lcd_init (void)
 }
 
 /*----------------------------------------------------------------------*/
-static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
+static
+int do_lcd_clear(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+       lcd_clear();
+       return 0;
+}
+
+void lcd_clear(void)
 {
 #if LCD_BPP == LCD_MONOCHROME
        /* Setting the palette */
@@ -394,12 +404,10 @@ static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]
 
        console_col = 0;
        console_row = 0;
-
-       return (0);
 }
 
 U_BOOT_CMD(
-       cls,    1,      1,      lcd_clear,
+       cls,    1,      1,      do_lcd_clear,
        "clear screen",
        ""
 );
@@ -413,7 +421,7 @@ static int lcd_init (void *lcdbase)
 
        lcd_ctrl_init (lcdbase);
        lcd_is_enabled = 1;
-       lcd_clear (NULL, 1, 1, NULL);   /* dummy args */
+       lcd_clear();
        lcd_enable ();
 
        /* Initialize the console */
@@ -506,7 +514,7 @@ void bitmap_plot (int x, int y)
        uchar *bmap;
        uchar *fb;
        ushort *fb16;
-#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
+#if defined(CONFIG_CPU_PXA)
        struct pxafb_info *fbi = &panel_info.pxa;
 #elif defined(CONFIG_MPC823)
        volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
@@ -522,7 +530,7 @@ void bitmap_plot (int x, int y)
 
        if (NBITS(panel_info.vl_bpix) < 12) {
                /* Leave room for default color map */
-#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
+#if defined(CONFIG_CPU_PXA)
                cmap = (ushort *)fbi->palette;
 #elif defined(CONFIG_MPC823)
                cmap = (ushort *)&(cp->lcd_cmap[BMP_LOGO_OFFSET*sizeof(ushort)]);
@@ -617,7 +625,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
        unsigned long width, height, byte_width;
        unsigned long pwidth = panel_info.vl_col;
        unsigned colors, bpix, bmp_bpix;
-#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
+#if defined(CONFIG_CPU_PXA)
        struct pxafb_info *fbi = &panel_info.pxa;
 #elif defined(CONFIG_MPC823)
        volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
@@ -657,7 +665,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 #if !defined(CONFIG_MCC200)
        /* MCC200 LCD doesn't need CMAP, supports 1bpp b&w only */
        if (bmp_bpix == 8) {
-#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
+#if defined(CONFIG_CPU_PXA)
                cmap = (ushort *)fbi->palette;
 #elif defined(CONFIG_MPC823)
                cmap = (ushort *)&(cp->lcd_cmap[255*sizeof(ushort)]);
@@ -746,7 +754,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
                        WATCHDOG_RESET();
                        for (j = 0; j < width; j++) {
                                if (bpix != 16) {
-#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS || defined(CONFIG_ATMEL_LCD)
+#if defined(CONFIG_CPU_PXA) || defined(CONFIG_ATMEL_LCD)
                                        *(fb++) = *(bmap++);
 #elif defined(CONFIG_MPC823) || defined(CONFIG_MCC200)
                                        *(fb++) = 255 - *(bmap++);
index f0048233633da58649d45c96130e89eb0f76b6ff..5e0817c454bdd128390114dacf315066cba43140 100644 (file)
@@ -87,10 +87,12 @@ static inline void *menu_item_print(struct menu *m,
                                struct menu_item *item,
                                void *extra)
 {
-       if (!m->item_data_print)
-               printf("%s\n", item->key);
-       else
+       if (!m->item_data_print) {
+               puts(item->key);
+               putc('\n');
+       } else {
                m->item_data_print(item->data);
+       }
 
        return NULL;
 }
@@ -117,8 +119,10 @@ static inline void *menu_item_destroy(struct menu *m,
  */
 static inline void menu_display(struct menu *m)
 {
-       if (m->title)
-               printf("%s:\n", m->title);
+       if (m->title) {
+               puts(m->title);
+               putc('\n');
+       }
 
        menu_items_iter(m, menu_item_print, NULL);
 }
@@ -226,7 +230,7 @@ static inline int menu_interactive_choice(struct menu *m, void **choice)
                        if (!choice_item)
                                printf("%s not found\n", cbuf);
                } else {
-                       printf("^C\n");
+                       puts("^C\n");
                        return -EINTR;
                }
        }
index 35ad357b95072384139679d1f3bd34a3f5ec6bc1..2cc23b410a22bf38ed1d55eecf4f4915fa8e2082 100644 (file)
@@ -102,6 +102,7 @@ static int legacy_miiphy_write(struct mii_dev *bus, int addr, int devad,
 /*****************************************************************************
  *
  * Register read and write MII access routines for the device <name>.
+ * This API is now deprecated. Please use mdio_alloc and mdio_register, instead.
  */
 void miiphy_register(const char *name,
                      int (*read)(const char *devname, unsigned char addr,
@@ -281,6 +282,8 @@ static struct mii_dev *miiphy_get_active_dev(const char *devname)
  * Read to variable <value> from the PHY attached to device <devname>,
  * use PHY address <addr> and register <reg>.
  *
+ * This API is deprecated. Use phy_read on a phy_device found via phy_connect
+ *
  * Returns:
  *   0 on success
  */
@@ -307,6 +310,8 @@ int miiphy_read(const char *devname, unsigned char addr, unsigned char reg,
  * Write <value> to the PHY attached to device <devname>,
  * use PHY address <addr> and register <reg>.
  *
+ * This API is deprecated. Use phy_write on a phy_device found by phy_connect
+ *
  * Returns:
  *   0 on success
  */
@@ -350,6 +355,8 @@ void miiphy_listdev(void)
  * Model:    6 bits (unsigned char)
  * Revision: 4 bits (unsigned char)
  *
+ * This API is deprecated.
+ *
  * Returns:
  *   0 on success
  */
@@ -389,6 +396,9 @@ int miiphy_info(const char *devname, unsigned char addr, unsigned int *oui,
 /*****************************************************************************
  *
  * Reset the PHY.
+ *
+ * This API is deprecated. Use PHYLIB.
+ *
  * Returns:
  *   0 on success
  */
index a017b2963af0c5f56bd02cb6b243faa1adbfe8c0..e37e1eae81161a07e67c0c1347e962c6cdb3b5b8 100644 (file)
@@ -62,7 +62,6 @@ int mdm_init (void)
        char env_str[16];
        char *init_str;
        int i;
-       extern char console_buffer[];
        extern void enable_putc(void);
        extern int hwflow_onoff(int);
 
index 5b83d6ae71f288800e54fc13fc0e4e07a836e860..75cc1bb71c2aa3bafe570614c8caa3afe3b98ba5 100644 (file)
@@ -29,8 +29,8 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static struct serial_device *serial_devices = NULL;
-static struct serial_device *serial_current = NULL;
+static struct serial_device *serial_devices;
+static struct serial_device *serial_current;
 
 void serial_register(struct serial_device *dev)
 {
@@ -47,14 +47,14 @@ void serial_register(struct serial_device *dev)
        serial_devices = dev;
 }
 
-void serial_initialize (void)
+void serial_initialize(void)
 {
 #if defined(CONFIG_8xx_CONS_SMC1) || defined(CONFIG_8xx_CONS_SMC2)
-       serial_register (&serial_smc_device);
+       serial_register(&serial_smc_device);
 #endif
-#if defined(CONFIG_8xx_CONS_SCC1) || defined(CONFIG_8xx_CONS_SCC2) \
|| defined(CONFIG_8xx_CONS_SCC3) || defined(CONFIG_8xx_CONS_SCC4)
-       serial_register (&serial_scc_device);
+#if    defined(CONFIG_8xx_CONS_SCC1) || defined(CONFIG_8xx_CONS_SCC2) || \
      defined(CONFIG_8xx_CONS_SCC3) || defined(CONFIG_8xx_CONS_SCC4)
+       serial_register(&serial_scc_device);
 #endif
 
 #if defined(CONFIG_SYS_NS16550_SERIAL)
@@ -71,13 +71,13 @@ void serial_initialize (void)
        serial_register(&eserial4_device);
 #endif
 #endif /* CONFIG_SYS_NS16550_SERIAL */
-#if defined (CONFIG_FFUART)
+#if defined(CONFIG_FFUART)
        serial_register(&serial_ffuart_device);
 #endif
-#if defined (CONFIG_BTUART)
+#if defined(CONFIG_BTUART)
        serial_register(&serial_btuart_device);
 #endif
-#if defined (CONFIG_STUART)
+#if defined(CONFIG_STUART)
        serial_register(&serial_stuart_device);
 #endif
 #if defined(CONFIG_S3C2410)
@@ -122,18 +122,18 @@ void serial_initialize (void)
        serial_register(&uartlite_serial3_device);
 # endif /* XILINX_UARTLITE_BASEADDR3 */
 #endif /* CONFIG_XILINX_UARTLITE */
-       serial_assign (default_serial_console ()->name);
+       serial_assign(default_serial_console()->name);
 }
 
-void serial_stdio_init (void)
+void serial_stdio_init(void)
 {
        struct stdio_dev dev;
        struct serial_device *s = serial_devices;
 
        while (s) {
-               memset (&dev, 0, sizeof (dev));
+               memset(&dev, 0, sizeof(dev));
 
-               strcpy (dev.name, s->name);
+               strcpy(dev.name, s->name);
                dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT;
 
                dev.start = s->init;
@@ -143,18 +143,18 @@ void serial_stdio_init (void)
                dev.getc = s->getc;
                dev.tstc = s->tstc;
 
-               stdio_register (&dev);
+               stdio_register(&dev);
 
                s = s->next;
        }
 }
 
-int serial_assign (char *name)
+int serial_assign(const char *name)
 {
        struct serial_device *s;
 
        for (s = serial_devices; s; s = s->next) {
-               if (strcmp (s->name, name) == 0) {
+               if (strcmp(s->name, name) == 0) {
                        serial_current = s;
                        return 0;
                }
@@ -163,13 +163,12 @@ int serial_assign (char *name)
        return 1;
 }
 
-void serial_reinit_all (void)
+void serial_reinit_all(void)
 {
        struct serial_device *s;
 
-       for (s = serial_devices; s; s = s->next) {
-               s->init ();
-       }
+       for (s = serial_devices; s; s = s->next)
+               s->init();
 }
 
 static struct serial_device *get_current(void)
@@ -192,27 +191,27 @@ int serial_init(void)
        return get_current()->init();
 }
 
-void serial_setbrg (void)
+void serial_setbrg(void)
 {
        get_current()->setbrg();
 }
 
-int serial_getc (void)
+int serial_getc(void)
 {
        return get_current()->getc();
 }
 
-int serial_tstc (void)
+int serial_tstc(void)
 {
        return get_current()->tstc();
 }
 
-void serial_putc (const char c)
+void serial_putc(const char c)
 {
        get_current()->putc(c);
 }
 
-void serial_puts (const char *s)
+void serial_puts(const char *s)
 {
        get_current()->puts(s);
 }
index bed51165053ad0e2cbf90639b551ed33c6be60ed..4418c70f462c9282b2c911a65addf74680ad7059 100644 (file)
@@ -263,18 +263,24 @@ int usb_maxpacket(struct usb_device *dev, unsigned long pipe)
                return dev->epmaxpacketin[((pipe>>15) & 0xf)];
 }
 
-/* The routine usb_set_maxpacket_ep() is extracted from the loop of routine
+/*
+ * The routine usb_set_maxpacket_ep() is extracted from the loop of routine
  * usb_set_maxpacket(), because the optimizer of GCC 4.x chokes on this routine
  * when it is inlined in 1 single routine. What happens is that the register r3
  * is used as loop-count 'i', but gets overwritten later on.
  * This is clearly a compiler bug, but it is easier to workaround it here than
  * to update the compiler (Occurs with at least several GCC 4.{1,2},x
  * CodeSourcery compilers like e.g. 2007q3, 2008q1, 2008q3 lite editions on ARM)
+ *
+ * NOTE: Similar behaviour was observed with GCC4.6 on ARMv5.
  */
 static void  __attribute__((noinline))
-usb_set_maxpacket_ep(struct usb_device *dev, struct usb_endpoint_descriptor *ep)
+usb_set_maxpacket_ep(struct usb_device *dev, int if_idx, int ep_idx)
 {
        int b;
+       struct usb_endpoint_descriptor *ep;
+
+       ep = &dev->config.if_desc[if_idx].ep_desc[ep_idx];
 
        b = ep->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
 
@@ -313,8 +319,7 @@ int usb_set_maxpacket(struct usb_device *dev)
 
        for (i = 0; i < dev->config.desc.bNumInterfaces; i++)
                for (ii = 0; ii < dev->config.if_desc[i].desc.bNumEndpoints; ii++)
-                       usb_set_maxpacket_ep(dev,
-                                         &dev->config.if_desc[i].ep_desc[ii]);
+                       usb_set_maxpacket_ep(dev, i, ii);
 
        return 0;
 }
index e7f27147f12c505ff5932b46824fe766c73b616c..b6cda57ff592667230e1d7c09dd64e991146701e 100644 (file)
@@ -130,7 +130,7 @@ void print_part_efi(block_dev_desc_t * dev_desc)
        }
        /* This function validates AND fills in the GPT header and PTE */
        if (is_gpt_valid(dev_desc, GPT_PRIMARY_PARTITION_TABLE_LBA,
-                        &(gpt_head), &gpt_pte) != 1) {
+                        gpt_head, &gpt_pte) != 1) {
                printf("%s: *** ERROR: Invalid GPT ***\n", __func__);
                return;
        }
@@ -169,7 +169,7 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, int part,
 
        /* This function validates AND fills in the GPT header and PTE */
        if (is_gpt_valid(dev_desc, GPT_PRIMARY_PARTITION_TABLE_LBA,
-                       &(gpt_head), &gpt_pte) != 1) {
+                       gpt_head, &gpt_pte) != 1) {
                printf("%s: *** ERROR: Invalid GPT ***\n", __func__);
                return -1;
        }
@@ -380,7 +380,7 @@ static gpt_entry *alloc_read_gpt_entries(block_dev_desc_t * dev_desc,
 
        /* Allocate memory for PTE, remember to FREE */
        if (count != 0) {
-               pte = memalign(CONFIG_SYS_CACHELINE_SIZE, count);
+               pte = memalign(ARCH_DMA_MINALIGN, count);
        }
 
        if (count == 0 || pte == NULL) {
diff --git a/doc/README.m28 b/doc/README.m28
new file mode 100644 (file)
index 0000000..b749ce0
--- /dev/null
@@ -0,0 +1,223 @@
+DENX M28EVK
+===========
+
+This document describes the DENX M28/M28EVK U-Boot port. This document mostly
+covers topics related to making the module/board bootable.
+
+Terminology
+-----------
+
+The dollar symbol ($) introduces a snipped of shell code. This shall be typed
+into the unix command prompt in U-Boot source code root directory.
+
+The (=>) introduces a snipped of code that should by typed into U-Boot command
+prompt.
+
+Contents
+--------
+
+0) Files of the M28/M28EVK port
+1) Prerequisites
+2) Compiling U-Boot for M28
+3) Installation of U-Boot for M28EVK to SD card
+4) Installation of U-Boot for M28 to NAND flash
+
+0) Files of the M28/M28EVK port
+-------------------------------
+
+arch/arm/cpu/arm926ejs/mx28/   - The CPU support code for the Freescale i.MX28
+arch/arm/include/asm/arch-mx28/        - Header files for the Freescale i.MX28
+board/denx/m28evk/             - M28EVK board specific files
+include/configs/m28evk.h       - M28EVK configuration file
+
+1) Prerequisites
+----------------
+
+To make the M28 module or the M28 module or M28EVK board bootable, some tools
+are necessary. The first one is the "elftosb" tool distributed by Freescale
+Semiconductor. The other tool is the "mxsboot" tool found in U-Boot source tree.
+
+Firstly, obtain the elftosb archive from the following location:
+
+       http://foss.doredevelopment.dk/mirrors/imx/elftosb-10.12.01.tar.gz
+
+We use a $VER variable here to denote the current version. At the time of
+writing of this document, that is "10.12.01". To obtain the file from command
+line, use:
+
+       $ VER="10.12.01"
+       $ wget http://foss.doredevelopment.dk/mirrors/imx/elftosb-${VER}.tar.gz
+
+Extract the file:
+
+       $ tar xzf elftosb-${VER}.tar.gz
+
+Compile the file. We need to manually tell the linker to use also libm:
+
+       $ cd elftosb-${VER}/
+       $ make LIBS="-lstdc++ -lm" elftosb
+
+Optionally, remove debugging symbols from elftosb:
+
+       $ strip bld/linux/elftosb
+
+Finally, install the "elftosb" binary. The "install" target is missing, so just
+copy the binary by hand:
+
+       $ sudo cp bld/linux/elftosb /usr/local/bin/
+
+Make sure the "elftosb" binary can be found in your $PATH, in this case this
+means "/usr/local/bin/" has to be in your $PATH.
+
+2) Compiling U-Boot for M28
+---------------------------
+
+Compiling the U-Boot for M28 is straightforward and done as compiling U-Boot
+for any other ARM device. For cross-compiler setup, please refer to ELDK5.0
+documentation. First, clean up the source code:
+
+       $ make mrproper
+
+Next, configure U-Boot for M28EVK:
+
+       $ make m28evk_config
+
+Lastly, compile U-Boot and prepare a "BootStream". The "BootStream" is a special
+type of file, which the i.MX28 CPU can boot. This is handled by the following
+command:
+
+       $ make u-boot.sb
+
+HINT: To speed-up the build process, you can add -j<N>, where N is number of
+      compiler instances that'll run in parallel.
+
+The code produces "u-boot.sb" file. This file needs to be augmented with a
+proper header to allow successful boot from SD or NAND. Adding the header is
+discussed in the following chapters.
+
+3) Installation of U-Boot for M28EVK to SD card
+-----------------------------------------------
+
+To boot an M28 from SD, set the boot mode DIP switches according to i.MX28
+manual chapter 12.2.1 (Table 12-2), PORT=SSP0, SD/MMC master on SSP0, 3.3V.
+
+An SD card the i.MX28 CPU can use to boot U-Boot must contain a DOS partition
+table, which in turn carries a partition of special type and which contains a
+special header. The rest of partitions in the DOS partition table can be used
+by the user.
+
+To prepare such partition, use your favourite partitioning tool. The partition
+must have the following parameters:
+
+       * Start sector .......... sector 2048
+       * Partition size ........ at least 1024 kb
+       * Partition type ........ 0x53 (sometimes "OnTrack DM6 Aux3")
+
+For example in Linux fdisk, the sequence for a clear card is the following:
+
+       * o ..................... create a clear partition table
+       * n ..................... create new partition
+               * p ............. primary partition
+               * 1 ............. first partition
+               * 2048 .......... first sector is 2048
+               * +1M ........... make the partition 1Mb big
+       * t 1 ................... change first partition ID
+               * 53 ............ change the ID to 0x53 (OnTrack DM6 Aux3)
+       * <create other partitions>
+       * w ..................... write partition table to disk
+
+The partition layout is ready, next the special partition must be filled with
+proper contents. The contents is generated by running the following command (see
+chapter 2)):
+
+       $ ./tools/mxsboot sd u-boot.sb u-boot.sd
+
+The resulting file, "u-boot.sd", shall then be written to the partition. In this
+case, we assume the first partition of the SD card is /dev/mmcblk0p1:
+
+       $ dd if=u-boot.sd of=/dev/mmcblk0p1
+
+Last step is to insert the card into M28EVK and boot.
+
+NOTE: If the user needs to adjust the start sector, the "mxsboot" tool contains
+      a "-p" switch for that purpose. The "-p" switch takes the sector number as
+      an argument.
+
+4) Installation of U-Boot for M28 to NAND flash
+-----------------------------------------------
+
+To boot an M28 from NAND, set the boot mode DIP switches according to i.MX28
+manual chapter 12.2.1 (Table 12-2), PORT=GPMI, NAND 1.8 V.
+
+There are two possibilities when preparing an image writable to NAND flash.
+
+       I) The NAND wasn't written at all yet or the BCB is broken
+       ----------------------------------------------------------
+          In this case, both BCB (FCB and DBBT) and firmware needs to be
+          written to NAND. To generate NAND image containing all these,
+          there is a tool called "mxsboot" in the "tools/" directory. The tool
+          is invoked on "u-boot.sb" file from chapter 2):
+
+                $ ./tools/mxsboot nand u-boot.sb u-boot.nand
+
+          NOTE: The above invokation works for NAND flash with geometry of
+                2048b per page, 64b OOB data, 128kb erase size. If your chip
+                has a different geometry, please use:
+
+                -w <size>      change page size (default 2048 b)
+                -o <size>      change oob size (default 64 b)
+                -e <size>      change erase size (default 131072 b)
+
+                The geometry information can be obtained from running U-Boot
+                on M28 by issuing the "nand info" command.
+
+          The resulting file, "u-boot.nand" can be written directly to NAND
+          from the U-Boot prompt. To simplify the process, the U-Boot default
+          environment contains script "update_nand_full" to update the system.
+
+          This script expects a working TFTP server containing the file
+          "u-boot.nand" in it's root directory. This can be changed by
+          adjusting the "update_nand_full_filename" varible.
+
+          To update the system, run the following in U-Boot prompt:
+
+                => run update_nand_full
+
+          In case you would only need to update the bootloader in future,
+          see II) below.
+
+       II) The NAND was already written with a good BCB
+       ------------------------------------------------
+          This part applies after the part I) above was done at least once.
+
+          If part I) above was done correctly already, there is no need to
+          write the FCB and DBBT parts of NAND again. It's possible to upgrade
+          only the bootloader image.
+
+          To simplify the process of firmware update, the U-Boot default
+          environment contains script "update_nand_firmware" to update only
+          the firmware, without rewriting FCB and DBBT.
+
+          This script expects a working TFTP server containing the file
+          "u-boot.sb" in it's root directory. This can be changed by
+          adjusting the "update_nand_firmware_filename" varible.
+
+          To update the system, run the following in U-Boot prompt:
+
+                => run update_nand_firmware
+
+       III) Special settings for the update scripts
+       --------------------------------------------
+          There is a slight possibility of the user wanting to adjust the
+          STRIDE and COUNT options of the NAND boot. For description of these,
+          see i.MX28 manual section 12.12.1.2 and 12.12.1.3.
+
+          The update scripts take this possibility into account. In case the
+          user changes STRIDE by blowing fuses, the user also has to change
+          "update_nand_stride" variable. In case the user changes COUNT by
+          blowing fuses, the user also has to change "update_nand_count"
+          variable for the update scripts to work correctly.
+
+          In case the user needs to boot a firmware image bigger than 1Mb, the
+          user has to adjust the "update_nand_firmware_maxsz" variable for the
+          update scripts to work properly.
diff --git a/doc/README.p3060qds b/doc/README.p3060qds
new file mode 100644 (file)
index 0000000..2ed49ca
--- /dev/null
@@ -0,0 +1,111 @@
+Overview
+=========
+The P3060QDS is a Freescale reference board that hosts the six-core P3060 SOC.
+
+The P3060 Processor combines six e500mc Power Architecture processor
+cores(1.2GHz) with high-performance datapath acceleration
+architecture(DPAA), CoreNet fabric infrastructure, as well as network
+and peripheral bus interfaces required for networking, telecom/datacom,
+wireless infrastructure, and military/aerospace applications.
+
+
+P3060QDS Board Specifications:
+==============================
+Memory subsystem:
+ * 2G Bytes UDIMM DDR3(64bit bus) with ECC on
+ * 128M Bytes NOR flash single-chip memory
+ * 16M Bytes SPI flash
+ * 8K Bytes AT24C64 I2C EEPROM for RCW
+
+Ethernet(Default SERDES 0x19):
+ * FM1-dTSEC1: connected to RGMII PHY1 (Vitesse VSC8641 on board,Bottom of dual RJ45)
+ * FM1-dTSEC2: connected to RGMII PHY2 (Vitesse VSC8641 on board,Top of dual RJ45)
+ * FM1-dTSEC3: connected to SGMII PHY  (Vitesse VSC8234 port1 in slot1)
+ * FM1-dTSEC4: connected to SGMII PHY  (Vitesse VSC8234 port3 in slot1)
+ * FM2-dTSEC1: connected to SGMII PHY  (Vitesse VSC8234 port0 in slot2)
+ * FM2-dTSEC2: connected to SGMII PHY  (Vitesse VSC8234 port2 in slot2)
+ * FM2-dTSEC3: connected to SGMII PHY  (Vitesse VSC8234 port0 in slot1)
+ * FM2-dTSEC4: connected to SGMII PHY  (Vitesse VSC8234 port2 in slot1)
+
+PCIe:
+ * PCIe1: Lanes A, B, C and D of Bank1 are connected to one x4 PCIe SLOT4
+ * PCIe2: Lanes E, F, G and H of Bank1 are connected to one x4 PCIe SLOT3
+
+RapidIO:
+ * sRIO1: Lanes E, F, G and H of Bank1 are connected to sRIO1 (SLOT3)
+ * sRIO2: Lanes A, B, C and D of Bank1 are connected to sRIO2 (SLOT4)
+
+USB:
+ * USB1: connected via an external ULPI PHY SMC3315 to a TYPE-A interface
+ * USB2: connected via an external ULPI PHY SMC3315 to a TYPE-AB interface
+
+I2C:
+ * I2C1_CH0: EEPROM AT24C64(0x50) RCW, AT24C02(0x51) DDR SPD,
+            AT24C02(0x53) DDR SPD, AT24C02(0x57) SystemID, RTC DS3232(0x68)
+ * I2C1_CH1: 1588 RiserCard(0x55), HSLB Testport, TempMon
+             ADT7461(0x4C), SerDesMux DS64MB201(0x51/59/5C/5D)
+ * I2C1_CH2: VDD/GVDD/GIDD ZL6100 (0x21/0x22/0x23/0x24/0x40)
+ * I2C1_CH3: OCM CFG AT24C02(0x55), OCM IPL AT24C64(0x56)
+ * I2C1_CH4: PCIe SLOT1
+ * I2C1_CH5: PCIe SLOT2
+ * I2C1_CH6: PCIe SLOT3
+ * I2C1_CH7: PCIe SLOT4
+ * I2C2: NULL
+ * I2C3: NULL
+
+UART:
+ * Supports two UARTs up to 115200 bps for console
+
+
+Boot from NOR flash
+===================
+1. Build image
+       export ARCH=powerpc
+       export CROSS_COMPILE=/your_path/gcc-4.5.xx-eglibc-2.11.xx/powerpc-linux-gnu/bin/powerpc-linux-gnu-
+       make P3060QDS_config
+       make
+
+2. Program image
+       => tftp 1000000 u-boot.bin
+       => protect off all
+       => erase eff80000 efffffff
+       => cp.b 1000000 eff80000 80000
+
+3. Program RCW
+       => tftp 1000000 rcw.bin
+       => protect off all
+       => erase e8000000 e801ffff
+       => cp.b 1000000 e8000000 50
+
+4. Program FMAN Firmware ucode
+       => tftp 1000000 ucode.bin
+       => protect off all
+       => erase ef000000 ef0fffff
+       => cp.b 1000000 ef000000 2000
+
+5. Change DIP-switch
+       RCW Location: SW1[1-5] = 01101 (eLBC 16bit NOR flash)
+       Note: 1 stands for 'on', 0 stands for 'off'
+
+
+Using the Device Tree Source File
+=================================
+To create the DTB (Device Tree Binary) image file, use a command
+similar to this:
+       dtc -O dtb -b 0 -p 1024 p3060qds.dts > p3060qds.dtb
+
+Or use the following command:
+       {linux-2.6}/make p3060qds.dtb ARCH=powerpc
+
+then the dtb file will be generated under the following directory:
+       {linux-2.6}/arch/powerpc/boot/p3060qds.dtb
+
+
+Booting Linux
+=============
+Place a linux uImage in the TFTP disk area.
+       tftp 1000000 uImage
+       tftp 2000000 rootfs.ext2.gz.uboot
+       tftp 3000000 p3060rdb.dtb
+       bootm 1000000 2000000 3000000
+
index cb5e4bc0c6e5f08b86bf818141168db98323aea8..07f00243620efca2023179210f526ffd20c782c4 100644 (file)
@@ -11,6 +11,10 @@ easily if here is something they might want to dig for...
 
 Board  Arch    CPU     removed     Commit      last known maintainer/contact
 =============================================================================
+xm250   arm     pxa     c746cdd   2011-25-11
+pleb2   arm     pxa     b185a1c   2011-25-11
+cradle  arm     pxa     4e24f8a   2011-25-11    Kyle Harris <kharris@nexus-tech.net>
+cerf250 arm     pxa     a3f1241   2011-25-11    Prakash Kumar <prakash@embedx.com>
 mpq101 powerpc mpc85xx -         2011-10-23    Alex Dubov <oakad@yahoo.com>
 ixdpg425 arm   ixp     0ca8eb7   2011-09-22    Stefan Roese <sr@denx.de>
 ixdp425 arm    ixp     0ca8eb7   2011-09-22    Kyle Harris <kharris@nexus-tech.net>
@@ -30,7 +34,7 @@ m501sk        arm     arm920t b1a2bd4   2011-07-17
 kb9202 arm     arm920t 5bd3814   2011-07-17
 csb637 arm     arm920t d14af08   2011-07-17
 cmc_pu2        arm     arm920t 37a9b4d   2011-07-17
-at91cap9adk arm        arm926ejs b550834 2011-07-17    Stelian Pop <stelian.pop@leadtechdesign.com>
+at91cap9adk arm        arm926ejs b550834 2011-07-17    Stelian Pop <stelian@popies.net>
 voiceblue arm  arm925t 1b793a4   2011-07-17
 smdk2400 arm   arm920t ad218a8   2011-07-17    Gary Jennejohn <garyj@denx.de>
 sbc2410x arm   arm920t 1f7f0ed   2011-07-17
index 49fea5057b6b56f795fd7b5b078daa7497c0366d..109f715cc079f56b4715c9a677b313385e5951ff 100644 (file)
@@ -61,3 +61,17 @@ You can write MAC address to SPI ROM.
                 ETHERC ch1 = 00:00:87:6c:21:81
                GETHERC ch0 = 00:00:87:6c:21:82
                GETHERC ch1 = 00:00:87:6c:21:83
+
+
+Update SPI ROM:
+============================
+
+1. Copy u-boot image to RAM area.
+2. Probe SPI device. 
+   => sf probe 0 
+   8192 KiB M25P64 at 0:0 is now current device
+3. Erase SPI ROM.
+   => sf erase 0 80000  
+4. Write u-boot image to SPI ROM.
+   => sf write 0x89000000 0 80000
+
index 00d87e44123e0a2c03b426cb26d47fefb2bbc652..e04ba2dda5a35f09479b26120ee18e63dbda66f4 100644 (file)
@@ -7,6 +7,17 @@ file.
 
 ---------------------------
 
+What:  Users of the legacy miiphy_* code
+When:  undetermined
+
+Why:   We now have a PHY library, which allows everyone to share PHY
+       drivers. All new drivers should use this infrastructure, and
+       all old drivers should get converted to use it.
+
+Who:   Andy Fleming <afleming@freescale.com> and driver maintainers
+
+---------------------------
+
 What:  boards with xxx_config targets in top level Makefile
 When:  Release v2012.03
 
diff --git a/doc/git-mailrc b/doc/git-mailrc
new file mode 100644 (file)
index 0000000..4039e55
--- /dev/null
@@ -0,0 +1,101 @@
+# To use this file, run in your u-boot tree:
+#      git config sendemail.aliasesfile doc/git-mailrc
+#      git config sendemail.aliasfiletype mutt
+#
+# Then when sending patches, you can use:
+#      git send-email --to u-boot --cc i2c ...
+
+alias uboot  u-boot@lists.denx.de
+alias u-boot uboot
+
+# Maintainer aliases.  Use the same alias here as patchwork to keep
+# things simple and easy to look up/coordinate.
+alias aaribaud       Albert Aribaud <albert.u.boot@aribaud.net>
+alias afleming       Andy Fleming <afleming@freescale.com>
+alias ag             Anatolij Gustschin <agust@denx.de>
+alias galak          Kumar Gala <galak@kernel.crashing.org>
+alias gruss          Graeme Russ <graeme.russ@gmail.com>
+alias hs             Heiko Schocher <hs@denx.de>
+alias iwamatsu       Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+alias jasonjin       Jason Jin <jason.jin@freescale.com>
+alias kimphill       Kim Phillips <kim.phillips@freescale.com>
+alias macpaul        Macpaul Lin <macpaul@andestech.com>
+alias marex          Marek Vasut <marek.vasut@gmail.com>
+alias monstr         Michal Simek <monstr@monstr.eu>
+alias prafulla       Prafulla Wadaskar <prafulla@marvell.com>
+alias prom           Minkyu Kang <mk7.kang@samsung.com>
+alias rbohmer        Remy Bohmer <linux@bohmer.net>
+alias reinhardm      Reinhard Meyer <u-boot@emk-elektronik.de>
+alias sbabic         Stefano Babic <sbabic@denx.de>
+alias scottwood      Scott Wood <scottwood@freescale.com>
+alias smcnutt        Scott McNutt <smcnutt@psyent.com>
+alias stroese        Stefan Roese <sr@denx.de>
+alias vapier         Mike Frysinger <vapier@gentoo.org>
+alias wd             Wolfgang Denk <wd@denx.de>
+
+# Architecture aliases
+alias arch           arm, avr32, bfin, m68k, microblaze, mips, nds32, nios2, powerpc, sandbox, superh, sparc, x86
+alias arches         arch
+
+alias arm            uboot, aaribaud
+alias at91           uboot, reinhardm
+alias davinci        omap
+alias imx            uboot, sbabic
+alias kirkwood       uboot, prafulla
+alias omap           uboot, Sandeep Paulraj <s-paulraj@ti.com>
+alias pxa            uboot, marex
+alias s3c            samsung
+alias s5pc           samsung
+alias samsung        uboot, prom
+alias tegra          uboot, Simon Glass <sjg@chromium.org>, Tom Warren <twarren@nvidia.com>, Stephen Warren <swarren@nvidia.com>
+alias tegra2         tegra
+
+alias avr32          uboot, reinhardm
+
+alias bfin           uboot, vapier
+alias blackfin       bfin
+
+alias m68k           uboot, jasonjin
+alias coldfire       m68k
+
+alias microblaze     uboot, monstr
+alias mb             microblaze
+
+alias mips           uboot, Shinya Kuribayashi <skuribay@pobox.com>
+
+alias nds32          uboot, macpaul
+
+alias nios           uboot, Thomas Chou <thomas@wytron.com.tw>, smcnutt
+alias nios2          nios
+
+alias powerpc        uboot, afleming, kimphill, galak, stroese, wd
+alias ppc            powerpc
+alias mpc5xxx        uboot, wd
+alias mpc8xx         uboot, wd
+alias mpc82xx        uboot, wd
+alias mpc83xx        uboot, kimphill
+alias mpc85xx        uboot, afleming, galak
+alias mpc86xx        uboot, afleming, galak
+alias ppc4xx         uboot, stroese
+alias ppc7xx         uboot, wd
+alias ppc74xx        uboot, wd
+
+alias sandbox        Simon Glass <sjg@chromium.org>
+alias sb             sandbox
+
+alias sparc          uboot, Daniel Hellstrom <daniel@gaisler.com>
+
+alias superh         uboot, iwamatsu
+alias sh             superh
+
+alias x86            uboot, gruss
+
+# Subsystem aliases
+alias cfi            uboot, stroese
+alias fdt            uboot, Jerry Van Baren <vanbaren@cideas.com>
+alias i2c            uboot, hs
+alias mmc            uboot, afleming
+alias nand           uboot, scottwood
+alias net            uboot, wd
+alias usb            uboot, rbohmer
+alias video          uboot, ag
index c836a20b15f869cf46cd58aae0bc052d8ee5e6b3..f8e093d751ae59adbeed9329b09cf9dc8ee1e2f5 100644 (file)
@@ -3518,11 +3518,9 @@ Handles opcode 0xcc
 ****************************************************************************/
 void x86emuOp_int3(u8 X86EMU_UNUSED(op1))
 {
-    u16 tmp;
-
     START_OF_INSTR();
     DECODE_PRINTF("INT 3\n");
-    tmp = (u16) mem_access_word(3 * 4 + 2);
+    (void)mem_access_word(3 * 4 + 2);
     /* access the segment register */
     TRACE_AND_STEP();
        if (_X86EMU_intrTab[3]) {
@@ -3546,14 +3544,13 @@ Handles opcode 0xcd
 ****************************************************************************/
 void x86emuOp_int_IMM(u8 X86EMU_UNUSED(op1))
 {
-    u16 tmp;
     u8 intnum;
 
     START_OF_INSTR();
     DECODE_PRINTF("INT\t");
     intnum = fetch_byte_imm();
     DECODE_PRINTF2("%x\n", intnum);
-    tmp = mem_access_word(intnum * 4 + 2);
+    (void)mem_access_word(intnum * 4 + 2);
     TRACE_AND_STEP();
        if (_X86EMU_intrTab[intnum]) {
                (*_X86EMU_intrTab[intnum])(intnum);
@@ -3576,13 +3573,11 @@ Handles opcode 0xce
 ****************************************************************************/
 void x86emuOp_into(u8 X86EMU_UNUSED(op1))
 {
-    u16 tmp;
-
     START_OF_INSTR();
     DECODE_PRINTF("INTO\n");
     TRACE_AND_STEP();
     if (ACCESS_FLAG(F_OF)) {
-       tmp = mem_access_word(4 * 4 + 2);
+       (void)mem_access_word(4 * 4 + 2);
                if (_X86EMU_intrTab[4]) {
                        (*_X86EMU_intrTab[4])(4);
        } else {
@@ -3990,11 +3985,9 @@ Handles opcode 0xd5
 ****************************************************************************/
 void x86emuOp_aad(u8 X86EMU_UNUSED(op1))
 {
-    u8 a;
-
     START_OF_INSTR();
     DECODE_PRINTF("AAD\n");
-    a = fetch_byte_imm();
+    (void)fetch_byte_imm();
     TRACE_AND_STEP();
     M.x86.R_AX = aad_word(M.x86.R_AX);
     DECODE_CLEAR_SEGOVR();
index 937bf4ce0732b8f683db0bce5b078081e6aef71d..59dbb422dd40d28595e0f77eef264e3a742f9b40 100644 (file)
@@ -42,6 +42,7 @@
 ****************************************************************************/
 
 #include <common.h>
+#include <linux/compiler.h>
 #include "x86emu/x86emui.h"
 
 /*----------------------------- Implementation ----------------------------*/
@@ -168,7 +169,7 @@ void x86emuOp2_set_byte(u8 op2)
     int mod, rl, rh;
     uint destoffset;
     u8 *destreg;
-    char *name = 0;
+    __maybe_unused char *name = 0;
     int cond = 0;
 
     START_OF_INSTR();
index 015b341d9e0d38345fd67c4ee0d24f6c65181b8e..7b2ec505e189455d86ab8b7cfafb71266290980d 100644 (file)
@@ -561,12 +561,9 @@ static int ata_scsiop_inquiry(ccb *pccb)
  */
 static int ata_scsiop_read10(ccb * pccb)
 {
-       u64 lba = 0;
        u32 len = 0;
        u8 fis[20];
 
-       lba = (((u64) pccb->cmd[2]) << 24) | (((u64) pccb->cmd[3]) << 16)
-           | (((u64) pccb->cmd[4]) << 8) | ((u64) pccb->cmd[5]);
        len = (((u32) pccb->cmd[7]) << 8) | ((u32) pccb->cmd[8]);
 
        /* For 10-byte and 16-byte SCSI R/W commands, transfer
index 6b3517369ddd4c13941207f280e5e494797167f4..3026adec0d6109b67eefd05177bff14409c326ab 100644 (file)
@@ -197,27 +197,6 @@ int init_sata(int dev)
        /* Wait the controller offline */
        ata_wait_register(&reg->hstatus, HSTATUS_ONOFF, 0, 1000);
 
-#if defined(CONFIG_FSL_SATA_V2) && defined(CONFIG_FSL_SATA_ERRATUM_A001)
-       /*
-        * For P1022/1013 Rev1.0 silicon, after power on SATA host
-        * controller is configured in legacy mode instead of the
-        * expected enterprise mode. software needs to clear bit[28]
-        * of HControl register to change to enterprise mode from
-        * legacy mode.
-        */
-       {
-               u32 svr = get_svr();
-               if (IS_SVR_REV(svr, 1, 0) &&
-                   ((SVR_SOC_VER(svr) == SVR_P1022) ||
-                    (SVR_SOC_VER(svr) == SVR_P1022_E) ||
-                    (SVR_SOC_VER(svr) == SVR_P1013) ||
-                    (SVR_SOC_VER(svr) == SVR_P1013_E))) {
-                       out_le32(&reg->hstatus, 0x20000000);
-                       out_le32(&reg->hcontrol, 0x00000100);
-               }
-       }
-#endif
-
        /* Set the command header base address to CHBA register to tell DMA */
        out_le32(&reg->chba, (u32)cmd_hdr & ~0x3);
 
index 576efaf6f5241ba7359f72a3d02633441cb767fc..cecff68da3500430a1f6df6af16e62c99dbaf596 100644 (file)
@@ -103,6 +103,7 @@ typedef struct fsl_sata_reg {
 */
 #define HCONTROL_ONOFF                 0x80000000 /* Online or offline request */
 #define HCONTROL_FORCE_OFFLINE         0x40000000 /* Force offline request */
+#define HCONTROL_ENTERPRISE_EN         0x10000000 /* Enterprise mode enabled */
 #define HCONTROL_HDR_SNOOP             0x00000400 /* Command header snoop */
 #define HCONTROL_PMP_ATTACHED          0x00000200 /* Port multiplier attached */
 
index 4a7a07f60b21514330eacf9ffb46c4501cca19e5..ad8fdad7c228756f56a73cf585284769c4618e0f 100644 (file)
@@ -316,10 +316,9 @@ int ide_preinit(void)
 
        /* auto-detect IDE controller */
        if (ftide_controller_probe()) {
-               printf("Faraday %s driver version %s\n", FTIDE_IP_NAME,
-               FTIDE_DRIVER_VERSION);
+               printf("FTIDE020_S\n");
        } else {
-               printf("Faraday ATA controller not found.\n");
+               printf("FTIDE020_S ATA controller not found.\n");
                return API_ENODEV;
        }
 
index 1be395fb45baf5d85e44fb434e574fde4c931e31..a88d0f7f83995dd3465f8becf20869d6aa8051a4 100644 (file)
@@ -150,23 +150,25 @@ static int mvsata_ide_initialize_port(struct mvsata_port_registers *port)
 
 int ide_preinit(void)
 {
+       int ret = MVSATA_STATUS_TIMEOUT;
        int status;
+
        /* Enable ATA port 0 (could be SATA port 0 or 1) if declared */
 #if defined(CONFIG_SYS_ATA_IDE0_OFFSET)
        status = mvsata_ide_initialize_port(
                (struct mvsata_port_registers *)
                (CONFIG_SYS_ATA_BASE_ADDR + CONFIG_SYS_ATA_IDE0_OFFSET));
-       if (status)
-               return status;
+       if (status == MVSATA_STATUS_OK)
+               ret = MVSATA_STATUS_OK;
 #endif
        /* Enable ATA port 1 (could be SATA port 0 or 1) if declared */
 #if defined(CONFIG_SYS_ATA_IDE1_OFFSET)
        status = mvsata_ide_initialize_port(
                (struct mvsata_port_registers *)
                (CONFIG_SYS_ATA_BASE_ADDR + CONFIG_SYS_ATA_IDE1_OFFSET));
-       if (status)
-               return status;
+       if (status == MVSATA_STATUS_OK)
+               ret = MVSATA_STATUS_OK;
 #endif
-       /* return success if all ports initializations succeeded */
-       return MVSATA_STATUS_OK;
+       /* Return success if at least one port initialization succeeded */
+       return ret;
 }
index b2b3804be9b3989527e330dfa56377b0587c7653..75101b5d798dd8c9a2a03a5f2576a652f65c54cf 100644 (file)
@@ -440,11 +440,9 @@ static int sata_dwc_softreset(struct ata_port *ap)
 {
        u8 nsect,lbal = 0;
        u8 tmp = 0;
-       u32 serror = 0;
-       u8 status = 0;
        struct ata_ioports *ioaddr = &ap->ioaddr;
 
-       serror = in_le32((void *)ap->ioaddr.scr_addr + (SCR_ERROR * 4));
+       in_le32((void *)ap->ioaddr.scr_addr + (SCR_ERROR * 4));
 
        writeb(0x55, ioaddr->nsect_addr);
        writeb(0xaa, ioaddr->lbal_addr);
@@ -476,7 +474,7 @@ static int sata_dwc_softreset(struct ata_port *ap)
        writeb(ap->ctl, ioaddr->ctl_addr);
 
        msleep(150);
-       status = ata_check_status(ap);
+       ata_check_status(ap);
 
        msleep(50);
        ata_check_status(ap);
@@ -534,8 +532,7 @@ int scan_sata(int dev)
        u8 status;
        const u16 *id;
        struct ata_device *ata_dev = &ata_device;
-       unsigned long pio_mask, mwdma_mask, udma_mask;
-       unsigned long xfer_mask;
+       unsigned long pio_mask, mwdma_mask;
        char revbuf[7];
        u16 iobuf[ATA_SECTOR_WORDS];
 
@@ -625,14 +622,6 @@ int scan_sata(int dev)
                        mwdma_mask |= (1 << 4);
        }
 
-       udma_mask = 0;
-       if (id[ATA_ID_FIELD_VALID] & (1 << 2))
-               udma_mask = id[ATA_ID_UDMA_MODES] & 0xff;
-
-       xfer_mask = ((pio_mask << ATA_SHIFT_PIO) & ATA_MASK_PIO) |
-               ((mwdma_mask << ATA_SHIFT_MWDMA) & ATA_MASK_MWDMA) |
-               ((udma_mask << ATA_SHIFT_UDMA) & ATA_MASK_UDMA);
-
        if (ata_dev->class == ATA_DEV_ATA) {
                if (ata_id_is_cfa(id)) {
                        if (id[162] & 1)
@@ -651,14 +640,11 @@ int scan_sata(int dev)
                        ata_dev->multi_count = ata_dev->id[59] & 0xff;
 
                if (ata_id_has_lba(id)) {
-                       const char *lba_desc;
                        char ncq_desc[20];
 
-                       lba_desc = "LBA";
                        ata_dev->flags |= ATA_DFLAG_LBA;
                        if (ata_id_has_lba48(id)) {
                                ata_dev->flags |= ATA_DFLAG_LBA48;
-                               lba_desc = "LBA48";
 
                                if (ata_dev->n_sectors >= (1UL << 28) &&
                                        ata_id_has_flush_ext(id))
@@ -890,6 +876,7 @@ retry:
        return 0;
 
 err_out:
+       printf("failed to READ ID (%s, err_mask=0x%x)\n", reason, err_mask);
        return rc;
 }
 
@@ -1807,7 +1794,6 @@ static int ata_dev_read_sectors(unsigned char *pdata, unsigned long datalen,
        unsigned int err_mask = 0;
        const char *reason;
        int may_fallback = 1;
-       int rc;
 
        if (dev_state == SATA_ERROR)
                return FALSE;
@@ -1904,19 +1890,10 @@ retry:
                        return -ENOENT;
                }
 
-               rc = -EIO;
                reason = "I/O error";
                goto err_out;
        }
 
-       /* Falling back doesn't make sense if ID data was read
-        * successfully at least once.
-        */
-       may_fallback = 0;
-
-       rc = -EINVAL;
-       reason = "device reports invalid type";
-
        return TRUE;
 
 err_out:
@@ -1991,7 +1968,6 @@ static int ata_dev_write_sectors(unsigned char* pdata, unsigned long datalen,
        unsigned int err_mask = 0;
        const char *reason;
        int may_fallback = 1;
-       int rc;
 
        if (dev_state == SATA_ERROR)
                return FALSE;
@@ -2089,19 +2065,10 @@ retry:
                        return -ENOENT;
                }
 
-               rc = -EIO;
                reason = "I/O error";
                goto err_out;
        }
 
-       /* Falling back doesn't make sense if ID data was read
-        * successfully at least once.
-        */
-       may_fallback = 0;
-
-       rc = -EINVAL;
-       reason = "device reports invalid type";
-
        return TRUE;
 
 err_out:
index 1e60636ec20fde13f30b951669b719ecf8593a46..34fe038608500c412f186bfba39607e9b189fcf5 100644 (file)
@@ -782,6 +782,7 @@ int scan_sata (int dev)
                    (iobase[5] + VND_TF2_CH0) | ATA_PCI_CTL_OFS;
                port[0].ioaddr.bmdma_addr = iobase[5] + VND_BMDMA_CH0;
                break;
+#if (CONFIG_SYS_SATA_MAX_DEVICE >= 1)
        case 1:
                port[1].port_no = 0;
                port[1].ioaddr.cmd_addr = iobase[5] + VND_TF0_CH1;
@@ -789,6 +790,7 @@ int scan_sata (int dev)
                    (iobase[5] + VND_TF2_CH1) | ATA_PCI_CTL_OFS;
                port[1].ioaddr.bmdma_addr = iobase[5] + VND_BMDMA_CH1;
                break;
+#elif (CONFIG_SYS_SATA_MAX_DEVICE >= 2)
        case 2:
                port[2].port_no = 0;
                port[2].ioaddr.cmd_addr = iobase[5] + VND_TF0_CH2;
@@ -796,6 +798,7 @@ int scan_sata (int dev)
                    (iobase[5] + VND_TF2_CH2) | ATA_PCI_CTL_OFS;
                port[2].ioaddr.bmdma_addr = iobase[5] + VND_BMDMA_CH2;
                break;
+#elif (CONFIG_SYS_SATA_MAX_DEVICE >= 3)
        case 3:
                port[3].port_no = 0;
                port[3].ioaddr.cmd_addr = iobase[5] + VND_TF0_CH3;
@@ -803,6 +806,7 @@ int scan_sata (int dev)
                    (iobase[5] + VND_TF2_CH3) | ATA_PCI_CTL_OFS;
                port[3].ioaddr.bmdma_addr = iobase[5] + VND_BMDMA_CH3;
                break;
+#endif
        default:
                printf ("Tried to scan unknown port: ata%d\n", dev);
                return 1;
index 8094b415a0ad4593b06cb33a65de723cc879d918..564aa9838b429f69aa4cd1d4f52031326c446e60 100644 (file)
@@ -453,11 +453,9 @@ void scsi_int_enable(void)
 
 void scsi_write_dsp(unsigned long start)
 {
-       unsigned long val;
 #ifdef SCSI_SINGLE_STEP
        unsigned char t;
 #endif
-       val = start;
        out32r(scsi_mem_addr + DSP,start);
 #ifdef SCSI_SINGLE_STEP
        t=scsi_read_byte(DCNTL);
index 3d9c9f11a79dbaedd822f4939a3d90e3111d40f7..5d864b56ef1a6c534cd52cdf70fb9aeae35e389c 100644 (file)
@@ -26,6 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    := $(obj)libdma.o
 
 COBJS-$(CONFIG_FSLDMAFEC) += MCD_tasksInit.o MCD_dmaApi.o MCD_tasks.o
+COBJS-$(CONFIG_APBH_DMA) += apbh_dma.o
 COBJS-$(CONFIG_FSL_DMA) += fsl_dma.o
 COBJS-$(CONFIG_OMAP3_DMA) += omap3_dma.o
 
diff --git a/drivers/dma/apbh_dma.c b/drivers/dma/apbh_dma.c
new file mode 100644 (file)
index 0000000..e85f5fe
--- /dev/null
@@ -0,0 +1,582 @@
+/*
+ * Freescale i.MX28 APBH DMA driver
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <linux/list.h>
+
+#include <common.h>
+#include <malloc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/dma.h>
+
+static struct mxs_dma_chan mxs_dma_channels[MXS_MAX_DMA_CHANNELS];
+
+/*
+ * Test is the DMA channel is valid channel
+ */
+int mxs_dma_validate_chan(int channel)
+{
+       struct mxs_dma_chan *pchan;
+
+       if ((channel < 0) || (channel >= MXS_MAX_DMA_CHANNELS))
+               return -EINVAL;
+
+       pchan = mxs_dma_channels + channel;
+       if (!(pchan->flags & MXS_DMA_FLAGS_ALLOCATED))
+               return -EINVAL;
+
+       return 0;
+}
+
+/*
+ * Return the address of the command within a descriptor.
+ */
+static unsigned int mxs_dma_cmd_address(struct mxs_dma_desc *desc)
+{
+       return desc->address + offsetof(struct mxs_dma_desc, cmd);
+}
+
+/*
+ * Read a DMA channel's hardware semaphore.
+ *
+ * As used by the MXS platform's DMA software, the DMA channel's hardware
+ * semaphore reflects the number of DMA commands the hardware will process, but
+ * has not yet finished. This is a volatile value read directly from hardware,
+ * so it must be be viewed as immediately stale.
+ *
+ * If the channel is not marked busy, or has finished processing all its
+ * commands, this value should be zero.
+ *
+ * See mxs_dma_append() for details on how DMA command blocks must be configured
+ * to maintain the expected behavior of the semaphore's value.
+ */
+static int mxs_dma_read_semaphore(int channel)
+{
+       struct mx28_apbh_regs *apbh_regs =
+               (struct mx28_apbh_regs *)MXS_APBH_BASE;
+       uint32_t tmp;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       tmp = readl(&apbh_regs->ch[channel].hw_apbh_ch_sema);
+
+       tmp &= APBH_CHn_SEMA_PHORE_MASK;
+       tmp >>= APBH_CHn_SEMA_PHORE_OFFSET;
+
+       return tmp;
+}
+
+/*
+ * Enable a DMA channel.
+ *
+ * If the given channel has any DMA descriptors on its active list, this
+ * function causes the DMA hardware to begin processing them.
+ *
+ * This function marks the DMA channel as "busy," whether or not there are any
+ * descriptors to process.
+ */
+static int mxs_dma_enable(int channel)
+{
+       struct mx28_apbh_regs *apbh_regs =
+               (struct mx28_apbh_regs *)MXS_APBH_BASE;
+       unsigned int sem;
+       struct mxs_dma_chan *pchan;
+       struct mxs_dma_desc *pdesc;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       pchan = mxs_dma_channels + channel;
+
+       if (pchan->pending_num == 0) {
+               pchan->flags |= MXS_DMA_FLAGS_BUSY;
+               return 0;
+       }
+
+       pdesc = list_first_entry(&pchan->active, struct mxs_dma_desc, node);
+       if (pdesc == NULL)
+               return -EFAULT;
+
+       if (pchan->flags & MXS_DMA_FLAGS_BUSY) {
+               if (!(pdesc->cmd.data & MXS_DMA_DESC_CHAIN))
+                       return 0;
+
+               sem = mxs_dma_read_semaphore(channel);
+               if (sem == 0)
+                       return 0;
+
+               if (sem == 1) {
+                       pdesc = list_entry(pdesc->node.next,
+                                          struct mxs_dma_desc, node);
+                       writel(mxs_dma_cmd_address(pdesc),
+                               &apbh_regs->ch[channel].hw_apbh_ch_nxtcmdar);
+               }
+               writel(pchan->pending_num,
+                       &apbh_regs->ch[channel].hw_apbh_ch_sema);
+               pchan->active_num += pchan->pending_num;
+               pchan->pending_num = 0;
+       } else {
+               pchan->active_num += pchan->pending_num;
+               pchan->pending_num = 0;
+               writel(mxs_dma_cmd_address(pdesc),
+                       &apbh_regs->ch[channel].hw_apbh_ch_nxtcmdar);
+               writel(pchan->active_num,
+                       &apbh_regs->ch[channel].hw_apbh_ch_sema);
+               writel(1 << (channel + APBH_CTRL0_CLKGATE_CHANNEL_OFFSET),
+                       &apbh_regs->hw_apbh_ctrl0_clr);
+       }
+
+       pchan->flags |= MXS_DMA_FLAGS_BUSY;
+       return 0;
+}
+
+/*
+ * Disable a DMA channel.
+ *
+ * This function shuts down a DMA channel and marks it as "not busy." Any
+ * descriptors on the active list are immediately moved to the head of the
+ * "done" list, whether or not they have actually been processed by the
+ * hardware. The "ready" flags of these descriptors are NOT cleared, so they
+ * still appear to be active.
+ *
+ * This function immediately shuts down a DMA channel's hardware, aborting any
+ * I/O that may be in progress, potentially leaving I/O hardware in an undefined
+ * state. It is unwise to call this function if there is ANY chance the hardware
+ * is still processing a command.
+ */
+static int mxs_dma_disable(int channel)
+{
+       struct mxs_dma_chan *pchan;
+       struct mx28_apbh_regs *apbh_regs =
+               (struct mx28_apbh_regs *)MXS_APBH_BASE;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       pchan = mxs_dma_channels + channel;
+
+       if (!(pchan->flags & MXS_DMA_FLAGS_BUSY))
+               return -EINVAL;
+
+       writel(1 << (channel + APBH_CTRL0_CLKGATE_CHANNEL_OFFSET),
+               &apbh_regs->hw_apbh_ctrl0_set);
+
+       pchan->flags &= ~MXS_DMA_FLAGS_BUSY;
+       pchan->active_num = 0;
+       pchan->pending_num = 0;
+       list_splice_init(&pchan->active, &pchan->done);
+
+       return 0;
+}
+
+/*
+ * Resets the DMA channel hardware.
+ */
+static int mxs_dma_reset(int channel)
+{
+       struct mx28_apbh_regs *apbh_regs =
+               (struct mx28_apbh_regs *)MXS_APBH_BASE;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       writel(1 << (channel + APBH_CHANNEL_CTRL_RESET_CHANNEL_OFFSET),
+               &apbh_regs->hw_apbh_channel_ctrl_set);
+
+       return 0;
+}
+
+/*
+ * Enable or disable DMA interrupt.
+ *
+ * This function enables the given DMA channel to interrupt the CPU.
+ */
+static int mxs_dma_enable_irq(int channel, int enable)
+{
+       struct mx28_apbh_regs *apbh_regs =
+               (struct mx28_apbh_regs *)MXS_APBH_BASE;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       if (enable)
+               writel(1 << (channel + APBH_CTRL1_CH_CMDCMPLT_IRQ_EN_OFFSET),
+                       &apbh_regs->hw_apbh_ctrl1_set);
+       else
+               writel(1 << (channel + APBH_CTRL1_CH_CMDCMPLT_IRQ_EN_OFFSET),
+                       &apbh_regs->hw_apbh_ctrl1_clr);
+
+       return 0;
+}
+
+/*
+ * Clear DMA interrupt.
+ *
+ * The software that is using the DMA channel must register to receive its
+ * interrupts and, when they arrive, must call this function to clear them.
+ */
+static int mxs_dma_ack_irq(int channel)
+{
+       struct mx28_apbh_regs *apbh_regs =
+               (struct mx28_apbh_regs *)MXS_APBH_BASE;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       writel(1 << channel, &apbh_regs->hw_apbh_ctrl1_clr);
+       writel(1 << channel, &apbh_regs->hw_apbh_ctrl2_clr);
+
+       return 0;
+}
+
+/*
+ * Request to reserve a DMA channel
+ */
+static int mxs_dma_request(int channel)
+{
+       struct mxs_dma_chan *pchan;
+
+       if ((channel < 0) || (channel >= MXS_MAX_DMA_CHANNELS))
+               return -EINVAL;
+
+       pchan = mxs_dma_channels + channel;
+       if ((pchan->flags & MXS_DMA_FLAGS_VALID) != MXS_DMA_FLAGS_VALID)
+               return -ENODEV;
+
+       if (pchan->flags & MXS_DMA_FLAGS_ALLOCATED)
+               return -EBUSY;
+
+       pchan->flags |= MXS_DMA_FLAGS_ALLOCATED;
+       pchan->active_num = 0;
+       pchan->pending_num = 0;
+
+       INIT_LIST_HEAD(&pchan->active);
+       INIT_LIST_HEAD(&pchan->done);
+
+       return 0;
+}
+
+/*
+ * Release a DMA channel.
+ *
+ * This function releases a DMA channel from its current owner.
+ *
+ * The channel will NOT be released if it's marked "busy" (see
+ * mxs_dma_enable()).
+ */
+static int mxs_dma_release(int channel)
+{
+       struct mxs_dma_chan *pchan;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       pchan = mxs_dma_channels + channel;
+
+       if (pchan->flags & MXS_DMA_FLAGS_BUSY)
+               return -EBUSY;
+
+       pchan->dev = 0;
+       pchan->active_num = 0;
+       pchan->pending_num = 0;
+       pchan->flags &= ~MXS_DMA_FLAGS_ALLOCATED;
+
+       return 0;
+}
+
+/*
+ * Allocate DMA descriptor
+ */
+struct mxs_dma_desc *mxs_dma_desc_alloc(void)
+{
+       struct mxs_dma_desc *pdesc;
+
+       pdesc = memalign(MXS_DMA_ALIGNMENT, sizeof(struct mxs_dma_desc));
+
+       if (pdesc == NULL)
+               return NULL;
+
+       memset(pdesc, 0, sizeof(*pdesc));
+       pdesc->address = (dma_addr_t)pdesc;
+
+       return pdesc;
+};
+
+/*
+ * Free DMA descriptor
+ */
+void mxs_dma_desc_free(struct mxs_dma_desc *pdesc)
+{
+       if (pdesc == NULL)
+               return;
+
+       free(pdesc);
+}
+
+/*
+ * Add a DMA descriptor to a channel.
+ *
+ * If the descriptor list for this channel is not empty, this function sets the
+ * CHAIN bit and the NEXTCMD_ADDR fields in the last descriptor's DMA command so
+ * it will chain to the new descriptor's command.
+ *
+ * Then, this function marks the new descriptor as "ready," adds it to the end
+ * of the active descriptor list, and increments the count of pending
+ * descriptors.
+ *
+ * The MXS platform DMA software imposes some rules on DMA commands to maintain
+ * important invariants. These rules are NOT checked, but they must be carefully
+ * applied by software that uses MXS DMA channels.
+ *
+ * Invariant:
+ *     The DMA channel's hardware semaphore must reflect the number of DMA
+ *     commands the hardware will process, but has not yet finished.
+ *
+ * Explanation:
+ *     A DMA channel begins processing commands when its hardware semaphore is
+ *     written with a value greater than zero, and it stops processing commands
+ *     when the semaphore returns to zero.
+ *
+ *     When a channel finishes a DMA command, it will decrement its semaphore if
+ *     the DECREMENT_SEMAPHORE bit is set in that command's flags bits.
+ *
+ *     In principle, it's not necessary for the DECREMENT_SEMAPHORE to be set,
+ *     unless it suits the purposes of the software. For example, one could
+ *     construct a series of five DMA commands, with the DECREMENT_SEMAPHORE
+ *     bit set only in the last one. Then, setting the DMA channel's hardware
+ *     semaphore to one would cause the entire series of five commands to be
+ *     processed. However, this example would violate the invariant given above.
+ *
+ * Rule:
+ *    ALL DMA commands MUST have the DECREMENT_SEMAPHORE bit set so that the DMA
+ *    channel's hardware semaphore will be decremented EVERY time a command is
+ *    processed.
+ */
+int mxs_dma_desc_append(int channel, struct mxs_dma_desc *pdesc)
+{
+       struct mxs_dma_chan *pchan;
+       struct mxs_dma_desc *last;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       pchan = mxs_dma_channels + channel;
+
+       pdesc->cmd.next = mxs_dma_cmd_address(pdesc);
+       pdesc->flags |= MXS_DMA_DESC_FIRST | MXS_DMA_DESC_LAST;
+
+       if (!list_empty(&pchan->active)) {
+               last = list_entry(pchan->active.prev, struct mxs_dma_desc,
+                                       node);
+
+               pdesc->flags &= ~MXS_DMA_DESC_FIRST;
+               last->flags &= ~MXS_DMA_DESC_LAST;
+
+               last->cmd.next = mxs_dma_cmd_address(pdesc);
+               last->cmd.data |= MXS_DMA_DESC_CHAIN;
+       }
+       pdesc->flags |= MXS_DMA_DESC_READY;
+       if (pdesc->flags & MXS_DMA_DESC_FIRST)
+               pchan->pending_num++;
+       list_add_tail(&pdesc->node, &pchan->active);
+
+       return ret;
+}
+
+/*
+ * Clean up processed DMA descriptors.
+ *
+ * This function removes processed DMA descriptors from the "active" list. Pass
+ * in a non-NULL list head to get the descriptors moved to your list. Pass NULL
+ * to get the descriptors moved to the channel's "done" list. Descriptors on
+ * the "done" list can be retrieved with mxs_dma_get_finished().
+ *
+ * This function marks the DMA channel as "not busy" if no unprocessed
+ * descriptors remain on the "active" list.
+ */
+static int mxs_dma_finish(int channel, struct list_head *head)
+{
+       int sem;
+       struct mxs_dma_chan *pchan;
+       struct list_head *p, *q;
+       struct mxs_dma_desc *pdesc;
+       int ret;
+
+       ret = mxs_dma_validate_chan(channel);
+       if (ret)
+               return ret;
+
+       pchan = mxs_dma_channels + channel;
+
+       sem = mxs_dma_read_semaphore(channel);
+       if (sem < 0)
+               return sem;
+
+       if (sem == pchan->active_num)
+               return 0;
+
+       list_for_each_safe(p, q, &pchan->active) {
+               if ((pchan->active_num) <= sem)
+                       break;
+
+               pdesc = list_entry(p, struct mxs_dma_desc, node);
+               pdesc->flags &= ~MXS_DMA_DESC_READY;
+
+               if (head)
+                       list_move_tail(p, head);
+               else
+                       list_move_tail(p, &pchan->done);
+
+               if (pdesc->flags & MXS_DMA_DESC_LAST)
+                       pchan->active_num--;
+       }
+
+       if (sem == 0)
+               pchan->flags &= ~MXS_DMA_FLAGS_BUSY;
+
+       return 0;
+}
+
+/*
+ * Wait for DMA channel to complete
+ */
+static int mxs_dma_wait_complete(uint32_t timeout, unsigned int chan)
+{
+       struct mx28_apbh_regs *apbh_regs =
+               (struct mx28_apbh_regs *)MXS_APBH_BASE;
+       int ret;
+
+       ret = mxs_dma_validate_chan(chan);
+       if (ret)
+               return ret;
+
+       if (mx28_wait_mask_set(&apbh_regs->hw_apbh_ctrl1_reg,
+                               1 << chan, timeout)) {
+               ret = -ETIMEDOUT;
+               mxs_dma_reset(chan);
+       }
+
+       return ret;
+}
+
+/*
+ * Execute the DMA channel
+ */
+int mxs_dma_go(int chan)
+{
+       uint32_t timeout = 10000;
+       int ret;
+
+       LIST_HEAD(tmp_desc_list);
+
+       mxs_dma_enable_irq(chan, 1);
+       mxs_dma_enable(chan);
+
+       /* Wait for DMA to finish. */
+       ret = mxs_dma_wait_complete(timeout, chan);
+
+       /* Clear out the descriptors we just ran. */
+       mxs_dma_finish(chan, &tmp_desc_list);
+
+       /* Shut the DMA channel down. */
+       mxs_dma_ack_irq(chan);
+       mxs_dma_reset(chan);
+       mxs_dma_enable_irq(chan, 0);
+       mxs_dma_disable(chan);
+
+       return ret;
+}
+
+/*
+ * Initialize the DMA hardware
+ */
+int mxs_dma_init(void)
+{
+       struct mx28_apbh_regs *apbh_regs =
+               (struct mx28_apbh_regs *)MXS_APBH_BASE;
+       struct mxs_dma_chan *pchan;
+       int ret, channel;
+
+       mx28_reset_block(&apbh_regs->hw_apbh_ctrl0_reg);
+
+#ifdef CONFIG_APBH_DMA_BURST8
+       writel(APBH_CTRL0_AHB_BURST8_EN,
+               &apbh_regs->hw_apbh_ctrl0_set);
+#else
+       writel(APBH_CTRL0_AHB_BURST8_EN,
+               &apbh_regs->hw_apbh_ctrl0_clr);
+#endif
+
+#ifdef CONFIG_APBH_DMA_BURST
+       writel(APBH_CTRL0_APB_BURST_EN,
+               &apbh_regs->hw_apbh_ctrl0_set);
+#else
+       writel(APBH_CTRL0_APB_BURST_EN,
+               &apbh_regs->hw_apbh_ctrl0_clr);
+#endif
+
+       for (channel = 0; channel < MXS_MAX_DMA_CHANNELS; channel++) {
+               pchan = mxs_dma_channels + channel;
+               pchan->flags = MXS_DMA_FLAGS_VALID;
+
+               ret = mxs_dma_request(channel);
+
+               if (ret) {
+                       printf("MXS DMA: Can't acquire DMA channel %i\n",
+                               channel);
+
+                       goto err;
+               }
+
+               mxs_dma_reset(channel);
+               mxs_dma_ack_irq(channel);
+       }
+
+       return 0;
+
+err:
+       while (--channel >= 0)
+               mxs_dma_release(channel);
+       return ret;
+}
index 2b5a485f23399dfbd9f5bbe0cf68c292744ec653..b5a47d1d7bb88d469165eebe4fff3bab05f6ab20 100755 (executable)
@@ -2102,7 +2102,6 @@ signed char ispVMLCOUNT(unsigned short a_usCountSize)
        unsigned char ucState             = 0;
        unsigned short usDelay            = 0;
        unsigned short usToggle           = 0;
-       unsigned char usByte              = 0;
 
        g_usIntelBufferSize = (unsigned short)ispVMDataSize();
 
@@ -2171,7 +2170,6 @@ signed char ispVMLCOUNT(unsigned short a_usCountSize)
                ucState            = 0;
                usDelay            = 0;
                usToggle           = 0;
-               usByte             = 0;
                usContinue                 = 1;
 
                /*
index f505813d0eae9974e6a5444066d0edd5aeae0f7f..e22c09689de6bea9af2e5c322d7fb0466c8aadfb 100644 (file)
@@ -30,11 +30,13 @@ COBJS-$(CONFIG_KIRKWOOD_GPIO)       += kw_gpio.o
 COBJS-$(CONFIG_MARVELL_GPIO)   += mvgpio.o
 COBJS-$(CONFIG_MARVELL_MFP)    += mvmfp.o
 COBJS-$(CONFIG_MXC_GPIO)       += mxc_gpio.o
+COBJS-$(CONFIG_MXS_GPIO)       += mxs_gpio.o
 COBJS-$(CONFIG_PCA953X)                += pca953x.o
 COBJS-$(CONFIG_PCA9698)                += pca9698.o
 COBJS-$(CONFIG_S5P)            += s5p_gpio.o
 COBJS-$(CONFIG_TEGRA2_GPIO)    += tegra2_gpio.o
 COBJS-$(CONFIG_DA8XX_GPIO)     += da8xx_gpio.o
+COBJS-$(CONFIG_ALTERA_PIO)     += altera_pio.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/gpio/altera_pio.c b/drivers/gpio/altera_pio.c
new file mode 100644 (file)
index 0000000..fb03760
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+ * Driver for Altera's PIO ip core
+ *
+ * Copyright (C) 2011  Missing Link Electronics
+ *                     Joachim Foerster <joachim@missinglinkelectronics.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
+ *
+ * To use this driver, in your board's config. header:
+ * #define CONFIG_ALTERA_PIO
+ * #define CONFIG_SYS_ALTERA_PIO_NUM <number-of-pio-cores>
+ * #define CONFIG_SYS_ALTERA_PIO_GPIO_NUM <total-number-of-gpios>
+ * And in your board's early setup routine:
+ * altera_pio_init(<baseaddr>, <width>, 'i'|'o'|'t',
+ *                 <reset-value>, <neg-mask>, "label");
+ *  - 'i'|'o'|'t': PIO is input-only/output-only/tri-state
+ *  - <reset-value>: for correct initial status display, output-only
+ *  - <neg-mask> is meant to be used to in cases of active-low
+ *    GPIOs, such as LEDs and buttons (on/pressed == 0). Each bit
+ *    which is 1 in <neg-mask> inverts the corresponding GPIO's value
+ *    before set/after get. So: gpio_set_value(gpio, 1) => LED on .
+ *
+ * Do NOT define CONFIG_SYS_GPIO_BASE !
+ *
+ * Optionally, in your board's config. header:
+ * - To force a GPIO numbering scheme like in Linux ...
+ * #define CONFIG_GPIO_DOWNTO_NUMBERING
+ * ... starting with 255 (default)
+ * #define CONFIG_GPIO_DOWNTO_MAX 255
+ */
+#include <common.h>
+#include <asm/io.h>
+#include <asm/gpio.h>
+
+#ifdef CONFIG_GPIO_DOWNTO_NUMBERING
+#ifndef CONFIG_GPIO_DOWNTO_MAX
+#define CONFIG_GPIO_DOWNTO_MAX 255
+#endif
+#endif
+
+#define ALTERA_PIO_DATA                0x0
+#define ALTERA_PIO_DIR         0x4
+
+#define GPIO_LABEL_SIZE                9
+
+
+static struct altera_pio {
+       u32 base;
+       u8 width;
+       char iot;
+       u32 negmask;
+       u32 sh_data;
+       u32 sh_dir;
+       int gidx;
+       char label[GPIO_LABEL_SIZE];
+} pios[CONFIG_SYS_ALTERA_PIO_NUM];
+
+static int pio_num;
+
+static struct altera_pio_gpio {
+       unsigned num;
+       struct altera_pio *pio;
+       char reqlabel[GPIO_LABEL_SIZE];
+} gpios[CONFIG_SYS_ALTERA_PIO_GPIO_NUM];
+
+static int pio_gpio_num;
+
+
+static int altera_pio_gidx(unsigned gpio)
+{
+       int i;
+
+       for (i = 0; i < pio_gpio_num; ++i) {
+               if (gpio == gpios[i].num)
+                       break;
+       }
+       if (i >= pio_gpio_num)
+               return -1;
+       return i;
+}
+
+static struct altera_pio *altera_pio_get_and_mask(unsigned gpio, u32 *mask)
+{
+       int gidx = altera_pio_gidx(gpio);
+       if (gidx < 0)
+               return NULL;
+       if (mask)
+               *mask = 1 << (gidx - gpios[gidx].pio->gidx);
+       return gpios[gidx].pio;
+}
+
+#define altera_pio_use_gidx(_gidx, _reqlabel) \
+       { strncpy(gpios[_gidx].reqlabel, _reqlabel, GPIO_LABEL_SIZE); }
+#define altera_pio_unuse_gidx(_gidx) { gpios[_gidx].reqlabel[0] = '\0'; }
+#define altera_pio_is_gidx_used(_gidx) (gpios[_gidx].reqlabel[0] != '\0')
+
+static int altera_pio_gpio_init(struct altera_pio *pio, u8 width)
+{
+       u8 gidx = pio_gpio_num;
+       int i;
+
+       if (!width)
+               return -1;
+       if ((pio_gpio_num + width) > CONFIG_SYS_ALTERA_PIO_GPIO_NUM)
+               return -1;
+
+       for (i = 0; i < width; ++i) {
+#ifdef CONFIG_GPIO_DOWNTO_NUMBERING
+               gpios[pio_gpio_num + i].num = \
+                       CONFIG_GPIO_DOWNTO_MAX + 1 - gidx - width + i;
+#else
+               gpios[pio_gpio_num + i].num = pio_gpio_num + i;
+#endif
+               gpios[pio_gpio_num + i].pio = pio;
+               altera_pio_unuse_gidx(pio_gpio_num + i);
+       }
+       pio_gpio_num += width;
+       return gidx;
+}
+
+int altera_pio_init(u32 base, u8 width, char iot, u32 rstval, u32 negmask,
+                const char *label)
+{
+       if (pio_num >= CONFIG_SYS_ALTERA_PIO_NUM)
+               return -1;
+
+       pios[pio_num].base = base;
+       pios[pio_num].width = width;
+       pios[pio_num].iot = iot;
+       switch (iot) {
+       case 'i':
+               /* input only */
+               pios[pio_num].sh_dir = 0;
+               pios[pio_num].sh_data = readl(base + ALTERA_PIO_DATA);
+               break;
+       case 'o':
+               /* output only */
+               pios[pio_num].sh_dir = 0xffffffff & ((1 << width) - 1);
+               pios[pio_num].sh_data = rstval;
+               break;
+       case 't':
+               /* bidir, tri-state */
+               pios[pio_num].sh_dir = readl(base + ALTERA_PIO_DIR);
+               pios[pio_num].sh_data = readl(base + ALTERA_PIO_DATA);
+               break;
+       default:
+               return -1;
+       }
+       pios[pio_num].negmask = negmask & ((1 << width) - 1);
+       pios[pio_num].gidx = altera_pio_gpio_init(&pios[pio_num], width);
+       if (pios[pio_num].gidx < 0)
+               return -1;
+       strncpy(pios[pio_num].label, label, GPIO_LABEL_SIZE);
+       return pio_num++;
+}
+
+void altera_pio_info(void)
+{
+       int i;
+       int j;
+       int gidx;
+       u32 mask;
+
+       for (i = 0; i < pio_num; ++i) {
+               printf("Altera PIO % 2d, @0x%08x, "
+                       "width: %u, label: %s\n",
+                      i, pios[i].base, pios[i].width, pios[i].label);
+               gidx = pios[i].gidx;
+               for (j = gidx; j < (gidx + pios[i].width); ++j) {
+                       mask = 1 << (j - gidx);
+                       printf("\tGPIO % 4d: %s %s [%c] %s\n",
+                               gpios[j].num,
+                               gpios[j].pio->sh_dir & mask ? "out" : " in",
+                               gpio_get_value(gpios[j].num) ? "set" : "clr",
+                               altera_pio_is_gidx_used(j) ? 'x' : ' ',
+                               gpios[j].reqlabel);
+               }
+       }
+}
+
+
+int gpio_request(unsigned gpio, const char *label)
+{
+       int gidx = altera_pio_gidx(gpio);
+       if (gidx < 0)
+               return gidx;
+       if (altera_pio_is_gidx_used(gidx))
+               return -1;
+
+       altera_pio_use_gidx(gidx, label);
+       return 0;
+}
+
+int gpio_free(unsigned gpio)
+{
+       int gidx = altera_pio_gidx(gpio);
+       if (gidx < 0)
+               return gidx;
+       if (!altera_pio_is_gidx_used(gidx))
+               return -1;
+
+       altera_pio_unuse_gidx(gidx);
+       return 0;
+}
+
+int gpio_direction_input(unsigned gpio)
+{
+       u32 mask;
+       struct altera_pio *pio;
+
+       pio = altera_pio_get_and_mask(gpio, &mask);
+       if (!pio)
+               return -1;
+       if (pio->iot == 'o')
+               return -1;
+
+       writel(pio->sh_dir &= ~mask, pio->base + ALTERA_PIO_DIR);
+       return 0;
+}
+
+int gpio_direction_output(unsigned gpio, int value)
+{
+       u32 mask;
+       struct altera_pio *pio;
+
+       pio = altera_pio_get_and_mask(gpio, &mask);
+       if (!pio)
+               return -1;
+       if (pio->iot == 'i')
+               return -1;
+
+       value = (pio->negmask & mask) ? !value : value;
+       if (value)
+               pio->sh_data |= mask;
+       else
+               pio->sh_data &= ~mask;
+       writel(pio->sh_data, pio->base + ALTERA_PIO_DATA);
+       writel(pio->sh_dir |= mask, pio->base + ALTERA_PIO_DIR);
+       return 0;
+}
+
+int gpio_get_value(unsigned gpio)
+{
+       u32 mask;
+       struct altera_pio *pio;
+       u32 val;
+
+       pio = altera_pio_get_and_mask(gpio, &mask);
+       if (!pio)
+               return -1;
+
+       if ((pio->sh_dir & mask) || (pio->iot == 'o'))
+               val = pio->sh_data & mask;
+       else
+               val = readl(pio->base + ALTERA_PIO_DATA) & mask;
+       return (pio->negmask & mask) ? !val : val;
+}
+
+void gpio_set_value(unsigned gpio, int value)
+{
+       u32 mask;
+       struct altera_pio *pio;
+
+       pio = altera_pio_get_and_mask(gpio, &mask);
+       if (!pio)
+               return;
+       if (pio->iot == 'i')
+               return;
+
+       value = (pio->negmask & mask) ? !value : value;
+       if (value)
+               pio->sh_data |= mask;
+       else
+               pio->sh_data &= ~mask;
+       writel(pio->sh_data, pio->base + ALTERA_PIO_DATA);
+       return;
+}
+
+int gpio_is_valid(int number)
+{
+       int gidx = altera_pio_gidx(number);
+
+       if (gidx < 0)
+               return 1;
+       return 0;
+}
diff --git a/drivers/gpio/mxs_gpio.c b/drivers/gpio/mxs_gpio.c
new file mode 100644 (file)
index 0000000..539738b
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Freescale i.MX28 GPIO control code
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <netdev.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/iomux.h>
+#include <asm/arch/imx-regs.h>
+
+#if    defined(CONFIG_MX23)
+#define        PINCTRL_BANKS           3
+#define        PINCTRL_DOUT(n)         (0x0500 + ((n) * 0x10))
+#define        PINCTRL_DIN(n)          (0x0600 + ((n) * 0x10))
+#define        PINCTRL_DOE(n)          (0x0700 + ((n) * 0x10))
+#define        PINCTRL_PIN2IRQ(n)      (0x0800 + ((n) * 0x10))
+#define        PINCTRL_IRQEN(n)        (0x0900 + ((n) * 0x10))
+#define        PINCTRL_IRQSTAT(n)      (0x0c00 + ((n) * 0x10))
+#elif  defined(CONFIG_MX28)
+#define        PINCTRL_BANKS           5
+#define        PINCTRL_DOUT(n)         (0x0700 + ((n) * 0x10))
+#define        PINCTRL_DIN(n)          (0x0900 + ((n) * 0x10))
+#define        PINCTRL_DOE(n)          (0x0b00 + ((n) * 0x10))
+#define        PINCTRL_PIN2IRQ(n)      (0x1000 + ((n) * 0x10))
+#define        PINCTRL_IRQEN(n)        (0x1100 + ((n) * 0x10))
+#define        PINCTRL_IRQSTAT(n)      (0x1400 + ((n) * 0x10))
+#else
+#error "Please select CONFIG_MX23 or CONFIG_MX28"
+#endif
+
+#define GPIO_INT_FALL_EDGE     0x0
+#define GPIO_INT_LOW_LEV       0x1
+#define GPIO_INT_RISE_EDGE     0x2
+#define GPIO_INT_HIGH_LEV      0x3
+#define GPIO_INT_LEV_MASK      (1 << 0)
+#define GPIO_INT_POL_MASK      (1 << 1)
+
+void mxs_gpio_init(void)
+{
+       int i;
+
+       for (i = 0; i < PINCTRL_BANKS; i++) {
+               writel(0, MXS_PINCTRL_BASE + PINCTRL_PIN2IRQ(i));
+               writel(0, MXS_PINCTRL_BASE + PINCTRL_IRQEN(i));
+               /* Use SCT address here to clear the IRQSTAT bits */
+               writel(0xffffffff, MXS_PINCTRL_BASE + PINCTRL_IRQSTAT(i) + 8);
+       }
+}
+
+int gpio_get_value(int gp)
+{
+       uint32_t bank = PAD_BANK(gp);
+       uint32_t offset = PINCTRL_DIN(bank);
+       struct mx28_register *reg =
+               (struct mx28_register *)(MXS_PINCTRL_BASE + offset);
+
+       return (readl(&reg->reg) >> PAD_PIN(gp)) & 1;
+}
+
+void gpio_set_value(int gp, int value)
+{
+       uint32_t bank = PAD_BANK(gp);
+       uint32_t offset = PINCTRL_DOUT(bank);
+       struct mx28_register *reg =
+               (struct mx28_register *)(MXS_PINCTRL_BASE + offset);
+
+       if (value)
+               writel(1 << PAD_PIN(gp), &reg->reg_set);
+       else
+               writel(1 << PAD_PIN(gp), &reg->reg_clr);
+}
+
+int gpio_direction_input(int gp)
+{
+       uint32_t bank = PAD_BANK(gp);
+       uint32_t offset = PINCTRL_DOE(bank);
+       struct mx28_register *reg =
+               (struct mx28_register *)(MXS_PINCTRL_BASE + offset);
+
+       writel(1 << PAD_PIN(gp), &reg->reg_clr);
+
+       return 0;
+}
+
+int gpio_direction_output(int gp, int value)
+{
+       uint32_t bank = PAD_BANK(gp);
+       uint32_t offset = PINCTRL_DOE(bank);
+       struct mx28_register *reg =
+               (struct mx28_register *)(MXS_PINCTRL_BASE + offset);
+
+       writel(1 << PAD_PIN(gp), &reg->reg_set);
+
+       gpio_set_value(gp, value);
+
+       return 0;
+}
+
+int gpio_request(int gp, const char *label)
+{
+       if (PAD_BANK(gp) >= PINCTRL_BANKS)
+               return -EINVAL;
+
+       return 0;
+}
+
+void gpio_free(int gp)
+{
+}
+
+void gpio_toggle_value(int gp)
+{
+       gpio_set_value(gp, !gpio_get_value(gp));
+}
index b946efa7a98379e6de82e44cb7b299f343cc90af..fe6d2c668070adcd111631ed69418ecd7a0b676e 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <common.h>
 #include <i2c.h>
+#include <asm/errno.h>
 #include <pca9698.h>
 
 /*
 #define PCA9698_REG_CONFIG             0x18
 
 #define PCA9698_BUFFER_SIZE            5
+#define PCA9698_GPIO_COUNT             40
 
-static int pca9698_read40(u8 chip, u8 offset, u8 *buffer)
+static int pca9698_read40(u8 addr, u8 offset, u8 *buffer)
 {
        u8 command = offset | 0x80;  /* autoincrement */
 
-       return i2c_read(chip, command, 1, buffer, PCA9698_BUFFER_SIZE);
+       return i2c_read(addr, command, 1, buffer, PCA9698_BUFFER_SIZE);
 }
 
-static int pca9698_write40(u8 chip, u8 offset, u8 *buffer)
+static int pca9698_write40(u8 addr, u8 offset, u8 *buffer)
 {
        u8 command = offset | 0x80;  /* autoincrement */
 
-       return i2c_write(chip, command, 1, buffer, PCA9698_BUFFER_SIZE);
+       return i2c_write(addr, command, 1, buffer, PCA9698_BUFFER_SIZE);
 }
 
 static void pca9698_set_bit(unsigned gpio, u8 *buffer, unsigned value)
@@ -65,41 +67,59 @@ static void pca9698_set_bit(unsigned gpio, u8 *buffer, unsigned value)
                buffer[byte] &= ~(1 << bit);
 }
 
-int pca9698_direction_input(u8 chip, unsigned offset)
+int pca9698_request(unsigned gpio, const char *label)
+{
+       if (gpio >= PCA9698_GPIO_COUNT)
+               return -EINVAL;
+
+       return 0;
+}
+
+void pca9698_free(unsigned gpio)
+{
+}
+
+int pca9698_direction_input(u8 addr, unsigned gpio)
 {
        u8 data[PCA9698_BUFFER_SIZE];
        int res;
 
-       res = pca9698_read40(chip, PCA9698_REG_CONFIG, data);
+       res = pca9698_read40(addr, PCA9698_REG_CONFIG, data);
        if (res)
                return res;
 
-       pca9698_set_bit(offset, data, 1);
-       return pca9698_write40(chip, PCA9698_REG_CONFIG, data);
+       pca9698_set_bit(gpio, data, 1);
+
+       return pca9698_write40(addr, PCA9698_REG_CONFIG, data);
 }
 
-int pca9698_direction_output(u8 chip, unsigned offset)
+int pca9698_direction_output(u8 addr, unsigned gpio, int value)
 {
        u8 data[PCA9698_BUFFER_SIZE];
        int res;
 
-       res = pca9698_read40(chip, PCA9698_REG_CONFIG, data);
+       res = pca9698_set_value(addr, gpio, value);
+       if (res)
+               return res;
+
+       res = pca9698_read40(addr, PCA9698_REG_CONFIG, data);
        if (res)
                return res;
 
-       pca9698_set_bit(offset, data, 0);
-       return pca9698_write40(chip, PCA9698_REG_CONFIG, data);
+       pca9698_set_bit(gpio, data, 0);
+
+       return pca9698_write40(addr, PCA9698_REG_CONFIG, data);
 }
 
-int pca9698_get_input(u8 chip, unsigned offset)
+int pca9698_get_value(u8 addr, unsigned gpio)
 {
-       unsigned config_byte = offset / 8;
-       unsigned config_bit = offset % 8;
+       unsigned config_byte = gpio / 8;
+       unsigned config_bit = gpio % 8;
        unsigned value;
        u8 data[PCA9698_BUFFER_SIZE];
        int res;
 
-       res = pca9698_read40(chip, PCA9698_REG_INPUT, data);
+       res = pca9698_read40(addr, PCA9698_REG_INPUT, data);
        if (res)
                return -1;
 
@@ -108,16 +128,16 @@ int pca9698_get_input(u8 chip, unsigned offset)
        return !!value;
 }
 
-int pca9698_set_output(u8 chip, unsigned offset, int value)
+int pca9698_set_value(u8 addr, unsigned gpio, int value)
 {
        u8 data[PCA9698_BUFFER_SIZE];
        int res;
 
-       res = pca9698_read40(chip, PCA9698_REG_OUTPUT, data);
+       res = pca9698_read40(addr, PCA9698_REG_OUTPUT, data);
        if (res)
                return res;
 
-       memset(data, sizeof(data), 0);
-       pca9698_set_bit(offset, data, value);
-       return pca9698_write40(chip, PCA9698_REG_OUTPUT, data);
+       pca9698_set_bit(gpio, data, value);
+
+       return pca9698_write40(addr, PCA9698_REG_OUTPUT, data);
 }
index a48047a4f991529cd24979ee6885f449a73624dd..504db03c7116f7a80f1a72440c152bf1f39de3c5 100644 (file)
@@ -31,6 +31,7 @@ COBJS-$(CONFIG_FSL_I2C) += fsl_i2c.o
 COBJS-$(CONFIG_I2C_MVTWSI) += mvtwsi.o
 COBJS-$(CONFIG_I2C_MV) += mv_i2c.o
 COBJS-$(CONFIG_I2C_MXC) += mxc_i2c.o
+COBJS-$(CONFIG_I2C_MXS) += mxs_i2c.o
 COBJS-$(CONFIG_DRIVER_OMAP1510_I2C) += omap1510_i2c.o
 COBJS-$(CONFIG_DRIVER_OMAP24XX_I2C) += omap24xx_i2c.o
 COBJS-$(CONFIG_DRIVER_OMAP34XX_I2C) += omap24xx_i2c.o
@@ -42,6 +43,7 @@ COBJS-$(CONFIG_SOFT_I2C) += soft_i2c.o
 COBJS-$(CONFIG_SPEAR_I2C) += spr_i2c.o
 COBJS-$(CONFIG_TSI108_I2C) += tsi108_i2c.o
 COBJS-$(CONFIG_U8500_I2C) += u8500_i2c.o
+COBJS-$(CONFIG_SH_I2C) += sh_i2c.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
index 5e3406dc8f4f04c8a87f1fd9e80aa280a4f658fd..2abddfb6ff97356e032e1daf99e5bc4673766776 100644 (file)
@@ -78,13 +78,11 @@ static int poll_i2c_irq(int mask)
 
 void flush_rx(void)
 {
-       int     dummy;
-
        while (1) {
                if (!(REG(I2C_STAT) & I2C_STAT_RRDY))
                        break;
 
-               dummy = REG(I2C_DRR);
+               REG(I2C_DRR);
                REG(I2C_STAT) = I2C_STAT_RRDY;
                udelay(1000);
        }
index 258be0a908ea73bbf9265057df6e2a20d7070be5..5b017a910cd7bbfd919cb5c3d8033a568302f91e 100644 (file)
@@ -225,7 +225,7 @@ unsigned int get_i2c_clock(int bus)
 void
 i2c_init(int speed, int slaveadd)
 {
-       struct fsl_i2c *dev;
+       const struct fsl_i2c *dev;
        unsigned int temp;
        int bus_num, i;
 
diff --git a/drivers/i2c/mxs_i2c.c b/drivers/i2c/mxs_i2c.c
new file mode 100644 (file)
index 0000000..c8fea32
--- /dev/null
@@ -0,0 +1,246 @@
+/*
+ * Freescale i.MX28 I2C Driver
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Partly based on Linux kernel i2c-mxs.c driver:
+ * Copyright (C) 2011 Wolfram Sang, Pengutronix e.K.
+ *
+ * Which was based on a (non-working) driver which was:
+ * Copyright (C) 2009-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+#define        MXS_I2C_MAX_TIMEOUT     1000000
+
+void mxs_i2c_reset(void)
+{
+       struct mx28_i2c_regs *i2c_regs = (struct mx28_i2c_regs *)MXS_I2C0_BASE;
+       int ret;
+
+       ret = mx28_reset_block(&i2c_regs->hw_i2c_ctrl0_reg);
+       if (ret) {
+               debug("MXS I2C: Block reset timeout\n");
+               return;
+       }
+
+       writel(I2C_CTRL1_DATA_ENGINE_CMPLT_IRQ | I2C_CTRL1_NO_SLAVE_ACK_IRQ |
+               I2C_CTRL1_EARLY_TERM_IRQ | I2C_CTRL1_MASTER_LOSS_IRQ |
+               I2C_CTRL1_SLAVE_STOP_IRQ | I2C_CTRL1_SLAVE_IRQ,
+               &i2c_regs->hw_i2c_ctrl1_clr);
+
+       writel(I2C_QUEUECTRL_PIO_QUEUE_MODE, &i2c_regs->hw_i2c_queuectrl_set);
+}
+
+void mxs_i2c_setup_read(uint8_t chip, int len)
+{
+       struct mx28_i2c_regs *i2c_regs = (struct mx28_i2c_regs *)MXS_I2C0_BASE;
+
+       writel(I2C_QUEUECMD_RETAIN_CLOCK | I2C_QUEUECMD_PRE_SEND_START |
+               I2C_QUEUECMD_MASTER_MODE | I2C_QUEUECMD_DIRECTION |
+               (1 << I2C_QUEUECMD_XFER_COUNT_OFFSET),
+               &i2c_regs->hw_i2c_queuecmd);
+
+       writel((chip << 1) | 1, &i2c_regs->hw_i2c_data);
+
+       writel(I2C_QUEUECMD_SEND_NAK_ON_LAST | I2C_QUEUECMD_MASTER_MODE |
+               (len << I2C_QUEUECMD_XFER_COUNT_OFFSET) |
+               I2C_QUEUECMD_POST_SEND_STOP, &i2c_regs->hw_i2c_queuecmd);
+
+       writel(I2C_QUEUECTRL_QUEUE_RUN, &i2c_regs->hw_i2c_queuectrl_set);
+}
+
+void mxs_i2c_write(uchar chip, uint addr, int alen,
+                       uchar *buf, int blen, int stop)
+{
+       struct mx28_i2c_regs *i2c_regs = (struct mx28_i2c_regs *)MXS_I2C0_BASE;
+       uint32_t data;
+       int i, remain, off;
+
+       if ((alen > 4) || (alen == 0)) {
+               debug("MXS I2C: Invalid address length\n");
+               return;
+       }
+
+       if (stop)
+               stop = I2C_QUEUECMD_POST_SEND_STOP;
+
+       writel(I2C_QUEUECMD_PRE_SEND_START |
+               I2C_QUEUECMD_MASTER_MODE | I2C_QUEUECMD_DIRECTION |
+               ((blen + alen + 1) << I2C_QUEUECMD_XFER_COUNT_OFFSET) | stop,
+               &i2c_regs->hw_i2c_queuecmd);
+
+       data = (chip << 1) << 24;
+
+       for (i = 0; i < alen; i++) {
+               data >>= 8;
+               data |= ((char *)&addr)[i] << 24;
+               if ((i & 3) == 2)
+                       writel(data, &i2c_regs->hw_i2c_data);
+       }
+
+       off = i;
+       for (; i < off + blen; i++) {
+               data >>= 8;
+               data |= buf[i - off] << 24;
+               if ((i & 3) == 2)
+                       writel(data, &i2c_regs->hw_i2c_data);
+       }
+
+       remain = 24 - ((i & 3) * 8);
+       if (remain)
+               writel(data >> remain, &i2c_regs->hw_i2c_data);
+
+       writel(I2C_QUEUECTRL_QUEUE_RUN, &i2c_regs->hw_i2c_queuectrl_set);
+}
+
+int mxs_i2c_wait_for_ack(void)
+{
+       struct mx28_i2c_regs *i2c_regs = (struct mx28_i2c_regs *)MXS_I2C0_BASE;
+       uint32_t tmp;
+       int timeout = MXS_I2C_MAX_TIMEOUT;
+
+       for (;;) {
+               tmp = readl(&i2c_regs->hw_i2c_ctrl1);
+               if (tmp & I2C_CTRL1_NO_SLAVE_ACK_IRQ) {
+                       debug("MXS I2C: No slave ACK\n");
+                       goto err;
+               }
+
+               if (tmp & (
+                       I2C_CTRL1_EARLY_TERM_IRQ | I2C_CTRL1_MASTER_LOSS_IRQ |
+                       I2C_CTRL1_SLAVE_STOP_IRQ | I2C_CTRL1_SLAVE_IRQ)) {
+                       debug("MXS I2C: Error (CTRL1 = %08x)\n", tmp);
+                       goto err;
+               }
+
+               if (tmp & I2C_CTRL1_DATA_ENGINE_CMPLT_IRQ)
+                       break;
+
+               if (!timeout--) {
+                       debug("MXS I2C: Operation timed out\n");
+                       goto err;
+               }
+
+               udelay(1);
+       }
+
+       return 0;
+
+err:
+       mxs_i2c_reset();
+       return 1;
+}
+
+int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
+{
+       struct mx28_i2c_regs *i2c_regs = (struct mx28_i2c_regs *)MXS_I2C0_BASE;
+       uint32_t tmp = 0;
+       int ret;
+       int i;
+
+       mxs_i2c_write(chip, addr, alen, NULL, 0, 0);
+       ret = mxs_i2c_wait_for_ack();
+       if (ret) {
+               debug("MXS I2C: Failed writing address\n");
+               return ret;
+       }
+
+       mxs_i2c_setup_read(chip, len);
+       ret = mxs_i2c_wait_for_ack();
+       if (ret) {
+               debug("MXS I2C: Failed reading address\n");
+               return ret;
+       }
+
+       for (i = 0; i < len; i++) {
+               if (!(i & 3)) {
+                       while (readl(&i2c_regs->hw_i2c_queuestat) &
+                               I2C_QUEUESTAT_RD_QUEUE_EMPTY)
+                               ;
+                       tmp = readl(&i2c_regs->hw_i2c_queuedata);
+               }
+               buffer[i] = tmp & 0xff;
+               tmp >>= 8;
+       }
+
+       return 0;
+}
+
+int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
+{
+       int ret;
+       mxs_i2c_write(chip, addr, alen, buffer, len, 1);
+       ret = mxs_i2c_wait_for_ack();
+       if (ret)
+               debug("MXS I2C: Failed writing address\n");
+
+       return ret;
+}
+
+int i2c_probe(uchar chip)
+{
+       int ret;
+       mxs_i2c_write(chip, 0, 1, NULL, 0, 1);
+       ret = mxs_i2c_wait_for_ack();
+       mxs_i2c_reset();
+       return ret;
+}
+
+void i2c_init(int speed, int slaveadd)
+{
+       struct mx28_i2c_regs *i2c_regs = (struct mx28_i2c_regs *)MXS_I2C0_BASE;
+
+       mxs_i2c_reset();
+
+       switch (speed) {
+       case 100000:
+               writel((0x0078 << I2C_TIMING0_HIGH_COUNT_OFFSET) |
+                       (0x0030 << I2C_TIMING0_RCV_COUNT_OFFSET),
+                       &i2c_regs->hw_i2c_timing0);
+               writel((0x0080 << I2C_TIMING1_LOW_COUNT_OFFSET) |
+                       (0x0030 << I2C_TIMING1_XMIT_COUNT_OFFSET),
+                       &i2c_regs->hw_i2c_timing1);
+               break;
+       case 400000:
+               writel((0x000f << I2C_TIMING0_HIGH_COUNT_OFFSET) |
+                       (0x0007 << I2C_TIMING0_RCV_COUNT_OFFSET),
+                       &i2c_regs->hw_i2c_timing0);
+               writel((0x001f << I2C_TIMING1_LOW_COUNT_OFFSET) |
+                       (0x000f << I2C_TIMING1_XMIT_COUNT_OFFSET),
+                       &i2c_regs->hw_i2c_timing1);
+               break;
+       default:
+               printf("MXS I2C: Invalid speed selected (%d Hz)\n", speed);
+               return;
+       }
+
+       writel((0x0015 << I2C_TIMING2_BUS_FREE_OFFSET) |
+               (0x000d << I2C_TIMING2_LEADIN_COUNT_OFFSET),
+               &i2c_regs->hw_i2c_timing2);
+
+       return;
+}
diff --git a/drivers/i2c/sh_i2c.c b/drivers/i2c/sh_i2c.c
new file mode 100644 (file)
index 0000000..fd8cb92
--- /dev/null
@@ -0,0 +1,292 @@
+/*
+ * Copyright (C) 2011 Renesas Solutions Corp.
+ * Copyright (C) 2011 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+
+/* Every register is 32bit aligned, but only 8bits in size */
+#define ureg(name) u8 name; u8 __pad_##name##0; u16 __pad_##name##1;
+struct sh_i2c {
+       ureg(icdr);
+       ureg(iccr);
+       ureg(icsr);
+       ureg(icic);
+       ureg(iccl);
+       ureg(icch);
+};
+#undef ureg
+
+static struct sh_i2c *base;
+
+/* ICCR */
+#define SH_I2C_ICCR_ICE                (1 << 7)
+#define SH_I2C_ICCR_RACK       (1 << 6)
+#define SH_I2C_ICCR_RTS                (1 << 4)
+#define SH_I2C_ICCR_BUSY       (1 << 2)
+#define SH_I2C_ICCR_SCP                (1 << 0)
+
+/* ICSR / ICIC */
+#define SH_IC_BUSY     (1 << 3)
+#define SH_IC_TACK     (1 << 2)
+#define SH_IC_WAIT     (1 << 1)
+#define SH_IC_DTE      (1 << 0)
+
+static u8 iccl, icch;
+
+#define IRQ_WAIT 1000
+
+static void irq_wait(struct sh_i2c *base)
+{
+       int i;
+       u8 status;
+
+       for (i = 0 ; i < IRQ_WAIT ; i++) {
+               status = readb(&base->icsr);
+               if (SH_IC_WAIT & status)
+                       break;
+
+               udelay(10);
+       }
+
+       writeb(status & ~SH_IC_WAIT, &base->icsr);
+}
+
+static void irq_dte(struct sh_i2c *base)
+{
+       int i;
+
+       for (i = 0 ; i < IRQ_WAIT ; i++) {
+               if (SH_IC_DTE & readb(&base->icsr))
+                       break;
+               udelay(10);
+       }
+}
+
+static void irq_busy(struct sh_i2c *base)
+{
+       int i;
+
+       for (i = 0 ; i < IRQ_WAIT ; i++) {
+               if (!(SH_IC_BUSY & readb(&base->icsr)))
+                       break;
+               udelay(10);
+       }
+}
+
+static void i2c_set_addr(struct sh_i2c *base, u8 id, u8 reg, int stop)
+{
+       writeb(readb(&base->iccr) & ~SH_I2C_ICCR_ICE, &base->iccr);
+       writeb(readb(&base->iccr) | SH_I2C_ICCR_ICE, &base->iccr);
+
+       writeb(iccl, &base->iccl);
+       writeb(icch, &base->icch);
+       writeb(0, &base->icic);
+
+       writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS|SH_I2C_ICCR_BUSY), &base->iccr);
+       irq_dte(base);
+
+       writeb(id << 1, &base->icdr);
+       irq_dte(base);
+
+       writeb(reg, &base->icdr);
+       if (stop)
+               writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS), &base->iccr);
+
+       irq_dte(base);
+}
+
+static void i2c_finish(struct sh_i2c *base)
+{
+       writeb(0, &base->icsr);
+       writeb(readb(&base->iccr) & ~SH_I2C_ICCR_ICE, &base->iccr);
+}
+
+static void i2c_raw_write(struct sh_i2c *base, u8 id, u8 reg, u8 val)
+{
+       i2c_set_addr(base, id, reg, 0);
+       udelay(10);
+
+       writeb(val, &base->icdr);
+       irq_dte(base);
+
+       writeb((SH_I2C_ICCR_ICE | SH_I2C_ICCR_RTS), &base->iccr);
+       irq_dte(base);
+       irq_busy(base);
+
+       i2c_finish(base);
+}
+
+static u8 i2c_raw_read(struct sh_i2c *base, u8 id, u8 reg)
+{
+       u8 ret;
+
+       i2c_set_addr(base, id, reg, 1);
+       udelay(100);
+
+       writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS|SH_I2C_ICCR_BUSY), &base->iccr);
+       irq_dte(base);
+
+       writeb(id << 1 | 0x01, &base->icdr);
+       irq_dte(base);
+
+       writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_SCP), &base->iccr);
+       irq_dte(base);
+
+       ret = readb(&base->icdr);
+
+       writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RACK), &base->iccr);
+       readb(&base->icdr); /* Dummy read */
+       irq_busy(base);
+
+       i2c_finish(base);
+
+       return ret;
+}
+
+#ifdef CONFIG_I2C_MULTI_BUS
+static unsigned int current_bus;
+
+/**
+ * i2c_set_bus_num - change active I2C bus
+ *     @bus: bus index, zero based
+ *     @returns: 0 on success, non-0 on failure
+ */
+int i2c_set_bus_num(unsigned int bus)
+{
+       if ((bus < 0) || (bus >= CONFIG_SYS_MAX_I2C_BUS)) {
+               printf("Bad bus: %d\n", bus);
+               return -1;
+       }
+
+       switch (bus) {
+       case 0:
+               base = (void *)CONFIG_SH_I2C_BASE0;
+               break;
+       case 1:
+               base = (void *)CONFIG_SH_I2C_BASE1;
+               break;
+       default:
+               return -1;
+       }
+       current_bus = bus;
+
+       return 0;
+}
+
+/**
+ * i2c_get_bus_num - returns index of active I2C bus
+ */
+unsigned int i2c_get_bus_num(void)
+{
+       return current_bus;
+}
+#endif
+
+#define SH_I2C_ICCL_CALC(clk, date, t_low, t_high) \
+               ((clk / rate) * (t_low / t_low + t_high))
+#define SH_I2C_ICCH_CALC(clk, date, t_low, t_high) \
+               ((clk / rate) * (t_high / t_low + t_high))
+
+void i2c_init(int speed, int slaveaddr)
+{
+       int num, denom, tmp;
+
+#ifdef CONFIG_I2C_MULTI_BUS
+       current_bus = 0;
+#endif
+       base = (struct sh_i2c *)CONFIG_SH_I2C_BASE0;
+
+       /*
+        * Calculate the value for iccl. From the data sheet:
+        * iccl = (p-clock / transfer-rate) * (L / (L + H))
+        * where L and H are the SCL low and high ratio.
+        */
+       num = CONFIG_SH_I2C_CLOCK * CONFIG_SH_I2C_DATA_LOW;
+       denom = speed * (CONFIG_SH_I2C_DATA_HIGH + CONFIG_SH_I2C_DATA_LOW);
+       tmp = num * 10 / denom;
+       if (tmp % 10 >= 5)
+               iccl = (u8)((num/denom) + 1);
+       else
+               iccl = (u8)(num/denom);
+
+       /* Calculate the value for icch. From the data sheet:
+          icch = (p clock / transfer rate) * (H / (L + H)) */
+       num = CONFIG_SH_I2C_CLOCK * CONFIG_SH_I2C_DATA_HIGH;
+       tmp = num * 10 / denom;
+       if (tmp % 10 >= 5)
+               icch = (u8)((num/denom) + 1);
+       else
+               icch = (u8)(num/denom);
+}
+
+/*
+ * i2c_read: - Read multiple bytes from an i2c device
+ *
+ * The higher level routines take into account that this function is only
+ * called with len < page length of the device (see configuration file)
+ *
+ * @chip:   address of the chip which is to be read
+ * @addr:   i2c data address within the chip
+ * @alen:   length of the i2c data address (1..2 bytes)
+ * @buffer: where to write the data
+ * @len:    how much byte do we want to read
+ * @return: 0 in case of success
+ */
+int i2c_read(u8 chip, u32 addr, int alen, u8 *buffer, int len)
+{
+       int i = 0;
+       for (i = 0 ; i < len ; i++)
+               buffer[i] = i2c_raw_read(base, chip, addr + i);
+
+       return 0;
+}
+
+/*
+ * i2c_write: -  Write multiple bytes to an i2c device
+ *
+ * The higher level routines take into account that this function is only
+ * called with len < page length of the device (see configuration file)
+ *
+ * @chip:   address of the chip which is to be written
+ * @addr:   i2c data address within the chip
+ * @alen:   length of the i2c data address (1..2 bytes)
+ * @buffer: where to find the data to be written
+ * @len:    how much byte do we want to read
+ * @return: 0 in case of success
+ */
+int i2c_write(u8 chip, u32 addr, int alen, u8 *buffer, int len)
+{
+       int i = 0;
+       for (i = 0; i < len ; i++)
+               i2c_raw_write(base, chip, addr + i, buffer[i]);
+
+       return 0;
+}
+
+/*
+ * i2c_probe: - Test if a chip answers for a given i2c address
+ *
+ * @chip:   address of the chip which is searched for
+ * @return: 0 if a chip was found, -1 otherwhise
+ */
+int i2c_probe(u8 chip)
+{
+       return 0;
+}
index 58094c925ceccfae14e969c2567cc496feca51de..c3bc5360ca299b258bfcb02ed073607b2f56189e 100644 (file)
 #include <common.h>
 
 #ifdef CONFIG_USE_CPCIDVI
-extern u8  gt_cpcidvi_in8(u32 offset);
+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)
+#define out8(a, b) gt_cpcidvi_out8(a, b)
 #endif
 
 #include <i8042.h>
@@ -40,9 +40,9 @@ extern void gt_cpcidvi_out8(u32 offset, u8 data);
 /* defines */
 
 #ifdef CONFIG_CONSOLE_CURSOR
-extern void console_cursor (int state);
+extern void console_cursor(int state);
 static int blinkCount = CONFIG_SYS_CONSOLE_BLINK_COUNT;
-static int cursor_state = 0;
+static int cursor_state;
 #endif
 
 /* locals */
@@ -50,307 +50,313 @@ static int cursor_state = 0;
 static int  kbd_input   = -1;          /* no input yet */
 static int  kbd_mapping         = KBD_US;      /* default US keyboard */
 static int  kbd_flags   = NORMAL;      /* after reset */
-static int  kbd_state   = 0;           /* unshift code */
-
-static void kbd_conv_char (unsigned char scan_code);
-static void kbd_led_set (void);
-static void kbd_normal (unsigned char scan_code);
-static void kbd_shift (unsigned char scan_code);
-static void kbd_ctrl (unsigned char scan_code);
-static void kbd_num (unsigned char scan_code);
-static void kbd_caps (unsigned char scan_code);
-static void kbd_scroll (unsigned char scan_code);
-static void kbd_alt (unsigned char scan_code);
-static int  kbd_input_empty (void);
-static int  kbd_reset (void);
-
-static unsigned char kbd_fct_map [144] =
-    { /* kbd_fct_map table for scan code */
-    0,  AS,   AS,   AS,   AS,   AS,   AS,   AS, /* scan  0- 7 */
-   AS,  AS,   AS,   AS,   AS,   AS,   AS,   AS, /* scan  8- F */
-   AS,  AS,   AS,   AS,   AS,   AS,   AS,   AS, /* scan 10-17 */
-   AS,  AS,   AS,   AS,   AS,   CN,   AS,   AS, /* scan 18-1F */
-   AS,  AS,   AS,   AS,   AS,   AS,   AS,   AS, /* scan 20-27 */
-   AS,  AS,   SH,   AS,   AS,   AS,   AS,   AS, /* scan 28-2F */
-   AS,  AS,   AS,   AS,   AS,   AS,   SH,   AS, /* scan 30-37 */
-   AS,  AS,   CP,   0,    0,    0,    0,     0, /* scan 38-3F */
-    0,  0,    0,    0,    0,    NM,   ST,   ES, /* scan 40-47 */
-   ES,  ES,   ES,   ES,   ES,   ES,   ES,   ES, /* scan 48-4F */
-   ES,  ES,   ES,   ES,   0,    0,    AS,    0, /* scan 50-57 */
-    0,  0,    0,    0,    0,    0,    0,     0, /* scan 58-5F */
-    0,  0,    0,    0,    0,    0,    0,     0, /* scan 60-67 */
-    0,  0,    0,    0,    0,    0,    0,     0, /* scan 68-6F */
-   AS,  0,    0,    AS,   0,    0,    AS,    0, /* scan 70-77 */
-    0,  AS,   0,    0,    0,    AS,   0,     0, /* scan 78-7F */
-   AS,  CN,   AS,   AS,   AK,   ST,   EX,   EX, /* enhanced   */
-   AS,  EX,   EX,   AS,   EX,   AS,   EX,   EX  /* enhanced   */
-    };
-
-static unsigned char kbd_key_map [2][5][144] =
-    {
-    { /* US keyboard */
-    { /* unshift code */
-    0, 0x1b,   '1',   '2',   '3',   '4',   '5',   '6',    /* scan  0- 7 */
-  '7',  '8',   '9',   '0',   '-',   '=',  0x08,  '\t',    /* scan  8- F */
-  'q',  'w',   'e',   'r',   't',   'y',   'u',   'i',    /* scan 10-17 */
-  'o',  'p',   '[',   ']',  '\r',   CN,    'a',   's',    /* scan 18-1F */
-  'd',  'f',   'g',   'h',   'j',   'k',   'l',   ';',    /* scan 20-27 */
- '\'',  '`',   SH,   '\\',   'z',   'x',   'c',   'v',    /* scan 28-2F */
-  'b',  'n',   'm',   ',',   '.',   '/',   SH,    '*',    /* scan 30-37 */
-  ' ',  ' ',   CP,      0,     0,     0,     0,     0,    /* scan 38-3F */
-    0,    0,     0,     0,     0,   NM,    ST,    '7',    /* scan 40-47 */
-  '8',  '9',   '-',   '4',   '5',   '6',   '+',   '1',    /* scan 48-4F */
-  '2',  '3',   '0',   '.',     0,     0,     0,     0,    /* scan 50-57 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 58-5F */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 60-67 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 68-6F */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 70-77 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 78-7F */
-  '\r',          CN,   '/',   '*',   ' ',    ST,   'F',   'A',    /* extended */
-    0,  'D',   'C',     0,   'B',     0,    '@',  'P'     /* extended */
-    },
-    { /* shift code */
-    0, 0x1b,   '!',   '@',   '#',   '$',   '%',   '^',    /* scan  0- 7 */
-  '&',  '*',   '(',   ')',   '_',   '+',  0x08,  '\t',    /* scan  8- F */
-  'Q',  'W',   'E',   'R',   'T',   'Y',   'U',   'I',    /* scan 10-17 */
-  'O',  'P',   '{',   '}',  '\r',   CN,    'A',   'S',    /* scan 18-1F */
-  'D',  'F',   'G',   'H',   'J',   'K',   'L',   ':',    /* scan 20-27 */
-  '"',  '~',   SH,    '|',   'Z',   'X',   'C',   'V',    /* scan 28-2F */
-  'B',  'N',   'M',   '<',   '>',   '?',   SH,    '*',    /* scan 30-37 */
-  ' ',  ' ',   CP,      0,     0,     0,     0,     0,    /* scan 38-3F */
-    0,    0,     0,     0,     0,   NM,    ST,    '7',    /* scan 40-47 */
-  '8',  '9',   '-',   '4',   '5',   '6',   '+',   '1',    /* scan 48-4F */
-  '2',  '3',   '0',   '.',     0,     0,     0,     0,    /* scan 50-57 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 58-5F */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 60-67 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 68-6F */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 70-77 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 78-7F */
-  '\r',          CN,   '/',   '*',   ' ',    ST,   'F',   'A',    /* extended */
-    0,  'D',   'C',     0,   'B',     0,   '@',   'P'     /* extended */
-    },
-    { /* control code */
- 0xff, 0x1b,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,    /* scan  0- 7 */
- 0x1e, 0xff,  0xff,  0xff,  0x1f,  0xff,  0xff,  '\t',    /* scan  8- F */
- 0x11, 0x17,  0x05,  0x12,  0x14,  0x19,  0x15,  0x09,    /* scan 10-17 */
- 0x0f, 0x10,  0x1b,  0x1d,  '\r',   CN,   0x01,  0x13,    /* scan 18-1F */
- 0x04, 0x06,  0x07,  0x08,  0x0a,  0x0b,  0x0c,  0xff,    /* scan 20-27 */
- 0xff, 0x1c,   SH,   0xff,  0x1a,  0x18,  0x03,  0x16,    /* scan 28-2F */
- 0x02, 0x0e,  0x0d,  0xff,  0xff,  0xff,   SH,   0xff,    /* scan 30-37 */
- 0xff, 0xff,   CP,   0xff,  0xff,  0xff,  0xff,  0xff,    /* scan 38-3F */
- 0xff, 0xff,  0xff,  0xff,  0xff,   NM,    ST,   0xff,    /* scan 40-47 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,    /* scan 48-4F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,    /* scan 50-57 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,    /* scan 58-5F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,    /* scan 60-67 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,    /* scan 68-6F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,    /* scan 70-77 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,    /* scan 78-7F */
-  '\r',          CN,   '/',   '*',   ' ',    ST,  0xff,  0xff,    /* extended */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff     /* extended */
-    },
-    { /* non numeric code */
-    0, 0x1b,   '1',   '2',   '3',   '4',   '5',   '6',    /* scan  0- 7 */
-  '7',  '8',   '9',   '0',   '-',   '=',  0x08,  '\t',    /* scan  8- F */
-  'q',  'w',   'e',   'r',   't',   'y',   'u',   'i',    /* scan 10-17 */
-  'o',  'p',   '[',   ']',  '\r',   CN,    'a',   's',    /* scan 18-1F */
-  'd',  'f',   'g',   'h',   'j',   'k',   'l',   ';',    /* scan 20-27 */
- '\'',  '`',   SH,   '\\',   'z',   'x',   'c',   'v',    /* scan 28-2F */
-  'b',  'n',   'm',   ',',   '.',   '/',   SH,    '*',    /* scan 30-37 */
-  ' ',  ' ',   CP,      0,     0,     0,     0,     0,    /* scan 38-3F */
-    0,    0,     0,     0,     0,   NM,    ST,    'w',    /* scan 40-47 */
-  'x',  'y',   'l',   't',   'u',   'v',   'm',   'q',    /* scan 48-4F */
-  'r',  's',   'p',   'n',     0,     0,     0,     0,    /* scan 50-57 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 58-5F */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 60-67 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 68-6F */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 70-77 */
-    0,    0,     0,     0,     0,     0,     0,     0,    /* scan 78-7F */
-  '\r',          CN,   '/',   '*',   ' ',    ST,   'F',   'A',    /* extended */
-    0,  'D',   'C',     0,   'B',     0,    '@',  'P'     /* extended */
-    },
-    { /* right alt mode - not used in US keyboard */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan  0 - 7 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan  8 - F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 10 -17 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 18 -1F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 20 -27 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 28 -2F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 30 -37 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 38 -3F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 40 -47 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 48 -4F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 50 -57 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 58 -5F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 60 -67 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 68 -6F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 70 -77 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 78 -7F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* extended    */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff  /* extended    */
-    }
-    },
-    { /* german keyboard */
-    { /* unshift code */
-    0, 0x1b,   '1',   '2',   '3',   '4',   '5',   '6', /* scan  0- 7 */
-  '7',  '8',   '9',   '0',  0xe1,  '\'',  0x08,  '\t', /* scan  8- F */
-  'q',  'w',   'e',   'r',   't',   'z',   'u',   'i', /* scan 10-17 */
-  'o',  'p',  0x81,   '+',  '\r',   CN,    'a',   's', /* scan 18-1F */
-  'd',  'f',   'g',   'h',   'j',   'k',   'l',  0x94, /* scan 20-27 */
- 0x84,  '^',   SH,    '#',   'y',   'x',   'c',   'v', /* scan 28-2F */
-  'b',  'n',   'm',   ',',   '.',   '-',   SH,    '*', /* scan 30-37 */
-  ' ',  ' ',   CP,      0,     0,     0,     0,     0, /* scan 38-3F */
-    0,    0,     0,     0,     0,   NM,    ST,    '7', /* scan 40-47 */
-  '8',  '9',   '-',   '4',   '5',   '6',   '+',   '1', /* scan 48-4F */
-  '2',  '3',   '0',   ',',     0,     0,   '<',     0, /* scan 50-57 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 58-5F */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 60-67 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 68-6F */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 70-77 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 78-7F */
-  '\r',          CN,   '/',   '*',   ' ',    ST,   'F',   'A', /* extended */
-    0,  'D',   'C',     0,   'B',     0,    '@',  'P'  /* extended */
-    },
-    { /* shift code */
-    0, 0x1b,   '!',   '"',  0x15,   '$',   '%',   '&', /* scan  0- 7 */
-  '/',  '(',   ')',   '=',   '?',   '`',  0x08,  '\t', /* scan  8- F */
-  'Q',  'W',   'E',   'R',   'T',   'Z',   'U',   'I', /* scan 10-17 */
-  'O',  'P',  0x9a,   '*',  '\r',   CN,    'A',   'S', /* scan 18-1F */
-  'D',  'F',   'G',   'H',   'J',   'K',   'L',  0x99, /* scan 20-27 */
- 0x8e, 0xf8,   SH,   '\'',   'Y',   'X',   'C',   'V', /* scan 28-2F */
-  'B',  'N',   'M',   ';',   ':',   '_',   SH,    '*', /* scan 30-37 */
-  ' ',  ' ',   CP,      0,     0,     0,     0,     0, /* scan 38-3F */
-    0,    0,     0,     0,     0,   NM,    ST,    '7', /* scan 40-47 */
-  '8',  '9',   '-',   '4',   '5',   '6',   '+',   '1', /* scan 48-4F */
-  '2',  '3',   '0',   ',',     0,     0,   '>',     0, /* scan 50-57 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 58-5F */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 60-67 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 68-6F */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 70-77 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 78-7F */
-  '\r',          CN,   '/',   '*',   ' ',    ST,   'F',   'A', /* extended */
-    0,  'D',   'C',     0,   'B',     0,   '@',   'P'  /* extended */
-    },
-    { /* control code */
- 0xff, 0x1b,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff, /* scan  0- 7 */
- 0x1e, 0xff,  0xff,  0xff,  0x1f,  0xff,  0xff,  '\t', /* scan  8- F */
- 0x11, 0x17,  0x05,  0x12,  0x14,  0x19,  0x15,  0x09, /* scan 10-17 */
- 0x0f, 0x10,  0x1b,  0x1d,  '\r',   CN,   0x01,  0x13, /* scan 18-1F */
- 0x04, 0x06,  0x07,  0x08,  0x0a,  0x0b,  0x0c,  0xff, /* scan 20-27 */
- 0xff, 0x1c,   SH,   0xff,  0x1a,  0x18,  0x03,  0x16, /* scan 28-2F */
- 0x02, 0x0e,  0x0d,  0xff,  0xff,  0xff,   SH,   0xff, /* scan 30-37 */
- 0xff, 0xff,   CP,   0xff,  0xff,  0xff,  0xff,  0xff, /* scan 38-3F */
- 0xff, 0xff,  0xff,  0xff,  0xff,   NM,    ST,   0xff, /* scan 40-47 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 48-4F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 50-57 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 58-5F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 60-67 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 68-6F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 70-77 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 78-7F */
-  '\r',          CN,   '/',   '*',   ' ',    ST,  0xff,  0xff, /* extended */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff  /* extended */
-    },
-    { /* non numeric code */
-    0, 0x1b,   '1',   '2',   '3',   '4',   '5',   '6', /* scan  0- 7 */
-  '7',  '8',   '9',   '0',  0xe1,  '\'',  0x08,  '\t', /* scan  8- F */
-  'q',  'w',   'e',   'r',   't',   'z',   'u',   'i', /* scan 10-17 */
-  'o',  'p',  0x81,   '+',  '\r',   CN,    'a',   's', /* scan 18-1F */
-  'd',  'f',   'g',   'h',   'j',   'k',   'l',  0x94, /* scan 20-27 */
- 0x84,  '^',   SH,      0,   'y',   'x',   'c',   'v', /* scan 28-2F */
-  'b',  'n',   'm',   ',',   '.',   '-',   SH,    '*', /* scan 30-37 */
-  ' ',  ' ',   CP,      0,     0,     0,     0,     0, /* scan 38-3F */
-    0,    0,     0,     0,     0,   NM,    ST,    'w', /* scan 40-47 */
-  'x',  'y',   'l',   't',   'u',   'v',   'm',   'q', /* scan 48-4F */
-  'r',  's',   'p',   'n',     0,     0,   '<',     0, /* scan 50-57 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 58-5F */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 60-67 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 68-6F */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 70-77 */
-    0,    0,     0,     0,     0,     0,     0,     0, /* scan 78-7F */
-  '\r',          CN,   '/',   '*',   ' ',    ST,   'F',   'A', /* extended */
-    0,  'D',   'C',     0,   'B',     0,    '@',  'P'  /* extended */
-    },
-    { /* Right alt mode - is used in German keyboard */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan  0 - 7 */
-  '{',  '[',   ']',   '}',  '\\',  0xff,  0xff,  0xff, /* scan  8 - F */
-  '@', 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 10 -17 */
- 0xff, 0xff,  0xff,   '~',  0xff,  0xff,  0xff,  0xff, /* scan 18 -1F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 20 -27 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 28 -2F */
- 0xff, 0xff,  0xe6,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 30 -37 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 38 -3F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 40 -47 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 48 -4F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,   '|',  0xff, /* scan 50 -57 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 58 -5F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 60 -67 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 68 -6F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 70 -77 */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* scan 78 -7F */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, /* extended    */
- 0xff, 0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff  /* extended    */
-    }
-    }
-    };
-
-static unsigned char ext_key_map [] =
-    {
-    0x1c,   /* keypad enter */
-    0x1d,   /* right control */
-    0x35,   /* keypad slash */
-    0x37,   /* print screen */
-    0x38,   /* right alt */
-    0x46,   /* break */
-    0x47,   /* editpad home */
-    0x48,   /* editpad up */
-    0x49,   /* editpad pgup */
-    0x4b,   /* editpad left */
-    0x4d,   /* editpad right */
-    0x4f,   /* editpad end */
-    0x50,   /* editpad dn */
-    0x51,   /* editpad pgdn */
-    0x52,   /* editpad ins */
-    0x53,   /* editpad del */
-    0x00    /* map end */
-    };
+static int  kbd_state;                 /* unshift code */
+
+static void kbd_conv_char(unsigned char scan_code);
+static void kbd_led_set(void);
+static void kbd_normal(unsigned char scan_code);
+static void kbd_shift(unsigned char scan_code);
+static void kbd_ctrl(unsigned char scan_code);
+static void kbd_num(unsigned char scan_code);
+static void kbd_caps(unsigned char scan_code);
+static void kbd_scroll(unsigned char scan_code);
+static void kbd_alt(unsigned char scan_code);
+static int  kbd_input_empty(void);
+static int  kbd_reset(void);
+
+static unsigned char kbd_fct_map[144] = {
+       /* kbd_fct_map table for scan code */
+        0,  AS,  AS,  AS,  AS,  AS,  AS,  AS, /* scan  0- 7 */
+       AS,  AS,  AS,  AS,  AS,  AS,  AS,  AS, /* scan  8- F */
+       AS,  AS,  AS,  AS,  AS,  AS,  AS,  AS, /* scan 10-17 */
+       AS,  AS,  AS,  AS,  AS,  CN,  AS,  AS, /* scan 18-1F */
+       AS,  AS,  AS,  AS,  AS,  AS,  AS,  AS, /* scan 20-27 */
+       AS,  AS,  SH,  AS,  AS,  AS,  AS,  AS, /* scan 28-2F */
+       AS,  AS,  AS,  AS,  AS,  AS,  SH,  AS, /* scan 30-37 */
+       AS,  AS,  CP,   0,   0,   0,   0,   0, /* scan 38-3F */
+        0,   0,   0,   0,   0,  NM,  ST,  ES, /* scan 40-47 */
+       ES,  ES,  ES,  ES,  ES,  ES,  ES,  ES, /* scan 48-4F */
+       ES,  ES,  ES,  ES,   0,   0,  AS,   0, /* scan 50-57 */
+        0,   0,   0,   0,   0,   0,   0,   0, /* scan 58-5F */
+        0,   0,   0,   0,   0,   0,   0,   0, /* scan 60-67 */
+        0,   0,   0,   0,   0,   0,   0,   0, /* scan 68-6F */
+       AS,   0,   0,  AS,   0,   0,  AS,   0, /* scan 70-77 */
+        0,  AS,   0,   0,   0,  AS,   0,   0, /* scan 78-7F */
+       AS,  CN,  AS,  AS,  AK,  ST,  EX,  EX, /* enhanced */
+       AS,  EX,  EX,  AS,  EX,  AS,  EX,  EX  /* enhanced */
+       };
+
+static unsigned char kbd_key_map[2][5][144] = {
+       { /* US keyboard */
+       { /* unshift code */
+          0, 0x1b,  '1',  '2',  '3',  '4',  '5',  '6', /* scan  0- 7 */
+        '7',  '8',  '9',  '0',  '-',  '=', 0x08, '\t', /* scan  8- F */
+        'q',  'w',  'e',  'r',  't',  'y',  'u',  'i', /* scan 10-17 */
+        'o',  'p',  '[',  ']', '\r',   CN,  'a',  's', /* scan 18-1F */
+        'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';', /* scan 20-27 */
+       '\'',  '`',   SH, '\\',  'z',  'x',  'c',  'v', /* scan 28-2F */
+        'b',  'n',  'm',  ',',  '.',  '/',   SH,  '*', /* scan 30-37 */
+        ' ',  ' ',   CP,    0,    0,    0,    0,    0, /* scan 38-3F */
+          0,    0,    0,    0,    0,   NM,   ST,  '7', /* scan 40-47 */
+        '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1', /* scan 48-4F */
+        '2',  '3',  '0',  '.',    0,    0,    0,    0, /* scan 50-57 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 58-5F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 60-67 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 68-6F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 70-77 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 78-7F */
+       '\r',   CN,  '/',  '*',  ' ',   ST,  'F',  'A', /* extended */
+          0,  'D',  'C',    0,  'B',    0,  '@',  'P'  /* extended */
+       },
+       { /* shift code */
+          0, 0x1b,  '!',  '@',  '#',  '$',  '%',  '^', /* scan  0- 7 */
+        '&',  '*',  '(',  ')',  '_',  '+', 0x08, '\t', /* scan  8- F */
+        'Q',  'W',  'E',  'R',  'T',  'Y',  'U',  'I', /* scan 10-17 */
+        'O',  'P',  '{',  '}', '\r',   CN,  'A',  'S', /* scan 18-1F */
+        'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':', /* scan 20-27 */
+        '"',  '~',   SH,  '|',  'Z',  'X',  'C',  'V', /* scan 28-2F */
+        'B',  'N',  'M',  '<',  '>',  '?',   SH,  '*', /* scan 30-37 */
+        ' ',  ' ',   CP,    0,    0,    0,    0,    0, /* scan 38-3F */
+          0,    0,    0,    0,    0,   NM,   ST,  '7', /* scan 40-47 */
+        '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1', /* scan 48-4F */
+        '2',  '3',  '0',  '.',    0,    0,    0,    0, /* scan 50-57 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 58-5F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 60-67 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 68-6F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 70-77 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 78-7F */
+       '\r',   CN,  '/',  '*',  ' ',   ST,  'F',  'A', /* extended */
+          0,  'D',  'C',    0,  'B',    0,  '@',  'P'  /* extended */
+       },
+       { /* control code */
+       0xff, 0x1b, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, /* scan  0- 7 */
+       0x1e, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, '\t', /* scan  8- F */
+       0x11, 0x17, 0x05, 0x12, 0x14, 0x19, 0x15, 0x09, /* scan 10-17 */
+       0x0f, 0x10, 0x1b, 0x1d, '\r',   CN, 0x01, 0x13, /* scan 18-1F */
+       0x04, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0xff, /* scan 20-27 */
+       0xff, 0x1c,   SH, 0xff, 0x1a, 0x18, 0x03, 0x16, /* scan 28-2F */
+       0x02, 0x0e, 0x0d, 0xff, 0xff, 0xff,   SH, 0xff, /* scan 30-37 */
+       0xff, 0xff,   CP, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 38-3F */
+       0xff, 0xff, 0xff, 0xff, 0xff,   NM,   ST, 0xff, /* scan 40-47 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 48-4F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 50-57 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 58-5F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 60-67 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 68-6F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 70-77 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 78-7F */
+       '\r',   CN,  '/',  '*',  ' ',   ST, 0xff, 0xff, /* extended */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff  /* extended */
+       },
+       { /* non numeric code */
+          0, 0x1b,  '1',  '2',  '3',  '4',  '5',  '6', /* scan  0- 7 */
+        '7',  '8',  '9',  '0',  '-',  '=', 0x08, '\t', /* scan  8- F */
+        'q',  'w',  'e',  'r',  't',  'y',  'u',  'i', /* scan 10-17 */
+        'o',  'p',  '[',  ']', '\r',   CN,  'a',  's', /* scan 18-1F */
+        'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';', /* scan 20-27 */
+       '\'',  '`',   SH, '\\',  'z',  'x',  'c',  'v', /* scan 28-2F */
+        'b',  'n',  'm',  ',',  '.',  '/',   SH,  '*', /* scan 30-37 */
+        ' ',  ' ',   CP,    0,    0,    0,    0,    0, /* scan 38-3F */
+          0,    0,    0,    0,    0,   NM,   ST,  'w', /* scan 40-47 */
+        'x',  'y',  'l',  't',  'u',  'v',  'm',  'q', /* scan 48-4F */
+        'r',  's',  'p',  'n',    0,    0,    0,    0, /* scan 50-57 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 58-5F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 60-67 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 68-6F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 70-77 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 78-7F */
+       '\r',   CN,  '/',  '*',  ' ',   ST,  'F',  'A', /* extended */
+          0,  'D',  'C',    0,  'B',    0,  '@',  'P'  /* extended */
+       },
+       { /* right alt mode - not used in US keyboard */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan  0 - 7 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 8 - F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 10 -17 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 18 -1F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 20 -27 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 28 -2F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 30 -37 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 38 -3F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 40 -47 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 48 -4F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 50 -57 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 58 -5F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 60 -67 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 68 -6F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 70 -77 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 78 -7F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* extended */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff  /* extended */
+       }
+       },
+       { /* german keyboard */
+       { /* unshift code */
+          0, 0x1b,  '1',  '2',  '3',  '4',  '5',  '6', /* scan  0- 7 */
+        '7',  '8',  '9',  '0', 0xe1, '\'', 0x08, '\t', /* scan  8- F */
+        'q',  'w',  'e',  'r',  't',  'z',  'u',  'i', /* scan 10-17 */
+        'o',  'p', 0x81,  '+', '\r',   CN,  'a',  's', /* scan 18-1F */
+        'd',  'f',  'g',  'h',  'j',  'k',  'l', 0x94, /* scan 20-27 */
+       0x84,  '^',   SH,  '#',  'y',  'x',  'c',  'v', /* scan 28-2F */
+        'b',  'n',  'm',  ',',  '.',  '-',   SH,  '*', /* scan 30-37 */
+        ' ',  ' ',   CP,    0,    0,    0,    0,    0, /* scan 38-3F */
+          0,    0,    0,    0,    0,   NM,   ST,  '7', /* scan 40-47 */
+        '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1', /* scan 48-4F */
+        '2',  '3',  '0',  ',',    0,    0,  '<',    0, /* scan 50-57 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 58-5F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 60-67 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 68-6F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 70-77 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 78-7F */
+       '\r',   CN,  '/',  '*',  ' ',   ST,  'F',  'A', /* extended */
+          0,  'D',  'C',    0,  'B',    0,  '@',  'P'  /* extended */
+       },
+       { /* shift code */
+          0, 0x1b,  '!',  '"', 0x15,  '$',  '%',  '&', /* scan  0- 7 */
+        '/',  '(',  ')',  '=',  '?',  '`', 0x08, '\t', /* scan  8- F */
+        'Q',  'W',  'E',  'R',  'T',  'Z',  'U',  'I', /* scan 10-17 */
+        'O',  'P', 0x9a,  '*', '\r',   CN,  'A',  'S', /* scan 18-1F */
+        'D',  'F',  'G',  'H',  'J',  'K',  'L', 0x99, /* scan 20-27 */
+       0x8e, 0xf8,   SH, '\'',  'Y',  'X',  'C',  'V', /* scan 28-2F */
+        'B',  'N',  'M',  ';',  ':',  '_',   SH,  '*', /* scan 30-37 */
+        ' ',  ' ',   CP,    0,    0,    0,    0,    0, /* scan 38-3F */
+          0,    0,    0,    0,    0,   NM,   ST,  '7', /* scan 40-47 */
+        '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1', /* scan 48-4F */
+        '2',  '3',  '0',  ',',    0,    0,  '>',    0, /* scan 50-57 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 58-5F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 60-67 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 68-6F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 70-77 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 78-7F */
+       '\r',   CN,  '/',  '*',  ' ',   ST,  'F',  'A', /* extended */
+          0,  'D',  'C',    0,  'B',    0,  '@',  'P'  /* extended */
+       },
+       { /* control code */
+       0xff, 0x1b, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, /* scan  0- 7 */
+       0x1e, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, '\t', /* scan  8- F */
+       0x11, 0x17, 0x05, 0x12, 0x14, 0x19, 0x15, 0x09, /* scan 10-17 */
+       0x0f, 0x10, 0x1b, 0x1d, '\r',   CN, 0x01, 0x13, /* scan 18-1F */
+       0x04, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0xff, /* scan 20-27 */
+       0xff, 0x1c,   SH, 0xff, 0x1a, 0x18, 0x03, 0x16, /* scan 28-2F */
+       0x02, 0x0e, 0x0d, 0xff, 0xff, 0xff,   SH, 0xff, /* scan 30-37 */
+       0xff, 0xff,   CP, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 38-3F */
+       0xff, 0xff, 0xff, 0xff, 0xff,   NM,   ST, 0xff, /* scan 40-47 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 48-4F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 50-57 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 58-5F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 60-67 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 68-6F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 70-77 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 78-7F */
+       '\r',   CN,  '/',  '*',  ' ',   ST, 0xff, 0xff, /* extended */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff  /* extended */
+       },
+       { /* non numeric code */
+          0, 0x1b,  '1',  '2',  '3',  '4',  '5',  '6', /* scan  0- 7 */
+        '7',  '8',  '9',  '0', 0xe1, '\'', 0x08, '\t', /* scan  8- F */
+        'q',  'w',  'e',  'r',  't',  'z',  'u',  'i', /* scan 10-17 */
+        'o',  'p', 0x81,  '+', '\r',   CN,  'a',  's', /* scan 18-1F */
+        'd',  'f',  'g',  'h',  'j',  'k',  'l', 0x94, /* scan 20-27 */
+       0x84,  '^',   SH,    0,  'y',  'x',  'c',  'v', /* scan 28-2F */
+        'b',  'n',  'm',  ',',  '.',  '-',   SH,  '*', /* scan 30-37 */
+        ' ',  ' ',   CP,    0,    0,    0,    0,    0, /* scan 38-3F */
+          0,    0,    0,    0,    0,   NM,   ST,  'w', /* scan 40-47 */
+        'x',  'y',  'l',  't',  'u',  'v',  'm',  'q', /* scan 48-4F */
+        'r',  's',  'p',  'n',    0,    0,  '<',    0, /* scan 50-57 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 58-5F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 60-67 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 68-6F */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 70-77 */
+          0,    0,    0,    0,    0,    0,    0,    0, /* scan 78-7F */
+       '\r',   CN,  '/',  '*',  ' ',   ST,  'F',  'A', /* extended */
+          0,  'D',  'C',    0,  'B',    0,  '@',  'P'  /* extended */
+       },
+       { /* Right alt mode - is used in German keyboard */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan  0 - 7 */
+        '{',  '[',  ']',  '}', '\\', 0xff, 0xff, 0xff, /* scan  8 - F */
+        '@', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 10 -17 */
+       0xff, 0xff, 0xff,  '~', 0xff, 0xff, 0xff, 0xff, /* scan 18 -1F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 20 -27 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 28 -2F */
+       0xff, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 30 -37 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 38 -3F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 40 -47 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 48 -4F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff,  '|', 0xff, /* scan 50 -57 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 58 -5F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 60 -67 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 68 -6F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 70 -77 */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* scan 78 -7F */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* extended */
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff  /* extended */
+       }
+       }
+       };
+
+static unsigned char ext_key_map[] = {
+       0x1c, /* keypad enter */
+       0x1d, /* right control */
+       0x35, /* keypad slash */
+       0x37, /* print screen */
+       0x38, /* right alt */
+       0x46, /* break */
+       0x47, /* editpad home */
+       0x48, /* editpad up */
+       0x49, /* editpad pgup */
+       0x4b, /* editpad left */
+       0x4d, /* editpad right */
+       0x4f, /* editpad end */
+       0x50, /* editpad dn */
+       0x51, /* editpad pgdn */
+       0x52, /* editpad ins */
+       0x53, /* editpad del */
+       0x00  /* map end */
+       };
+
+/******************************************************************************/
+
+static int kbd_controller_present(void)
+{
+       return in8(I8042_STATUS_REG) != 0xff;
+}
 
 /*******************************************************************************
  *
  * i8042_kbd_init - reset keyboard and init state flags
  */
-int i8042_kbd_init (void)
+int i8042_kbd_init(void)
 {
-    int keymap, try;
-    char *penv;
+       int keymap, try;
+       char *penv;
+
+       if (!kbd_controller_present())
+               return -1;
 
 #ifdef CONFIG_USE_CPCIDVI
-    if ((penv = getenv ("console")) != NULL) {
-           if (strncmp (penv, "serial", 7) == 0) {
-                   return -1;
-           }
-    }
+       penv = getenv("console");
+       if (penv != NULL) {
+               if (strncmp(penv, "serial", 7) == 0)
+                       return -1;
+       }
 #endif
-    /* Init keyboard device (default US layout) */
-    keymap = KBD_US;
-    if ((penv = getenv ("keymap")) != NULL)
-    {
-       if (strncmp (penv, "de", 3) == 0)
-       keymap = KBD_GER;
-    }
-
-    for (try = 0; try < KBD_RESET_TRIES; try++)
-    {
-       if (kbd_reset() == 0)
-       {
-           kbd_mapping   = keymap;
-           kbd_flags     = NORMAL;
-           kbd_state     = 0;
-           kbd_led_set();
-           return 0;
-           }
-    }
-    return -1;
+       /* Init keyboard device (default US layout) */
+       keymap = KBD_US;
+       penv = getenv("keymap");
+       if (penv != NULL) {
+               if (strncmp(penv, "de", 3) == 0)
+                       keymap = KBD_GER;
+       }
+
+       for (try = 0; try < KBD_RESET_TRIES; try++) {
+               if (kbd_reset() == 0) {
+                       kbd_mapping = keymap;
+                       kbd_flags   = NORMAL;
+                       kbd_state   = 0;
+                       kbd_led_set();
+                       return 0;
+               }
+       }
+       return -1;
 }
 
 
@@ -359,34 +365,32 @@ int i8042_kbd_init (void)
  * i8042_tstc - test if keyboard input is available
  *             option: cursor blinking if called in a loop
  */
-int i8042_tstc (void)
+int i8042_tstc(void)
 {
-    unsigned char scan_code = 0;
+       unsigned char scan_code = 0;
 
 #ifdef CONFIG_CONSOLE_CURSOR
-    if (--blinkCount == 0)
-    {
-       cursor_state ^= 1;
-       console_cursor (cursor_state);
-       blinkCount = CONFIG_SYS_CONSOLE_BLINK_COUNT;
-       udelay (10);
-    }
+       if (--blinkCount == 0) {
+               cursor_state ^= 1;
+               console_cursor(cursor_state);
+               blinkCount = CONFIG_SYS_CONSOLE_BLINK_COUNT;
+               udelay(10);
+       }
 #endif
 
-    if ((in8 (I8042_STATUS_REG) & 0x01) == 0)
+       if ((in8(I8042_STATUS_REG) & 0x01) == 0) {
+               return 0;
+       } else {
+               scan_code = in8(I8042_DATA_REG);
+               if (scan_code == 0xfa)
+                       return 0;
+
+               kbd_conv_char(scan_code);
+
+               if (kbd_input != -1)
+                       return 1;
+       }
        return 0;
-    else
-    {
-       scan_code = in8 (I8042_DATA_REG);
-       if (scan_code == 0xfa)
-           return 0;
-
-       kbd_conv_char(scan_code);
-
-       if (kbd_input != -1)
-           return 1;
-    }
-    return 0;
 }
 
 
@@ -395,276 +399,256 @@ int i8042_tstc (void)
  * i8042_getc - wait till keyboard input is available
  *             option: turn on/off cursor while waiting
  */
-int i8042_getc (void)
+int i8042_getc(void)
 {
-    int ret_chr;
-    unsigned char scan_code;
+       int ret_chr;
+       unsigned char scan_code;
 
-    while (kbd_input == -1)
-    {
-       while ((in8 (I8042_STATUS_REG) & 0x01) == 0)
-       {
+       while (kbd_input == -1) {
+               while ((in8(I8042_STATUS_REG) & 0x01) == 0) {
 #ifdef CONFIG_CONSOLE_CURSOR
-           if (--blinkCount==0)
-           {
-               cursor_state ^= 1;
-               console_cursor (cursor_state);
-               blinkCount = CONFIG_SYS_CONSOLE_BLINK_COUNT;
-           }
-           udelay (10);
+                       if (--blinkCount == 0) {
+                               cursor_state ^= 1;
+                               console_cursor(cursor_state);
+                               blinkCount = CONFIG_SYS_CONSOLE_BLINK_COUNT;
+                       }
+                       udelay(10);
 #endif
+               }
+               scan_code = in8(I8042_DATA_REG);
+               if (scan_code != 0xfa)
+                       kbd_conv_char (scan_code);
        }
-
-       scan_code = in8 (I8042_DATA_REG);
-
-       if (scan_code != 0xfa)
-       kbd_conv_char (scan_code);
-    }
-    ret_chr = kbd_input;
-    kbd_input = -1;
-    return ret_chr;
+       ret_chr = kbd_input;
+       kbd_input = -1;
+       return ret_chr;
 }
 
 
 /******************************************************************************/
 
-static void kbd_conv_char (unsigned char scan_code)
+static void kbd_conv_char(unsigned char scan_code)
 {
-    if (scan_code == 0xe0)
-    {
-       kbd_flags |= EXT;
-       return;
-    }
-
-    /* if high bit of scan_code, set break flag */
-    if (scan_code & 0x80)
-       kbd_flags |=  BRK;
-    else
-       kbd_flags &= ~BRK;
-
-    if ((scan_code == 0xe1) || (kbd_flags & E1))
-    {
-       if (scan_code == 0xe1)
-       {
-           kbd_flags ^= BRK;     /* reset the break flag */
-           kbd_flags ^= E1;      /* bitwise EXOR with E1 flag */
+       if (scan_code == 0xe0) {
+               kbd_flags |= EXT;
+               return;
        }
-       return;
-    }
 
-    scan_code &= 0x7f;
+       /* if high bit of scan_code, set break flag */
+       if (scan_code & 0x80)
+               kbd_flags |=  BRK;
+       else
+               kbd_flags &= ~BRK;
+
+       if ((scan_code == 0xe1) || (kbd_flags & E1)) {
+               if (scan_code == 0xe1) {
+                       kbd_flags ^= BRK;    /* reset the break flag */
+                       kbd_flags ^= E1;     /* bitwise EXOR with E1 flag */
+               }
+               return;
+       }
 
-    if (kbd_flags & EXT)
-    {
-       int i;
+       scan_code &= 0x7f;
+
+       if (kbd_flags & EXT) {
+               int i;
+
+               kbd_flags ^= EXT;
+               for (i = 0; ext_key_map[i]; i++) {
+                       if (ext_key_map[i] == scan_code) {
+                               scan_code = 0x80 + i;
+                               break;
+                       }
+               }
+               /* not found ? */
+               if (!ext_key_map[i])
+                       return;
+       }
 
-       kbd_flags ^= EXT;
-       for (i=0; ext_key_map[i]; i++)
-       {
-           if (ext_key_map[i] == scan_code)
-           {
-               scan_code = 0x80 + i;
+       switch (kbd_fct_map[scan_code]) {
+       case AS:
+               kbd_normal(scan_code);
+               break;
+       case SH:
+               kbd_shift(scan_code);
+               break;
+       case CN:
+               kbd_ctrl(scan_code);
+               break;
+       case NM:
+               kbd_num(scan_code);
+               break;
+       case CP:
+               kbd_caps(scan_code);
+               break;
+       case ST:
+               kbd_scroll(scan_code);
+               break;
+       case AK:
+               kbd_alt(scan_code);
                break;
-           }
        }
-       /* not found ? */
-       if (!ext_key_map[i])
-           return;
-    }
-
-    switch (kbd_fct_map [scan_code])
-    {
-    case AS:  kbd_normal (scan_code);
-       break;
-    case SH:  kbd_shift (scan_code);
-       break;
-    case CN:  kbd_ctrl (scan_code);
-       break;
-    case NM:  kbd_num (scan_code);
-       break;
-    case CP:  kbd_caps (scan_code);
-       break;
-    case ST:  kbd_scroll (scan_code);
-       break;
-    case AK:  kbd_alt (scan_code);
-       break;
-    }
-    return;
+       return;
 }
 
 
 /******************************************************************************/
 
-static void kbd_normal (unsigned char scan_code)
+static void kbd_normal(unsigned char scan_code)
 {
-    unsigned char chr;
-
-    if ((kbd_flags & BRK) == NORMAL)
-    {
-       chr = kbd_key_map [kbd_mapping][kbd_state][scan_code];
-       if ((chr == 0xff) || (chr == 0x00))
-       {
-           return;
+       unsigned char chr;
+
+       if ((kbd_flags & BRK) == NORMAL) {
+               chr = kbd_key_map[kbd_mapping][kbd_state][scan_code];
+               if ((chr == 0xff) || (chr == 0x00))
+                       return;
+
+               /* if caps lock convert upper to lower */
+               if (((kbd_flags & CAPS) == CAPS) &&
+                               (chr >= 'a' && chr <= 'z')) {
+                       chr -= 'a' - 'A';
+               }
+               kbd_input = chr;
        }
-
-       /* if caps lock convert upper to lower */
-       if (((kbd_flags & CAPS) == CAPS) && (chr >= 'a' && chr <= 'z'))
-       {
-          chr -= 'a' - 'A';
-       }
-       kbd_input = chr;
-    }
 }
 
 
 /******************************************************************************/
 
-static void kbd_shift (unsigned char scan_code)
+static void kbd_shift(unsigned char scan_code)
 {
-    if ((kbd_flags & BRK) == BRK)
-    {
-       kbd_state = AS;
-       kbd_flags &= (~SHIFT);
-    }
-    else
-    {
-       kbd_state = SH;
-       kbd_flags |= SHIFT;
-    }
+       if ((kbd_flags & BRK) == BRK) {
+               kbd_state = AS;
+               kbd_flags &= (~SHIFT);
+       } else {
+               kbd_state = SH;
+               kbd_flags |= SHIFT;
+       }
 }
 
 
 /******************************************************************************/
 
-static void kbd_ctrl (unsigned char scan_code)
+static void kbd_ctrl(unsigned char scan_code)
 {
-    if ((kbd_flags & BRK) == BRK)
-    {
-       kbd_state = AS;
-       kbd_flags &= (~CTRL);
-    }
-    else
-    {
-       kbd_state = CN;
-       kbd_flags |= CTRL;
-    }
+       if ((kbd_flags & BRK) == BRK) {
+               kbd_state = AS;
+               kbd_flags &= (~CTRL);
+       } else {
+               kbd_state = CN;
+               kbd_flags |= CTRL;
+       }
 }
 
 
 /******************************************************************************/
 
-static void kbd_caps (unsigned char scan_code)
+static void kbd_caps(unsigned char scan_code)
 {
-    if ((kbd_flags & BRK) == NORMAL)
-    {
-       kbd_flags ^= CAPS;
-       kbd_led_set ();           /* update keyboard LED */
-    }
+       if ((kbd_flags & BRK) == NORMAL) {
+               kbd_flags ^= CAPS;
+               kbd_led_set();    /* update keyboard LED */
+       }
 }
 
 
 /******************************************************************************/
 
-static void kbd_num (unsigned char scan_code)
+static void kbd_num(unsigned char scan_code)
 {
-    if ((kbd_flags & BRK) == NORMAL)
-    {
-       kbd_flags ^= NUM;
-       kbd_state = (kbd_flags & NUM) ? AS : NM;
-       kbd_led_set ();           /* update keyboard LED */
-    }
+       if ((kbd_flags & BRK) == NORMAL) {
+               kbd_flags ^= NUM;
+               kbd_state = (kbd_flags & NUM) ? AS : NM;
+               kbd_led_set();    /* update keyboard LED */
+       }
 }
 
 
 /******************************************************************************/
 
-static void kbd_scroll (unsigned char scan_code)
+static void kbd_scroll(unsigned char scan_code)
 {
-    if ((kbd_flags & BRK) == NORMAL)
-    {
-       kbd_flags ^= STP;
-       kbd_led_set ();            /* update keyboard LED */
-       if (kbd_flags & STP)
-           kbd_input = 0x13;
-       else
-           kbd_input = 0x11;
-    }
+       if ((kbd_flags & BRK) == NORMAL) {
+               kbd_flags ^= STP;
+               kbd_led_set();    /* update keyboard LED */
+               if (kbd_flags & STP)
+                       kbd_input = 0x13;
+               else
+                       kbd_input = 0x11;
+       }
 }
 
 /******************************************************************************/
 
-static void kbd_alt (unsigned char scan_code)
+static void kbd_alt(unsigned char scan_code)
 {
-    if ((kbd_flags & BRK) == BRK)
-    {
-       kbd_state = AS;
-       kbd_flags &= (~ALT);
-    }
-    else
-    {
-       kbd_state = AK;
-       kbd_flags &= ALT;
-    }
+       if ((kbd_flags & BRK) == BRK) {
+               kbd_state = AS;
+               kbd_flags &= (~ALT);
+       } else {
+               kbd_state = AK;
+               kbd_flags &= ALT;
+       }
 }
 
 
 /******************************************************************************/
 
-static void kbd_led_set (void)
+static void kbd_led_set(void)
 {
-    kbd_input_empty();
-    out8 (I8042_DATA_REG, 0xed);       /* SET LED command */
-    kbd_input_empty();
-    out8 (I8042_DATA_REG, (kbd_flags & 0x7));   /* LED bits only */
+       kbd_input_empty();
+       out8(I8042_DATA_REG, 0xed);    /* SET LED command */
+       kbd_input_empty();
+       out8(I8042_DATA_REG, (kbd_flags & 0x7));    /* LED bits only */
 }
 
 
 /******************************************************************************/
 
-static int kbd_input_empty (void)
+static int kbd_input_empty(void)
 {
-    int kbdTimeout = KBD_TIMEOUT;
+       int kbdTimeout = KBD_TIMEOUT;
 
-    /* wait for input buf empty */
-    while ((in8 (I8042_STATUS_REG) & 0x02) && kbdTimeout--)
-       udelay(1000);
+       /* wait for input buf empty */
+       while ((in8(I8042_STATUS_REG) & 0x02) && kbdTimeout--)
+               udelay(1000);
 
-    return kbdTimeout;
+       return kbdTimeout != -1;
 }
 
 /******************************************************************************/
 
-static int kbd_reset (void)
+static int kbd_reset(void)
 {
-    if (kbd_input_empty() == 0)
-       return -1;
+       if (kbd_input_empty() == 0)
+               return -1;
 
-    out8 (I8042_DATA_REG, 0xff);
+       out8(I8042_DATA_REG, 0xff);
 
-    udelay(250000);
+       udelay(250000);
 
-    if (kbd_input_empty() == 0)
-       return -1;
+       if (kbd_input_empty() == 0)
+               return -1;
 
 #ifdef CONFIG_USE_CPCIDVI
-    out8 (I8042_COMMAND_REG, 0x60);
+       out8(I8042_COMMAND_REG, 0x60);
 #else
-    out8 (I8042_DATA_REG, 0x60);
+       out8(I8042_DATA_REG, 0x60);
 #endif
 
-    if (kbd_input_empty() == 0)
-       return -1;
+       if (kbd_input_empty() == 0)
+               return -1;
 
-    out8 (I8042_DATA_REG, 0x45);
+       out8(I8042_DATA_REG, 0x45);
 
 
-    if (kbd_input_empty() == 0)
-       return -1;
+       if (kbd_input_empty() == 0)
+               return -1;
 
-    out8 (I8042_COMMAND_REG, 0xae);
+       out8(I8042_COMMAND_REG, 0xae);
 
-    if (kbd_input_empty() == 0)
-       return -1;
+       if (kbd_input_empty() == 0)
+               return -1;
 
-    return 0;
+       return 0;
 }
index 9f9db751699824e177675f4364cece1274dbcf7b..506f1d6eff6a90f07cf6d7d2ee328334c87dd6be 100644 (file)
@@ -36,6 +36,7 @@ COBJS-$(CONFIG_MMC_SPI) += mmc_spi.o
 COBJS-$(CONFIG_ARM_PL180_MMCI) += arm_pl180_mmci.o
 COBJS-$(CONFIG_MV_SDHCI) += mv_sdhci.o
 COBJS-$(CONFIG_MXC_MMC) += mxcmmc.o
+COBJS-$(CONFIG_MXS_MMC) += mxsmmc.o
 COBJS-$(CONFIG_OMAP_HSMMC) += omap_hsmmc.o
 COBJS-$(CONFIG_PXA_MMC) += pxa_mmc.o
 COBJS-$(CONFIG_PXA_MMC_GENERIC) += pxa_mmc_gen.o
index ed296ee0266f96a46c4e610bf639f4e826681e20..e6467a2d186f3a86cf3f4baec0db5dfcf7905645 100644 (file)
@@ -111,7 +111,6 @@ static int do_command(struct mmc *dev, struct mmc_cmd *cmd)
 static int read_bytes(struct mmc *dev, u32 *dest, u32 blkcount, u32 blksize)
 {
        u32 *tempbuff = dest;
-       int i;
        u64 xfercount = blkcount * blksize;
        struct mmc_host *host = dev->priv;
        u32 status, status_err;
@@ -121,31 +120,6 @@ static int read_bytes(struct mmc *dev, u32 *dest, u32 blkcount, u32 blksize)
        status = readl(&host->base->status);
        status_err = status & (SDI_STA_DCRCFAIL | SDI_STA_DTIMEOUT |
                               SDI_STA_RXOVERR);
-       while (!status_err &&
-              (xfercount >= SDI_FIFO_BURST_SIZE * sizeof(u32))) {
-               if (status & SDI_STA_RXFIFOBR) {
-                       for (i = 0; i < SDI_FIFO_BURST_SIZE; i++)
-                               *(tempbuff + i) = readl(&host->base->fifo);
-                       tempbuff += SDI_FIFO_BURST_SIZE;
-                       xfercount -= SDI_FIFO_BURST_SIZE * sizeof(u32);
-               }
-               status = readl(&host->base->status);
-               status_err = status &
-                       (SDI_STA_DCRCFAIL | SDI_STA_DTIMEOUT | SDI_STA_RXOVERR);
-       }
-
-       if (status & SDI_STA_DTIMEOUT) {
-               printf("Read data timed out, xfercount: %llu, status: 0x%08X\n",
-                       xfercount, status);
-               return -ETIMEDOUT;
-       } else if (status & SDI_STA_DCRCFAIL) {
-               printf("Read data blk CRC error: 0x%x\n", status);
-               return -EILSEQ;
-       } else if (status & SDI_STA_RXOVERR) {
-               printf("Read data RX overflow error\n");
-               return -EIO;
-       }
-
        while ((!status_err) && (xfercount >= sizeof(u32))) {
                if (status & SDI_STA_RXDAVL) {
                        *(tempbuff) = readl(&host->base->fifo);
index 5d918e6ffcac8139a9dfa28ea344b05a6d06b801..ce96736942cc1fc592ad2966b18c17a5a53d4226 100644 (file)
@@ -69,8 +69,8 @@ static void dmmc_set_clock(struct mmc *mmc, uint clock)
 static int
 dmmc_wait_fifo_status(volatile struct davinci_mmc_regs *regs, uint status)
 {
-       uint mmcstatus1, wdog = WATCHDOG_COUNT;
-       mmcstatus1 = get_val(&regs->mmcst1);
+       uint wdog = WATCHDOG_COUNT;
+
        while (--wdog && ((get_val(&regs->mmcst1) & status) != status))
                udelay(10);
 
@@ -86,9 +86,8 @@ dmmc_wait_fifo_status(volatile struct davinci_mmc_regs *regs, uint status)
 /* Busy bit wait loop for MMCST1 */
 static int dmmc_busy_wait(volatile struct davinci_mmc_regs *regs)
 {
-       uint mmcstatus1, wdog = WATCHDOG_COUNT;
+       uint wdog = WATCHDOG_COUNT;
 
-       mmcstatus1 = get_val(&regs->mmcst1);
        while (--wdog && (get_val(&regs->mmcst1) & MMCST1_BUSY))
                udelay(10);
 
index 37ce6e85a1352ca6f6e93cd1cd4aadcf7060a19d..21665ecc5b9288356becf9f0269494b1748374f3 100644 (file)
@@ -1190,7 +1190,7 @@ block_dev_desc_t *mmc_get_dev(int dev)
 
 int mmc_init(struct mmc *mmc)
 {
-       int err, retry = 3;
+       int err;
 
        if (mmc->has_init)
                return 0;
@@ -1213,19 +1213,7 @@ int mmc_init(struct mmc *mmc)
        mmc->part_num = 0;
 
        /* Test for SD version 2 */
-       /*
-        * retry here for 3 times, as for some controller it has dynamic
-        * clock gating, and only toggle out clk when the first cmd0 send
-        * out, while some card strictly obey the 74 clocks rule, the interval
-        * may not be sufficient between the cmd0 and this cmd8, retry to
-        * fulfil the clock requirement
-        */
-       do {
-               err = mmc_send_if_cond(mmc);
-       } while (--retry > 0 && err);
-
-       if (err)
-               return err;
+       err = mmc_send_if_cond(mmc);
 
        /* Now try to get the SD card's operating condition */
        err = sd_send_op_cond(mmc);
index f92caeb8fd5f43884e720f311fc9e3f58b03f6d2..1501974e2f575eb2784dec176335e4b84db2c2bc 100644 (file)
@@ -48,7 +48,10 @@ int mv_sdh_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks)
                mv_ops.write_b = mv_sdhci_writeb;
        host->ops = &mv_ops;
 #endif
-       host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
+       if (quirks & SDHCI_QUIRK_REG32_RW)
+               host->version = sdhci_readl(host, SDHCI_HOST_VERSION - 2) >> 16;
+       else
+               host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
        add_sdhci(host, max_clk, min_clk);
        return 0;
 }
diff --git a/drivers/mmc/mxsmmc.c b/drivers/mmc/mxsmmc.c
new file mode 100644 (file)
index 0000000..2a9949e
--- /dev/null
@@ -0,0 +1,351 @@
+/*
+ * Freescale i.MX28 SSP MMC driver
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * (C) Copyright 2008-2010 Freescale Semiconductor, Inc.
+ * Terry Lv
+ *
+ * Copyright 2007, Freescale Semiconductor, Inc
+ * Andy Fleming
+ *
+ * Based vaguely on the pxa mmc code:
+ * (C) Copyright 2003
+ * 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>
+#include <malloc.h>
+#include <mmc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+struct mxsmmc_priv {
+       int                     id;
+       struct mx28_ssp_regs    *regs;
+       uint32_t                clkseq_bypass;
+       uint32_t                *clkctrl_ssp;
+       uint32_t                buswidth;
+       int                     (*mmc_is_wp)(int);
+};
+
+#define        MXSMMC_MAX_TIMEOUT      10000
+
+/*
+ * Sends a command out on the bus.  Takes the mmc pointer,
+ * a command pointer, and an optional data pointer.
+ */
+static int
+mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
+{
+       struct mxsmmc_priv *priv = (struct mxsmmc_priv *)mmc->priv;
+       struct mx28_ssp_regs *ssp_regs = priv->regs;
+       uint32_t reg;
+       int timeout;
+       uint32_t data_count;
+       uint32_t *data_ptr;
+       uint32_t ctrl0;
+
+       debug("MMC%d: CMD%d\n", mmc->block_dev.dev, cmd->cmdidx);
+
+       /* Check bus busy */
+       timeout = MXSMMC_MAX_TIMEOUT;
+       while (--timeout) {
+               udelay(1000);
+               reg = readl(&ssp_regs->hw_ssp_status);
+               if (!(reg &
+                       (SSP_STATUS_BUSY | SSP_STATUS_DATA_BUSY |
+                       SSP_STATUS_CMD_BUSY))) {
+                       break;
+               }
+       }
+
+       if (!timeout) {
+               printf("MMC%d: Bus busy timeout!\n", mmc->block_dev.dev);
+               return TIMEOUT;
+       }
+
+       /* See if card is present */
+       if (readl(&ssp_regs->hw_ssp_status) & SSP_STATUS_CARD_DETECT) {
+               printf("MMC%d: No card detected!\n", mmc->block_dev.dev);
+               return NO_CARD_ERR;
+       }
+
+       /* Start building CTRL0 contents */
+       ctrl0 = priv->buswidth;
+
+       /* Set up command */
+       if (!(cmd->resp_type & MMC_RSP_CRC))
+               ctrl0 |= SSP_CTRL0_IGNORE_CRC;
+       if (cmd->resp_type & MMC_RSP_PRESENT)   /* Need to get response */
+               ctrl0 |= SSP_CTRL0_GET_RESP;
+       if (cmd->resp_type & MMC_RSP_136)       /* It's a 136 bits response */
+               ctrl0 |= SSP_CTRL0_LONG_RESP;
+
+       /* Command index */
+       reg = readl(&ssp_regs->hw_ssp_cmd0);
+       reg &= ~(SSP_CMD0_CMD_MASK | SSP_CMD0_APPEND_8CYC);
+       reg |= cmd->cmdidx << SSP_CMD0_CMD_OFFSET;
+       if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
+               reg |= SSP_CMD0_APPEND_8CYC;
+       writel(reg, &ssp_regs->hw_ssp_cmd0);
+
+       /* Command argument */
+       writel(cmd->cmdarg, &ssp_regs->hw_ssp_cmd1);
+
+       /* Set up data */
+       if (data) {
+               /* READ or WRITE */
+               if (data->flags & MMC_DATA_READ) {
+                       ctrl0 |= SSP_CTRL0_READ;
+               } else if (priv->mmc_is_wp(mmc->block_dev.dev)) {
+                       printf("MMC%d: Can not write a locked card!\n",
+                               mmc->block_dev.dev);
+                       return UNUSABLE_ERR;
+               }
+
+               ctrl0 |= SSP_CTRL0_DATA_XFER;
+               reg = ((data->blocks - 1) <<
+                       SSP_BLOCK_SIZE_BLOCK_COUNT_OFFSET) |
+                       ((ffs(data->blocksize) - 1) <<
+                       SSP_BLOCK_SIZE_BLOCK_SIZE_OFFSET);
+               writel(reg, &ssp_regs->hw_ssp_block_size);
+
+               reg = data->blocksize * data->blocks;
+               writel(reg, &ssp_regs->hw_ssp_xfer_size);
+       }
+
+       /* Kick off the command */
+       ctrl0 |= SSP_CTRL0_WAIT_FOR_IRQ | SSP_CTRL0_ENABLE | SSP_CTRL0_RUN;
+       writel(ctrl0, &ssp_regs->hw_ssp_ctrl0);
+
+       /* Wait for the command to complete */
+       timeout = MXSMMC_MAX_TIMEOUT;
+       while (--timeout) {
+               udelay(1000);
+               reg = readl(&ssp_regs->hw_ssp_status);
+               if (!(reg & SSP_STATUS_CMD_BUSY))
+                       break;
+       }
+
+       if (!timeout) {
+               printf("MMC%d: Command %d busy\n",
+                       mmc->block_dev.dev, cmd->cmdidx);
+               return TIMEOUT;
+       }
+
+       /* Check command timeout */
+       if (reg & SSP_STATUS_RESP_TIMEOUT) {
+               printf("MMC%d: Command %d timeout (status 0x%08x)\n",
+                       mmc->block_dev.dev, cmd->cmdidx, reg);
+               return TIMEOUT;
+       }
+
+       /* Check command errors */
+       if (reg & (SSP_STATUS_RESP_CRC_ERR | SSP_STATUS_RESP_ERR)) {
+               printf("MMC%d: Command %d error (status 0x%08x)!\n",
+                       mmc->block_dev.dev, cmd->cmdidx, reg);
+               return COMM_ERR;
+       }
+
+       /* Copy response to response buffer */
+       if (cmd->resp_type & MMC_RSP_136) {
+               cmd->response[3] = readl(&ssp_regs->hw_ssp_sdresp0);
+               cmd->response[2] = readl(&ssp_regs->hw_ssp_sdresp1);
+               cmd->response[1] = readl(&ssp_regs->hw_ssp_sdresp2);
+               cmd->response[0] = readl(&ssp_regs->hw_ssp_sdresp3);
+       } else
+               cmd->response[0] = readl(&ssp_regs->hw_ssp_sdresp0);
+
+       /* Return if no data to process */
+       if (!data)
+               return 0;
+
+       /* Process the data */
+       data_count = data->blocksize * data->blocks;
+       timeout = MXSMMC_MAX_TIMEOUT;
+       if (data->flags & MMC_DATA_READ) {
+               data_ptr = (uint32_t *)data->dest;
+               while (data_count && --timeout) {
+                       reg = readl(&ssp_regs->hw_ssp_status);
+                       if (!(reg & SSP_STATUS_FIFO_EMPTY)) {
+                               *data_ptr++ = readl(&ssp_regs->hw_ssp_data);
+                               data_count -= 4;
+                               timeout = MXSMMC_MAX_TIMEOUT;
+                       } else
+                               udelay(1000);
+               }
+       } else {
+               data_ptr = (uint32_t *)data->src;
+               timeout *= 100;
+               while (data_count && --timeout) {
+                       reg = readl(&ssp_regs->hw_ssp_status);
+                       if (!(reg & SSP_STATUS_FIFO_FULL)) {
+                               writel(*data_ptr++, &ssp_regs->hw_ssp_data);
+                               data_count -= 4;
+                               timeout = MXSMMC_MAX_TIMEOUT;
+                       } else
+                               udelay(1000);
+               }
+       }
+
+       if (!timeout) {
+               printf("MMC%d: Data timeout with command %d (status 0x%08x)!\n",
+                       mmc->block_dev.dev, cmd->cmdidx, reg);
+               return COMM_ERR;
+       }
+
+       /* Check data errors */
+       reg = readl(&ssp_regs->hw_ssp_status);
+       if (reg &
+               (SSP_STATUS_TIMEOUT | SSP_STATUS_DATA_CRC_ERR |
+               SSP_STATUS_FIFO_OVRFLW | SSP_STATUS_FIFO_UNDRFLW)) {
+               printf("MMC%d: Data error with command %d (status 0x%08x)!\n",
+                       mmc->block_dev.dev, cmd->cmdidx, reg);
+               return COMM_ERR;
+       }
+
+       return 0;
+}
+
+static void mxsmmc_set_ios(struct mmc *mmc)
+{
+       struct mxsmmc_priv *priv = (struct mxsmmc_priv *)mmc->priv;
+       struct mx28_ssp_regs *ssp_regs = priv->regs;
+
+       /* Set the clock speed */
+       if (mmc->clock)
+               mx28_set_ssp_busclock(priv->id, mmc->clock / 1000);
+
+       switch (mmc->bus_width) {
+       case 1:
+               priv->buswidth = SSP_CTRL0_BUS_WIDTH_ONE_BIT;
+               break;
+       case 4:
+               priv->buswidth = SSP_CTRL0_BUS_WIDTH_FOUR_BIT;
+               break;
+       case 8:
+               priv->buswidth = SSP_CTRL0_BUS_WIDTH_EIGHT_BIT;
+               break;
+       }
+
+       /* Set the bus width */
+       clrsetbits_le32(&ssp_regs->hw_ssp_ctrl0,
+                       SSP_CTRL0_BUS_WIDTH_MASK, priv->buswidth);
+
+       debug("MMC%d: Set %d bits bus width\n",
+               mmc->block_dev.dev, mmc->bus_width);
+}
+
+static int mxsmmc_init(struct mmc *mmc)
+{
+       struct mxsmmc_priv *priv = (struct mxsmmc_priv *)mmc->priv;
+       struct mx28_ssp_regs *ssp_regs = priv->regs;
+
+       /* Reset SSP */
+       mx28_reset_block(&ssp_regs->hw_ssp_ctrl0_reg);
+
+       /* 8 bits word length in MMC mode */
+       clrsetbits_le32(&ssp_regs->hw_ssp_ctrl1,
+               SSP_CTRL1_SSP_MODE_MASK | SSP_CTRL1_WORD_LENGTH_MASK,
+               SSP_CTRL1_SSP_MODE_SD_MMC | SSP_CTRL1_WORD_LENGTH_EIGHT_BITS);
+
+       /* Set initial bit clock 400 KHz */
+       mx28_set_ssp_busclock(priv->id, 400);
+
+       /* Send initial 74 clock cycles (185 us @ 400 KHz)*/
+       writel(SSP_CMD0_CONT_CLKING_EN, &ssp_regs->hw_ssp_cmd0_set);
+       udelay(200);
+       writel(SSP_CMD0_CONT_CLKING_EN, &ssp_regs->hw_ssp_cmd0_clr);
+
+       return 0;
+}
+
+int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int))
+{
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+       struct mmc *mmc = NULL;
+       struct mxsmmc_priv *priv = NULL;
+
+       mmc = malloc(sizeof(struct mmc));
+       if (!mmc)
+               return -ENOMEM;
+
+       priv = malloc(sizeof(struct mxsmmc_priv));
+       if (!priv) {
+               free(mmc);
+               return -ENOMEM;
+       }
+
+       priv->mmc_is_wp = wp;
+       priv->id = id;
+       switch (id) {
+       case 0:
+               priv->regs = (struct mx28_ssp_regs *)MXS_SSP0_BASE;
+               priv->clkseq_bypass = CLKCTRL_CLKSEQ_BYPASS_SSP0;
+               priv->clkctrl_ssp = &clkctrl_regs->hw_clkctrl_ssp0;
+               break;
+       case 1:
+               priv->regs = (struct mx28_ssp_regs *)MXS_SSP1_BASE;
+               priv->clkseq_bypass = CLKCTRL_CLKSEQ_BYPASS_SSP1;
+               priv->clkctrl_ssp = &clkctrl_regs->hw_clkctrl_ssp1;
+               break;
+       case 2:
+               priv->regs = (struct mx28_ssp_regs *)MXS_SSP2_BASE;
+               priv->clkseq_bypass = CLKCTRL_CLKSEQ_BYPASS_SSP2;
+               priv->clkctrl_ssp = &clkctrl_regs->hw_clkctrl_ssp2;
+               break;
+       case 3:
+               priv->regs = (struct mx28_ssp_regs *)MXS_SSP3_BASE;
+               priv->clkseq_bypass = CLKCTRL_CLKSEQ_BYPASS_SSP3;
+               priv->clkctrl_ssp = &clkctrl_regs->hw_clkctrl_ssp3;
+               break;
+       }
+
+       sprintf(mmc->name, "MXS MMC");
+       mmc->send_cmd = mxsmmc_send_cmd;
+       mmc->set_ios = mxsmmc_set_ios;
+       mmc->init = mxsmmc_init;
+       mmc->priv = priv;
+
+       mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
+
+       mmc->host_caps = MMC_MODE_4BIT | MMC_MODE_8BIT |
+                        MMC_MODE_HS_52MHz | MMC_MODE_HS;
+
+       /*
+        * SSPCLK = 480 * 18 / 29 / 1 = 297.731 MHz
+        * SSP bit rate = SSPCLK / (CLOCK_DIVIDE * (1 + CLOCK_RATE)),
+        * CLOCK_DIVIDE has to be an even value from 2 to 254, and
+        * CLOCK_RATE could be any integer from 0 to 255.
+        */
+       mmc->f_min = 400000;
+       mmc->f_max = mxc_get_clock(MXC_SSP0_CLK + id) * 1000 / 2;
+       mmc->b_max = 0;
+
+       mmc_register(mmc);
+       return 0;
+}
index ebda980fbcbc4a2b4d2c6bdda7e3f068a3198d80..c38b9e603846d0a224ff4e7ef914c086af5df805 100644 (file)
@@ -36,8 +36,9 @@
 /* If we fail after 1 second wait, something is really bad */
 #define MAX_RETRY_MS   1000
 
-static int mmc_read_data(hsmmc_t *mmc_base, char *buf, unsigned int size);
-static int mmc_write_data(hsmmc_t *mmc_base, const char *buf, unsigned int siz);
+static int mmc_read_data(struct hsmmc *mmc_base, char *buf, unsigned int size);
+static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
+                       unsigned int siz);
 static struct mmc hsmmc_dev[2];
 
 #if defined(CONFIG_OMAP44XX) && defined(CONFIG_TWL6030_POWER)
@@ -97,7 +98,7 @@ unsigned char mmc_board_init(struct mmc *mmc)
        return 0;
 }
 
-void mmc_init_stream(hsmmc_t *mmc_base)
+void mmc_init_stream(struct hsmmc *mmc_base)
 {
        ulong start;
 
@@ -128,7 +129,7 @@ void mmc_init_stream(hsmmc_t *mmc_base)
 
 static int mmc_init_setup(struct mmc *mmc)
 {
-       hsmmc_t *mmc_base = (hsmmc_t *)mmc->priv;
+       struct hsmmc *mmc_base = (struct hsmmc *)mmc->priv;
        unsigned int reg_val;
        unsigned int dsor;
        ulong start;
@@ -192,7 +193,7 @@ static int mmc_init_setup(struct mmc *mmc)
 static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
                        struct mmc_data *data)
 {
-       hsmmc_t *mmc_base = (hsmmc_t *)mmc->priv;
+       struct hsmmc *mmc_base = (struct hsmmc *)mmc->priv;
        unsigned int flags, mmc_stat;
        ulong start;
 
@@ -305,7 +306,7 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
        return 0;
 }
 
-static int mmc_read_data(hsmmc_t *mmc_base, char *buf, unsigned int size)
+static int mmc_read_data(struct hsmmc *mmc_base, char *buf, unsigned int size)
 {
        unsigned int *output_buf = (unsigned int *)buf;
        unsigned int mmc_stat;
@@ -356,7 +357,8 @@ static int mmc_read_data(hsmmc_t *mmc_base, char *buf, unsigned int size)
        return 0;
 }
 
-static int mmc_write_data(hsmmc_t *mmc_base, const char *buf, unsigned int size)
+static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
+                               unsigned int size)
 {
        unsigned int *input_buf = (unsigned int *)buf;
        unsigned int mmc_stat;
@@ -409,7 +411,7 @@ static int mmc_write_data(hsmmc_t *mmc_base, const char *buf, unsigned int size)
 
 static void mmc_set_ios(struct mmc *mmc)
 {
-       hsmmc_t *mmc_base = (hsmmc_t *)mmc->priv;
+       struct hsmmc *mmc_base = (struct hsmmc *)mmc->priv;
        unsigned int dsor = 0;
        ulong start;
 
@@ -473,20 +475,20 @@ int omap_mmc_init(int dev_index)
 
        switch (dev_index) {
        case 0:
-               mmc->priv = (hsmmc_t *)OMAP_HSMMC1_BASE;
+               mmc->priv = (struct hsmmc *)OMAP_HSMMC1_BASE;
                break;
 #ifdef OMAP_HSMMC2_BASE
        case 1:
-               mmc->priv = (hsmmc_t *)OMAP_HSMMC2_BASE;
+               mmc->priv = (struct hsmmc *)OMAP_HSMMC2_BASE;
                break;
 #endif
 #ifdef OMAP_HSMMC3_BASE
        case 2:
-               mmc->priv = (hsmmc_t *)OMAP_HSMMC3_BASE;
+               mmc->priv = (struct hsmmc *)OMAP_HSMMC3_BASE;
                break;
 #endif
        default:
-               mmc->priv = (hsmmc_t *)OMAP_HSMMC1_BASE;
+               mmc->priv = (struct hsmmc *)OMAP_HSMMC1_BASE;
                return 1;
        }
        mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
index 3c2905c3c6d76ee3f77124e5b2d5d50eaa32851f..2b58a98ac38afeeed8281d3f155b97ea36a60949 100644 (file)
@@ -129,7 +129,7 @@ mmc_block_read(uchar * dst, uint32_t src, int len)
        writel(~MMC_I_MASK_RXFIFO_RD_REQ, MMC_I_MASK);
        while (len) {
                if (readl(MMC_I_REG) & MMC_I_REG_RXFIFO_RD_REQ) {
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
                        int i;
                        for (i = min(len, 32); i; i--) {
                                *dst++ = readb(MMC_RXFIFO);
@@ -560,7 +560,8 @@ mmc_legacy_init(int verbose)
        /* Reset device interface type */
        mmc_dev.if_type = IF_TYPE_UNKNOWN;
 
-#if defined (CONFIG_LUBBOCK) || (defined (CONFIG_GUMSTIX) && !defined(CONFIG_PXA27X))
+#if defined(CONFIG_LUBBOCK) || \
+       (defined(CONFIG_GUMSTIX) && !defined(CONFIG_CPU_PXA27X))
        set_GPIO_mode(GPIO6_MMCCLK_MD);
        set_GPIO_mode(GPIO8_MMCCS0_MD);
 #endif
@@ -633,7 +634,7 @@ mmc_legacy_init(int verbose)
        writel(0, MMC_CLKRT);           /* 20 MHz */
        resp = mmc_cmd(MMC_CMD_SELECT_CARD, rca, 0, MMC_CMDAT_R1);
 
-#if defined(CONFIG_PXA27X) || defined(CONFIG_CPU_MONAHANS)
+#if defined(CONFIG_CPU_PXA27X) || defined(CONFIG_CPU_MONAHANS)
        if (IF_TYPE_SD == mmc_dev.if_type) {
                resp = mmc_cmd(MMC_CMD_APP_CMD, rca, 0, MMC_CMDAT_R1);
                resp = mmc_cmd(SD_CMD_APP_SET_BUS_WIDTH, 0, 2, MMC_CMDAT_R1);
index 28e37b4fe1bcd99ca0a23634dd0e7d0bf136ca2e..4a7c67a6bda1cb44482c93e5ad8290672baf09a8 100644 (file)
 #include <asm/io.h>
 
 /* PXAMMC Generic default config for various CPUs */
-#if defined(CONFIG_PXA250)
+#if defined(CONFIG_CPU_PXA25X)
 #define PXAMMC_FIFO_SIZE       1
 #define PXAMMC_MIN_SPEED       312500
 #define PXAMMC_MAX_SPEED       20000000
 #define PXAMMC_HOST_CAPS       (0)
-#elif defined(CONFIG_PXA27X)
+#elif defined(CONFIG_CPU_PXA27X)
 #define PXAMMC_CRC_SKIP
 #define PXAMMC_FIFO_SIZE       32
 #define PXAMMC_MIN_SPEED       304000
index 78b11900ed12683337e5879f9ac3459cf21de52c..ccf48bbb17ca918f72513c1841c52f461a5623b9 100644 (file)
@@ -81,7 +81,8 @@ static void mmc_prepare_data(struct mmc_host *host, struct mmc_data *data)
         * 11 = Selects 64-bit Address ADMA2
         */
        ctrl = readb(&host->reg->hostctl);
-       ctrl &= ~(3 << 3);                      /* SDMA */
+       ctrl &= ~TEGRA_MMC_HOSTCTL_DMASEL_MASK;
+       ctrl |= TEGRA_MMC_HOSTCTL_DMASEL_SDMA;
        writeb(ctrl, &host->reg->hostctl);
 
        /* We do not handle DMA boundaries, so set it to max (512 KiB) */
@@ -103,43 +104,36 @@ static void mmc_set_transfer_mode(struct mmc_host *host, struct mmc_data *data)
         * ENBLKCNT[1]  : Block Count Enable
         * ENDMA[0]     : DMA Enable
         */
-       mode = (1 << 1) | (1 << 0);
+       mode = (TEGRA_MMC_TRNMOD_DMA_ENABLE |
+               TEGRA_MMC_TRNMOD_BLOCK_COUNT_ENABLE);
+
        if (data->blocks > 1)
-               mode |= (1 << 5);
+               mode |= TEGRA_MMC_TRNMOD_MULTI_BLOCK_SELECT;
+
        if (data->flags & MMC_DATA_READ)
-               mode |= (1 << 4);
+               mode |= TEGRA_MMC_TRNMOD_DATA_XFER_DIR_SEL_READ;
 
        writew(mode, &host->reg->trnmod);
 }
 
-static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
-                       struct mmc_data *data)
+static int mmc_wait_inhibit(struct mmc_host *host,
+                           struct mmc_cmd *cmd,
+                           struct mmc_data *data,
+                           unsigned int timeout)
 {
-       struct mmc_host *host = (struct mmc_host *)mmc->priv;
-       int flags, i;
-       unsigned int timeout;
-       unsigned int mask;
-       unsigned int retry = 0x100000;
-       debug(" mmc_send_cmd called\n");
-
-       /* Wait max 10 ms */
-       timeout = 10;
-
        /*
         * PRNSTS
-        * CMDINHDAT[1] : Command Inhibit (DAT)
-        * CMDINHCMD[0] : Command Inhibit (CMD)
+        * CMDINHDAT[1] : Command Inhibit (DAT)
+        * CMDINHCMD[0] : Command Inhibit (CMD)
         */
-       mask = (1 << 0);
-       if ((data != NULL) || (cmd->resp_type & MMC_RSP_BUSY))
-               mask |= (1 << 1);
+       unsigned int mask = TEGRA_MMC_PRNSTS_CMD_INHIBIT_CMD;
 
        /*
         * We shouldn't wait for data inhibit for stop commands, even
         * though they might use busy signaling
         */
-       if (data)
-               mask &= ~(1 << 1);
+       if ((data == NULL) && (cmd->resp_type & MMC_RSP_BUSY))
+               mask |= TEGRA_MMC_PRNSTS_CMD_INHIBIT_DAT;
 
        while (readl(&host->reg->prnsts) & mask) {
                if (timeout == 0) {
@@ -150,6 +144,24 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
                udelay(1000);
        }
 
+       return 0;
+}
+
+static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
+                       struct mmc_data *data)
+{
+       struct mmc_host *host = (struct mmc_host *)mmc->priv;
+       int flags, i;
+       int result;
+       unsigned int mask;
+       unsigned int retry = 0x100000;
+       debug(" mmc_send_cmd called\n");
+
+       result = mmc_wait_inhibit(host, cmd, data, 10 /* ms */);
+
+       if (result < 0)
+               return result;
+
        if (data)
                mmc_prepare_data(host, data);
 
@@ -175,20 +187,20 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
         *      11 = Length 48 Check busy after response
         */
        if (!(cmd->resp_type & MMC_RSP_PRESENT))
-               flags = 0;
+               flags = TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_NO_RESPONSE;
        else if (cmd->resp_type & MMC_RSP_136)
-               flags = (1 << 0);
+               flags = TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_LENGTH_136;
        else if (cmd->resp_type & MMC_RSP_BUSY)
-               flags = (3 << 0);
+               flags = TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_LENGTH_48_BUSY;
        else
-               flags = (2 << 0);
+               flags = TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_LENGTH_48;
 
        if (cmd->resp_type & MMC_RSP_CRC)
-               flags |= (1 << 3);
+               flags |= TEGRA_MMC_TRNMOD_CMD_CRC_CHECK;
        if (cmd->resp_type & MMC_RSP_OPCODE)
-               flags |= (1 << 4);
+               flags |= TEGRA_MMC_TRNMOD_CMD_INDEX_CHECK;
        if (data)
-               flags |= (1 << 5);
+               flags |= TEGRA_MMC_TRNMOD_DATA_PRESENT_SELECT_DATA_TRANSFER;
 
        debug("cmd: %d\n", cmd->cmdidx);
 
@@ -197,7 +209,7 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
        for (i = 0; i < retry; i++) {
                mask = readl(&host->reg->norintsts);
                /* Command Complete */
-               if (mask & (1 << 0)) {
+               if (mask & TEGRA_MMC_NORINTSTS_CMD_COMPLETE) {
                        if (!data)
                                writel(mask, &host->reg->norintsts);
                        break;
@@ -209,11 +221,11 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
                return TIMEOUT;
        }
 
-       if (mask & (1 << 16)) {
+       if (mask & TEGRA_MMC_NORINTSTS_CMD_TIMEOUT) {
                /* Timeout Error */
                debug("timeout: %08x cmd %d\n", mask, cmd->cmdidx);
                return TIMEOUT;
-       } else if (mask & (1 << 15)) {
+       } else if (mask & TEGRA_MMC_NORINTSTS_ERR_INTERRUPT) {
                /* Error Interrupt */
                debug("error: %08x cmd %d\n", mask, cmd->cmdidx);
                return -1;
@@ -256,23 +268,44 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
        }
 
        if (data) {
+               unsigned long   start = get_timer(0);
+
                while (1) {
                        mask = readl(&host->reg->norintsts);
 
-                       if (mask & (1 << 15)) {
+                       if (mask & TEGRA_MMC_NORINTSTS_ERR_INTERRUPT) {
                                /* Error Interrupt */
                                writel(mask, &host->reg->norintsts);
                                printf("%s: error during transfer: 0x%08x\n",
                                                __func__, mask);
                                return -1;
-                       } else if (mask & (1 << 3)) {
-                               /* DMA Interrupt */
+                       } else if (mask & TEGRA_MMC_NORINTSTS_DMA_INTERRUPT) {
+                               /*
+                                * DMA Interrupt, restart the transfer where
+                                * it was interrupted.
+                                */
+                               unsigned int address = readl(&host->reg->sysad);
+
                                debug("DMA end\n");
-                               break;
-                       } else if (mask & (1 << 1)) {
+                               writel(TEGRA_MMC_NORINTSTS_DMA_INTERRUPT,
+                                      &host->reg->norintsts);
+                               writel(address, &host->reg->sysad);
+                       } else if (mask & TEGRA_MMC_NORINTSTS_XFER_COMPLETE) {
                                /* Transfer Complete */
                                debug("r/w is done\n");
                                break;
+                       } else if (get_timer(start) > 2000UL) {
+                               writel(mask, &host->reg->norintsts);
+                               printf("%s: MMC Timeout\n"
+                                      "    Interrupt status        0x%08x\n"
+                                      "    Interrupt status enable 0x%08x\n"
+                                      "    Interrupt signal enable 0x%08x\n"
+                                      "    Present status          0x%08x\n",
+                                      __func__, mask,
+                                      readl(&host->reg->norintstsen),
+                                      readl(&host->reg->norintsigen),
+                                      readl(&host->reg->prnsts));
+                               return -1;
                        }
                }
                writel(mask, &host->reg->norintsts);
@@ -310,12 +343,14 @@ static void mmc_change_clock(struct mmc_host *host, uint clock)
         * ENINTCLK[0]          : Internal Clock Enable
         */
        div >>= 1;
-       clk = (div << 8) | (1 << 0);
+       clk = ((div << TEGRA_MMC_CLKCON_SDCLK_FREQ_SEL_SHIFT) |
+              TEGRA_MMC_CLKCON_INTERNAL_CLOCK_ENABLE);
        writew(clk, &host->reg->clkcon);
 
        /* Wait max 10 ms */
        timeout = 10;
-       while (!(readw(&host->reg->clkcon) & (1 << 1))) {
+       while (!(readw(&host->reg->clkcon) &
+                TEGRA_MMC_CLKCON_INTERNAL_CLOCK_STABLE)) {
                if (timeout == 0) {
                        printf("%s: timeout error\n", __func__);
                        return;
@@ -324,7 +359,7 @@ static void mmc_change_clock(struct mmc_host *host, uint clock)
                udelay(1000);
        }
 
-       clk |= (1 << 2);
+       clk |= TEGRA_MMC_CLKCON_SD_CLOCK_ENABLE;
        writew(clk, &host->reg->clkcon);
 
        debug("mmc_change_clock: clkcon = %08X\n", clk);
@@ -375,7 +410,7 @@ static void mmc_reset(struct mmc_host *host)
         * 1 = reset
         * 0 = work
         */
-       writeb((1 << 0), &host->reg->swrst);
+       writeb(TEGRA_MMC_SWRST_SW_RESET_FOR_ALL, &host->reg->swrst);
 
        host->clock = 0;
 
@@ -383,7 +418,7 @@ static void mmc_reset(struct mmc_host *host)
        timeout = 100;
 
        /* hw clears the bit when it's done */
-       while (readb(&host->reg->swrst) & (1 << 0)) {
+       while (readb(&host->reg->swrst) & TEGRA_MMC_SWRST_SW_RESET_FOR_ALL) {
                if (timeout == 0) {
                        printf("%s: timeout error\n", __func__);
                        return;
@@ -413,12 +448,17 @@ static int mmc_core_init(struct mmc *mmc)
         * NORMAL Interrupt Status Enable Register init
         * [5] ENSTABUFRDRDY : Buffer Read Ready Status Enable
         * [4] ENSTABUFWTRDY : Buffer write Ready Status Enable
+        * [3] ENSTADMAINT   : DMA boundary interrupt
         * [1] ENSTASTANSCMPLT : Transfre Complete Status Enable
         * [0] ENSTACMDCMPLT : Command Complete Status Enable
        */
        mask = readl(&host->reg->norintstsen);
        mask &= ~(0xffff);
-       mask |= (1 << 5) | (1 << 4) | (1 << 1) | (1 << 0);
+       mask |= (TEGRA_MMC_NORINTSTSEN_CMD_COMPLETE |
+                TEGRA_MMC_NORINTSTSEN_XFER_COMPLETE |
+                TEGRA_MMC_NORINTSTSEN_DMA_INTERRUPT |
+                TEGRA_MMC_NORINTSTSEN_BUFFER_WRITE_READY |
+                TEGRA_MMC_NORINTSTSEN_BUFFER_READ_READY);
        writel(mask, &host->reg->norintstsen);
 
        /*
@@ -427,7 +467,7 @@ static int mmc_core_init(struct mmc *mmc)
         */
        mask = readl(&host->reg->norintsigen);
        mask &= ~(0xffff);
-       mask |= (1 << 1);
+       mask |= TEGRA_MMC_NORINTSIGEN_XFER_COMPLETE;
        writel(mask, &host->reg->norintsigen);
 
        return 0;
index 28698e0fc0a29ed9b86218119d3449d2744507e7..671583c42219af4df4848c27fc09d4ba521c1e18 100644 (file)
@@ -68,6 +68,55 @@ struct tegra2_mmc {
        unsigned char   res6[0x100];    /* RESERVED, offset 100h-1FFh */
 };
 
+#define TEGRA_MMC_HOSTCTL_DMASEL_MASK                          (3 << 3)
+#define TEGRA_MMC_HOSTCTL_DMASEL_SDMA                          (0 << 3)
+#define TEGRA_MMC_HOSTCTL_DMASEL_ADMA2_32BIT                   (2 << 3)
+#define TEGRA_MMC_HOSTCTL_DMASEL_ADMA2_64BIT                   (3 << 3)
+
+#define TEGRA_MMC_TRNMOD_DMA_ENABLE                            (1 << 0)
+#define TEGRA_MMC_TRNMOD_BLOCK_COUNT_ENABLE                    (1 << 1)
+#define TEGRA_MMC_TRNMOD_DATA_XFER_DIR_SEL_WRITE               (0 << 4)
+#define TEGRA_MMC_TRNMOD_DATA_XFER_DIR_SEL_READ                        (1 << 4)
+#define TEGRA_MMC_TRNMOD_MULTI_BLOCK_SELECT                    (1 << 5)
+
+#define TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_MASK                 (3 << 0)
+#define TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_NO_RESPONSE          (0 << 0)
+#define TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_LENGTH_136           (1 << 0)
+#define TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_LENGTH_48            (2 << 0)
+#define TEGRA_MMC_CMDREG_RESP_TYPE_SELECT_LENGTH_48_BUSY       (3 << 0)
+
+#define TEGRA_MMC_TRNMOD_CMD_CRC_CHECK                         (1 << 3)
+#define TEGRA_MMC_TRNMOD_CMD_INDEX_CHECK                       (1 << 4)
+#define TEGRA_MMC_TRNMOD_DATA_PRESENT_SELECT_DATA_TRANSFER     (1 << 5)
+
+#define TEGRA_MMC_PRNSTS_CMD_INHIBIT_CMD                       (1 << 0)
+#define TEGRA_MMC_PRNSTS_CMD_INHIBIT_DAT                       (1 << 1)
+
+#define TEGRA_MMC_CLKCON_INTERNAL_CLOCK_ENABLE                 (1 << 0)
+#define TEGRA_MMC_CLKCON_INTERNAL_CLOCK_STABLE                 (1 << 1)
+#define TEGRA_MMC_CLKCON_SD_CLOCK_ENABLE                       (1 << 2)
+
+#define TEGRA_MMC_CLKCON_SDCLK_FREQ_SEL_SHIFT                  8
+#define TEGRA_MMC_CLKCON_SDCLK_FREQ_SEL_MASK                   (0xff << 8)
+
+#define TEGRA_MMC_SWRST_SW_RESET_FOR_ALL                       (1 << 0)
+#define TEGRA_MMC_SWRST_SW_RESET_FOR_CMD_LINE                  (1 << 1)
+#define TEGRA_MMC_SWRST_SW_RESET_FOR_DAT_LINE                  (1 << 2)
+
+#define TEGRA_MMC_NORINTSTS_CMD_COMPLETE                       (1 << 0)
+#define TEGRA_MMC_NORINTSTS_XFER_COMPLETE                      (1 << 1)
+#define TEGRA_MMC_NORINTSTS_DMA_INTERRUPT                      (1 << 3)
+#define TEGRA_MMC_NORINTSTS_ERR_INTERRUPT                      (1 << 15)
+#define TEGRA_MMC_NORINTSTS_CMD_TIMEOUT                                (1 << 16)
+
+#define TEGRA_MMC_NORINTSTSEN_CMD_COMPLETE                     (1 << 0)
+#define TEGRA_MMC_NORINTSTSEN_XFER_COMPLETE                    (1 << 1)
+#define TEGRA_MMC_NORINTSTSEN_DMA_INTERRUPT                    (1 << 3)
+#define TEGRA_MMC_NORINTSTSEN_BUFFER_WRITE_READY               (1 << 4)
+#define TEGRA_MMC_NORINTSTSEN_BUFFER_READ_READY                        (1 << 5)
+
+#define TEGRA_MMC_NORINTSIGEN_XFER_COMPLETE                    (1 << 1)
+
 struct mmc_host {
        struct tegra2_mmc *reg;
        unsigned int version;   /* SDHCI spec. version */
index 96cd395e71a7ad30ab230cc1b56f040e3bcc0e7c..981ccd5b4b1ce697ef26d884d0e90bf6d1ad0a84 100644 (file)
@@ -39,7 +39,6 @@ int AT91F_DataflashInit (void)
        int i, j;
        int dfcode;
        int part;
-       int last_part;
        int found[CONFIG_SYS_MAX_DATAFLASH_BANKS];
        unsigned char protected;
 
@@ -136,7 +135,6 @@ int AT91F_DataflashInit (void)
                                dataflash_info[i].Device.pages_size) - 1;
 
                part = 0;
-               last_part = 0;
                /* set the area addresses */
                for(j = 0; j < NB_DATAFLASH_AREA; j++) {
                        if(found[i]!=0) {
@@ -147,7 +145,6 @@ int AT91F_DataflashInit (void)
                                        dataflash_info[i].Device.area_list[j].end =
                                                dataflash_info[i].end_address +
                                                dataflash_info[i].logical_address;
-                                       last_part = 1;
                                } else {
                                        dataflash_info[i].Device.area_list[j].end =
                                                area_list[part].end +
index 28bd3507dc996caf5f03d8f1895df0522d34da52..36ee454304351358dcddd36b756f4d87654c3dc1 100644 (file)
@@ -54,6 +54,7 @@ COBJS-$(CONFIG_NAND_KIRKWOOD) += kirkwood_nand.o
 COBJS-$(CONFIG_NAND_KMETER1) += kmeter1_nand.o
 COBJS-$(CONFIG_NAND_MPC5121_NFC) += mpc5121_nfc.o
 COBJS-$(CONFIG_NAND_MXC) += mxc_nand.o
+COBJS-$(CONFIG_NAND_MXS) += mxs_nand.o
 COBJS-$(CONFIG_NAND_NDFC) += ndfc.o
 COBJS-$(CONFIG_NAND_NOMADIK) += nomadik.o
 COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o
index 818d3624a7eb6134c9fba8b5decaaeea1f8edfe9..de663824fe5da9413b16c4b32ffd1c36633448aa 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * (C) Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
diff --git a/drivers/mtd/nand/mxs_nand.c b/drivers/mtd/nand/mxs_nand.c
new file mode 100644 (file)
index 0000000..ce2a326
--- /dev/null
@@ -0,0 +1,1118 @@
+/*
+ * Freescale i.MX28 NAND flash driver
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Freescale GPMI NFC NAND Flash Driver
+ *
+ * Copyright (C) 2010 Freescale Semiconductor, Inc.
+ * Copyright (C) 2008 Embedded Alley Solutions, 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/nand.h>
+#include <linux/types.h>
+#include <common.h>
+#include <malloc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/dma.h>
+
+#define        MXS_NAND_DMA_DESCRIPTOR_COUNT           4
+
+#define        MXS_NAND_CHUNK_DATA_CHUNK_SIZE          512
+#define        MXS_NAND_METADATA_SIZE                  10
+
+#define        MXS_NAND_COMMAND_BUFFER_SIZE            32
+
+#define        MXS_NAND_BCH_TIMEOUT                    10000
+
+struct mxs_nand_info {
+       int             cur_chip;
+
+       uint32_t        cmd_queue_len;
+
+       uint8_t         *cmd_buf;
+       uint8_t         *data_buf;
+       uint8_t         *oob_buf;
+
+       uint8_t         marking_block_bad;
+       uint8_t         raw_oob_mode;
+
+       /* Functions with altered behaviour */
+       int             (*hooked_read_oob)(struct mtd_info *mtd,
+                               loff_t from, struct mtd_oob_ops *ops);
+       int             (*hooked_write_oob)(struct mtd_info *mtd,
+                               loff_t to, struct mtd_oob_ops *ops);
+       int             (*hooked_block_markbad)(struct mtd_info *mtd,
+                               loff_t ofs);
+
+       /* DMA descriptors */
+       struct mxs_dma_desc     **desc;
+       uint32_t                desc_index;
+};
+
+struct nand_ecclayout fake_ecc_layout;
+
+static struct mxs_dma_desc *mxs_nand_get_dma_desc(struct mxs_nand_info *info)
+{
+       struct mxs_dma_desc *desc;
+
+       if (info->desc_index >= MXS_NAND_DMA_DESCRIPTOR_COUNT) {
+               printf("MXS NAND: Too many DMA descriptors requested\n");
+               return NULL;
+       }
+
+       desc = info->desc[info->desc_index];
+       info->desc_index++;
+
+       return desc;
+}
+
+static void mxs_nand_return_dma_descs(struct mxs_nand_info *info)
+{
+       int i;
+       struct mxs_dma_desc *desc;
+
+       for (i = 0; i < info->desc_index; i++) {
+               desc = info->desc[i];
+               memset(desc, 0, sizeof(struct mxs_dma_desc));
+               desc->address = (dma_addr_t)desc;
+       }
+
+       info->desc_index = 0;
+}
+
+static uint32_t mxs_nand_ecc_chunk_cnt(uint32_t page_data_size)
+{
+       return page_data_size / MXS_NAND_CHUNK_DATA_CHUNK_SIZE;
+}
+
+static uint32_t mxs_nand_ecc_size_in_bits(uint32_t ecc_strength)
+{
+       return ecc_strength * 13;
+}
+
+static uint32_t mxs_nand_aux_status_offset(void)
+{
+       return (MXS_NAND_METADATA_SIZE + 0x3) & ~0x3;
+}
+
+static inline uint32_t mxs_nand_get_ecc_strength(uint32_t page_data_size,
+                                               uint32_t page_oob_size)
+{
+       if (page_data_size == 2048)
+               return 8;
+
+       if (page_data_size == 4096) {
+               if (page_oob_size == 128)
+                       return 8;
+
+               if (page_oob_size == 218)
+                       return 16;
+       }
+
+       return 0;
+}
+
+static inline uint32_t mxs_nand_get_mark_offset(uint32_t page_data_size,
+                                               uint32_t ecc_strength)
+{
+       uint32_t chunk_data_size_in_bits;
+       uint32_t chunk_ecc_size_in_bits;
+       uint32_t chunk_total_size_in_bits;
+       uint32_t block_mark_chunk_number;
+       uint32_t block_mark_chunk_bit_offset;
+       uint32_t block_mark_bit_offset;
+
+       chunk_data_size_in_bits = MXS_NAND_CHUNK_DATA_CHUNK_SIZE * 8;
+       chunk_ecc_size_in_bits  = mxs_nand_ecc_size_in_bits(ecc_strength);
+
+       chunk_total_size_in_bits =
+                       chunk_data_size_in_bits + chunk_ecc_size_in_bits;
+
+       /* Compute the bit offset of the block mark within the physical page. */
+       block_mark_bit_offset = page_data_size * 8;
+
+       /* Subtract the metadata bits. */
+       block_mark_bit_offset -= MXS_NAND_METADATA_SIZE * 8;
+
+       /*
+        * Compute the chunk number (starting at zero) in which the block mark
+        * appears.
+        */
+       block_mark_chunk_number =
+                       block_mark_bit_offset / chunk_total_size_in_bits;
+
+       /*
+        * Compute the bit offset of the block mark within its chunk, and
+        * validate it.
+        */
+       block_mark_chunk_bit_offset = block_mark_bit_offset -
+                       (block_mark_chunk_number * chunk_total_size_in_bits);
+
+       if (block_mark_chunk_bit_offset > chunk_data_size_in_bits)
+               return 1;
+
+       /*
+        * Now that we know the chunk number in which the block mark appears,
+        * we can subtract all the ECC bits that appear before it.
+        */
+       block_mark_bit_offset -=
+               block_mark_chunk_number * chunk_ecc_size_in_bits;
+
+       return block_mark_bit_offset;
+}
+
+static uint32_t mxs_nand_mark_byte_offset(struct mtd_info *mtd)
+{
+       uint32_t ecc_strength;
+       ecc_strength = mxs_nand_get_ecc_strength(mtd->writesize, mtd->oobsize);
+       return mxs_nand_get_mark_offset(mtd->writesize, ecc_strength) >> 3;
+}
+
+static uint32_t mxs_nand_mark_bit_offset(struct mtd_info *mtd)
+{
+       uint32_t ecc_strength;
+       ecc_strength = mxs_nand_get_ecc_strength(mtd->writesize, mtd->oobsize);
+       return mxs_nand_get_mark_offset(mtd->writesize, ecc_strength) & 0x7;
+}
+
+/*
+ * Wait for BCH complete IRQ and clear the IRQ
+ */
+static int mxs_nand_wait_for_bch_complete(void)
+{
+       struct mx28_bch_regs *bch_regs = (struct mx28_bch_regs *)MXS_BCH_BASE;
+       int timeout = MXS_NAND_BCH_TIMEOUT;
+       int ret;
+
+       ret = mx28_wait_mask_set(&bch_regs->hw_bch_ctrl_reg,
+               BCH_CTRL_COMPLETE_IRQ, timeout);
+
+       writel(BCH_CTRL_COMPLETE_IRQ, &bch_regs->hw_bch_ctrl_clr);
+
+       return ret;
+}
+
+/*
+ * This is the function that we install in the cmd_ctrl function pointer of the
+ * owning struct nand_chip. The only functions in the reference implementation
+ * that use these functions pointers are cmdfunc and select_chip.
+ *
+ * In this driver, we implement our own select_chip, so this function will only
+ * be called by the reference implementation's cmdfunc. For this reason, we can
+ * ignore the chip enable bit and concentrate only on sending bytes to the NAND
+ * Flash.
+ */
+static void mxs_nand_cmd_ctrl(struct mtd_info *mtd, int data, unsigned int ctrl)
+{
+       struct nand_chip *nand = mtd->priv;
+       struct mxs_nand_info *nand_info = nand->priv;
+       struct mxs_dma_desc *d;
+       uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip;
+       int ret;
+
+       /*
+        * If this condition is true, something is _VERY_ wrong in MTD
+        * subsystem!
+        */
+       if (nand_info->cmd_queue_len == MXS_NAND_COMMAND_BUFFER_SIZE) {
+               printf("MXS NAND: Command queue too long\n");
+               return;
+       }
+
+       /*
+        * Every operation begins with a command byte and a series of zero or
+        * more address bytes. These are distinguished by either the Address
+        * Latch Enable (ALE) or Command Latch Enable (CLE) signals being
+        * asserted. When MTD is ready to execute the command, it will
+        * deasert both latch enables.
+        *
+        * Rather than run a separate DMA operation for every single byte, we
+        * queue them up and run a single DMA operation for the entire series
+        * of command and data bytes.
+        */
+       if (ctrl & (NAND_ALE | NAND_CLE)) {
+               if (data != NAND_CMD_NONE)
+                       nand_info->cmd_buf[nand_info->cmd_queue_len++] = data;
+               return;
+       }
+
+       /*
+        * If control arrives here, MTD has deasserted both the ALE and CLE,
+        * which means it's ready to run an operation. Check if we have any
+        * bytes to send.
+        */
+       if (nand_info->cmd_queue_len == 0)
+               return;
+
+       /* Compile the DMA descriptor -- a descriptor that sends command. */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_DMA_READ | MXS_DMA_DESC_IRQ |
+               MXS_DMA_DESC_CHAIN | MXS_DMA_DESC_DEC_SEM |
+               MXS_DMA_DESC_WAIT4END | (3 << MXS_DMA_DESC_PIO_WORDS_OFFSET) |
+               (nand_info->cmd_queue_len << MXS_DMA_DESC_BYTES_OFFSET);
+
+       d->cmd.address = (dma_addr_t)nand_info->cmd_buf;
+
+       d->cmd.pio_words[0] =
+               GPMI_CTRL0_COMMAND_MODE_WRITE |
+               GPMI_CTRL0_WORD_LENGTH |
+               (nand_info->cur_chip << GPMI_CTRL0_CS_OFFSET) |
+               GPMI_CTRL0_ADDRESS_NAND_CLE |
+               GPMI_CTRL0_ADDRESS_INCREMENT |
+               nand_info->cmd_queue_len;
+
+       mxs_dma_desc_append(channel, d);
+
+       /* Execute the DMA chain. */
+       ret = mxs_dma_go(channel);
+       if (ret)
+               printf("MXS NAND: Error sending command\n");
+
+       mxs_nand_return_dma_descs(nand_info);
+
+       /* Reset the command queue. */
+       nand_info->cmd_queue_len = 0;
+}
+
+/*
+ * Test if the NAND flash is ready.
+ */
+static int mxs_nand_device_ready(struct mtd_info *mtd)
+{
+       struct nand_chip *chip = mtd->priv;
+       struct mxs_nand_info *nand_info = chip->priv;
+       struct mx28_gpmi_regs *gpmi_regs =
+               (struct mx28_gpmi_regs *)MXS_GPMI_BASE;
+       uint32_t tmp;
+
+       tmp = readl(&gpmi_regs->hw_gpmi_stat);
+       tmp >>= (GPMI_STAT_READY_BUSY_OFFSET + nand_info->cur_chip);
+
+       return tmp & 1;
+}
+
+/*
+ * Select the NAND chip.
+ */
+static void mxs_nand_select_chip(struct mtd_info *mtd, int chip)
+{
+       struct nand_chip *nand = mtd->priv;
+       struct mxs_nand_info *nand_info = nand->priv;
+
+       nand_info->cur_chip = chip;
+}
+
+/*
+ * Handle block mark swapping.
+ *
+ * Note that, when this function is called, it doesn't know whether it's
+ * swapping the block mark, or swapping it *back* -- but it doesn't matter
+ * because the the operation is the same.
+ */
+static void mxs_nand_swap_block_mark(struct mtd_info *mtd,
+                                       uint8_t *data_buf, uint8_t *oob_buf)
+{
+       uint32_t bit_offset;
+       uint32_t buf_offset;
+
+       uint32_t src;
+       uint32_t dst;
+
+       bit_offset = mxs_nand_mark_bit_offset(mtd);
+       buf_offset = mxs_nand_mark_byte_offset(mtd);
+
+       /*
+        * Get the byte from the data area that overlays the block mark. Since
+        * the ECC engine applies its own view to the bits in the page, the
+        * physical block mark won't (in general) appear on a byte boundary in
+        * the data.
+        */
+       src = data_buf[buf_offset] >> bit_offset;
+       src |= data_buf[buf_offset + 1] << (8 - bit_offset);
+
+       dst = oob_buf[0];
+
+       oob_buf[0] = src;
+
+       data_buf[buf_offset] &= ~(0xff << bit_offset);
+       data_buf[buf_offset + 1] &= 0xff << bit_offset;
+
+       data_buf[buf_offset] |= dst << bit_offset;
+       data_buf[buf_offset + 1] |= dst >> (8 - bit_offset);
+}
+
+/*
+ * Read data from NAND.
+ */
+static void mxs_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int length)
+{
+       struct nand_chip *nand = mtd->priv;
+       struct mxs_nand_info *nand_info = nand->priv;
+       struct mxs_dma_desc *d;
+       uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip;
+       int ret;
+
+       if (length > NAND_MAX_PAGESIZE) {
+               printf("MXS NAND: DMA buffer too big\n");
+               return;
+       }
+
+       if (!buf) {
+               printf("MXS NAND: DMA buffer is NULL\n");
+               return;
+       }
+
+       /* Compile the DMA descriptor - a descriptor that reads data. */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_DMA_WRITE | MXS_DMA_DESC_IRQ |
+               MXS_DMA_DESC_DEC_SEM | MXS_DMA_DESC_WAIT4END |
+               (1 << MXS_DMA_DESC_PIO_WORDS_OFFSET) |
+               (length << MXS_DMA_DESC_BYTES_OFFSET);
+
+       d->cmd.address = (dma_addr_t)nand_info->data_buf;
+
+       d->cmd.pio_words[0] =
+               GPMI_CTRL0_COMMAND_MODE_READ |
+               GPMI_CTRL0_WORD_LENGTH |
+               (nand_info->cur_chip << GPMI_CTRL0_CS_OFFSET) |
+               GPMI_CTRL0_ADDRESS_NAND_DATA |
+               length;
+
+       mxs_dma_desc_append(channel, d);
+
+       /*
+        * A DMA descriptor that waits for the command to end and the chip to
+        * become ready.
+        *
+        * I think we actually should *not* be waiting for the chip to become
+        * ready because, after all, we don't care. I think the original code
+        * did that and no one has re-thought it yet.
+        */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_IRQ |
+               MXS_DMA_DESC_NAND_WAIT_4_READY | MXS_DMA_DESC_DEC_SEM |
+               MXS_DMA_DESC_WAIT4END | (4 << MXS_DMA_DESC_PIO_WORDS_OFFSET);
+
+       d->cmd.address = 0;
+
+       d->cmd.pio_words[0] =
+               GPMI_CTRL0_COMMAND_MODE_WAIT_FOR_READY |
+               GPMI_CTRL0_WORD_LENGTH |
+               (nand_info->cur_chip << GPMI_CTRL0_CS_OFFSET) |
+               GPMI_CTRL0_ADDRESS_NAND_DATA;
+
+       mxs_dma_desc_append(channel, d);
+
+       /* Execute the DMA chain. */
+       ret = mxs_dma_go(channel);
+       if (ret) {
+               printf("MXS NAND: DMA read error\n");
+               goto rtn;
+       }
+
+       memcpy(buf, nand_info->data_buf, length);
+
+rtn:
+       mxs_nand_return_dma_descs(nand_info);
+}
+
+/*
+ * Write data to NAND.
+ */
+static void mxs_nand_write_buf(struct mtd_info *mtd, const uint8_t *buf,
+                               int length)
+{
+       struct nand_chip *nand = mtd->priv;
+       struct mxs_nand_info *nand_info = nand->priv;
+       struct mxs_dma_desc *d;
+       uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip;
+       int ret;
+
+       if (length > NAND_MAX_PAGESIZE) {
+               printf("MXS NAND: DMA buffer too big\n");
+               return;
+       }
+
+       if (!buf) {
+               printf("MXS NAND: DMA buffer is NULL\n");
+               return;
+       }
+
+       memcpy(nand_info->data_buf, buf, length);
+
+       /* Compile the DMA descriptor - a descriptor that writes data. */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_DMA_READ | MXS_DMA_DESC_IRQ |
+               MXS_DMA_DESC_DEC_SEM | MXS_DMA_DESC_WAIT4END |
+               (4 << MXS_DMA_DESC_PIO_WORDS_OFFSET) |
+               (length << MXS_DMA_DESC_BYTES_OFFSET);
+
+       d->cmd.address = (dma_addr_t)nand_info->data_buf;
+
+       d->cmd.pio_words[0] =
+               GPMI_CTRL0_COMMAND_MODE_WRITE |
+               GPMI_CTRL0_WORD_LENGTH |
+               (nand_info->cur_chip << GPMI_CTRL0_CS_OFFSET) |
+               GPMI_CTRL0_ADDRESS_NAND_DATA |
+               length;
+
+       mxs_dma_desc_append(channel, d);
+
+       /* Execute the DMA chain. */
+       ret = mxs_dma_go(channel);
+       if (ret)
+               printf("MXS NAND: DMA write error\n");
+
+       mxs_nand_return_dma_descs(nand_info);
+}
+
+/*
+ * Read a single byte from NAND.
+ */
+static uint8_t mxs_nand_read_byte(struct mtd_info *mtd)
+{
+       uint8_t buf;
+       mxs_nand_read_buf(mtd, &buf, 1);
+       return buf;
+}
+
+/*
+ * Read a page from NAND.
+ */
+static int mxs_nand_ecc_read_page(struct mtd_info *mtd, struct nand_chip *nand,
+                                       uint8_t *buf, int page)
+{
+       struct mxs_nand_info *nand_info = nand->priv;
+       struct mxs_dma_desc *d;
+       uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip;
+       uint32_t corrected = 0, failed = 0;
+       uint8_t *status;
+       int i, ret;
+
+       /* Compile the DMA descriptor - wait for ready. */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_CHAIN |
+               MXS_DMA_DESC_NAND_WAIT_4_READY | MXS_DMA_DESC_WAIT4END |
+               (1 << MXS_DMA_DESC_PIO_WORDS_OFFSET);
+
+       d->cmd.address = 0;
+
+       d->cmd.pio_words[0] =
+               GPMI_CTRL0_COMMAND_MODE_WAIT_FOR_READY |
+               GPMI_CTRL0_WORD_LENGTH |
+               (nand_info->cur_chip << GPMI_CTRL0_CS_OFFSET) |
+               GPMI_CTRL0_ADDRESS_NAND_DATA;
+
+       mxs_dma_desc_append(channel, d);
+
+       /* Compile the DMA descriptor - enable the BCH block and read. */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_CHAIN |
+               MXS_DMA_DESC_WAIT4END | (6 << MXS_DMA_DESC_PIO_WORDS_OFFSET);
+
+       d->cmd.address = 0;
+
+       d->cmd.pio_words[0] =
+               GPMI_CTRL0_COMMAND_MODE_READ |
+               GPMI_CTRL0_WORD_LENGTH |
+               (nand_info->cur_chip << GPMI_CTRL0_CS_OFFSET) |
+               GPMI_CTRL0_ADDRESS_NAND_DATA |
+               (mtd->writesize + mtd->oobsize);
+       d->cmd.pio_words[1] = 0;
+       d->cmd.pio_words[2] =
+               GPMI_ECCCTRL_ENABLE_ECC |
+               GPMI_ECCCTRL_ECC_CMD_DECODE |
+               GPMI_ECCCTRL_BUFFER_MASK_BCH_PAGE;
+       d->cmd.pio_words[3] = mtd->writesize + mtd->oobsize;
+       d->cmd.pio_words[4] = (dma_addr_t)nand_info->data_buf;
+       d->cmd.pio_words[5] = (dma_addr_t)nand_info->oob_buf;
+
+       mxs_dma_desc_append(channel, d);
+
+       /* Compile the DMA descriptor - disable the BCH block. */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_CHAIN |
+               MXS_DMA_DESC_NAND_WAIT_4_READY | MXS_DMA_DESC_WAIT4END |
+               (3 << MXS_DMA_DESC_PIO_WORDS_OFFSET);
+
+       d->cmd.address = 0;
+
+       d->cmd.pio_words[0] =
+               GPMI_CTRL0_COMMAND_MODE_WAIT_FOR_READY |
+               GPMI_CTRL0_WORD_LENGTH |
+               (nand_info->cur_chip << GPMI_CTRL0_CS_OFFSET) |
+               GPMI_CTRL0_ADDRESS_NAND_DATA |
+               (mtd->writesize + mtd->oobsize);
+       d->cmd.pio_words[1] = 0;
+       d->cmd.pio_words[2] = 0;
+
+       mxs_dma_desc_append(channel, d);
+
+       /* Compile the DMA descriptor - deassert the NAND lock and interrupt. */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_IRQ |
+               MXS_DMA_DESC_DEC_SEM;
+
+       d->cmd.address = 0;
+
+       mxs_dma_desc_append(channel, d);
+
+       /* Execute the DMA chain. */
+       ret = mxs_dma_go(channel);
+       if (ret) {
+               printf("MXS NAND: DMA read error\n");
+               goto rtn;
+       }
+
+       ret = mxs_nand_wait_for_bch_complete();
+       if (ret) {
+               printf("MXS NAND: BCH read timeout\n");
+               goto rtn;
+       }
+
+       /* Read DMA completed, now do the mark swapping. */
+       mxs_nand_swap_block_mark(mtd, nand_info->data_buf, nand_info->oob_buf);
+
+       /* Loop over status bytes, accumulating ECC status. */
+       status = nand_info->oob_buf + mxs_nand_aux_status_offset();
+       for (i = 0; i < mxs_nand_ecc_chunk_cnt(mtd->writesize); i++) {
+               if (status[i] == 0x00)
+                       continue;
+
+               if (status[i] == 0xff)
+                       continue;
+
+               if (status[i] == 0xfe) {
+                       failed++;
+                       continue;
+               }
+
+               corrected += status[i];
+       }
+
+       /* Propagate ECC status to the owning MTD. */
+       mtd->ecc_stats.failed += failed;
+       mtd->ecc_stats.corrected += corrected;
+
+       /*
+        * It's time to deliver the OOB bytes. See mxs_nand_ecc_read_oob() for
+        * details about our policy for delivering the OOB.
+        *
+        * We fill the caller's buffer with set bits, and then copy the block
+        * mark to the caller's buffer. Note that, if block mark swapping was
+        * necessary, it has already been done, so we can rely on the first
+        * byte of the auxiliary buffer to contain the block mark.
+        */
+       memset(nand->oob_poi, 0xff, mtd->oobsize);
+
+       nand->oob_poi[0] = nand_info->oob_buf[0];
+
+       memcpy(buf, nand_info->data_buf, mtd->writesize);
+
+rtn:
+       mxs_nand_return_dma_descs(nand_info);
+
+       return ret;
+}
+
+/*
+ * Write a page to NAND.
+ */
+static void mxs_nand_ecc_write_page(struct mtd_info *mtd,
+                               struct nand_chip *nand, const uint8_t *buf)
+{
+       struct mxs_nand_info *nand_info = nand->priv;
+       struct mxs_dma_desc *d;
+       uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip;
+       int ret;
+
+       memcpy(nand_info->data_buf, buf, mtd->writesize);
+       memcpy(nand_info->oob_buf, nand->oob_poi, mtd->oobsize);
+
+       /* Handle block mark swapping. */
+       mxs_nand_swap_block_mark(mtd, nand_info->data_buf, nand_info->oob_buf);
+
+       /* Compile the DMA descriptor - write data. */
+       d = mxs_nand_get_dma_desc(nand_info);
+       d->cmd.data =
+               MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_IRQ |
+               MXS_DMA_DESC_DEC_SEM | MXS_DMA_DESC_WAIT4END |
+               (6 << MXS_DMA_DESC_PIO_WORDS_OFFSET);
+
+       d->cmd.address = 0;
+
+       d->cmd.pio_words[0] =
+               GPMI_CTRL0_COMMAND_MODE_WRITE |
+               GPMI_CTRL0_WORD_LENGTH |
+               (nand_info->cur_chip << GPMI_CTRL0_CS_OFFSET) |
+               GPMI_CTRL0_ADDRESS_NAND_DATA;
+       d->cmd.pio_words[1] = 0;
+       d->cmd.pio_words[2] =
+               GPMI_ECCCTRL_ENABLE_ECC |
+               GPMI_ECCCTRL_ECC_CMD_ENCODE |
+               GPMI_ECCCTRL_BUFFER_MASK_BCH_PAGE;
+       d->cmd.pio_words[3] = (mtd->writesize + mtd->oobsize);
+       d->cmd.pio_words[4] = (dma_addr_t)nand_info->data_buf;
+       d->cmd.pio_words[5] = (dma_addr_t)nand_info->oob_buf;
+
+       mxs_dma_desc_append(channel, d);
+
+       /* Execute the DMA chain. */
+       ret = mxs_dma_go(channel);
+       if (ret) {
+               printf("MXS NAND: DMA write error\n");
+               goto rtn;
+       }
+
+       ret = mxs_nand_wait_for_bch_complete();
+       if (ret) {
+               printf("MXS NAND: BCH write timeout\n");
+               goto rtn;
+       }
+
+rtn:
+       mxs_nand_return_dma_descs(nand_info);
+}
+
+/*
+ * Read OOB from NAND.
+ *
+ * This function is a veneer that replaces the function originally installed by
+ * the NAND Flash MTD code.
+ */
+static int mxs_nand_hook_read_oob(struct mtd_info *mtd, loff_t from,
+                                       struct mtd_oob_ops *ops)
+{
+       struct nand_chip *chip = mtd->priv;
+       struct mxs_nand_info *nand_info = chip->priv;
+       int ret;
+
+       if (ops->mode == MTD_OOB_RAW)
+               nand_info->raw_oob_mode = 1;
+       else
+               nand_info->raw_oob_mode = 0;
+
+       ret = nand_info->hooked_read_oob(mtd, from, ops);
+
+       nand_info->raw_oob_mode = 0;
+
+       return ret;
+}
+
+/*
+ * Write OOB to NAND.
+ *
+ * This function is a veneer that replaces the function originally installed by
+ * the NAND Flash MTD code.
+ */
+static int mxs_nand_hook_write_oob(struct mtd_info *mtd, loff_t to,
+                                       struct mtd_oob_ops *ops)
+{
+       struct nand_chip *chip = mtd->priv;
+       struct mxs_nand_info *nand_info = chip->priv;
+       int ret;
+
+       if (ops->mode == MTD_OOB_RAW)
+               nand_info->raw_oob_mode = 1;
+       else
+               nand_info->raw_oob_mode = 0;
+
+       ret = nand_info->hooked_write_oob(mtd, to, ops);
+
+       nand_info->raw_oob_mode = 0;
+
+       return ret;
+}
+
+/*
+ * Mark a block bad in NAND.
+ *
+ * This function is a veneer that replaces the function originally installed by
+ * the NAND Flash MTD code.
+ */
+static int mxs_nand_hook_block_markbad(struct mtd_info *mtd, loff_t ofs)
+{
+       struct nand_chip *chip = mtd->priv;
+       struct mxs_nand_info *nand_info = chip->priv;
+       int ret;
+
+       nand_info->marking_block_bad = 1;
+
+       ret = nand_info->hooked_block_markbad(mtd, ofs);
+
+       nand_info->marking_block_bad = 0;
+
+       return ret;
+}
+
+/*
+ * There are several places in this driver where we have to handle the OOB and
+ * block marks. This is the function where things are the most complicated, so
+ * this is where we try to explain it all. All the other places refer back to
+ * here.
+ *
+ * These are the rules, in order of decreasing importance:
+ *
+ * 1) Nothing the caller does can be allowed to imperil the block mark, so all
+ *    write operations take measures to protect it.
+ *
+ * 2) In read operations, the first byte of the OOB we return must reflect the
+ *    true state of the block mark, no matter where that block mark appears in
+ *    the physical page.
+ *
+ * 3) ECC-based read operations return an OOB full of set bits (since we never
+ *    allow ECC-based writes to the OOB, it doesn't matter what ECC-based reads
+ *    return).
+ *
+ * 4) "Raw" read operations return a direct view of the physical bytes in the
+ *    page, using the conventional definition of which bytes are data and which
+ *    are OOB. This gives the caller a way to see the actual, physical bytes
+ *    in the page, without the distortions applied by our ECC engine.
+ *
+ * What we do for this specific read operation depends on whether we're doing
+ * "raw" read, or an ECC-based read.
+ *
+ * It turns out that knowing whether we want an "ECC-based" or "raw" read is not
+ * easy. When reading a page, for example, the NAND Flash MTD code calls our
+ * ecc.read_page or ecc.read_page_raw function. Thus, the fact that MTD wants an
+ * ECC-based or raw view of the page is implicit in which function it calls
+ * (there is a similar pair of ECC-based/raw functions for writing).
+ *
+ * Since MTD assumes the OOB is not covered by ECC, there is no pair of
+ * ECC-based/raw functions for reading or or writing the OOB. The fact that the
+ * caller wants an ECC-based or raw view of the page is not propagated down to
+ * this driver.
+ *
+ * Since our OOB *is* covered by ECC, we need this information. So, we hook the
+ * ecc.read_oob and ecc.write_oob function pointers in the owning
+ * struct mtd_info with our own functions. These hook functions set the
+ * raw_oob_mode field so that, when control finally arrives here, we'll know
+ * what to do.
+ */
+static int mxs_nand_ecc_read_oob(struct mtd_info *mtd, struct nand_chip *nand,
+                               int page, int cmd)
+{
+       struct mxs_nand_info *nand_info = nand->priv;
+
+       /*
+        * First, fill in the OOB buffer. If we're doing a raw read, we need to
+        * get the bytes from the physical page. If we're not doing a raw read,
+        * we need to fill the buffer with set bits.
+        */
+       if (nand_info->raw_oob_mode) {
+               /*
+                * If control arrives here, we're doing a "raw" read. Send the
+                * command to read the conventional OOB and read it.
+                */
+               nand->cmdfunc(mtd, NAND_CMD_READ0, mtd->writesize, page);
+               nand->read_buf(mtd, nand->oob_poi, mtd->oobsize);
+       } else {
+               /*
+                * If control arrives here, we're not doing a "raw" read. Fill
+                * the OOB buffer with set bits and correct the block mark.
+                */
+               memset(nand->oob_poi, 0xff, mtd->oobsize);
+
+               nand->cmdfunc(mtd, NAND_CMD_READ0, mtd->writesize, page);
+               mxs_nand_read_buf(mtd, nand->oob_poi, 1);
+       }
+
+       return 0;
+
+}
+
+/*
+ * Write OOB data to NAND.
+ */
+static int mxs_nand_ecc_write_oob(struct mtd_info *mtd, struct nand_chip *nand,
+                                       int page)
+{
+       struct mxs_nand_info *nand_info = nand->priv;
+       uint8_t block_mark = 0;
+
+       /*
+        * There are fundamental incompatibilities between the i.MX GPMI NFC and
+        * the NAND Flash MTD model that make it essentially impossible to write
+        * the out-of-band bytes.
+        *
+        * We permit *ONE* exception. If the *intent* of writing the OOB is to
+        * mark a block bad, we can do that.
+        */
+
+       if (!nand_info->marking_block_bad) {
+               printf("NXS NAND: Writing OOB isn't supported\n");
+               return -EIO;
+       }
+
+       /* Write the block mark. */
+       nand->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
+       nand->write_buf(mtd, &block_mark, 1);
+       nand->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
+
+       /* Check if it worked. */
+       if (nand->waitfunc(mtd, nand) & NAND_STATUS_FAIL)
+               return -EIO;
+
+       return 0;
+}
+
+/*
+ * Claims all blocks are good.
+ *
+ * In principle, this function is *only* called when the NAND Flash MTD system
+ * isn't allowed to keep an in-memory bad block table, so it is forced to ask
+ * the driver for bad block information.
+ *
+ * In fact, we permit the NAND Flash MTD system to have an in-memory BBT, so
+ * this function is *only* called when we take it away.
+ *
+ * Thus, this function is only called when we want *all* blocks to look good,
+ * so it *always* return success.
+ */
+static int mxs_nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
+{
+       return 0;
+}
+
+/*
+ * Nominally, the purpose of this function is to look for or create the bad
+ * block table. In fact, since the we call this function at the very end of
+ * the initialization process started by nand_scan(), and we doesn't have a
+ * more formal mechanism, we "hook" this function to continue init process.
+ *
+ * At this point, the physical NAND Flash chips have been identified and
+ * counted, so we know the physical geometry. This enables us to make some
+ * important configuration decisions.
+ *
+ * The return value of this function propogates directly back to this driver's
+ * call to nand_scan(). Anything other than zero will cause this driver to
+ * tear everything down and declare failure.
+ */
+static int mxs_nand_scan_bbt(struct mtd_info *mtd)
+{
+       struct nand_chip *nand = mtd->priv;
+       struct mxs_nand_info *nand_info = nand->priv;
+       struct mx28_bch_regs *bch_regs = (struct mx28_bch_regs *)MXS_BCH_BASE;
+       uint32_t tmp;
+
+       /* Configure BCH and set NFC geometry */
+       mx28_reset_block(&bch_regs->hw_bch_ctrl_reg);
+
+       /* Configure layout 0 */
+       tmp = (mxs_nand_ecc_chunk_cnt(mtd->writesize) - 1)
+               << BCH_FLASHLAYOUT0_NBLOCKS_OFFSET;
+       tmp |= MXS_NAND_METADATA_SIZE << BCH_FLASHLAYOUT0_META_SIZE_OFFSET;
+       tmp |= (mxs_nand_get_ecc_strength(mtd->writesize, mtd->oobsize) >> 1)
+               << BCH_FLASHLAYOUT0_ECC0_OFFSET;
+       tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE;
+       writel(tmp, &bch_regs->hw_bch_flash0layout0);
+
+       tmp = (mtd->writesize + mtd->oobsize)
+               << BCH_FLASHLAYOUT1_PAGE_SIZE_OFFSET;
+       tmp |= (mxs_nand_get_ecc_strength(mtd->writesize, mtd->oobsize) >> 1)
+               << BCH_FLASHLAYOUT1_ECCN_OFFSET;
+       tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE;
+       writel(tmp, &bch_regs->hw_bch_flash0layout1);
+
+       /* Set *all* chip selects to use layout 0 */
+       writel(0, &bch_regs->hw_bch_layoutselect);
+
+       /* Enable BCH complete interrupt */
+       writel(BCH_CTRL_COMPLETE_IRQ_EN, &bch_regs->hw_bch_ctrl_set);
+
+       /* Hook some operations at the MTD level. */
+       if (mtd->read_oob != mxs_nand_hook_read_oob) {
+               nand_info->hooked_read_oob = mtd->read_oob;
+               mtd->read_oob = mxs_nand_hook_read_oob;
+       }
+
+       if (mtd->write_oob != mxs_nand_hook_write_oob) {
+               nand_info->hooked_write_oob = mtd->write_oob;
+               mtd->write_oob = mxs_nand_hook_write_oob;
+       }
+
+       if (mtd->block_markbad != mxs_nand_hook_block_markbad) {
+               nand_info->hooked_block_markbad = mtd->block_markbad;
+               mtd->block_markbad = mxs_nand_hook_block_markbad;
+       }
+
+       /* We use the reference implementation for bad block management. */
+       return nand_default_bbt(mtd);
+}
+
+/*
+ * Allocate DMA buffers
+ */
+int mxs_nand_alloc_buffers(struct mxs_nand_info *nand_info)
+{
+       uint8_t *buf;
+       const int size = NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE;
+
+       /* DMA buffers */
+       buf = memalign(MXS_DMA_ALIGNMENT, size);
+       if (!buf) {
+               printf("MXS NAND: Error allocating DMA buffers\n");
+               return -ENOMEM;
+       }
+
+       memset(buf, 0, size);
+
+       nand_info->data_buf = buf;
+       nand_info->oob_buf = buf + NAND_MAX_PAGESIZE;
+
+       /* Command buffers */
+       nand_info->cmd_buf = memalign(MXS_DMA_ALIGNMENT,
+                               MXS_NAND_COMMAND_BUFFER_SIZE);
+       if (!nand_info->cmd_buf) {
+               free(buf);
+               printf("MXS NAND: Error allocating command buffers\n");
+               return -ENOMEM;
+       }
+       memset(nand_info->cmd_buf, 0, MXS_NAND_COMMAND_BUFFER_SIZE);
+       nand_info->cmd_queue_len = 0;
+
+       return 0;
+}
+
+/*
+ * Initializes the NFC hardware.
+ */
+int mxs_nand_init(struct mxs_nand_info *info)
+{
+       struct mx28_gpmi_regs *gpmi_regs =
+               (struct mx28_gpmi_regs *)MXS_GPMI_BASE;
+       int i = 0;
+
+       info->desc = malloc(sizeof(struct mxs_dma_desc *) *
+                               MXS_NAND_DMA_DESCRIPTOR_COUNT);
+       if (!info->desc)
+               goto err1;
+
+       /* Allocate the DMA descriptors. */
+       for (i = 0; i < MXS_NAND_DMA_DESCRIPTOR_COUNT; i++) {
+               info->desc[i] = mxs_dma_desc_alloc();
+               if (!info->desc[i])
+                       goto err2;
+       }
+
+       /* Init the DMA controller. */
+       mxs_dma_init();
+
+       /* Reset the GPMI block. */
+       mx28_reset_block(&gpmi_regs->hw_gpmi_ctrl0_reg);
+
+       /*
+        * Choose NAND mode, set IRQ polarity, disable write protection and
+        * select BCH ECC.
+        */
+       clrsetbits_le32(&gpmi_regs->hw_gpmi_ctrl1,
+                       GPMI_CTRL1_GPMI_MODE,
+                       GPMI_CTRL1_ATA_IRQRDY_POLARITY | GPMI_CTRL1_DEV_RESET |
+                       GPMI_CTRL1_BCH_MODE);
+
+       return 0;
+
+err2:
+       free(info->desc);
+err1:
+       for (--i; i >= 0; i--)
+               mxs_dma_desc_free(info->desc[i]);
+       printf("MXS NAND: Unable to allocate DMA descriptors\n");
+       return -ENOMEM;
+}
+
+/*!
+ * This function is called during the driver binding process.
+ *
+ * @param   pdev  the device structure used to store device specific
+ *                information that is used by the suspend, resume and
+ *                remove functions
+ *
+ * @return  The function always returns 0.
+ */
+int board_nand_init(struct nand_chip *nand)
+{
+       struct mxs_nand_info *nand_info;
+       int err;
+
+       nand_info = malloc(sizeof(struct mxs_nand_info));
+       if (!nand_info) {
+               printf("MXS NAND: Failed to allocate private data\n");
+               return -ENOMEM;
+       }
+       memset(nand_info, 0, sizeof(struct mxs_nand_info));
+
+       err = mxs_nand_alloc_buffers(nand_info);
+       if (err)
+               goto err1;
+
+       err = mxs_nand_init(nand_info);
+       if (err)
+               goto err2;
+
+       memset(&fake_ecc_layout, 0, sizeof(fake_ecc_layout));
+
+       nand->priv = nand_info;
+       nand->options |= NAND_NO_SUBPAGE_WRITE;
+
+       nand->cmd_ctrl          = mxs_nand_cmd_ctrl;
+
+       nand->dev_ready         = mxs_nand_device_ready;
+       nand->select_chip       = mxs_nand_select_chip;
+       nand->block_bad         = mxs_nand_block_bad;
+       nand->scan_bbt          = mxs_nand_scan_bbt;
+
+       nand->read_byte         = mxs_nand_read_byte;
+
+       nand->read_buf          = mxs_nand_read_buf;
+       nand->write_buf         = mxs_nand_write_buf;
+
+       nand->ecc.read_page     = mxs_nand_ecc_read_page;
+       nand->ecc.write_page    = mxs_nand_ecc_write_page;
+       nand->ecc.read_oob      = mxs_nand_ecc_read_oob;
+       nand->ecc.write_oob     = mxs_nand_ecc_write_oob;
+
+       nand->ecc.layout        = &fake_ecc_layout;
+       nand->ecc.mode          = NAND_ECC_HW;
+       nand->ecc.bytes         = 9;
+       nand->ecc.size          = 512;
+
+       return 0;
+
+err2:
+       free(nand_info->data_buf);
+       free(nand_info->cmd_buf);
+err1:
+       free(nand_info);
+       return err;
+}
index 6aac6a2bf4189d8ff64cf5fb344148d8e69a54f7..27f6c776b04d6649992cef0ec79e6552db14c59f 100644 (file)
@@ -133,7 +133,7 @@ static void nand_release_device (struct mtd_info *mtd)
  *
  * Default read function for 8bit buswith
  */
-static uint8_t nand_read_byte(struct mtd_info *mtd)
+uint8_t nand_read_byte(struct mtd_info *mtd)
 {
        struct nand_chip *chip = mtd->priv;
        return readb(chip->IO_ADDR_R);
@@ -196,7 +196,7 @@ static void nand_select_chip(struct mtd_info *mtd, int chipnr)
  *
  * Default write function for 8bit buswith
  */
-static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
+void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
 {
        int i;
        struct nand_chip *chip = mtd->priv;
@@ -249,7 +249,7 @@ static int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
  *
  * Default write function for 16bit buswith
  */
-static void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
+void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len)
 {
        int i;
        struct nand_chip *chip = mtd->priv;
index 52bc916afb7370b30763b776a86f10b8d31c5861..81f0e0812b126b99d9aaee98d79dea7d2ec1db7a 100644 (file)
@@ -50,7 +50,7 @@
  * only nand_correct_data() is needed
  */
 
-#ifndef CONFIG_NAND_SPL
+#if !defined(CONFIG_NAND_SPL) || defined(CONFIG_SPL_NAND_SOFTECC)
 /*
  * Pre-calculated 256-way 1 byte column parity
  */
index e5003e646e2863ad9bcfa6b4d91e3550a2b52f9c..ed821f244d1720989e0b0c6f4dc0994dbfc94554 100644 (file)
@@ -21,6 +21,7 @@
 #include <common.h>
 #include <nand.h>
 #include <asm/io.h>
+#include <linux/mtd/nand_ecc.h>
 
 static int nand_ecc_pos[] = CONFIG_SYS_NAND_ECCPOS;
 static nand_info_t mtd;
@@ -204,7 +205,8 @@ static int nand_read_page(int block, int page, void *dst)
        oob_data = ecc_calc + 0x200;
 
        for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
-               this->ecc.hwctl(&mtd, NAND_ECC_READ);
+               if (this->ecc.mode != NAND_ECC_SOFT)
+                       this->ecc.hwctl(&mtd, NAND_ECC_READ);
                this->read_buf(&mtd, p, eccsize);
                this->ecc.calculate(&mtd, p, &ecc_calc[i]);
        }
@@ -274,6 +276,13 @@ void nand_init(void)
                (void  __iomem *)CONFIG_SYS_NAND_BASE;
        board_nand_init(&nand_chip);
 
+#ifdef CONFIG_SPL_NAND_SOFTECC
+       if (nand_chip.ecc.mode == NAND_ECC_SOFT) {
+               nand_chip.ecc.calculate = nand_calculate_ecc;
+               nand_chip.ecc.correct = nand_correct_data;
+       }
+#endif
+
        if (nand_chip.select_chip)
                nand_chip.select_chip(&mtd, 0);
 }
index 5bbec48be2600b39748ac70a2d6ee304273241fc..1dfe074e1e13c4e64f760bdcd91a5b7d95780c7b 100644 (file)
@@ -348,7 +348,7 @@ int board_nand_init(struct nand_chip *nand)
 
        nand->chip_delay = 100;
        /* Default ECC mode */
-#ifndef CONFIG_SPL_BUILD
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_NAND_SOFTECC)
        nand->ecc.mode = NAND_ECC_SOFT;
 #else
        nand->ecc.mode = NAND_ECC_HW;
@@ -359,7 +359,9 @@ int board_nand_init(struct nand_chip *nand)
        nand->ecc.correct = omap_correct_data;
        nand->ecc.calculate = omap_calculate_ecc;
        omap_hwecc_init(nand);
+#endif
 
+#ifdef CONFIG_SPL_BUILD
        if (nand->options & NAND_BUSWIDTH_16)
                nand->read_buf = nand_read_buf16;
        else
index 084e475649e81d5147b9673fa215e979378bcb75..87f03410666aef3a328f00030b1d113015a7f96b 100644 (file)
@@ -28,6 +28,8 @@
 #include <common.h>
 
 #include <nand.h>
+#include <linux/mtd/nand.h>
+
 #include <asm/arch/s3c6400.h>
 
 #include <asm/io.h>
@@ -60,32 +62,6 @@ static void print_oob(const char *header, struct mtd_info *mtd)
 }
 #endif /* S3C_NAND_DEBUG */
 
-#ifdef CONFIG_NAND_SPL
-static u_char nand_read_byte(struct mtd_info *mtd)
-{
-       struct nand_chip *this = mtd->priv;
-       return readb(this->IO_ADDR_R);
-}
-
-static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
-{
-       int i;
-       struct nand_chip *this = mtd->priv;
-
-       for (i = 0; i < len; i++)
-               writeb(buf[i], this->IO_ADDR_W);
-}
-
-static void nand_read_buf(struct mtd_info *mtd, u_char *buf, int len)
-{
-       int i;
-       struct nand_chip *this = mtd->priv;
-
-       for (i = 0; i < len; i++)
-               buf[i] = readb(this->IO_ADDR_R);
-}
-#endif
-
 static void s3c_nand_select_chip(struct mtd_info *mtd, int chip)
 {
        int ctrl = readl(NFCONT);
index b984bd4a2beb11eb529c127f62fa7dfe491b209b..b090d40ea071c5ca7b7d6e4a5bfa522236e5c5f8 100644 (file)
@@ -25,8 +25,12 @@ include $(TOPDIR)/config.mk
 
 LIB    := $(obj)libonenand.o
 
+ifndef CONFIG_SPL_BUILD
 COBJS-$(CONFIG_CMD_ONENAND)    := onenand_uboot.o onenand_base.o onenand_bbt.o
 COBJS-$(CONFIG_SAMSUNG_ONENAND)        += samsung.o
+else
+COBJS-y                                := onenand_spl.o
+endif
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
index 24e02c2840b6c30f84b80d03be01e5af778e7a80..06f187fdd7008d4cefeebf1b31346819132d5567 100644 (file)
@@ -1943,16 +1943,10 @@ static int onenand_do_lock_cmd(struct mtd_info *mtd, loff_t ofs, size_t len, int
 {
        struct onenand_chip *this = mtd->priv;
        int start, end, block, value, status;
-       int wp_status_mask;
 
        start = onenand_block(this, ofs);
        end = onenand_block(this, ofs + len);
 
-       if (cmd == ONENAND_CMD_LOCK)
-               wp_status_mask = ONENAND_WP_LS;
-       else
-               wp_status_mask = ONENAND_WP_US;
-
        /* Continuous lock scheme */
        if (this->options & ONENAND_HAS_CONT_LOCK) {
                /* Set start block address */
@@ -2226,19 +2220,21 @@ static const struct onenand_manufacturers onenand_manuf_ids[] = {
 static int onenand_check_maf(int manuf)
 {
        int size = ARRAY_SIZE(onenand_manuf_ids);
-       char *name;
        int i;
+#ifdef ONENAND_DEBUG
+       char *name;
+#endif
 
        for (i = 0; i < size; i++)
                if (manuf == onenand_manuf_ids[i].id)
                        break;
 
+#ifdef ONENAND_DEBUG
        if (i < size)
                name = onenand_manuf_ids[i].name;
        else
                name = "Unknown";
 
-#ifdef ONENAND_DEBUG
        printk(KERN_DEBUG "OneNAND Manufacturer: %s (0x%0x)\n", name, manuf);
 #endif
 
@@ -2255,7 +2251,7 @@ static int flexonenand_get_boundary(struct mtd_info *mtd)
 {
        struct onenand_chip *this = mtd->priv;
        unsigned int die, bdry;
-       int ret, syscfg, locked;
+       int syscfg, locked;
 
        /* Disable ECC */
        syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1);
@@ -2266,7 +2262,7 @@ static int flexonenand_get_boundary(struct mtd_info *mtd)
                this->wait(mtd, FL_SYNCING);
 
                this->command(mtd, FLEXONENAND_CMD_READ_PI, die, 0);
-               ret = this->wait(mtd, FL_READING);
+               this->wait(mtd, FL_READING);
 
                bdry = this->read_word(this->base + ONENAND_DATARAM);
                if ((bdry >> FLEXONENAND_PI_UNLOCK_SHIFT) == 3)
@@ -2276,7 +2272,7 @@ static int flexonenand_get_boundary(struct mtd_info *mtd)
                this->boundary[die] = bdry & FLEXONENAND_PI_MASK;
 
                this->command(mtd, ONENAND_CMD_RESET, 0, 0);
-               ret = this->wait(mtd, FL_RESETING);
+               this->wait(mtd, FL_RESETING);
 
                printk(KERN_INFO "Die %d boundary: %d%s\n", die,
                       this->boundary[die], locked ? "(Locked)" : "(Unlocked)");
diff --git a/drivers/mtd/onenand/onenand_spl.c b/drivers/mtd/onenand/onenand_spl.c
new file mode 100644 (file)
index 0000000..50eaa71
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ *
+ * Based on code:
+ *     Copyright (C) 2005-2009 Samsung Electronics
+ *     Kyungmin Park <kyungmin.park@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <linux/mtd/onenand_regs.h>
+#include <onenand_uboot.h>
+
+/*
+ * Device geometry:
+ * - 2048b page, 128k erase block.
+ * - 4096b page, 256k erase block.
+ */
+enum onenand_spl_pagesize {
+       PAGE_2K = 2048,
+       PAGE_4K = 4096,
+};
+
+#define ONENAND_PAGES_PER_BLOCK                        64
+#define onenand_block_address(block)           (block)
+#define onenand_sector_address(page)           (page << 2)
+#define onenand_buffer_address()               ((1 << 3) << 8)
+#define onenand_bufferram_address(block)       (0)
+
+static inline uint16_t onenand_readw(uint32_t addr)
+{
+       return readw(CONFIG_SYS_ONENAND_BASE + addr);
+}
+
+static inline void onenand_writew(uint16_t value, uint32_t addr)
+{
+       writew(value, CONFIG_SYS_ONENAND_BASE + addr);
+}
+
+static enum onenand_spl_pagesize onenand_spl_get_geometry(void)
+{
+       uint32_t dev_id, density;
+
+       if (!onenand_readw(ONENAND_REG_TECHNOLOGY)) {
+               dev_id = onenand_readw(ONENAND_REG_DEVICE_ID);
+               density = dev_id >> ONENAND_DEVICE_DENSITY_SHIFT;
+               density &= ONENAND_DEVICE_DENSITY_MASK;
+
+               if (density < ONENAND_DEVICE_DENSITY_4Gb)
+                       return PAGE_2K;
+
+               if (dev_id & ONENAND_DEVICE_IS_DDP)
+                       return PAGE_2K;
+       }
+
+       return PAGE_4K;
+}
+
+static int onenand_spl_read_page(uint32_t block, uint32_t page, uint32_t *buf,
+                                       enum onenand_spl_pagesize pagesize)
+{
+       const uint32_t addr = CONFIG_SYS_ONENAND_BASE + ONENAND_DATARAM;
+       uint32_t offset;
+
+       onenand_writew(onenand_block_address(block),
+                       ONENAND_REG_START_ADDRESS1);
+
+       onenand_writew(onenand_bufferram_address(block),
+                       ONENAND_REG_START_ADDRESS2);
+
+       onenand_writew(onenand_sector_address(page),
+                       ONENAND_REG_START_ADDRESS8);
+
+       onenand_writew(onenand_buffer_address(),
+                       ONENAND_REG_START_BUFFER);
+
+       onenand_writew(ONENAND_INT_CLEAR, ONENAND_REG_INTERRUPT);
+
+       onenand_writew(ONENAND_CMD_READ, ONENAND_REG_COMMAND);
+
+       while (!(onenand_readw(ONENAND_REG_INTERRUPT) & ONENAND_INT_READ))
+               continue;
+
+       /* Check for invalid block mark */
+       if (page < 2 && (onenand_readw(ONENAND_SPARERAM) != 0xffff))
+               return 1;
+
+       for (offset = 0; offset < pagesize; offset += 4)
+               buf[offset / 4] = readl(addr + offset);
+
+       return 0;
+}
+
+void onenand_spl_load_image(uint32_t offs, uint32_t size, void *dst)
+{
+       uint32_t *addr = (uint32_t *)dst;
+       uint32_t total_pages;
+       uint32_t block;
+       uint32_t page, rpage;
+       enum onenand_spl_pagesize pagesize;
+       int ret;
+
+       pagesize = onenand_spl_get_geometry();
+
+       /*
+        * The page can be either 2k or 4k, avoid using DIV_ROUND_UP to avoid
+        * pulling further unwanted functions into the SPL.
+        */
+       if (pagesize == 2048) {
+               total_pages = DIV_ROUND_UP(size, 2048);
+               page = offs / 2048;
+       } else {
+               total_pages = DIV_ROUND_UP(size, 4096);
+               page = offs / 4096;
+       }
+
+       for (; page <= total_pages; page++) {
+               block = page / ONENAND_PAGES_PER_BLOCK;
+               rpage = page & (ONENAND_PAGES_PER_BLOCK - 1);
+               ret = onenand_spl_read_page(block, rpage, addr, pagesize);
+               if (ret) {
+                       total_pages += ONENAND_PAGES_PER_BLOCK;
+                       page += ONENAND_PAGES_PER_BLOCK - 1;
+               } else {
+                       addr += pagesize / 4;
+               }
+       }
+}
index 20b49124d5a4cdca3d19d3be3485ac83ec77ce5a..ff590645999cf6546f214ae37399f981ff9004c0 100644 (file)
@@ -483,12 +483,11 @@ static void s3c_onenand_check_lock_status(struct mtd_info *mtd)
 {
        struct onenand_chip *this = mtd->priv;
        unsigned int block, end;
-       int tmp;
 
        end = this->chipsize >> this->erase_shift;
 
        for (block = 0; block < end; block++) {
-               tmp = s3c_read_cmd(CMD_MAP_01(onenand->mem_addr(block, 0, 0)));
+               s3c_read_cmd(CMD_MAP_01(onenand->mem_addr(block, 0, 0)));
 
                if (readl(&onenand->reg->int_err_stat) & LOCKED_BLK) {
                        printf("block %d is write-protected!\n", block);
index ced4c940008b080923c0345e9afc8682a5814f4d..f689cc47cfccac051e4257de47bedfcecb5bd13a 100644 (file)
@@ -233,8 +233,7 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u8 erase_cmd,
                        goto out;
        }
 
-       debug("SF: Successfully erased %zu bytes @ %#x\n",
-             len * erase_size, start);
+       debug("SF: Successfully erased %zu bytes @ %#x\n", len, start);
 
  out:
        spi_release_bus(flash->spi);
index a7711390b08603e74380442b831ab70b56079b64..73700dd0dfb44a093517147b6febfb29a409edff 100644 (file)
@@ -92,6 +92,7 @@
 #include <asm/ppc4xx-mal.h>
 #include <miiphy.h>
 #include <malloc.h>
+#include <linux/compiler.h>
 
 #if !(defined(CONFIG_MII) || defined(CONFIG_CMD_MII))
 #error "CONFIG_MII has to be defined!"
@@ -872,7 +873,7 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
     defined(CONFIG_460EX) || defined(CONFIG_460GT) || \
     defined(CONFIG_405EX)
-       int ethgroup = -1;
+       __maybe_unused int ethgroup = -1;
 #endif
 #endif
        u32 bd_cached;
index 15eee8d8c48fdd54fae99b3023bc5d0b65d2e92a..d3df82ee397e8b6dbd80d9f74fe56f8ffd7df262 100644 (file)
@@ -63,7 +63,6 @@ COBJS-$(CONFIG_NETCONSOLE) += netconsole.o
 COBJS-$(CONFIG_NS8382X) += ns8382x.o
 COBJS-$(CONFIG_PCNET) += pcnet.o
 COBJS-$(CONFIG_PLB2800_ETHER) += plb2800_eth.o
-COBJS-$(CONFIG_DRIVER_RTL8019) += rtl8019.o
 COBJS-$(CONFIG_RTL8139) += rtl8139.o
 COBJS-$(CONFIG_RTL8169) += rtl8169.o
 COBJS-$(CONFIG_SH_ETHER) += sh_eth.o
index fbf97632c6df4707a05ab137454a2aa69d2c50f1..1a54362e0b76ad3af267927a98cf24dedd73c398 100644 (file)
@@ -440,6 +440,7 @@ static int armdfec_init(struct eth_device *dev, bd_t *bd)
        struct armdfec_device *darmdfec = to_darmdfec(dev);
        struct armdfec_reg *regs = darmdfec->regs;
        int phy_adr;
+       u32 temp;
 
        armdfec_init_rx_desc_ring(darmdfec);
 
@@ -479,9 +480,12 @@ static int armdfec_init(struct eth_device *dev, bd_t *bd)
        update_hash_table_mac_address(darmdfec, NULL, dev->enetaddr);
 
        /* Update TX and RX queue descriptor register */
-       writel((u32)darmdfec->p_txdesc, &regs->txcdp[TXQ]);
-       writel((u32)darmdfec->p_rxdesc, &regs->rxfdp[RXQ]);
-       writel((u32)darmdfec->p_rxdesc_curr, &regs->rxcdp[RXQ]);
+       temp = (u32)&regs->txcdp[TXQ];
+       writel((u32)darmdfec->p_txdesc, temp);
+       temp = (u32)&regs->rxfdp[RXQ];
+       writel((u32)darmdfec->p_rxdesc, temp);
+       temp = (u32)&regs->rxcdp[RXQ];
+       writel((u32)darmdfec->p_rxdesc_curr, temp);
 
        /* Enable Interrupts */
        writel(ALL_INTS, &regs->im);
@@ -614,6 +618,7 @@ static int armdfec_recv(struct eth_device *dev)
        struct rx_desc *p_rxdesc_curr = darmdfec->p_rxdesc_curr;
        u32 cmd_sts;
        u32 timeout = 0;
+       u32 temp;
 
        /* wait untill rx packet available or timeout */
        do {
@@ -667,7 +672,8 @@ static int armdfec_recv(struct eth_device *dev)
        p_rxdesc_curr->buf_size = PKTSIZE_ALIGN;
        p_rxdesc_curr->byte_cnt = 0;
 
-       writel((u32)p_rxdesc_curr->nxtdesc_p, (u32)&darmdfec->p_rxdesc_curr);
+       temp = (u32)&darmdfec->p_rxdesc_curr;
+       writel((u32)p_rxdesc_curr->nxtdesc_p, temp);
 
        return 0;
 }
index 97d273999af0514375557ae1de9bfd32603588ec..9bda1fc69519b9ebedcff09b5f3de9a72f540545 100644 (file)
@@ -474,11 +474,9 @@ static int at91emac_recv(struct eth_device *netdev)
 
 static int at91emac_write_hwaddr(struct eth_device *netdev)
 {
-       emac_device *dev;
        at91_emac_t *emac;
        at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
        emac = (at91_emac_t *) netdev->iobase;
-       dev = (emac_device *) netdev->priv;
 
        writel(1 << ATMEL_ID_EMAC, &pmc->pcer);
        DEBUG_AT91EMAC("init MAC-ADDR %02x:%02x:%02x:%02x:%02x:%02x\n",
index 9424fb2bb69cc697ea0fb3ab1a1dc54f511d7aec..e04a784a4bb099eacff6d3ead4ac0ba6ec35267e 100644 (file)
 static u16 get_reg_init_bus(struct eth_device *dev, int regno)
 {
        /* force 16 bit busmode */
-       volatile u8 c;
        struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv);
        uint8_t volatile * const iob = (uint8_t volatile * const)dev->iobase;
 
-       c = readb(iob);
-       c = readb(iob + 1);
-       c = readb(iob);
-       c = readb(iob + 1);
-       c = readb(iob);
+       readb(iob);
+       readb(iob + 1);
+       readb(iob);
+       readb(iob + 1);
+       readb(iob);
 
        REG_WRITE(regno, &priv->regs->pptr);
        return REG_READ(&priv->regs->pdata);
index fa31159a0efc9115ce378ab5e67b67c8fb8ac8be..fbd0f1b7b58845cce5fb6e578b9bf44cff7127ce 100644 (file)
 #include <net.h>
 #include <miiphy.h>
 #include <malloc.h>
+#include <linux/compiler.h>
 #include <asm/arch/emac_defs.h>
 #include <asm/io.h>
+#include "davinci_emac.h"
 
 unsigned int   emac_dbg = 0;
 #define debug_emac(fmt,args...)        if (emac_dbg) printf(fmt,##args)
 
+#ifdef EMAC_HW_RAM_ADDR
+static inline unsigned long BD_TO_HW(unsigned long x)
+{
+       if (x == 0)
+               return 0;
+
+       return x - EMAC_WRAPPER_RAM_ADDR + EMAC_HW_RAM_ADDR;
+}
+
+static inline unsigned long HW_TO_BD(unsigned long x)
+{
+       if (x == 0)
+               return 0;
+
+       return x - EMAC_HW_RAM_ADDR + EMAC_WRAPPER_RAM_ADDR;
+}
+#else
+#define BD_TO_HW(x)    (x)
+#define HW_TO_BD(x)    (x)
+#endif
+
 #ifdef DAVINCI_EMAC_GIG_ENABLE
 #define emac_gigabit_enable(phy_addr)  davinci_eth_gigabit_enable(phy_addr)
 #else
@@ -83,17 +106,40 @@ static volatile emac_desc  *emac_rx_active_tail = 0;
 static int                     emac_rx_queue_active = 0;
 
 /* Receive packet buffers */
-static unsigned char           emac_rx_buffers[EMAC_MAX_RX_BUFFERS * (EMAC_MAX_ETHERNET_PKT_SIZE + EMAC_PKT_ALIGN)];
+static unsigned char emac_rx_buffers[EMAC_MAX_RX_BUFFERS * EMAC_RXBUF_SIZE]
+                               __aligned(ARCH_DMA_MINALIGN);
 
-#define MAX_PHY                3
+#ifndef CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT
+#define CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT      3
+#endif
 
 /* PHY address for a discovered PHY (0xff - not found) */
-static u_int8_t        active_phy_addr[MAX_PHY] = { 0xff, 0xff, 0xff };
+static u_int8_t        active_phy_addr[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];
 
 /* number of PHY found active */
 static u_int8_t        num_phy;
 
-phy_t                          phy[MAX_PHY];
+phy_t                          phy[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];
+
+static inline void davinci_flush_rx_descs(void)
+{
+       /* flush the whole RX descs area */
+       flush_dcache_range(EMAC_WRAPPER_RAM_ADDR + EMAC_RX_DESC_BASE,
+                       EMAC_WRAPPER_RAM_ADDR + EMAC_TX_DESC_BASE);
+}
+
+static inline void davinci_invalidate_rx_descs(void)
+{
+       /* invalidate the whole RX descs area */
+       invalidate_dcache_range(EMAC_WRAPPER_RAM_ADDR + EMAC_RX_DESC_BASE,
+                       EMAC_WRAPPER_RAM_ADDR + EMAC_TX_DESC_BASE);
+}
+
+static inline void davinci_flush_desc(emac_desc *desc)
+{
+       flush_dcache_range((unsigned long)desc,
+                       (unsigned long)desc + sizeof(*desc));
+}
 
 static int davinci_eth_set_mac_addr(struct eth_device *dev)
 {
@@ -160,9 +206,8 @@ static int davinci_eth_phy_detect(void)
        int             j;
        unsigned int    count = 0;
 
-       active_phy_addr[0] = 0xff;
-       active_phy_addr[1] = 0xff;
-       active_phy_addr[2] = 0xff;
+       for (i = 0; i < CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT; i++)
+               active_phy_addr[i] = 0xff;
 
        udelay(1000);
        phy_act_state = readl(&adap_mdio->ALIVE);
@@ -175,7 +220,14 @@ static int davinci_eth_phy_detect(void)
        for (i = 0, j = 0; i < 32; i++)
                if (phy_act_state & (1 << i)) {
                        count++;
-                       active_phy_addr[j++] = i;
+                       if (count <= CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT) {
+                               active_phy_addr[j++] = i;
+                       } else {
+                               printf("%s: to many PHYs detected.\n",
+                                       __func__);
+                               count = 0;
+                               break;
+                       }
                }
 
        num_phy = count;
@@ -439,8 +491,8 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
        /* Create RX queue and set receive process in place */
        emac_rx_active_head = emac_rx_desc;
        for (cnt = 0; cnt < EMAC_MAX_RX_BUFFERS; cnt++) {
-               rx_desc->next = (u_int32_t)(rx_desc + 1);
-               rx_desc->buffer = &emac_rx_buffers[cnt * (EMAC_MAX_ETHERNET_PKT_SIZE + EMAC_PKT_ALIGN)];
+               rx_desc->next = BD_TO_HW((u_int32_t)(rx_desc + 1));
+               rx_desc->buffer = &emac_rx_buffers[cnt * EMAC_RXBUF_SIZE];
                rx_desc->buff_off_len = EMAC_MAX_ETHERNET_PKT_SIZE;
                rx_desc->pkt_flag_len = EMAC_CPPI_OWNERSHIP_BIT;
                rx_desc++;
@@ -452,6 +504,8 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
        emac_rx_active_tail = rx_desc;
        emac_rx_queue_active = 1;
 
+       davinci_flush_rx_descs();
+
        /* Enable TX/RX */
        writel(EMAC_MAX_ETHERNET_PKT_SIZE, &adap_emac->RXMAXLEN);
        writel(0, &adap_emac->RXBUFFEROFFSET);
@@ -466,7 +520,8 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
        writel(1, &adap_emac->RXUNICASTSET);
 
        /* Enable MII interface and Full duplex mode */
-#ifdef CONFIG_SOC_DA8XX
+#if defined(CONFIG_SOC_DA8XX) || \
+       (defined(CONFIG_OMAP34XX) && defined(CONFIG_DRIVER_TI_EMAC_USE_RMII))
        writel((EMAC_MACCONTROL_MIIEN_ENABLE |
                EMAC_MACCONTROL_FULLDUPLEX_ENABLE |
                EMAC_MACCONTROL_RMIISPEED_100),
@@ -492,7 +547,7 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
        emac_gigabit_enable(active_phy_addr[index]);
 
        /* Start receive process */
-       writel((u_int32_t)emac_rx_desc, &adap_emac->RX0HDP);
+       writel(BD_TO_HW((u_int32_t)emac_rx_desc), &adap_emac->RX0HDP);
 
        debug_emac("- emac_open\n");
 
@@ -609,8 +664,13 @@ static int davinci_eth_send_packet (struct eth_device *dev,
                                      EMAC_CPPI_SOP_BIT |
                                      EMAC_CPPI_OWNERSHIP_BIT |
                                      EMAC_CPPI_EOP_BIT);
+
+       flush_dcache_range((unsigned long)packet,
+                       (unsigned long)packet + length);
+       davinci_flush_desc(emac_tx_desc);
+
        /* Send the packet */
-       writel((unsigned long)emac_tx_desc, &adap_emac->TX0HDP);
+       writel(BD_TO_HW((unsigned long)emac_tx_desc), &adap_emac->TX0HDP);
 
        /* Wait for packet to complete or link down */
        while (1) {
@@ -641,6 +701,8 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
        volatile emac_desc *tail_desc;
        int status, ret = -1;
 
+       davinci_invalidate_rx_descs();
+
        rx_curr_desc = emac_rx_active_head;
        status = rx_curr_desc->pkt_flag_len;
        if ((rx_curr_desc) && ((status & EMAC_CPPI_OWNERSHIP_BIT) == 0)) {
@@ -648,20 +710,23 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
                        /* Error in packet - discard it and requeue desc */
                        printf ("WARN: emac_rcv_pkt: Error in packet\n");
                } else {
+                       unsigned long tmp = (unsigned long)rx_curr_desc->buffer;
+
+                       invalidate_dcache_range(tmp, tmp + EMAC_RXBUF_SIZE);
                        NetReceive (rx_curr_desc->buffer,
                                    (rx_curr_desc->buff_off_len & 0xffff));
                        ret = rx_curr_desc->buff_off_len & 0xffff;
                }
 
                /* Ack received packet descriptor */
-               writel((unsigned long)rx_curr_desc, &adap_emac->RX0CP);
+               writel(BD_TO_HW((ulong)rx_curr_desc), &adap_emac->RX0CP);
                curr_desc = rx_curr_desc;
                emac_rx_active_head =
-                       (volatile emac_desc *) rx_curr_desc->next;
+                       (volatile emac_desc *) (HW_TO_BD(rx_curr_desc->next));
 
                if (status & EMAC_CPPI_EOQ_BIT) {
                        if (emac_rx_active_head) {
-                               writel((unsigned long)emac_rx_active_head,
+                               writel(BD_TO_HW((ulong)emac_rx_active_head),
                                       &adap_emac->RX0HDP);
                        } else {
                                emac_rx_queue_active = 0;
@@ -673,13 +738,14 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
                rx_curr_desc->buff_off_len = EMAC_MAX_ETHERNET_PKT_SIZE;
                rx_curr_desc->pkt_flag_len = EMAC_CPPI_OWNERSHIP_BIT;
                rx_curr_desc->next = 0;
+               davinci_flush_desc(rx_curr_desc);
 
                if (emac_rx_active_head == 0) {
                        printf ("INFO: emac_rcv_pkt: active queue head = 0\n");
                        emac_rx_active_head = curr_desc;
                        emac_rx_active_tail = curr_desc;
                        if (emac_rx_queue_active != 0) {
-                               writel((unsigned long)emac_rx_active_head,
+                               writel(BD_TO_HW((ulong)emac_rx_active_head),
                                       &adap_emac->RX0HDP);
                                printf ("INFO: emac_rcv_pkt: active queue head = 0, HDP fired\n");
                                emac_rx_queue_active = 1;
@@ -687,14 +753,16 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
                } else {
                        tail_desc = emac_rx_active_tail;
                        emac_rx_active_tail = curr_desc;
-                       tail_desc->next = (unsigned int) curr_desc;
+                       tail_desc->next = BD_TO_HW((ulong) curr_desc);
                        status = tail_desc->pkt_flag_len;
                        if (status & EMAC_CPPI_EOQ_BIT) {
-                               writel((unsigned long)curr_desc,
+                               davinci_flush_desc(tail_desc);
+                               writel(BD_TO_HW((ulong)curr_desc),
                                       &adap_emac->RX0HDP);
                                status &= ~EMAC_CPPI_EOQ_BIT;
                                tail_desc->pkt_flag_len = status;
                        }
+                       davinci_flush_desc(tail_desc);
                }
                return (ret);
        }
@@ -752,7 +820,7 @@ int davinci_emac_initialize(void)
        if (!ret)
                return(0);
        else
-               printf(" %d ETH PHY detected\n", ret);
+               debug_emac(" %d ETH PHY detected\n", ret);
 
        /* Get PHY ID and initialize phy_ops for a detected PHY */
        for (i = 0; i < num_phy; i++) {
@@ -773,6 +841,7 @@ int davinci_emac_initialize(void)
                phy_id |= tmp & 0x0000ffff;
 
                switch (phy_id) {
+#ifdef PHY_KSZ8873
                case PHY_KSZ8873:
                        sprintf(phy[i].name, "KSZ8873 @ 0x%02x",
                                                active_phy_addr[i]);
@@ -781,6 +850,8 @@ int davinci_emac_initialize(void)
                        phy[i].get_link_speed = ksz8873_get_link_speed;
                        phy[i].auto_negotiate = ksz8873_auto_negotiate;
                        break;
+#endif
+#ifdef PHY_LXT972
                case PHY_LXT972:
                        sprintf(phy[i].name, "LXT972 @ 0x%02x",
                                                active_phy_addr[i]);
@@ -789,6 +860,8 @@ int davinci_emac_initialize(void)
                        phy[i].get_link_speed = lxt972_get_link_speed;
                        phy[i].auto_negotiate = lxt972_auto_negotiate;
                        break;
+#endif
+#ifdef PHY_DP83848
                case PHY_DP83848:
                        sprintf(phy[i].name, "DP83848 @ 0x%02x",
                                                active_phy_addr[i]);
@@ -797,6 +870,8 @@ int davinci_emac_initialize(void)
                        phy[i].get_link_speed = dp83848_get_link_speed;
                        phy[i].auto_negotiate = dp83848_auto_negotiate;
                        break;
+#endif
+#ifdef PHY_ET1011C
                case PHY_ET1011C:
                        sprintf(phy[i].name, "ET1011C @ 0x%02x",
                                                active_phy_addr[i]);
@@ -805,6 +880,7 @@ int davinci_emac_initialize(void)
                        phy[i].get_link_speed = et1011c_get_link_speed;
                        phy[i].auto_negotiate = gen_auto_negotiate;
                        break;
+#endif
                default:
                        sprintf(phy[i].name, "GENERIC @ 0x%02x",
                                                active_phy_addr[i]);
diff --git a/drivers/net/davinci_emac.h b/drivers/net/davinci_emac.h
new file mode 100644 (file)
index 0000000..37c841c
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2011 Ilya Yanok, Emcraft Systems
+ *
+ * Based on: mach-davinci/emac_defs.h
+ * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _DAVINCI_EMAC_H_
+#define _DAVINCI_EMAC_H_
+/* Ethernet Min/Max packet size */
+#define EMAC_MIN_ETHERNET_PKT_SIZE     60
+#define EMAC_MAX_ETHERNET_PKT_SIZE     1518
+/* Buffer size (should be aligned on 32 byte and cache line) */
+#define EMAC_RXBUF_SIZE        ALIGN(ALIGN(EMAC_MAX_ETHERNET_PKT_SIZE, 32),\
+                               ARCH_DMA_MINALIGN)
+
+/* Number of RX packet buffers
+ * NOTE: Only 1 buffer supported as of now
+ */
+#define EMAC_MAX_RX_BUFFERS            10
+
+
+/***********************************************
+ ******** Internally used macros ***************
+ ***********************************************/
+
+#define EMAC_CH_TX                     1
+#define EMAC_CH_RX                     0
+
+/* Each descriptor occupies 4 words, lets start RX desc's at 0 and
+ * reserve space for 64 descriptors max
+ */
+#define EMAC_RX_DESC_BASE              0x0
+#define EMAC_TX_DESC_BASE              0x1000
+
+/* EMAC Teardown value */
+#define EMAC_TEARDOWN_VALUE            0xfffffffc
+
+/* MII Status Register */
+#define MII_STATUS_REG                 1
+
+/* Number of statistics registers */
+#define EMAC_NUM_STATS                 36
+
+
+/* EMAC Descriptor */
+typedef volatile struct _emac_desc
+{
+       u_int32_t       next;           /* Pointer to next descriptor
+                                          in chain */
+       u_int8_t        *buffer;        /* Pointer to data buffer */
+       u_int32_t       buff_off_len;   /* Buffer Offset(MSW) and Length(LSW) */
+       u_int32_t       pkt_flag_len;   /* Packet Flags(MSW) and Length(LSW) */
+} emac_desc;
+
+/* CPPI bit positions */
+#define EMAC_CPPI_SOP_BIT              (0x80000000)
+#define EMAC_CPPI_EOP_BIT              (0x40000000)
+#define EMAC_CPPI_OWNERSHIP_BIT                (0x20000000)
+#define EMAC_CPPI_EOQ_BIT              (0x10000000)
+#define EMAC_CPPI_TEARDOWN_COMPLETE_BIT        (0x08000000)
+#define EMAC_CPPI_PASS_CRC_BIT         (0x04000000)
+
+#define EMAC_CPPI_RX_ERROR_FRAME       (0x03fc0000)
+
+#define EMAC_MACCONTROL_MIIEN_ENABLE           (0x20)
+#define EMAC_MACCONTROL_FULLDUPLEX_ENABLE      (0x1)
+#define EMAC_MACCONTROL_GIGABIT_ENABLE         (1 << 7)
+#define EMAC_MACCONTROL_GIGFORCE               (1 << 17)
+#define EMAC_MACCONTROL_RMIISPEED_100          (1 << 15)
+
+#define EMAC_MAC_ADDR_MATCH            (1 << 19)
+#define EMAC_MAC_ADDR_IS_VALID         (1 << 20)
+
+#define EMAC_RXMBPENABLE_RXCAFEN_ENABLE        (0x200000)
+#define EMAC_RXMBPENABLE_RXBROADEN     (0x2000)
+
+
+#define MDIO_CONTROL_IDLE              (0x80000000)
+#define MDIO_CONTROL_ENABLE            (0x40000000)
+#define MDIO_CONTROL_FAULT_ENABLE      (0x40000)
+#define MDIO_CONTROL_FAULT             (0x80000)
+#define MDIO_USERACCESS0_GO            (0x80000000)
+#define MDIO_USERACCESS0_WRITE_READ    (0x0)
+#define MDIO_USERACCESS0_WRITE_WRITE   (0x40000000)
+#define MDIO_USERACCESS0_ACK           (0x20000000)
+
+/* Ethernet MAC Registers Structure */
+typedef struct  {
+       dv_reg          TXIDVER;
+       dv_reg          TXCONTROL;
+       dv_reg          TXTEARDOWN;
+       u_int8_t        RSVD0[4];
+       dv_reg          RXIDVER;
+       dv_reg          RXCONTROL;
+       dv_reg          RXTEARDOWN;
+       u_int8_t        RSVD1[100];
+       dv_reg          TXINTSTATRAW;
+       dv_reg          TXINTSTATMASKED;
+       dv_reg          TXINTMASKSET;
+       dv_reg          TXINTMASKCLEAR;
+       dv_reg          MACINVECTOR;
+       u_int8_t        RSVD2[12];
+       dv_reg          RXINTSTATRAW;
+       dv_reg          RXINTSTATMASKED;
+       dv_reg          RXINTMASKSET;
+       dv_reg          RXINTMASKCLEAR;
+       dv_reg          MACINTSTATRAW;
+       dv_reg          MACINTSTATMASKED;
+       dv_reg          MACINTMASKSET;
+       dv_reg          MACINTMASKCLEAR;
+       u_int8_t        RSVD3[64];
+       dv_reg          RXMBPENABLE;
+       dv_reg          RXUNICASTSET;
+       dv_reg          RXUNICASTCLEAR;
+       dv_reg          RXMAXLEN;
+       dv_reg          RXBUFFEROFFSET;
+       dv_reg          RXFILTERLOWTHRESH;
+       u_int8_t        RSVD4[8];
+       dv_reg          RX0FLOWTHRESH;
+       dv_reg          RX1FLOWTHRESH;
+       dv_reg          RX2FLOWTHRESH;
+       dv_reg          RX3FLOWTHRESH;
+       dv_reg          RX4FLOWTHRESH;
+       dv_reg          RX5FLOWTHRESH;
+       dv_reg          RX6FLOWTHRESH;
+       dv_reg          RX7FLOWTHRESH;
+       dv_reg          RX0FREEBUFFER;
+       dv_reg          RX1FREEBUFFER;
+       dv_reg          RX2FREEBUFFER;
+       dv_reg          RX3FREEBUFFER;
+       dv_reg          RX4FREEBUFFER;
+       dv_reg          RX5FREEBUFFER;
+       dv_reg          RX6FREEBUFFER;
+       dv_reg          RX7FREEBUFFER;
+       dv_reg          MACCONTROL;
+       dv_reg          MACSTATUS;
+       dv_reg          EMCONTROL;
+       dv_reg          FIFOCONTROL;
+       dv_reg          MACCONFIG;
+       dv_reg          SOFTRESET;
+       u_int8_t        RSVD5[88];
+       dv_reg          MACSRCADDRLO;
+       dv_reg          MACSRCADDRHI;
+       dv_reg          MACHASH1;
+       dv_reg          MACHASH2;
+       dv_reg          BOFFTEST;
+       dv_reg          TPACETEST;
+       dv_reg          RXPAUSE;
+       dv_reg          TXPAUSE;
+       u_int8_t        RSVD6[16];
+       dv_reg          RXGOODFRAMES;
+       dv_reg          RXBCASTFRAMES;
+       dv_reg          RXMCASTFRAMES;
+       dv_reg          RXPAUSEFRAMES;
+       dv_reg          RXCRCERRORS;
+       dv_reg          RXALIGNCODEERRORS;
+       dv_reg          RXOVERSIZED;
+       dv_reg          RXJABBER;
+       dv_reg          RXUNDERSIZED;
+       dv_reg          RXFRAGMENTS;
+       dv_reg          RXFILTERED;
+       dv_reg          RXQOSFILTERED;
+       dv_reg          RXOCTETS;
+       dv_reg          TXGOODFRAMES;
+       dv_reg          TXBCASTFRAMES;
+       dv_reg          TXMCASTFRAMES;
+       dv_reg          TXPAUSEFRAMES;
+       dv_reg          TXDEFERRED;
+       dv_reg          TXCOLLISION;
+       dv_reg          TXSINGLECOLL;
+       dv_reg          TXMULTICOLL;
+       dv_reg          TXEXCESSIVECOLL;
+       dv_reg          TXLATECOLL;
+       dv_reg          TXUNDERRUN;
+       dv_reg          TXCARRIERSENSE;
+       dv_reg          TXOCTETS;
+       dv_reg          FRAME64;
+       dv_reg          FRAME65T127;
+       dv_reg          FRAME128T255;
+       dv_reg          FRAME256T511;
+       dv_reg          FRAME512T1023;
+       dv_reg          FRAME1024TUP;
+       dv_reg          NETOCTETS;
+       dv_reg          RXSOFOVERRUNS;
+       dv_reg          RXMOFOVERRUNS;
+       dv_reg          RXDMAOVERRUNS;
+       u_int8_t        RSVD7[624];
+       dv_reg          MACADDRLO;
+       dv_reg          MACADDRHI;
+       dv_reg          MACINDEX;
+       u_int8_t        RSVD8[244];
+       dv_reg          TX0HDP;
+       dv_reg          TX1HDP;
+       dv_reg          TX2HDP;
+       dv_reg          TX3HDP;
+       dv_reg          TX4HDP;
+       dv_reg          TX5HDP;
+       dv_reg          TX6HDP;
+       dv_reg          TX7HDP;
+       dv_reg          RX0HDP;
+       dv_reg          RX1HDP;
+       dv_reg          RX2HDP;
+       dv_reg          RX3HDP;
+       dv_reg          RX4HDP;
+       dv_reg          RX5HDP;
+       dv_reg          RX6HDP;
+       dv_reg          RX7HDP;
+       dv_reg          TX0CP;
+       dv_reg          TX1CP;
+       dv_reg          TX2CP;
+       dv_reg          TX3CP;
+       dv_reg          TX4CP;
+       dv_reg          TX5CP;
+       dv_reg          TX6CP;
+       dv_reg          TX7CP;
+       dv_reg          RX0CP;
+       dv_reg          RX1CP;
+       dv_reg          RX2CP;
+       dv_reg          RX3CP;
+       dv_reg          RX4CP;
+       dv_reg          RX5CP;
+       dv_reg          RX6CP;
+       dv_reg          RX7CP;
+} emac_regs;
+
+/* EMAC Wrapper Registers Structure */
+typedef struct  {
+#ifdef DAVINCI_EMAC_VERSION2
+       dv_reg          idver;
+       dv_reg          softrst;
+       dv_reg          emctrl;
+       dv_reg          c0rxthreshen;
+       dv_reg          c0rxen;
+       dv_reg          c0txen;
+       dv_reg          c0miscen;
+       dv_reg          c1rxthreshen;
+       dv_reg          c1rxen;
+       dv_reg          c1txen;
+       dv_reg          c1miscen;
+       dv_reg          c2rxthreshen;
+       dv_reg          c2rxen;
+       dv_reg          c2txen;
+       dv_reg          c2miscen;
+       dv_reg          c0rxthreshstat;
+       dv_reg          c0rxstat;
+       dv_reg          c0txstat;
+       dv_reg          c0miscstat;
+       dv_reg          c1rxthreshstat;
+       dv_reg          c1rxstat;
+       dv_reg          c1txstat;
+       dv_reg          c1miscstat;
+       dv_reg          c2rxthreshstat;
+       dv_reg          c2rxstat;
+       dv_reg          c2txstat;
+       dv_reg          c2miscstat;
+       dv_reg          c0rximax;
+       dv_reg          c0tximax;
+       dv_reg          c1rximax;
+       dv_reg          c1tximax;
+       dv_reg          c2rximax;
+       dv_reg          c2tximax;
+#else
+       u_int8_t        RSVD0[4100];
+       dv_reg          EWCTL;
+       dv_reg          EWINTTCNT;
+#endif
+} ewrap_regs;
+
+/* EMAC MDIO Registers Structure */
+typedef struct  {
+       dv_reg          VERSION;
+       dv_reg          CONTROL;
+       dv_reg          ALIVE;
+       dv_reg          LINK;
+       dv_reg          LINKINTRAW;
+       dv_reg          LINKINTMASKED;
+       u_int8_t        RSVD0[8];
+       dv_reg          USERINTRAW;
+       dv_reg          USERINTMASKED;
+       dv_reg          USERINTMASKSET;
+       dv_reg          USERINTMASKCLEAR;
+       u_int8_t        RSVD1[80];
+       dv_reg          USERACCESS0;
+       dv_reg          USERPHYSEL0;
+       dv_reg          USERACCESS1;
+       dv_reg          USERPHYSEL1;
+} mdio_regs;
+
+int davinci_eth_phy_read(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t *data);
+int davinci_eth_phy_write(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t data);
+
+typedef struct {
+       char    name[64];
+       int     (*init)(int phy_addr);
+       int     (*is_phy_connected)(int phy_addr);
+       int     (*get_link_speed)(int phy_addr);
+       int     (*auto_negotiate)(int phy_addr);
+} phy_t;
+
+#endif /* _DAVINCI_EMAC_H_ */
index bfe87faa2f9fd34ed81917352335509f9f53579f..15d0a6e7410ec5b5a2338f978f26c0415d99af8a 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <miiphy.h>
 #include <asm/io.h>
+#include <asm/unaligned.h>
 
 #include "dnet.h"
 
@@ -133,15 +134,12 @@ static int dnet_send(struct eth_device *netdev, volatile void *packet,
                     int length)
 {
        struct dnet_device *dnet = to_dnet(netdev);
-       int i, len, wrsz;
+       int i, wrsz;
        unsigned int *bufp;
        unsigned int tx_cmd;
 
        debug(DRIVERNAME "[%s] Sending %u bytes\n", __func__, length);
 
-       /* frame size (words) */
-       len = (length + 3) >> 2;
-
        bufp = (unsigned int *) (((u32)packet) & 0xFFFFFFFC);
        wrsz = (u32)length + 3;
        wrsz += ((u32)packet) & 0x3;
@@ -206,11 +204,11 @@ static void dnet_set_hwaddr(struct eth_device *netdev)
        struct dnet_device *dnet = to_dnet(netdev);
        u16 tmp;
 
-       tmp = cpu_to_be16(*((u16 *)netdev->enetaddr));
+       tmp = get_unaligned_be16(netdev->enetaddr);
        dnet_writew_mac(dnet, DNET_INTERNAL_MAC_ADDR_0_REG, tmp);
-       tmp = cpu_to_be16(*((u16 *)(netdev->enetaddr + 2)));
+       tmp = get_unaligned_be16(&netdev->enetaddr[2]);
        dnet_writew_mac(dnet, DNET_INTERNAL_MAC_ADDR_1_REG, tmp);
-       tmp = cpu_to_be16(*((u16 *)(netdev->enetaddr + 4)));
+       tmp = get_unaligned_be16(&netdev->enetaddr[4]);
        dnet_writew_mac(dnet, DNET_INTERNAL_MAC_ADDR_2_REG, tmp);
 }
 
index 6eab7b2cfb091b1e9a4f6135435fa141d9ec9c22..6b71bd901e22871c5cf2905966fd458d9620333f 100644 (file)
@@ -1370,7 +1370,6 @@ e1000_reset_hw(struct e1000_hw *hw)
 {
        uint32_t ctrl;
        uint32_t ctrl_ext;
-       uint32_t icr;
        uint32_t manc;
        uint32_t pba = 0;
 
@@ -1443,7 +1442,7 @@ e1000_reset_hw(struct e1000_hw *hw)
        E1000_WRITE_REG(hw, IMC, 0xffffffff);
 
        /* Clear any pending interrupt events. */
-       icr = E1000_READ_REG(hw, ICR);
+       E1000_READ_REG(hw, ICR);
 
        /* If MWI was previously enabled, reenable it. */
        if (hw->mac_type == e1000_82542_rev2_0) {
@@ -4447,7 +4446,8 @@ e1000_phy_init_script(struct e1000_hw *hw)
                mdelay(20);
 
                /* Now enable the transmitter */
-               e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
+               if (!ret_val)
+                       e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
 
                if (hw->mac_type == e1000_82547) {
                        uint16_t fused, fine, coarse;
index d8400d4590c1957915a6ca86a6600397ca045a01..fd1d8f8717f2c90dc5b45cd869b52edfe6a224f9 100644 (file)
@@ -1678,14 +1678,6 @@ struct e1000_hw {
 #define EEPROM_EWEN_OPCODE  0x13       /* EERPOM erase/write enable */
 #define EEPROM_EWDS_OPCODE  0x10       /* EERPOM erast/write disable */
 
-/* EEPROM Word Offsets */
-#define EEPROM_COMPAT             0x0003
-#define EEPROM_ID_LED_SETTINGS    0x0004
-#define EEPROM_INIT_CONTROL1_REG   0x000A
-#define EEPROM_INIT_CONTROL2_REG   0x000F
-#define EEPROM_FLASH_VERSION      0x0032
-#define EEPROM_CHECKSUM_REG       0x003F
-
 /* Word definitions for ID LED Settings */
 #define ID_LED_RESERVED_0000 0x0000
 #define ID_LED_RESERVED_FFFF 0xFFFF
@@ -2479,7 +2471,6 @@ struct e1000_hw {
 #define ADVERTISE_100_FULL             0x0008
 #define ADVERTISE_1000_HALF            0x0010
 #define ADVERTISE_1000_FULL            0x0020
-#define AUTONEG_ADVERTISE_SPEED_DEFAULT 0x002F /* Everything but 1000-Half */
 
 #define ICH_FLASH_GFPREG   0x0000
 #define ICH_FLASH_HSFSTS   0x0004
@@ -2504,7 +2495,6 @@ struct e1000_hw {
 #define ICH_GFPREG_BASE_MASK       0x1FFF
 #define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF
 
-#define E1000_EEWR     0x0102C  /* EEPROM Write Register - RW */
 #define E1000_SW_FW_SYNC 0x05B5C /* Software-Firmware Synchronization - RW */
 
 /* SPI EEPROM Status Register */
@@ -2599,7 +2589,6 @@ struct e1000_hw {
 #define PHY_CFG_TIMEOUT             100
 #define DEFAULT_80003ES2LAN_TIPG_IPGT_10_100 0x00000009
 #define DEFAULT_80003ES2LAN_TIPG_IPGT_1000   0x00000008
-#define E1000_TXDMAC_DPP 0x00000001
 #define AUTO_ALL_MODES 0
 
 #ifndef E1000_MASTER_SLAVE
index d55cacdac8c0acf9b453d0341c779b2856b77571..e2011aef4aa41a12e7ac4df2d41eb10b78fb87c7 100644 (file)
@@ -432,7 +432,6 @@ static void enc_receive(enc_dev_t *enc)
        u16 pkt_len;
        u16 copy_len;
        u16 status;
-       u8 eir_reg;
        u8 pkt_cnt = 0;
        u16 rxbuf_rdpt;
        u8 hbuf[6];
@@ -476,7 +475,7 @@ static void enc_receive(enc_dev_t *enc)
                /* read pktcnt */
                pkt_cnt = enc_r8(enc, CTL_REG_EPKTCNT);
                if (copy_len == 0) {
-                       eir_reg = enc_r8(enc, CTL_REG_EIR);
+                       (void)enc_r8(enc, CTL_REG_EIR);
                        enc_reset_rx(enc);
                        printf("%s: receive copy_len=0\n", enc->dev->name);
                        continue;
@@ -489,7 +488,7 @@ static void enc_receive(enc_dev_t *enc)
                NetReceive(packet, pkt_len);
                if (enc_claim_bus(enc))
                        return;
-               eir_reg = enc_r8(enc, CTL_REG_EIR);
+               (void)enc_r8(enc, CTL_REG_EIR);
        } while (pkt_cnt);
        /* Use EPKTCNT not EIR.PKTIF flag, see errata pt. 6 */
 }
@@ -500,14 +499,13 @@ static void enc_receive(enc_dev_t *enc)
 static void enc_poll(enc_dev_t *enc)
 {
        u8 eir_reg;
-       u8 estat_reg;
        u8 pkt_cnt;
 
 #ifdef CONFIG_USE_IRQ
        /* clear global interrupt enable bit in enc28j60 */
        enc_bclr(enc, CTL_REG_EIE, ENC_EIE_INTIE);
 #endif
-       estat_reg = enc_r8(enc, CTL_REG_ESTAT);
+       (void)enc_r8(enc, CTL_REG_ESTAT);
        eir_reg = enc_r8(enc, CTL_REG_EIR);
        if (eir_reg & ENC_EIR_TXIF) {
                /* clear TXIF bit in EIR */
index 0c0c7cd2c738cfc7e89bdce54d88abc7fd42de96..b05a4c0c9a7b383a23df14f81d732fe61a765feb 100644 (file)
@@ -42,6 +42,14 @@ DECLARE_GLOBAL_DATA_PTR;
 #define        CONFIG_FEC_XCV_TYPE     MII100
 #endif
 
+/*
+ * The i.MX28 operates with packets in big endian. We need to swap them before
+ * sending and after receiving.
+ */
+#ifdef CONFIG_MX28
+#define        CONFIG_FEC_MXC_SWAP_PACKET
+#endif
+
 #undef DEBUG
 
 struct nbuf {
@@ -51,6 +59,32 @@ struct nbuf {
        uint8_t head[16];       /**< MAC header(6 + 6 + 2) + 2(aligned) */
 };
 
+#ifdef CONFIG_FEC_MXC_SWAP_PACKET
+static void swap_packet(uint32_t *packet, int length)
+{
+       int i;
+
+       for (i = 0; i < DIV_ROUND_UP(length, 4); i++)
+               packet[i] = __swab32(packet[i]);
+}
+#endif
+
+/*
+ * The i.MX28 has two ethernet interfaces, but they are not equal.
+ * Only the first one can access the MDIO bus.
+ */
+#ifdef CONFIG_MX28
+static inline struct ethernet_regs *fec_miiphy_fec_to_eth(struct fec_priv *fec)
+{
+       return (struct ethernet_regs *)MXS_ENET0_BASE;
+}
+#else
+static inline struct ethernet_regs *fec_miiphy_fec_to_eth(struct fec_priv *fec)
+{
+       return fec->eth;
+}
+#endif
+
 /*
  * MII-interface related functions
  */
@@ -59,7 +93,7 @@ static int fec_miiphy_read(const char *dev, uint8_t phyAddr, uint8_t regAddr,
 {
        struct eth_device *edev = eth_get_dev_by_name(dev);
        struct fec_priv *fec = (struct fec_priv *)edev->priv;
-       struct ethernet_regs *eth = fec->eth;
+       struct ethernet_regs *eth = fec_miiphy_fec_to_eth(fec);
 
        uint32_t reg;           /* convenient holder for the PHY register */
        uint32_t phy;           /* convenient holder for the PHY */
@@ -117,7 +151,7 @@ static int fec_miiphy_write(const char *dev, uint8_t phyAddr, uint8_t regAddr,
 {
        struct eth_device *edev = eth_get_dev_by_name(dev);
        struct fec_priv *fec = (struct fec_priv *)edev->priv;
-       struct ethernet_regs *eth = fec->eth;
+       struct ethernet_regs *eth = fec_miiphy_fec_to_eth(fec);
 
        uint32_t reg;           /* convenient holder for the PHY register */
        uint32_t phy;           /* convenient holder for the PHY */
@@ -572,6 +606,9 @@ static int fec_send(struct eth_device *dev, volatile void* packet, int length)
         * Note: We are always using the first buffer for transmission,
         * the second will be empty and only used to stop the DMA engine
         */
+#ifdef CONFIG_FEC_MXC_SWAP_PACKET
+       swap_packet((uint32_t *)packet, length);
+#endif
        writew(length, &fec->tbd_base[fec->tbd_index].data_length);
        writel((uint32_t)packet, &fec->tbd_base[fec->tbd_index].data_pointer);
        /*
@@ -668,6 +705,9 @@ static int fec_recv(struct eth_device *dev)
                        /*
                         *  Fill the buffer and pass it to upper layers
                         */
+#ifdef CONFIG_FEC_MXC_SWAP_PACKET
+                       swap_packet((uint32_t *)frame->data, frame_length);
+#endif
                        memcpy(buff, frame->data, frame_length);
                        NetReceive(buff, frame_length);
                        len = frame_length;
index 23ef14baf4ff98a12a2833d552e50022bf8952c8..0b8c33fb7a34eed43a3a32fd6c0c527fef818414 100644 (file)
 #include "fm.h"
 #include "../../qe/qe.h"               /* For struct qe_firmware */
 
-#ifdef CONFIG_SYS_QE_FW_IN_NAND
+#ifdef CONFIG_SYS_QE_FMAN_FW_IN_NAND
 #include <nand.h>
 #elif defined(CONFIG_SYS_QE_FW_IN_SPIFLASH)
 #include <spi_flash.h>
-#elif defined(CONFIG_SYS_QE_FW_IN_MMC)
+#elif defined(CONFIG_SYS_QE_FMAN_FW_IN_MMC)
 #include <mmc.h>
 #endif
 
@@ -363,21 +363,21 @@ int fm_init_common(int index, struct ccsr_fman *reg)
 {
        int rc;
        char env_addr[32];
-#if defined(CONFIG_SYS_FMAN_FW_ADDR)
-       void *addr = (void *)CONFIG_SYS_FMAN_FW_ADDR;
-#elif defined(CONFIG_SYS_QE_FW_IN_NAND)
-       size_t fw_length = CONFIG_SYS_FMAN_FW_LENGTH;
-       void *addr = malloc(CONFIG_SYS_FMAN_FW_LENGTH);
+#if defined(CONFIG_SYS_QE_FMAN_FW_IN_NOR)
+       void *addr = (void *)CONFIG_SYS_QE_FMAN_FW_ADDR;
+#elif defined(CONFIG_SYS_QE_FMAN_FW_IN_NAND)
+       size_t fw_length = CONFIG_SYS_QE_FMAN_FW_LENGTH;
+       void *addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
 
-       rc = nand_read(&nand_info[0], (loff_t)CONFIG_SYS_QE_FW_IN_NAND,
+       rc = nand_read(&nand_info[0], (loff_t)CONFIG_SYS_QE_FMAN_FW_ADDR,
                       &fw_length, (u_char *)addr);
        if (rc == -EUCLEAN) {
                printf("NAND read of FMAN firmware at offset 0x%x failed %d\n",
-                       CONFIG_SYS_QE_FW_IN_NAND, rc);
+                       CONFIG_SYS_QE_FMAN_FW_ADDR, rc);
        }
 #elif defined(CONFIG_SYS_QE_FW_IN_SPIFLASH)
        struct spi_flash *ucode_flash;
-       void *addr = malloc(CONFIG_SYS_FMAN_FW_LENGTH);
+       void *addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
        int ret = 0;
 
        ucode_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
@@ -385,18 +385,17 @@ int fm_init_common(int index, struct ccsr_fman *reg)
        if (!ucode_flash)
                printf("SF: probe for ucode failed\n");
        else {
-               ret = spi_flash_read(ucode_flash, CONFIG_SYS_QE_FW_IN_SPIFLASH,
-                               CONFIG_SYS_FMAN_FW_LENGTH, addr);
+               ret = spi_flash_read(ucode_flash, CONFIG_SYS_QE_FMAN_FW_ADDR,
+                               CONFIG_SYS_QE_FMAN_FW_LENGTH, addr);
                if (ret)
                        printf("SF: read for ucode failed\n");
                spi_flash_free(ucode_flash);
        }
-#elif defined(CONFIG_SYS_QE_FW_IN_MMC)
+#elif defined(CONFIG_SYS_QE_FMAN_FW_IN_MMC)
        int dev = CONFIG_SYS_MMC_ENV_DEV;
-       void *addr = malloc(CONFIG_SYS_FMAN_FW_LENGTH);
-       u32 cnt = CONFIG_SYS_FMAN_FW_LENGTH / 512;
-       u32 n;
-       u32 blk = CONFIG_SYS_QE_FW_IN_MMC / 512;
+       void *addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
+       u32 cnt = CONFIG_SYS_QE_FMAN_FW_LENGTH / 512;
+       u32 blk = CONFIG_SYS_QE_FMAN_FW_ADDR / 512;
        struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
 
        if (!mmc)
@@ -405,7 +404,7 @@ int fm_init_common(int index, struct ccsr_fman *reg)
                printf("\nMMC read: dev # %u, block # %u, count %u ...\n",
                                dev, blk, cnt);
                mmc_init(mmc);
-               n = mmc->block_dev.block_read(dev, blk, cnt, addr);
+               (void)mmc->block_dev.block_read(dev, blk, cnt, addr);
                /* flush cache after read */
                flush_cache((ulong)addr, cnt * 512);
        }
index 883f3a7c5d00ce392edbbb9c9cd11e6934f4d42d..24b28da249b0375a16d72255124ee8af3e7e2ef6 100644 (file)
@@ -63,6 +63,7 @@
 #include <malloc.h>
 #include "lan91c96.h"
 #include <net.h>
+#include <linux/compiler.h>
 
 /*------------------------------------------------------------------------
  *
@@ -154,7 +155,7 @@ static void smc_set_mac_addr(const unsigned char *addr)
  ***********************************************/
 void dump_memory_info(struct eth_device *dev)
 {
-       word mem_info;
+       __maybe_unused word mem_info;
        word old_bank;
 
        old_bank = SMC_inw(dev, LAN91C96_BANK_SELECT) & 0xF;
@@ -317,7 +318,6 @@ static int smc_send_packet(struct eth_device *dev, volatile void *packet,
                int packet_length)
 {
        byte packet_no;
-       unsigned long ioaddr;
        byte *buf;
        int length;
        int numPages;
@@ -381,9 +381,6 @@ static int smc_send_packet(struct eth_device *dev, volatile void *packet,
                         dev->name, try);
 
        /* I can send the packet now.. */
-
-       ioaddr = dev->iobase;
-
        buf = (byte *) packet;
 
        /* If I get here, I _know_ there is a packet slot waiting for me */
index 6fbb0e3cbfa1c77f8a0ac06c8076c194743294bb..bef15225a3c4ddba2abb582d14f4436bb5731a5d 100644 (file)
@@ -68,7 +68,7 @@ typedef unsigned long int             dword;
 
 #define        SMC_IO_EXTENT   16
 
-#ifdef CONFIG_PXA250
+#ifdef CONFIG_CPU_PXA25X
 
 #ifdef CONFIG_LUBBOCK
 #define        SMC_IO_SHIFT    2
@@ -146,7 +146,7 @@ typedef unsigned long int           dword;
                                        };  \
                                })
 
-#else /* if not CONFIG_PXA250 */
+#else /* if not CONFIG_CPU_PXA25X */
 
 /*
  * We have only 16 Bit PCMCIA access on Socket 0
index fd13428b4e20694f663a55fdc3b9cda7a09c80ac..de7cdd7ba7bdab6d0d3b91095f35a8e41501b29e 100644 (file)
@@ -531,6 +531,7 @@ static int mvgbe_send(struct eth_device *dev, void *dataptr,
        struct mvgbe_txdesc *p_txdesc = dmvgbe->p_txdesc;
        void *p = (void *)dataptr;
        u32 cmd_sts;
+       u32 txuq0_reg_addr;
 
        /* Copy buffer if it's misaligned */
        if ((u32) dataptr & 0x07) {
@@ -552,7 +553,8 @@ static int mvgbe_send(struct eth_device *dev, void *dataptr,
        p_txdesc->byte_cnt = datasize;
 
        /* Set this tc desc as zeroth TXUQ */
-       MVGBE_REG_WR(regs->tcqdp[TXUQ], (u32) p_txdesc);
+       txuq0_reg_addr = (u32)&regs->tcqdp[TXUQ];
+       writel((u32) p_txdesc, txuq0_reg_addr);
 
        /* ensure tx desc writes above are performed before we start Tx DMA */
        isb();
@@ -583,6 +585,7 @@ static int mvgbe_recv(struct eth_device *dev)
        struct mvgbe_rxdesc *p_rxdesc_curr = dmvgbe->p_rxdesc_curr;
        u32 cmd_sts;
        u32 timeout = 0;
+       u32 rxdesc_curr_addr;
 
        /* wait untill rx packet available or timeout */
        do {
@@ -637,8 +640,8 @@ static int mvgbe_recv(struct eth_device *dev)
        p_rxdesc_curr->buf_size = PKTSIZE_ALIGN;
        p_rxdesc_curr->byte_cnt = 0;
 
-       writel((unsigned)p_rxdesc_curr->nxtdesc_p,
-               (u32) &dmvgbe->p_rxdesc_curr);
+       rxdesc_curr_addr = (u32)&dmvgbe->p_rxdesc_curr;
+       writel((unsigned)p_rxdesc_curr->nxtdesc_p, rxdesc_curr_addr);
 
        return 0;
 }
index a59834b292d8cb1503db30ae8d1f7474bb3e4cfb..feced39a4252b65d9e8e3a548cc30be216a04534 100644 (file)
@@ -38,6 +38,7 @@ COBJS-$(CONFIG_PHY_MARVELL) += marvell.o
 COBJS-$(CONFIG_PHY_MICREL) += micrel.o
 COBJS-$(CONFIG_PHY_NATSEMI) += natsemi.o
 COBJS-$(CONFIG_PHY_REALTEK) += realtek.o
+COBJS-$(CONFIG_PHY_SMSC) += smsc.o
 COBJS-$(CONFIG_PHY_TERANETICS) += teranetics.o
 COBJS-$(CONFIG_PHY_VITESSE) += vitesse.o
 
index bd1cdc4f11d63ea56b13b77ea283d9aa61a680bd..e51e799e2933803ddc73401e6400b9db8a2d0b78 100644 (file)
 #define MIIM_88E1111_PHY_LED_DIRECT    0x4100
 #define MIIM_88E1111_PHY_LED_COMBINE   0x411C
 
+/* 88E1111 Extended PHY Specific Control Register */
+#define MIIM_88E1111_PHY_EXT_CR                0x14
+#define MIIM_88E1111_RX_DELAY          0x80
+#define MIIM_88E1111_TX_DELAY          0x2
+
+/* 88E1111 Extended PHY Specific Status Register */
+#define MIIM_88E1111_PHY_EXT_SR                0x1b
+#define MIIM_88E1111_HWCFG_MODE_MASK           0xf
+#define MIIM_88E1111_HWCFG_MODE_COPPER_RGMII   0xb
+#define MIIM_88E1111_HWCFG_MODE_FIBER_RGMII    0x3
+#define MIIM_88E1111_HWCFG_MODE_SGMII_NO_CLK   0x4
+#define MIIM_88E1111_HWCFG_MODE_COPPER_RTBI    0x9
+#define MIIM_88E1111_HWCFG_FIBER_COPPER_AUTO   0x8000
+#define MIIM_88E1111_HWCFG_FIBER_COPPER_RES    0x2000
+
+#define MIIM_88E1111_COPPER            0
+#define MIIM_88E1111_FIBER             1
+
 /* 88E1118 PHY defines */
 #define MIIM_88E1118_PHY_PAGE          22
 #define MIIM_88E1118_PHY_LED_PAGE      3
@@ -162,19 +180,102 @@ static int m88e1011s_startup(struct phy_device *phydev)
 static int m88e1111s_config(struct phy_device *phydev)
 {
        int reg;
+       int timeout;
 
        if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) ||
                        (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) ||
                        (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
                        (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)) {
-               reg = phy_read(phydev, MDIO_DEVAD_NONE, 0x1b);
-               reg = (reg & 0xfff0) | 0xb;
-               phy_write(phydev, MDIO_DEVAD_NONE, 0x1b, reg);
-       } else {
-               phy_write(phydev, MDIO_DEVAD_NONE, 0x1b, 0x1f);
+               reg = phy_read(phydev,
+                       MDIO_DEVAD_NONE, MIIM_88E1111_PHY_EXT_CR);
+               if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) ||
+                       (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)) {
+                       reg |= (MIIM_88E1111_RX_DELAY | MIIM_88E1111_TX_DELAY);
+               } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) {
+                       reg &= ~MIIM_88E1111_TX_DELAY;
+                       reg |= MIIM_88E1111_RX_DELAY;
+               } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) {
+                       reg &= ~MIIM_88E1111_RX_DELAY;
+                       reg |= MIIM_88E1111_TX_DELAY;
+               }
+
+               phy_write(phydev,
+                       MDIO_DEVAD_NONE, MIIM_88E1111_PHY_EXT_CR, reg);
+
+               reg = phy_read(phydev,
+                       MDIO_DEVAD_NONE, MIIM_88E1111_PHY_EXT_SR);
+
+               reg &= ~(MIIM_88E1111_HWCFG_MODE_MASK);
+
+               if (reg & MIIM_88E1111_HWCFG_FIBER_COPPER_RES)
+                       reg |= MIIM_88E1111_HWCFG_MODE_FIBER_RGMII;
+               else
+                       reg |= MIIM_88E1111_HWCFG_MODE_COPPER_RGMII;
+
+               phy_write(phydev,
+                       MDIO_DEVAD_NONE, MIIM_88E1111_PHY_EXT_SR, reg);
        }
 
-       phy_write(phydev, MDIO_DEVAD_NONE, 0x14, 0x0cd2);
+       if (phydev->interface == PHY_INTERFACE_MODE_SGMII) {
+               reg = phy_read(phydev,
+                       MDIO_DEVAD_NONE, MIIM_88E1111_PHY_EXT_SR);
+
+               reg &= ~(MIIM_88E1111_HWCFG_MODE_MASK);
+               reg |= MIIM_88E1111_HWCFG_MODE_SGMII_NO_CLK;
+               reg |= MIIM_88E1111_HWCFG_FIBER_COPPER_AUTO;
+
+               phy_write(phydev, MDIO_DEVAD_NONE,
+                       MIIM_88E1111_PHY_EXT_SR, reg);
+       }
+
+       if (phydev->interface == PHY_INTERFACE_MODE_RTBI) {
+               reg = phy_read(phydev,
+                       MDIO_DEVAD_NONE, MIIM_88E1111_PHY_EXT_CR);
+               reg |= (MIIM_88E1111_RX_DELAY | MIIM_88E1111_TX_DELAY);
+               phy_write(phydev,
+                       MDIO_DEVAD_NONE, MIIM_88E1111_PHY_EXT_CR, reg);
+
+               reg = phy_read(phydev, MDIO_DEVAD_NONE,
+                       MIIM_88E1111_PHY_EXT_SR);
+               reg &= ~(MIIM_88E1111_HWCFG_MODE_MASK |
+                       MIIM_88E1111_HWCFG_FIBER_COPPER_RES);
+               reg |= 0x7 | MIIM_88E1111_HWCFG_FIBER_COPPER_AUTO;
+               phy_write(phydev, MDIO_DEVAD_NONE,
+                       MIIM_88E1111_PHY_EXT_SR, reg);
+
+               /* soft reset */
+               timeout = 1000;
+               phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);
+               udelay(1000);
+               reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
+               while ((reg & BMCR_RESET) && --timeout) {
+                       udelay(1000);
+                       reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
+               }
+               if (!timeout)
+                       printf("%s: phy soft reset timeout\n", __func__);
+
+               reg = phy_read(phydev, MDIO_DEVAD_NONE,
+                       MIIM_88E1111_PHY_EXT_SR);
+               reg &= ~(MIIM_88E1111_HWCFG_MODE_MASK |
+                       MIIM_88E1111_HWCFG_FIBER_COPPER_RES);
+               reg |= MIIM_88E1111_HWCFG_MODE_COPPER_RTBI |
+                       MIIM_88E1111_HWCFG_FIBER_COPPER_AUTO;
+               phy_write(phydev, MDIO_DEVAD_NONE,
+                       MIIM_88E1111_PHY_EXT_SR, reg);
+       }
+
+       /* soft reset */
+       timeout = 1000;
+       phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);
+       udelay(1000);
+       reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
+       while ((reg & BMCR_RESET) && --timeout) {
+               udelay(1000);
+               reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
+       }
+       if (!timeout)
+               printf("%s: phy soft reset timeout\n", __func__);
 
        genphy_config_aneg(phydev);
 
index 8da7688d704e529c7869b7db682f4c03b8ecd414..eb551803e5c749dbcdafb1ed2f0f000f620741e4 100644 (file)
@@ -444,6 +444,9 @@ int phy_init(void)
 #ifdef CONFIG_PHY_REALTEK
        phy_realtek_init();
 #endif
+#ifdef CONFIG_PHY_SMSC
+       phy_smsc_init();
+#endif
 #ifdef CONFIG_PHY_TERANETICS
        phy_teranetics_init();
 #endif
diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c
new file mode 100644 (file)
index 0000000..6dee8eb
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * SMSC PHY drivers
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * Base code from drivers/net/phy/davicom.c
+ *   Copyright 2010-2011 Freescale Semiconductor, Inc.
+ *   author Andy Fleming
+ *
+ * Some code get from linux kenrel
+ * Copyright (c) 2006 Herbert Valerio Riedel <hvr@gnu.org>
+ *
+ */
+#include <miiphy.h>
+
+static int smsc_parse_status(struct phy_device *phydev)
+{
+       int mii_reg;
+
+       mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);
+
+       if (mii_reg & (BMSR_100FULL | BMSR_100HALF))
+               phydev->speed = SPEED_100;
+       else
+               phydev->speed = SPEED_10;
+
+       if (mii_reg & (BMSR_10FULL | BMSR_100FULL))
+               phydev->duplex = DUPLEX_FULL;
+       else
+               phydev->duplex = DUPLEX_HALF;
+
+       return 0;
+}
+
+static int smsc_startup(struct phy_device *phydev)
+{
+       genphy_update_link(phydev);
+       smsc_parse_status(phydev);
+       return 0;
+}
+
+static struct phy_driver lan8700_driver = {
+       .name = "SMSC LAN8700",
+       .uid = 0x0007c0c0,
+       .mask = 0xffff0,
+       .features = PHY_BASIC_FEATURES,
+       .config = &genphy_config_aneg,
+       .startup = &smsc_startup,
+       .shutdown = &genphy_shutdown,
+};
+
+static struct phy_driver lan911x_driver = {
+       .name = "SMSC LAN911x Internal PHY",
+       .uid = 0x0007c0d0,
+       .mask = 0xffff0,
+       .features = PHY_BASIC_FEATURES,
+       .config = &genphy_config_aneg,
+       .startup = &smsc_startup,
+       .shutdown = &genphy_shutdown,
+};
+
+static struct phy_driver lan8710_driver = {
+       .name = "SMSC LAN8710/LAN8720",
+       .uid = 0x0007c0f0,
+       .mask = 0xffff0,
+       .features = PHY_GBIT_FEATURES,
+       .config = &genphy_config_aneg,
+       .startup = &smsc_startup,
+       .shutdown = &genphy_shutdown,
+};
+
+int phy_smsc_init(void)
+{
+       phy_register(&lan8710_driver);
+       phy_register(&lan911x_driver);
+       phy_register(&lan8700_driver);
+
+       return 0;
+}
diff --git a/drivers/net/rtl8019.c b/drivers/net/rtl8019.c
deleted file mode 100644 (file)
index f516afe..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Realtek 8019AS Ethernet
- * (C) Copyright 2002-2003
- * Xue Ligong(lgxue@hotmail.com),Wang Kehao, ESLAB, whut.edu.cn
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 code works in 8bit mode.
- * If you need to work in 16bit mode, PLS change it!
- */
-
-#include <common.h>
-#include <command.h>
-#include "rtl8019.h"
-#include <net.h>
-
-/* packet page register access functions */
-
-static unsigned char get_reg (unsigned int regno)
-{
-       return (*(unsigned char *) regno);
-}
-
-static void put_reg (unsigned int regno, unsigned char val)
-{
-       *(volatile unsigned char *) regno = val;
-}
-
-static void eth_reset (void)
-{
-       unsigned char ucTemp;
-
-       /* reset NIC */
-       ucTemp = get_reg (RTL8019_RESET);
-       put_reg (RTL8019_RESET, ucTemp);
-       put_reg (RTL8019_INTERRUPTSTATUS, 0xff);
-       udelay (2000);          /* wait for 2ms */
-}
-
-void rtl8019_get_enetaddr (uchar * addr)
-{
-       unsigned char i;
-       unsigned char temp;
-
-       eth_reset ();
-
-       put_reg (RTL8019_COMMAND, RTL8019_REMOTEDMARD);
-       put_reg (RTL8019_DATACONFIGURATION, 0x48);
-       put_reg (RTL8019_REMOTESTARTADDRESS0, 0x00);
-       put_reg (RTL8019_REMOTESTARTADDRESS1, 0x00);
-       put_reg (RTL8019_REMOTEBYTECOUNT0, 12);
-       put_reg (RTL8019_REMOTEBYTECOUNT1, 0x00);
-       put_reg (RTL8019_COMMAND, RTL8019_REMOTEDMARD);
-       printf ("MAC: ");
-       for (i = 0; i < 6; i++) {
-               temp = get_reg (RTL8019_DMA_DATA);
-               *addr++ = temp;
-               temp = get_reg (RTL8019_DMA_DATA);
-               printf ("%x:", temp);
-       }
-
-       while ((!get_reg (RTL8019_INTERRUPTSTATUS) & 0x40));
-       printf ("\b \n");
-       put_reg (RTL8019_REMOTEBYTECOUNT0, 0x00);
-       put_reg (RTL8019_REMOTEBYTECOUNT1, 0x00);
-       put_reg (RTL8019_COMMAND, RTL8019_PAGE0);
-}
-
-void eth_halt (void)
-{
-       put_reg (RTL8019_COMMAND, 0x01);
-}
-
-int eth_init (bd_t * bd)
-{
-       uchar enetaddr[6];
-       eth_reset ();
-       put_reg (RTL8019_COMMAND, RTL8019_PAGE0STOP);
-       put_reg (RTL8019_DATACONFIGURATION, 0x48);
-       put_reg (RTL8019_REMOTEBYTECOUNT0, 0x00);
-       put_reg (RTL8019_REMOTEBYTECOUNT1, 0x00);
-       put_reg (RTL8019_RECEIVECONFIGURATION, 0x00);   /*00; */
-       put_reg (RTL8019_TRANSMITPAGE, RTL8019_TPSTART);
-       put_reg (RTL8019_TRANSMITCONFIGURATION, 0x02);
-       put_reg (RTL8019_PAGESTART, RTL8019_PSTART);
-       put_reg (RTL8019_BOUNDARY, RTL8019_PSTART);
-       put_reg (RTL8019_PAGESTOP, RTL8019_PSTOP);
-       put_reg (RTL8019_INTERRUPTSTATUS, 0xff);
-       put_reg (RTL8019_INTERRUPTMASK, 0x11);  /*b; */
-       put_reg (RTL8019_COMMAND, RTL8019_PAGE1STOP);
-       eth_getenv_enetaddr("ethaddr", enetaddr);
-       put_reg (RTL8019_PHYSICALADDRESS0, enetaddr[0]);
-       put_reg (RTL8019_PHYSICALADDRESS1, enetaddr[1]);
-       put_reg (RTL8019_PHYSICALADDRESS2, enetaddr[2]);
-       put_reg (RTL8019_PHYSICALADDRESS3, enetaddr[3]);
-       put_reg (RTL8019_PHYSICALADDRESS4, enetaddr[4]);
-       put_reg (RTL8019_PHYSICALADDRESS5, enetaddr[5]);
-       put_reg (RTL8019_MULTIADDRESS0, 0x00);
-       put_reg (RTL8019_MULTIADDRESS1, 0x00);
-       put_reg (RTL8019_MULTIADDRESS2, 0x00);
-       put_reg (RTL8019_MULTIADDRESS3, 0x00);
-       put_reg (RTL8019_MULTIADDRESS4, 0x00);
-       put_reg (RTL8019_MULTIADDRESS5, 0x00);
-       put_reg (RTL8019_MULTIADDRESS6, 0x00);
-       put_reg (RTL8019_MULTIADDRESS7, 0x00);
-       put_reg (RTL8019_CURRENT, RTL8019_PSTART);
-       put_reg (RTL8019_COMMAND, RTL8019_PAGE0);
-       put_reg (RTL8019_TRANSMITCONFIGURATION, 0xe0);  /*58; */
-
-       return 0;
-}
-
-static unsigned char nic_to_pc (void)
-{
-       unsigned char rec_head_status;
-       unsigned char next_packet_pointer;
-       unsigned char packet_length0;
-       unsigned char packet_length1;
-       unsigned short rxlen = 0;
-       unsigned int i = 4;
-       unsigned char current_point;
-       unsigned char *addr;
-
-       /*
-        * The RTL8019's first 4B is packet status,page of next packet
-        * and packet length(2B).So we receive the fist 4B.
-        */
-       put_reg (RTL8019_REMOTESTARTADDRESS1, get_reg (RTL8019_BOUNDARY));
-       put_reg (RTL8019_REMOTESTARTADDRESS0, 0x00);
-       put_reg (RTL8019_REMOTEBYTECOUNT1, 0x00);
-       put_reg (RTL8019_REMOTEBYTECOUNT0, 0x04);
-
-       put_reg (RTL8019_COMMAND, RTL8019_REMOTEDMARD);
-
-       rec_head_status = get_reg (RTL8019_DMA_DATA);
-       next_packet_pointer = get_reg (RTL8019_DMA_DATA);
-       packet_length0 = get_reg (RTL8019_DMA_DATA);
-       packet_length1 = get_reg (RTL8019_DMA_DATA);
-
-       put_reg (RTL8019_COMMAND, RTL8019_PAGE0);
-       /*Packet length is in two 8bit registers */
-       rxlen = packet_length1;
-       rxlen = (((rxlen << 8) & 0xff00) + packet_length0);
-       rxlen -= 4;
-
-       if (rxlen > PKTSIZE_ALIGN + PKTALIGN)
-               printf ("packet too big!\n");
-
-       /*Receive the packet */
-       put_reg (RTL8019_REMOTESTARTADDRESS0, 0x04);
-       put_reg (RTL8019_REMOTESTARTADDRESS1, get_reg (RTL8019_BOUNDARY));
-
-       put_reg (RTL8019_REMOTEBYTECOUNT0, (rxlen & 0xff));
-       put_reg (RTL8019_REMOTEBYTECOUNT1, ((rxlen >> 8) & 0xff));
-
-
-       put_reg (RTL8019_COMMAND, RTL8019_REMOTEDMARD);
-
-       for (addr = (unsigned char *) NetRxPackets[0], i = rxlen; i > 0; i--)
-               *addr++ = get_reg (RTL8019_DMA_DATA);
-       /* Pass the packet up to the protocol layers. */
-       NetReceive (NetRxPackets[0], rxlen);
-
-       while (!(get_reg (RTL8019_INTERRUPTSTATUS)) & 0x40);    /* wait for the op. */
-
-       /*
-        * To test whether the packets are all received,get the
-        * location of current point
-        */
-       put_reg (RTL8019_COMMAND, RTL8019_PAGE1);
-       current_point = get_reg (RTL8019_CURRENT);
-       put_reg (RTL8019_COMMAND, RTL8019_PAGE0);
-       put_reg (RTL8019_BOUNDARY, next_packet_pointer);
-       return current_point;
-}
-
-/* Get a data block via Ethernet */
-extern int eth_rx (void)
-{
-       unsigned char temp, current_point;
-
-       put_reg (RTL8019_COMMAND, RTL8019_PAGE0);
-
-       while (1) {
-               temp = get_reg (RTL8019_INTERRUPTSTATUS);
-
-               if (temp & 0x90) {
-                       /*overflow */
-                       put_reg (RTL8019_COMMAND, RTL8019_PAGE0STOP);
-                       udelay (2000);
-                       put_reg (RTL8019_REMOTEBYTECOUNT0, 0);
-                       put_reg (RTL8019_REMOTEBYTECOUNT1, 0);
-                       put_reg (RTL8019_TRANSMITCONFIGURATION, 2);
-                       do {
-                               current_point = nic_to_pc ();
-                       } while (get_reg (RTL8019_BOUNDARY) != current_point);
-
-                       put_reg (RTL8019_TRANSMITCONFIGURATION, 0xe0);
-               }
-
-               if (temp & 0x1) {
-                       /*packet received */
-                       do {
-                               put_reg (RTL8019_INTERRUPTSTATUS, 0x01);
-                               current_point = nic_to_pc ();
-                       } while (get_reg (RTL8019_BOUNDARY) != current_point);
-               }
-
-               if (!(temp & 0x1))
-                       return 0;
-               /* done and exit. */
-       }
-}
-
-/* Send a data block via Ethernet. */
-extern int eth_send (volatile void *packet, int length)
-{
-       volatile unsigned char *p;
-       unsigned int pn;
-
-       pn = length;
-       p = (volatile unsigned char *) packet;
-
-       while (get_reg (RTL8019_COMMAND) == RTL8019_TRANSMIT);
-
-       put_reg (RTL8019_REMOTESTARTADDRESS0, 0);
-       put_reg (RTL8019_REMOTESTARTADDRESS1, RTL8019_TPSTART);
-       put_reg (RTL8019_REMOTEBYTECOUNT0, (pn & 0xff));
-       put_reg (RTL8019_REMOTEBYTECOUNT1, ((pn >> 8) & 0xff));
-
-       put_reg (RTL8019_COMMAND, RTL8019_REMOTEDMAWR);
-       while (pn > 0) {
-               put_reg (RTL8019_DMA_DATA, *p++);
-               pn--;
-       }
-
-       pn = length;
-
-       while (pn < 60) {       /*Padding */
-               put_reg (RTL8019_DMA_DATA, 0);
-               pn++;
-       }
-
-       while (!(get_reg (RTL8019_INTERRUPTSTATUS)) & 0x40);
-
-       put_reg (RTL8019_INTERRUPTSTATUS, 0x40);
-       put_reg (RTL8019_TRANSMITPAGE, RTL8019_TPSTART);
-       put_reg (RTL8019_TRANSMITBYTECOUNT0, (pn & 0xff));
-       put_reg (RTL8019_TRANSMITBYTECOUNT1, ((pn >> 8 & 0xff)));
-       put_reg (RTL8019_COMMAND, RTL8019_TRANSMIT);
-
-       return 0;
-}
diff --git a/drivers/net/rtl8019.h b/drivers/net/rtl8019.h
deleted file mode 100644 (file)
index ae5163c..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Realtek 8019AS Ethernet
- * (C) Copyright 2002-2003
- * Xue Ligong(lgxue@hotmail.com),Wang Kehao, ESLAB, whut.edu.cn
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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 code works in 8bit mode.
- * If you need to work in 16bit mode, PLS change it!
- */
-
-#include <asm/types.h>
-#include <config.h>
-
-#ifdef CONFIG_DRIVER_RTL8019
-
-#define RTL8019_REG_00                 (RTL8019_BASE + 0x00)
-#define        RTL8019_REG_01                  (RTL8019_BASE + 0x01)
-#define        RTL8019_REG_02                  (RTL8019_BASE + 0x02)
-#define        RTL8019_REG_03                  (RTL8019_BASE + 0x03)
-#define        RTL8019_REG_04                  (RTL8019_BASE + 0x04)
-#define        RTL8019_REG_05                  (RTL8019_BASE + 0x05)
-#define        RTL8019_REG_06                  (RTL8019_BASE + 0x06)
-#define        RTL8019_REG_07                  (RTL8019_BASE + 0x07)
-#define        RTL8019_REG_08                  (RTL8019_BASE + 0x08)
-#define        RTL8019_REG_09                  (RTL8019_BASE + 0x09)
-#define        RTL8019_REG_0a                  (RTL8019_BASE + 0x0a)
-#define        RTL8019_REG_0b                  (RTL8019_BASE + 0x0b)
-#define        RTL8019_REG_0c                  (RTL8019_BASE + 0x0c)
-#define        RTL8019_REG_0d                  (RTL8019_BASE + 0x0d)
-#define        RTL8019_REG_0e                  (RTL8019_BASE + 0x0e)
-#define        RTL8019_REG_0f                  (RTL8019_BASE + 0x0f)
-#define        RTL8019_REG_10                  (RTL8019_BASE + 0x10)
-#define        RTL8019_REG_1f                  (RTL8019_BASE + 0x1f)
-
-#define RTL8019_COMMAND                        RTL8019_REG_00
-#define RTL8019_PAGESTART              RTL8019_REG_01
-#define RTL8019_PAGESTOP               RTL8019_REG_02
-#define RTL8019_BOUNDARY               RTL8019_REG_03
-#define RTL8019_TRANSMITSTATUS         RTL8019_REG_04
-#define RTL8019_TRANSMITPAGE           RTL8019_REG_04
-#define RTL8019_TRANSMITBYTECOUNT0     RTL8019_REG_05
-#define RTL8019_NCR                    RTL8019_REG_05
-#define RTL8019_TRANSMITBYTECOUNT1     RTL8019_REG_06
-#define RTL8019_INTERRUPTSTATUS                RTL8019_REG_07
-#define RTL8019_CURRENT                        RTL8019_REG_07
-#define RTL8019_REMOTESTARTADDRESS0    RTL8019_REG_08
-#define RTL8019_CRDMA0                 RTL8019_REG_08
-#define RTL8019_REMOTESTARTADDRESS1    RTL8019_REG_09
-#define RTL8019_CRDMA1                 RTL8019_REG_09
-#define RTL8019_REMOTEBYTECOUNT0       RTL8019_REG_0a
-#define RTL8019_REMOTEBYTECOUNT1       RTL8019_REG_0b
-#define RTL8019_RECEIVESTATUS          RTL8019_REG_0c
-#define RTL8019_RECEIVECONFIGURATION   RTL8019_REG_0c
-#define RTL8019_TRANSMITCONFIGURATION  RTL8019_REG_0d
-#define RTL8019_FAE_TALLY              RTL8019_REG_0d
-#define RTL8019_DATACONFIGURATION      RTL8019_REG_0e
-#define RTL8019_CRC_TALLY              RTL8019_REG_0e
-#define RTL8019_INTERRUPTMASK          RTL8019_REG_0f
-#define RTL8019_MISS_PKT_TALLY         RTL8019_REG_0f
-#define RTL8019_PHYSICALADDRESS0       RTL8019_REG_01
-#define        RTL8019_PHYSICALADDRESS1        RTL8019_REG_02
-#define RTL8019_PHYSICALADDRESS2       RTL8019_REG_03
-#define RTL8019_PHYSICALADDRESS3       RTL8019_REG_04
-#define RTL8019_PHYSICALADDRESS4       RTL8019_REG_05
-#define RTL8019_PHYSICALADDRESS5       RTL8019_REG_06
-#define RTL8019_MULTIADDRESS0          RTL8019_REG_08
-#define RTL8019_MULTIADDRESS1          RTL8019_REG_09
-#define RTL8019_MULTIADDRESS2          RTL8019_REG_0a
-#define RTL8019_MULTIADDRESS3          RTL8019_REG_0b
-#define RTL8019_MULTIADDRESS4          RTL8019_REG_0c
-#define RTL8019_MULTIADDRESS5          RTL8019_REG_0d
-#define RTL8019_MULTIADDRESS6          RTL8019_REG_0e
-#define RTL8019_MULTIADDRESS7          RTL8019_REG_0f
-#define RTL8019_DMA_DATA               RTL8019_REG_10
-#define RTL8019_RESET                  RTL8019_REG_1f
-
-#define        RTL8019_PAGE0                   0x22
-#define        RTL8019_PAGE1                   0x62
-#define        RTL8019_PAGE0DMAWRITE           0x12
-#define        RTL8019_PAGE2DMAWRITE           0x92
-#define        RTL8019_REMOTEDMAWR             0x12
-#define        RTL8019_REMOTEDMARD             0x0A
-#define        RTL8019_ABORTDMAWR              0x32
-#define        RTL8019_ABORTDMARD              0x2A
-#define        RTL8019_PAGE0STOP               0x21
-#define        RTL8019_PAGE1STOP               0x61
-#define        RTL8019_TRANSMIT                0x26
-#define        RTL8019_TXINPROGRESS            0x04
-#define        RTL8019_SEND                    0x1A
-
-#define RTL8019_PSTART                 0x4c
-#define RTL8019_PSTOP                  0x80
-#define RTL8019_TPSTART                        0x40
-
-#endif /*end of CONFIG_DRIVER_RTL8019*/
index 17dd0d2816ab1b6773fa9fb94e661d449af02883..27d040125eef311df3d22a03b5024764ca5c65fb 100644 (file)
@@ -25,6 +25,7 @@
 #include <malloc.h>
 #include <net.h>
 #include <netdev.h>
+#include <miiphy.h>
 #include <asm/errno.h>
 #include <asm/io.h>
 
 
 #define SH_ETH_PHY_DELAY 50000
 
-/*
- * Bits are written to the PHY serially using the
- * PIR register, just like a bit banger.
- */
-static void sh_eth_mii_write_phy_bits(int port, u32 val, int len)
-{
-       int i;
-       u32 pir;
-
-       /* Bit positions is 1 less than the number of bits */
-       for (i = len - 1; i >= 0; i--) {
-               /* Write direction, bit to write, clock is low */
-               pir = 2 | ((val & 1 << i) ? 1 << 2 : 0);
-               outl(pir, PIR(port));
-               udelay(1);
-               /* Write direction, bit to write, clock is high */
-               pir = 3 | ((val & 1 << i) ? 1 << 2 : 0);
-               outl(pir, PIR(port));
-               udelay(1);
-               /* Write direction, bit to write, clock is low */
-               pir = 2 | ((val & 1 << i) ? 1 << 2 : 0);
-               outl(pir, PIR(port));
-               udelay(1);
-       }
-}
-
-static void sh_eth_mii_bus_release(int port)
-{
-       /* Read direction, clock is low */
-       outl(0, PIR(port));
-       udelay(1);
-       /* Read direction, clock is high */
-       outl(1, PIR(port));
-       udelay(1);
-       /* Read direction, clock is low */
-       outl(0, PIR(port));
-       udelay(1);
-}
-
-static void sh_eth_mii_ind_bus_release(int port)
-{
-       /* Read direction, clock is low */
-       outl(0, PIR(port));
-       udelay(1);
-}
-
-static void sh_eth_mii_read_phy_bits(int port, u32 *val, int len)
-{
-       int i;
-       u32 pir;
-
-       *val = 0;
-       for (i = len - 1; i >= 0; i--) {
-               /* Read direction, clock is high */
-               outl(1, PIR(port));
-               udelay(1);
-               /* Read bit */
-               pir = inl(PIR(port));
-               *val |= (pir & 8) ? 1 << i : 0;
-               /* Read direction, clock is low */
-               outl(0, PIR(port));
-               udelay(1);
-       }
-}
-
-#define PHY_INIT       0xFFFFFFFF
-#define PHY_READ       0x02
-#define PHY_WRITE      0x01
-/*
- * To read a phy register, mii managements frames are sent to the phy.
- * The frames look like this:
- * pre (32 bits):      0xffff ffff
- * st (2 bits):                01
- * op (2bits):         10: read 01: write
- * phyad (5 bits):     xxxxx
- * regad (5 bits):     xxxxx
- * ta (Bus release):
- * data (16 bits):     read data
- */
-static u32 sh_eth_mii_read_phy_reg(int port, u8 phy_addr, int reg)
-{
-       u32 val;
-
-       /* Sent mii management frame */
-       /* pre */
-       sh_eth_mii_write_phy_bits(port, PHY_INIT, 32);
-       /* st (start of frame) */
-       sh_eth_mii_write_phy_bits(port, 0x1, 2);
-       /* op (code) */
-       sh_eth_mii_write_phy_bits(port, PHY_READ, 2);
-       /* phy address */
-       sh_eth_mii_write_phy_bits(port, phy_addr, 5);
-       /* Register to read */
-       sh_eth_mii_write_phy_bits(port, reg, 5);
-
-       /* Bus release */
-       sh_eth_mii_bus_release(port);
-
-       /* Read register */
-       sh_eth_mii_read_phy_bits(port, &val, 16);
-
-       return val;
-}
-
-/*
- * To write a phy register, mii managements frames are sent to the phy.
- * The frames look like this:
- * pre (32 bits):      0xffff ffff
- * st (2 bits):                01
- * op (2bits):         10: read 01: write
- * phyad (5 bits):     xxxxx
- * regad (5 bits):     xxxxx
- * ta (2 bits):                10
- * data (16 bits):     write data
- * idle (Independent bus release)
- */
-static void sh_eth_mii_write_phy_reg(int port, u8 phy_addr, int reg, u16 val)
-{
-       /* Sent mii management frame */
-       /* pre */
-       sh_eth_mii_write_phy_bits(port, PHY_INIT, 32);
-       /* st (start of frame) */
-       sh_eth_mii_write_phy_bits(port, 0x1, 2);
-       /* op (code) */
-       sh_eth_mii_write_phy_bits(port, PHY_WRITE, 2);
-       /* phy address */
-       sh_eth_mii_write_phy_bits(port, phy_addr, 5);
-       /* Register to read */
-       sh_eth_mii_write_phy_bits(port, reg, 5);
-       /* ta */
-       sh_eth_mii_write_phy_bits(port, PHY_READ, 2);
-       /* Write register data */
-       sh_eth_mii_write_phy_bits(port, val, 16);
-
-       /* Independent bus release */
-       sh_eth_mii_ind_bus_release(port);
-}
-
 int sh_eth_send(struct eth_device *dev, volatile void *packet, int len)
 {
        struct sh_eth_dev *eth = dev->priv;
@@ -480,62 +343,26 @@ err_tx_init:
 
 static int sh_eth_phy_config(struct sh_eth_dev *eth)
 {
-       int port = eth->port, timeout, ret = 0;
+       int port = eth->port, ret = 0;
        struct sh_eth_info *port_info = &eth->port_info[port];
-       u32 val;
-
-       /* Reset phy */
-       sh_eth_mii_write_phy_reg
-               (port, port_info->phy_addr, PHY_CTRL, PHY_C_RESET);
-       timeout = 10;
-       while (timeout--) {
-               val = sh_eth_mii_read_phy_reg(port,
-                               port_info->phy_addr, PHY_CTRL);
-               if (!(val & PHY_C_RESET))
-                       break;
-               udelay(SH_ETH_PHY_DELAY);
-       }
-
-       if (timeout < 0) {
-               printf(SHETHER_NAME ": phy reset timeout\n");
-               ret = -EIO;
-               goto err_tout;
-       }
-
-       /* Advertise 100/10 baseT full/half duplex */
-       sh_eth_mii_write_phy_reg(port, port_info->phy_addr, PHY_ANA,
-               (PHY_A_FDX|PHY_A_HDX|PHY_A_10FDX|PHY_A_10HDX|PHY_A_EXT));
-       /* Autonegotiation, normal operation, full duplex, enable tx */
-       sh_eth_mii_write_phy_reg(port, port_info->phy_addr, PHY_CTRL,
-               (PHY_C_ANEGEN|PHY_C_RANEG));
-       /* Wait for autonegotiation to complete */
-       timeout = 100;
-       while (timeout--) {
-               val = sh_eth_mii_read_phy_reg(port, port_info->phy_addr, 1);
-               if (val & PHY_S_ANEGC)
-                       break;
-
-               udelay(SH_ETH_PHY_DELAY);
-       }
-
-       if (timeout < 0) {
-               printf(SHETHER_NAME ": phy auto-negotiation failed\n");
-               ret = -ETIMEDOUT;
-               goto err_tout;
-       }
+       struct eth_device *dev = port_info->dev;
+       struct phy_device *phydev;
 
-       return ret;
+       phydev = phy_connect(miiphy_get_dev_by_name(dev->name),
+                       port_info->phy_addr, dev, PHY_INTERFACE_MODE_MII);
+       port_info->phydev = phydev;
+       phy_config(phydev);
 
-err_tout:
        return ret;
 }
 
 static int sh_eth_config(struct sh_eth_dev *eth, bd_t *bd)
 {
        int port = eth->port, ret = 0;
-       u32 val,  phy_status;
+       u32 val;
        struct sh_eth_info *port_info = &eth->port_info[port];
        struct eth_device *dev = port_info->dev;
+       struct phy_device *phy;
 
        /* Configure e-dmac registers */
        outl((inl(EDMR(port)) & ~EMDR_DESC_R) | EDMR_EL, EDMR(port));
@@ -582,31 +409,31 @@ static int sh_eth_config(struct sh_eth_dev *eth, bd_t *bd)
                printf(SHETHER_NAME ": phy config timeout\n");
                goto err_phy_cfg;
        }
-       /* Read phy status to finish configuring the e-mac */
-       phy_status = sh_eth_mii_read_phy_reg(port, port_info->phy_addr, 1);
+       phy = port_info->phydev;
+       phy_startup(phy);
 
        /* Set the transfer speed */
 #ifdef CONFIG_CPU_SH7763
-       if (phy_status & (PHY_S_100X_F|PHY_S_100X_H)) {
+       if (phy->speed == 100) {
                printf(SHETHER_NAME ": 100Base/");
                outl(GECMR_100B, GECMR(port));
-       } else {
+       } else if (phy->speed == 10) {
                printf(SHETHER_NAME ": 10Base/");
                outl(GECMR_10B, GECMR(port));
        }
 #endif
 #if defined(CONFIG_CPU_SH7757)
-       if (phy_status & (PHY_S_100X_F|PHY_S_100X_H)) {
+       if (phy->speed == 100) {
                printf("100Base/");
                outl(1, RTRATE(port));
-       } else {
+       } else if (phy->speed == 10) {
                printf("10Base/");
                outl(0, RTRATE(port));
        }
 #endif
 
        /* Check if full duplex mode is supported by the phy */
-       if (phy_status & (PHY_S_100X_F|PHY_S_10T_F)) {
+       if (phy->duplex) {
                printf("Full\n");
                outl((ECMR_CHG_DM|ECMR_RE|ECMR_TE|ECMR_DM), ECMR(port));
        } else {
@@ -707,6 +534,9 @@ int sh_eth_initialize(bd_t *bd)
     /* Register Device to EtherNet subsystem  */
     eth_register(dev);
 
+       bb_miiphy_buses[0].priv = eth;
+       miiphy_register(dev->name, bb_miiphy_read, bb_miiphy_write);
+
        if (!eth_getenv_enetaddr("ethaddr", dev->enetaddr))
                puts("Please set MAC address\n");
 
@@ -722,3 +552,86 @@ err:
        printf(SHETHER_NAME ": Failed\n");
        return ret;
 }
+
+/******* for bb_miiphy *******/
+static int sh_eth_bb_init(struct bb_miiphy_bus *bus)
+{
+       return 0;
+}
+
+static int sh_eth_bb_mdio_active(struct bb_miiphy_bus *bus)
+{
+       struct sh_eth_dev *eth = bus->priv;
+       int port = eth->port;
+
+       outl(inl(PIR(port)) | PIR_MMD, PIR(port));
+
+       return 0;
+}
+
+static int sh_eth_bb_mdio_tristate(struct bb_miiphy_bus *bus)
+{
+       struct sh_eth_dev *eth = bus->priv;
+       int port = eth->port;
+
+       outl(inl(PIR(port)) & ~PIR_MMD, PIR(port));
+
+       return 0;
+}
+
+static int sh_eth_bb_set_mdio(struct bb_miiphy_bus *bus, int v)
+{
+       struct sh_eth_dev *eth = bus->priv;
+       int port = eth->port;
+
+       if (v)
+               outl(inl(PIR(port)) | PIR_MDO, PIR(port));
+       else
+               outl(inl(PIR(port)) & ~PIR_MDO, PIR(port));
+
+       return 0;
+}
+
+static int sh_eth_bb_get_mdio(struct bb_miiphy_bus *bus, int *v)
+{
+       struct sh_eth_dev *eth = bus->priv;
+       int port = eth->port;
+
+       *v = (inl(PIR(port)) & PIR_MDI) >> 3;
+
+       return 0;
+}
+
+static int sh_eth_bb_set_mdc(struct bb_miiphy_bus *bus, int v)
+{
+       struct sh_eth_dev *eth = bus->priv;
+       int port = eth->port;
+
+       if (v)
+               outl(inl(PIR(port)) | PIR_MDC, PIR(port));
+       else
+               outl(inl(PIR(port)) & ~PIR_MDC, PIR(port));
+
+       return 0;
+}
+
+static int sh_eth_bb_delay(struct bb_miiphy_bus *bus)
+{
+       udelay(10);
+
+       return 0;
+}
+
+struct bb_miiphy_bus bb_miiphy_buses[] = {
+       {
+               .name           = "sh_eth",
+               .init           = sh_eth_bb_init,
+               .mdio_active    = sh_eth_bb_mdio_active,
+               .mdio_tristate  = sh_eth_bb_mdio_tristate,
+               .set_mdio       = sh_eth_bb_set_mdio,
+               .get_mdio       = sh_eth_bb_get_mdio,
+               .set_mdc        = sh_eth_bb_set_mdc,
+               .delay          = sh_eth_bb_delay,
+       }
+};
+int bb_miiphy_buses_num = ARRAY_SIZE(bb_miiphy_buses);
index 51e5d5b6f699b66509622682a056938ef82ff6d3..dd6a4224e11377ae1245fce280c9b1933cc0101d 100644 (file)
@@ -89,6 +89,7 @@ struct sh_eth_info {
        u8 mac_addr[6];
        u8 phy_addr;
        struct eth_device *dev;
+       struct phy_device *phydev;
 };
 
 struct sh_eth_dev {
@@ -435,61 +436,3 @@ enum FIFO_SIZE_BIT {
        FIFO_SIZE_T = 0x00000700, FIFO_SIZE_R = 0x00000007,
 };
 
-enum PHY_OFFSETS {
-       PHY_CTRL = 0, PHY_STAT = 1, PHY_IDT1 = 2, PHY_IDT2 = 3,
-       PHY_ANA = 4, PHY_ANL = 5, PHY_ANE = 6,
-       PHY_16 = 16,
-};
-
-/* PHY_CTRL */
-enum PHY_CTRL_BIT {
-       PHY_C_RESET = 0x8000, PHY_C_LOOPBK = 0x4000, PHY_C_SPEEDSL = 0x2000,
-       PHY_C_ANEGEN = 0x1000, PHY_C_PWRDN = 0x0800, PHY_C_ISO = 0x0400,
-       PHY_C_RANEG = 0x0200, PHY_C_DUPLEX = 0x0100, PHY_C_COLT = 0x0080,
-};
-#define DM9161_PHY_C_ANEGEN 0  /* auto nego special */
-
-/* PHY_STAT */
-enum PHY_STAT_BIT {
-       PHY_S_100T4 = 0x8000, PHY_S_100X_F = 0x4000, PHY_S_100X_H = 0x2000,
-       PHY_S_10T_F = 0x1000, PHY_S_10T_H = 0x0800, PHY_S_ANEGC = 0x0020,
-       PHY_S_RFAULT = 0x0010, PHY_S_ANEGA = 0x0008, PHY_S_LINK = 0x0004,
-       PHY_S_JAB = 0x0002, PHY_S_EXTD = 0x0001,
-};
-
-/* PHY_ANA */
-enum PHY_ANA_BIT {
-       PHY_A_NP = 0x8000, PHY_A_ACK = 0x4000, PHY_A_RF = 0x2000,
-       PHY_A_FCS = 0x0400, PHY_A_T4 = 0x0200, PHY_A_FDX = 0x0100,
-       PHY_A_HDX = 0x0080, PHY_A_10FDX = 0x0040, PHY_A_10HDX = 0x0020,
-       PHY_A_SEL = 0x001e,
-       PHY_A_EXT = 0x0001,
-};
-
-/* PHY_ANL */
-enum PHY_ANL_BIT {
-       PHY_L_NP = 0x8000, PHY_L_ACK = 0x4000, PHY_L_RF = 0x2000,
-       PHY_L_FCS = 0x0400, PHY_L_T4 = 0x0200, PHY_L_FDX = 0x0100,
-       PHY_L_HDX = 0x0080, PHY_L_10FDX = 0x0040, PHY_L_10HDX = 0x0020,
-       PHY_L_SEL = 0x001f,
-};
-
-/* PHY_ANE */
-enum PHY_ANE_BIT {
-       PHY_E_PDF = 0x0010, PHY_E_LPNPA = 0x0008, PHY_E_NPA = 0x0004,
-       PHY_E_PRX = 0x0002, PHY_E_LPANEGA = 0x0001,
-};
-
-/* DM9161 */
-enum PHY_16_BIT {
-       PHY_16_BP4B45 = 0x8000, PHY_16_BPSCR = 0x4000, PHY_16_BPALIGN = 0x2000,
-       PHY_16_BP_ADPOK = 0x1000, PHY_16_Repeatmode = 0x0800,
-       PHY_16_TXselect = 0x0400,
-       PHY_16_Rsvd = 0x0200, PHY_16_RMIIEnable = 0x0100,
-       PHY_16_Force100LNK = 0x0080,
-       PHY_16_APDLED_CTL = 0x0040, PHY_16_COLLED_CTL = 0x0020,
-       PHY_16_RPDCTR_EN = 0x0010,
-       PHY_16_ResetStMch = 0x0008, PHY_16_PreamSupr = 0x0004,
-       PHY_16_Sleepmode = 0x0002,
-       PHY_16_RemoteLoopOut = 0x0001,
-};
index 895c74978844eb94cec945f5ba953350ea2e2786..d70c66f58eb9ced81fe1860d81c436845fd05ca6 100644 (file)
@@ -78,7 +78,7 @@ struct smc91111_priv{
 
 #define        SMC_IO_EXTENT   16
 
-#ifdef CONFIG_PXA250
+#ifdef CONFIG_CPU_PXA25X
 
 #ifdef CONFIG_XSENGINE
 #define        SMC_inl(a,r)    (*((volatile dword *)((a)->iobase+((r)<<1))))
@@ -180,7 +180,7 @@ struct smc91111_priv{
                                        };  \
                                })
 
-#elif defined(CONFIG_LEON)     /* if not CONFIG_PXA250 */
+#elif defined(CONFIG_LEON)     /* if not CONFIG_CPU_PXA25X */
 
 #define SMC_LEON_SWAP16(_x_) ({ word _x = (_x_); ((_x << 8) | (_x >> 8)); })
 
@@ -249,7 +249,7 @@ struct smc91111_priv{
                                        };  \
                                }while(0)
 
-#else                          /* if not CONFIG_PXA250 and not CONFIG_LEON */
+#else                  /* if not CONFIG_CPU_PXA25X and not CONFIG_LEON */
 
 #ifndef CONFIG_SMC_USE_IOFUNCS /* these macros don't work on some boards */
 /*
index 8ce08a91e28e58011dd89a47c4e964c962c67a2a..a290073bb8b42814c8129aba4f25647c3ea93b7f 100644 (file)
@@ -471,8 +471,11 @@ static void smc911x_reset(struct eth_device *dev)
 {
        int timeout;
 
-       /* Take out of PM setting first */
-       if (smc911x_reg_read(dev, PMT_CTRL) & PMT_CTRL_READY) {
+       /*
+        *  Take out of PM setting first
+        *  Device is already wake up if PMT_CTRL_READY bit is set
+        */
+       if ((smc911x_reg_read(dev, PMT_CTRL) & PMT_CTRL_READY) == 0) {
                /* Write to the bytetest will take out of powerdown */
                smc911x_reg_write(dev, BYTE_TEST, 0x0);
 
index 78ffc95c537b63a3ac5796e8cf400bd83fa3c051..160bc0597d680fee4befaadda1b3412e2093b62b 100644 (file)
@@ -19,6 +19,7 @@
 #include <tsec.h>
 #include <fsl_mdio.h>
 #include <asm/errno.h>
+#include <asm/processor.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -43,6 +44,9 @@ static RTXBD rtx __attribute__ ((aligned(8)));
 #error "rtx must be 64-bit aligned"
 #endif
 
+static int tsec_send(struct eth_device *dev,
+       volatile void *packet, int length);
+
 /* Default initializations for TSEC controllers. */
 
 static struct tsec_info_struct tsec_info[] = {
@@ -236,6 +240,87 @@ static void adjust_link(struct tsec_private *priv, struct phy_device *phydev)
                        (phydev->port == PORT_FIBRE) ? ", fiber mode" : "");
 }
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
+/*
+ * When MACCFG1[Rx_EN] is enabled during system boot as part
+ * of the eTSEC port initialization sequence,
+ * the eTSEC Rx logic may not be properly initialized.
+ */
+void redundant_init(struct eth_device *dev)
+{
+       struct tsec_private *priv = dev->priv;
+       tsec_t *regs = priv->regs;
+       uint t, count = 0;
+       int fail = 1;
+       static const u8 pkt[] = {
+               0x00, 0x1e, 0x4f, 0x12, 0xcb, 0x2c, 0x00, 0x25,
+               0x64, 0xbb, 0xd1, 0xab, 0x08, 0x00, 0x45, 0x00,
+               0x00, 0x5c, 0xdd, 0x22, 0x00, 0x00, 0x80, 0x01,
+               0x1f, 0x71, 0x0a, 0xc1, 0x14, 0x22, 0x0a, 0xc1,
+               0x14, 0x6a, 0x08, 0x00, 0xef, 0x7e, 0x02, 0x00,
+               0x94, 0x05, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
+               0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e,
+               0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
+               0x77, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+               0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+               0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+               0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+               0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
+               0x71, 0x72};
+
+       /* Enable promiscuous mode */
+       setbits_be32(&regs->rctrl, 0x8);
+       /* Enable loopback mode */
+       setbits_be32(&regs->maccfg1, MACCFG1_LOOPBACK);
+       /* Enable transmit and receive */
+       setbits_be32(&regs->maccfg1, MACCFG1_RX_EN | MACCFG1_TX_EN);
+
+       /* Tell the DMA it is clear to go */
+       setbits_be32(&regs->dmactrl, DMACTRL_INIT_SETTINGS);
+       out_be32(&regs->tstat, TSTAT_CLEAR_THALT);
+       out_be32(&regs->rstat, RSTAT_CLEAR_RHALT);
+       clrbits_be32(&regs->dmactrl, DMACTRL_GRS | DMACTRL_GTS);
+
+       do {
+               tsec_send(dev, (void *)pkt, sizeof(pkt));
+
+               /* Wait for buffer to be received */
+               for (t = 0; rtx.rxbd[rxIdx].status & RXBD_EMPTY; t++) {
+                       if (t >= 10 * TOUT_LOOP) {
+                               printf("%s: tsec: rx error\n", dev->name);
+                               break;
+                       }
+               }
+
+               if (!memcmp(pkt, (void *)NetRxPackets[rxIdx], sizeof(pkt)))
+                       fail = 0;
+
+               rtx.rxbd[rxIdx].length = 0;
+               rtx.rxbd[rxIdx].status =
+                   RXBD_EMPTY | (((rxIdx + 1) == PKTBUFSRX) ? RXBD_WRAP : 0);
+               rxIdx = (rxIdx + 1) % PKTBUFSRX;
+
+               if (in_be32(&regs->ievent) & IEVENT_BSY) {
+                       out_be32(&regs->ievent, IEVENT_BSY);
+                       out_be32(&regs->rstat, RSTAT_CLEAR_RHALT);
+               }
+               if (fail) {
+                       printf("loopback recv packet error!\n");
+                       clrbits_be32(&regs->maccfg1, MACCFG1_RX_EN);
+                       udelay(1000);
+                       setbits_be32(&regs->maccfg1, MACCFG1_RX_EN);
+               }
+       } while ((count++ < 4) && (fail == 1));
+
+       if (fail)
+               panic("eTSEC init fail!\n");
+       /* Disable promiscuous mode */
+       clrbits_be32(&regs->rctrl, 0x8);
+       /* Disable loopback mode */
+       clrbits_be32(&regs->maccfg1, MACCFG1_LOOPBACK);
+}
+#endif
+
 /* Set up the buffers and their descriptors, and bring up the
  * interface
  */
@@ -248,6 +333,9 @@ static void startup_tsec(struct eth_device *dev)
        /* reset the indices to zero */
        rxIdx = 0;
        txIdx = 0;
+#ifdef CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
+       uint svr;
+#endif
 
        /* Point to the buffer descriptors */
        out_be32(&regs->tbase, (unsigned int)(&rtx.txbd[txIdx]));
@@ -269,6 +357,11 @@ static void startup_tsec(struct eth_device *dev)
        }
        rtx.txbd[TX_BUF_CNT - 1].status |= TXBD_WRAP;
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
+       svr = get_svr();
+       if ((SVR_MAJ(svr) == 1) || IS_SVR_REV(svr, 2, 0))
+               redundant_init(dev);
+#endif
        /* Enable Transmit and Receive */
        setbits_be32(&regs->maccfg1, MACCFG1_RX_EN | MACCFG1_TX_EN);
 
index ee0c64d1354bcb771e184d87712fab8875853234..1ae35d360bab7250854658ca77efbdec68fca86e 100644 (file)
@@ -27,6 +27,7 @@ LIB   := $(obj)libpci.o
 
 COBJS-$(CONFIG_FSL_PCI_INIT) += fsl_pci_init.o
 COBJS-$(CONFIG_PCI) += pci.o pci_auto.o pci_indirect.o
+COBJS-$(CONFIG_FTPCI100) += pci_ftpci100.o
 COBJS-$(CONFIG_IXP_PCI) += pci_ixp.o
 COBJS-$(CONFIG_SH4_PCI) += pci_sh4.o
 COBJS-$(CONFIG_SH7751_PCI) +=pci_sh7751.o
diff --git a/drivers/pci/pci_ftpci100.c b/drivers/pci/pci_ftpci100.c
new file mode 100644 (file)
index 0000000..a795a97
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+ * Faraday FTPCI100 PCI Bridge Controller Device Driver Implementation
+ *
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Gavin Guo, Andes Technology Corporation <gavinguo@andestech.com>
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.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 <malloc.h>
+#include <pci.h>
+
+#include <asm/io.h>
+#include <asm/types.h> /* u32, u16.... used by pci.h */
+
+#include "pci_ftpci100.h"
+
+struct ftpci100_data {
+       unsigned int reg_base;
+       unsigned int io_base;
+       unsigned int mem_base;
+       unsigned int mmio_base;
+       unsigned int ndevs;
+};
+
+static struct pci_config devs[FTPCI100_MAX_FUNCTIONS];
+static struct pci_controller local_hose;
+
+static void setup_pci_bar(unsigned int bus, unsigned int dev, unsigned func,
+               unsigned char header, struct ftpci100_data *priv)
+{
+       struct pci_controller *hose = (struct pci_controller *)&local_hose;
+       unsigned int i, tmp32, bar_no, iovsmem = 1;
+       pci_dev_t dev_nu;
+
+       /* A device is present, add an entry to the array */
+       devs[priv->ndevs].bus = bus;
+       devs[priv->ndevs].dev = dev;
+       devs[priv->ndevs].func = func;
+
+       dev_nu = PCI_BDF(bus, dev, func);
+
+       if ((header & 0x7f) == 0x01)
+               /* PCI-PCI Bridge */
+               bar_no = 2;
+       else
+               bar_no = 6;
+
+       /* Allocate address spaces by configuring BARs */
+       for (i = 0; i < bar_no; i++) {
+               pci_hose_write_config_dword(hose, dev_nu,
+                                       PCI_BASE_ADDRESS_0 + i * 4, 0xffffffff);
+               pci_hose_read_config_dword(hose, dev_nu,
+                                       PCI_BASE_ADDRESS_0 + i * 4, &tmp32);
+
+               if (tmp32 == 0x0)
+                       continue;
+
+               /* IO space */
+               if (tmp32 & 0x1) {
+                       iovsmem = 0;
+                       unsigned int size_mask = ~(tmp32 & 0xfffffffc);
+
+                       if (priv->io_base & size_mask)
+                               priv->io_base = (priv->io_base & ~size_mask) + \
+                                                size_mask + 1;
+
+                       devs[priv->ndevs].bar[i].addr = priv->io_base;
+                       devs[priv->ndevs].bar[i].size = size_mask + 1;
+
+                       pci_hose_write_config_dword(hose, dev_nu,
+                                       PCI_BASE_ADDRESS_0 + i * 4,
+                                       priv->io_base);
+
+                       debug("Allocated IO address 0x%X-" \
+                               "0x%X for Bus %d, Device %d, Function %d\n",
+                               priv->io_base,
+                               priv->io_base + size_mask, bus, dev, func);
+
+                       priv->io_base += size_mask + 1;
+               } else {
+                       /* Memory space */
+                       unsigned int is_64bit = ((tmp32 & 0x6) == 0x4);
+                       unsigned int is_pref = tmp32 & 0x8;
+                       unsigned int size_mask = ~(tmp32 & 0xfffffff0);
+                       unsigned int alloc_base;
+                       unsigned int *addr_mem_base;
+
+                       if (is_pref)
+                               addr_mem_base = &priv->mem_base;
+                       else
+                               addr_mem_base = &priv->mmio_base;
+
+                       alloc_base = *addr_mem_base;
+
+                       if (alloc_base & size_mask)
+                               alloc_base = (alloc_base & ~size_mask) \
+                                               + size_mask + 1;
+
+                       pci_hose_write_config_dword(hose, dev_nu,
+                                       PCI_BASE_ADDRESS_0 + i * 4, alloc_base);
+
+                       debug("Allocated %s address 0x%X-" \
+                               "0x%X for Bus %d, Device %d, Function %d\n",
+                               is_pref ? "MEM" : "MMIO", alloc_base,
+                               alloc_base + size_mask, bus, dev, func);
+
+                       devs[priv->ndevs].bar[i].addr = alloc_base;
+                       devs[priv->ndevs].bar[i].size = size_mask + 1;
+
+                       debug("BAR address  BAR size\n");
+                       debug("%010x  %08d\n",
+                               devs[priv->ndevs].bar[0].addr,
+                               devs[priv->ndevs].bar[0].size);
+
+                       alloc_base += size_mask + 1;
+                       *addr_mem_base = alloc_base;
+
+                       if (is_64bit) {
+                               i++;
+                               pci_hose_write_config_dword(hose, dev_nu,
+                                       PCI_BASE_ADDRESS_0 + i * 4, 0x0);
+                       }
+               }
+       }
+
+       /* Enable Bus Master, Memory Space, and IO Space */
+       pci_hose_read_config_dword(hose, dev_nu, PCI_CACHE_LINE_SIZE, &tmp32);
+       pci_hose_write_config_dword(hose, dev_nu, PCI_CACHE_LINE_SIZE, 0x08);
+       pci_hose_read_config_dword(hose, dev_nu, PCI_CACHE_LINE_SIZE, &tmp32);
+
+       pci_hose_read_config_dword(hose, dev_nu, PCI_COMMAND, &tmp32);
+
+       tmp32 &= 0xffff;
+
+       if (iovsmem == 0)
+               tmp32 |= 0x5;
+       else
+               tmp32 |= 0x6;
+
+       pci_hose_write_config_dword(hose, dev_nu, PCI_COMMAND, tmp32);
+}
+
+static void pci_bus_scan(struct ftpci100_data *priv)
+{
+       struct pci_controller *hose = (struct pci_controller *)&local_hose;
+       unsigned int bus, dev, func;
+       pci_dev_t dev_nu;
+       unsigned int data32;
+       unsigned int tmp;
+       unsigned char header;
+       unsigned char int_pin;
+       unsigned int niobars;
+       unsigned int nmbars;
+
+       priv->ndevs = 1;
+
+       nmbars = 0;
+       niobars = 0;
+
+       for (bus = 0; bus < MAX_BUS_NUM; bus++)
+               for (dev = 0; dev < MAX_DEV_NUM; dev++)
+                       for (func = 0; func < MAX_FUN_NUM; func++) {
+                               dev_nu = PCI_BDF(bus, dev, func);
+                               pci_hose_read_config_dword(hose, dev_nu,
+                                                       PCI_VENDOR_ID, &data32);
+
+                               /*
+                                * some broken boards return 0 or ~0,
+                                * if a slot is empty.
+                                */
+                               if (data32 == 0xffffffff ||
+                                       data32 == 0x00000000 ||
+                                       data32 == 0x0000ffff ||
+                                       data32 == 0xffff0000)
+                                       continue;
+
+                               pci_hose_read_config_dword(hose, dev_nu,
+                                                       PCI_HEADER_TYPE, &tmp);
+                               header = (unsigned char)tmp;
+                               setup_pci_bar(bus, dev, func, header, priv);
+
+                               devs[priv->ndevs].v_id = (u16)(data32 & \
+                                                               0x0000ffff);
+
+                               devs[priv->ndevs].d_id = (u16)((data32 & \
+                                                       0xffff0000) >> 16);
+
+                               /* Figure out what INTX# line the card uses */
+                               pci_hose_read_config_byte(hose, dev_nu,
+                                               PCI_INTERRUPT_PIN, &int_pin);
+
+                               /* assign the appropriate irq line */
+                               if (int_pin > PCI_IRQ_LINES) {
+                                       printf("more irq lines than expect\n");
+                               } else if (int_pin != 0) {
+                                       /* This device uses an interrupt line */
+                                       devs[priv->ndevs].pin = int_pin;
+                               }
+
+                               pci_hose_read_config_dword(hose, dev_nu,
+                                               PCI_CLASS_DEVICE, &data32);
+
+                               debug("%06d  %03d  %03d  " \
+                                       "%04d  %08x  %08x  " \
+                                       "%03d  %08x  %06d  %08x\n",
+                                       priv->ndevs, devs[priv->ndevs].bus,
+                                       devs[priv->ndevs].dev,
+                                       devs[priv->ndevs].func,
+                                       devs[priv->ndevs].d_id,
+                                       devs[priv->ndevs].v_id,
+                                       devs[priv->ndevs].pin,
+                                       devs[priv->ndevs].bar[0].addr,
+                                       devs[priv->ndevs].bar[0].size,
+                                       data32 >> 8);
+
+                               priv->ndevs++;
+                       }
+}
+
+static void ftpci_preinit(struct ftpci100_data *priv)
+{
+       struct ftpci100_ahbc *ftpci100;
+       struct pci_controller *hose = (struct pci_controller *)&local_hose;
+       u32 pci_config_addr;
+       u32 pci_config_data;
+
+       priv->reg_base = CONFIG_FTPCI100_BASE;
+       priv->io_base = CONFIG_FTPCI100_BASE + CONFIG_FTPCI100_IO_SIZE;
+       priv->mmio_base = CONFIG_FTPCI100_MEM_BASE;
+       priv->mem_base = CONFIG_FTPCI100_MEM_BASE + CONFIG_FTPCI100_MEM_SIZE;
+
+       ftpci100 = (struct ftpci100_ahbc *)priv->reg_base;
+
+       pci_config_addr = (u32) &ftpci100->conf;
+       pci_config_data = (u32) &ftpci100->data;
+
+       /* print device name */
+       printf("FTPCI100\n");
+
+       /* dump basic configuration */
+       debug("%s: Config addr is %08X, data port is %08X\n",
+               __func__, pci_config_addr, pci_config_data);
+
+       /* PCI memory space */
+       pci_set_region(hose->regions + 0,
+               CONFIG_PCI_MEM_BUS,
+               CONFIG_PCI_MEM_PHYS,
+               CONFIG_PCI_MEM_SIZE,
+               PCI_REGION_MEM);
+       hose->region_count++;
+
+       /* PCI IO space */
+       pci_set_region(hose->regions + 1,
+               CONFIG_PCI_IO_BUS,
+               CONFIG_PCI_IO_PHYS,
+               CONFIG_PCI_IO_SIZE,
+               PCI_REGION_IO);
+       hose->region_count++;
+
+#if defined(CONFIG_PCI_SYS_BUS)
+       /* PCI System Memory space */
+       pci_set_region(hose->regions + 2,
+               CONFIG_PCI_SYS_BUS,
+               CONFIG_PCI_SYS_PHYS,
+               CONFIG_PCI_SYS_SIZE,
+               PCI_REGION_MEM | PCI_REGION_SYS_MEMORY);
+       hose->region_count++;
+#endif
+
+       /* setup indirect read/write function */
+       pci_setup_indirect(hose, pci_config_addr, pci_config_data);
+
+       /* register hose */
+       pci_register_hose(hose);
+}
+
+void pci_ftpci_init(void)
+{
+       struct ftpci100_data *priv = NULL;
+       struct pci_controller *hose = (struct pci_controller *)&local_hose;
+       pci_dev_t bridge_num;
+
+       struct pci_device_id bridge_ids[] = {
+               {FTPCI100_BRIDGE_VENDORID, FTPCI100_BRIDGE_DEVICEID},
+               {0, 0}
+       };
+
+       priv = malloc(sizeof(struct ftpci100_data));
+
+       if (!priv) {
+               printf("%s(): failed to malloc priv\n", __func__);
+               return;
+       }
+
+       memset(priv, 0, sizeof(struct ftpci100_data));
+
+       ftpci_preinit(priv);
+
+       debug("Device  bus  dev  func  deviceID  vendorID  pin  address" \
+               "   size    class\n");
+
+       pci_bus_scan(priv);
+
+       /*
+        * Setup the PCI Bridge Window to 1GB,
+        * it will cause USB OHCI Host controller Unrecoverable Error
+        * if it is not set.
+        */
+       bridge_num = pci_find_devices(bridge_ids, 0);
+       if (bridge_num == -1) {
+               printf("PCI Bridge not found\n");
+               return;
+       }
+       pci_hose_write_config_dword(hose, bridge_num, PCI_MEM_BASE_SIZE1,
+                                       FTPCI100_BASE_ADR_SIZE(1024));
+}
diff --git a/drivers/pci/pci_ftpci100.h b/drivers/pci/pci_ftpci100.h
new file mode 100644 (file)
index 0000000..19c81a8
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Faraday FTPCI100 PCI Bridge Controller Device Driver Implementation
+ *
+ * Copyright (C) 2010 Andes Technology Corporation
+ * Gavin Guo, Andes Technology Corporation <gavinguo@andestech.com>
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __FTPCI100_H
+#define __FTPCI100_H
+
+/* AHB Control Registers */
+struct ftpci100_ahbc {
+       unsigned int iosize;            /* 0x00 - I/O Space Size Signal */
+       unsigned int prot;              /* 0x04 - AHB Protection */
+       unsigned int rsved[8];          /* 0x08-0x24 - Reserved */
+       unsigned int conf;              /* 0x28 - PCI Configuration */
+       unsigned int data;              /* 0x2c - PCI Configuration DATA */
+};
+
+/*
+ * FTPCI100_IOSIZE_REG's constant definitions
+ */
+#define FTPCI100_BASE_IO_SIZE(x)       (ffs(x) - 1)    /* 1M - 2048M */
+
+/*
+ * PCI Configuration Register
+ */
+#define PCI_INT_MASK                   0x4c
+#define PCI_MEM_BASE_SIZE1             0x50
+#define PCI_MEM_BASE_SIZE2             0x54
+#define PCI_MEM_BASE_SIZE3             0x58
+
+/*
+ * PCI_INT_MASK's bit definitions
+ */
+#define PCI_INTA_ENABLE                        (1 << 22)
+#define PCI_INTB_ENABLE                        (1 << 23)
+#define PCI_INTC_ENABLE                        (1 << 24)
+#define PCI_INTD_ENABLE                        (1 << 25)
+
+/*
+ * PCI_MEM_BASE_SIZE1's constant definitions
+ */
+#define FTPCI100_BASE_ADR_SIZE(x)      ((ffs(x) - 1) << 16)    /* 1M - 2048M */
+
+#define FTPCI100_MAX_FUNCTIONS         20
+#define PCI_IRQ_LINES                  4
+
+#define MAX_BUS_NUM                    256
+#define MAX_DEV_NUM                    32
+#define MAX_FUN_NUM                    8
+
+#define PCI_MAX_BAR_PER_FUNC           6
+
+/*
+ * PCI_MEM_SIZE
+ */
+#define FTPCI100_MEM_SIZE(x)           (ffs(x) << 24)
+
+/* This definition is used by pci_ftpci_init() */
+#define FTPCI100_BRIDGE_VENDORID               0x159b
+#define FTPCI100_BRIDGE_DEVICEID               0x4321
+
+struct pcibar {
+       unsigned int size;
+       unsigned int addr;
+};
+
+struct pci_config {
+       unsigned int bus;
+       unsigned int dev;                               /* device */
+       unsigned int func;
+       unsigned int pin;
+       unsigned short v_id;                            /* vendor id */
+       unsigned short d_id;                            /* device id */
+       struct pcibar bar[PCI_MAX_BAR_PER_FUNC + 1];
+};
+
+#endif
index c4ec2f4af89e95c4b948bc50ae5155f00f0fc23c..9f711519ede329576221d93bcc759c78a0c70e1b 100644 (file)
@@ -170,11 +170,11 @@ void qe_init(uint qe_base)
        /* Init the QE IMMR base */
        qe_immr = (qe_map_t *)qe_base;
 
-#ifdef CONFIG_SYS_QE_FW_ADDR
+#ifdef CONFIG_SYS_QE_FMAN_FW_IN_NOR
        /*
         * Upload microcode to IRAM for those SOCs which do not have ROM in QE.
         */
-       qe_upload_firmware((const struct qe_firmware *) CONFIG_SYS_QE_FW_ADDR);
+       qe_upload_firmware((const void *)CONFIG_SYS_QE_FMAN_FW_ADDR);
 
        /* enable the microcode in IRAM */
        out_be32(&qe_immr->iram.iready,QE_IRAM_READY);
index 1ecb1379a5c92ed80c61d0fdea47e4600b246471..3e46e3515faba49cc9c873cdc3e9ef3e1c66d50f 100644 (file)
@@ -264,13 +264,10 @@ static int uec_open(uec_private_t *uec, comm_dir_e mode)
 
 static int uec_stop(uec_private_t *uec, comm_dir_e mode)
 {
-       ucc_fast_private_t      *uccf;
-
        if (!uec || !uec->uccf) {
                printf("%s: No handle passed.\n", __FUNCTION__);
                return -EINVAL;
        }
-       uccf = uec->uccf;
 
        /* check if the UCC number is in range. */
        if (uec->uec_info->uf_info.ucc_num >= UCC_MAX_NUM) {
@@ -325,7 +322,6 @@ static int uec_set_mac_if_mode(uec_private_t *uec,
                phy_interface_t if_mode, int speed)
 {
        phy_interface_t         enet_if_mode;
-       uec_info_t              *uec_info;
        uec_t                   *uec_regs;
        u32                     upsmr;
        u32                     maccfg2;
@@ -335,7 +331,6 @@ static int uec_set_mac_if_mode(uec_private_t *uec,
                return -EINVAL;
        }
 
-       uec_info = uec->uec_info;
        uec_regs = uec->uec_regs;
        enet_if_mode = if_mode;
 
@@ -516,12 +511,10 @@ bus_fail:
 static void adjust_link(struct eth_device *dev)
 {
        uec_private_t           *uec = (uec_private_t *)dev->priv;
-       uec_t                   *uec_regs;
        struct uec_mii_info     *mii_info = uec->mii_info;
 
        extern void change_phy_interface_mode(struct eth_device *dev,
                                 phy_interface_t mode, int speed);
-       uec_regs = uec->uec_regs;
 
        if (mii_info->link) {
                /* Now we make sure that we can be in full duplex mode.
index a16f59051dc8ffb9a880ffeca93d7f2eb4318afd..faf4fcdb872e979459ce08cf732c1235aede2d4f 100644 (file)
@@ -57,6 +57,7 @@ COBJS-$(CONFIG_RTC_MK48T59) += mk48t59.o
 COBJS-$(CONFIG_RTC_MPC5200) += mpc5xxx.o
 COBJS-$(CONFIG_RTC_MPC8xx) += mpc8xx.o
 COBJS-$(CONFIG_RTC_MV) += mvrtc.o
+COBJS-$(CONFIG_RTC_MXS) += mxsrtc.o
 COBJS-$(CONFIG_RTC_PCF8563) += pcf8563.o
 COBJS-$(CONFIG_RTC_PL031) += pl031.o
 COBJS-$(CONFIG_RTC_PT7C4338) += pt7c4338.o
index 8436cbf8e9039f479e1aad1768afdf886c77ed11..5cafff4d2109865b451948208b96bb8312cbbfc8 100644 (file)
 #include <asm/arch/hardware.h>
 
 #if defined(CONFIG_CMD_DATE)
-struct davinci_rtc {
-       u_int32_t       second;
-       u_int32_t       minutes;
-       u_int32_t       hours;
-       u_int32_t       day;
-       u_int32_t       month; /* 0x10 */
-       u_int32_t       year;
-       u_int32_t       dotw;
-       u_int32_t       resv1;
-       u_int32_t       alarmsecond; /* 0x20 */
-       u_int32_t       alarmminute;
-       u_int32_t       alarmhour;
-       u_int32_t       alarmday;
-       u_int32_t       alarmmonth; /* 0x30 */
-       u_int32_t       alarmyear;
-       u_int32_t       resv2[2];
-       u_int32_t       ctrl; /* 0x40 */
-       u_int32_t       status;
-       u_int32_t       irq;
-};
-
-#define RTC_STATE_BUSY 0x01
-#define RTC_STATE_RUN  0x02
-
-#define davinci_rtc_base ((struct davinci_rtc *)DAVINCI_RTC_BASE)
-
 int rtc_get(struct rtc_time *tmp)
 {
        struct davinci_rtc *rtc = davinci_rtc_base;
diff --git a/drivers/rtc/mxsrtc.c b/drivers/rtc/mxsrtc.c
new file mode 100644 (file)
index 0000000..5beb1a0
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Freescale i.MX28 RTC Driver
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <rtc.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+#define        MXS_RTC_MAX_TIMEOUT     1000000
+
+/* Set time in seconds since 1970-01-01 */
+int mxs_rtc_set_time(uint32_t secs)
+{
+       struct mx28_rtc_regs *rtc_regs = (struct mx28_rtc_regs *)MXS_RTC_BASE;
+       int ret;
+
+       writel(secs, &rtc_regs->hw_rtc_seconds);
+
+       /*
+        * The 0x80 here means seconds were copied to analog. This information
+        * is taken from the linux kernel driver for the STMP37xx RTC since
+        * documentation doesn't mention it.
+        */
+       ret = mx28_wait_mask_clr(&rtc_regs->hw_rtc_stat_reg,
+               0x80 << RTC_STAT_STALE_REGS_OFFSET, MXS_RTC_MAX_TIMEOUT);
+
+       if (ret)
+               printf("MXS RTC: Timeout waiting for update\n");
+
+       return ret;
+}
+
+int rtc_get(struct rtc_time *time)
+{
+       struct mx28_rtc_regs *rtc_regs = (struct mx28_rtc_regs *)MXS_RTC_BASE;
+       uint32_t secs;
+
+       secs = readl(&rtc_regs->hw_rtc_seconds);
+       to_tm(secs, time);
+
+       return 0;
+}
+
+int rtc_set(struct rtc_time *time)
+{
+       uint32_t secs;
+
+       secs = mktime(time->tm_year, time->tm_mon, time->tm_mday,
+               time->tm_hour, time->tm_min, time->tm_sec);
+
+       return mxs_rtc_set_time(secs);
+}
+
+void rtc_reset(void)
+{
+       struct mx28_rtc_regs *rtc_regs = (struct mx28_rtc_regs *)MXS_RTC_BASE;
+       int ret;
+
+       /* Set time to 1970-01-01 */
+       mxs_rtc_set_time(0);
+
+       /* Reset the RTC block */
+       ret = mx28_reset_block(&rtc_regs->hw_rtc_ctrl_reg);
+       if (ret)
+               printf("MXS RTC: Block reset timeout\n");
+}
index 9667939db2db7adfdcb1f5e387870e66029d513b..c16ff2eb719940f8f048fe000221b78886019e1a 100644 (file)
@@ -34,8 +34,7 @@
 
 #include <rtc.h>
 #include <asm/io.h>
-
-/*#define      DEBUG*/
+#include <linux/compiler.h>
 
 typedef enum {
        RTC_ENABLE,
@@ -64,7 +63,8 @@ int rtc_get(struct rtc_time *tmp)
 {
        struct s3c24x0_rtc *rtc = s3c24x0_get_base_rtc();
        uchar sec, min, hour, mday, wday, mon, year;
-       uchar a_sec, a_min, a_hour, a_date, a_mon, a_year, a_armed;
+       __maybe_unused uchar a_sec, a_min, a_hour, a_date,
+                            a_mon, a_year, a_armed;
 
        /* enable access to RTC registers */
        SetRTC_Access(RTC_ENABLE);
index dcb4bd16d812fc6a5155431c8a2fba0c037d7060..af00b9c0ec426856eaf716466d087f9cf270cc72 100644 (file)
 
 #define __REG(x)     (*((volatile u32 *)(x)))
 
-#if defined(CONFIG_SYS_MX31_UART1) || defined(CONFIG_SYS_MX25_UART1)
-#define UART_PHYS 0x43f90000
-#elif defined(CONFIG_SYS_MX31_UART2) || defined(CONFIG_SYS_MX25_UART2)
-#define UART_PHYS 0x43f94000
-#elif defined(CONFIG_SYS_MX31_UART3) || defined(CONFIG_SYS_MX25_UART3)
-#define UART_PHYS 0x5000c000
-#elif defined(CONFIG_SYS_MX31_UART4) || defined(CONFIG_SYS_MX25_UART4)
-#define UART_PHYS 0x43fb0000
-#elif defined(CONFIG_SYS_MX31_UART5) || defined(CONFIG_SYS_MX25_UART5)
-#define UART_PHYS 0x43fb4000
-#elif defined(CONFIG_SYS_MX27_UART1)
-#define UART_PHYS 0x1000a000
-#elif defined(CONFIG_SYS_MX27_UART2)
-#define UART_PHYS 0x1000b000
-#elif defined(CONFIG_SYS_MX27_UART3)
-#define UART_PHYS 0x1000c000
-#elif defined(CONFIG_SYS_MX27_UART4)
-#define UART_PHYS 0x1000d000
-#elif defined(CONFIG_SYS_MX27_UART5)
-#define UART_PHYS 0x1001b000
-#elif defined(CONFIG_SYS_MX27_UART6)
-#define UART_PHYS 0x1001c000
-#elif defined(CONFIG_SYS_MX35_UART1) || defined(CONFIG_SYS_MX51_UART1) || \
-       defined(CONFIG_SYS_MX53_UART1)
-#define UART_PHYS UART1_BASE_ADDR
-#elif defined(CONFIG_SYS_MX35_UART2) || defined(CONFIG_SYS_MX51_UART2) || \
-       defined(CONFIG_SYS_MX53_UART2)
-#define UART_PHYS UART2_BASE_ADDR
-#elif defined(CONFIG_SYS_MX35_UART3) || defined(CONFIG_SYS_MX51_UART3) || \
-       defined(CONFIG_SYS_MX53_UART3)
-#define UART_PHYS UART3_BASE_ADDR
-#else
-#error "define CONFIG_SYS_MXxx_UARTx to use the MXC UART driver"
+#ifndef CONFIG_MXC_UART_BASE
+#error "define CONFIG_MXC_UART_BASE to use the MXC UART driver"
 #endif
 
+#define UART_PHYS      CONFIG_MXC_UART_BASE
+
 #ifdef CONFIG_SERIAL_MULTI
 #warning "MXC driver does not support MULTI serials."
 #endif
index 68469a4f358409673d4882061bd461784ad6906c..a9976d709a7e9f39bb804038a25003186279dee0 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ *
  * (C) Copyright 2002
  * Wolfgang Denk, DENX Software Engineering, <wd@denx.de>
  *
 #include <watchdog.h>
 #include <serial.h>
 #include <asm/arch/pxa-regs.h>
+#include <asm/arch/regs-uart.h>
 #include <asm/io.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define FFUART_INDEX   0
-#define BTUART_INDEX   1
-#define STUART_INDEX   2
+/*
+ * The numbering scheme differs here for PXA25x, PXA27x and PXA3xx so we can
+ * easily handle enabling of clock.
+ */
+#ifdef CONFIG_CPU_MONAHANS
+#define        UART_CLK_BASE   CKENA_21_BTUART
+#define        UART_CLK_REG    CKENA
+#define        BTUART_INDEX    0
+#define        FFUART_INDEX    1
+#define        STUART_INDEX    2
+#elif  CONFIG_CPU_PXA25X
+#define        UART_CLK_BASE   (1 << 4)        /* HWUART */
+#define        UART_CLK_REG    CKEN
+#define        HWUART_INDEX    0
+#define        STUART_INDEX    1
+#define        FFUART_INDEX    2
+#define        BTUART_INDEX    3
+#else  /* PXA27x */
+#define        UART_CLK_BASE   CKEN5_STUART
+#define        UART_CLK_REG    CKEN
+#define        STUART_INDEX    0
+#define        FFUART_INDEX    1
+#define        BTUART_INDEX    2
+#endif
+
+/*
+ * Only PXA250 has HWUART, to avoid poluting the code with more macros,
+ * artificially introduce this.
+ */
+#ifndef        CONFIG_CPU_PXA25X
+#define        HWUART_INDEX    0xff
+#endif
 
 #ifndef CONFIG_SERIAL_MULTI
-#if defined (CONFIG_FFUART)
+#if defined(CONFIG_FFUART)
 #define UART_INDEX     FFUART_INDEX
-#elif defined (CONFIG_BTUART)
+#elif defined(CONFIG_BTUART)
 #define UART_INDEX     BTUART_INDEX
-#elif defined (CONFIG_STUART)
+#elif defined(CONFIG_STUART)
 #define UART_INDEX     STUART_INDEX
+#elif defined(CONFIG_HWUART)
+#define UART_INDEX     HWUART_INDEX
 #else
-#error "Bad: you didn't configure serial ..."
+#error "Please select CONFIG_(FF|BT|ST|HW)UART in board config file."
 #endif
 #endif
 
-void pxa_setbrg_dev (unsigned int uart_index)
+uint32_t pxa_uart_get_baud_divider(void)
 {
-       unsigned int quot = 0;
-
        if (gd->baudrate == 1200)
-               quot = 768;
+               return 768;
        else if (gd->baudrate == 9600)
-               quot = 96;
+               return 96;
        else if (gd->baudrate == 19200)
-               quot = 48;
+               return 48;
        else if (gd->baudrate == 38400)
-               quot = 24;
+               return 24;
        else if (gd->baudrate == 57600)
-               quot = 16;
+               return 16;
        else if (gd->baudrate == 115200)
-               quot = 8;
-       else
-               hang ();
+               return 8;
+       else    /* Unsupported baudrate */
+               return 0;
+}
 
+struct pxa_uart_regs *pxa_uart_index_to_regs(uint32_t uart_index)
+{
        switch (uart_index) {
-               case FFUART_INDEX:
-#ifdef CONFIG_CPU_MONAHANS
-                       writel(readl(CKENA) | CKENA_22_FFUART, CKENA);
-#else
-                       writel(readl(CKEN) | CKEN6_FFUART, CKEN);
-#endif /* CONFIG_CPU_MONAHANS */
-
-                       writel(0, FFIER);       /* Disable for now */
-                       writel(0, FFFCR);       /* No fifos enabled */
+       case FFUART_INDEX: return (struct pxa_uart_regs *)FFUART_BASE;
+       case BTUART_INDEX: return (struct pxa_uart_regs *)BTUART_BASE;
+       case STUART_INDEX: return (struct pxa_uart_regs *)STUART_BASE;
+       case HWUART_INDEX: return (struct pxa_uart_regs *)HWUART_BASE;
+       default:
+               return NULL;
+       }
+}
 
-                       /* set baud rate */
-                       writel(LCR_WLS0 | LCR_WLS1 | LCR_DLAB, FFLCR);
-                       writel(quot & 0xff, FFDLL);
-                       writel(quot >> 8, FFDLH);
-                       writel(LCR_WLS0 | LCR_WLS1, FFLCR);
+void pxa_uart_toggle_clock(uint32_t uart_index, int enable)
+{
+       uint32_t clk_reg, clk_offset, reg;
 
-                       writel(IER_UUE, FFIER); /* Enable FFUART */
-               break;
+       clk_reg = UART_CLK_REG;
+       clk_offset = UART_CLK_BASE << uart_index;
 
-               case BTUART_INDEX:
-#ifdef CONFIG_CPU_MONAHANS
-                       writel(readl(CKENA) | CKENA_21_BTUART, CKENA);
-#else
-                       writel(readl(CKEN) | CKEN7_BTUART, CKEN);
-#endif /*  CONFIG_CPU_MONAHANS */
+       reg = readl(clk_reg);
 
-                       writel(0, BTIER);
-                       writel(0, BTFCR);
+       if (enable)
+               reg |= clk_offset;
+       else
+               reg &= ~clk_offset;
 
-                       /* set baud rate */
-                       writel(LCR_DLAB, BTLCR);
-                       writel(quot & 0xff, BTDLL);
-                       writel(quot >> 8, BTDLH);
-                       writel(LCR_WLS0 | LCR_WLS1, BTLCR);
+       writel(reg, clk_reg);
+}
 
-                       writel(IER_UUE, BTIER); /* Enable BFUART */
+/*
+ * Enable clock and set baud rate, parity etc.
+ */
+void pxa_setbrg_dev(uint32_t uart_index)
+{
+       uint32_t divider = 0;
+       struct pxa_uart_regs *uart_regs;
 
-               break;
+       divider = pxa_uart_get_baud_divider();
+       if (!divider)
+               hang();
 
-               case STUART_INDEX:
-#ifdef CONFIG_CPU_MONAHANS
-                       writel(readl(CKENA) | CKENA_23_STUART, CKENA);
-#else
-                       writel(readl(CKEN) | CKEN5_STUART, CKEN);
-#endif /* CONFIG_CPU_MONAHANS */
+       uart_regs = pxa_uart_index_to_regs(uart_index);
+       if (!uart_regs)
+               hang();
 
-                       writel(0, STIER);
-                       writel(0, STFCR);
+       pxa_uart_toggle_clock(uart_index, 1);
 
-                       /* set baud rate */
-                       writel(LCR_DLAB, STLCR);
-                       writel(quot & 0xff, STDLL);
-                       writel(quot >> 8, STDLH);
-                       writel(LCR_WLS0 | LCR_WLS1, STLCR);
+       /* Disable interrupts and FIFOs */
+       writel(0, &uart_regs->ier);
+       writel(0, &uart_regs->fcr);
 
-                       writel(IER_UUE, STIER); /* Enable STUART */
-                       break;
+       /* Set baud rate */
+       writel(LCR_WLS0 | LCR_WLS1 | LCR_DLAB, &uart_regs->lcr);
+       writel(divider & 0xff, &uart_regs->dll);
+       writel(divider >> 8, &uart_regs->dlh);
+       writel(LCR_WLS0 | LCR_WLS1, &uart_regs->lcr);
 
-               default:
-                       hang();
-       }
+       /* Enable UART */
+       writel(IER_UUE, &uart_regs->ier);
 }
 
-
 /*
  * Initialise the serial port with the given baudrate. The settings
  * are always 8 data bits, no parity, 1 stop bit, no start bits.
- *
  */
-int pxa_init_dev (unsigned int uart_index)
+int pxa_init_dev(unsigned int uart_index)
 {
        pxa_setbrg_dev (uart_index);
-
-       return (0);
+       return 0;
 }
 
-
 /*
  * Output a single byte to the serial port.
  */
-void pxa_putc_dev (unsigned int uart_index,const char c)
+void pxa_putc_dev(unsigned int uart_index, const char c)
 {
-       switch (uart_index) {
-               case FFUART_INDEX:
-               /* wait for room in the tx FIFO on FFUART */
-                       while ((readl(FFLSR) & LSR_TEMT) == 0)
-                               WATCHDOG_RESET ();      /* Reset HW Watchdog, if needed */
-                       writel(c, FFTHR);
-                       break;
-
-               case BTUART_INDEX:
-                       while ((readl(BTLSR) & LSR_TEMT) == 0)
-                               WATCHDOG_RESET ();      /* Reset HW Watchdog, if needed */
-                       writel(c, BTTHR);
-                       break;
-
-               case STUART_INDEX:
-                       while ((readl(STLSR) & LSR_TEMT) == 0)
-                               WATCHDOG_RESET ();      /* Reset HW Watchdog, if needed */
-                       writel(c, STTHR);
-                       break;
-       }
+       struct pxa_uart_regs *uart_regs;
+
+       uart_regs = pxa_uart_index_to_regs(uart_index);
+       if (!uart_regs)
+               hang();
+
+       while (!(readl(&uart_regs->lsr) & LSR_TEMT))
+               WATCHDOG_RESET();
+       writel(c, &uart_regs->thr);
 
        /* If \n, also do \r */
        if (c == '\n')
@@ -185,17 +200,15 @@ void pxa_putc_dev (unsigned int uart_index,const char c)
  * otherwise. When the function is succesfull, the character read is
  * written into its argument c.
  */
-int pxa_tstc_dev (unsigned int uart_index)
+int pxa_tstc_dev(unsigned int uart_index)
 {
-       switch (uart_index) {
-               case FFUART_INDEX:
-                       return readl(FFLSR) & LSR_DR;
-               case BTUART_INDEX:
-                       return readl(BTLSR) & LSR_DR;
-               case STUART_INDEX:
-                       return readl(STLSR) & LSR_DR;
-       }
-       return -1;
+       struct pxa_uart_regs *uart_regs;
+
+       uart_regs = pxa_uart_index_to_regs(uart_index);
+       if (!uart_regs)
+               return -1;
+
+       return readl(&uart_regs->lsr) & LSR_DR;
 }
 
 /*
@@ -203,187 +216,86 @@ int pxa_tstc_dev (unsigned int uart_index)
  * otherwise. When the function is succesfull, the character read is
  * written into its argument c.
  */
-int pxa_getc_dev (unsigned int uart_index)
+int pxa_getc_dev(unsigned int uart_index)
 {
-       switch (uart_index) {
-               case FFUART_INDEX:
-                       while (!(readl(FFLSR) & LSR_DR))
-                               /* Reset HW Watchdog, if needed */
-                               WATCHDOG_RESET();
-                       return (char) readl(FFRBR) & 0xff;
-
-               case BTUART_INDEX:
-                       while (!(readl(BTLSR) & LSR_DR))
-                               /* Reset HW Watchdog, if needed */
-                               WATCHDOG_RESET();
-                       return (char) readl(BTRBR) & 0xff;
-               case STUART_INDEX:
-                       while (!(readl(STLSR) & LSR_DR))
-                               /* Reset HW Watchdog, if needed */
-                               WATCHDOG_RESET();
-                       return (char) readl(STRBR) & 0xff;
-       }
-       return -1;
-}
+       struct pxa_uart_regs *uart_regs;
 
-void
-pxa_puts_dev (unsigned int uart_index,const char *s)
-{
-       while (*s) {
-               pxa_putc_dev (uart_index,*s++);
-       }
-}
+       uart_regs = pxa_uart_index_to_regs(uart_index);
+       if (!uart_regs)
+               return -1;
 
-#if defined (CONFIG_FFUART)
-static int ffuart_init(void)
-{
-       return pxa_init_dev(FFUART_INDEX);
+       while (!(readl(&uart_regs->lsr) & LSR_DR))
+               WATCHDOG_RESET();
+       return readl(&uart_regs->rbr) & 0xff;
 }
 
-static void ffuart_setbrg(void)
+void pxa_puts_dev(unsigned int uart_index, const char *s)
 {
-       return pxa_setbrg_dev(FFUART_INDEX);
+       while (*s)
+               pxa_putc_dev(uart_index, *s++);
 }
 
-static void ffuart_putc(const char c)
-{
-       return pxa_putc_dev(FFUART_INDEX,c);
-}
-
-static void ffuart_puts(const char *s)
-{
-       return pxa_puts_dev(FFUART_INDEX,s);
-}
-
-static int ffuart_getc(void)
-{
-       return pxa_getc_dev(FFUART_INDEX);
-}
-
-static int ffuart_tstc(void)
-{
-       return pxa_tstc_dev(FFUART_INDEX);
-}
-
-struct serial_device serial_ffuart_device =
-{
-       "serial_ffuart",
-       ffuart_init,
-       NULL,
-       ffuart_setbrg,
-       ffuart_getc,
-       ffuart_tstc,
-       ffuart_putc,
-       ffuart_puts,
-};
+#define        pxa_uart(uart, UART)                                            \
+       int uart##_init(void)                                           \
+       {                                                               \
+               return pxa_init_dev(UART##_INDEX);                      \
+       }                                                               \
+                                                                       \
+       void uart##_setbrg(void)                                        \
+       {                                                               \
+               return pxa_setbrg_dev(UART##_INDEX);                    \
+       }                                                               \
+                                                                       \
+       void uart##_putc(const char c)                                  \
+       {                                                               \
+               return pxa_putc_dev(UART##_INDEX, c);                   \
+       }                                                               \
+                                                                       \
+       void uart##_puts(const char *s)                                 \
+       {                                                               \
+               return pxa_puts_dev(UART##_INDEX, s);                   \
+       }                                                               \
+                                                                       \
+       int uart##_getc(void)                                           \
+       {                                                               \
+               return pxa_getc_dev(UART##_INDEX);                      \
+       }                                                               \
+                                                                       \
+       int uart##_tstc(void)                                           \
+       {                                                               \
+               return pxa_tstc_dev(UART##_INDEX);                      \
+       }                                                               \
+
+#define        pxa_uart_desc(uart)                                             \
+       struct serial_device serial_##uart##_device =                   \
+       {                                                               \
+               "serial_"#uart,                                         \
+               uart##_init,                                            \
+               NULL,                                                   \
+               uart##_setbrg,                                          \
+               uart##_getc,                                            \
+               uart##_tstc,                                            \
+               uart##_putc,                                            \
+               uart##_puts,                                            \
+       };
+
+#define        pxa_uart_multi(uart, UART)                                      \
+       pxa_uart(uart, UART)                                            \
+       pxa_uart_desc(uart)
+
+#if defined(CONFIG_HWUART)
+       pxa_uart_multi(hwuart, HWUART)
 #endif
-
-#if defined (CONFIG_BTUART)
-static int btuart_init(void)
-{
-       return pxa_init_dev(BTUART_INDEX);
-}
-
-static void btuart_setbrg(void)
-{
-       return pxa_setbrg_dev(BTUART_INDEX);
-}
-
-static void btuart_putc(const char c)
-{
-       return pxa_putc_dev(BTUART_INDEX,c);
-}
-
-static void btuart_puts(const char *s)
-{
-       return pxa_puts_dev(BTUART_INDEX,s);
-}
-
-static int btuart_getc(void)
-{
-       return pxa_getc_dev(BTUART_INDEX);
-}
-
-static int btuart_tstc(void)
-{
-       return pxa_tstc_dev(BTUART_INDEX);
-}
-
-struct serial_device serial_btuart_device =
-{
-       "serial_btuart",
-       btuart_init,
-       NULL,
-       btuart_setbrg,
-       btuart_getc,
-       btuart_tstc,
-       btuart_putc,
-       btuart_puts,
-};
+#if defined(CONFIG_STUART)
+       pxa_uart_multi(stuart, STUART)
 #endif
-
-#if defined (CONFIG_STUART)
-static int stuart_init(void)
-{
-       return pxa_init_dev(STUART_INDEX);
-}
-
-static void stuart_setbrg(void)
-{
-       return pxa_setbrg_dev(STUART_INDEX);
-}
-
-static void stuart_putc(const char c)
-{
-       return pxa_putc_dev(STUART_INDEX,c);
-}
-
-static void stuart_puts(const char *s)
-{
-       return pxa_puts_dev(STUART_INDEX,s);
-}
-
-static int stuart_getc(void)
-{
-       return pxa_getc_dev(STUART_INDEX);
-}
-
-static int stuart_tstc(void)
-{
-       return pxa_tstc_dev(STUART_INDEX);
-}
-
-struct serial_device serial_stuart_device =
-{
-       "serial_stuart",
-       stuart_init,
-       NULL,
-       stuart_setbrg,
-       stuart_getc,
-       stuart_tstc,
-       stuart_putc,
-       stuart_puts,
-};
+#if defined(CONFIG_FFUART)
+       pxa_uart_multi(ffuart, FFUART)
+#endif
+#if defined(CONFIG_BTUART)
+       pxa_uart_multi(btuart, BTUART)
 #endif
 
-
-#ifndef CONFIG_SERIAL_MULTI
-inline int serial_init(void) {
-       return (pxa_init_dev(UART_INDEX));
-}
-void serial_setbrg(void) {
-       pxa_setbrg_dev(UART_INDEX);
-}
-int serial_getc(void) {
-       return(pxa_getc_dev(UART_INDEX));
-}
-int serial_tstc(void) {
-       return(pxa_tstc_dev(UART_INDEX));
-}
-void serial_putc(const char c) {
-       pxa_putc_dev(UART_INDEX,c);
-}
-void serial_puts(const char *s) {
-       pxa_puts_dev(UART_INDEX,s);
-}
-#endif /* CONFIG_SERIAL_MULTI */
+#ifndef        CONFIG_SERIAL_MULTI
+       pxa_uart(serial, UART)
+#endif
index 14961c1969d3c94adbd5cf621b9a8b76349d3c7c..e449cd717df02fb1025641e8fe669d6e54b97ef6 100644 (file)
@@ -31,7 +31,7 @@
 #include <usb/omap1510_udc.h>
 #elif defined(CONFIG_MUSB_UDC)
 #include <usb/musb_udc.h>
-#elif defined(CONFIG_PXA27X)
+#elif defined(CONFIG_CPU_PXA27X)
 #include <usb/pxa27x_udc.h>
 #elif defined(CONFIG_SPEAR3XX) || defined(CONFIG_SPEAR600)
 #include <usb/spr_udc.h>
index 84ad6fade0f6c0b12b95d0811cbad77ea14f820a..6f389f093498ae00c9758f7aac99a3c36e3b6228 100644 (file)
@@ -37,6 +37,7 @@ COBJS-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o
 COBJS-$(CONFIG_MPC52XX_SPI) += mpc52xx_spi.o
 COBJS-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o
 COBJS-$(CONFIG_MXC_SPI) += mxc_spi.o
+COBJS-$(CONFIG_MXS_SPI) += mxs_spi.o
 COBJS-$(CONFIG_OC_TINY_SPI) += oc_tiny_spi.o
 COBJS-$(CONFIG_OMAP3_SPI) += omap3_spi.o
 COBJS-$(CONFIG_SOFT_SPI) += soft_spi.o
index 33e38b61b72501a8d5935741e8894d923b2cb797..83ef8e8b193c9c9e30e760a4c8d40afc08ed8cce 100644 (file)
@@ -136,13 +136,11 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
        unsigned int    len_tx;
        unsigned int    len_rx;
        unsigned int    len;
-       int             ret;
        u32             status;
        const u8        *txp = dout;
        u8              *rxp = din;
        u8              value;
 
-       ret = 0;
        if (bitlen == 0)
                /* Finish any previously submitted transfers */
                goto out;
diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c
new file mode 100644 (file)
index 0000000..4c27fef
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+ * Freescale i.MX28 SPI driver
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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: This driver only supports the SPI-controller chipselects,
+ *       GPIO driven chipselects are not supported.
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <spi.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+#define        MXS_SPI_MAX_TIMEOUT     1000000
+#define        MXS_SPI_PORT_OFFSET     0x2000
+
+struct mxs_spi_slave {
+       struct spi_slave        slave;
+       uint32_t                max_khz;
+       uint32_t                mode;
+       struct mx28_ssp_regs    *regs;
+};
+
+static inline struct mxs_spi_slave *to_mxs_slave(struct spi_slave *slave)
+{
+       return container_of(slave, struct mxs_spi_slave, slave);
+}
+
+void spi_init(void)
+{
+}
+
+struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
+                                 unsigned int max_hz, unsigned int mode)
+{
+       struct mxs_spi_slave *mxs_slave;
+       uint32_t addr;
+
+       if (bus > 3) {
+               printf("MXS SPI: Max bus number is 3\n");
+               return NULL;
+       }
+
+       mxs_slave = malloc(sizeof(struct mxs_spi_slave));
+       if (!mxs_slave)
+               return NULL;
+
+       addr = MXS_SSP0_BASE + (bus * MXS_SPI_PORT_OFFSET);
+
+       mxs_slave->slave.bus = bus;
+       mxs_slave->slave.cs = cs;
+       mxs_slave->max_khz = max_hz / 1000;
+       mxs_slave->mode = mode;
+       mxs_slave->regs = (struct mx28_ssp_regs *)addr;
+
+       return &mxs_slave->slave;
+}
+
+void spi_free_slave(struct spi_slave *slave)
+{
+       struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
+       free(mxs_slave);
+}
+
+int spi_claim_bus(struct spi_slave *slave)
+{
+       struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
+       struct mx28_ssp_regs *ssp_regs = mxs_slave->regs;
+       uint32_t reg = 0;
+
+       mx28_reset_block(&ssp_regs->hw_ssp_ctrl0_reg);
+
+       writel(SSP_CTRL0_BUS_WIDTH_ONE_BIT, &ssp_regs->hw_ssp_ctrl0);
+
+       reg = SSP_CTRL1_SSP_MODE_SPI | SSP_CTRL1_WORD_LENGTH_EIGHT_BITS;
+       reg |= (mxs_slave->mode & SPI_CPOL) ? SSP_CTRL1_POLARITY : 0;
+       reg |= (mxs_slave->mode & SPI_CPHA) ? SSP_CTRL1_PHASE : 0;
+       writel(reg, &ssp_regs->hw_ssp_ctrl1);
+
+       writel(0, &ssp_regs->hw_ssp_cmd0);
+
+       mx28_set_ssp_busclock(slave->bus, mxs_slave->max_khz);
+
+       return 0;
+}
+
+void spi_release_bus(struct spi_slave *slave)
+{
+}
+
+static void mxs_spi_start_xfer(struct mx28_ssp_regs *ssp_regs)
+{
+       writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_set);
+       writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_clr);
+}
+
+static void mxs_spi_end_xfer(struct mx28_ssp_regs *ssp_regs)
+{
+       writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_clr);
+       writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_set);
+}
+
+int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
+               const void *dout, void *din, unsigned long flags)
+{
+       struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
+       struct mx28_ssp_regs *ssp_regs = mxs_slave->regs;
+       int len = bitlen / 8;
+       const char *tx = dout;
+       char *rx = din;
+
+       if (bitlen == 0)
+               return 0;
+
+       if (!rx && !tx)
+               return 0;
+
+       if (flags & SPI_XFER_BEGIN)
+               mxs_spi_start_xfer(ssp_regs);
+
+       while (len--) {
+               /* We transfer 1 byte */
+               writel(1, &ssp_regs->hw_ssp_xfer_size);
+
+               if ((flags & SPI_XFER_END) && !len)
+                       mxs_spi_end_xfer(ssp_regs);
+
+               if (tx)
+                       writel(SSP_CTRL0_READ, &ssp_regs->hw_ssp_ctrl0_clr);
+               else
+                       writel(SSP_CTRL0_READ, &ssp_regs->hw_ssp_ctrl0_set);
+
+               writel(SSP_CTRL0_RUN, &ssp_regs->hw_ssp_ctrl0_set);
+
+               if (mx28_wait_mask_set(&ssp_regs->hw_ssp_ctrl0_reg,
+                       SSP_CTRL0_RUN, MXS_SPI_MAX_TIMEOUT)) {
+                       printf("MXS SPI: Timeout waiting for start\n");
+                       return -1;
+               }
+
+               if (tx)
+                       writel(*tx++, &ssp_regs->hw_ssp_data);
+
+               writel(SSP_CTRL0_DATA_XFER, &ssp_regs->hw_ssp_ctrl0_set);
+
+               if (rx) {
+                       if (mx28_wait_mask_clr(&ssp_regs->hw_ssp_status_reg,
+                               SSP_STATUS_FIFO_EMPTY, MXS_SPI_MAX_TIMEOUT)) {
+                               printf("MXS SPI: Timeout waiting for data\n");
+                               return -1;
+                       }
+
+                       *rx = readl(&ssp_regs->hw_ssp_data);
+                       rx++;
+               }
+
+               if (mx28_wait_mask_clr(&ssp_regs->hw_ssp_ctrl0_reg,
+                       SSP_CTRL0_RUN, MXS_SPI_MAX_TIMEOUT)) {
+                       printf("MXS SPI: Timeout waiting for finish\n");
+                       return -1;
+               }
+       }
+
+       return 0;
+}
similarity index 84%
rename from board/csb226/Makefile
rename to drivers/tpm/Makefile
index 6fe9becaa015a1e695d6bd345a769800740467a1..be11c8b595f1367daffc623aff8aa7c694a36749 100644 (file)
@@ -1,6 +1,4 @@
-#
-# (C) Copyright 2000-2006
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
 #
 # See file CREDITS for list of people who contributed to this
 # project.
 
 include $(TOPDIR)/config.mk
 
-LIB    = $(obj)lib$(BOARD).o
+LIB := $(obj)libtpm.o
 
-COBJS  := csb226.o flash.o
+COBJS-$(CONFIG_GENERIC_LPC_TPM) = generic_lpc_tpm.o
 
+COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
 
-$(LIB):        $(obj).depend $(OBJS)
+all:   $(LIB)
+
+$(LIB): $(obj).depend $(OBJS)
        $(call cmd_link_o_target, $(OBJS))
 
 #########################################################################
 
-# defines $(obj).depend target
 include $(SRCTREE)/rules.mk
 
 sinclude $(obj).depend
diff --git a/drivers/tpm/generic_lpc_tpm.c b/drivers/tpm/generic_lpc_tpm.c
new file mode 100644 (file)
index 0000000..6c494eb
--- /dev/null
@@ -0,0 +1,495 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * The code in this file is based on the article "Writing a TPM Device Driver"
+ * published on http://ptgmedia.pearsoncmg.com.
+ *
+ * One principal difference is that in the simplest config the other than 0
+ * TPM localities do not get mapped by some devices (for instance, by Infineon
+ * slb9635), so this driver provides access to locality 0 only.
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <tpm.h>
+
+#define PREFIX "lpc_tpm: "
+
+struct tpm_locality {
+       u32 access;
+       u8 padding0[4];
+       u32 int_enable;
+       u8 vector;
+       u8 padding1[3];
+       u32 int_status;
+       u32 int_capability;
+       u32 tpm_status;
+       u8 padding2[8];
+       u8 data;
+       u8 padding3[3803];
+       u32 did_vid;
+       u8 rid;
+       u8 padding4[251];
+};
+
+/*
+ * This pointer refers to the TPM chip, 5 of its localities are mapped as an
+ * array.
+ */
+#define TPM_TOTAL_LOCALITIES   5
+static struct tpm_locality *lpc_tpm_dev =
+       (struct tpm_locality *)CONFIG_TPM_TIS_BASE_ADDRESS;
+
+/* Some registers' bit field definitions */
+#define TIS_STS_VALID                  (1 << 7) /* 0x80 */
+#define TIS_STS_COMMAND_READY          (1 << 6) /* 0x40 */
+#define TIS_STS_TPM_GO                 (1 << 5) /* 0x20 */
+#define TIS_STS_DATA_AVAILABLE         (1 << 4) /* 0x10 */
+#define TIS_STS_EXPECT                 (1 << 3) /* 0x08 */
+#define TIS_STS_RESPONSE_RETRY         (1 << 1) /* 0x02 */
+
+#define TIS_ACCESS_TPM_REG_VALID_STS   (1 << 7) /* 0x80 */
+#define TIS_ACCESS_ACTIVE_LOCALITY     (1 << 5) /* 0x20 */
+#define TIS_ACCESS_BEEN_SEIZED         (1 << 4) /* 0x10 */
+#define TIS_ACCESS_SEIZE               (1 << 3) /* 0x08 */
+#define TIS_ACCESS_PENDING_REQUEST     (1 << 2) /* 0x04 */
+#define TIS_ACCESS_REQUEST_USE         (1 << 1) /* 0x02 */
+#define TIS_ACCESS_TPM_ESTABLISHMENT   (1 << 0) /* 0x01 */
+
+#define TIS_STS_BURST_COUNT_MASK       (0xffff)
+#define TIS_STS_BURST_COUNT_SHIFT      (8)
+
+/*
+ * Error value returned if a tpm register does not enter the expected state
+ * after continuous polling. No actual TPM register reading ever returns -1,
+ * so this value is a safe error indication to be mixed with possible status
+ * register values.
+ */
+#define TPM_TIMEOUT_ERR                        (-1)
+
+/* Error value returned on various TPM driver errors. */
+#define TPM_DRIVER_ERR         (1)
+
+ /* 1 second is plenty for anything TPM does. */
+#define MAX_DELAY_US   (1000 * 1000)
+
+/* Retrieve burst count value out of the status register contents. */
+static u16 burst_count(u32 status)
+{
+       return (status >> TIS_STS_BURST_COUNT_SHIFT) & TIS_STS_BURST_COUNT_MASK;
+}
+
+/*
+ * Structures defined below allow creating descriptions of TPM vendor/device
+ * ID information for run time discovery. The only device the system knows
+ * about at this time is Infineon slb9635.
+ */
+struct device_name {
+       u16 dev_id;
+       const char * const dev_name;
+};
+
+struct vendor_name {
+       u16 vendor_id;
+       const char *vendor_name;
+       const struct device_name *dev_names;
+};
+
+static const struct device_name infineon_devices[] = {
+       {0xb, "SLB9635 TT 1.2"},
+       {0}
+};
+
+static const struct vendor_name vendor_names[] = {
+       {0x15d1, "Infineon", infineon_devices},
+};
+
+/*
+ * Cached vendor/device ID pair to indicate that the device has been already
+ * discovered.
+ */
+static u32 vendor_dev_id;
+
+/* TPM access wrappers to support tracing */
+static u8 tpm_read_byte(const u8 *ptr)
+{
+       u8  ret = readb(ptr);
+       debug(PREFIX "Read reg 0x%4.4x returns 0x%2.2x\n",
+             (u32)ptr - (u32)lpc_tpm_dev, ret);
+       return ret;
+}
+
+static u32 tpm_read_word(const u32 *ptr)
+{
+       u32  ret = readl(ptr);
+       debug(PREFIX "Read reg 0x%4.4x returns 0x%8.8x\n",
+             (u32)ptr - (u32)lpc_tpm_dev, ret);
+       return ret;
+}
+
+static void tpm_write_byte(u8 value, u8 *ptr)
+{
+       debug(PREFIX "Write reg 0x%4.4x with 0x%2.2x\n",
+             (u32)ptr - (u32)lpc_tpm_dev, value);
+       writeb(value, ptr);
+}
+
+static void tpm_write_word(u32 value, u32 *ptr)
+{
+       debug(PREFIX "Write reg 0x%4.4x with 0x%8.8x\n",
+             (u32)ptr - (u32)lpc_tpm_dev, value);
+       writel(value, ptr);
+}
+
+/*
+ * tis_wait_reg()
+ *
+ * Wait for at least a second for a register to change its state to match the
+ * expected state. Normally the transition happens within microseconds.
+ *
+ * @reg - pointer to the TPM register
+ * @mask - bitmask for the bitfield(s) to watch
+ * @expected - value the field(s) are supposed to be set to
+ *
+ * Returns the register contents in case the expected value was found in the
+ * appropriate register bits, or TPM_TIMEOUT_ERR on timeout.
+ */
+static u32 tis_wait_reg(u32 *reg, u8 mask, u8 expected)
+{
+       u32 time_us = MAX_DELAY_US;
+
+       while (time_us > 0) {
+               u32 value = tpm_read_word(reg);
+               if ((value & mask) == expected)
+                       return value;
+               udelay(1); /* 1 us */
+               time_us--;
+       }
+       return TPM_TIMEOUT_ERR;
+}
+
+/*
+ * Probe the TPM device and try determining its manufacturer/device name.
+ *
+ * Returns 0 on success (the device is found or was found during an earlier
+ * invocation) or TPM_DRIVER_ERR if the device is not found.
+ */
+int tis_init(void)
+{
+       u32 didvid = tpm_read_word(&lpc_tpm_dev[0].did_vid);
+       int i;
+       const char *device_name = "unknown";
+       const char *vendor_name = device_name;
+       u16 vid, did;
+
+       if (vendor_dev_id)
+               return 0;  /* Already probed. */
+
+       if (!didvid || (didvid == 0xffffffff)) {
+               printf("%s: No TPM device found\n", __func__);
+               return TPM_DRIVER_ERR;
+       }
+
+       vendor_dev_id = didvid;
+
+       vid = didvid & 0xffff;
+       did = (didvid >> 16) & 0xffff;
+       for (i = 0; i < ARRAY_SIZE(vendor_names); i++) {
+               int j = 0;
+               u16 known_did;
+
+               if (vid == vendor_names[i].vendor_id)
+                       vendor_name = vendor_names[i].vendor_name;
+
+               while ((known_did = vendor_names[i].dev_names[j].dev_id) != 0) {
+                       if (known_did == did) {
+                               device_name =
+                                       vendor_names[i].dev_names[j].dev_name;
+                               break;
+                       }
+                       j++;
+               }
+               break;
+       }
+
+       printf("Found TPM %s by %s\n", device_name, vendor_name);
+       return 0;
+}
+
+/*
+ * tis_senddata()
+ *
+ * send the passed in data to the TPM device.
+ *
+ * @data - address of the data to send, byte by byte
+ * @len - length of the data to send
+ *
+ * Returns 0 on success, TPM_DRIVER_ERR on error (in case the device does
+ * not accept the entire command).
+ */
+static u32 tis_senddata(const u8 * const data, u32 len)
+{
+       u32 offset = 0;
+       u16 burst = 0;
+       u32 max_cycles = 0;
+       u8 locality = 0;
+       u32 value;
+
+       value = tis_wait_reg(&lpc_tpm_dev[locality].tpm_status,
+                            TIS_STS_COMMAND_READY, TIS_STS_COMMAND_READY);
+       if (value == TPM_TIMEOUT_ERR) {
+               printf("%s:%d - failed to get 'command_ready' status\n",
+                      __FILE__, __LINE__);
+               return TPM_DRIVER_ERR;
+       }
+       burst = burst_count(value);
+
+       while (1) {
+               unsigned count;
+
+               /* Wait till the device is ready to accept more data. */
+               while (!burst) {
+                       if (max_cycles++ == MAX_DELAY_US) {
+                               printf("%s:%d failed to feed %d bytes of %d\n",
+                                      __FILE__, __LINE__, len - offset, len);
+                               return TPM_DRIVER_ERR;
+                       }
+                       udelay(1);
+                       burst = burst_count(tpm_read_word(&lpc_tpm_dev
+                                                    [locality].tpm_status));
+               }
+
+               max_cycles = 0;
+
+               /*
+                * Calculate number of bytes the TPM is ready to accept in one
+                * shot.
+                *
+                * We want to send the last byte outside of the loop (hence
+                * the -1 below) to make sure that the 'expected' status bit
+                * changes to zero exactly after the last byte is fed into the
+                * FIFO.
+                */
+               count = min(burst, len - offset - 1);
+               while (count--)
+                       tpm_write_byte(data[offset++],
+                                 &lpc_tpm_dev[locality].data);
+
+               value = tis_wait_reg(&lpc_tpm_dev[locality].tpm_status,
+                                    TIS_STS_VALID, TIS_STS_VALID);
+
+               if ((value == TPM_TIMEOUT_ERR) || !(value & TIS_STS_EXPECT)) {
+                       printf("%s:%d TPM command feed overflow\n",
+                              __FILE__, __LINE__);
+                       return TPM_DRIVER_ERR;
+               }
+
+               burst = burst_count(value);
+               if ((offset == (len - 1)) && burst) {
+                       /*
+                        * We need to be able to send the last byte to the
+                        * device, so burst size must be nonzero before we
+                        * break out.
+                        */
+                       break;
+               }
+       }
+
+       /* Send the last byte. */
+       tpm_write_byte(data[offset++], &lpc_tpm_dev[locality].data);
+       /*
+        * Verify that TPM does not expect any more data as part of this
+        * command.
+        */
+       value = tis_wait_reg(&lpc_tpm_dev[locality].tpm_status,
+                            TIS_STS_VALID, TIS_STS_VALID);
+       if ((value == TPM_TIMEOUT_ERR) || (value & TIS_STS_EXPECT)) {
+               printf("%s:%d unexpected TPM status 0x%x\n",
+                      __FILE__, __LINE__, value);
+               return TPM_DRIVER_ERR;
+       }
+
+       /* OK, sitting pretty, let's start the command execution. */
+       tpm_write_word(TIS_STS_TPM_GO, &lpc_tpm_dev[locality].tpm_status);
+       return 0;
+}
+
+/*
+ * tis_readresponse()
+ *
+ * read the TPM device response after a command was issued.
+ *
+ * @buffer - address where to read the response, byte by byte.
+ * @len - pointer to the size of buffer
+ *
+ * On success stores the number of received bytes to len and returns 0. On
+ * errors (misformatted TPM data or synchronization problems) returns
+ * TPM_DRIVER_ERR.
+ */
+static u32 tis_readresponse(u8 *buffer, u32 *len)
+{
+       u16 burst;
+       u32 value;
+       u32 offset = 0;
+       u8 locality = 0;
+       const u32 has_data = TIS_STS_DATA_AVAILABLE | TIS_STS_VALID;
+       u32 expected_count = *len;
+       int max_cycles = 0;
+
+       /* Wait for the TPM to process the command. */
+       value = tis_wait_reg(&lpc_tpm_dev[locality].tpm_status,
+                             has_data, has_data);
+       if (value == TPM_TIMEOUT_ERR) {
+               printf("%s:%d failed processing command\n",
+                      __FILE__, __LINE__);
+               return TPM_DRIVER_ERR;
+       }
+
+       do {
+               while ((burst = burst_count(value)) == 0) {
+                       if (max_cycles++ == MAX_DELAY_US) {
+                               printf("%s:%d TPM stuck on read\n",
+                                      __FILE__, __LINE__);
+                               return TPM_DRIVER_ERR;
+                       }
+                       udelay(1);
+                       value = tpm_read_word(&lpc_tpm_dev
+                                             [locality].tpm_status);
+               }
+
+               max_cycles = 0;
+
+               while (burst-- && (offset < expected_count)) {
+                       buffer[offset++] = tpm_read_byte(&lpc_tpm_dev
+                                                        [locality].data);
+
+                       if (offset == 6) {
+                               /*
+                                * We got the first six bytes of the reply,
+                                * let's figure out how many bytes to expect
+                                * total - it is stored as a 4 byte number in
+                                * network order, starting with offset 2 into
+                                * the body of the reply.
+                                */
+                               u32 real_length;
+                               memcpy(&real_length,
+                                      buffer + 2,
+                                      sizeof(real_length));
+                               expected_count = be32_to_cpu(real_length);
+
+                               if ((expected_count < offset) ||
+                                   (expected_count > *len)) {
+                                       printf("%s:%d bad response size %d\n",
+                                              __FILE__, __LINE__,
+                                              expected_count);
+                                       return TPM_DRIVER_ERR;
+                               }
+                       }
+               }
+
+               /* Wait for the next portion. */
+               value = tis_wait_reg(&lpc_tpm_dev[locality].tpm_status,
+                                    TIS_STS_VALID, TIS_STS_VALID);
+               if (value == TPM_TIMEOUT_ERR) {
+                       printf("%s:%d failed to read response\n",
+                              __FILE__, __LINE__);
+                       return TPM_DRIVER_ERR;
+               }
+
+               if (offset == expected_count)
+                       break;  /* We got all we needed. */
+
+       } while ((value & has_data) == has_data);
+
+       /*
+        * Make sure we indeed read all there was. The TIS_STS_VALID bit is
+        * known to be set.
+        */
+       if (value & TIS_STS_DATA_AVAILABLE) {
+               printf("%s:%d wrong receive status %x\n",
+                      __FILE__, __LINE__, value);
+               return TPM_DRIVER_ERR;
+       }
+
+       /* Tell the TPM that we are done. */
+       tpm_write_word(TIS_STS_COMMAND_READY, &lpc_tpm_dev
+                 [locality].tpm_status);
+       *len = offset;
+       return 0;
+}
+
+int tis_open(void)
+{
+       u8 locality = 0; /* we use locality zero for everything. */
+
+       if (tis_close())
+               return TPM_DRIVER_ERR;
+
+       /* now request access to locality. */
+       tpm_write_word(TIS_ACCESS_REQUEST_USE, &lpc_tpm_dev[locality].access);
+
+       /* did we get a lock? */
+       if (tis_wait_reg(&lpc_tpm_dev[locality].access,
+                        TIS_ACCESS_ACTIVE_LOCALITY,
+                        TIS_ACCESS_ACTIVE_LOCALITY) == TPM_TIMEOUT_ERR) {
+               printf("%s:%d - failed to lock locality %d\n",
+                      __FILE__, __LINE__, locality);
+               return TPM_DRIVER_ERR;
+       }
+
+       tpm_write_word(TIS_STS_COMMAND_READY,
+                      &lpc_tpm_dev[locality].tpm_status);
+       return 0;
+}
+
+int tis_close(void)
+{
+       u8 locality = 0;
+
+       if (tpm_read_word(&lpc_tpm_dev[locality].access) &
+           TIS_ACCESS_ACTIVE_LOCALITY) {
+               tpm_write_word(TIS_ACCESS_ACTIVE_LOCALITY,
+                              &lpc_tpm_dev[locality].access);
+
+               if (tis_wait_reg(&lpc_tpm_dev[locality].access,
+                                TIS_ACCESS_ACTIVE_LOCALITY, 0) ==
+                   TPM_TIMEOUT_ERR) {
+                       printf("%s:%d - failed to release locality %d\n",
+                              __FILE__, __LINE__, locality);
+                       return TPM_DRIVER_ERR;
+               }
+       }
+       return 0;
+}
+
+int tis_sendrecv(const u8 *sendbuf, size_t send_size,
+                u8 *recvbuf, size_t *recv_len)
+{
+       if (tis_senddata(sendbuf, send_size)) {
+               printf("%s:%d failed sending data to TPM\n",
+                      __FILE__, __LINE__);
+               return TPM_DRIVER_ERR;
+       }
+
+       return tis_readresponse(recvbuf, recv_len);
+}
index 7ee4f87eaa97baf4169a39f36d3faf5176080977..2f63340fdb8b220f2ba07314f6ffecbe0f05bb99 100644 (file)
@@ -20,6 +20,7 @@
  * MA 02111-1307 USA
  */
 
+#include <asm/unaligned.h>
 #include <common.h>
 #include <usb.h>
 #include <linux/mii.h>
@@ -372,26 +373,21 @@ static int smsc95xx_init_mac_address(struct eth_device *eth,
 static int smsc95xx_write_hwaddr(struct eth_device *eth)
 {
        struct ueth_data *dev = (struct ueth_data *)eth->priv;
-       u32 addr_lo, addr_hi;
+       u32 addr_lo = __get_unaligned_le32(&eth->enetaddr[0]);
+       u32 addr_hi = __get_unaligned_le16(&eth->enetaddr[4]);
        int ret;
 
        /* set hardware address */
        debug("** %s()\n", __func__);
-       addr_lo = cpu_to_le32(*eth->enetaddr);
-       addr_hi = cpu_to_le16(*((u16 *)(eth->enetaddr + 4)));
        ret = smsc95xx_write_reg(dev, ADDRL, addr_lo);
-       if (ret < 0) {
-               debug("Failed to write ADDRL: %d\n", ret);
+       if (ret < 0)
                return ret;
-       }
 
        ret = smsc95xx_write_reg(dev, ADDRH, addr_hi);
        if (ret < 0)
                return ret;
-       debug("MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
-               eth->enetaddr[0], eth->enetaddr[1],
-               eth->enetaddr[2], eth->enetaddr[3],
-               eth->enetaddr[4], eth->enetaddr[5]);
+
+       debug("MAC %pM\n", eth->enetaddr);
        dev->have_hwaddr = 1;
        return 0;
 }
index 7d5b504c7c1cd226dc76641b157547fa1ed278f1..5e7271352c80f868878b1183288de20fa67a1844 100644 (file)
@@ -37,7 +37,7 @@ COBJS-y += ep0.o
 COBJS-$(CONFIG_OMAP1510) += omap1510_udc.o
 COBJS-$(CONFIG_OMAP1610) += omap1510_udc.o
 COBJS-$(CONFIG_MPC885_FAMILY) += mpc8xx_udc.o
-COBJS-$(CONFIG_PXA27X) += pxa27x_udc.o
+COBJS-$(CONFIG_CPU_PXA27X) += pxa27x_udc.o
 COBJS-$(CONFIG_SPEARUDC) += spr_udc.o
 endif
 endif
index 51b2494328241167be357fe7c9335d6917a6fc84..09abb754d46703116158862cf741ca6a85170045 100644 (file)
@@ -41,6 +41,7 @@ else
 COBJS-$(CONFIG_USB_EHCI_FSL) += ehci-fsl.o
 endif
 COBJS-$(CONFIG_USB_EHCI_MXC) += ehci-mxc.o
+COBJS-$(CONFIG_USB_EHCI_MXS) += ehci-mxs.o
 COBJS-$(CONFIG_USB_EHCI_PPC4XX) += ehci-ppc4xx.o
 COBJS-$(CONFIG_USB_EHCI_IXP4XX) += ehci-ixp.o
 COBJS-$(CONFIG_USB_EHCI_KIRKWOOD) += ehci-kirkwood.o
index 5a65d92719a9f083fcc2195b276a9403d9f868dd..b2d294ee88f4d8ff3c448d967c71b9aeb50cb15e 100644 (file)
 int ehci_hcd_init(void)
 {
        struct usb_ehci *ehci;
-       char usb_phy[5];
        const char *phy_type = NULL;
        size_t len;
+#ifdef CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
+       char usb_phy[5];
 
        usb_phy[0] = '\0';
+#endif
 
        ehci = (struct usb_ehci *)CONFIG_SYS_FSL_USB_ADDR;
        hccr = (struct ehci_hccr *)((uint32_t)&ehci->caplength);
diff --git a/drivers/usb/host/ehci-mxs.c b/drivers/usb/host/ehci-mxs.c
new file mode 100644 (file)
index 0000000..c795f23
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * Freescale i.MX28 USB Host driver
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/regs-common.h>
+#include <asm/arch/regs-base.h>
+#include <asm/arch/regs-clkctrl.h>
+#include <asm/arch/regs-usb.h>
+#include <asm/arch/regs-usbphy.h>
+
+#include "ehci-core.h"
+#include "ehci.h"
+
+#if    (CONFIG_EHCI_MXS_PORT != 0) && (CONFIG_EHCI_MXS_PORT != 1)
+#error "MXS EHCI: Invalid port selected!"
+#endif
+
+#ifndef        CONFIG_EHCI_MXS_PORT
+#error "MXS EHCI: Please define correct port using CONFIG_EHCI_MXS_PORT!"
+#endif
+
+static struct ehci_mxs {
+       struct mx28_usb_regs    *usb_regs;
+       struct mx28_usbphy_regs *phy_regs;
+} ehci_mxs;
+
+int mxs_ehci_get_port(struct ehci_mxs *mxs_usb, int port)
+{
+       uint32_t usb_base, phy_base;
+       switch (port) {
+       case 0:
+               usb_base = MXS_USBCTRL0_BASE;
+               phy_base = MXS_USBPHY0_BASE;
+               break;
+       case 1:
+               usb_base = MXS_USBCTRL1_BASE;
+               phy_base = MXS_USBPHY1_BASE;
+               break;
+       default:
+               printf("CONFIG_EHCI_MXS_PORT (port = %d)\n", port);
+               return -1;
+       }
+
+       mxs_usb->usb_regs = (struct mx28_usb_regs *)usb_base;
+       mxs_usb->phy_regs = (struct mx28_usbphy_regs *)phy_base;
+       return 0;
+}
+
+/* This DIGCTL register ungates clock to USB */
+#define        HW_DIGCTL_CTRL                  0x8001c000
+#define        HW_DIGCTL_CTRL_USB0_CLKGATE     (1 << 2)
+#define        HW_DIGCTL_CTRL_USB1_CLKGATE     (1 << 16)
+
+int ehci_hcd_init(void)
+{
+
+       int ret;
+       uint32_t usb_base, cap_base;
+       struct mx28_register *digctl_ctrl =
+               (struct mx28_register *)HW_DIGCTL_CTRL;
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       ret = mxs_ehci_get_port(&ehci_mxs, CONFIG_EHCI_MXS_PORT);
+       if (ret)
+               return ret;
+
+       /* Reset the PHY block */
+       writel(USBPHY_CTRL_SFTRST, &ehci_mxs.phy_regs->hw_usbphy_ctrl_set);
+       udelay(10);
+       writel(USBPHY_CTRL_SFTRST | USBPHY_CTRL_CLKGATE,
+               &ehci_mxs.phy_regs->hw_usbphy_ctrl_clr);
+
+       /* Enable USB clock */
+       writel(CLKCTRL_PLL0CTRL0_EN_USB_CLKS | CLKCTRL_PLL0CTRL0_POWER,
+                       &clkctrl_regs->hw_clkctrl_pll0ctrl0_set);
+       writel(CLKCTRL_PLL1CTRL0_EN_USB_CLKS | CLKCTRL_PLL1CTRL0_POWER,
+                       &clkctrl_regs->hw_clkctrl_pll1ctrl0_set);
+
+       writel(HW_DIGCTL_CTRL_USB0_CLKGATE | HW_DIGCTL_CTRL_USB1_CLKGATE,
+               &digctl_ctrl->reg_clr);
+
+       /* Start USB PHY */
+       writel(0, &ehci_mxs.phy_regs->hw_usbphy_pwd);
+
+       /* Enable UTMI+ Level 2 and Level 3 compatibility */
+       writel(USBPHY_CTRL_ENUTMILEVEL3 | USBPHY_CTRL_ENUTMILEVEL2 | 1,
+               &ehci_mxs.phy_regs->hw_usbphy_ctrl_set);
+
+       usb_base = ((uint32_t)ehci_mxs.usb_regs) + 0x100;
+       hccr = (struct ehci_hccr *)usb_base;
+
+       cap_base = ehci_readl(&hccr->cr_capbase);
+       hcor = (struct ehci_hcor *)(usb_base + HC_LENGTH(cap_base));
+
+       return 0;
+}
+
+int ehci_hcd_stop(void)
+{
+       int ret;
+       uint32_t tmp;
+       struct mx28_register *digctl_ctrl =
+               (struct mx28_register *)HW_DIGCTL_CTRL;
+       struct mx28_clkctrl_regs *clkctrl_regs =
+               (struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
+
+       ret = mxs_ehci_get_port(&ehci_mxs, CONFIG_EHCI_MXS_PORT);
+       if (ret)
+               return ret;
+
+       /* Stop the USB port */
+       tmp = ehci_readl(&hcor->or_usbcmd);
+       tmp &= ~CMD_RUN;
+       ehci_writel(tmp, &hcor->or_usbcmd);
+
+       /* Disable the PHY */
+       tmp = USBPHY_PWD_RXPWDRX | USBPHY_PWD_RXPWDDIFF |
+               USBPHY_PWD_RXPWD1PT1 | USBPHY_PWD_RXPWDENV |
+               USBPHY_PWD_TXPWDV2I | USBPHY_PWD_TXPWDIBIAS |
+               USBPHY_PWD_TXPWDFS;
+       writel(tmp, &ehci_mxs.phy_regs->hw_usbphy_pwd);
+
+       /* Disable USB clock */
+       writel(CLKCTRL_PLL0CTRL0_EN_USB_CLKS,
+                       &clkctrl_regs->hw_clkctrl_pll0ctrl0_clr);
+       writel(CLKCTRL_PLL1CTRL0_EN_USB_CLKS,
+                       &clkctrl_regs->hw_clkctrl_pll1ctrl0_clr);
+
+       /* Gate off the USB clock */
+       writel(HW_DIGCTL_CTRL_USB0_CLKGATE | HW_DIGCTL_CTRL_USB1_CLKGATE,
+               &digctl_ctrl->reg_set);
+
+       return 0;
+}
index c713d421c6f616b5c364c98292613f172e7d6080..bb27dd514ad07443ebf88bb9e7bc77f3e7ec387f 100644 (file)
@@ -550,11 +550,12 @@ static int sl811_rh_submit_urb(struct usb_device *usb_dev, unsigned long pipe,
        __u8 *bufp = data_buf;
        int len = 0;
        int status = 0;
-
        __u16 bmRType_bReq;
-       __u16 wValue;
-       __u16 wIndex;
-       __u16 wLength;
+       __u16 wValue  = le16_to_cpu (cmd->value);
+       __u16 wLength = le16_to_cpu (cmd->length);
+#ifdef SL811_DEBUG
+       __u16 wIndex  = le16_to_cpu (cmd->index);
+#endif
 
        if (usb_pipeint(pipe)) {
                PDEBUG(0, "interrupt transfer unimplemented!\n");
@@ -562,9 +563,6 @@ static int sl811_rh_submit_urb(struct usb_device *usb_dev, unsigned long pipe,
        }
 
        bmRType_bReq  = cmd->requesttype | (cmd->request << 8);
-       wValue        = le16_to_cpu (cmd->value);
-       wIndex        = le16_to_cpu (cmd->index);
-       wLength       = le16_to_cpu (cmd->length);
 
        PDEBUG(5, "submit rh urb, req = %d(%x) val = %#x index = %#x len=%d\n",
               bmRType_bReq, bmRType_bReq, wValue, wIndex, wLength);
index 974bb311cca473b0b19e58b140f962df669d2d05..325edb9677d48c69a427a8c3923a626b6fc7c9d0 100644 (file)
@@ -848,7 +848,6 @@ int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
                        int len, struct devrequest *setup)
 {
        int devnum = usb_pipedevice(pipe);
-       u16 csr;
        u8  devspeed;
 
 #ifdef MUSB_NO_MULTIPOINT
@@ -862,7 +861,7 @@ int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 
        /* select control endpoint */
        writeb(MUSB_CONTROL_EP, &musbr->index);
-       csr = readw(&musbr->txcsr);
+       readw(&musbr->txcsr);
 
 #ifndef MUSB_NO_MULTIPOINT
        /* target addr and (for multipoint) hub addr/port */
index 7aecb92f69a014fb694539113899ee58a41e2f84..9c4714d50a5a444aa7128f08805163f385994270 100644 (file)
@@ -393,7 +393,6 @@ int vcxk_display_bitmap(ulong addr, int x, int y)
        unsigned long width;
        unsigned long height;
        unsigned long bpp;
-       unsigned long compression;
 
        unsigned long lw;
 
@@ -404,7 +403,6 @@ int vcxk_display_bitmap(ulong addr, int x, int y)
        bmp = (bmp_image_t *) addr;
        if ((bmp->header.signature[0] == 'B') &&
            (bmp->header.signature[1] == 'M')) {
-               compression  = le32_to_cpu(bmp->header.compression);
                width        = le32_to_cpu(bmp->header.width);
                height       = le32_to_cpu(bmp->header.height);
                bpp          = le16_to_cpu(bmp->header.bit_count);
index 561883a1fc2f8e78450333c7c77b926214b253ce..904caf768917fe8137f27b5583ab5eb4e3b8a355 100644 (file)
 /*
  * Defines for the i.MX31 driver (mx3fb.c)
  */
-#ifdef CONFIG_VIDEO_MX3
+#if defined(CONFIG_VIDEO_MX3) || defined(CONFIG_VIDEO_MX5)
 #define VIDEO_FB_16BPP_WORD_SWAP
 #endif
 
 #include <linux/types.h>
 #include <stdio_dev.h>
 #include <video_font.h>
+#include <video_font_data.h>
 
 #if defined(CONFIG_CMD_DATE)
 #include <rtc.h>
 #define CURSOR_SET
 #endif
 
-#ifdef CONFIG_CONSOLE_CURSOR
-#ifdef CURSOR_ON
+#if defined(CONFIG_CONSOLE_CURSOR) || defined(CONFIG_VIDEO_SW_CURSOR)
+#if defined(CURSOR_ON) || \
+       (defined(CONFIG_CONSOLE_CURSOR) && defined(CONFIG_VIDEO_SW_CURSOR))
 #error only one of CONFIG_CONSOLE_CURSOR, CONFIG_VIDEO_SW_CURSOR, \
        or CONFIG_VIDEO_HW_CURSOR can be defined
 #endif
@@ -250,27 +252,18 @@ void console_cursor(int state);
 
 #define CURSOR_ON  console_cursor(1)
 #define CURSOR_OFF console_cursor(0)
-#define CURSOR_SET
+#define CURSOR_SET video_set_cursor()
+#endif /* CONFIG_CONSOLE_CURSOR || CONFIG_VIDEO_SW_CURSOR */
+
+#ifdef CONFIG_CONSOLE_CURSOR
+#ifndef        CONFIG_CONSOLE_TIME
+#error CONFIG_CONSOLE_CURSOR must be defined for CONFIG_CONSOLE_TIME
+#endif
 #ifndef CONFIG_I8042_KBD
 #warning Cursor drawing on/off needs timer function s.a. drivers/input/i8042.c
 #endif
-#else
-#ifdef CONFIG_CONSOLE_TIME
-#error CONFIG_CONSOLE_CURSOR must be defined for CONFIG_CONSOLE_TIME
-#endif
 #endif /* CONFIG_CONSOLE_CURSOR */
 
-#ifdef CONFIG_VIDEO_SW_CURSOR
-#ifdef CURSOR_ON
-#error only one of CONFIG_CONSOLE_CURSOR, CONFIG_VIDEO_SW_CURSOR, \
-       or CONFIG_VIDEO_HW_CURSOR can be defined
-#endif
-#define CURSOR_ON
-#define CURSOR_OFF video_putchar(console_col * VIDEO_FONT_WIDTH,\
-                                console_row * VIDEO_FONT_HEIGHT, ' ')
-#define CURSOR_SET video_set_cursor()
-#endif /* CONFIG_VIDEO_SW_CURSOR */
-
 
 #ifdef CONFIG_VIDEO_HW_CURSOR
 #ifdef CURSOR_ON
@@ -286,6 +279,7 @@ void console_cursor(int state);
 #ifdef CONFIG_VIDEO_LOGO
 #ifdef CONFIG_VIDEO_BMP_LOGO
 #include <bmp_logo.h>
+#include <bmp_logo_data.h>
 #define VIDEO_LOGO_WIDTH       BMP_LOGO_WIDTH
 #define VIDEO_LOGO_HEIGHT      BMP_LOGO_HEIGHT
 #define VIDEO_LOGO_LUT_OFFSET  BMP_LOGO_OFFSET
@@ -374,6 +368,10 @@ static void *video_console_address;        /* console buffer start address */
 
 static int video_logo_height = VIDEO_LOGO_HEIGHT;
 
+static int __maybe_unused cursor_state;
+static int __maybe_unused old_col;
+static int __maybe_unused old_row;
+
 static int console_col;                /* cursor col */
 static int console_row;                /* cursor row */
 
@@ -432,7 +430,6 @@ static const int video_font_draw_table32[16][4] = {
        {0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff}
 };
 
-
 static void video_drawchars(int xx, int yy, unsigned char *s, int count)
 {
        u8 *cdat, *dest, *dest0;
@@ -608,27 +605,28 @@ static void video_putchar(int xx, int yy, unsigned char c)
 #if defined(CONFIG_CONSOLE_CURSOR) || defined(CONFIG_VIDEO_SW_CURSOR)
 static void video_set_cursor(void)
 {
-       /* swap drawing colors */
-       eorx = fgx;
-       fgx = bgx;
-       bgx = eorx;
-       eorx = fgx ^ bgx;
-       /* draw cursor */
-       video_putchar(console_col * VIDEO_FONT_WIDTH,
-                     console_row * VIDEO_FONT_HEIGHT, ' ');
-       /* restore drawing colors */
-       eorx = fgx;
-       fgx = bgx;
-       bgx = eorx;
-       eorx = fgx ^ bgx;
+       if (cursor_state)
+               console_cursor(0);
+       console_cursor(1);
 }
-#endif
 
-#ifdef CONFIG_CONSOLE_CURSOR
-void console_cursor(int state)
+static void video_invertchar(int xx, int yy)
 {
-       static int last_state = 0;
+       int firstx = xx * VIDEO_PIXEL_SIZE;
+       int lastx = (xx + VIDEO_FONT_WIDTH) * VIDEO_PIXEL_SIZE;
+       int firsty = yy * VIDEO_LINE_LEN;
+       int lasty = (yy + VIDEO_FONT_HEIGHT) * VIDEO_LINE_LEN;
+       int x, y;
+       for (y = firsty; y < lasty; y += VIDEO_LINE_LEN) {
+               for (x = firstx; x < lastx; x++) {
+                       u8 *dest = (u8 *)(video_fb_address) + x + y;
+                       *dest = ~*dest;
+               }
+       }
+}
 
+void console_cursor(int state)
+{
 #ifdef CONFIG_CONSOLE_TIME
        struct rtc_time tm;
        char info[16];
@@ -650,17 +648,22 @@ void console_cursor(int state)
        }
 #endif
 
-       if (state && (last_state != state)) {
-               video_set_cursor();
-       }
-
-       if (!state && (last_state != state)) {
-               /* clear cursor */
-               video_putchar(console_col * VIDEO_FONT_WIDTH,
-                             console_row * VIDEO_FONT_HEIGHT, ' ');
+       if (cursor_state != state) {
+               if (cursor_state) {
+                       /* turn off the cursor */
+                       video_invertchar(old_col * VIDEO_FONT_WIDTH,
+                                        old_row * VIDEO_FONT_HEIGHT +
+                                        video_logo_height);
+               } else {
+                       /* turn off the cursor and record where it is */
+                       video_invertchar(console_col * VIDEO_FONT_WIDTH,
+                                        console_row * VIDEO_FONT_HEIGHT +
+                                        video_logo_height);
+                       old_col = console_col;
+                       old_row = console_row;
+               }
+               cursor_state = state;
        }
-
-       last_state = state;
 }
 #endif
 
@@ -727,19 +730,11 @@ static void console_back(void)
                if (console_row < 0)
                        console_row = 0;
        }
-       video_putchar(console_col * VIDEO_FONT_WIDTH,
-                     console_row * VIDEO_FONT_HEIGHT, ' ');
+       CURSOR_SET;
 }
 
 static void console_newline(void)
 {
-       /* Check if last character in the line was just drawn. If so, cursor was
-          overwriten and need not to be cleared. Cursor clearing without this
-          check causes overwriting the 1st character of the line if line lenght
-          is >= CONSOLE_COLS
-        */
-       if (console_col < CONSOLE_COLS)
-               CURSOR_OFF;
        console_row++;
        console_col = 0;
 
@@ -755,7 +750,6 @@ static void console_newline(void)
 
 static void console_cr(void)
 {
-       CURSOR_OFF;
        console_col = 0;
 }
 
@@ -763,6 +757,8 @@ void video_putc(const char c)
 {
        static int nl = 1;
 
+       CURSOR_OFF;
+
        switch (c) {
        case 13:                /* back to first column */
                console_cr();
@@ -775,7 +771,6 @@ void video_putc(const char c)
                break;
 
        case 9:         /* tab 8 */
-               CURSOR_OFF;
                console_col |= 0x0008;
                console_col &= ~0x0007;
 
index 3db614d9f9de6b97749fcad70bebe65a05d99773..0ed5f415f7c9690e715726984392e69657a55dc7 100644 (file)
 #undef VGA_DEBUG
 #undef VGA_DUMP_REG
 #ifdef VGA_DEBUG
-#define        PRINTF(fmt,args...)     printf (fmt ,##args)
+#undef _DEBUG
+#define _DEBUG  1
 #else
-#define PRINTF(fmt,args...)
+#undef _DEBUG
+#define _DEBUG  0
 #endif
 
 /* Macros */
@@ -740,7 +742,7 @@ FindAndSetPllParamIntoXrRegs (unsigned int pixelclock,
        }
        m += param->mn_diff;
        n += param->mn_diff;
-       PRINTF ("VCO %d, pd %d, m %d n %d vld %d \n", fvco, pd, m, n, vld);
+       debug("VCO %d, pd %d, m %d n %d vld %d\n", fvco, pd, m, n, vld);
        xr_cb = ((0x7 & PD) << 4) | (vld == param->vld_set ? 0x04 : 0);
        /* All four of the registers used for dot clock 2 (XRC8 - XRCB) must be
         * written, and in order from XRC8 to XRCB, before the hardware will
@@ -751,7 +753,7 @@ FindAndSetPllParamIntoXrRegs (unsigned int pixelclock,
        ctWrite_i (CT_XR_O, 0xca, 0);   /* because of a hw bug I guess, but we write */
        ctWrite_i (CT_XR_O, 0xcb, xr_cb);       /* 0 to it for savety */
        new_pixclock = ReadPixClckFromXrRegsBack (param);
-       PRINTF ("pixelclock.set = %d, pixelclock.real = %d \n",
+       debug("pixelclock.set = %d, pixelclock.real = %d\n",
                pixelclock, new_pixclock);
 }
 
@@ -1119,7 +1121,7 @@ video_hw_init (void)
                pGD->dprBase &= 0xfffff000;
                pGD->dprBase += 0x00001000;
        }
-       PRINTF ("Cursor Start %x Pattern Start %x\n", pGD->dprBase,
+       debug("Cursor Start %x Pattern Start %x\n", pGD->dprBase,
                PATTERN_ADR);
        pGD->vprBase = pci_mem_base;    /* Dummy */
        pGD->cprBase = pci_mem_base;    /* Dummy */
index bca9fb59bf78f3f1b3a3f991f379b54b74356d13..a2981b18eb50b1e31bdda016478b0ea9135a78ea 100644 (file)
@@ -685,7 +685,6 @@ static u32 wait_for_event(u32 event)
 void *video_hw_init(void)
 {
        struct da8xx_fb_par *par;
-       int ret;
        u32 size;
        char *p;
 
@@ -738,7 +737,6 @@ void *video_hw_init(void)
 
        if (lcd_init(par, &lcd_cfg, lcd_panel) < 0) {
                printf("lcd_init failed\n");
-               ret = -EFAULT;
                goto err_release_fb;
        }
 
@@ -754,7 +752,6 @@ void *video_hw_init(void)
                (unsigned int)par->vram_virt);
        if (!par->vram_virt) {
                printf("GLCD: malloc for frame buffer failed\n");
-               ret = -EINVAL;
                goto err_release_fb;
        }
 
index cb439044fbf58fc9befd06ef4265b41535813688..648ffa3a6767512252548b7a6e2b036cffcb5105 100644 (file)
@@ -106,6 +106,38 @@ static struct fb_videomode fsl_diu_mode_1280_1024 = {
        .vmode          = FB_VMODE_NONINTERLACED
 };
 
+static struct fb_videomode fsl_diu_mode_1280_720 = {
+       .name           = "1280x720-60",
+       .refresh        = 60,
+       .xres           = 1280,
+       .yres           = 720,
+       .pixclock       = 13426,
+       .left_margin    = 192,
+       .right_margin   = 64,
+       .upper_margin   = 22,
+       .lower_margin   = 1,
+       .hsync_len      = 136,
+       .vsync_len      = 3,
+       .sync           = FB_SYNC_COMP_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+       .vmode          = FB_VMODE_NONINTERLACED
+};
+
+static struct fb_videomode fsl_diu_mode_1920_1080 = {
+       .name           = "1920x1080-60",
+       .refresh        = 60,
+       .xres           = 1920,
+       .yres           = 1080,
+       .pixclock       = 5787,
+       .left_margin    = 328,
+       .right_margin   = 120,
+       .upper_margin   = 34,
+       .lower_margin   = 1,
+       .hsync_len      = 208,
+       .vsync_len      = 3,
+       .sync           = FB_SYNC_COMP_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+       .vmode          = FB_VMODE_NONINTERLACED
+};
+
 /*
  * These are the fields of area descriptor(in DDR memory) for every plane
  */
@@ -252,11 +284,19 @@ int fsl_diu_init(u16 xres, u16 yres, u32 pixel_format, int gamma_fix)
                break;
        case RESOLUTION(800, 600):
                fsl_diu_mode_db = &fsl_diu_mode_800_600;
+               break;
        case RESOLUTION(1024, 768):
                fsl_diu_mode_db = &fsl_diu_mode_1024_768;
+               break;
        case RESOLUTION(1280, 1024):
                fsl_diu_mode_db = &fsl_diu_mode_1280_1024;
                break;
+       case RESOLUTION(1280, 720):
+               fsl_diu_mode_db = &fsl_diu_mode_1280_720;
+               break;
+       case RESOLUTION(1920, 1080):
+               fsl_diu_mode_db = &fsl_diu_mode_1920_1080;
+               break;
        default:
                printf("DIU:   Unsupported resolution %ux%u\n", xres, yres);
                return -1;
index f30deb3922847aaf5de878886290dcfc7f7ac022..eb75c6a4d012ecdda137451a71f21f661abbaf61 100644 (file)
@@ -824,7 +824,7 @@ void *video_hw_init(void)
        char *penv;
        u32 memsize;
        unsigned long t1, hsynch, vsynch;
-       int bits_per_pixel, i, tmp, vesa_idx = 0, videomode;
+       int bits_per_pixel, i, tmp, videomode;
 
        tmp = 0;
 
@@ -857,7 +857,6 @@ void *video_hw_init(void)
                mode = (struct ctfb_res_modes *)
                                &res_mode_init[vesa_modes[i].resindex];
                bits_per_pixel = vesa_modes[i].bits_per_pixel;
-               vesa_idx = vesa_modes[i].resindex;
        } else {
                mode = (struct ctfb_res_modes *) &var_mode;
                bits_per_pixel = video_get_params(mode, penv);
index 707250d24962e8d61522940cf1b93ae7eb219299..a610b74ce661c77a2698ebe00dd81e5ef7b26531 100644 (file)
@@ -41,6 +41,7 @@
 
 /* include the font data */
 #include <video_font.h>
+#include <video_font_data.h>
 
 #if VIDEO_FONT_WIDTH != 8 || VIDEO_FONT_HEIGHT != 16
 #error Expecting VIDEO_FONT_WIDTH == 8 && VIDEO_FONT_HEIGHT == 16
index 65e74918470f7fc5f8b003a59248af42aa5797eb..19d38f69554e564f24dee6b614aaa56fb9d6aee6 100644 (file)
@@ -48,6 +48,7 @@ int main(int argc, char * const argv[])
        ulong start, now;
        struct device_info *di;
        lbasize_t rlen;
+       struct display_info disinfo;
 
        if (!api_search_sig(&sig))
                return -1;
@@ -176,6 +177,36 @@ int main(int argc, char * const argv[])
        while ((env = ub_env_enum(env)) != NULL)
                printf("%s = %s\n", env, ub_env_get(env));
 
+       printf("\n*** Display ***\n");
+
+       if (ub_display_get_info(DISPLAY_TYPE_LCD, &disinfo)) {
+               printf("LCD info: failed\n");
+       } else {
+               printf("LCD info:\n");
+               printf("  pixel width:  %d\n", disinfo.pixel_width);
+               printf("  pixel height: %d\n", disinfo.pixel_height);
+               printf("  screen rows:  %d\n", disinfo.screen_rows);
+               printf("  screen cols:  %d\n", disinfo.screen_cols);
+       }
+       if (ub_display_get_info(DISPLAY_TYPE_VIDEO, &disinfo)) {
+               printf("video info: failed\n");
+       } else {
+               printf("video info:\n");
+               printf("  pixel width:  %d\n", disinfo.pixel_width);
+               printf("  pixel height: %d\n", disinfo.pixel_height);
+               printf("  screen rows:  %d\n", disinfo.screen_rows);
+               printf("  screen cols:  %d\n", disinfo.screen_cols);
+       }
+
+       printf("*** Press any key to continue ***\n");
+       printf("got char 0x%x\n", ub_getc());
+
+       /*
+        * This only clears messages on screen, not on serial port. It is
+        * equivalent to a no-op if no display is available.
+        */
+       ub_display_clear();
+
        /* reset */
        printf("\n*** Resetting board ***\n");
        ub_reset();
index eff6a7e62f515806036efb3f6f9b7ea5a73b5054..d907e3f2875baef3da2a2c9ad3778e7de2564d36 100644 (file)
@@ -402,3 +402,34 @@ const char * ub_env_enum(const char *last)
 
        return env_name;
 }
+
+/****************************************
+ *
+ * display
+ *
+ ****************************************/
+
+int ub_display_get_info(int type, struct display_info *di)
+{
+       int err = 0;
+
+       if (!syscall(API_DISPLAY_GET_INFO, &err, (uint32_t)type, (uint32_t)di))
+               return API_ESYSC;
+
+       return err;
+}
+
+int ub_display_draw_bitmap(ulong bitmap, int x, int y)
+{
+       int err = 0;
+
+       if (!syscall(API_DISPLAY_DRAW_BITMAP, &err, bitmap, x, y))
+               return API_ESYSC;
+
+       return err;
+}
+
+void ub_display_clear(void)
+{
+       syscall(API_DISPLAY_CLEAR, NULL);
+}
index 6bf47d07c8f5484dffee1ed7e4d8b790d310807a..e43f7d9941fef3c41ba35493f3e989ff6a2e6f47 100644 (file)
@@ -77,4 +77,9 @@ int                   ub_dev_send(int handle, void *buf, int len);
 int                    ub_dev_recv(int handle, void *buf, int len, int *rlen);
 struct device_info *   ub_dev_get(int);
 
+/* display */
+int ub_display_get_info(int type, struct display_info *di);
+int ub_display_draw_bitmap(ulong bitmap, int x, int y);
+void ub_display_clear(void);
+
 #endif /* _API_GLUE_H_ */
index b5b450317d942e5ea883f05eb5580b418f646b99..2e14aba390e62d0974330c16069792f52f769568 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <common.h>
 #include <exports.h>
+#include <spi.h>
 
 #define CMD_ID    0x9f
 #define CMD_STAT  0xd7
index 11c756525ae57ad813192a4f160ff7af39c1d7e5..a6add6abcd4c433f1a580a976b3b7a973ec87cc1 100644 (file)
@@ -1,3 +1,4 @@
+#include <common.h>
 #include <exports.h>
 
 #ifndef GCC_VERSION
index c4329afbd5597e58411186485e4f3708157c202d..f0ef8db9ee995c5f8b1729a1601a818e64717025 100644 (file)
@@ -851,9 +851,8 @@ static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
        int retval = YAFFS_OK;
        __u8 *data = yaffs_GetTempBuffer(dev, __LINE__);
        yaffs_ExtendedTags tags;
-       int result;
 
-       result = yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
+       yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
 
        if(tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
                retval = YAFFS_FAIL;
@@ -3460,7 +3459,6 @@ int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
 
        int prevChunkId;
        int retVal = 0;
-       int result = 0;
 
        int newChunkId;
        yaffs_ExtendedTags newTags;
@@ -3484,7 +3482,7 @@ int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
                prevChunkId = in->chunkId;
 
                if (prevChunkId >= 0) {
-                       result = yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
+                       yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
                                                        buffer, &oldTags);
 
                        yaffs_VerifyObjectHeader(in,oh,&oldTags,0);
@@ -3771,7 +3769,6 @@ static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
        yaffs_Object *theObj;
        int usage;
        int i;
-       int pushout;
 
        if (dev->nShortOpCaches > 0) {
                /* Try find a non-dirty one... */
@@ -3790,7 +3787,6 @@ static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
                        theObj = NULL;
                        usage = -1;
                        cache = NULL;
-                       pushout = -1;
 
                        for (i = 0; i < dev->nShortOpCaches; i++) {
                                if (dev->srCache[i].object &&
@@ -3800,7 +3796,6 @@ static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
                                        usage = dev->srCache[i].lastUse;
                                        theObj = dev->srCache[i].object;
                                        cache = &dev->srCache[i];
-                                       pushout = i;
                                }
                        }
 
@@ -5234,7 +5229,6 @@ static int yaffs_Scan(yaffs_Device * dev)
        int startIterator;
        int endIterator;
        int nBlocksToScan = 0;
-       int result;
 
        int chunk;
        int c;
@@ -5377,7 +5371,7 @@ static int yaffs_Scan(yaffs_Device * dev)
                        /* Read the tags and decide what to do */
                        chunk = blk * dev->nChunksPerBlock + c;
 
-                       result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
+                       yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
                                                        &tags);
 
                        /* Let's have a good look at this chunk... */
@@ -5474,7 +5468,7 @@ static int yaffs_Scan(yaffs_Device * dev)
                                yaffs_SetChunkBit(dev, blk, c);
                                bi->pagesInUse++;
 
-                               result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk,
+                               yaffs_ReadChunkWithTagsFromNAND(dev, chunk,
                                                                chunkData,
                                                                NULL);
 
@@ -5744,8 +5738,6 @@ static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in)
        yaffs_ObjectHeader *oh;
        yaffs_Device *dev = in->myDev;
        yaffs_ExtendedTags tags;
-       int result;
-       int alloc_failed = 0;
 
        if(!in)
                return;
@@ -5760,7 +5752,8 @@ static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in)
                in->lazyLoaded = 0;
                chunkData = yaffs_GetTempBuffer(dev, __LINE__);
 
-               result = yaffs_ReadChunkWithTagsFromNAND(dev,in->chunkId,chunkData,&tags);
+               yaffs_ReadChunkWithTagsFromNAND(dev, in->chunkId,
+                                               chunkData, &tags);
                oh = (yaffs_ObjectHeader *) chunkData;
 
                in->yst_mode = oh->yst_mode;
@@ -5785,8 +5778,6 @@ static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in)
                if(in->variantType == YAFFS_OBJECT_TYPE_SYMLINK){
                         in->variant.symLinkVariant.alias =
                                                    yaffs_CloneString(oh->alias);
-                       if(!in->variant.symLinkVariant.alias)
-                               alloc_failed = 1; /* Not returned to caller */
                }
 
                yaffs_ReleaseTempBuffer(dev,chunkData, __LINE__);
@@ -5803,9 +5794,7 @@ static int yaffs_ScanBackwards(yaffs_Device * dev)
        int nBlocksToScan = 0;
 
        int chunk;
-       int result;
        int c;
-       int deleted;
        yaffs_BlockState state;
        yaffs_Object *hardList = NULL;
        yaffs_BlockInfo *bi;
@@ -5971,8 +5960,6 @@ static int yaffs_ScanBackwards(yaffs_Device * dev)
 
                state = bi->blockState;
 
-               deleted = 0;
-
                /* For each chunk in each block that needs scanning.... */
                foundChunksInBlock = 0;
                for (c = dev->nChunksPerBlock - 1;
@@ -5985,7 +5972,7 @@ static int yaffs_ScanBackwards(yaffs_Device * dev)
 
                        chunk = blk * dev->nChunksPerBlock + c;
 
-                       result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
+                       yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
                                                        &tags);
 
                        /* Let's have a good look at this chunk... */
@@ -6132,7 +6119,7 @@ static int yaffs_ScanBackwards(yaffs_Device * dev)
                                         * living with invalid data until needed.
                                         */
 
-                                       result = yaffs_ReadChunkWithTagsFromNAND(dev,
+                                       yaffs_ReadChunkWithTagsFromNAND(dev,
                                                                        chunk,
                                                                        chunkData,
                                                                        NULL);
@@ -6654,7 +6641,6 @@ int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
        }
 #endif
        else {
-               int result;
                __u8 *buffer = yaffs_GetTempBuffer(obj->myDev, __LINE__);
 
                yaffs_ObjectHeader *oh = (yaffs_ObjectHeader *) buffer;
@@ -6662,7 +6648,7 @@ int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
                memset(buffer, 0, obj->myDev->nDataBytesPerChunk);
 
                if (obj->chunkId >= 0) {
-                       result = yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
+                       yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
                                                        obj->chunkId, buffer,
                                                        NULL);
                }
index 70a8a8c72a407eb6c7e9892d23b8c212fe0b24bd..e872323b2f400b84b88aeceaa2ec6d466ba130da 100644 (file)
@@ -136,9 +136,8 @@ static void yaffs_LoadTagsIntoSpare(yaffs_Spare * sparePtr,
 }
 
 static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr,
-                                  yaffs_Tags * tagsPtr)
+                                  yaffs_TagsUnion *tu)
 {
-       yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
        int result;
 
        tu->asBytes[0] = sparePtr->tagByte0;
@@ -150,7 +149,7 @@ static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr,
        tu->asBytes[6] = sparePtr->tagByte6;
        tu->asBytes[7] = sparePtr->tagByte7;
 
-       result = yaffs_CheckECCOnTags(tagsPtr);
+       result = yaffs_CheckECCOnTags(&tu->asTags);
        if (result > 0) {
                dev->tagsEccFixed++;
        } else if (result < 0) {
@@ -437,7 +436,7 @@ int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
 {
 
        yaffs_Spare spare;
-       yaffs_Tags tags;
+       yaffs_TagsUnion tags;
        yaffs_ECCResult eccResult;
 
        static yaffs_Spare spareFF;
@@ -467,10 +466,10 @@ int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
                        if (eTags->chunkUsed) {
                                yaffs_GetTagsFromSpare(dev, &spare, &tags);
 
-                               eTags->objectId = tags.objectId;
-                               eTags->chunkId = tags.chunkId;
-                               eTags->byteCount = tags.byteCount;
-                               eTags->serialNumber = tags.serialNumber;
+                               eTags->objectId = tags.asTags.objectId;
+                               eTags->chunkId = tags.asTags.chunkId;
+                               eTags->byteCount = tags.asTags.byteCount;
+                               eTags->serialNumber = tags.asTags.serialNumber;
                        }
                }
 
index ec224c545c5d0924c4ed71579f3c8dc4557fbea3..7cd3e907002a5c909ce91bb8605619a986f628d7 100644 (file)
@@ -1,5 +1,6 @@
 /autoconf.mk*
 /asm
 /bmp_logo.h
+/bmp_logo_data.h
 /config.h
 /config.mk
diff --git a/include/andestech/andes_pcu.h b/include/andestech/andes_pcu.h
new file mode 100644 (file)
index 0000000..b4dbd71
--- /dev/null
@@ -0,0 +1,367 @@
+/*
+ * (C) Copyright 2011 Andes Technology Corp
+ * Macpaul Lin <macpaul@andestech.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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/*
+ * Andes Power Control Unit
+ */
+#ifndef __ANDES_PCU_H
+#define __ANDES_PCU_H
+
+#ifndef __ASSEMBLY__
+
+struct pcs {
+       unsigned int    cr;             /* PCSx Configuration (clock scaling) */
+       unsigned int    parm;           /* PCSx Parameter*/
+       unsigned int    stat1;          /* PCSx Status 1 */
+       unsigned int    stat2;          /* PCSx Stusts 2 */
+       unsigned int    pdd;            /* PCSx PDD */
+};
+
+struct andes_pcu {
+       unsigned int    rev;            /* 0x00 - PCU Revision */
+       unsigned int    spinfo;         /* 0x04 - Scratch Pad Info */
+       unsigned int    rsvd1[2];       /* 0x08-0x0C: Reserved */
+       unsigned int    soc_id;         /* 0x10 - SoC ID */
+       unsigned int    soc_ahb;        /* 0x14 - SoC AHB configuration */
+       unsigned int    soc_apb;        /* 0x18 - SoC APB configuration */
+       unsigned int    rsvd2;          /* 0x1C */
+       unsigned int    dcsrcr0;        /* 0x20 - Driving Capability
+                                               and Slew Rate Control 0 */
+       unsigned int    dcsrcr1;        /* 0x24 - Driving Capability
+                                               and Slew Rate Control 1 */
+       unsigned int    dcsrcr2;        /* 0x28 - Driving Capability
+                                               and Slew Rate Control 2 */
+       unsigned int    rsvd3;          /* 0x2C */
+       unsigned int    mfpsr0;         /* 0x30 - Multi-Func Port Setting 0 */
+       unsigned int    mfpsr1;         /* 0x34 - Multi-Func Port Setting 1 */
+       unsigned int    dmaes;          /* 0x38 - DMA Engine Selection */
+       unsigned int    rsvd4;          /* 0x3C */
+       unsigned int    oscc;           /* 0x40 - OSC Control */
+       unsigned int    pwmcd;          /* 0x44 - PWM Clock divider */
+       unsigned int    socmisc;        /* 0x48 - SoC Misc. */
+       unsigned int    rsvd5[13];      /* 0x4C-0x7C: Reserved */
+       unsigned int    bsmcr;          /* 0x80 - BSM Controrl */
+       unsigned int    bsmst;          /* 0x84 - BSM Status */
+       unsigned int    wes;            /* 0x88 - Wakeup Event Sensitivity*/
+       unsigned int    west;           /* 0x8C - Wakeup Event Status */
+       unsigned int    rsttiming;      /* 0x90 - Reset Timing  */
+       unsigned int    intr_st;        /* 0x94 - PCU Interrupt Status */
+       unsigned int    rsvd6[2];       /* 0x98-0x9C: Reserved */
+       struct pcs      pcs1;           /* 0xA0-0xB0: PCS1 (clock scaling) */
+       unsigned int    pcsrsvd1[3];    /* 0xB4-0xBC: Reserved */
+       struct pcs      pcs2;           /* 0xC0-0xD0: PCS2 (AHB clock gating) */
+       unsigned int    pcsrsvd2[3];    /* 0xD4-0xDC: Reserved */
+       struct pcs      pcs3;           /* 0xE0-0xF0: PCS3 (APB clock gating) */
+       unsigned int    pcsrsvd3[3];    /* 0xF4-0xFC: Reserved */
+       struct pcs      pcs4;           /* 0x100-0x110: PCS4 main PLL scaling */
+       unsigned int    pcsrsvd4[3];    /* 0x114-0x11C: Reserved */
+       struct pcs      pcs5;           /* 0x120-0x130: PCS5 PCI PLL scaling */
+       unsigned int    pcsrsvd5[3];    /* 0x134-0x13C: Reserved */
+       struct pcs      pcs6;           /* 0x140-0x150: PCS6 AC97 PLL scaling */
+       unsigned int    pcsrsvd6[3];    /* 0x154-0x15C: Reserved */
+       struct pcs      pcs7;           /* 0x160-0x170: PCS7 GMAC PLL scaling */
+       unsigned int    pcsrsvd7[3];    /* 0x174-0x17C: Reserved */
+       struct pcs      pcs8;           /* 0x180-0x190: PCS8 voltage scaling */
+       unsigned int    pcsrsvd8[3];    /* 0x194-0x19C: Reserved */
+       struct pcs      pcs9;           /* 0x1A0-0x1B0: PCS9 power control */
+       unsigned int    pcsrsvd9[93];   /* 0x1B4-0x3FC: Reserved */
+       unsigned int    pmspdm[40];     /* 0x400-0x4fC: Power Manager
+                                                       Scratch Pad Memory 0 */
+};
+#endif /* __ASSEMBLY__ */
+
+/*
+ * PCU Revision Register (ro)
+ */
+#define ANDES_PCU_REV_NUMBER_PCS(x)    (((x) >> 0) & 0xff)
+#define ANDES_PCU_REV_VER(x)           (((x) >> 16) & 0xffff)
+
+/*
+ * Scratch Pad Info Register (ro)
+ */
+#define ANDES_PCU_SPINFO_SIZE(x)       (((x) >> 0) & 0xff)
+#define ANDES_PCU_SPINFO_OFFSET(x)     (((x) >> 8) & 0xf)
+
+/*
+ * SoC ID Register (ro)
+ */
+#define ANDES_PCU_SOC_ID_VER_MINOR(x)  (((x) >> 0) & 0xf)
+#define ANDES_PCU_SOC_ID_VER_MAJOR(x)  (((x) >> 4) & 0xfff)
+#define ANDES_PCU_SOC_ID_DEVICEID(x)   (((x) >> 16) & 0xffff)
+
+/*
+ * SoC AHB Configuration Register (ro)
+ */
+#define ANDES_PCU_SOC_AHB_AHBC(x)              ((x) << 0)
+#define ANDES_PCU_SOC_AHB_APBREG(x)            ((x) << 1)
+#define ANDES_PCU_SOC_AHB_APB(x)               ((x) << 2)
+#define ANDES_PCU_SOC_AHB_DLM1(x)              ((x) << 3)
+#define ANDES_PCU_SOC_AHB_SPIROM(x)            ((x) << 4)
+#define ANDES_PCU_SOC_AHB_DDR2C(x)             ((x) << 5)
+#define ANDES_PCU_SOC_AHB_DDR2MEM(x)           ((x) << 6)
+#define ANDES_PCU_SOC_AHB_DMAC(x)              ((x) << 7)
+#define ANDES_PCU_SOC_AHB_DLM2(x)              ((x) << 8)
+#define ANDES_PCU_SOC_AHB_GPU(x)               ((x) << 9)
+#define ANDES_PCU_SOC_AHB_GMAC(x)              ((x) << 12)
+#define ANDES_PCU_SOC_AHB_IDE(x)               ((x) << 13)
+#define ANDES_PCU_SOC_AHB_USBOTG(x)            ((x) << 14)
+#define ANDES_PCU_SOC_AHB_INTC(x)              ((x) << 15)
+#define ANDES_PCU_SOC_AHB_LPCIO(x)             ((x) << 16)
+#define ANDES_PCU_SOC_AHB_LPCREG(x)            ((x) << 17)
+#define ANDES_PCU_SOC_AHB_PCIIO(x)             ((x) << 18)
+#define ANDES_PCU_SOC_AHB_PCIMEM(x)            ((x) << 19)
+#define ANDES_PCU_SOC_AHB_L2CC(x)              ((x) << 20)
+#define ANDES_PCU_SOC_AHB_AHB2AHBREG(x)                ((x) << 27)
+#define ANDES_PCU_SOC_AHB_AHB2AHBMEM0(x)       ((x) << 28)
+#define ANDES_PCU_SOC_AHB_AHB2AHBMEM1(x)       ((x) << 29)
+#define ANDES_PCU_SOC_AHB_AHB2AHBMEM2(x)       ((x) << 30)
+#define ANDES_PCU_SOC_AHB_AHB2AHBMEM3(x)       ((x) << 31)
+
+/*
+ * SoC APB Configuration Register (ro)
+ */
+#define ANDES_PCU_SOC_APB_CFC(x)       ((x) << 1)
+#define ANDES_PCU_SOC_APB_SSP(x)       ((x) << 2)
+#define ANDES_PCU_SOC_APB_UART1(x)     ((x) << 3)
+#define ANDES_PCU_SOC_APB_SDC(x)       ((x) << 5)
+#define ANDES_PCU_SOC_APB_AC97I2S(x)   ((x) << 6)
+#define ANDES_PCU_SOC_APB_UART2(x)     ((x) << 8)
+#define ANDES_PCU_SOC_APB_PCU(x)       ((x) << 16)
+#define ANDES_PCU_SOC_APB_TMR(x)       ((x) << 17)
+#define ANDES_PCU_SOC_APB_WDT(x)       ((x) << 18)
+#define ANDES_PCU_SOC_APB_RTC(x)       ((x) << 19)
+#define ANDES_PCU_SOC_APB_GPIO(x)      ((x) << 20)
+#define ANDES_PCU_SOC_APB_I2C(x)       ((x) << 22)
+#define ANDES_PCU_SOC_APB_PWM(x)       ((x) << 23)
+
+/*
+ * Driving Capability and Slew Rate Control Register 0 (rw)
+ */
+#define ANDES_PCU_DCSRCR0_TRIAHB(x)    (((x) & 0x1f) << 0)
+#define ANDES_PCU_DCSRCR0_LPC(x)       (((x) & 0xf) << 8)
+#define ANDES_PCU_DCSRCR0_ULPI(x)      (((x) & 0xf) << 12)
+#define ANDES_PCU_DCSRCR0_GMAC(x)      (((x) & 0xf) << 16)
+#define ANDES_PCU_DCSRCR0_GPU(x)       (((x) & 0xf) << 20)
+
+/*
+ * Driving Capability and Slew Rate Control Register 1 (rw)
+ */
+#define ANDES_PCU_DCSRCR1_I2C(x)       (((x) & 0xf) << 0)
+
+/*
+ * Driving Capability and Slew Rate Control Register 2 (rw)
+ */
+#define ANDES_PCU_DCSRCR2_UART1(x)     (((x) & 0xf) << 0)
+#define ANDES_PCU_DCSRCR2_UART2(x)     (((x) & 0xf) << 4)
+#define ANDES_PCU_DCSRCR2_AC97(x)      (((x) & 0xf) << 8)
+#define ANDES_PCU_DCSRCR2_SPI(x)       (((x) & 0xf) << 12)
+#define ANDES_PCU_DCSRCR2_SD(x)                (((x) & 0xf) << 16)
+#define ANDES_PCU_DCSRCR2_CFC(x)       (((x) & 0xf) << 20)
+#define ANDES_PCU_DCSRCR2_GPIO(x)      (((x) & 0xf) << 24)
+#define ANDES_PCU_DCSRCR2_PCU(x)       (((x) & 0xf) << 28)
+
+/*
+ * Multi-function Port Setting Register 0 (rw)
+ */
+#define ANDES_PCU_MFPSR0_PCIMODE(x)            ((x) << 0)
+#define ANDES_PCU_MFPSR0_IDEMODE(x)            ((x) << 1)
+#define ANDES_PCU_MFPSR0_MINI_TC01(x)          ((x) << 2)
+#define ANDES_PCU_MFPSR0_AHB_DEBUG(x)          ((x) << 3)
+#define ANDES_PCU_MFPSR0_AHB_TARGET(x)         ((x) << 4)
+#define ANDES_PCU_MFPSR0_DEFAULT_IVB(x)                (((x) & 0x7) << 28)
+#define ANDES_PCU_MFPSR0_DEFAULT_ENDIAN(x)     ((x) << 31)
+
+/*
+ * Multi-function Port Setting Register 1 (rw)
+ */
+#define ANDES_PCU_MFPSR1_SUSPEND(x)            ((x) << 0)
+#define ANDES_PCU_MFPSR1_PWM0(x)               ((x) << 1)
+#define ANDES_PCU_MFPSR1_PWM1(x)               ((x) << 2)
+#define ANDES_PCU_MFPSR1_AC97CLKOUT(x)         ((x) << 3)
+#define ANDES_PCU_MFPSR1_PWREN(x)              ((x) << 4)
+#define ANDES_PCU_MFPSR1_PME(x)                        ((x) << 5)
+#define ANDES_PCU_MFPSR1_I2C(x)                        ((x) << 6)
+#define ANDES_PCU_MFPSR1_UART1(x)              ((x) << 7)
+#define ANDES_PCU_MFPSR1_UART2(x)              ((x) << 8)
+#define ANDES_PCU_MFPSR1_SPI(x)                        ((x) << 9)
+#define ANDES_PCU_MFPSR1_SD(x)                 ((x) << 10)
+#define ANDES_PCU_MFPSR1_GPUPLLSRC(x)          ((x) << 27)
+#define ANDES_PCU_MFPSR1_DVOMODE(x)            ((x) << 28)
+#define ANDES_PCU_MFPSR1_HSMP_FAST_REQ(x)      ((x) << 29)
+#define ANDES_PCU_MFPSR1_AHB_FAST_REQ(x)       ((x) << 30)
+#define ANDES_PCU_MFPSR1_PMUR_EXT_INT(x)       ((x) << 31)
+
+/*
+ * DMA Engine Selection Register (rw)
+ */
+#define ANDES_PCU_DMAES_AC97RX(x)              ((x) << 2)
+#define ANDES_PCU_DMAES_AC97TX(x)              ((x) << 3)
+#define ANDES_PCU_DMAES_UART1RX(x)             ((x) << 4)
+#define ANDES_PCU_DMAES_UART1TX(x)             ((x) << 5)
+#define ANDES_PCU_DMAES_UART2RX(x)             ((x) << 6)
+#define ANDES_PCU_DMAES_UART2TX(x)             ((x) << 7)
+#define ANDES_PCU_DMAES_SDDMA(x)               ((x) << 8)
+#define ANDES_PCU_DMAES_CFCDMA(x)              ((x) << 9)
+
+/*
+ * OSC Control Register (rw)
+ */
+#define ANDES_PCU_OSCC_OSCH_OFF(x)     ((x) << 0)
+#define ANDES_PCU_OSCC_OSCH_STABLE(x)  ((x) << 1)
+#define ANDES_PCU_OSCC_OSCH_TRI(x)     ((x) << 2)
+#define ANDES_PCU_OSCC_OSCH_RANGE(x)   (((x) & 0x3) << 4)
+#define ANDES_PCU_OSCC_OSCH2_RANGE(x)  (((x) & 0x3) << 6)
+#define ANDES_PCU_OSCC_OSCH3_RANGE(x)  (((x) & 0x3) << 8)
+
+/*
+ * PWM Clock Divider Register (rw)
+ */
+#define ANDES_PCU_PWMCD_PWMDIV(x)      (((x) & 0xf) << 0)
+
+/*
+ * SoC Misc. Register (rw)
+ */
+#define ANDES_PCU_SOCMISC_RSCPUA(x)            ((x) << 0)
+#define ANDES_PCU_SOCMISC_RSCPUB(x)            ((x) << 1)
+#define ANDES_PCU_SOCMISC_RSPCI(x)             ((x) << 2)
+#define ANDES_PCU_SOCMISC_USBWAKE(x)           ((x) << 3)
+#define ANDES_PCU_SOCMISC_EXLM_WAITA(x)                (((x) & 0x3) << 4)
+#define ANDES_PCU_SOCMISC_EXLM_WAITB(x)                (((x) & 0x3) << 6)
+#define ANDES_PCU_SOCMISC_DDRPLL_BYPASS(x)     (((x) << 8)
+#define ANDES_PCU_SOCMISC_300MHZSEL(x)         (((x) << 9)
+#define ANDES_PCU_SOCMISC_DDRDLL_SRST(x)       (((x) << 10)
+#define ANDES_PCU_SOCMISC_DDRDDQ_TEST(x)       (((x) << 11)
+#define ANDES_PCU_SOCMISC_DDRDLL_TEST(x)       (((x) << 12)
+#define ANDES_PCU_SOCMISC_GPUPLL_BYPASS(x)     (((x) << 13)
+#define ANDES_PCU_SOCMISC_ENCPUA(x)            (((x) << 14)
+#define ANDES_PCU_SOCMISC_ENCPUB(x)            (((x) << 15)
+#define ANDES_PCU_SOCMISC_PWON_PWBTN(x)                (((x) << 16)
+#define ANDES_PCU_SOCMISC_PWON_GPIO1(x)                (((x) << 17)
+#define ANDES_PCU_SOCMISC_PWON_GPIO2(x)                (((x) << 18)
+#define ANDES_PCU_SOCMISC_PWON_GPIO3(x)                (((x) << 19)
+#define ANDES_PCU_SOCMISC_PWON_GPIO4(x)                (((x) << 20)
+#define ANDES_PCU_SOCMISC_PWON_GPIO5(x)                (((x) << 21)
+#define ANDES_PCU_SOCMISC_PWON_WOL(x)          (((x) << 22)
+#define ANDES_PCU_SOCMISC_PWON_RTC(x)          (((x) << 23)
+#define ANDES_PCU_SOCMISC_PWON_RTCALM(x)       (((x) << 24)
+#define ANDES_PCU_SOCMISC_PWON_XDBGIN(x)       (((x) << 25)
+#define ANDES_PCU_SOCMISC_PWON_PME(x)          (((x) << 26)
+#define ANDES_PCU_SOCMISC_PWON_PWFAIL(x)       (((x) << 27)
+#define ANDES_PCU_SOCMISC_CPUA_SRSTED(x)       (((x) << 28)
+#define ANDES_PCU_SOCMISC_CPUB_SRSTED(x)       (((x) << 29)
+#define ANDES_PCU_SOCMISC_WD_RESET(x)          (((x) << 30)
+#define ANDES_PCU_SOCMISC_HW_RESET(x)          (((x) << 31)
+
+/*
+ * BSM Control Register (rw)
+ */
+#define ANDES_PCU_BSMCR_LINK0(x)       (((x) & 0xf) << 0)
+#define ANDES_PCU_BSMCR_LINK1(x)       (((x) & 0xf) << 4)
+#define ANDES_PCU_BSMCR_SYNCSRC(x)     (((x) & 0xf) << 24)
+#define ANDES_PCU_BSMCR_CMD(x)         (((x) & 0x7) << 28)
+#define ANDES_PCU_BSMCR_IE(x)          ((x) << 31)
+
+/*
+ * BSM Status Register
+ */
+#define ANDES_PCU_BSMSR_CI0(x)         (((x) & 0xf) << 0)
+#define ANDES_PCU_BSMSR_CI1(x)         (((x) & 0xf) << 4)
+#define ANDES_PCU_BSMSR_SYNCSRC(x)     (((x) & 0xf) << 24)
+#define ANDES_PCU_BSMSR_BSMST(x)       (((x) & 0xf) << 28)
+
+/*
+ * Wakeup Event Sensitivity Register (rw)
+ */
+#define ANDES_PCU_WESR_POLOR(x)                (((x) & 0xff) << 0)
+
+/*
+ * Wakeup Event Status Register (ro)
+ */
+#define ANDES_PCU_WEST_SIG(x)          (((x) & 0xff) << 0)
+
+/*
+ * Reset Timing Register
+ */
+#define ANDES_PCU_RSTTIMING_RG0(x)     (((x) & 0xff) << 0)
+#define ANDES_PCU_RSTTIMING_RG1(x)     (((x) & 0xff) << 8)
+#define ANDES_PCU_RSTTIMING_RG2(x)     (((x) & 0xff) << 16)
+#define ANDES_PCU_RSTTIMING_RG3(x)     (((x) & 0xff) << 24)
+
+/*
+ * PCU Interrupt Status Register
+ */
+#define ANDES_PCU_INTR_ST_BSM(x)       ((x) << 0)
+#define ANDES_PCU_INTR_ST_PCS1(x)      ((x) << 1)
+#define ANDES_PCU_INTR_ST_PCS2(x)      ((x) << 2)
+#define ANDES_PCU_INTR_ST_PCS3(x)      ((x) << 3)
+#define ANDES_PCU_INTR_ST_PCS4(x)      ((x) << 4)
+#define ANDES_PCU_INTR_ST_PCS5(x)      ((x) << 5)
+#define ANDES_PCU_INTR_ST_PCS6(x)      ((x) << 6)
+#define ANDES_PCU_INTR_ST_PCS7(x)      ((x) << 7)
+#define ANDES_PCU_INTR_ST_PCS8(x)      ((x) << 8)
+#define ANDES_PCU_INTR_ST_PCS9(x)      ((x) << 9)
+
+/*
+ * PCSx Configuration Register
+ */
+#define ANDES_PCU_PCSX_CR_WAKEUP_EN(x) (((x) & 0xff) << 0)
+#define ANDES_PCU_PCSX_CR_LW(x)                (((x) & 0xf) << 16)
+#define ANDES_PCU_PCSX_CR_LS(x)                (((x) & 0xf) << 20)
+#define ANDES_PCU_PCSX_CR_TYPE(x)      (((x) >> 28) & 0x7)     /* (ro) */
+
+/*
+ * PCSx Parameter Register (rw)
+ */
+#define ANDES_PCU_PCSX_PARM_NEXT(x)    (((x) & 0xffffff) << 0)
+#define ANDES_PCU_PCSX_PARM_SYNCSRC(x) (((x) & 0xf) << 24)
+#define ANDES_PCU_PCSX_PARM_PCSCMD(x)  (((x) & 0x7) << 28)
+#define ANDES_PCU_PCSX_PARM_IE(x)      (((x) << 31)
+
+/*
+ * PCSx Status Register 1
+ */
+#define ANDES_PCU_PCSX_STAT1_ERRNO(x)  (((x) & 0xf) << 0)
+#define ANDES_PCU_PCSX_STAT1_ST(x)     (((x) & 0x7) << 28)
+
+/*
+ * PCSx Status Register 2
+ */
+#define ANDES_PCU_PCSX_STAT2_CRNTPARM(x)       (((x) & 0xffffff) << 0)
+#define ANDES_PCU_PCSX_STAT2_SYNCSRC(x)                (((x) & 0xf) << 24)
+
+/*
+ * PCSx PDD Register
+ * This is reserved for PCS(1-7)
+ */
+#define ANDES_PCU_PCS8_PDD_1BYTE(x)            (((x) & 0xff) << 0)
+#define ANDES_PCU_PCS8_PDD_2BYTE(x)            (((x) & 0xff) << 8)
+#define ANDES_PCU_PCS8_PDD_3BYTE(x)            (((x) & 0xff) << 16)
+#define ANDES_PCU_PCS8_PDD_4BYTE(x)            (((x) & 0xff) << 24)
+
+#define ANDES_PCU_PCS9_PDD_TIME1(x)            (((x) & 0x3f) << 0)
+#define ANDES_PCU_PCS9_PDD_TIME2(x)            (((x) & 0x3f) << 6)
+#define ANDES_PCU_PCS9_PDD_TIME3(x)            (((x) & 0x3f) << 12)
+#define ANDES_PCU_PCS9_PDD_TIME4(x)            (((x) & 0x3f) << 18)
+#define ANDES_PCU_PCS9_PDD_TICKTYPE(x)         ((x) << 24)
+#define ANDES_PCU_PCS9_PDD_GPU_SRST(x)         ((x) << 27)
+#define ANDES_PCU_PCS9_PDD_PWOFFTIME(x)                (((x) & 0x3) << 28)
+#define ANDES_PCU_PCS9_PDD_SUS2DRAM(x)         ((x) << 30)
+#define ANDES_PCU_PCS9_PDD_CLRPWOFF_FLAG(x)    ((x) << 31)
+
+#endif /* __ANDES_PCU_H */
index 5940d81fdb019d35c236d4656bc202fc9535b353..4420c990b4cca52ae3a080748c7e278e0442a9d0 100644 (file)
@@ -90,6 +90,9 @@ enum {
        API_ENV_ENUM,
        API_ENV_GET,
        API_ENV_SET,
+       API_DISPLAY_GET_INFO,
+       API_DISPLAY_DRAW_BITMAP,
+       API_DISPLAY_CLEAR,
        API_MAXCALL
 };
 
@@ -152,4 +155,17 @@ struct device_info {
        int     state;
 };
 
+#define DISPLAY_TYPE_LCD       0x0001
+#define DISPLAY_TYPE_VIDEO     0x0002
+
+struct display_info {
+       int type;
+       /* screen size in pixels */
+       int pixel_width;
+       int pixel_height;
+       /* screen size in rows and columns of text */
+       int screen_rows;
+       int screen_cols;
+};
+
 #endif /* _API_PUBLIC_H_ */
index c2701101d5b5824e8e89d0304890e0411b4bce6a..3912b80cdd8b156f5c54e9a0bd968df1c9c0c882 100644 (file)
@@ -64,6 +64,9 @@ typedef struct cmd_tbl_s      cmd_tbl_t;
 extern cmd_tbl_t  __u_boot_cmd_start;
 extern cmd_tbl_t  __u_boot_cmd_end;
 
+#if defined(CONFIG_CMD_RUN)
+extern int do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
+#endif
 
 /* common/command.c */
 int _do_help (cmd_tbl_t *cmd_start, int cmd_items, cmd_tbl_t * cmdtp, int
index 5ca8820898b2939b0f5edea8dbe80043b5cdccd1..05a658cdf90238aa46d809e29e30741092932471 100644 (file)
@@ -272,6 +272,7 @@ void        reset_cmd_timeout(void);
 #ifdef CONFIG_MENU
 int    abortboot(int bootdelay);
 #endif
+extern char console_buffer[];
 
 /* arch/$(ARCH)/lib/board.c */
 void   board_init_f  (ulong) __attribute__ ((noreturn));
index 54999a7e82d056c656d24259d9aa7e6ba167180e..0734ed494274558a0656925220d7e4861da7231e 100644 (file)
@@ -123,16 +123,10 @@ typedef unsigned int uint;
 #define __WORDSIZE     32
 #endif
 
-/* Types for `void *' pointers. */
-#if __WORDSIZE == 64
-typedef unsigned long int       uintptr_t;
-#elif __WORDSIZE == 32
-typedef unsigned int            uintptr_t;
-#else
-#error "__WORDSIZE has unexpected value"
-#endif
+/* Type for `void *' pointers. */
+typedef unsigned long int uintptr_t;
 
-#endif
+#endif /* USE_HOSTCC */
 
 /* compiler options */
 #define uninitialized_var(x)           x = x
index 903c7a775994f574021bd3c947669882a9cbdb3f..1db7cec209f98b6c417f2140de7ffb36e7e167a4 100644 (file)
@@ -22,6 +22,7 @@
 #define CONFIG_PHY_REALTEK
 #define CONFIG_PHY_NATSEMI
 #define CONFIG_PHY_LXT
+#define CONFIG_PHY_ATHEROS
 
 #ifdef CONFIG_PHYLIB_10G
 #define CONFIG_PHY_TERANETICS
index d4e3ef5c2c0e2399782531688664eaa0b89fc927..16db98fe57cc09ade05355328ed085d32922d0f6 100644 (file)
 #define CONFIG_SYS_CCSRBAR             0xffe00000
 #define CONFIG_SYS_CCSRBAR_PHYS_LOW    CONFIG_SYS_CCSRBAR
 
-#if defined(CONFIG_RAMBOOT_NAND) && !defined(CONFIG_NAND_SPL)
+#if defined(CONFIG_NAND_SPL)
 #define CONFIG_SYS_CCSR_DO_NOT_RELOCATE
 #endif
 
index a99f8d592a4fec3d36d45e0b393bb56a6121d0fd..1a6ba692ab64620665f1986902a45272bb280917 100644 (file)
@@ -464,6 +464,8 @@ extern unsigned long get_clock_freq(void);
 #define CONFIG_TSEC4_NAME      "eTSEC3"
 #undef CONFIG_MPC85XX_FEC
 
+#define CONFIG_PHY_MARVELL
+
 #define TSEC1_PHY_ADDR         0
 #define TSEC2_PHY_ADDR         1
 #define TSEC3_PHY_ADDR         2
index 19d32718fab2d64761f64418288e5aee6b7d32c5..7a5d86d2b7b840b79c6e81768971bd409bf8ea9d 100644 (file)
@@ -108,7 +108,7 @@ extern unsigned long get_clock_freq(void);
 #define CONFIG_SYS_CCSRBAR             0xe0000000
 #define CONFIG_SYS_CCSRBAR_PHYS_LOW    CONFIG_SYS_CCSRBAR
 
-#if defined(CONFIG_RAMBOOT_NAND) && !defined(CONFIG_NAND_SPL)
+#if defined(CONFIG_NAND_SPL)
 #define CONFIG_SYS_CCSR_DO_NOT_RELOCATE
 #endif
 
@@ -510,7 +510,8 @@ extern unsigned long get_clock_freq(void);
 #define CONFIG_SYS_LOADS_BAUD_CHANGE   1       /* allow baudrate change */
 
 /* QE microcode/firmware address */
-#define CONFIG_SYS_QE_FW_ADDR  0xfff00000
+#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     0xfff00000
 
 /*
  * BOOTP options
index ffee8fc8b0163e23f1081e5fb286d143f3897b0f..d7910e1c731f4e5bd30de4947fbe04bb3b63cd84 100644 (file)
 #define CONFIG_SYS_CCSRBAR             0xffe00000
 #define CONFIG_SYS_CCSRBAR_PHYS_LOW    CONFIG_SYS_CCSRBAR
 
-#if defined(CONFIG_RAMBOOT_NAND) && !defined(CONFIG_NAND_SPL)
+#if defined(CONFIG_NAND_SPL)
 #define CONFIG_SYS_CCSR_DO_NOT_RELOCATE
 #endif
 
index 00770609845ce0de55d5f14ae8b4f5d2cdfa49bb..70d751da2083924ec8523d2210921049714f4b07 100644 (file)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 
 #define CONFIG_SYS_MONITOR_LEN         (512 * 1024)
-#define CONFIG_SYS_MALLOC_LEN          (6 * 1024 * 1024)
+#define CONFIG_SYS_MALLOC_LEN          (10 * 1024 * 1024)
 
 /*
  * Serial Port
 /* SATA */
 #define CONFIG_LIBATA
 #define CONFIG_FSL_SATA
-#define CONFIG_FSL_SATA_V2
 
 #define CONFIG_SYS_SATA_MAX_DEVICE     2
 #define CONFIG_SATA1
index 013a6acdca2c51bcbc9962ad6d844ee00582e52d..e057b1f9459002dfd7155eabefda5c743f3f5078 100644 (file)
@@ -526,12 +526,14 @@ extern unsigned long get_clock_freq(void);
 #ifndef CONFIG_NAND
 /* Default address of microcode for the Linux Fman driver */
 /* QE microcode/firmware address */
-#define CONFIG_SYS_FMAN_FW_ADDR                0xEF000000
+#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     0xEF000000
 #else
-#define CONFIG_SYS_QE_FW_IN_NAND       0x1f00000
+#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     0x1f00000
 #endif
-#define CONFIG_SYS_FMAN_FW_LENGTH      0x10000
-#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_FMAN_FW_LENGTH)
+#define CONFIG_SYS_QE_FMAN_FW_LENGTH   0x10000
+#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH)
 
 #ifdef CONFIG_FMAN_ENET
 #define CONFIG_SYS_FM1_DTSEC1_PHY_ADDR 0x2
index 883d44e37105d2eabd596a8bb7ed821c63895134..00fa74d6f7b6261ae6548fe411474d9ffb8ca0da 100644 (file)
@@ -151,7 +151,7 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #define CONFIG_SYS_CCSRBAR             0xffe00000
 #define CONFIG_SYS_CCSRBAR_PHYS_LOW    CONFIG_SYS_CCSRBAR
 
-#if defined(CONFIG_RAMBOOT_NAND) && !defined(CONFIG_NAND_SPL)
+#if defined(CONFIG_NAND_SPL)
 #define CONFIG_SYS_CCSR_DO_NOT_RELOCATE
 #endif
 
diff --git a/include/configs/P2020COME.h b/include/configs/P2020COME.h
new file mode 100644 (file)
index 0000000..db88b68
--- /dev/null
@@ -0,0 +1,576 @@
+/*
+ * Copyright 2009-2010 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* The P2020COME board is only booted via the Freescale On-Chip ROM */
+#define CONFIG_SYS_RAMBOOT
+#define CONFIG_SYS_EXTRA_ENV_RELOC
+
+#define CONFIG_SYS_TEXT_BASE           0xf8f80000
+#define CONFIG_RESET_VECTOR_ADDRESS    0xf8fffffc
+
+#ifdef CONFIG_SDCARD
+#define CONFIG_RAMBOOT_SDCARD          1
+#endif
+
+#ifdef CONFIG_SPIFLASH
+#define CONFIG_RAMBOOT_SPIFLASH                1
+#endif
+
+#ifndef CONFIG_SYS_MONITOR_BASE
+#define CONFIG_SYS_MONITOR_BASE        CONFIG_SYS_TEXT_BASE    /* start of monitor */
+#endif
+
+/* High Level Configuration Options */
+#define CONFIG_BOOKE           1       /* BOOKE */
+#define CONFIG_E500            1       /* BOOKE e500 family */
+#define CONFIG_MPC85xx         1       /* MPC8540/60/55/41/48/P1020/P2020,etc*/
+#define CONFIG_P2020           1
+#define CONFIG_P2020COME       1
+#define CONFIG_FSL_ELBC                1       /* Enable eLBC Support */
+#define CONFIG_MP
+
+#define CONFIG_PCI             1       /* Enable PCI/PCIE */
+#if defined(CONFIG_PCI)
+#define CONFIG_PCIE1           1       /* PCIE controller 1 (slot 1) */
+#define CONFIG_PCIE2           1       /* PCIE controller 2 (slot 2) */
+#define CONFIG_PCIE3           1       /* PCIE controller 3 (slot 3) */
+
+#define CONFIG_FSL_PCI_INIT    1       /* Use common FSL init code */
+#define CONFIG_FSL_PCIE_RESET  1       /* need PCIe reset errata */
+#define CONFIG_SYS_PCI_64BIT   1       /* enable 64-bit PCI resources */
+#endif /* #if defined(CONFIG_PCI) */
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
+#define CONFIG_TSEC_ENET               /* tsec ethernet support */
+#define CONFIG_ENV_OVERWRITE
+
+#if defined(CONFIG_PCI)
+#define CONFIG_E1000           1       /* E1000 pci Ethernet card */
+#endif
+
+#ifndef __ASSEMBLY__
+extern unsigned long get_board_ddr_clk(unsigned long dummy);
+extern unsigned long get_board_sys_clk(unsigned long dummy);
+#endif
+
+/*
+ * For P2020COME DDRCLK and SYSCLK are from the same oscillator
+ * For DA phase the SYSCLK is 66MHz
+ * For EA phase the SYSCLK is 100MHz
+ */
+#define CONFIG_DDR_CLK_FREQ    get_board_ddr_clk(0)
+#define CONFIG_SYS_CLK_FREQ    get_board_sys_clk(0)
+
+#define CONFIG_HWCONFIG
+
+/*
+ * These can be toggled for performance analysis, otherwise use default.
+ */
+#define CONFIG_L2_CACHE                        /* toggle L2 cache */
+#define CONFIG_BTB                     /* toggle branch prediction */
+
+#define CONFIG_ADDR_STREAMING          /* toggle addr streaming */
+
+#define CONFIG_ENABLE_36BIT_PHYS       1
+
+#ifdef CONFIG_PHYS_64BIT
+#define CONFIG_ADDR_MAP                        1
+#define CONFIG_SYS_NUM_ADDR_MAP                16      /* number of TLB1 entries */
+#endif
+
+#define CONFIG_SYS_MEMTEST_START       0x00000000      /* memtest works on */
+#define CONFIG_SYS_MEMTEST_END         0x1fffffff
+#define CONFIG_PANIC_HANG      /* do not reset board on panic */
+
+
+
+
+
+
+
+ /*
+  * Config the L2 Cache as L2 SRAM
+  */
+#define CONFIG_SYS_INIT_L2_ADDR                0xf8f80000
+#ifdef CONFIG_PHYS_64BIT
+#define CONFIG_SYS_INIT_L2_ADDR_PHYS   0xff8f80000ull
+#else
+#define CONFIG_SYS_INIT_L2_ADDR_PHYS   CONFIG_SYS_INIT_L2_ADDR
+#endif
+#define CONFIG_SYS_L2_SIZE             (512 << 10)
+#define CONFIG_SYS_INIT_L2_END         (CONFIG_SYS_INIT_L2_ADDR \
+                                       + CONFIG_SYS_L2_SIZE)
+
+#define CONFIG_SYS_CCSRBAR             0xffe00000
+#define CONFIG_SYS_CCSRBAR_PHYS_LOW    CONFIG_SYS_CCSRBAR
+
+/* DDR Setup */
+#define CONFIG_FSL_DDR3
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
+#define CONFIG_DDR_SPD
+
+#define CONFIG_DDR_ECC
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
+#define CONFIG_MEM_INIT_VALUE          0xdeadbeef
+
+#define CONFIG_SYS_SDRAM_SIZE          2048ULL /* DDR size on P2020COME */
+#define CONFIG_SYS_DDR_SDRAM_BASE      0x00000000
+#define CONFIG_SYS_SDRAM_BASE          CONFIG_SYS_DDR_SDRAM_BASE
+
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   2
+
+#define CONFIG_SYS_DDR_ERR_INT_EN      0x0000000d
+#define CONFIG_SYS_DDR_ERR_DIS         0x00000000
+#define CONFIG_SYS_DDR_SBE             0x00ff0000
+
+#define CONFIG_SYS_SPD_BUS_NUM         1
+#define SPD_EEPROM_ADDRESS             0x53
+
+/*
+ * Memory map
+ *
+ * 0x0000_0000 0x7fff_ffff     DDR3                    2G Cacheable
+ * 0x8000_0000 0x9fff_ffff     PCI Express 3 Mem       1G non-cacheable
+ * 0xa000_0000 0xbfff_ffff     PCI Express 2 Mem       1G non-cacheable
+ * 0xc000_0000 0xdfff_ffff     PCI Express 1 Mem       1G non-cacheable
+ * 0xffc1_0000 0xffc1_ffff     PCI Express 3 IO        64K non-cacheable
+ * 0xffc2_0000 0xffc2_ffff     PCI Express 2 IO        64K non-cacheable
+ * 0xffc3_0000 0xffc3_ffff     PCI Express 1 IO        64K non-cacheable
+ *
+ * 0xffd0_0000 0xffd0_3fff     L1 for stack            16K Cacheable TLB0
+ * 0xffe0_0000 0xffef_ffff     CCSR                    1M non-cacheable
+ */
+
+/*
+ * Local Bus Definitions
+ */
+
+/* There is no NOR Flash on P2020COME */
+#define CONFIG_SYS_NO_FLASH
+
+#define CONFIG_BOARD_EARLY_INIT_R      /* call board_early_init_r function */
+#define CONFIG_HWCONFIG
+
+#define CONFIG_SYS_INIT_RAM_LOCK       1
+#define CONFIG_SYS_INIT_RAM_ADDR       0xffd00000      /* stack in RAM */
+#ifdef CONFIG_PHYS_64BIT
+#define CONFIG_SYS_INIT_RAM_ADDR_PHYS_HIGH     0xf
+#define CONFIG_SYS_INIT_RAM_ADDR_PHYS_LOW      CONFIG_SYS_INIT_RAM_ADDR
+/* the assembler doesn't like typecast */
+#define CONFIG_SYS_INIT_RAM_ADDR_PHYS \
+       ((CONFIG_SYS_INIT_RAM_ADDR_PHYS_HIGH * 1ull << 32) | \
+         CONFIG_SYS_INIT_RAM_ADDR_PHYS_LOW)
+#else
+#define CONFIG_SYS_INIT_RAM_ADDR_PHYS  CONFIG_SYS_INIT_RAM_ADDR
+#define CONFIG_SYS_INIT_RAM_ADDR_PHYS_HIGH 0
+#define CONFIG_SYS_INIT_RAM_ADDR_PHYS_LOW CONFIG_SYS_INIT_RAM_ADDR_PHYS
+#endif
+#define CONFIG_SYS_INIT_RAM_SIZE       0x00004000
+
+#define CONFIG_SYS_GBL_DATA_OFFSET     (CONFIG_SYS_INIT_RAM_SIZE \
+                                               - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
+
+#define CONFIG_SYS_MONITOR_LEN         (256 * 1024)
+#define CONFIG_SYS_MALLOC_LEN          (1024 * 1024)
+
+/* Serial Port - controlled on board with jumper J8
+ * open - index 2
+ * shorted - index 1
+ */
+#define CONFIG_CONS_INDEX              1
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_REG_SIZE    1
+#define CONFIG_SYS_NS16550_CLK         get_bus_freq(0)
+
+#define CONFIG_SERIAL_MULTI    1 /* Enable both serial ports */
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV   /* determine from environment */
+
+#define CONFIG_SYS_BAUDRATE_TABLE   \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 115200}
+
+#define CONFIG_SYS_NS16550_COM1        (CONFIG_SYS_CCSRBAR+0x4500)
+#define CONFIG_SYS_NS16550_COM2        (CONFIG_SYS_CCSRBAR+0x4600)
+
+/* Use the HUSH parser */
+#define CONFIG_SYS_HUSH_PARSER
+#ifdef CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+#endif
+
+/*
+ * Pass open firmware flat tree
+ */
+#define CONFIG_OF_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP          1
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
+
+/* new uImage format support */
+#define CONFIG_FIT                     1
+#define CONFIG_FIT_VERBOSE             1
+
+/* I2C */
+#define CONFIG_FSL_I2C         /* Use FSL common I2C driver */
+#define CONFIG_HARD_I2C                /* I2C with hardware support */
+#undef  CONFIG_SOFT_I2C                /* I2C bit-banged */
+#define CONFIG_I2C_MULTI_BUS
+#define CONFIG_I2C_CMD_TREE
+#define CONFIG_SYS_I2C_SPEED           400000  /* I2C speed and slave address*/
+#define CONFIG_SYS_I2C_SLAVE           0x7F
+#define CONFIG_SYS_I2C_NOPROBES                { {0, 0x29} }
+#define CONFIG_SYS_I2C_OFFSET          0x3000
+#define CONFIG_SYS_I2C2_OFFSET         0x3100
+
+/*
+ * I2C2 EEPROM
+ */
+#define CONFIG_ID_EEPROM
+#ifdef CONFIG_ID_EEPROM
+#define CONFIG_SYS_I2C_EEPROM_NXID
+#endif
+#define CONFIG_SYS_I2C_EEPROM_ADDR     0x50
+#define CONFIG_SYS_I2C_EEPROM_ADDR2    0x18
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
+#define CONFIG_SYS_EEPROM_BUS_NUM      0
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS  10 /* and takes up to 10 msec */
+
+/*
+ * eSPI - Enhanced SPI
+ */
+#define CONFIG_FSL_ESPI
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_CMD_SF
+#define CONFIG_SF_DEFAULT_SPEED                10000000
+#define CONFIG_SF_DEFAULT_MODE         SPI_MODE_0
+
+/*
+ * General PCI
+ * Memory space is mapped 1-1, but I/O space must start from 0.
+ */
+#if defined(CONFIG_PCI)
+
+/* controller 3, Slot 3, tgtid 3, Base address 8000 */
+#define CONFIG_SYS_PCIE3_MEM_VIRT      0x80000000
+#define CONFIG_SYS_PCIE3_MEM_BUS       0x80000000
+#define CONFIG_SYS_PCIE3_MEM_PHYS      0x80000000
+#define CONFIG_SYS_PCIE3_MEM_SIZE      0x20000000  /* 512M */
+#define CONFIG_SYS_PCIE3_IO_VIRT       0xffc10000
+#define CONFIG_SYS_PCIE3_IO_BUS                0x00000000
+#define CONFIG_SYS_PCIE3_IO_PHYS       0xffc10000
+#define CONFIG_SYS_PCIE3_IO_SIZE       0x00010000  /* 64k */
+
+/* controller 2, Slot 2, tgtid 2, Base address 9000 */
+#define CONFIG_SYS_PCIE2_MEM_VIRT      0xa0000000
+#define CONFIG_SYS_PCIE2_MEM_BUS       0xa0000000
+#define CONFIG_SYS_PCIE2_MEM_PHYS      0xa0000000
+#define CONFIG_SYS_PCIE2_MEM_SIZE      0x20000000  /* 512M */
+#define CONFIG_SYS_PCIE2_IO_VIRT       0xffc20000
+#define CONFIG_SYS_PCIE2_IO_BUS                0x00000000
+#define CONFIG_SYS_PCIE2_IO_PHYS       0xffc20000
+#define CONFIG_SYS_PCIE2_IO_SIZE       0x00010000  /* 64k */
+
+/* controller 1, Slot 1, tgtid 1, Base address a000 */
+#define CONFIG_SYS_PCIE1_MEM_VIRT      0xc0000000
+#define CONFIG_SYS_PCIE1_MEM_BUS       0xc0000000
+#define CONFIG_SYS_PCIE1_MEM_PHYS      0xc0000000
+#define CONFIG_SYS_PCIE1_MEM_SIZE      0x20000000  /* 512M */
+#define CONFIG_SYS_PCIE1_IO_VIRT       0xffc30000
+#define CONFIG_SYS_PCIE1_IO_BUS                0x00000000
+#define CONFIG_SYS_PCIE1_IO_PHYS       0xffc30000
+#define CONFIG_SYS_PCIE1_IO_SIZE       0x00010000  /* 64k */
+
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
+
+#undef CONFIG_EEPRO100
+#undef CONFIG_TULIP
+#undef CONFIG_RTL8139
+
+#ifdef CONFIG_RTL8139
+/* This macro is used by RTL8139 but not defined in PPC architecture */
+#define KSEG1ADDR(x)           (x)
+#define _IO_BASE               0x00000000
+#endif
+
+
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup */
+#define CONFIG_DOS_PARTITION
+
+#endif /* CONFIG_PCI */
+
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_MII             1       /* MII PHY management */
+#define CONFIG_MII_DEFAULT_TSEC        1       /* Allow unregistered phys */
+#define CONFIG_TSEC1           1
+#define CONFIG_TSEC1_NAME      "eTSEC1"
+#define CONFIG_TSEC2           1
+#define CONFIG_TSEC2_NAME      "eTSEC2"
+#define CONFIG_TSEC3           1
+#define CONFIG_TSEC3_NAME      "eTSEC3"
+
+#define TSEC1_PHY_ADDR         0
+#define TSEC2_PHY_ADDR         2
+#define TSEC3_PHY_ADDR         1
+
+#undef CONFIG_VSC7385_ENET
+
+#define TSEC1_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC2_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC3_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+
+#define TSEC1_PHYIDX           0
+#define TSEC2_PHYIDX           0
+#define TSEC3_PHYIDX           0
+
+#define CONFIG_ETHPRIME                "eTSEC1"
+
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#endif /* CONFIG_TSEC_ENET */
+
+/*
+ * Environment
+ */
+#if defined(CONFIG_RAMBOOT_SDCARD)
+       #define CONFIG_ENV_IS_IN_MMC    1
+       #define CONFIG_ENV_SIZE         0x2000
+       #define CONFIG_SYS_MMC_ENV_DEV  0
+#elif defined(CONFIG_RAMBOOT_SPIFLASH)
+       #define CONFIG_ENV_IS_IN_SPI_FLASH
+       #define CONFIG_ENV_SPI_BUS      0
+       #define CONFIG_ENV_SPI_CS       0
+       #define CONFIG_ENV_SPI_MAX_HZ   10000000
+       #define CONFIG_ENV_SPI_MODE     0
+       #define CONFIG_ENV_OFFSET       0x100000        /* 1MB */
+       #define CONFIG_ENV_SECT_SIZE    0x10000
+       #define CONFIG_ENV_SIZE         0x2000
+#endif
+
+#define CONFIG_LOADS_ECHO              1
+#define CONFIG_SYS_LOADS_BAUD_CHANGE   1
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_SETEXPR
+#define CONFIG_CMD_REGINFO
+
+#if defined(CONFIG_PCI)
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_PCI
+#endif
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled */
+
+#define CONFIG_MMC     1
+
+#ifdef CONFIG_MMC
+#define CONFIG_BOARD_EARLY_INIT_F      1       /* Call board_pre_init */
+#define CONFIG_CMD_MMC
+#define CONFIG_DOS_PARTITION
+#define CONFIG_FSL_ESDHC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_SYS_FSL_ESDHC_ADDR      CONFIG_SYS_MPC85xx_ESDHC_ADDR
+#define CONFIG_SYS_FSL_ESDHC_BROKEN_TIMEOUT
+#endif /* CONFIG_MMC */
+
+#define CONFIG_USB_EHCI
+
+#ifdef CONFIG_USB_EHCI
+#define CONFIG_CMD_USB
+#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
+#define CONFIG_USB_EHCI_FSL
+#define CONFIG_USB_STORAGE
+#define CONFIG_HAS_FSL_DR_USB
+#endif
+
+#if defined(CONFIG_MMC) || defined(CONFIG_USB_EHCI)
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_DOS_PARTITION
+#endif
+
+/* Misc Extra Settings */
+#define CONFIG_SYS_64BIT_VSPRINTF      1
+#define CONFIG_SYS_64BIT_STRTOUL       1
+#define CONFIG_CMD_DHCP                        1
+
+#define CONFIG_CMD_DATE                        1
+#define CONFIG_RTC_M41T62              1
+#define CONFIG_SYS_RTC_BUS_NUM         1
+#define CONFIG_SYS_I2C_RTC_ADDR                0x68
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_LONGHELP                    /* undef to save memory */
+#define CONFIG_CMDLINE_EDITING                 /* Command-line editing */
+#define CONFIG_AUTO_COMPLETE   1               /* add autocompletion support */
+#define CONFIG_SYS_LOAD_ADDR   0x2000000       /* default load address */
+#define CONFIG_SYS_PROMPT      "=> "           /* Monitor Command Prompt */
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_SYS_CBSIZE      1024            /* Console I/O Buffer Size */
+#else
+#define CONFIG_SYS_CBSIZE      256             /* Console I/O Buffer Size */
+#endif
+#define CONFIG_SYS_PBSIZE      (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
+                                               /* Print Buffer Size */
+#define CONFIG_SYS_MAXARGS     16              /* max number of command args */
+#define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE/* Boot Argument Buffer Size */
+#define CONFIG_SYS_HZ          1000            /* decrementer freq: 1ms tick */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 64 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CONFIG_SYS_BOOTMAPSZ   (64 << 20)
+#define CONFIG_SYS_BOOTM_LEN   (64 << 20)
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+
+/* The mac addresses for all ethernet interface */
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_HAS_ETH0
+#define CONFIG_HAS_ETH1
+#define CONFIG_HAS_ETH2
+#define CONFIG_HAS_ETH3
+#endif
+
+#define CONFIG_HOSTNAME                unknown
+#define CONFIG_ROOTPATH                "/opt/nfsroot"
+#define CONFIG_BOOTFILE                "uImage"
+#define CONFIG_UBOOTPATH       u-boot.bin
+
+/* default location for tftp and bootm */
+#define CONFIG_LOADADDR                1000000
+
+#define CONFIG_BOOTDELAY       10      /* -1 disables auto-boot */
+#undef  CONFIG_BOOTARGS                        /* the boot command will set bootargs */
+
+#define CONFIG_BAUDRATE                115200
+
+#define CONFIG_EXTRA_ENV_SETTINGS                                      \
+       "hwconfig=fsl_ddr:ecc=on\0"                                     \
+       "bootcmd=run sdboot\0"                                          \
+       "sdboot=setenv bootargs root=/dev/mmcblk0p2 rw "                \
+               "rootdelay=$rootdelaysecond console=$consoledev,$baudrate "\
+               "$othbootargs; mmcinfo; "                               \
+               "ext2load mmc 0:2 $loadaddr /boot/$bootfile; "          \
+               "ext2load mmc 0:2 $fdtaddr /boot/$fdtfile; "            \
+               "bootm $loadaddr - $fdtaddr\0"                          \
+       "sdfatboot=setenv bootargs root=/dev/ram rw "                   \
+               "rootdelay=$rootdelaysecond console=$consoledev,$baudrate "\
+               "$othbootargs; mmcinfo; "                               \
+               "fatload mmc 0:1 $loadaddr $bootfile; "                 \
+               "fatload mmc 0:1 $fdtaddr $fdtfile; "                   \
+               "fatload mmc 0:1 $ramdiskaddr $ramdiskfile; "           \
+               "bootm $loadaddr $ramdiskaddr $fdtaddr\0"               \
+       "usbboot=setenv bootargs root=/dev/sda1 rw "                    \
+               "rootdelay=$rootdelaysecond console=$consoledev,$baudrate "\
+               "$othbootargs; "                                        \
+               "usb start; "                                           \
+               "ext2load usb 0:1 $loadaddr /boot/$bootfile; "          \
+               "ext2load usb 0:1 $fdtaddr /boot/$fdtfile; "            \
+               "bootm $loadaddr - $fdtaddr\0"                          \
+       "usbfatboot=setenv bootargs root=/dev/ram rw "                  \
+               "console=$consoledev,$baudrate $othbootargs; "          \
+               "usb start; "                                           \
+               "fatload usb 0:2 $loadaddr $bootfile; "                 \
+               "fatload usb 0:2 $fdtaddr $fdtfile; "                   \
+               "fatload usb 0:2 $ramdiskaddr $ramdiskfile; "           \
+               "bootm $loadaddr $ramdiskaddr $fdtaddr\0"               \
+       "usbext2boot=setenv bootargs root=/dev/ram rw "                 \
+               "console=$consoledev,$baudrate $othbootargs; "          \
+               "usb start; "                                           \
+               "ext2load usb 0:4 $loadaddr $bootfile; "                \
+               "ext2load usb 0:4 $fdtaddr $fdtfile; "                  \
+               "ext2load usb 0:4 $ramdiskaddr $ramdiskfile; "          \
+               "bootm $loadaddr $ramdiskaddr $fdtaddr\0"               \
+       "upgradespi=sf probe 0; "                                       \
+               "setenv startaddr 0; "                                  \
+               "setenv erasesize a0000; "                              \
+               "tftp 1000000 $tftppath/$uboot_spi; "                   \
+               "sf erase $startaddr $erasesize; "                      \
+               "sf write 1000000 $startaddr $filesize; "               \
+               "sf erase 100000 120000\0"                              \
+       "clearspienv=sf probe 0;sf erase 100000 20000\0"                \
+       "othbootargs=ramdisk_size=700000 cache-sram-size=0x10000\0"     \
+       "netdev=eth0\0"                                                 \
+       "rootdelaysecond=15\0"                                          \
+       "uboot_nor=u-boot-nor.bin\0"                                    \
+       "uboot_spi=u-boot-p2020.spi\0"                                  \
+       "uboot_sd=u-boot-p2020.bin\0"                                   \
+       "consoledev=ttyS0\0"                                            \
+       "ramdiskaddr=2000000\0"                                         \
+       "ramdiskfile=rootfs-dev.ext2.img\0"                             \
+       "fdtaddr=c00000\0"                                              \
+       "fdtfile=uImage-2.6.32-p2020.dtb\0"                             \
+       "tftppath=p2020\0"
+
+#define CONFIG_HDBOOT                                                  \
+       "setenv bootargs root=/dev/$bdev rw rootdelay=30 "              \
+       "console=$consoledev,$baudrate $othbootargs;"                   \
+       "usb start;"                                                    \
+       "ext2load usb 0:1 $loadaddr /boot/$bootfile;"                   \
+       "ext2load usb 0:1 $fdtaddr /boot/$fdtfile;"                     \
+       "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_NFSBOOTCOMMAND                                          \
+       "setenv bootargs root=/dev/nfs rw "                             \
+       "nfsroot=$serverip:$rootpath "                                  \
+       "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off "\
+       "console=$consoledev,$baudrate $othbootargs;"                   \
+       "tftp $loadaddr $tftppath/$bootfile;"                           \
+       "tftp $fdtaddr $tftppath/$fdtfile;"                             \
+       "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_RAMBOOTCOMMAND                                          \
+       "setenv bootargs root=/dev/ram rw "                             \
+       "console=$consoledev,$baudrate $othbootargs;"                   \
+       "tftp $ramdiskaddr $tftppath/$ramdiskfile;"                     \
+       "tftp $loadaddr $tftppath/$bootfile;"                           \
+       "tftp $fdtaddr $tftppath/$fdtfile;"                             \
+       "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_BOOTCOMMAND             CONFIG_HDBOOT
+
+#endif  /* __CONFIG_H */
index 6d45bb1e8d8ef2460694c192484e91e513a9a584..a48055e2c5e9d19b1bd4d242775a54be8f18831f 100644 (file)
@@ -414,21 +414,25 @@ unsigned long get_board_sys_clk(unsigned long dummy);
  * env is stored at 0x100000, sector size is 0x10000, ucode is stored after
  * env, so we got 0x110000.
  */
-#define CONFIG_SYS_QE_FW_IN_SPIFLASH   0x110000
+#define CONFIG_SYS_QE_FW_IN_SPIFLASH
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     0x110000
 #elif defined(CONFIG_SDCARD)
 /*
  * PBL SD boot image should stored at 0x1000(8 blocks), the size of the image is
  * about 545KB (1089 blocks), Env is stored after the image, and the env size is
  * 0x2000 (16 blocks), 8 + 1089 + 16 = 1113, enlarge it to 1130.
  */
-#define CONFIG_SYS_QE_FW_IN_MMC                (512 * 1130)
+#define CONFIG_SYS_QE_FMAN_FW_IN_MMC
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     (512 * 1130)
 #elif defined(CONFIG_NAND)
-#define CONFIG_SYS_QE_FW_IN_NAND       (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
+#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
 #else
-#define CONFIG_SYS_FMAN_FW_ADDR                0xEF000000
+#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     0xEF000000
 #endif
-#define CONFIG_SYS_FMAN_FW_LENGTH      0x10000
-#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_FMAN_FW_LENGTH)
+#define CONFIG_SYS_QE_FMAN_FW_LENGTH   0x10000
+#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH)
 
 #ifdef CONFIG_SYS_DPAA_FMAN
 #define CONFIG_FMAN_ENET
@@ -446,10 +450,9 @@ unsigned long get_board_sys_clk(unsigned long dummy);
 #endif /* CONFIG_PCI */
 
 /* SATA */
-#define CONFIG_FSL_SATA_V2
-#ifdef CONFIG_FSL_SATA_V2
-#define CONFIG_LIBATA
 #define CONFIG_FSL_SATA
+#ifdef CONFIG_FSL_SATA
+#define CONFIG_LIBATA
 
 #define CONFIG_SYS_SATA_MAX_DEVICE     2
 #define CONFIG_SATA1
index 57d5de5b122eeb1d8a40b813a8af49599924f8a9..98e7a42e5fca24f60290672eb22ad7ac46e9a178 100644 (file)
@@ -32,7 +32,6 @@
 
 #define CONFIG_MMC
 #define CONFIG_NAND_FSL_ELBC
-#define CONFIG_FSL_SATA_V2
 #define CONFIG_PCIE3
 #define CONFIG_PCIE4
 #define CONFIG_SYS_DPAA_RMAN
diff --git a/include/configs/P3060QDS.h b/include/configs/P3060QDS.h
new file mode 100644 (file)
index 0000000..8006547
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2011 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
+ */
+
+/*
+ * P3060 QDS board configuration file
+ */
+#define CONFIG_P3060QDS
+#define CONFIG_PHYS_64BIT
+#define CONFIG_PPC_P3060
+#define CONFIG_FSL_QIXIS
+
+#define CONFIG_NAND_FSL_ELBC
+
+#define CONFIG_ICS307_REFCLK_HZ        25000000  /* ICS307 ref clk freq */
+
+#define CONFIG_SPI_FLASH_ATMEL
+#define CONFIG_SPI_FLASH_EON
+#define CONFIG_SPI_FLASH_SST
+
+#include "corenet_ds.h"
+
+#define SGMII_CARD_PORT1_PHY_ADDR 0x1C
+#define SGMII_CARD_PORT2_PHY_ADDR 0x1D
+#define SGMII_CARD_PORT3_PHY_ADDR 0x1E
+#define SGMII_CARD_PORT4_PHY_ADDR 0x1F
+
+/* There is a PCA9547 8-channel I2C-bus multiplexer on P3060QDS board */
+#define CONFIG_I2C_MUX
+#define CONFIG_I2C_MULTI_BUS
index a9cee2372694a325f2707f3a933eb30e456f6a33..4afc4f16ed1f90ad0a8598b8933c4a85ad23d6b9 100644 (file)
@@ -32,7 +32,6 @@
 
 #define CONFIG_MMC
 #define CONFIG_NAND_FSL_ELBC
-#define CONFIG_FSL_SATA_V2
 #define CONFIG_PCIE3
 #define CONFIG_PCIE4
 #define CONFIG_SYS_FSL_RAID_ENGINE
index bee74aa53d0b864eb97108a1abb98fc18bdf95cc..ed47a87820f0a461b84a334547ffac95dd449f69 100644 (file)
 #define CONFIG_SYS_PCI_MASTER_INIT
 #define CONFIG_SYS_PCI_BOARD_FIXUP_IRQ
 
+#define CONFIG_PCI_BOOTDELAY 0
+
 /* PCI identification */
 #define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x12FE  /* PCI Vendor ID: esd gmbh      */
 #define CONFIG_SYS_PCI_SUBSYS_ID_NONMONARCH 0x0441     /* PCI Device ID: Non-Monarch */
index 8b8113df517b69e6e2af3a5af6d1d903f9896ddd..a370c150b23f072a85d4225a68131c40d9eb6598 100644 (file)
@@ -29,6 +29,9 @@
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
+
+#define MACH_TYPE_MPL_VCMA9    227
+
 /*
  * High Level Configuration Options
  * (easy to change)
@@ -37,6 +40,7 @@
 #define CONFIG_S3C24X0         /* in a SAMSUNG S3C24x0-type SoC */
 #define CONFIG_S3C2410         /* specifically a SAMSUNG S3C2410 SoC */
 #define CONFIG_VCMA9           /* on a MPL VCMA9 Board  */
+#define CONFIG_MACH_TYPE       MACH_TYPE_MPL_VCMA9 /* Machine type */
 
 #define CONFIG_SYS_TEXT_BASE   0x0
 
index 45a7c53f7d90dd6969804526294063647b450ba8..1fafbedc9f87ccf3fbffe93e9d4e34a2523b2c40 100644 (file)
 
 #include <asm/arch/a320.h>
 
+/*
+ * mach-type definition
+ */
+#define MACH_TYPE_FARADAY      758
+#define CONFIG_MACH_TYPE       MACH_TYPE_FARADAY
+
 /*
  * Linux kernel tagged list
  */
diff --git a/include/configs/adp-ag101p.h b/include/configs/adp-ag101p.h
new file mode 100644 (file)
index 0000000..ffc70a6
--- /dev/null
@@ -0,0 +1,383 @@
+/*
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <asm/arch/ag101.h>
+
+/*
+ * CPU and Board Configuration Options
+ */
+#define CONFIG_ADP_AG101P
+
+#define CONFIG_USE_INTERRUPT
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_MEM_REMAP
+#endif
+
+#ifdef CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_SYS_TEXT_BASE   0x03200000
+#else
+#define CONFIG_SYS_TEXT_BASE   0x00000000
+#endif
+
+/*
+ * Timer
+ */
+
+/*
+ * According to the discussion in u-boot mailing list before,
+ * CONFIG_SYS_HZ at 1000 is mandatory.
+ */
+#define CONFIG_SYS_HZ          1000
+#define CONFIG_SYS_CLK_FREQ    39062500
+#define VERSION_CLOCK          CONFIG_SYS_CLK_FREQ
+
+/*
+ * Use Externel CLOCK or PCLK
+ */
+#undef CONFIG_FTRTC010_EXTCLK
+
+#ifndef CONFIG_FTRTC010_EXTCLK
+#define CONFIG_FTRTC010_PCLK
+#endif
+
+#ifdef CONFIG_FTRTC010_EXTCLK
+#define TIMER_CLOCK    32768                   /* CONFIG_FTRTC010_EXTCLK */
+#else
+#define TIMER_CLOCK    CONFIG_SYS_HZ           /* CONFIG_FTRTC010_PCLK */
+#endif
+
+#define TIMER_LOAD_VAL 0xffffffff
+
+/*
+ * Real Time Clock
+ */
+#define CONFIG_RTC_FTRTC010
+
+/*
+ * Real Time Clock Divider
+ * RTC_DIV_COUNT                       (OSC_CLK/OSC_5MHZ)
+ */
+#define OSC_5MHZ                       (5*1000000)
+#define OSC_CLK                                (4*OSC_5MHZ)
+#define RTC_DIV_COUNT                  (0.5)   /* Why?? */
+
+/*
+ * Serial console configuration
+ */
+
+/* FTUART is a high speed NS 16C550A compatible UART, addr: 0x99600000 */
+#define CONFIG_BAUDRATE                        38400
+#define CONFIG_CONS_INDEX              1
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_COM1                CONFIG_FTUART010_02_BASE
+#define CONFIG_SYS_NS16550_REG_SIZE    -4
+#define CONFIG_SYS_NS16550_CLK         ((18432000 * 20) / 25)  /* AG101P */
+
+/* valid baudrates */
+#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
+
+/*
+ * Ethernet
+ */
+#define CONFIG_FTMAC100
+
+#define CONFIG_BOOTDELAY       3
+
+/*
+ * SD (MMC) controller
+ */
+#define CONFIG_MMC
+#define CONFIG_CMD_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_DOS_PARTITION
+#define CONFIG_FTSDC010
+#define CONFIG_FTSDC010_NUMBER         1
+#define CONFIG_CMD_FAT
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_PING
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_LONGHELP                    /* undef to save memory */
+#define CONFIG_SYS_PROMPT      "NDS32 # "      /* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE      256             /* Console I/O Buffer Size */
+
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE      \
+       (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+
+/* max number of command args */
+#define CONFIG_SYS_MAXARGS     16
+
+/* Boot Argument Buffer Size */
+#define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE
+
+/*
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE       (128 * 1024)    /* regular stack */
+
+/*
+ * Size of malloc() pool
+ */
+/* 512kB is suggested, (CONFIG_ENV_SIZE + 128 * 1024) was not enough */
+#define CONFIG_SYS_MALLOC_LEN          (512 << 10)
+
+/*
+ * size in bytes reserved for initial data
+ */
+#define CONFIG_SYS_GBL_DATA_SIZE       128
+
+/*
+ * AHB Controller configuration
+ */
+#define CONFIG_FTAHBC020S
+
+#ifdef CONFIG_FTAHBC020S
+#include <faraday/ftahbc020s.h>
+
+/* Address of PHYS_SDRAM_0 before memory remap is at 0x(100)00000 */
+#define CONFIG_SYS_FTAHBC020S_SLAVE_BSR_BASE   0x100
+
+/*
+ * CONFIG_SYS_FTAHBC020S_SLAVE_BSR_6: this define is used in lowlevel_init.S,
+ * hence we cannot use FTAHBC020S_BSR_SIZE(2048) since it will use ffs() wrote
+ * in C language.
+ */
+#define CONFIG_SYS_FTAHBC020S_SLAVE_BSR_6 \
+       (FTAHBC020S_SLAVE_BSR_BASE(CONFIG_SYS_FTAHBC020S_SLAVE_BSR_BASE) | \
+                                       FTAHBC020S_SLAVE_BSR_SIZE(0xb))
+#endif
+
+/*
+ * Watchdog
+ */
+#define CONFIG_FTWDT010_WATCHDOG
+
+/*
+ * PMU Power controller configuration
+ */
+#define CONFIG_PMU
+#define CONFIG_FTPMU010_POWER
+
+#ifdef CONFIG_FTPMU010_POWER
+#include <faraday/ftpmu010.h>
+#define CONFIG_SYS_FTPMU010_PDLLCR0_HCLKOUTDIS         0x0E
+#define CONFIG_SYS_FTPMU010_SDRAMHTC   (FTPMU010_SDRAMHTC_EBICTRL_DCSR  | \
+                                        FTPMU010_SDRAMHTC_EBIDATA_DCSR  | \
+                                        FTPMU010_SDRAMHTC_SDRAMCS_DCSR  | \
+                                        FTPMU010_SDRAMHTC_SDRAMCTL_DCSR | \
+                                        FTPMU010_SDRAMHTC_CKE_DCSR      | \
+                                        FTPMU010_SDRAMHTC_DQM_DCSR      | \
+                                        FTPMU010_SDRAMHTC_SDCLK_DCSR)
+#endif
+
+/*
+ * SDRAM controller configuration
+ */
+#define CONFIG_FTSDMC021
+
+#ifdef CONFIG_FTSDMC021
+#include <faraday/ftsdmc021.h>
+
+#define CONFIG_SYS_FTSDMC021_TP1       (FTSDMC021_TP1_TRAS(2)  |       \
+                                        FTSDMC021_TP1_TRP(1)   |       \
+                                        FTSDMC021_TP1_TRCD(1)  |       \
+                                        FTSDMC021_TP1_TRF(3)   |       \
+                                        FTSDMC021_TP1_TWR(1)   |       \
+                                        FTSDMC021_TP1_TCL(2))
+
+#define CONFIG_SYS_FTSDMC021_TP2       (FTSDMC021_TP2_INI_PREC(4) |    \
+                                        FTSDMC021_TP2_INI_REFT(8) |    \
+                                        FTSDMC021_TP2_REF_INTV(0x180))
+
+/*
+ * CONFIG_SYS_FTSDMC021_CR1: this define is used in lowlevel_init.S,
+ * hence we cannot use FTSDMC021_BANK_SIZE(64) since it will use ffs() wrote in
+ * C language.
+ */
+#define CONFIG_SYS_FTSDMC021_CR1       (FTSDMC021_CR1_DDW(2)    |      \
+                                        FTSDMC021_CR1_DSZ(3)    |      \
+                                        FTSDMC021_CR1_MBW(2)    |      \
+                                        FTSDMC021_CR1_BNKSIZE(6))
+
+#define CONFIG_SYS_FTSDMC021_CR2       (FTSDMC021_CR2_IPREC     |      \
+                                        FTSDMC021_CR2_IREF      |      \
+                                        FTSDMC021_CR2_ISMR)
+
+#define CONFIG_SYS_FTSDMC021_BANK0_BASE        CONFIG_SYS_FTAHBC020S_SLAVE_BSR_BASE
+#define CONFIG_SYS_FTSDMC021_BANK0_BSR (FTSDMC021_BANK_ENABLE   |      \
+                                        CONFIG_SYS_FTSDMC021_BANK0_BASE)
+
+#endif
+
+/*
+ * Physical Memory Map
+ */
+#if defined(CONFIG_MEM_REMAP) || defined(CONFIG_SKIP_LOWLEVEL_INIT)
+#define PHYS_SDRAM_0           0x00000000      /* SDRAM Bank #1 */
+#if defined(CONFIG_MEM_REMAP)
+#define PHYS_SDRAM_0_AT_INIT   0x10000000      /* SDRAM Bank #1 before remap*/
+#endif
+#else  /* !CONFIG_SKIP_LOWLEVEL_INIT && !CONFIG_MEM_REMAP */
+#define PHYS_SDRAM_0           0x10000000      /* SDRAM Bank #1 */
+#endif
+
+#define CONFIG_NR_DRAM_BANKS   1               /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_0_SIZE      0x04000000      /* 64 MB */
+
+#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_0
+
+#ifdef CONFIG_MEM_REMAP
+#define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_SDRAM_BASE + 0xA0000 - \
+                                       GENERATED_GBL_DATA_SIZE)
+#else
+#define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
+                                       GENERATED_GBL_DATA_SIZE)
+#endif /* CONFIG_MEM_REMAP */
+
+/*
+ * Load address and memory test area should agree with
+ * arch/nds32/config.mk. Be careful not to overwrite U-boot itself.
+ */
+#define CONFIG_SYS_LOAD_ADDR           0x300000
+
+/* memtest works on 63 MB in DRAM */
+#define CONFIG_SYS_MEMTEST_START       PHYS_SDRAM_0
+#define CONFIG_SYS_MEMTEST_END         (PHYS_SDRAM_0 + 0x03F00000)
+
+/*
+ * Static memory controller configuration
+ */
+#define CONFIG_FTSMC020
+
+#ifdef CONFIG_FTSMC020
+#include <faraday/ftsmc020.h>
+
+#define CONFIG_SYS_FTSMC020_CONFIGS    {                       \
+       { FTSMC020_BANK0_CONFIG, FTSMC020_BANK0_TIMING, },      \
+       { FTSMC020_BANK1_CONFIG, FTSMC020_BANK1_TIMING, },      \
+}
+
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT      /* FLASH is on BANK 0 */
+#define FTSMC020_BANK0_LOWLV_CONFIG    (FTSMC020_BANK_ENABLE   |       \
+                                        FTSMC020_BANK_SIZE_32M |       \
+                                        FTSMC020_BANK_MBW_32)
+
+#define FTSMC020_BANK0_LOWLV_TIMING    (FTSMC020_TPR_RBE       |       \
+                                        FTSMC020_TPR_AST(1)    |       \
+                                        FTSMC020_TPR_CTW(1)    |       \
+                                        FTSMC020_TPR_ATI(1)    |       \
+                                        FTSMC020_TPR_AT2(1)    |       \
+                                        FTSMC020_TPR_WTC(1)    |       \
+                                        FTSMC020_TPR_AHT(1)    |       \
+                                        FTSMC020_TPR_TRNA(1))
+#endif
+
+/*
+ * FLASH on ADP_AG101P is connected to BANK0
+ * Just disalbe the other BANK to avoid detection error.
+ */
+#define FTSMC020_BANK0_CONFIG  (FTSMC020_BANK_ENABLE             |     \
+                                FTSMC020_BANK_BASE(PHYS_FLASH_1) |     \
+                                FTSMC020_BANK_SIZE_32M           |     \
+                                FTSMC020_BANK_MBW_32)
+
+#define FTSMC020_BANK0_TIMING  (FTSMC020_TPR_AST(3)   |        \
+                                FTSMC020_TPR_CTW(3)   |        \
+                                FTSMC020_TPR_ATI(0xf) |        \
+                                FTSMC020_TPR_AT2(3)   |        \
+                                FTSMC020_TPR_WTC(3)   |        \
+                                FTSMC020_TPR_AHT(3)   |        \
+                                FTSMC020_TPR_TRNA(0xf))
+
+#define FTSMC020_BANK1_CONFIG  (0x00)
+#define FTSMC020_BANK1_TIMING  (0x00)
+#endif /* CONFIG_FTSMC020 */
+
+/*
+ * FLASH and environment organization
+ */
+/* use CFI framework */
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_FLASH_CFI_DRIVER
+
+#define CONFIG_SYS_FLASH_CFI_WIDTH     FLASH_CFI_16BIT
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
+
+/* support JEDEC */
+
+/* Do not use CONFIG_FLASH_CFI_LEGACY to detect on board flash */
+#ifdef CONFIG_SKIP_LOWLEVEL_INIT
+#define PHYS_FLASH_1                   0x80400000      /* BANK 1 */
+#else  /* !CONFIG_SKIP_LOWLEVEL_INIT */
+#ifdef CONFIG_MEM_REMAP
+#define PHYS_FLASH_1                   0x80000000      /* BANK 0 */
+#else
+#define PHYS_FLASH_1                   0x00000000      /* BANK 0 */
+#endif /* CONFIG_MEM_REMAP */
+#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
+
+#define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
+#define CONFIG_SYS_FLASH_BANKS_LIST    { PHYS_FLASH_1, }
+#define CONFIG_SYS_MONITOR_BASE                PHYS_FLASH_1
+
+#define CONFIG_SYS_FLASH_ERASE_TOUT    120000  /* TO for Flash Erase (ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* TO for Flash Write (ms) */
+
+/* max number of memory banks */
+/*
+ * There are 4 banks supported for this Controller,
+ * but we have only 1 bank connected to flash on board
+ */
+#define CONFIG_SYS_MAX_FLASH_BANKS     1
+
+/* max number of sectors on one chip */
+#define CONFIG_FLASH_SECTOR_SIZE       (0x10000*2*2)
+#define CONFIG_ENV_SECT_SIZE           CONFIG_FLASH_SECTOR_SIZE
+#define CONFIG_SYS_MAX_FLASH_SECT      128
+
+/* environments */
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_ADDR                        (CONFIG_SYS_MONITOR_BASE + 0x140000)
+#define CONFIG_ENV_SIZE                        8192
+#define CONFIG_ENV_OVERWRITE
+
+#endif /* __CONFIG_H */
index 8842a183f807231438a28d9192805d6db1d081ac..0a0c261bf9507c1e9b5a2a200f8f1c355d2b2f44 100644 (file)
@@ -64,7 +64,6 @@
 /*
  * DDR related
  */
-#define CONFIG_OMAP3_MICRON_DDR                1       /* Micron DDR */
 #define CONFIG_SYS_CS0_SIZE            (256 * 1024 * 1024)
 
 /*
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
  */
 #define CONFIG_NR_DRAM_BANKS   2       /* CS1 may or may not be populated */
 #define PHYS_SDRAM_1           OMAP34XX_SDRC_CS0
-#define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
 #define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_INIT_RAM_ADDR + \
                                         CONFIG_SYS_INIT_RAM_SIZE - \
                                         GENERATED_GBL_DATA_SIZE)
+
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SPL_NAND_SIMPLE
+#define CONFIG_SPL_TEXT_BASE           0x40200800
+#define CONFIG_SPL_MAX_SIZE            (45 * 1024)
+#define CONFIG_SPL_STACK               LOW_LEVEL_SRAM_STACK
+
+#define CONFIG_SPL_BSS_START_ADDR      0x80000000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x80000         /* 512 KB */
+
+#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR        0x300 /* address 0x60000 */
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x200 /* 256 KB */
+#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION   1
+#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME       "u-boot.img"
+
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SPL_POWER_SUPPORT
+#define CONFIG_SPL_LDSCRIPT            "$(CPUDIR)/omap-common/u-boot-spl.lds"
+
+/* NAND boot config */
+#define CONFIG_SYS_NAND_5_ADDR_CYCLE
+#define CONFIG_SYS_NAND_PAGE_COUNT     64
+#define CONFIG_SYS_NAND_PAGE_SIZE      2048
+#define CONFIG_SYS_NAND_OOBSIZE                64
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128*1024)
+#define CONFIG_SYS_NAND_BAD_BLOCK_POS  NAND_LARGE_BADBLOCK_POS
+#define CONFIG_SYS_NAND_ECCPOS         {2, 3, 4, 5, 6, 7, 8, 9,\
+                                               10, 11, 12, 13}
+#define CONFIG_SYS_NAND_ECCSIZE                512
+#define CONFIG_SYS_NAND_ECCBYTES       3
+#define CONFIG_SYS_NAND_ECCSTEPS       (CONFIG_SYS_NAND_PAGE_SIZE / \
+                                               CONFIG_SYS_NAND_ECCSIZE)
+#define CONFIG_SYS_NAND_ECCTOTAL       (CONFIG_SYS_NAND_ECCBYTES * \
+                                               CONFIG_SYS_NAND_ECCSTEPS)
+#define CONFIG_SYS_NAND_U_BOOT_START   CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    0x80000
+
+/*
+ * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
+ * 64 bytes before this address should be set aside for u-boot.img's
+ * header. That is 0x800FFFC0--0x80100000 should not be used for any
+ * other needs.
+ */
+#define CONFIG_SYS_TEXT_BASE           0x80100000
+#define CONFIG_SYS_SPL_MALLOC_START    0x80208000
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000
+
 #endif /* __CONFIG_H */
index 1c70b9df697493ced61019d727406a4878b060a4..d44eeec5b68b98956ac946cb162c5e1919fbd8b1 100644 (file)
@@ -63,7 +63,6 @@
 /*
  * DDR related
  */
-#define CONFIG_OMAP3_MICRON_DDR                1       /* Micron DDR */
 #define CONFIG_SYS_CS0_SIZE            (256 * 1024 * 1024)
 
 /*
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
  */
 #define CONFIG_NR_DRAM_BANKS   2       /* CS1 may or may not be populated */
 #define PHYS_SDRAM_1           OMAP34XX_SDRC_CS0
-#define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
 #define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_INIT_RAM_ADDR + \
                                         CONFIG_SYS_INIT_RAM_SIZE - \
                                         GENERATED_GBL_DATA_SIZE)
+
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SPL_NAND_SIMPLE
+#define CONFIG_SPL_TEXT_BASE           0x40200800
+#define CONFIG_SPL_MAX_SIZE            (45 * 1024)
+#define CONFIG_SPL_STACK               LOW_LEVEL_SRAM_STACK
+
+#define CONFIG_SPL_BSS_START_ADDR      0x80000000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x80000         /* 512 KB */
+
+#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR        0x300 /* address 0x60000 */
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x200 /* 256 KB */
+#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION   1
+#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME       "u-boot.img"
+
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SPL_POWER_SUPPORT
+#define CONFIG_SPL_LDSCRIPT            "$(CPUDIR)/omap-common/u-boot-spl.lds"
+
+/* NAND boot config */
+#define CONFIG_SYS_NAND_5_ADDR_CYCLE
+#define CONFIG_SYS_NAND_PAGE_COUNT     64
+#define CONFIG_SYS_NAND_PAGE_SIZE      2048
+#define CONFIG_SYS_NAND_OOBSIZE                64
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128*1024)
+#define CONFIG_SYS_NAND_BAD_BLOCK_POS  NAND_LARGE_BADBLOCK_POS
+#define CONFIG_SYS_NAND_ECCPOS         {2, 3, 4, 5, 6, 7, 8, 9,\
+                                               10, 11, 12, 13}
+#define CONFIG_SYS_NAND_ECCSIZE                512
+#define CONFIG_SYS_NAND_ECCBYTES       3
+#define CONFIG_SYS_NAND_ECCSTEPS       (CONFIG_SYS_NAND_PAGE_SIZE / \
+                                               CONFIG_SYS_NAND_ECCSIZE)
+#define CONFIG_SYS_NAND_ECCTOTAL       (CONFIG_SYS_NAND_ECCBYTES * \
+                                               CONFIG_SYS_NAND_ECCSTEPS)
+#define CONFIG_SYS_NAND_U_BOOT_START   CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    0x80000
+
+/*
+ * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
+ * 64 bytes before this address should be set aside for u-boot.img's
+ * header. That is 0x800FFFC0--0x80100000 should not be used for any
+ * other needs.
+ */
+#define CONFIG_SYS_TEXT_BASE           0x80100000
+#define CONFIG_SYS_SPL_MALLOC_START    0x80208000
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000
+
 #endif /* __CONFIG_H */
index 46595d911a585ac60d0ab74ef0ba59724c26a1d7..7fcf437c6d00d019f24d3e45efa2f9257521819d 100644 (file)
  * The stack sizes are set up in start.S using the settings below
  */
 #define        CONFIG_STACKSIZE SZ_128K        /* regular stack */
-#ifdef CONFIG_USE_IRQ
-# define       CONFIG_STACKSIZE_IRQ SZ_4K      /* IRQ stack */
-# define       CONFIG_STACKSIZE_FIQ SZ_4K      /* FIQ stack */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
index c439f3e821db83f0f3764de0120ce0e95a51c75a..db52ee66da62aa804aea8fb3cb140ac3438937a6 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Configuation settings for the AT91SAM9260EK & AT91SAM9G20EK boards.
index c8fc9e7bd158964f61a569d19d7833fde60b2bcc..5140b26cdac96924044b3c0f4a4c8a5afefc237f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Configuation settings for the AT91SAM9261EK board.
index f73d952ff83ea3a5ad96b611e707e0b22667953a..83992461f906c4a2e29ffd70382d9fe92f36fecb 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Configuation settings for the AT91SAM9263EK board.
index 05575cd34c46c0b72d96b73af9ce1556b39a7bba..5ef6bd230770ab3055929c2679f8d0fe7bcdbdd2 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Configuation settings for the AT91SAM9M10G45EK board(and AT91SAM9G45EKES).
index 3ca09e1438d979218b8f2796453bffe632cd560c..79ea1f29a74956eaa7476bc8bed0098717c781bb 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Configuation settings for the AT91SAM9RLEK board.
index b604b52023d07850ad627c34e8311c6dbb4a7896..a5ec2249698937f18ababdb6c1f03d7a81f141fb 100644 (file)
@@ -25,7 +25,7 @@
 /*
  * High Level Board Configuration Options
  */
-#define        CONFIG_PXA27X           1       /* Marvell PXA270 CPU */
+#define        CONFIG_CPU_PXA27X               1       /* Marvell PXA270 CPU */
 #define        CONFIG_BALLOON3         1       /* Balloon3 board */
 
 /*
diff --git a/include/configs/cerf250.h b/include/configs/cerf250.h
deleted file mode 100644 (file)
index 70427da..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * (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>
- *
- * Configuation settings for the CERF250 board.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-#define CONFIG_PXA250          1       /* This is an PXA250 CPU    */
-#define CONFIG_CERF250         1       /* on Cerf PXA Board        */
-#define CONFIG_BOARD_LATE_INIT
-#define CONFIG_BAUDRATE                38400
-#define        CONFIG_SYS_TEXT_BASE    0x0
-
-#undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff */
-
-/* we will never enable dcache, because we have to setup MMU first */
-#define CONFIG_SYS_DCACHE_OFF
-
-/*
- * Size of malloc() pool
- */
-#define CONFIG_SYS_MALLOC_LEN      (CONFIG_ENV_SIZE + 128*1024)
-
-/*
- * Hardware drivers
- */
-#define CONFIG_SMC91111
-#define CONFIG_SMC91111_BASE 0x04000300
-#define CONFIG_SMC_USE_32_BIT
-
-/*
- * select serial console configuration
- */
-#define CONFIG_PXA_SERIAL
-#define CONFIG_FFUART       1  /* we use FFUART on CERF PXA */
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-
-#define CONFIG_BOOTDELAY       3
-#define CONFIG_ETHADDR         00:D0:CA:F1:3C:D2
-#define CONFIG_NETMASK         255.255.255.0
-#define CONFIG_IPADDR          192.168.0.5
-#define CONFIG_SERVERIP                192.168.0.2
-#define CONFIG_BOOTCOMMAND     "bootm 0xC0000"
-#define CONFIG_BOOTARGS                "root=/dev/mtdblock3 rootfstype=jffs2 console=ttyS0,38400"
-#define CONFIG_CMDLINE_TAG
-
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
-#define CONFIG_KGDB_SER_INDEX  2               /* which serial port to use */
-#endif
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_SYS_HUSH_PARSER         1
-#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
-
-#define CONFIG_SYS_LONGHELP                                    /* undef to save memory         */
-#ifdef CONFIG_SYS_HUSH_PARSER
-#define CONFIG_SYS_PROMPT                      "uboot$ "       /* Monitor Command Prompt */
-#else
-#define CONFIG_SYS_PROMPT                      "=> "           /* Monitor Command Prompt */
-#endif
-#define CONFIG_SYS_CBSIZE                      256                     /* Console I/O Buffer Size      */
-#define CONFIG_SYS_PBSIZE                      (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
-                                                                               /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS                     16                      /* max number of command args   */
-#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE       /* Boot Argument Buffer Size    */
-#define CONFIG_SYS_DEVICE_NULLDEV      1
-
-#define CONFIG_SYS_MEMTEST_START       0xa0400000      /* memtest works on     */
-#define CONFIG_SYS_MEMTEST_END         0xa0800000      /* 4 ... 8 MB in DRAM   */
-
-#define CONFIG_SYS_LOAD_ADDR           0xa2000000      /* default load address */
-
-#define CONFIG_SYS_HZ                  1000
-#define CONFIG_SYS_CPUSPEED            0x141           /* set core clock to 400/200/100 MHz */
-
-#define CONFIG_SYS_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                   0xa0000000      /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1_SIZE              0x04000000      /* 64 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 CONFIG_SYS_DRAM_BASE                   0xa0000000
-#define CONFIG_SYS_DRAM_SIZE                   0x04000000
-
-#define CONFIG_SYS_FLASH_BASE                  PHYS_FLASH_1
-
-#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
-
-/*
- * GPIO settings
- */
-
-
-#define CONFIG_SYS_GPSR0_VAL           0x00408030
-#define CONFIG_SYS_GPSR1_VAL           0x00BFA882
-#define CONFIG_SYS_GPSR2_VAL           0x0001C000
-#define CONFIG_SYS_GPCR0_VAL           0xC0031100
-#define CONFIG_SYS_GPCR1_VAL           0xFC400300
-#define CONFIG_SYS_GPCR2_VAL           0x00003FFF
-#define CONFIG_SYS_GPDR0_VAL           0xC0439330
-#define CONFIG_SYS_GPDR1_VAL           0xFCFFAB82
-#define CONFIG_SYS_GPDR2_VAL           0x0001FFFF
-#define CONFIG_SYS_GAFR0_L_VAL         0x80000000
-#define CONFIG_SYS_GAFR0_U_VAL         0xA5000010
-#define CONFIG_SYS_GAFR1_L_VAL         0x60008018
-#define CONFIG_SYS_GAFR1_U_VAL         0xAAA5AAAA
-#define CONFIG_SYS_GAFR2_L_VAL         0xAAA0000A
-#define CONFIG_SYS_GAFR2_U_VAL         0x00000002
-
-#define CONFIG_SYS_PSSR_VAL            0x20
-
-#define        CONFIG_SYS_CCCR                 CCCR_L27|CCCR_M2|CCCR_N10
-#define        CONFIG_SYS_CKEN                 0x0
-
-/*
- * Memory settings
- */
-#define CONFIG_SYS_MSC0_VAL            0x12447FF0
-#define CONFIG_SYS_MSC1_VAL            0x12BC5554
-#define CONFIG_SYS_MSC2_VAL            0x7FF97FF1
-#define CONFIG_SYS_MDCNFG_VAL          0x00001AC9
-#define CONFIG_SYS_MDREFR_VAL          0x03CDC017
-#define CONFIG_SYS_MDMRS_VAL           0x00000000
-#define        CONFIG_SYS_FLYCNFG_VAL          0x00000000
-#define        CONFIG_SYS_SXCNFG_VAL           0x00000000
-
-/*
- * PCMCIA and CF Interfaces
- */
-#define CONFIG_SYS_MECR_VAL            0x00000000
-#define CONFIG_SYS_MCMEM0_VAL          0x00010504
-#define CONFIG_SYS_MCMEM1_VAL          0x00010504
-#define CONFIG_SYS_MCATT0_VAL          0x00010504
-#define CONFIG_SYS_MCATT1_VAL          0x00010504
-#define CONFIG_SYS_MCIO0_VAL           0x00004715
-#define CONFIG_SYS_MCIO1_VAL           0x00004715
-
-#define _LED                   0x08000010      /*check this */
-#define LED_BLANK              0x08000040
-#define LED_GPIO               0x10
-
-/*
- * FLASH and environment organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS     1       /* max number of memory banks           */
-#define CONFIG_SYS_MAX_FLASH_SECT      128     /* max number of sectors on one chip    */
-
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (25*CONFIG_SYS_HZ) /* Timeout for Flash Erase */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (25*CONFIG_SYS_HZ) /* Timeout for Flash Write */
-
-#define CONFIG_SYS_MONITOR_LEN         0x40000         /* 256 KiB */
-#define CONFIG_ENV_IS_IN_FLASH 1
-#define CONFIG_ENV_ADDR                (PHYS_FLASH_1 + CONFIG_SYS_MONITOR_LEN)
-#define CONFIG_ENV_SIZE                0x40000 /* Total Size of Environment Sector     */
-
-
-#endif /* __CONFIG_H */
index 026d22203c41a9f1761a9d469441e7d63b521418..a06a89d4146413ff2b8564ac748b6733a29adc26 100644 (file)
@@ -38,7 +38,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_CM_T3X          1       /* working with CM-T35 and CM-T3730 */
 
 #define CONFIG_SYS_TEXT_BASE   0x80008000
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
 #define PHYS_SDRAM_1           OMAP34XX_SDRC_CS0
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
index 8a3446efd1ebb099fdb2aaad802f650546548984..7691fb31552df881a06827f296b7c2c7785c60c5 100644 (file)
 /*
  * High Level Board Configuration Options
  */
-#define        CONFIG_PXA27X           1       /* Marvell PXA270 CPU */
-#define        CONFIG_VPAC270          1       /* Toradex Colibri PXA270 board */
-
-#undef CONFIG_BOARD_LATE_INIT
-#undef CONFIG_USE_IRQ
-#undef CONFIG_SKIP_LOWLEVEL_INIT
+#define        CONFIG_CPU_PXA27X               1       /* Marvell PXA270 CPU */
+#define        CONFIG_SYS_TEXT_BASE            0x0
 
 /*
  * Environment settings
  */
-#define        CONFIG_ENV_SIZE                 0x4000
-#define        CONFIG_SYS_MALLOC_LEN           (CONFIG_ENV_SIZE + 128*1024)
-#define        CONFIG_SYS_TEXT_BASE            0x0
-#define        CONFIG_ENV_OVERWRITE            /* override default environment */
-
+#define        CONFIG_ENV_OVERWRITE
+#define        CONFIG_SYS_MALLOC_LEN           (128 * 1024)
+#define        CONFIG_ARCH_CPU_INIT
 #define        CONFIG_BOOTCOMMAND                                              \
        "if mmc init && fatload mmc 0 0xa0000000 uImage; then "         \
                "bootm 0xa0000000; "                                    \
@@ -53,8 +47,8 @@
 #define        CONFIG_BOOTDELAY                2       /* Autoboot delay */
 #define        CONFIG_CMDLINE_TAG
 #define        CONFIG_SETUP_MEMORY_TAGS
-
 #define        CONFIG_LZMA                     /* LZMA compression support */
+#define        CONFIG_OF_LIBFDT
 
 /*
  * Serial Console Configuration
 #define        CONFIG_BOOTP_HOSTNAME
 #endif
 
-/*
- * MMC Card Configuration
- */
-#ifdef CONFIG_CMD_MMC
-#define        CONFIG_MMC
-#define        CONFIG_PXA_MMC
-#define        CONFIG_SYS_MMC_BASE             0xF0000000
-#define        CONFIG_CMD_FAT
-#define        CONFIG_DOS_PARTITION
-#endif
-
-/*
- * KGDB
- */
-#ifdef CONFIG_CMD_KGDB
-#define        CONFIG_KGDB_BAUDRATE            230400          /* speed to run kgdb serial port */
-#define        CONFIG_KGDB_SER_INDEX           2               /* which serial port to use */
-#endif
-
 /*
  * HUSH Shell Configuration
  */
 #define        CONFIG_SYS_HUSH_PARSER          1
 #define        CONFIG_SYS_PROMPT_HUSH_PS2      "> "
 
-#define        CONFIG_SYS_LONGHELP                             /* undef to save memory */
+#define        CONFIG_SYS_LONGHELP
 #ifdef CONFIG_SYS_HUSH_PARSER
-#define        CONFIG_SYS_PROMPT               "$ "            /* Monitor Command Prompt */
+#define        CONFIG_SYS_PROMPT               "$ "
 #else
-#define        CONFIG_SYS_PROMPT               "=> "           /* Monitor Command Prompt */
+#define        CONFIG_SYS_PROMPT               "=> "
 #endif
-#define        CONFIG_SYS_CBSIZE               256             /* Console I/O Buffer Size */
-#define        CONFIG_SYS_PBSIZE               (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)        /* Print Buffer Size */
-#define        CONFIG_SYS_MAXARGS              16              /* max number of command args */
-#define        CONFIG_SYS_BARGSIZE             CONFIG_SYS_CBSIZE       /* Boot Argument Buffer Size */
+#define        CONFIG_SYS_CBSIZE               256
+#define        CONFIG_SYS_PBSIZE               \
+       (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
+#define        CONFIG_SYS_MAXARGS              16
+#define        CONFIG_SYS_BARGSIZE             CONFIG_SYS_CBSIZE
 #define        CONFIG_SYS_DEVICE_NULLDEV       1
+#define        CONFIG_CMDLINE_EDITING          1
+#define        CONFIG_AUTO_COMPLETE            1
+
 
 /*
  * Clock Configuration
  */
-#undef CONFIG_SYS_CLKS_IN_HZ
-#define        CONFIG_SYS_HZ                   3250000         /* Timer @ 3250000 Hz */
-#define CONFIG_SYS_CPUSPEED            0x290           /* 520 MHz */
+#define        CONFIG_SYS_HZ                   1000            /* Timer @ 3250000 Hz */
+#define        CONFIG_SYS_CPUSPEED             0x290           /* 520MHz */
 
 /*
  * Stack sizes
  *
  * The stack sizes are set up in start.S using the settings below
  */
-#define        CONFIG_STACKSIZE                (128*1024)      /* regular stack */
+#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 */
+#define        CONFIG_STACKSIZE_IRQ            (4 * 1024)      /* IRQ stack */
+#define        CONFIG_STACKSIZE_FIQ            (4 * 1024)      /* FIQ stack */
 #endif
 
 /*
 #define CONFIG_SYS_MEMTEST_START       0xa0400000      /* memtest works on */
 #define CONFIG_SYS_MEMTEST_END         0xa0800000      /* 4 ... 8 MB in DRAM */
 
-#define        CONFIG_SYS_LOAD_ADDR            (0xa1000000)
-
+#define        CONFIG_SYS_LOAD_ADDR            PHYS_SDRAM_1
 #define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
+#define        CONFIG_SYS_INIT_SP_ADDR         0x5c010000
 
 /*
  * NOR FLASH
 #define        CONFIG_SYS_MAX_FLASH_SECT       (4 + 255)
 #define        CONFIG_SYS_MAX_FLASH_BANKS      1
 
-#define        CONFIG_SYS_FLASH_ERASE_TOUT     (25*CONFIG_SYS_HZ)
-#define        CONFIG_SYS_FLASH_WRITE_TOUT     (25*CONFIG_SYS_HZ)
+#define        CONFIG_SYS_FLASH_ERASE_TOUT     (25 * CONFIG_SYS_HZ)
+#define        CONFIG_SYS_FLASH_WRITE_TOUT     (25 * CONFIG_SYS_HZ)
 
 #define        CONFIG_SYS_FLASH_USE_BUFFER_WRITE       1
 #define        CONFIG_SYS_FLASH_PROTECTION             1
 #define        CONFIG_SYS_ENV_IS_NOWHERE
 #endif
 
-#define        CONFIG_SYS_MONITOR_BASE         0x000000
-#define        CONFIG_SYS_MONITOR_LEN          0x40000
-
-#define CONFIG_ENV_ADDR                (CONFIG_SYS_MONITOR_LEN)
-#define CONFIG_ENV_SECT_SIZE   0x40000
-#define CONFIG_ENV_ADDR_REDUND (CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE)
-#define CONFIG_ENV_SIZE_REDUND (CONFIG_ENV_SIZE)
+#define        CONFIG_SYS_MONITOR_BASE         0x0
+#define        CONFIG_SYS_MONITOR_LEN          0x80000
 
+#define        CONFIG_ENV_ADDR                 \
+                       (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
+#define        CONFIG_ENV_SIZE                 0x40000
+#define        CONFIG_ENV_SECT_SIZE            0x40000
+#define CONFIG_ENV_ADDR_REDUND         (CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_SIZE_REDUND         (CONFIG_ENV_SIZE)
 
 /*
  * GPIO settings
 #define        CONFIG_SYS_MCIO0_VAL    0x0001430f
 #define        CONFIG_SYS_MCIO1_VAL    0x0001430f
 
-/*
- * USB
- */
-#ifdef CONFIG_CMD_USB
-#define        CONFIG_USB_OHCI_NEW
-#define        CONFIG_SYS_USB_OHCI_CPU_INIT
-#define        CONFIG_SYS_USB_OHCI_BOARD_INIT
-#define        CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS      2
-#define        CONFIG_SYS_USB_OHCI_REGS_BASE   0x4C000000
-#define        CONFIG_SYS_USB_OHCI_SLOT_NAME   "tdex270"
-#define        CONFIG_USB_STORAGE
-#endif
+#include "pxa-common.h"
 
 #endif /* __CONFIG_H */
index bc0aeebb441118144531df4716fb84fc67769b21..7925b9583890e865a7ee5039739570ca4c1a7691 100644 (file)
 #define CONFIG_DDR_SPD
 #define CONFIG_FSL_DDR3
 
+#ifdef CONFIG_P3060QDS
+#define CONFIG_SYS_SPD_BUS_NUM 0
+#else
 #define CONFIG_SYS_SPD_BUS_NUM 1
+#endif
 #define SPD_EEPROM_ADDRESS1    0x51
 #define SPD_EEPROM_ADDRESS2    0x52
 #define SPD_EEPROM_ADDRESS     SPD_EEPROM_ADDRESS1     /* for p3041/p5010 */
  * env is stored at 0x100000, sector size is 0x10000, ucode is stored after
  * env, so we got 0x110000.
  */
-#define CONFIG_SYS_QE_FW_IN_SPIFLASH   0x110000
+#define CONFIG_SYS_QE_FW_IN_SPIFLASH
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     0x110000
 #elif defined(CONFIG_SDCARD)
 /*
  * PBL SD boot image should stored at 0x1000(8 blocks), the size of the image is
  * about 545KB (1089 blocks), Env is stored after the image, and the env size is
  * 0x2000 (16 blocks), 8 + 1089 + 16 = 1113, enlarge it to 1130.
  */
-#define CONFIG_SYS_QE_FW_IN_MMC                (512 * 1130)
+#define CONFIG_SYS_QE_FMAN_FW_IN_MMC
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     (512 * 1130)
 #elif defined(CONFIG_NAND)
-#define CONFIG_SYS_QE_FW_IN_NAND       (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
+#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
 #else
-#define CONFIG_SYS_FMAN_FW_ADDR                0xEF000000
+#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
+#define CONFIG_SYS_QE_FMAN_FW_ADDR             0xEF000000
 #endif
-#define CONFIG_SYS_FMAN_FW_LENGTH      0x10000
-#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_FMAN_FW_LENGTH)
+#define CONFIG_SYS_QE_FMAN_FW_LENGTH   0x10000
+#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH)
 
 #ifdef CONFIG_SYS_DPAA_FMAN
 #define CONFIG_FMAN_ENET
 
 #define CONFIG_BAUDRATE        115200
 
-#if defined(CONFIG_P4080DS)
+#if defined(CONFIG_P4080DS) || defined(CONFIG_P3060QDS)
 #define __USB_PHY_TYPE ulpi
 #else
 #define __USB_PHY_TYPE utmi
index 0c86d6220de7d866824579a66656fcb6d58591f9..8674a35d2238b1bf79e35df2601cbb47b4086b0c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Ilko Iliev <www.ronetix.at>
  *
diff --git a/include/configs/cradle.h b/include/configs/cradle.h
deleted file mode 100644 (file)
index 25be616..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * (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>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_PXA250           1       /* This is an PXA250 CPU    */
-#define CONFIG_HHP_CRADLE       1       /* on an Cradle Board       */
-
-#undef CONFIG_USE_IRQ                   /* we don't need IRQ/FIQ stuff */
-
-/* we will never enable dcache, because we have to setup MMU first */
-#define CONFIG_SYS_DCACHE_OFF
-#define        CONFIG_SYS_TEXT_BASE            0x0
-/*
- * Size of malloc() pool
- */
-#define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + 128*1024)
-
-/*
- * Hardware drivers
- */
-#define CONFIG_SMC91111
-#define CONFIG_SMC91111_BASE 0x10000300
-#define CONFIG_SMC91111_EXT_PHY
-#define CONFIG_SMC_USE_32_BIT
-
-/*
- * select serial console configuration
- */
-#define CONFIG_PXA_SERIAL
-#define CONFIG_FFUART          1       /* we use FFUART on LUBBOCK */
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE         115200
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-
-#define CONFIG_BOOTDELAY        3
-#define CONFIG_BOOTARGS         "root=/dev/mtdblock2 console=ttyS0,115200"
-#define CONFIG_ETHADDR          08:00:3e:26:0a:5b
-#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_CMDLINE_TAG
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_SYS_LONGHELP                            /* undef to save memory         */
-#define CONFIG_SYS_PROMPT              "=> "   /* Monitor Command Prompt       */
-#define CONFIG_SYS_CBSIZE              256             /* Console I/O Buffer Size      */
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS             16              /* max number of command args   */
-#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE      /* Boot Argument Buffer Size    */
-
-#define CONFIG_SYS_MEMTEST_START       0xa0400000      /* memtest works on     */
-#define CONFIG_SYS_MEMTEST_END         0xa0800000      /* 4 ... 8 MB in DRAM   */
-
-#define CONFIG_SYS_LOAD_ADDR           0xa2000000      /* default load address */
-
-#define CONFIG_SYS_HZ                  1000
-#define CONFIG_SYS_CPUSPEED            0x141           /* set core clock to 200/200/100 MHz */
-
-                                               /* valid baudrates */
-#define CONFIG_SYS_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            0xa0000000 /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1_SIZE       0x01000000 /* 64 MB */
-
-#define PHYS_FLASH_1            0x00000000 /* Flash Bank #1 */
-#define PHYS_FLASH_2            0x04000000 /* Flash Bank #1 */
-#define PHYS_FLASH_SIZE         0x02000000 /* 32 MB */
-
-#define CONFIG_SYS_DRAM_BASE           0xa0000000
-#define CONFIG_SYS_DRAM_SIZE           0x04000000
-
-#define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
-
-#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
-
-/*
- * FLASH and environment organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS     1     /* max number of memory banks           */
-#define CONFIG_SYS_MAX_FLASH_SECT      32    /* max number of sectors on one chip    */
-
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (2*CONFIG_SYS_HZ) /* Timeout for Flash Erase */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (2*CONFIG_SYS_HZ) /* Timeout for Flash Write */
-
-#define CONFIG_ENV_IS_IN_FLASH 1
-#define CONFIG_ENV_ADDR                                0x00020000      /* absolute address for now   */
-#define CONFIG_ENV_SIZE                                0x20000    /* 8K ouch, this may later be */
-
-/******************************************************************************
- *
- * CPU specific defines
- *
- ******************************************************************************/
-
-/*
- * GPIO settings
- *
- * GPIO pin assignments
- * GPIO     Name        Dir Out AF
- * 0        NC
- * 1        NC
- * 2        SIRQ1       I
- * 3        SIRQ2       I
- * 4        SIRQ3       I
- * 5        DMAACK1     O   0
- * 6        DMAACK2     O   0
- * 7        DMAACK3     O   0
- * 8        TC1         O   0
- * 9        TC2         O   0
- * 10       TC3         O   0
- * 11       nDMAEN      O   1
- * 12       AENCTRL     O   0
- * 13       PLDTC       O   0
- * 14       ETHIRQ      I
- * 15       NC
- * 16       NC
- * 17       NC
- * 18       RDY         I
- * 19       DMASIO      I
- * 20       ETHIRQ      NC
- * 21       NC
- * 22       PGMEN       O   1    FIXME for debug only enable flash
- * 23       NC
- * 24       NC
- * 25       NC
- * 26       NC
- * 27       NC
- * 28       NC
- * 29       NC
- * 30       NC
- * 31       NC
- * 32       NC
- * 33       NC
- * 34       FFRXD       I       01
- * 35       FFCTS       I       01
- * 36       FFDCD       I       01
- * 37       FFDSR       I       01
- * 38       FFRI        I       01
- * 39       FFTXD       O   1   10
- * 40       FFDTR       O   0   10
- * 41       FFRTS       O   0   10
- * 42       RS232FOFF   O   0   00
- * 43       NC
- * 44       NC
- * 45       IRSL0       O   0
- * 46       IRRX0       I       01
- * 47       IRTX0       O   0   10
- * 48       NC
- * 49       nIOWE       O   0
- * 50       NC
- * 51       NC
- * 52       NC
- * 53       NC
- * 54       NC
- * 55       NC
- * 56       NC
- * 57       NC
- * 58       DKDIRQ      I
- * 59       NC
- * 60       NC
- * 61       NC
- * 62       NC
- * 63       NC
- * 64       COMLED      O   0
- * 65       COMLED      O   0
- * 66       COMLED      O   0
- * 67       COMLED      O   0
- * 68       COMLED      O   0
- * 69       COMLED      O   0
- * 70       COMLED      O   0
- * 71       COMLED      O   0
- * 72       NC
- * 73       NC
- * 74       NC
- * 75       NC
- * 76       NC
- * 77       NC
- * 78       CSIO        O   1
- * 79       NC
- * 80       CSETH       O   1
- *
- * NOTE: All NC's are defined to be outputs
- *
- */
-/* Pin direction control */
-/* NOTE GPIO 0, 61, 62 are set for inputs due to CPLD SPAREs */
-#define CONFIG_SYS_GPDR0_VAL       0xfff3bf02
-#define CONFIG_SYS_GPDR1_VAL       0xfbffbf83
-#define CONFIG_SYS_GPDR2_VAL       0x0001ffff
-/* Set and Clear registers */
-#define CONFIG_SYS_GPSR0_VAL       0x00400800
-#define CONFIG_SYS_GPSR1_VAL       0x00000480
-#define CONFIG_SYS_GPSR2_VAL       0x00014000
-#define CONFIG_SYS_GPCR0_VAL       0x00000000
-#define CONFIG_SYS_GPCR1_VAL       0x00000000
-#define CONFIG_SYS_GPCR2_VAL       0x00000000
-/* Edge detect registers (these are set by the kernel) */
-#define CONFIG_SYS_GRER0_VAL       0x00000000
-#define CONFIG_SYS_GRER1_VAL       0x00000000
-#define CONFIG_SYS_GRER2_VAL       0x00000000
-#define CONFIG_SYS_GFER0_VAL       0x00000000
-#define CONFIG_SYS_GFER1_VAL       0x00000000
-#define CONFIG_SYS_GFER2_VAL       0x00000000
-/* Alternate function registers */
-#define CONFIG_SYS_GAFR0_L_VAL     0x00000000
-#define CONFIG_SYS_GAFR0_U_VAL     0x00000010
-#define CONFIG_SYS_GAFR1_L_VAL     0x900a9550
-#define CONFIG_SYS_GAFR1_U_VAL     0x00000008
-#define CONFIG_SYS_GAFR2_L_VAL     0x20000000
-#define CONFIG_SYS_GAFR2_U_VAL     0x00000002
-
-/*
- * Clocks, power control and interrupts
- */
-#define CONFIG_SYS_PSSR_VAL        0x00000020
-#define CONFIG_SYS_CCCR        0x00000141  /* 100 MHz memory, 200 MHz CPU  */
-#define CONFIG_SYS_CKEN        0x00000060  /* FFUART and STUART enabled    */
-#define CONFIG_SYS_ICMR        0x00000000  /* No interrupts enabled        */
-
-/* FIXME
- *
- * RTC settings
- * Watchdog
- *
- */
-
-/*
- * Memory settings
- *
- * FIXME Can ethernet be burst read and/or write?? This is set for lubbock
- *       Verify timings on all
- */
-#define CONFIG_SYS_MSC0_VAL        0x000023FA  /* flash bank    (cs0)   */
-/*#define CONFIG_SYS_MSC1_VAL        0x00003549  / * SuperIO bank  (cs2)   */
-#define CONFIG_SYS_MSC1_VAL        0x0000354c  /* SuperIO bank  (cs2)   */
-#define CONFIG_SYS_MSC2_VAL        0x00001224  /* Ethernet bank (cs4)   */
-#ifdef REDBOOT_WAY
-#define CONFIG_SYS_MDCNFG_VAL      0x00001aa1  /* FIXME can DTC be 01?     */
-#define CONFIG_SYS_MDMRS_VAL       0x00000000
-#define CONFIG_SYS_MDREFR_VAL      0x00018018
-#else
-#define CONFIG_SYS_MDCNFG_VAL      0x00001aa1  /* FIXME can DTC be 01?     */
-#define CONFIG_SYS_MDMRS_VAL       0x00000000
-#define CONFIG_SYS_MDREFR_VAL      0x00403018  /* Initial setting, individual bits set in lowlevel_init.S */
-#endif
-#define        CONFIG_SYS_FLYCNFG_VAL          0x00000000
-#define        CONFIG_SYS_SXCNFG_VAL           0x00000000
-
-/*
- * PCMCIA and CF Interfaces (NOT USED, these values from lubbock init)
- */
-#define CONFIG_SYS_MECR_VAL          0x00000000
-#define CONFIG_SYS_MCMEM0_VAL        0x00010504
-#define CONFIG_SYS_MCMEM1_VAL        0x00010504
-#define CONFIG_SYS_MCATT0_VAL        0x00010504
-#define CONFIG_SYS_MCATT1_VAL        0x00010504
-#define CONFIG_SYS_MCIO0_VAL         0x00004715
-#define CONFIG_SYS_MCIO1_VAL         0x00004715
-
-/* Board specific defines */
-
-/* LED defines */
-#define YELLOW    0x03
-#define RED       0x02
-#define GREEN     0x01
-#define OFF       0x00
-#define LED_IRDA0 0
-#define LED_IRDA1 2
-#define LED_IRDA2 4
-#define LED_IRDA3 6
-
-/* SuperIO defines */
-#define CRADLE_SIO_INDEX      0x2e
-#define CRADLE_SIO_DATA       0x2f
-
-/* IO defines */
-#define CRADLE_CPLD_PHYS      0x08000000
-#define CRADLE_SIO1_PHYS      0x08100000
-#define CRADLE_SIO2_PHYS      0x08200000
-#define CRADLE_SIO3_PHYS      0x08300000
-#define CRADLE_ETH_PHYS       0x10000000
-
-#ifndef __ASSEMBLY__
-
-/* global prototypes */
-void led_code(int code, int color);
-
-#endif
-
-#endif  /* __CONFIG_H */
diff --git a/include/configs/csb226.h b/include/configs/csb226.h
deleted file mode 100644 (file)
index 804469b..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * (C) Copyright 2000, 2001, 2002
- * Robert Schwebel, Pengutronix, r.schwebel@pengutronix.de.
- *
- * Configuration for the Cogent CSB226 board. For details see
- * http://www.cogcomp.com/csb_csb226.htm
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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/configs/csb226.h - configuration options, board specific
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#define DEBUG 1
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-#define CONFIG_PXA250          1       /* This is an PXA250 CPU            */
-#define CONFIG_CSB226          1       /* on a CSB226 board                */
-
-#undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff      */
-                                       /* for timer/console/ethernet       */
-
-/* we will never enable dcache, because we have to setup MMU first */
-#define CONFIG_SYS_DCACHE_OFF
-#define        CONFIG_SYS_TEXT_BASE    0x0
-/*
- * Hardware drivers
- */
-
-/*
- * select serial console configuration
- */
-#define CONFIG_PXA_SERIAL
-#define CONFIG_FFUART          1       /* we use FFUART on CSB226          */
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE                19200
-#undef  CONFIG_MISC_INIT_R             /* not used yet                     */
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_BDI
-#define CONFIG_CMD_LOADB
-#define CONFIG_CMD_IMI
-#define CONFIG_CMD_FLASH
-#define CONFIG_CMD_MEMORY
-#define CONFIG_CMD_NET
-#define CONFIG_CMD_SAVEENV
-#define CONFIG_CMD_RUN
-#define CONFIG_CMD_ASKENV
-#define CONFIG_CMD_ECHO
-#define CONFIG_CMD_DHCP
-#define CONFIG_CMD_CACHE
-
-
-#define CONFIG_BOOTDELAY       3
-#define CONFIG_BOOTARGS                "console=ttyS0,19200 ip=192.168.1.10,192.168.1.5,,255,255,255,0,csb root=/dev/nfs, ether=0,0x08000000,eth0"
-#define CONFIG_ETHADDR         FF:FF:FF:FF:FF:FF
-#define CONFIG_NETMASK         255.255.255.0
-#define CONFIG_IPADDR          192.168.1.56
-#define CONFIG_SERVERIP                192.168.1.5
-#define CONFIG_BOOTCOMMAND     "bootm 0x40000"
-#define CONFIG_SHOW_BOOT_PROGRESS
-
-#define CONFIG_CMDLINE_TAG     1
-
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE   19200           /* speed to run kgdb serial port */
-#define CONFIG_KGDB_SER_INDEX  2               /* which serial port to use */
-#endif
-
-/*
- * Miscellaneous configurable options
- */
-
-/*
- * Size of malloc() pool; this lives below the uppermost 128 KiB which are
- * used for the RAM copy of the uboot code
- *
- */
-#define CONFIG_SYS_MALLOC_LEN          (128*1024)
-
-#define CONFIG_SYS_LONGHELP                            /* undef to save memory         */
-#define CONFIG_SYS_PROMPT              "uboot> "       /* Monitor Command Prompt       */
-#define CONFIG_SYS_CBSIZE              128             /* Console I/O Buffer Size      */
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS             16              /* max number of command args   */
-#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE       /* Boot Argument Buffer Size    */
-
-#define CONFIG_SYS_MEMTEST_START       0xa0400000      /* memtest works on     */
-#define CONFIG_SYS_MEMTEST_END         0xa0800000      /* 4 ... 8 MB in DRAM   */
-
-#define CONFIG_SYS_LOAD_ADDR           0xa3000000      /* default load address */
-                                               /* RS: where is this documented? */
-                                               /* RS: is this where U-Boot is  */
-                                               /* RS: relocated to in RAM?      */
-
-#define CONFIG_SYS_HZ                  1000
-                                               /* RS: the oscillator is actually 3680130?? */
-#define CONFIG_SYS_CPUSPEED            0x141           /* set core clock to 200/200/100 MHz */
-                                               /* 0101000001 */
-                                               /*      ^^^^^ Memory Speed 99.53 MHz         */
-                                               /*    ^^      Run Mode Speed = 2x Mem Speed  */
-                                               /* ^^         Turbo Mode Sp. = 1x Run M. Sp. */
-
-#define CONFIG_SYS_MONITOR_LEN         0x1c000         /* 112 KiB */
-
-                                               /* valid baudrates */
-#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
-
-/*
- * Network chip
- */
-#define CONFIG_CS8900
-#define CONFIG_CS8900_BUS32
-#define CONFIG_CS8900_BASE     0x08000000
-
-/*
- * 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           0xa0000000      /* SDRAM Bank #1            */
-#define PHYS_SDRAM_1_SIZE      0x02000000      /* 32 MB                    */
-
-#define PHYS_FLASH_1           0x00000000      /* Flash Bank #1            */
-#define PHYS_FLASH_SIZE                0x02000000      /* 32 MB                    */
-
-#define CONFIG_SYS_DRAM_BASE           0xa0000000      /* RAM starts here          */
-#define CONFIG_SYS_DRAM_SIZE           0x02000000
-
-#define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
-
-#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
-
-# if 0
-/* FIXME: switch to _documented_ registers */
-/*
- * GPIO settings
- *
- * GP15 == nCS1      is 1
- * GP24 == SFRM      is 1
- * GP25 == TXD       is 1
- * GP33 == nCS5      is 1
- * GP39 == FFTXD     is 1
- * GP41 == RTS       is 1
- * GP47 == TXD       is 1
- * GP49 == nPWE      is 1
- * GP62 == LED_B     is 1
- * GP63 == TDM_OE    is 1
- * GP78 == nCS2      is 1
- * GP79 == nCS3      is 1
- * GP80 == nCS4      is 1
- */
-#define CONFIG_SYS_GPSR0_VAL       0x03008000
-#define CONFIG_SYS_GPSR1_VAL       0xC0028282
-#define CONFIG_SYS_GPSR2_VAL       0x0001C000
-
-/* GP02 == DON_RST   is 0
- * GP23 == SCLK      is 0
- * GP45 == USB_ACT   is 0
- * GP60 == PLLEN     is 0
- * GP61 == LED_A     is 0
- * GP73 == SWUPD_LED is 0
- */
-#define CONFIG_SYS_GPCR0_VAL       0x00800004
-#define CONFIG_SYS_GPCR1_VAL       0x30002000
-#define CONFIG_SYS_GPCR2_VAL       0x00000100
-
-/* GP00 == DON_READY is input
- * GP01 == DON_OK    is input
- * GP02 == DON_RST   is output
- * GP03 == RESET_IND is input
- * GP07 == RES11     is input
- * GP09 == RES12     is input
- * GP11 == SWUPDATE  is input
- * GP14 == nPOWEROK  is input
- * GP15 == nCS1      is output
- * GP17 == RES22     is input
- * GP18 == RDY       is input
- * GP23 == SCLK      is output
- * GP24 == SFRM      is output
- * GP25 == TXD       is output
- * GP26 == RXD       is input
- * GP32 == RES21     is input
- * GP33 == nCS5      is output
- * GP34 == FFRXD     is input
- * GP35 == CTS       is input
- * GP39 == FFTXD     is output
- * GP41 == RTS       is output
- * GP42 == USB_OK    is input
- * GP45 == USB_ACT   is output
- * GP46 == RXD       is input
- * GP47 == TXD       is output
- * GP49 == nPWE      is output
- * GP58 == nCPUBUSINT is input
- * GP59 == LANINT    is input
- * GP60 == PLLEN     is output
- * GP61 == LED_A     is output
- * GP62 == LED_B     is output
- * GP63 == TDM_OE    is output
- * GP64 == nDSPINT   is input
- * GP65 == STRAP0    is input
- * GP67 == STRAP1    is input
- * GP69 == STRAP2    is input
- * GP70 == STRAP3    is input
- * GP71 == STRAP4    is input
- * GP73 == SWUPD_LED is output
- * GP78 == nCS2      is output
- * GP79 == nCS3      is output
- * GP80 == nCS4      is output
- */
-#define CONFIG_SYS_GPDR0_VAL       0x03808004
-#define CONFIG_SYS_GPDR1_VAL       0xF002A282
-#define CONFIG_SYS_GPDR2_VAL       0x0001C200
-
-/* GP15 == nCS1  is AF10
- * GP18 == RDY   is AF01
- * GP23 == SCLK  is AF10
- * GP24 == SFRM  is AF10
- * GP25 == TXD   is AF10
- * GP26 == RXD   is AF01
- * GP33 == nCS5  is AF10
- * GP34 == FFRXD is AF01
- * GP35 == CTS   is AF01
- * GP39 == FFTXD is AF10
- * GP41 == RTS   is AF10
- * GP46 == RXD   is AF10
- * GP47 == TXD   is AF01
- * GP49 == nPWE  is AF10
- * GP78 == nCS2  is AF10
- * GP79 == nCS3  is AF10
- * GP80 == nCS4  is AF10
- */
-#define CONFIG_SYS_GAFR0_L_VAL     0x80000000
-#define CONFIG_SYS_GAFR0_U_VAL     0x001A8010
-#define CONFIG_SYS_GAFR1_L_VAL     0x60088058
-#define CONFIG_SYS_GAFR1_U_VAL     0x00000008
-#define CONFIG_SYS_GAFR2_L_VAL     0xA0000000
-#define CONFIG_SYS_GAFR2_U_VAL     0x00000002
-
-
-/* FIXME: set GPIO_RER/FER */
-
-/* RDH = 1
- * PH  = 1
- * VFS = 1
- * BFS = 1
- * SSS = 1
- */
-#define CONFIG_SYS_PSSR_VAL            0x37
-
-/*
- * Memory settings
- *
- * This is the configuration for nCS0/1 -> flash banks
- * configuration for nCS1:
- * [31]    0    - Slower Device
- * [30:28] 010  - CS deselect to CS time: 2*(2*MemClk) = 40 ns
- * [27:24] 0101 - Address to data valid in bursts: (5+1)*MemClk = 60 ns
- * [23:20] 1011 - " for first access: (11+2)*MemClk = 130 ns
- * [19]    1    - 16 Bit bus width
- * [18:16] 000  - nonburst RAM or FLASH
- * configuration for nCS0:
- * [15]    0    - Slower Device
- * [14:12] 010  - CS deselect to CS time: 2*(2*MemClk) = 40 ns
- * [11:08] 0101 - Address to data valid in bursts: (5+1)*MemClk = 60 ns
- * [07:04] 1011 - " for first access: (11+2)*MemClk = 130 ns
- * [03]    1    - 16 Bit bus width
- * [02:00] 000  - nonburst RAM or FLASH
- */
-#define CONFIG_SYS_MSC0_VAL            0x25b825b8 /* flash banks                   */
-
-/* This is the configuration for nCS2/3 -> TDM-Switch, DSP
- * configuration for nCS3: DSP
- * [31]    0    - Slower Device
- * [30:28] 001  - RRR3: CS deselect to CS time: 1*(2*MemClk) = 20 ns
- * [27:24] 0010 - RDN3: Address to data valid in bursts: (2+1)*MemClk = 30 ns
- * [23:20] 0011 - RDF3: Address for first access: (3+1)*MemClk = 40 ns
- * [19]    1    - 16 Bit bus width
- * [18:16] 100  - variable latency I/O
- * configuration for nCS2: TDM-Switch
- * [15]    0    - Slower Device
- * [14:12] 101  - RRR2: CS deselect to CS time: 5*(2*MemClk) = 100 ns
- * [11:08] 1001 - RDN2: Address to data valid in bursts: (9+1)*MemClk = 100 ns
- * [07:04] 0011 - RDF2: Address for first access: (3+1)*MemClk = 40 ns
- * [03]    1    - 16 Bit bus width
- * [02:00] 100  - variable latency I/O
- */
-#define CONFIG_SYS_MSC1_VAL            0x123C593C /* TDM switch, DSP               */
-
-/* This is the configuration for nCS4/5 -> ExtBus, LAN Controller
- *
- * configuration for nCS5: LAN Controller
- * [31]    0    - Slower Device
- * [30:28] 001  - RRR5: CS deselect to CS time: 1*(2*MemClk) = 20 ns
- * [27:24] 0010 - RDN5: Address to data valid in bursts: (2+1)*MemClk = 30 ns
- * [23:20] 0011 - RDF5: Address for first access: (3+1)*MemClk = 40 ns
- * [19]    1    - 16 Bit bus width
- * [18:16] 100  - variable latency I/O
- * configuration for nCS4: ExtBus
- * [15]    0    - Slower Device
- * [14:12] 110  - RRR4: CS deselect to CS time: 6*(2*MemClk) = 120 ns
- * [11:08] 1100 - RDN4: Address to data valid in bursts: (12+1)*MemClk = 130 ns
- * [07:04] 1101 - RDF4: Address for first access: 13->(15+1)*MemClk = 160 ns
- * [03]    1    - 16 Bit bus width
- * [02:00] 100  - variable latency I/O
- */
-#define CONFIG_SYS_MSC2_VAL            0x123C6CDC /* extra bus, LAN controller     */
-
-/* MDCNFG: SDRAM Configuration Register
- *
- * [31:29]   000 - reserved
- * [28]      0  - no SA1111 compatiblity mode
- * [27]      0   - latch return data with return clock
- * [26]      0   - alternate addressing for pair 2/3
- * [25:24]   00  - timings
- * [23]      0   - internal banks in lower partition 2/3 (not used)
- * [22:21]   00  - row address bits for partition 2/3 (not used)
- * [20:19]   00  - column address bits for partition 2/3 (not used)
- * [18]      0   - SDRAM partition 2/3 width is 32 bit
- * [17]      0   - SDRAM partition 3 disabled
- * [16]      0   - SDRAM partition 2 disabled
- * [15:13]   000 - reserved
- * [12]      1  - SA1111 compatiblity mode
- * [11]      1   - latch return data with return clock
- * [10]      0   - no alternate addressing for pair 0/1
- * [09:08]   01  - tRP=2*MemClk CL=2 tRCD=2*MemClk tRAS=5*MemClk tRC=8*MemClk
- * [7]       1   - 4 internal banks in lower partition pair
- * [06:05]   10  - 13 row address bits for partition 0/1
- * [04:03]   01  - 9 column address bits for partition 0/1
- * [02]      0   - SDRAM partition 0/1 width is 32 bit
- * [01]      0   - disable SDRAM partition 1
- * [00]      1   - enable  SDRAM partition 0
- */
-/* use the configuration above but disable partition 0 */
-#define CONFIG_SYS_MDCNFG_VAL          0x000019c8
-
-/* MDREFR: SDRAM Refresh Control Register
- *
- * [32:26] 0     - reserved
- * [25]    0     - K2FREE: not free running
- * [24]    0     - K1FREE: not free running
- * [23]    1     - K0FREE: not free running
- * [22]    0     - SLFRSH: self refresh disabled
- * [21]    0     - reserved
- * [20]    0     - APD: no auto power down
- * [19]    0     - K2DB2: SDCLK2 is MemClk
- * [18]    0     - K2RUN: disable SDCLK2
- * [17]    0     - K1DB2: SDCLK1 is MemClk
- * [16]    1     - K1RUN: enable SDCLK1
- * [15]    1     - E1PIN: SDRAM clock enable
- * [14]    1     - K0DB2: SDCLK0 is MemClk
- * [13]    0     - K0RUN: disable SDCLK0
- * [12]    1     - E0PIN: disable SDCKE0
- * [11:00] 000000011000 - (64ms/8192)*MemClkFreq/32 = 24
- */
-#define CONFIG_SYS_MDREFR_VAL          0x0081D018
-
-/* MDMRS: Mode Register Set Configuration Register
- *
- * [31]      0       - reserved
- * [30:23]   00000000- MDMRS2: SDRAM2/3 MRS Value. (not used)
- * [22:20]   000     - MDCL2:  SDRAM2/3 Cas Latency.  (not used)
- * [19]      0       - MDADD2: SDRAM2/3 burst Type. Fixed to sequential.  (not used)
- * [18:16]   010     - MDBL2:  SDRAM2/3 burst Length. Fixed to 4.  (not used)
- * [15]      0       - reserved
- * [14:07]   00000000- MDMRS0: SDRAM0/1 MRS Value.
- * [06:04]   010     - MDCL0:  SDRAM0/1 Cas Latency.
- * [03]      0       - MDADD0: SDRAM0/1 burst Type. Fixed to sequential.
- * [02:00]   010     - MDBL0:  SDRAM0/1 burst Length. Fixed to 4.
- */
-#define CONFIG_SYS_MDMRS_VAL           0x00020022
-
-/*
- * PCMCIA and CF Interfaces
- */
-#define CONFIG_SYS_MECR_VAL            0x00000000
-#define CONFIG_SYS_MCMEM0_VAL          0x00000000
-#define CONFIG_SYS_MCMEM1_VAL          0x00000000
-#define CONFIG_SYS_MCATT0_VAL          0x00000000
-#define CONFIG_SYS_MCATT1_VAL          0x00000000
-#define CONFIG_SYS_MCIO0_VAL           0x00000000
-#define CONFIG_SYS_MCIO1_VAL           0x00000000
-#endif
-
-/*
- * GPIO settings
- */
-#define CONFIG_SYS_GPSR0_VAL           0xFFFFFFFF
-#define CONFIG_SYS_GPSR1_VAL           0xFFFFFFFF
-#define CONFIG_SYS_GPSR2_VAL           0xFFFFFFFF
-#define CONFIG_SYS_GPCR0_VAL           0x08022080
-#define CONFIG_SYS_GPCR1_VAL           0x00000000
-#define CONFIG_SYS_GPCR2_VAL           0x00000000
-#define CONFIG_SYS_GPDR0_VAL           0xCD82A878
-#define CONFIG_SYS_GPDR1_VAL           0xFCFFAB80
-#define CONFIG_SYS_GPDR2_VAL           0x0001FFFF
-#define CONFIG_SYS_GAFR0_L_VAL         0x80000000
-#define CONFIG_SYS_GAFR0_U_VAL         0xA5254010
-#define CONFIG_SYS_GAFR1_L_VAL         0x599A9550
-#define CONFIG_SYS_GAFR1_U_VAL         0xAAA5AAAA
-#define CONFIG_SYS_GAFR2_L_VAL         0xAAAAAAAA
-#define CONFIG_SYS_GAFR2_U_VAL         0x00000002
-
-/* FIXME: set GPIO_RER/FER */
-
-#define CONFIG_SYS_PSSR_VAL        0x20
-
-#define        CONFIG_SYS_CCCR                 CCCR_L27|CCCR_M2|CCCR_N10
-#define        CONFIG_SYS_CKEN                 0x0
-
-/*
- * Memory settings
- */
-
-#define CONFIG_SYS_MSC0_VAL            0x2ef15af0
-#define CONFIG_SYS_MSC1_VAL            0x00003ff4
-#define CONFIG_SYS_MSC2_VAL            0x7ff07ff0
-#define CONFIG_SYS_MDCNFG_VAL          0x09a909a9
-#define CONFIG_SYS_MDREFR_VAL          0x038ff030
-#define CONFIG_SYS_MDMRS_VAL           0x00220022
-#define        CONFIG_SYS_FLYCNFG_VAL          0x00000000
-#define        CONFIG_SYS_SXCNFG_VAL           0x00000000
-
-/*
- * PCMCIA and CF Interfaces
- */
-#define CONFIG_SYS_MECR_VAL        0x00000000
-#define CONFIG_SYS_MCMEM0_VAL      0x00000000
-#define CONFIG_SYS_MCMEM1_VAL      0x00000000
-#define CONFIG_SYS_MCATT0_VAL      0x00000000
-#define CONFIG_SYS_MCATT1_VAL      0x00000000
-#define CONFIG_SYS_MCIO0_VAL       0x00000000
-#define CONFIG_SYS_MCIO1_VAL       0x00000000
-
-#define CSB226_USER_LED0       0x00000008
-#define CSB226_USER_LED1       0x00000010
-#define CSB226_USER_LED2       0x00000020
-
-
-/*
- * FLASH and environment organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS     1       /* max number of memory banks       */
-#define CONFIG_SYS_MAX_FLASH_SECT      128     /* max number of sect. on one chip  */
-
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (2*CONFIG_SYS_HZ) /* Timeout for Flash Erase       */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (2*CONFIG_SYS_HZ) /* Timeout for Flash Write       */
-
-#define        CONFIG_ENV_IS_IN_FLASH  1
-#define CONFIG_ENV_ADDR            (PHYS_FLASH_1 + 0x1C000)
-                                       /* Addr of Environment Sector       */
-#define CONFIG_ENV_SIZE            0x4000  /* Total Size of Environment Sector */
-
-#endif  /* __CONFIG_H */
diff --git a/include/configs/da850_am18xxevm.h b/include/configs/da850_am18xxevm.h
new file mode 100644 (file)
index 0000000..9b7bf1e
--- /dev/null
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Based on davinci_dvevm.h. Original Copyrights follow:
+ *
+ * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * Board
+ */
+#define CONFIG_DRIVER_TI_EMAC
+#define CONFIG_USE_SPIFLASH
+
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_MACH_DAVINCI_DA850_EVM
+#define CONFIG_ARM926EJS               /* arm926ejs CPU core */
+#define CONFIG_SOC_DA8XX               /* TI DA8xx SoC */
+#define CONFIG_SOC_DA850               /* TI DA850 SoC */
+#define CONFIG_SYS_CLK_FREQ            clk_get(DAVINCI_ARM_CLKID)
+#define CONFIG_SYS_OSCIN_FREQ          24000000
+#define CONFIG_SYS_TIMERBASE           DAVINCI_TIMER0_BASE
+#define CONFIG_SYS_HZ_CLOCK            clk_get(DAVINCI_AUXCLK_CLKID)
+#define CONFIG_SYS_HZ                  1000
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_SYS_TEXT_BASE           0xc1080000
+#define CONFIG_DA850_AM18X_EVM
+/*
+ * Memory Info
+ */
+#define CONFIG_SYS_MALLOC_LEN  (0x10000 + 1*1024*1024) /* malloc() len */
+#define PHYS_SDRAM_1           DAVINCI_DDR_EMIF_DATA_BASE /* DDR Start */
+#define PHYS_SDRAM_1_SIZE      (64 << 20) /* SDRAM size 64MB */
+#define CONFIG_MAX_RAM_BANK_SIZE (512 << 20) /* max size from SPRS586*/
+
+/* memtest start addr */
+#define CONFIG_SYS_MEMTEST_START       (PHYS_SDRAM_1 + 0x2000000)
+
+/* memtest will be run on 16MB */
+#define CONFIG_SYS_MEMTEST_END (PHYS_SDRAM_1 + 0x2000000 + 16*1024*1024)
+
+#define CONFIG_NR_DRAM_BANKS   1 /* we have 1 bank of DRAM */
+#define CONFIG_STACKSIZE       (256*1024) /* regular stack */
+
+/*
+ * Serial Driver info
+ */
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_REG_SIZE    -4      /* NS16550 register size */
+#define CONFIG_SYS_NS16550_COM1        DAVINCI_UART2_BASE /* Base address of UART2 */
+#define CONFIG_SYS_NS16550_CLK clk_get(DAVINCI_UART2_CLKID)
+#define CONFIG_CONS_INDEX      1               /* use UART0 for console */
+#define CONFIG_BAUDRATE                115200          /* Default baud rate */
+#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
+
+#define CONFIG_SPI
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_WINBOND
+#define CONFIG_DAVINCI_SPI
+#define CONFIG_SYS_SPI_BASE            DAVINCI_SPI1_BASE
+#define CONFIG_SYS_SPI_CLK             clk_get(DAVINCI_SPI1_CLKID)
+#define CONFIG_SF_DEFAULT_SPEED                30000000
+#define CONFIG_ENV_SPI_MAX_HZ  CONFIG_SF_DEFAULT_SPEED
+
+/*
+ * I2C Configuration
+ */
+#define CONFIG_HARD_I2C
+#define CONFIG_DRIVER_DAVINCI_I2C
+#define CONFIG_SYS_I2C_SPEED           25000
+#define CONFIG_SYS_I2C_SLAVE           10 /* Bogus, master-only in U-Boot */
+#define CONFIG_SYS_I2C_EXPANDER_ADDR   0x20
+
+/*
+ * Flash & Environment
+ */
+#ifdef CONFIG_USE_NAND
+#undef CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_NAND_DAVINCI
+#define CONFIG_SYS_NO_FLASH
+#define CONFIG_ENV_IS_IN_NAND          /* U-Boot env in NAND Flash  */
+#define CONFIG_ENV_OFFSET              0x0 /* Block 0--not used by bootcode */
+#define CONFIG_ENV_SIZE                        (128 << 10)
+#define        CONFIG_SYS_NAND_USE_FLASH_BBT
+#define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST
+#define        CONFIG_SYS_NAND_PAGE_2K
+#define CONFIG_SYS_NAND_CS             3
+#define CONFIG_SYS_NAND_BASE           DAVINCI_ASYNC_EMIF_DATA_CE3_BASE
+#define CONFIG_SYS_CLE_MASK            0x10
+#define CONFIG_SYS_ALE_MASK            0x8
+#undef CONFIG_SYS_NAND_HW_ECC
+#define CONFIG_SYS_MAX_NAND_DEVICE     1 /* Max number of NAND devices */
+#define NAND_MAX_CHIPS                 1
+#endif
+
+/*
+ * Network & Ethernet Configuration
+ */
+#ifdef CONFIG_DRIVER_TI_EMAC
+#define CONFIG_EMAC_MDIO_PHY_NUM       0
+#define CONFIG_MII
+#define CONFIG_BOOTP_DEFAULT
+#define CONFIG_BOOTP_DNS
+#define CONFIG_BOOTP_DNS2
+#define CONFIG_BOOTP_SEND_HOSTNAME
+#define CONFIG_NET_RETRY_COUNT 10
+#define CONFIG_NET_MULTI
+#endif
+
+#ifdef CONFIG_USE_NOR
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_SYS_FLASH_PROTECTION
+#define CONFIG_SYS_MAX_FLASH_BANKS     1 /* max number of flash banks */
+#define CONFIG_SYS_FLASH_SECT_SZ       (128 << 10) /* 128KB */
+#define CONFIG_ENV_OFFSET              (CONFIG_SYS_FLASH_SECT_SZ * 3)
+#define CONFIG_ENV_SIZE                        (10 << 10) /* 10KB */
+#define CONFIG_SYS_FLASH_BASE          DAVINCI_ASYNC_EMIF_DATA_CE2_BASE
+#define PHYS_FLASH_SIZE                        (8 << 20) /* Flash size 8MB */
+#define CONFIG_SYS_MAX_FLASH_SECT ((PHYS_FLASH_SIZE/CONFIG_SYS_FLASH_SECT_SZ)\
+              + 3)
+#define CONFIG_ENV_SECT_SIZE           CONFIG_SYS_FLASH_SECT_SZ
+#endif
+
+#ifdef CONFIG_USE_SPIFLASH
+#undef CONFIG_ENV_IS_IN_FLASH
+#undef CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_IS_IN_SPI_FLASH
+#define CONFIG_ENV_SIZE                        (64 << 10)
+#define CONFIG_ENV_OFFSET              (256 << 10)
+#define CONFIG_ENV_SECT_SIZE           (64 << 10)
+#define CONFIG_SYS_NO_FLASH
+#endif
+
+/*
+ * U-Boot general configuration
+ */
+#define CONFIG_MISC_INIT_R
+#define CONFIG_BOOTFILE                "uImage" /* Boot file name */
+#define CONFIG_SYS_PROMPT      "U-Boot > " /* Command Prompt */
+#define CONFIG_SYS_CBSIZE      1024 /* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE      (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
+#define CONFIG_SYS_MAXARGS     16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE /* Boot Args Buffer Size */
+#define CONFIG_SYS_LOAD_ADDR   (PHYS_SDRAM_1 + 0x700000)
+#define CONFIG_VERSION_VARIABLE
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CRC32_VERIFY
+#define CONFIG_MX_CYCLIC
+
+/*
+ * Linux Information
+ */
+#define LINUX_BOOT_PARAM_ADDR  (PHYS_SDRAM_1 + 0x100)
+#define CONFIG_HWCONFIG                /* enable hwconfig */
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_REVISION_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_BOOTARGS                \
+       "mem=32M console=ttyS2,115200n8 root=/dev/mtdblock2 rw noinitrd ip=dhcp"
+#define CONFIG_BOOTDELAY       3
+#define CONFIG_EXTRA_ENV_SETTINGS      "hwconfig=dsp:wake=yes"
+
+/*
+ * U-Boot commands
+ */
+#include <config_cmd_default.h>
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_SAVES
+#define CONFIG_CMD_MEMORY
+
+#ifndef CONFIG_DRIVER_TI_EMAC
+#undef CONFIG_CMD_NET
+#undef CONFIG_CMD_DHCP
+#undef CONFIG_CMD_MII
+#undef CONFIG_CMD_PING
+#endif
+
+#ifdef CONFIG_USE_NAND
+#undef CONFIG_CMD_FLASH
+#undef CONFIG_CMD_IMLS
+#define CONFIG_CMD_NAND
+
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_DEVICE
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_LZO
+#define CONFIG_RBTREE
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#endif
+
+#ifdef CONFIG_USE_SPIFLASH
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_FLASH
+#define CONFIG_CMD_SPI
+#define CONFIG_CMD_SF
+#define CONFIG_CMD_SAVEENV
+#endif
+
+#if !defined(CONFIG_USE_NAND) && \
+       !defined(CONFIG_USE_NOR) && \
+       !defined(CONFIG_USE_SPIFLASH)
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_SYS_NO_FLASH
+#define CONFIG_ENV_SIZE                (16 << 10)
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_ENV
+#endif
+
+/* additions for new relocation code, must added to all boards */
+#define CONFIG_SYS_SDRAM_BASE          0xc0000000
+#define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
+                                       /* Fix this */ GENERATED_GBL_DATA_SIZE)
+#endif /* __CONFIG_H */
index 4c143700ddc5299b5c5d28e510a7d7ad69e4c948..2e2aa19a45aec66ed01eac2a6614030c829e88dc 100644 (file)
@@ -36,6 +36,7 @@
 #define CONFIG_MACH_DAVINCI_DA850_EVM
 #define CONFIG_ARM926EJS               /* arm926ejs CPU core */
 #define CONFIG_SOC_DA8XX               /* TI DA8xx SoC */
+#define CONFIG_SOC_DA850               /* TI DA850 SoC */
 #define CONFIG_SYS_CLK_FREQ            clk_get(DAVINCI_ARM_CLKID)
 #define CONFIG_SYS_OSCIN_FREQ          24000000
 #define CONFIG_SYS_TIMERBASE           DAVINCI_TIMER0_BASE
diff --git a/include/configs/davinci_dm6467Tevm.h b/include/configs/davinci_dm6467Tevm.h
new file mode 100644 (file)
index 0000000..b3a4e44
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2011 Texas Instruments Incorporated
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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
+
+/* Spectrum Digital TMS320DM6467T EVM board */
+#define DAVINCI_DM6467EVM
+#define DAVINCI_DM6467TEVM
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_SYS_USE_NAND
+#define CONFIG_SYS_NAND_SMALLPAGE
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+/* SoC Configuration */
+#define CONFIG_ARM926EJS                               /* arm926ejs CPU */
+
+/* Clock rates detection */
+#ifndef __ASSEMBLY__
+extern unsigned int davinci_arm_clk_get(void);
+#endif
+
+#define CFG_REFCLK_FREQ                33000000
+/* Arm Clock frequency    */
+#define CONFIG_SYS_CLK_FREQ    davinci_arm_clk_get()
+/* Timer Input clock freq */
+#define CONFIG_SYS_HZ_CLOCK            (CONFIG_SYS_CLK_FREQ/2)
+#define CONFIG_SYS_TIMERBASE           0x01c21400      /* use timer 0 */
+#define CONFIG_SYS_HZ                  1000
+#define CONFIG_SOC_DM646X
+
+/* EEPROM definitions for EEPROM */
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN         2
+#define CONFIG_SYS_I2C_EEPROM_ADDR             0x50
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS      6
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS  20
+
+/* Memory Info */
+#define CONFIG_SYS_MALLOC_LEN          (1 << 20)       /* 1 MiB */
+#define CONFIG_SYS_MEMTEST_START       0x80000000
+#define CONFIG_SYS_MEMTEST_END         0x81000000      /* 16MB RAM test */
+#define CONFIG_NR_DRAM_BANKS           1
+#define CONFIG_STACKSIZE               (256 << 10)     /* 256 KiB */
+#define PHYS_SDRAM_1                   0x80000000      /* DDR Start */
+#define PHYS_SDRAM_1_SIZE              (256 << 20)     /* DDR size 256MB */
+
+/* Linux interfacing */
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_SYS_BARGSIZE            1024            /* Bootarg Size */
+#define CONFIG_SYS_LOAD_ADDR           0x80700000      /* kernel address */
+#define CONFIG_REVISION_TAG
+
+/* Serial Driver info */
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_REG_SIZE    4
+#define CONFIG_SYS_NS16550_COM1                0x01c20000
+#define CONFIG_SYS_NS16550_CLK         24000000
+#define CONFIG_CONS_INDEX              1
+#define CONFIG_BAUDRATE                        115200
+#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
+
+/* I2C Configuration */
+#define CONFIG_HARD_I2C
+#define CONFIG_DRIVER_DAVINCI_I2C
+#define CONFIG_SYS_I2C_SPEED           80000
+#define CONFIG_SYS_I2C_SLAVE           10
+
+/* Network & Ethernet Configuration */
+#define CONFIG_DRIVER_TI_EMAC
+#define CONFIG_EMAC_MDIO_PHY_NUM       1
+#define CONFIG_MII
+#define CONFIG_BOOTP_DEFAULT
+#define CONFIG_BOOTP_DNS
+#define CONFIG_BOOTP_DNS2
+#define CONFIG_BOOTP_SEND_HOSTNAME
+#define CONFIG_NET_RETRY_COUNT 10
+#define CONFIG_CMD_NET
+
+/* Flash & Environment */
+#define CONFIG_SYS_NO_FLASH
+#ifdef CONFIG_SYS_USE_NAND
+#define CONFIG_NAND_DAVINCI
+#define CONFIG_SYS_NAND_CS             2
+#undef CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16 KiB */
+#define CONFIG_SYS_NAND_BASE_LIST      {0x42000000, }
+#define CONFIG_SYS_NAND_HW_ECC
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_ENV_OFFSET              0
+#else
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_SIZE                        (4 << 10)       /* 4 KiB */
+#endif
+
+/* U-Boot general configuration */
+#undef CONFIG_USE_IRQ                          /* No IRQ/FIQ in U-Boot */
+#define CONFIG_BOOTDELAY       3
+#define CONFIG_BOOTFILE                "uImage"        /* Boot file name */
+#define CONFIG_SYS_PROMPT      "DM6467 EVM > " /* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE      1024            /* Console I/O Buffer Size  */
+#define CONFIG_SYS_PBSIZE              \
+                       (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS             16
+#define CONFIG_VERSION_VARIABLE
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CRC32_VERIFY
+#define CONFIG_MX_CYCLIC
+#define CONFIG_BOOTCOMMAND             "source 0x82080000; dhcp; bootm"
+#define CONFIG_BOOTARGS                        \
+                                       "mem=120M console=ttyS0,115200n8 " \
+                                       "root=/dev/hda1 rw noinitrd ip=dhcp"
+
+/* U-Boot commands */
+#include <config_cmd_default.h>
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_SAVES
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DHCP
+#undef CONFIG_CMD_BDI
+#undef CONFIG_CMD_FPGA
+#undef CONFIG_CMD_SETGETDCR
+#ifdef CONFIG_SYS_USE_NAND
+#undef CONFIG_CMD_FLASH
+#undef CONFIG_CMD_IMLS
+#define CONFIG_CMD_NAND
+#endif
+
+#define CONFIG_MAX_RAM_BANK_SIZE       (256 << 20)     /* 256 MB */
+
+#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
+#define CONFIG_SYS_INIT_RAM_SIZE       0x1000
+#define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_SDRAM_BASE + \
+                                        CONFIG_SYS_INIT_RAM_SIZE - \
+                                        GENERATED_GBL_DATA_SIZE)
+
+#endif /* __CONFIG_H */
index ec1c31c0852f3cec4f1a2590c4b28ec9a7af6d01..c9a0cd1daa3234ed916fe3bcb7274a0130e45287 100644 (file)
@@ -65,6 +65,7 @@ extern unsigned int davinci_arm_clk_get(void);
 #define CONFIG_SETUP_MEMORY_TAGS
 #define CONFIG_SYS_BARGSIZE            1024            /* Bootarg Size */
 #define CONFIG_SYS_LOAD_ADDR           0x80700000      /* kernel address */
+#define CONFIG_REVISION_TAG
 
 /* Serial Driver info */
 #define CONFIG_SYS_NS16550
index 5eaa19884676cf7aad9ac87e90a8db2fc30dfce6..f4ddbeacc3b00038807707f699c6492e15e69aff 100644 (file)
@@ -27,6 +27,9 @@
 #define CONFIG_SYS_NAND_LARGEPAGE
 #define CONFIG_SYS_USE_NAND
 #define CONFIG_DISPLAY_CPUINFO
+#define MACH_TYPE_SCHMOOGIE 1255
+#define CONFIG_MACH_TYPE MACH_TYPE_SCHMOOGIE
+
 /*===================*/
 /* SoC Configuration */
 /*===================*/
index 74530e8306c2bfe604cae316e61cb2a99710e9e4..fc4d8eceac388eaa8ded2a1595bdf35360fc4642 100644 (file)
@@ -52,6 +52,8 @@
 #define CONFIG_SYS_NAND_SMALLPAGE
 #define CONFIG_SYS_USE_NOR
 #define CONFIG_DISPLAY_CPUINFO
+#define MACH_TYPE_SONATA 1254
+#define CONFIG_MACH_TYPE MACH_TYPE_SONATA
 /*===================*/
 /* SoC Configuration */
 /*===================*/
index 6c51a274750aeb16be539c343d0f8ac7fb0f7f61..758326bb9dddbd5099dfee5007b56618721cad4b 100644 (file)
 /* High Level Configuration Options */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_DEVKIT8000        1       /* working with DevKit8000 */
 
-#define        CONFIG_SYS_TEXT_BASE    0x80008000
+/*
+ * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
+ * 64 bytes before this address should be set aside for u-boot.img's
+ * header. That is 0x800FFFC0--0x80100000 should not be used for any
+ * other needs.
+ */
+#define CONFIG_SYS_TEXT_BASE   0x80100000
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
 
 #define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + (128 << 10))
 
 /* Hardware drivers */
-
-/* DDR - I use Micron DDR */
-#define CONFIG_OMAP3_MICRON_DDR                1
-
 /* DM9000 */
 #define CONFIG_NET_RETRY_COUNT         20
 #define        CONFIG_DRIVER_DM9000            1
 
 /* The stack sizes are set up in start.S using the settings below */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ           (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ           (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*  Physical Memory Map  */
 #define CONFIG_NR_DRAM_BANKS           2 /* CS1 may or may not be populated */
 #define PHYS_SDRAM_1                   OMAP34XX_SDRC_CS0
-#define PHYS_SDRAM_1_SIZE              (128 << 20)     /* at least 128 MiB */
 #define PHYS_SDRAM_2                   OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C                     1
-
 /* NAND and environment organization  */
 #define PISMO1_NAND_SIZE               GPMC_SIZE_128M
 
 
 #define CONFIG_SPL_LIBCOMMON_SUPPORT
 #define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_BOARD_INIT
 #define CONFIG_SPL_I2C_SUPPORT
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
 #define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_BSS_MAX_SIZE                0x80000
 
 /* NAND boot config */
+#define CONFIG_SYS_NAND_5_ADDR_CYCLE
 #define CONFIG_SYS_NAND_PAGE_COUNT     64
 #define CONFIG_SYS_NAND_PAGE_SIZE      2048
 #define CONFIG_SYS_NAND_OOBSIZE                64
 #define CONFIG_SYS_NAND_U_BOOT_OFFS    0x80000
 #define CONFIG_SYS_NAND_U_BOOT_SIZE    0x200000
 
-#define CONFIG_SYS_SPL_MALLOC_START    0x80108000
+#define CONFIG_SYS_SPL_MALLOC_START    0x80208000
 #define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000        /* 1 MB */
 
 #endif /* __CONFIG_H */
index 9baf41582b5107f9f099a7884b520b8113728695..42aab27fac53de648bf4035b77a3339b2b120841 100644 (file)
@@ -45,7 +45,6 @@
  */
 #define CONFIG_OMAP            /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                /* which is a 34XX */
-#define CONFIG_OMAP3430                /* which is in a 3430 */
 
 #define CONFIG_SYS_TEXT_BASE   0x80008000
 
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
index 70c74f63d4c2f498a5548698da06e2160183f175..d5c9cad657abd8e7ced508b8e8aa7694f9335013 100644 (file)
 #define CONFIG_CMD_SETGETDCR
 #define CONFIG_CMD_SOURCE
 #define CONFIG_CMD_XIMG
+#define CONFIG_CMD_ZBOOT
 
 #define CONFIG_BOOTDELAY                       15
 #define CONFIG_BOOTARGS                                "root=/dev/mtdblock0 console=ttyS0,9600"
 #undef  CONFIG_SYS_GENERIC_TIMER
 #define CONFIG_SYS_PCAT_INTERRUPTS
 #define CONFIG_SYS_NUM_IRQS                    16
+#define CONFIG_SYS_PC_BIOS
+#define CONFIG_SYS_PCI_BIOS
+#define CONFIG_SYS_X86_REALMODE
+#define CONFIG_SYS_X86_ISR_TIMER
 
 /*-----------------------------------------------------------------------
  * Memory organization:
diff --git a/include/configs/ecovec.h b/include/configs/ecovec.h
new file mode 100644 (file)
index 0000000..2e2a9a7
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * Configuation settings for the Renesas Solutions ECOVEC board
+ *
+ * Copyright (C) 2009 - 2011 Renesas Solutions Corp.
+ * Copyright (C) 2009 Kuninori Morimoto <morimoto.kuninori@renesas.com>
+ * Copyright (C) 2010, 2011 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.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 __ECOVEC_H
+#define __ECOVEC_H
+
+/*
+ *  Address      Interface        BusWidth
+ *-----------------------------------------
+ *  0x0000_0000  U-Boot           16bit
+ *  0x0004_0000  Linux romImage   16bit
+ *  0x0014_0000  MTD for Linux    16bit
+ *  0x0400_0000  Internal I/O     16/32bit
+ *  0x0800_0000  DRAM             32bit
+ *  0x1800_0000  MFI              16bit
+ */
+
+#undef DEBUG
+#define CONFIG_SH              1
+#define CONFIG_SH4             1
+#define CONFIG_SH4A            1
+#define CONFIG_CPU_SH7724      1
+#define BOARD_LATE_INIT                1
+#define CONFIG_ECOVEC          1
+
+#define CONFIG_ECOVEC_ROMIMAGE_ADDR 0xA0040000
+#define CONFIG_SYS_TEXT_BASE 0x8FFC0000
+
+#define CONFIG_CMD_FLASH
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_SDRAM
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_USB
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_SAVEENV
+
+#define CONFIG_USB_STORAGE
+#define CONFIG_DOS_PARTITION
+
+#define CONFIG_BAUDRATE                115200
+#define CONFIG_BOOTDELAY       3
+#define CONFIG_BOOTARGS                "console=ttySC0,115200"
+
+#define CONFIG_VERSION_VARIABLE
+#undef  CONFIG_SHOW_BOOT_PROGRESS
+
+/* I2C */
+#define CONFIG_CMD_I2C
+#define CONFIG_SH_I2C 1
+#define CONFIG_HARD_I2C                1
+#define CONFIG_I2C_MULTI_BUS   1
+#define CONFIG_SYS_MAX_I2C_BUS 2
+#define CONFIG_SYS_I2C_MODULE  1
+#define CONFIG_SYS_I2C_SPEED   100000 /* 100 kHz */
+#define CONFIG_SYS_I2C_SLAVE   0x7F
+#define CONFIG_SH_I2C_DATA_HIGH        4
+#define CONFIG_SH_I2C_DATA_LOW         5
+#define CONFIG_SH_I2C_CLOCK    41666666
+#define CONFIG_SH_I2C_BASE0            0xA4470000
+#define CONFIG_SH_I2C_BASE1            0xA4750000
+
+/* Ether */
+#define CONFIG_NET_MULTI 1
+#define CONFIG_SH_ETHER 1
+#define CONFIG_SH_ETHER_USE_PORT (0)
+#define CONFIG_SH_ETHER_PHY_ADDR (0x1f)
+#define CONFIG_PHYLIB
+#define CONFIG_BITBANGMII
+#define CONFIG_BITBANGMII_MULTI
+
+/* USB / R8A66597 */
+#define CONFIG_USB_R8A66597_HCD
+#define CONFIG_R8A66597_BASE_ADDR   0xA4D80000
+#define CONFIG_R8A66597_XTAL        0x0000  /* 12MHz */
+#define CONFIG_R8A66597_LDRV        0x8000  /* 3.3V */
+#define CONFIG_R8A66597_ENDIAN      0x0000  /* little */
+#define CONFIG_SUPERH_ON_CHIP_R8A66597
+
+/* undef to save memory        */
+#define CONFIG_SYS_LONGHELP
+/* Monitor Command Prompt */
+#define CONFIG_SYS_PROMPT              "=> "
+/* Buffer size for input from the Console */
+#define CONFIG_SYS_CBSIZE              256
+/* Buffer size for Console output */
+#define CONFIG_SYS_PBSIZE              256
+/* max args accepted for monitor commands */
+#define CONFIG_SYS_MAXARGS             16
+/* Buffer size for Boot Arguments passed to kernel */
+#define CONFIG_SYS_BARGSIZE    512
+/* List of legal baudrate settings for this board */
+#define CONFIG_SYS_BAUDRATE_TABLE      { 115200 }
+
+/* SCIF */
+#define CONFIG_SCIF_CONSOLE    1
+#define CONFIG_SCIF            1
+#define CONFIG_CONS_SCIF0      1
+
+/* Suppress display of console information at boot */
+#undef  CONFIG_SYS_CONSOLE_INFO_QUIET
+#undef  CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
+#undef  CONFIG_SYS_CONSOLE_ENV_OVERWRITE
+
+/* SDRAM */
+#define CONFIG_SYS_SDRAM_BASE  (0x88000000)
+#define CONFIG_SYS_SDRAM_SIZE  (256 * 1024 * 1024)
+#define CONFIG_SYS_LOAD_ADDR   (CONFIG_SYS_SDRAM_BASE + 16 * 1024 * 1024)
+
+#define CONFIG_SYS_MEMTEST_START (CONFIG_SYS_SDRAM_BASE)
+#define CONFIG_SYS_MEMTEST_END  (CONFIG_SYS_MEMTEST_START + 200 * 1024 * 1024)
+/* Enable alternate, more extensive, memory test */
+#undef  CONFIG_SYS_ALT_MEMTEST
+/* Scratch address used by the alternate memory test */
+#undef  CONFIG_SYS_MEMTEST_SCRATCH
+
+/* Enable temporary baudrate change while serial download */
+#undef  CONFIG_SYS_LOADS_BAUD_CHANGE
+
+/* FLASH */
+#define CONFIG_FLASH_CFI_DRIVER 1
+#define CONFIG_SYS_FLASH_CFI
+#undef  CONFIG_SYS_FLASH_QUIET_TEST
+#define CONFIG_SYS_FLASH_EMPTY_INFO
+#define CONFIG_SYS_FLASH_BASE  (0xA0000000)
+#define CONFIG_SYS_MAX_FLASH_SECT      512
+
+/* if you use all NOR Flash , you change dip-switch. Please see Manual. */
+#define CONFIG_SYS_MAX_FLASH_BANKS     1
+#define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE }
+
+/* Timeout for Flash erase operations (in ms) */
+#define CONFIG_SYS_FLASH_ERASE_TOUT    (3 * 1000)
+/* Timeout for Flash write operations (in ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT    (3 * 1000)
+/* Timeout for Flash set sector lock bit operations (in ms) */
+#define CONFIG_SYS_FLASH_LOCK_TOUT     (3 * 1000)
+/* Timeout for Flash clear lock bit operations (in ms) */
+#define CONFIG_SYS_FLASH_UNLOCK_TOUT   (3 * 1000)
+
+/*
+ * Use hardware flash sectors protection instead
+ * of U-Boot software protection
+ */
+#undef  CONFIG_SYS_FLASH_PROTECTION
+#undef  CONFIG_SYS_DIRECT_FLASH_TFTP
+
+/* Address of u-boot image in Flash (NOT run time address in SDRAM) ?!? */
+#define CONFIG_SYS_MONITOR_BASE        (CONFIG_SYS_FLASH_BASE)
+/* Monitor size */
+#define CONFIG_SYS_MONITOR_LEN (256 * 1024)
+/* Size of DRAM reserved for malloc() use */
+#define CONFIG_SYS_MALLOC_LEN  (256 * 1024)
+/* size in bytes reserved for initial data */
+#define CONFIG_SYS_GBL_DATA_SIZE       (256)
+#define CONFIG_SYS_BOOTMAPSZ   (8 * 1024 * 1024)
+
+/* ENV setting */
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_OVERWRITE   1
+#define CONFIG_ENV_SECT_SIZE   (128 * 1024)
+#define CONFIG_ENV_SIZE                (CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_FLASH_BASE + CONFIG_SYS_MONITOR_LEN)
+/* Offset of env Flash sector relative to CONFIG_SYS_FLASH_BASE */
+#define CONFIG_ENV_OFFSET      (CONFIG_ENV_ADDR - CONFIG_SYS_FLASH_BASE)
+#define CONFIG_ENV_SIZE_REDUND (CONFIG_ENV_SECT_SIZE)
+
+/* Board Clock */
+#define CONFIG_SYS_CLK_FREQ 41666666
+#define CONFIG_SYS_TMU_CLK_DIV      4
+#define CONFIG_SYS_HZ       1000
+
+#endif /* __ECOVEC_H */
index a07c8b58e3aeb7514a58adf05c497630e8036c3b..2b069d6b7a3badb74b162b7f001bde6f314c169d 100644 (file)
@@ -85,7 +85,7 @@
  * Hardware drivers
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX51_UART1
+#define CONFIG_MXC_UART_BASE           UART1_BASE
 #define CONFIG_CONS_INDEX              1
 #define CONFIG_BAUDRATE                        115200
 #define CONFIG_SYS_BAUDRATE_TABLE      {9600, 19200, 38400, 57600, 115200}
diff --git a/include/configs/enbw_cmc.h b/include/configs/enbw_cmc.h
new file mode 100644 (file)
index 0000000..c427dc7
--- /dev/null
@@ -0,0 +1,451 @@
+/*
+ * (C) Copyright 2011
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Based on davinci_dvevm.h. Original Copyrights follow:
+ *
+ * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * Board
+ */
+#define CONFIG_DRIVER_TI_EMAC
+#define CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT 7
+#define CONFIG_USE_NAND
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_ARM926EJS               /* arm926ejs CPU core */
+#define CONFIG_SOC_DA8XX               /* TI DA8xx SoC */
+#define CONFIG_SOC_DA850               /* TI DA850 SoC */
+#define CONFIG_SYS_CLK_FREQ            clk_get(DAVINCI_ARM_CLKID)
+#define CONFIG_SYS_OSCIN_FREQ          24000000
+#define CONFIG_SYS_TIMERBASE           DAVINCI_TIMER0_BASE
+#define CONFIG_SYS_HZ_CLOCK            clk_get(DAVINCI_AUXCLK_CLKID)
+#define CONFIG_SYS_HZ                  1000
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_DA850_LOWLEVEL
+#define CONFIG_ARCH_CPU_INIT
+#define CONFIG_DA8XX_GPIO
+#define CONFIG_HOSTNAME                enbw_cmc
+#define CONFIG_DISPLAY_CPUINFO
+
+#define MACH_TYPE_ENBW_CMC     3585
+#define CONFIG_MACH_TYPE       MACH_TYPE_ENBW_CMC
+
+/*
+ * Memory Info
+ */
+#define CONFIG_SYS_MALLOC_LEN  (0x10000 + 1*1024*1024) /* malloc() len */
+#define PHYS_SDRAM_1           DAVINCI_DDR_EMIF_DATA_BASE /* DDR Start */
+#define PHYS_SDRAM_1_SIZE      (64 << 20) /* SDRAM size 64MB */
+#define CONFIG_MAX_RAM_BANK_SIZE (512 << 20) /* max size from SPRS586*/
+
+/* memtest start addr */
+#define CONFIG_SYS_MEMTEST_START       (PHYS_SDRAM_1 + 0x2000000)
+
+/* memtest will be run on 16MB */
+#define CONFIG_SYS_MEMTEST_END (PHYS_SDRAM_1 + 0x2000000 + 16*1024*1024)
+
+#define CONFIG_NR_DRAM_BANKS   1 /* we have 1 bank of DRAM */
+#define CONFIG_STACKSIZE       (256*1024) /* regular stack */
+
+/*
+ * Serial Driver info
+ */
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_REG_SIZE    -4      /* NS16550 register size */
+#define CONFIG_SYS_NS16550_COM1        DAVINCI_UART2_BASE /* Base address of UART2 */
+#define CONFIG_SYS_NS16550_CLK clk_get(DAVINCI_UART2_CLKID)
+#define CONFIG_CONS_INDEX      1               /* use UART0 for console */
+#define CONFIG_BAUDRATE                115200          /* Default baud rate */
+#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
+#define CONFIG_SYS_DA850_LPSC_UART     DAVINCI_LPSC_UART2
+/*
+ * I2C Configuration
+ */
+#define CONFIG_HARD_I2C
+#define CONFIG_DRIVER_DAVINCI_I2C
+#define CONFIG_SYS_I2C_SPEED           80000
+#define CONFIG_SYS_I2C_SLAVE           10 /* Bogus, master-only in U-Boot */
+#define CONFIG_SYS_I2C_EXPANDER_ADDR   0x20
+#define CONFIG_CMD_I2C
+
+#define CONFIG_CMD_DTT
+#define CONFIG_DTT_LM75
+#define CONFIG_DTT_SENSORS     {0}     /* Sensor addresses             */
+#define CONFIG_SYS_DTT_MAX_TEMP        70
+#define CONFIG_SYS_DTT_LOW_TEMP        -30
+#define CONFIG_SYS_DTT_HYSTERESIS      3
+
+/*
+ * Flash & Environment
+ */
+#ifdef CONFIG_USE_NAND
+#define CONFIG_NAND_DAVINCI
+#define CONFIG_SYS_NAND_USE_FLASH_BBT
+#define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST
+#define CONFIG_SYS_NAND_PAGE_2K
+#define CONFIG_SYS_NAND_CS             3
+#define CONFIG_SYS_NAND_BASE           DAVINCI_ASYNC_EMIF_DATA_CE3_BASE
+#define CONFIG_SYS_CLE_MASK            0x10
+#define CONFIG_SYS_ALE_MASK            0x8
+#undef CONFIG_SYS_NAND_HW_ECC
+#define CONFIG_SYS_MAX_NAND_DEVICE     1 /* Max number of NAND devices */
+#define NAND_MAX_CHIPS                 1
+
+#define MTDIDS_DEFAULT         "nor0=physmap-flash.0,nand0=davinci_nand.1"
+#define MTDPARTS_DEFAULT                       \
+       "mtdparts="                             \
+               "physmap-flash.0:"              \
+                       "512k(U-Boot),"         \
+                       "64k(env1),"            \
+                       "64k(env2),"            \
+                       "-(rest);"              \
+               "davinci_nand.1:"               \
+                       "128k(dtb),"            \
+                       "3m(kernel),"           \
+                       "4m(rootfs),"           \
+                       "-(userfs)"
+
+
+#define CONFIG_CMD_MTDPARTS
+
+#endif
+
+/*
+ * Network & Ethernet Configuration
+ */
+#ifdef CONFIG_DRIVER_TI_EMAC
+#define CONFIG_MII
+#define CONFIG_BOOTP_DEFAULT
+#define CONFIG_BOOTP_DNS
+#define CONFIG_BOOTP_DNS2
+#define CONFIG_BOOTP_SEND_HOSTNAME
+#define CONFIG_NET_RETRY_COUNT 10
+#define CONFIG_NET_MULTI
+#endif
+
+/*
+ * Flash configuration
+ */
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_FLASH_CFI_MTD
+#define CONFIG_SYS_FLASH_BASE           0x60000000
+#define CONFIG_SYS_FLASH_SIZE           0x01000000
+#define CONFIG_SYS_MAX_FLASH_BANKS      1       /* max num of memory banks */
+#define CONFIG_SYS_FLASH_BANKS_LIST     { CONFIG_SYS_FLASH_BASE }
+#define CONFIG_SYS_MAX_FLASH_SECT       128
+#define CONFIG_FLASH_16BIT              /* Flash is 16-bit */
+
+#define CONFIG_CMD_FLASH
+
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_SYS_MONITOR_LEN 0x80000
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_FLASH_BASE + \
+                                       CONFIG_SYS_MONITOR_LEN)
+#define CONFIG_ENV_SECT_SIZE   (64 << 10)
+#define CONFIG_ENV_SIZE                (16 << 10)      /* 16 KiB */
+#define CONFIG_ENV_ADDR_REDUND (CONFIG_ENV_ADDR + \
+                                       CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_SIZE_REDUND         (CONFIG_ENV_SIZE)
+#undef CONFIG_ENV_IS_IN_NAND
+#define CONFIG_DEFAULT_SETTINGS_ADDR   (CONFIG_ENV_ADDR_REDUND + \
+                                               CONFIG_ENV_SECT_SIZE)
+
+#define xstr(s)        str(s)
+#define str(s) #s
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "u-boot_addr_r=c0000000\0"                                      \
+       "u-boot=" xstr(CONFIG_HOSTNAME) "/u-boot.bin\0"                 \
+       "load=tftp ${u-boot_addr_r} ${u-boot}\0"                        \
+       "update=protect off " xstr(CONFIG_SYS_FLASH_BASE) " +${filesize};"\
+               "erase " xstr(CONFIG_SYS_FLASH_BASE) " +${filesize};"   \
+               "cp.b ${u-boot_addr_r} " xstr(CONFIG_SYS_FLASH_BASE)    \
+               " ${filesize};"                                         \
+               "protect on " xstr(CONFIG_SYS_FLASH_BASE) " +${filesize}\0"\
+       "netdev=eth0\0"                                                 \
+       "rootpath=/opt/eldk-arm/arm\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"                  \
+       "kernel_addr_r=c0700000\0"                                      \
+       "fdt_addr_r=c0600000\0"                                         \
+       "ramdisk_addr_r=c0b00000\0"                                     \
+       "fdt_file=" xstr(CONFIG_HOSTNAME) "/"                           \
+               xstr(CONFIG_HOSTNAME) ".dtb\0"                          \
+       "kernel_file=" xstr(CONFIG_HOSTNAME) "/uImage \0"               \
+       "nand_ld_ramdsk=nand read ${ramdisk_addr_r} 320000 400000\0"    \
+       "nand_ld_kernel=nand read ${kernel_addr_r} 20000 300000\0"      \
+       "nand_ld_fdt=nand read ${fdt_addr_r} 0 2000\0"                  \
+       "load_kernel=tftp ${kernel_addr_r} ${kernel_file}\0"            \
+       "load_fdt=tftp ${fdt_addr_r} ${fdt_file}\0"                     \
+       "load_nand=run nand_ld_ramdsk nand_ld_kernel nand_ld_fdt\0"     \
+       "addcon=setenv bootargs ${bootargs} console=ttyS2,"             \
+               "${baudrate}n8\0"                                       \
+       "net_nfs=run load_fdt load_kernel; "                            \
+               "run nfsargs addip addcon addmtd addmisc;"              \
+               "bootm ${kernel_addr_r} - ${fdt_addr_r}\0"              \
+       "nand_selfnand=run load_nand ramargs addip addcon addmisc;bootm "\
+               "${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}\0"    \
+       "bootcmd=run net_nfs\0"                                         \
+       "machid=e01\0"                                                  \
+       "key_cmd_0=echo key:   0\0"                                     \
+       "key_cmd_1=echo key:   1\0"                                     \
+       "key_cmd_2=echo key:   2\0"                                     \
+       "key_cmd_3=echo key:   3\0"                                     \
+       "key_magic_0=0\0"                                               \
+       "key_magic_1=1\0"                                               \
+       "key_magic_2=2\0"                                               \
+       "key_magic_3=3\0"                                               \
+       "magic_keys=0123\0"                                             \
+       "hwconfig=switch:lan=on,pwl=off\0"                              \
+       "addmtd=setenv bootargs ${bootargs} ${mtdparts}\0"              \
+       "addmisc=setenv bootargs ${bootargs} davinci_mmc.use_dma=0\0"   \
+       "mtdids=" MTDIDS_DEFAULT "\0"                                   \
+       "mtdparts=" MTDPARTS_DEFAULT "\0"                               \
+       "logversion=2\0"                                                \
+       "\0"
+
+/*
+ * U-Boot general configuration
+ */
+#define CONFIG_BOOTFILE                "uImage" /* Boot file name */
+#define CONFIG_SYS_PROMPT      "=> " /* Command Prompt */
+#define CONFIG_SYS_CBSIZE      1024 /* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE      (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
+#define CONFIG_SYS_MAXARGS     16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE /* Boot Args Buffer Size */
+#define CONFIG_SYS_LOAD_ADDR   (PHYS_SDRAM_1 + 0x700000)
+#define CONFIG_VERSION_VARIABLE
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CRC32_VERIFY
+#define CONFIG_MX_CYCLIC
+#define CONFIG_BOOTDELAY       3
+#define CONFIG_HWCONFIG
+#define CONFIG_SHOW_BOOT_PROGRESS
+#define CONFIG_BOARD_LATE_INIT
+
+/*
+ * U-Boot commands
+ */
+#include <config_cmd_default.h>
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_SAVES
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_CACHE
+
+#ifndef CONFIG_DRIVER_TI_EMAC
+#undef CONFIG_CMD_NET
+#undef CONFIG_CMD_DHCP
+#undef CONFIG_CMD_MII
+#undef CONFIG_CMD_PING
+#endif
+
+#ifdef CONFIG_USE_NAND
+#undef CONFIG_CMD_IMLS
+#define CONFIG_CMD_NAND
+
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_DEVICE
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_LZO
+#define CONFIG_RBTREE
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#endif
+
+#if !defined(CONFIG_USE_NAND) && \
+       !defined(CONFIG_USE_NOR) && \
+       !defined(CONFIG_USE_SPIFLASH)
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_SYS_NO_FLASH
+#define CONFIG_ENV_SIZE                (16 << 10)
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_ENV
+#endif
+
+#define CONFIG_SYS_TEXT_BASE           0x60000000
+#define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_SDRAM_BASE          0xc0000000
+#define CONFIG_SYS_INIT_SP_ADDR                (0x8001ff00)
+
+#define CONFIG_VERSION_VARIABLE
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \\\"run flash_nfs\\\" to mount root filesystem over NFS;" \
+       "echo"
+#define CONFIG_MISC_INIT_R
+
+#define CONFIG_CMC_RESET_PIN   0x04000000
+#define CONFIG_CMC_RESET_TIMEOUT       3
+
+#define CONFIG_HW_WATCHDOG
+#define CONFIG_SYS_WDTTIMERBASE                DAVINCI_TIMER1_BASE
+#define CONFIG_SYS_WDT_PERIOD_LOW      0x0c000000
+#define CONFIG_SYS_WDT_PERIOD_HIGH     0x0
+
+#define CONFIG_CMD_DATE
+#define CONFIG_RTC_DAVINCI
+
+/* SD/MMC */
+#define CONFIG_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_DAVINCI_MMC
+#define CONFIG_MMC_MBLOCK
+#define CONFIG_DOS_PARTITION
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_MMC
+
+
+/* FDT support */
+#define CONFIG_OF_LIBFDT
+
+/* LowLevel Init */
+/* PLL */
+#define CONFIG_SYS_DV_CLKMODE          0
+#define CONFIG_SYS_DA850_PLL0_POSTDIV  0
+#define CONFIG_SYS_DA850_PLL0_PLLDIV1  0x8000
+#define CONFIG_SYS_DA850_PLL0_PLLDIV2  0x8001
+#define CONFIG_SYS_DA850_PLL0_PLLDIV3  0x8002 /* 150MHz */
+#define CONFIG_SYS_DA850_PLL0_PLLDIV4  0x8003
+#define CONFIG_SYS_DA850_PLL0_PLLDIV5  0x8002
+#define CONFIG_SYS_DA850_PLL0_PLLDIV6  CONFIG_SYS_DA850_PLL0_PLLDIV1
+#define CONFIG_SYS_DA850_PLL0_PLLDIV7  0x8005
+
+#define CONFIG_SYS_DA850_PLL1_POSTDIV  1
+#define CONFIG_SYS_DA850_PLL1_PLLDIV1  0x8000
+#define CONFIG_SYS_DA850_PLL1_PLLDIV2  0x8001
+#define CONFIG_SYS_DA850_PLL1_PLLDIV3  0x8002
+
+#define CONFIG_SYS_DA850_PLL0_PLLM     18      /* PLL0 -> 456 MHz */
+#define CONFIG_SYS_DA850_PLL1_PLLM     24      /* PLL1 -> 300 MHz */
+
+/* DDR RAM */
+#define CONFIG_SYS_DA850_DDR2_DDRPHYCR (DV_DDR_PHY_PWRDNEN | \
+                       DV_DDR_PHY_EXT_STRBEN   | \
+                       (0x4 << DV_DDR_PHY_RD_LATENCY_SHIFT))
+
+#define CONFIG_SYS_DA850_DDR2_SDBCR (0 | \
+                 (0 << DV_DDR_SDCR_DDR2TERM1_SHIFT) | \
+                 (0 << DV_DDR_SDCR_MSDRAMEN_SHIFT) | \
+                 (1 << DV_DDR_SDCR_DDR2EN_SHIFT) | \
+                 (0x1 << DV_DDR_SDCR_DDREN_SHIFT)      | \
+                 (0x1 << DV_DDR_SDCR_SDRAMEN_SHIFT)    | \
+                 (0x1 << DV_DDR_SDCR_TIMUNLOCK_SHIFT)  | \
+                 (0x1 << DV_DDR_SDCR_BUS_WIDTH_SHIFT)  | \
+                 (0x3 << DV_DDR_SDCR_CL_SHIFT)         | \
+                 (0x2 << DV_DDR_SDCR_IBANK_SHIFT)              | \
+                 (0x2 << DV_DDR_SDCR_PAGESIZE_SHIFT))
+
+#define CONFIG_SYS_DA850_DDR2_SDBCR2 4 /* 13 row address bits */
+
+/*
+ * freq = 150MHz -> t = 7ns
+ */
+#define CONFIG_SYS_DA850_DDR2_SDTIMR (0 | \
+               (0x0d << DV_DDR_SDTMR1_RFC_SHIFT)       | \
+               (1 << DV_DDR_SDTMR1_RP_SHIFT)           | \
+               (1 << DV_DDR_SDTMR1_RCD_SHIFT)          | \
+               (1 << DV_DDR_SDTMR1_WR_SHIFT)           | \
+               (5 << DV_DDR_SDTMR1_RAS_SHIFT)          | \
+               (7 << DV_DDR_SDTMR1_RC_SHIFT)           | \
+               (1 << DV_DDR_SDTMR1_RRD_SHIFT)          | \
+               (readl(&dv_ddr2_regs_ctrl->sdtimr) & 0x4) |  /* Reserved */ \
+               ((2 - 1) << DV_DDR_SDTMR1_WTR_SHIFT))
+
+/*
+ * freq = 150MHz -> t=7ns
+ */
+#define CONFIG_SYS_DA850_DDR2_SDTIMR2 (0 | \
+       (readl(&dv_ddr2_regs_ctrl->sdtimr2) & 0x80000000) | /* Reserved */ \
+       (8 << DV_DDR_SDTMR2_RASMAX_SHIFT)               | \
+       (2 << DV_DDR_SDTMR2_XP_SHIFT)                   | \
+       (0 << DV_DDR_SDTMR2_ODT_SHIFT)                  | \
+       (15 << DV_DDR_SDTMR2_XSNR_SHIFT)                | \
+       (27 << DV_DDR_SDTMR2_XSRD_SHIFT)                | \
+       (0 << DV_DDR_SDTMR2_RTP_SHIFT)                  | \
+       (2 << DV_DDR_SDTMR2_CKE_SHIFT))
+
+#define CONFIG_SYS_DA850_DDR2_SDRCR    0x00000407
+#define CONFIG_SYS_DA850_DDR2_PBBPR    0x30
+#define CONFIG_SYS_DA850_SYSCFG_SUSPSRC (DAVINCI_SYSCFG_SUSPSRC_TIMER0 | \
+                                       DAVINCI_SYSCFG_SUSPSRC_SPI1 | \
+                                       DAVINCI_SYSCFG_SUSPSRC_UART2 | \
+                                       DAVINCI_SYSCFG_SUSPSRC_EMAC |\
+                                       DAVINCI_SYSCFG_SUSPSRC_I2C)
+
+#define CONFIG_SYS_DA850_CS2CFG        (DAVINCI_ABCR_WSETUP(2) | \
+                               DAVINCI_ABCR_WSTROBE(6) | \
+                               DAVINCI_ABCR_WHOLD(1)   | \
+                               DAVINCI_ABCR_RSETUP(2)  | \
+                               DAVINCI_ABCR_RSTROBE(6) | \
+                               DAVINCI_ABCR_RHOLD(1)   | \
+                               DAVINCI_ABCR_ASIZE_16BIT)
+
+#define CONFIG_SYS_DA850_CS3CFG        (DAVINCI_ABCR_WSETUP(1) | \
+                               DAVINCI_ABCR_WSTROBE(2) | \
+                               DAVINCI_ABCR_WHOLD(1)   | \
+                               DAVINCI_ABCR_RSETUP(1)  | \
+                               DAVINCI_ABCR_RSTROBE(6) | \
+                               DAVINCI_ABCR_RHOLD(1)   | \
+                               DAVINCI_ABCR_ASIZE_8BIT)
+
+/*
+ * NOR Bootconfiguration word:
+ * Method: Direc boot
+ * EMIFA access mode: 16 Bit
+ */
+#define CONFIG_SYS_DV_NOR_BOOT_CFG     (0x11)
+
+#define CONFIG_POST    (CONFIG_SYS_POST_MEMORY)
+#define CONFIG_SYS_POST_WORD_ADDR 0x8001FFF0
+#define CONFIG_LOGBUFFER
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+
+#define CONFIG_BOOTCOUNT_LIMIT
+#define CONFIG_SYS_BOOTCOUNT_ADDR      DAVINCI_RTC_BASE
+
+#define CONFIG_SYS_NAND_U_BOOT_DST     0xc0080000
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    0x60004000
+#define CONFIG_SYS_NAND_U_BOOT_SIZE    0x70000
+#define CONFIG_SYS_NAND_U_BOOT_START   CONFIG_SYS_NAND_U_BOOT_DST
+#endif /* __CONFIG_H */
index 38058c7aff1de295fefb03b3f84e0f03d7cece77..3df1faeeef77c472b056a838a91d90d51b5d8d80 100644 (file)
@@ -39,6 +39,7 @@
 #define CONFIG_CMD_FLASH
 #define CONFIG_CMD_MEMORY
 #define CONFIG_CMD_NET
+#define CONFIG_CMD_MII
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_ENV
 #define CONFIG_CMD_NFS
 #define CONFIG_SH_ETHER 1
 #define CONFIG_SH_ETHER_USE_PORT (1)
 #define CONFIG_SH_ETHER_PHY_ADDR (0x00)
+#define CONFIG_PHYLIB
+#define CONFIG_BITBANGMII
+#define CONFIG_BITBANGMII_MULTI
 
 #endif /* __SH7763RDP_H */
diff --git a/include/configs/ethernut5.h b/include/configs/ethernut5.h
new file mode 100644 (file)
index 0000000..f878665
--- /dev/null
@@ -0,0 +1,287 @@
+/*
+ * (C) Copyright 2011
+ * egnite GmbH <info@egnite.de>
+ *
+ * Configuation settings for Ethernut 5 with AT91SAM9XE.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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/hardware.h>
+
+/* The first stage boot loader expects u-boot running at this address. */
+#define CONFIG_SYS_TEXT_BASE   0x27000000      /* 16MB available */
+
+/* The first stage boot loader takes care of low level initialization. */
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+/* Set our official architecture number. */
+#define MACH_TYPE_ETHERNUT5 1971
+#define CONFIG_MACH_TYPE MACH_TYPE_ETHERNUT5
+
+/* CPU information */
+#define CONFIG_ARM926EJS
+#define CONFIG_AT91FAMILY
+#define CONFIG_DISPLAY_CPUINFO         /* Display at console. */
+#define CONFIG_ARCH_CPU_INIT
+
+/* ARM asynchronous clock */
+#define CONFIG_SYS_AT91_SLOW_CLOCK     32768   /* slow clock xtal */
+#define CONFIG_SYS_AT91_MAIN_CLOCK     18432000 /* 18.432 MHz crystal */
+#define CONFIG_SYS_HZ                  1000
+#undef CONFIG_USE_IRQ                  /* Running w/o interrupts */
+
+/* 32kB internal SRAM */
+#define CONFIG_SRAM_BASE       0x00300000 /*AT91SAM9XE_SRAM_BASE */
+#define CONFIG_SRAM_SIZE       (32 << 10)
+#define CONFIG_STACKSIZE       (CONFIG_SRAM_SIZE - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SRAM_BASE + CONFIG_STACKSIZE)
+
+/* 128MB SDRAM in 1 bank */
+#define CONFIG_NR_DRAM_BANKS           1
+#define CONFIG_SYS_SDRAM_BASE          0x20000000
+#define CONFIG_SYS_SDRAM_SIZE          (128 << 20)
+#define CONFIG_SYS_LOAD_ADDR           CONFIG_SYS_SDRAM_BASE
+#define CONFIG_LOADADDR                        CONFIG_SYS_LOAD_ADDR
+#define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + (1 << 20))
+#define CONFIG_SYS_MEMTEST_START       CONFIG_SYS_SDRAM_BASE
+#define CONFIG_SYS_MEMTEST_END         (CONFIG_SYS_TEXT_BASE \
+                                       - CONFIG_SYS_MALLOC_LEN)
+
+/* 512kB on-chip NOR flash */
+# define CONFIG_SYS_MAX_FLASH_BANKS    1
+# define CONFIG_SYS_FLASH_BASE         0x00200000 /* AT91SAM9XE_FLASH_BASE */
+# define CONFIG_AT91_EFLASH
+# define CONFIG_SYS_MAX_FLASH_SECT     32
+# define CONFIG_SYS_FLASH_PROTECTION   /* First stage loader in sector 0 */
+# define CONFIG_EFLASH_PROTSECTORS     1
+
+/* 512kB DataFlash at NPCS0 */
+#define CONFIG_SYS_MAX_DATAFLASH_BANKS 1
+#define CONFIG_HAS_DATAFLASH
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_ATMEL
+#define CONFIG_ATMEL_DATAFLASH_SPI
+#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0    0xC0000000
+#define DATAFLASH_TCSS                 (0x1a << 16)
+#define DATAFLASH_TCHS                 (0x1 << 24)
+
+#define CONFIG_ENV_IS_IN_SPI_FLASH
+#define CONFIG_ENV_OFFSET              0x3DE000
+#define CONFIG_ENV_SECT_SIZE           (132 << 10)
+#define CONFIG_ENV_SIZE                        CONFIG_ENV_SECT_SIZE
+#define CONFIG_ENV_ADDR                        (CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0 \
+                                       + CONFIG_ENV_OFFSET)
+#define CONFIG_SYS_MONITOR_BASE                (CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0 \
+                                       + 0x042000)
+
+/* SPI */
+#define CONFIG_ATMEL_SPI
+#define CONFIG_SYS_SPI_WRITE_TOUT      (5 * CONFIG_SYS_HZ)
+#define AT91_SPI_CLK                   15000000
+
+/* Serial port */
+#define CONFIG_ATMEL_USART
+#define CONFIG_USART3                  /* USART 3 is DBGU */
+#define CONFIG_BAUDRATE                        115200
+#define CONFIG_SYS_BAUDRATE_TABLE      {115200 , 19200, 38400, 57600, 9600 }
+#define CONFIG_USART_BASE              ATMEL_BASE_DBGU
+#define        CONFIG_USART_ID                 ATMEL_ID_SYS
+
+/* Misc. hardware drivers */
+#define CONFIG_AT91_GPIO
+
+/* Command line configuration */
+#include <config_cmd_default.h>
+#undef CONFIG_CMD_BDI
+#undef CONFIG_CMD_FPGA
+#undef CONFIG_CMD_LOADS
+
+#define CONFIG_CMD_JFFS2
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_SPI
+
+#ifdef MINIMAL_LOADER
+#undef CONFIG_CMD_CONSOLE
+#undef CONFIG_CMD_EDITENV
+#undef CONFIG_CMD_IMI
+#undef CONFIG_CMD_ITEST
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_LOADB
+#undef CONFIG_CMD_LOADS
+#undef CONFIG_CMD_NFS
+#undef CONFIG_CMD_SETGETDCR
+#undef CONFIG_CMD_XIMG
+#else
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_BSP
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_CDP
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DNS
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MMC
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_RARP
+#define CONFIG_CMD_REISER
+#define CONFIG_CMD_SAVES
+#define CONFIG_CMD_SETEXPR
+#define CONFIG_CMD_SF
+#define CONFIG_CMD_SNTP
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#define CONFIG_CMD_UNZIP
+#define CONFIG_CMD_USB
+#endif
+
+/* NAND flash */
+#ifdef CONFIG_CMD_NAND
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_SYS_NAND_BASE           0x40000000
+#define CONFIG_SYS_NAND_DBW_8
+#define CONFIG_NAND_ATMEL
+/* our ALE is AD21 */
+#define CONFIG_SYS_NAND_MASK_ALE       (1 << 21)
+/* our CLE is AD22 */
+#define CONFIG_SYS_NAND_MASK_CLE       (1 << 22)
+#define CONFIG_SYS_NAND_ENABLE_PIN     AT91_PIO_PORTC, 14
+#endif
+
+/* JFFS2 */
+#ifdef CONFIG_CMD_JFFS2
+#define CONFIG_MTD_NAND_ECC_JFFS2
+#define CONFIG_JFFS2_CMDLINE
+#define CONFIG_JFFS2_NAND
+#endif
+
+/* Ethernet */
+#define CONFIG_NET_MULTI
+#define CONFIG_NET_RETRY_COUNT         20
+#define CONFIG_MACB
+#define CONFIG_RMII
+#define CONFIG_PHY_ID                  0
+#define CONFIG_MACB_SEARCH_PHY
+
+/* MMC */
+#ifdef CONFIG_CMD_MMC
+#define CONFIG_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_GENERIC_ATMEL_MCI
+#define CONFIG_SYS_MMC_CD_PIN          AT91_PIO_PORTC, 8
+#endif
+
+/* USB */
+#ifdef CONFIG_CMD_USB
+#define CONFIG_USB_ATMEL
+#define CONFIG_USB_OHCI_NEW
+#define CONFIG_SYS_USB_OHCI_CPU_INIT
+#define CONFIG_SYS_USB_OHCI_REGS_BASE  0x00500000
+#define CONFIG_SYS_USB_OHCI_SLOT_NAME  "host"
+#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS     2
+#define CONFIG_USB_STORAGE
+#endif
+
+/* RTC */
+#if defined(CONFIG_CMD_DATE) || defined(CONFIG_CMD_SNTP)
+#define CONFIG_RTC_PCF8563
+#define CONFIG_SYS_I2C_RTC_ADDR                0x51
+#endif
+
+/* I2C */
+#define CONFIG_SYS_MAX_I2C_BUS 1
+#define CONFIG_SYS_I2C_SLAVE   0
+#define CONFIG_SYS_I2C_SPEED   100000
+
+#define CONFIG_SOFT_I2C
+#define I2C_SOFT_DECLARATIONS
+
+#define GPIO_I2C_SCL           AT91_PIO_PORTA, 24
+#define GPIO_I2C_SDA           AT91_PIO_PORTA, 23
+
+#define I2C_INIT { \
+       at91_set_pio_periph(AT91_PIO_PORTA, 23, 0); \
+       at91_set_pio_multi_drive(AT91_PIO_PORTA, 23, 1); \
+       at91_set_pio_periph(AT91_PIO_PORTA, 24, 0); \
+       at91_set_pio_output(AT91_PIO_PORTA, 24, 0); \
+       at91_set_pio_multi_drive(AT91_PIO_PORTA, 24, 1); \
+}
+
+#define I2C_ACTIVE     at91_set_pio_output(AT91_PIO_PORTA, 23, 0)
+#define I2C_TRISTATE   at91_set_pio_input(AT91_PIO_PORTA, 23, 0)
+#define I2C_SCL(bit)   at91_set_pio_value(AT91_PIO_PORTA, 24, bit)
+#define I2C_SDA(bit)   at91_set_pio_value(AT91_PIO_PORTA, 23, bit)
+#define I2C_DELAY      udelay(100)
+#define I2C_READ       at91_get_pio_value(AT91_PIO_PORTA, 23)
+
+/* DHCP/BOOTP options */
+#ifdef CONFIG_CMD_DHCP
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+#define CONFIG_SYS_AUTOLOAD    "n"
+#endif
+
+/* File systems */
+#define CONFIG_MTD_DEVICE
+#define CONFIG_MTD_PARTITIONS
+#if defined(CONFIG_CMD_MTDPARTS) || defined(CONFIG_CMD_NAND)
+#define MTDIDS_DEFAULT         "nand0=atmel_nand"
+#define MTDPARTS_DEFAULT       "mtdparts=atmel_nand:-(root)"
+#endif
+#if defined(CONFIG_CMD_REISER) || defined(CONFIG_CMD_EXT2) || \
+       defined(CONFIG_CMD_USB) || defined(CONFIG_MMC)
+#define CONFIG_DOS_PARTITION
+#endif
+#define CONFIG_LZO
+#define CONFIG_RBTREE
+
+/* Boot command */
+#define CONFIG_BOOTDELAY       3
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+#define CONFIG_BOOTCOMMAND     "cp.b 0xC00C6000 ${loadaddr} 0x294000; bootm"
+#if defined(CONFIG_CMD_NAND)
+#define CONFIG_BOOTARGS                "console=ttyS0,115200 " \
+                               "root=/dev/mtdblock0 " \
+                               MTDPARTS_DEFAULT \
+                               " rw rootfstype=jffs2"
+#endif
+
+/* Misc. u-boot settings */
+#define CONFIG_SYS_PROMPT              "U-Boot> "
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
+#define CONFIG_SYS_CBSIZE              256
+#define CONFIG_SYS_MAXARGS             16
+#define CONFIG_SYS_PBSIZE              (CONFIG_SYS_CBSIZE + 16 \
+                                       + sizeof(CONFIG_SYS_PROMPT))
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CMDLINE_EDITING
+
+#endif
index d88c578a704df9cfe244e924c2dd719760a5c05e..aac3930f0a9af5435ab28b2f7d1ae07a08a96137 100644 (file)
@@ -77,7 +77,7 @@
  * UART (console)
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX35_UART3
+#define CONFIG_MXC_UART_BASE   UART3_BASE
 
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
 
 #define CONFIG_BOOTDELAY       3
 
-#define CONFIG_LOADADDR                0x90800000      /* loadaddr env var */
+#define CONFIG_LOADADDR                0x80800000      /* loadaddr env var */
 
 
 /*
  * Physical Memory Map
  */
 #define CONFIG_NR_DRAM_BANKS   1
-#define PHYS_SDRAM_1           CSD1_BASE_ADDR
+#define PHYS_SDRAM_1           CSD0_BASE_ADDR
 #define PHYS_SDRAM_1_SIZE      (128 * 1024 * 1024)
 
-#define CONFIG_SYS_SDRAM_BASE          CSD1_BASE_ADDR
+#define CONFIG_SYS_SDRAM_BASE          CSD0_BASE_ADDR
 #define CONFIG_SYS_INIT_RAM_ADDR       (IRAM_BASE_ADDR + 0x10000)
 #define CONFIG_SYS_INIT_RAM_SIZE               (IRAM_SIZE / 2)
 #define CONFIG_SYS_GBL_DATA_OFFSET     (CONFIG_SYS_INIT_RAM_SIZE - \
 #define CONFIG_FLASH_CFI_MTD
 #define CONFIG_MTD_PARTITIONS
 #define MTDIDS_DEFAULT         "nand0=mxc_nand,nor0=physmap-flash.0"
-#define MTDPARTS_DEFAULT       "mtdparts=mxc_nand:196m(root1)," \
-                               "196m(root2),-(user);"  \
+#define MTDPARTS_DEFAULT       "mtdparts=mxc_nand:50m(root1)," \
+                               "32m(rootfb)," \
+                               "64m(pcache)," \
+                               "64m(app1)," \
+                               "10m(app2),-(spool);" \
                                "physmap-flash.0:512k(u-boot),64k(env1)," \
                                "64k(env2),3776k(kernel1),3776k(kernel2)"
+
 /*
  * FLASH and environment organization
  */
                "else run addip_sta;fi\0"       \
        "addmtd=setenv bootargs ${bootargs} ${mtdparts}\0"              \
        "addtty=setenv bootargs ${bootargs}"                            \
-               " console=ttymxc0,${baudrate}\0"                        \
+               " console=ttymxc2,${baudrate}\0"                        \
        "addmisc=setenv bootargs ${bootargs} ${misc}\0"                 \
-       "loadaddr=90800000\0"                                           \
-       "kernel_addr_r=90800000\0"                                      \
+       "loadaddr=80800000\0"                                           \
+       "kernel_addr_r=80800000\0"                                      \
        "hostname=" xstr(CONFIG_HOSTNAME) "\0"                          \
        "bootfile=" xstr(CONFIG_HOSTNAME) "/uImage\0"                   \
        "ramdisk_file=" xstr(CONFIG_HOSTNAME) "/uRamdisk\0"             \
index e837f40132800dc3b87eb911dfc683da8b5ea5d4..dd6c41d02cd930f20bfa19263e9ede7a6e462669 100644 (file)
                "bootm ${kernel_addr}\0"                                \
        "flash_self=run ramargs addip;"                                 \
                "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
-       "getkernel=tftpboot \$\(scratch\)\ \$\(bootfile\)\0" \
+       "getkernel=tftpboot $(scratch) $(bootfile)\0" \
        "bootargs=console=ttyS0,38400 root=/dev/nfs rw nfsroot=192.168.0.20:/export/rootfs ip=192.168.0.206:192.168.0.20:192.168.0.1:255.255.255.0:ax2000:eth0\0"
 
 #if CONFIG_LEON_RAM_SELECT == CONFIG_LEON_RAM_SRAM
index 0cddeeef6b72b8140cadc9185eee5e72b8e8f27d..7068ff8bf50e9f15c932b1a32dff105ab0b50de4 100644 (file)
                "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
        "net_nfs=tftp 40000000 ${bootfile};run nfsargs addip;bootm\0"   \
        "scratch=40800000\0"                                    \
-       "getkernel=tftpboot \$\(scratch\)\ \$\(bootfile\)\0" \
+       "getkernel=tftpboot $(scratch) $(bootfile)\0" \
        "bootargs=console=ttyS0,38400 root=/dev/nfs rw nfsroot=192.168.0.20:/export/rootfs ip=192.168.0.207:192.168.0.20:192.168.0.1:255.255.255.0:ml401:eth0\0" \
        ""
 
index 7e8e6f558996c8ad6ac1f064278aa30be8cd4445..50063229b09b92fc59bb0555bd7ceed0f6baacfa 100644 (file)
@@ -91,7 +91,7 @@
                "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
        "net_nfs=tftp 40000000 ${bootfile};run nfsargs addip;bootm\0"   \
        "scratch=40200000\0"                                    \
-       "getkernel=tftpboot \$\(scratch\)\ \$\(bootfile\)\0" \
+       "getkernel=tftpboot $(scratch) $(bootfile)\0" \
        "bootargs=console=ttyS0,38400 root=/dev/nfs rw nfsroot=192.168.0.20:/export/rootfs ip=192.168.0.206:192.168.0.20:192.168.0.1:255.255.255.0:grxc3s1500_daniel:eth0\0" \
        ""
 
index c14749b7e9d1b01a0e95d3088646967317fb64c7..f3639dd685df21e941f14373682f7dba700f9bc8 100644 (file)
        "net_nfs=tftp 40000000 ${bootfile};run nfsargs addip;bootm\0"   \
        "rootpath=/export/roofs\0"                                      \
        "scratch=40000000\0"                                    \
-       "getkernel=tftpboot \$\(scratch\)\ \$\(bootfile\)\0" \
+       "getkernel=tftpboot $(scratch) $(bootfile)\0" \
        "ethaddr=00:00:7A:CC:00:12\0" \
        "bootargs=console=ttyS0,38400" \
        ""
index 88d2aad95fbcedf65533299a0417319771ca4d91..fb9a3f917c4d4f5a75c29c2150756e44d9c24743 100644 (file)
        "net_nfs=tftp 40000000 ${bootfile};run nfsargs addip;bootm\0"   \
        "rootpath=/export/roofs\0"                                      \
        "scratch=40000000\0"                                    \
-       "getkernel=tftpboot \$\(scratch\)\ \$\(bootfile\)\0" \
+       "getkernel=tftpboot $(scratch) $(bootfile)\0" \
        "ethaddr=00:00:7A:CC:00:12\0" \
        "bootargs=console=ttyS0,38400" \
        ""
index 638643a2b237d07720ecc88062fc1707cd1837c8..12acb27aef7e4e68d8d8b3374bd469b99e1fb177 100644 (file)
@@ -34,6 +34,7 @@
 #define CONFIG_MACH_DAVINCI_HAWK
 #define CONFIG_ARM926EJS               /* arm926ejs CPU core */
 #define CONFIG_SOC_DA8XX               /* TI DA8xx SoC */
+#define CONFIG_SOC_DA850               /* TI DA850 SoC */
 #define CONFIG_SYS_CLK_FREQ            clk_get(DAVINCI_ARM_CLKID)
 #define CONFIG_SYS_OSCIN_FREQ          24000000
 #define CONFIG_SYS_TIMERBASE           DAVINCI_TIMER0_BASE
index 279a9d2cc643e7608223e9053542f1e37bb0a4ed..56fd6de231855ff611484044be15732dea3641cb 100644 (file)
@@ -27,7 +27,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_IGEP0020  1       /* working with IGEP0020 */
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 meg */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*
  * FLASH and environment organization
  */
index d85e5ae59fe8c84b21d947eb4e848eb9f36ce59c..36346187f8898048bb02e1dd1325e54d31b01ebf 100644 (file)
@@ -27,7 +27,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_IGEP0030  1       /* working with IGEP0030 */
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 meg */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*
  * FLASH and environment organization
  */
index 6953a800d5b083f5c7bde8807fc42bb8430d6ebd..2af4e7af3144f211aa2a0e1e971ec9eacdb08285 100644 (file)
  * Serial Driver info
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX27_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 #define CONFIG_CONS_INDEX      1               /* use UART0 for console */
 #define CONFIG_BAUDRATE                115200          /* Default baud rate */
 #define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
index 1455ea247a888aa94838154e86a1c01ce4ba8898..bbcbce1200b1256df1acdc3695f4e98d6f2b5a15 100644 (file)
@@ -63,8 +63,8 @@
  * Hardware drivers
  */
 
-#define CONFIG_MXC_UART        1
-#define CONFIG_SYS_MX31_UART1          1
+#define CONFIG_MXC_UART
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 #define CONFIG_MXC_GPIO
 
 #define CONFIG_HARD_SPI                1
index 1b75197c587ec9911d6258d1fb84bcbe75ece15f..3153eb5b396fd94e46153287d6331425373b57c0 100644 (file)
@@ -59,7 +59,7 @@
 #define CONFIG_SYS_I2C_SLAVE           0xfe
 
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX31_UART1
+#define CONFIG_MXC_UART_BASE           UART1_BASE
 
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
diff --git a/include/configs/innokom.h b/include/configs/innokom.h
deleted file mode 100644 (file)
index a0a3da1..0000000
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * (C) Copyright 2000, 2001, 2002
- * Robert Schwebel, Pengutronix, r.schwebel@pengutronix.de.
- *
- * Configuration for the Auerswald Innokom CPU board.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/*
- * include/configs/innokom.h - configuration options, board specific
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-#define CONFIG_PXA250          1       /* This is an PXA250 CPU            */
-#define CONFIG_INNOKOM         1       /* on an Auerswald Innokom board    */
-
-#undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff      */
-                                       /* for timer/console/ethernet       */
-
-#define        CONFIG_SYS_TEXT_BASE    0x0
-
-/* we will never enable dcache, because we have to setup MMU first */
-#define CONFIG_SYS_DCACHE_OFF
-
-/*
- * Hardware drivers
- */
-
-/*
- * select serial console configuration
- */
-#define CONFIG_PXA_SERIAL
-#define CONFIG_FFUART          1       /* we use FFUART on CSB226 */
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE                19200
-#define CONFIG_MISC_INIT_R     1       /* we have a misc_init_r() function */
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-
-#define CONFIG_CMD_ASKENV
-#define CONFIG_CMD_BDI
-#define CONFIG_CMD_CACHE
-#define CONFIG_CMD_DHCP
-#define CONFIG_CMD_ECHO
-#define CONFIG_CMD_SAVEENV
-#define CONFIG_CMD_FLASH
-#define CONFIG_CMD_I2C
-#define CONFIG_CMD_IMI
-#define CONFIG_CMD_LOADB
-#define CONFIG_CMD_MEMORY
-#define CONFIG_CMD_NET
-#define CONFIG_CMD_RUN
-
-
-#define CONFIG_BOOTDELAY       3
-/* #define CONFIG_BOOTARGS     "root=/dev/nfs ip=bootp console=ttyS0,19200" */
-#define CONFIG_BOOTARGS                "console=ttyS0,19200"
-#define CONFIG_ETHADDR         FF:FF:FF:FF:FF:FF
-#define CONFIG_NETMASK         255.255.255.0
-#define CONFIG_IPADDR          192.168.1.56
-#define CONFIG_SERVERIP                192.168.1.2
-#define CONFIG_BOOTCOMMAND     "bootm 0x40000"
-#define CONFIG_SHOW_BOOT_PROGRESS
-
-#define CONFIG_CMDLINE_TAG     1
-
-/*
- * Miscellaneous configurable options
- */
-
-/*
- * Size of malloc() pool
- */
-#define CONFIG_SYS_MALLOC_LEN          (256*1024)
-
-#define CONFIG_SYS_LONGHELP                            /* undef to save memory         */
-#define CONFIG_SYS_PROMPT              "uboot> "       /* Monitor Command Prompt       */
-#define CONFIG_SYS_CBSIZE              256             /* Console I/O Buffer Size      */
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS             16              /* max number of command args   */
-#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE       /* Boot Argument Buffer Size    */
-
-#define CONFIG_SYS_MEMTEST_START       0xa0400000      /* memtest works on     */
-#define CONFIG_SYS_MEMTEST_END         0xa0800000      /* 4 ... 8 MB in DRAM   */
-
-#define CONFIG_SYS_LOAD_ADDR           0xa3000000      /* load kernel to this address   */
-
-#define CONFIG_SYS_HZ                  1000
-                                               /* RS: the oscillator is actually 3680130?? */
-
-#define CONFIG_SYS_CPUSPEED            0x141           /* set core clock to 200/200/100 MHz */
-                                               /* 0101000001 */
-                                               /*      ^^^^^ Memory Speed 99.53 MHz         */
-                                               /*    ^^      Run Mode Speed = 2x Mem Speed  */
-                                               /* ^^         Turbo Mode Sp. = 1x Run M. Sp. */
-
-#define CONFIG_SYS_MONITOR_LEN         0x20000         /* 128 KiB */
-
-                                               /* valid baudrates */
-#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
-
-/*
- * I2C bus
- */
-#define CONFIG_I2C_MV                  1
-#define CONFIG_MV_I2C_REG              0x40301680
-#define CONFIG_HARD_I2C                        1
-#define CONFIG_SYS_I2C_SPEED                   50000
-#define CONFIG_SYS_I2C_SLAVE                   0xfe
-
-#define CONFIG_ENV_IS_IN_EEPROM                1
-
-#define CONFIG_ENV_OFFSET                      0x00    /* environment starts here  */
-#define CONFIG_ENV_SIZE                        1024    /* 1 KiB                    */
-#define CONFIG_SYS_I2C_EEPROM_ADDR             0x50    /* A0 = 0 (hardwired)       */
-#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS      5       /* 5 bits = 32 octets       */
-#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS  15      /* between stop and start   */
-#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN         2       /* length of address        */
-#define CONFIG_SYS_EEPROM_SIZE                 4096    /* size in bytes            */
-#define CONFIG_SYS_I2C_INIT_BOARD              1       /* board has it's own init  */
-
-/*
- * SMSC91C111 Network Card
- */
-#define CONFIG_SMC91111                1
-#define CONFIG_SMC91111_BASE           0x14000000 /* chip select 5         */
-#undef  CONFIG_SMC_USE_32_BIT                     /* 16 bit bus access     */
-#undef  CONFIG_SMC_91111_EXT_PHY                  /* we use internal phy   */
-#define CONFIG_SMC_AUTONEG_TIMEOUT     10         /* timeout 10 seconds    */
-#undef  CONFIG_SHOW_ACTIVITY
-#define CONFIG_NET_RETRY_COUNT         10         /* # of retries          */
-
-/*
- * 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           0xa0000000      /* SDRAM Bank #1            */
-#define PHYS_SDRAM_1_SIZE      0x04000000      /* 64 MB                    */
-
-#define PHYS_FLASH_1           0x00000000      /* Flash Bank #1            */
-#define PHYS_FLASH_SIZE                0x01000000      /* 16 MB                    */
-
-#define CONFIG_SYS_DRAM_BASE           0xa0000000      /* RAM starts here          */
-#define CONFIG_SYS_DRAM_SIZE           0x04000000
-
-#define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
-
-#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
-
-/*
- * JFFS2 partitions
- *
- */
-/* development flash */
-#define CONFIG_MTD_INNOKOM_16MB        1
-#undef CONFIG_MTD_INNOKOM_64MB
-
-/* production flash */
-/*
-#define CONFIG_MTD_INNOKOM_64MB        1
-#undef CONFIG_MTD_INNOKOM_16MB
-*/
-
-/* No command line, one static partition, whole device */
-#undef CONFIG_CMD_MTDPARTS
-#define CONFIG_JFFS2_DEV               "nor0"
-#define CONFIG_JFFS2_PART_SIZE         0xFFFFFFFF
-#define CONFIG_JFFS2_PART_OFFSET       0x00000000
-
-/* mtdparts command line support */
-/* Note: fake mtd_id used, no linux mtd map file */
-/*
-#define CONFIG_CMD_MTDPARTS
-#define MTDIDS_DEFAULT         "nor0=innokom-0"
-*/
-
-/* development flash */
-/*
-#define MTDPARTS_DEFAULT       "mtdparts=innokom-0:256k(uboot),768k(kernel),8m(user),7m(data)"
-*/
-
-/* production flash */
-/*
-#define MTDPARTS_DEFAULT       "mtdparts=innokom-0:256k(uboot),768k(kernel),16256k(user1),16256k(user2),32m(data)"
-*/
-
-/*
- * GPIO settings
- *
- * GP15 == nCS1      is 1
- * GP24 == SFRM      is 1
- * GP25 == TXD       is 1
- * GP33 == nCS5      is 1
- * GP39 == FFTXD     is 1
- * GP41 == RTS       is 1
- * GP47 == TXD       is 1
- * GP49 == nPWE      is 1
- * GP62 == LED_B     is 1
- * GP63 == TDM_OE    is 1
- * GP78 == nCS2      is 1
- * GP79 == nCS3      is 1
- * GP80 == nCS4      is 1
- */
-#define CONFIG_SYS_GPSR0_VAL       0x03008000
-#define CONFIG_SYS_GPSR1_VAL       0xC0028282
-#define CONFIG_SYS_GPSR2_VAL       0x0001C000
-
-/* GP02 == DON_RST   is 0
- * GP23 == SCLK      is 0
- * GP45 == USB_ACT   is 0
- * GP60 == PLLEN     is 0
- * GP61 == LED_A     is 0
- * GP73 == SWUPD_LED is 0
- */
-#define CONFIG_SYS_GPCR0_VAL       0x00800004
-#define CONFIG_SYS_GPCR1_VAL       0x30002000
-#define CONFIG_SYS_GPCR2_VAL       0x00000100
-
-/* GP00 == DON_READY is input
- * GP01 == DON_OK    is input
- * GP02 == DON_RST   is output
- * GP03 == RESET_IND is input
- * GP07 == RES11     is input
- * GP09 == RES12     is input
- * GP11 == SWUPDATE  is input
- * GP14 == nPOWEROK  is input
- * GP15 == nCS1      is output
- * GP17 == RES22     is input
- * GP18 == RDY       is input
- * GP23 == SCLK      is output
- * GP24 == SFRM      is output
- * GP25 == TXD       is output
- * GP26 == RXD       is input
- * GP32 == RES21     is input
- * GP33 == nCS5      is output
- * GP34 == FFRXD     is input
- * GP35 == CTS       is input
- * GP39 == FFTXD     is output
- * GP41 == RTS       is output
- * GP42 == USB_OK    is input
- * GP45 == USB_ACT   is output
- * GP46 == RXD       is input
- * GP47 == TXD       is output
- * GP49 == nPWE      is output
- * GP58 == nCPUBUSINT is input
- * GP59 == LANINT    is input
- * GP60 == PLLEN     is output
- * GP61 == LED_A     is output
- * GP62 == LED_B     is output
- * GP63 == TDM_OE    is output
- * GP64 == nDSPINT   is input
- * GP65 == STRAP0    is input
- * GP67 == STRAP1    is input
- * GP69 == STRAP2    is input
- * GP70 == STRAP3    is input
- * GP71 == STRAP4    is input
- * GP73 == SWUPD_LED is output
- * GP78 == nCS2      is output
- * GP79 == nCS3      is output
- * GP80 == nCS4      is output
- */
-#define CONFIG_SYS_GPDR0_VAL       0x03808004
-#define CONFIG_SYS_GPDR1_VAL       0xF002A282
-#define CONFIG_SYS_GPDR2_VAL       0x0001C200
-
-/* GP15 == nCS1  is AF10
- * GP18 == RDY   is AF01
- * GP23 == SCLK  is AF10
- * GP24 == SFRM  is AF10
- * GP25 == TXD   is AF10
- * GP26 == RXD   is AF01
- * GP33 == nCS5  is AF10
- * GP34 == FFRXD is AF01
- * GP35 == CTS   is AF01
- * GP39 == FFTXD is AF10
- * GP41 == RTS   is AF10
- * GP46 == RXD   is AF10
- * GP47 == TXD   is AF01
- * GP49 == nPWE  is AF10
- * GP78 == nCS2  is AF10
- * GP79 == nCS3  is AF10
- * GP80 == nCS4  is AF10
- */
-#define CONFIG_SYS_GAFR0_L_VAL     0x80000000
-#define CONFIG_SYS_GAFR0_U_VAL     0x001A8010
-#define CONFIG_SYS_GAFR1_L_VAL     0x60088058
-#define CONFIG_SYS_GAFR1_U_VAL     0x00000008
-#define CONFIG_SYS_GAFR2_L_VAL     0xA0000000
-#define CONFIG_SYS_GAFR2_U_VAL     0x00000002
-
-
-/* FIXME: set GPIO_RER/FER */
-
-/* RDH = 1
- * PH  = 1
- * VFS = 1
- * BFS = 1
- * SSS = 1
- */
-#define CONFIG_SYS_PSSR_VAL            0x37
-
-#define        CONFIG_SYS_CCCR                 CCCR_L27|CCCR_M2|CCCR_N10
-#define        CONFIG_SYS_CKEN                 0x0
-
-/*
- * Memory settings
- *
- * This is the configuration for nCS0/1 -> flash banks
- * configuration for nCS1:
- * [31]    0    - Slower Device
- * [30:28] 010  - CS deselect to CS time: 2*(2*MemClk) = 40 ns
- * [27:24] 0101 - Address to data valid in bursts: (5+1)*MemClk = 60 ns
- * [23:20] 1011 - " for first access: (11+2)*MemClk = 130 ns
- * [19]    1    - 16 Bit bus width
- * [18:16] 000  - nonburst RAM or FLASH
- * configuration for nCS0:
- * [15]    0    - Slower Device
- * [14:12] 010  - CS deselect to CS time: 2*(2*MemClk) = 40 ns
- * [11:08] 0101 - Address to data valid in bursts: (5+1)*MemClk = 60 ns
- * [07:04] 1011 - " for first access: (11+2)*MemClk = 130 ns
- * [03]    1    - 16 Bit bus width
- * [02:00] 000  - nonburst RAM or FLASH
- */
-#define CONFIG_SYS_MSC0_VAL            0x25b825b8 /* flash banks                   */
-
-/* This is the configuration for nCS2/3 -> TDM-Switch, DSP
- * configuration for nCS3: DSP
- * [31]    0    - Slower Device
- * [30:28] 001  - RRR3: CS deselect to CS time: 1*(2*MemClk) = 20 ns
- * [27:24] 0010 - RDN3: Address to data valid in bursts: (2+1)*MemClk = 30 ns
- * [23:20] 0011 - RDF3: Address for first access: (3+1)*MemClk = 40 ns
- * [19]    1    - 16 Bit bus width
- * [18:16] 100  - variable latency I/O
- * configuration for nCS2: TDM-Switch
- * [15]    0    - Slower Device
- * [14:12] 101  - RRR2: CS deselect to CS time: 5*(2*MemClk) = 100 ns
- * [11:08] 1001 - RDN2: Address to data valid in bursts: (9+1)*MemClk = 100 ns
- * [07:04] 0011 - RDF2: Address for first access: (3+1)*MemClk = 40 ns
- * [03]    1    - 16 Bit bus width
- * [02:00] 100  - variable latency I/O
- */
-#define CONFIG_SYS_MSC1_VAL            0x123C593C /* TDM switch, DSP               */
-
-/* This is the configuration for nCS4/5 -> ExtBus, LAN Controller
- *
- * configuration for nCS5: LAN Controller
- * [31]    0    - Slower Device
- * [30:28] 001  - RRR5: CS deselect to CS time: 1*(2*MemClk) = 20 ns
- * [27:24] 0010 - RDN5: Address to data valid in bursts: (2+1)*MemClk = 30 ns
- * [23:20] 0011 - RDF5: Address for first access: (3+1)*MemClk = 40 ns
- * [19]    1    - 16 Bit bus width
- * [18:16] 100  - variable latency I/O
- * configuration for nCS4: ExtBus
- * [15]    0    - Slower Device
- * [14:12] 110  - RRR4: CS deselect to CS time: 6*(2*MemClk) = 120 ns
- * [11:08] 1100 - RDN4: Address to data valid in bursts: (12+1)*MemClk = 130 ns
- * [07:04] 1101 - RDF4: Address for first access: 13->(15+1)*MemClk = 160 ns
- * [03]    1    - 16 Bit bus width
- * [02:00] 100  - variable latency I/O
- */
-#define CONFIG_SYS_MSC2_VAL            0x123C6CDC /* extra bus, LAN controller     */
-
-/* MDCNFG: SDRAM Configuration Register
- *
- * [31:29]   000 - reserved
- * [28]      0  - no SA1111 compatiblity mode
- * [27]      0   - latch return data with return clock
- * [26]      0   - alternate addressing for pair 2/3
- * [25:24]   00  - timings
- * [23]      0   - internal banks in lower partition 2/3 (not used)
- * [22:21]   00  - row address bits for partition 2/3 (not used)
- * [20:19]   00  - column address bits for partition 2/3 (not used)
- * [18]      0   - SDRAM partition 2/3 width is 32 bit
- * [17]      0   - SDRAM partition 3 disabled
- * [16]      0   - SDRAM partition 2 disabled
- * [15:13]   000 - reserved
- * [12]      1  - SA1111 compatiblity mode
- * [11]      1   - latch return data with return clock
- * [10]      0   - no alternate addressing for pair 0/1
- * [09:08]   01  - tRP=2*MemClk CL=2 tRCD=2*MemClk tRAS=5*MemClk tRC=8*MemClk
- * [7]       1   - 4 internal banks in lower partition pair
- * [06:05]   10  - 13 row address bits for partition 0/1
- * [04:03]   01  - 9 column address bits for partition 0/1
- * [02]      0   - SDRAM partition 0/1 width is 32 bit
- * [01]      0   - disable SDRAM partition 1
- * [00]      1   - enable  SDRAM partition 0
- */
-/* use the configuration above but disable partition 0 */
-#define CONFIG_SYS_MDCNFG_VAL          0x000019c8
-
-/* MDREFR: SDRAM Refresh Control Register
- *
- * [32:26] 0     - reserved
- * [25]    0     - K2FREE: not free running
- * [24]    0     - K1FREE: not free running
- * [23]    1     - K0FREE: not free running
- * [22]    0     - SLFRSH: self refresh disabled
- * [21]    0     - reserved
- * [20]    0     - APD: no auto power down
- * [19]    0     - K2DB2: SDCLK2 is MemClk
- * [18]    0     - K2RUN: disable SDCLK2
- * [17]    0     - K1DB2: SDCLK1 is MemClk
- * [16]    1     - K1RUN: enable SDCLK1
- * [15]    1     - E1PIN: SDRAM clock enable
- * [14]    1     - K0DB2: SDCLK0 is MemClk
- * [13]    0     - K0RUN: disable SDCLK0
- * [12]    1     - E0PIN: disable SDCKE0
- * [11:00] 000000011000 - (64ms/8192)*MemClkFreq/32 = 24
- */
-#define CONFIG_SYS_MDREFR_VAL          0x0081D018
-
-/* MDMRS: Mode Register Set Configuration Register
- *
- * [31]      0       - reserved
- * [30:23]   00000000- MDMRS2: SDRAM2/3 MRS Value. (not used)
- * [22:20]   000     - MDCL2:  SDRAM2/3 Cas Latency.  (not used)
- * [19]      0       - MDADD2: SDRAM2/3 burst Type. Fixed to sequential.  (not used)
- * [18:16]   010     - MDBL2:  SDRAM2/3 burst Length. Fixed to 4.  (not used)
- * [15]      0       - reserved
- * [14:07]   00000000- MDMRS0: SDRAM0/1 MRS Value.
- * [06:04]   010     - MDCL0:  SDRAM0/1 Cas Latency.
- * [03]      0       - MDADD0: SDRAM0/1 burst Type. Fixed to sequential.
- * [02:00]   010     - MDBL0:  SDRAM0/1 burst Length. Fixed to 4.
- */
-#define CONFIG_SYS_MDMRS_VAL           0x00020022
-
-/*
- * PCMCIA and CF Interfaces
- */
-#define CONFIG_SYS_MECR_VAL            0x00000000
-#define CONFIG_SYS_MCMEM0_VAL          0x00000000
-#define CONFIG_SYS_MCMEM1_VAL          0x00000000
-#define CONFIG_SYS_MCATT0_VAL          0x00000000
-#define CONFIG_SYS_MCATT1_VAL          0x00000000
-#define CONFIG_SYS_MCIO0_VAL           0x00000000
-#define CONFIG_SYS_MCIO1_VAL           0x00000000
-
-#define        CONFIG_SYS_FLYCNFG_VAL          0x00000000
-#define        CONFIG_SYS_SXCNFG_VAL           0x00000000
-
-/*
-#define CSB226_USER_LED0       0x00000008
-#define CSB226_USER_LED1       0x00000010
-#define CSB226_USER_LED2       0x00000020
-*/
-
-/*
- * FLASH and environment organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS     1       /* max number of memory banks       */
-#define CONFIG_SYS_MAX_FLASH_SECT      128     /* max number of sect. on one chip  */
-
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (2*CONFIG_SYS_HZ) /* Timeout for Flash Erase       */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (2*CONFIG_SYS_HZ) /* Timeout for Flash Write       */
-
-#endif  /* __CONFIG_H */
index 61b87618b3e6195d479d9b95d3f93c23141351b4..a1fdbb8140afa6257ef26365c893de355d0a3f8e 100644 (file)
@@ -37,6 +37,7 @@
  * High Level Configuration Options
  * (easy to change)
  */
+#define CONFIG_SYS_TEXT_BASE           0x01000000
 #define CONFIG_SYS_MEMTEST_START       0x100000
 #define CONFIG_SYS_MEMTEST_END         0x10000000
 #define CONFIG_SYS_HZ                  1000
index 7ae34b71b49754da01e9b5e537632086933e21e5..ccbdf44cdeec8837dc272c219d916fbea2290248 100644 (file)
@@ -37,6 +37,7 @@
  * High Level Configuration Options
  * (easy to change)
  */
+#define CONFIG_SYS_TEXT_BASE           0x01000000
 #define CONFIG_SYS_MEMTEST_START       0x100000
 #define CONFIG_SYS_MEMTEST_END         0x10000000
 #define CONFIG_SYS_HZ                  1000
diff --git a/include/configs/io64.h b/include/configs/io64.h
new file mode 100644 (file)
index 0000000..51b2dd1
--- /dev/null
@@ -0,0 +1,566 @@
+/*
+ * (C) Copyright 2011
+ * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.de
+ *
+ * based on kilauea.h
+ * by Stefan Roese, DENX Software Engineering, sr@denx.de.
+ * and Grant Erickson <gerickson@nuovations.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
+ */
+
+/************************************************************************
+ * io64.h - configuration for Guntermann & Drunck Io64 (405EX)
+ ***********************************************************************/
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_IO64            1               /* Board is Io64 */
+#define CONFIG_4xx             1               /* ... PPC4xx family */
+#define CONFIG_405EX           1               /* Specifc 405EX support*/
+#define CONFIG_SYS_CLK_FREQ    33333333        /* ext frequency to pll */
+
+#ifndef CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_TEXT_BASE   0xFFFA0000
+#endif
+
+/*
+ * CHIP_21 errata
+ */
+#define CONFIG_SYS_4xx_CHIP_21_405EX_SECURITY
+
+/*
+ * Include common defines/options for all AMCC eval boards
+ */
+#define CONFIG_HOSTNAME                io64
+#define CONFIG_IDENT_STRING    " io64 0.01"
+#include "amcc-common.h"
+
+#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_BOARD_EARLY_INIT_R
+#define CONFIG_MISC_INIT_R
+#define CONFIG_LAST_STAGE_INIT
+
+#undef CONFIG_ZERO_BOOTDELAY_CHECK     /* ignore keypress on bootdelay==0 */
+#define CONFIG_AUTOBOOT_KEYED          /* use key strings to stop autoboot */
+#define CONFIG_AUTOBOOT_STOP_STR " "
+
+/* new uImage format support */
+#define CONFIG_FIT
+#define CONFIG_FIT_VERBOSE
+
+/*-----------------------------------------------------------------------
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_FLASH_BASE          0xFC000000
+#define CONFIG_SYS_NVRAM_BASE          0xF0000000
+#define CONFIG_SYS_FPGA0_BASE          0xF0100000
+#define CONFIG_SYS_FPGA1_BASE          0xF0108000
+#define CONFIG_SYS_LATCH_BASE          0xF0200000
+
+/*-----------------------------------------------------------------------
+ * Initial RAM & Stack Pointer Configuration Options
+ *
+ *   There are traditionally three options for the primordial
+ *   (i.e. initial) stack usage on the 405-series:
+ *
+ *      1) On-chip Memory (OCM) (i.e. SRAM)
+ *      2) Data cache
+ *      3) SDRAM
+ *
+ *   For the 405EX(r), there is no OCM, so we are left with (2) or (3)
+ *   the latter of which is less than desireable since it requires
+ *   setting up the SDRAM and ECC in assembly code.
+ *
+ *   To use (2), define 'CONFIG_SYS_INIT_DCACHE_CS' to be an unused chip
+ *   select on the External Bus Controller (EBC) and then select a
+ *   value for 'CONFIG_SYS_INIT_RAM_ADDR' outside of the range of valid,
+ *   physical SDRAM. Otherwise, undefine 'CONFIG_SYS_INIT_DCACHE_CS' and
+ *   select a value for 'CONFIG_SYS_INIT_RAM_ADDR' within the range of valid,
+ *   physical SDRAM to use (3).
+ *-----------------------------------------------------------------------*/
+
+#define CONFIG_SYS_INIT_DCACHE_CS      4
+
+#if defined(CONFIG_SYS_INIT_DCACHE_CS)
+#define CONFIG_SYS_INIT_RAM_ADDR \
+       (CONFIG_SYS_SDRAM_BASE + (1 << 30))     /*  1 GiB */
+#else
+#define CONFIG_SYS_INIT_RAM_ADDR \
+       (CONFIG_SYS_SDRAM_BASE + (32 << 20))    /* 32 MiB */
+#endif /* defined(CONFIG_SYS_INIT_DCACHE_CS) */
+
+#define CONFIG_SYS_INIT_RAM_SIZE \
+       (4 << 10)                               /*  4 KiB */
+#define CONFIG_SYS_GBL_DATA_OFFSET \
+       (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
+
+/*
+ * If the data cache is being used for the primordial stack and global
+ * data area, the POST word must be placed somewhere else. The General
+ * Purpose Timer (GPT) is unused by u-boot and the kernel and preserves
+ * its compare and mask register contents across reset, so it is used
+ * for the POST word.
+ */
+
+#if defined(CONFIG_SYS_INIT_DCACHE_CS)
+# define CONFIG_SYS_INIT_SP_OFFSET     CONFIG_SYS_GBL_DATA_OFFSET
+# define CONFIG_SYS_POST_WORD_ADDR \
+       (CONFIG_SYS_PERIPHERAL_BASE + GPT0_COMP6)
+#else
+# define CONFIG_SYS_INIT_EXTRA_SIZE    16
+# define CONFIG_SYS_INIT_SP_OFFSET \
+       (CONFIG_SYS_GBL_DATA_OFFSET - CONFIG_SYS_INIT_EXTRA_SIZE)
+# define CONFIG_SYS_OCM_DATA_ADDR      CONFIG_SYS_INIT_RAM_ADDR
+#endif /* defined(CONFIG_SYS_INIT_DCACHE_CS) */
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#define CONFIG_CONS_INDEX      1       /* Use UART0 */
+#define CONFIG_SYS_BASE_BAUD   691200
+
+/*-----------------------------------------------------------------------
+ * Environment
+ *----------------------------------------------------------------------*/
+#define CONFIG_ENV_IS_IN_FLASH 1       /* use FLASH for environment vars */
+
+/*-----------------------------------------------------------------------
+ * FLASH related
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_FLASH_CFI           /* The flash is CFI compatible */
+#define CONFIG_FLASH_CFI_DRIVER                /* Use common CFI driver */
+
+#define CONFIG_SYS_FLASH_BANKS_LIST    {CONFIG_SYS_FLASH_BASE}
+#define CONFIG_SYS_MAX_FLASH_BANKS     1
+#define CONFIG_SYS_MAX_FLASH_SECT      512
+
+#define CONFIG_SYS_FLASH_ERASE_TOUT    120000
+#define CONFIG_SYS_FLASH_WRITE_TOUT    500
+
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
+#define CONFIG_SYS_FLASH_EMPTY_INFO
+
+#ifdef CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_SECT_SIZE   0x20000 /* size of one complete sector */
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_MONITOR_BASE-CONFIG_ENV_SECT_SIZE)
+#define        CONFIG_ENV_SIZE         0x4000  /* Total Size of Environment Sector */
+
+/* Address and size of Redundant Environment Sector */
+#define CONFIG_ENV_ADDR_REDUND (CONFIG_ENV_ADDR-CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_SIZE_REDUND (CONFIG_ENV_SIZE)
+#endif /* CONFIG_ENV_IS_IN_FLASH */
+
+/* Gbit PHYs */
+#define CONFIG_BITBANGMII              /* bit-bang MII PHY management */
+#define CONFIG_BITBANGMII_MULTI
+
+#define CONFIG_SYS_MDIO_PIN  (0x80000000 >> 12)        /* MDIO is GPIO12 */
+#define CONFIG_SYS_MDC_PIN   (0x80000000 >> 13)        /* MDC  is GPIO13 */
+
+#define CONFIG_SYS_GBIT_MII_BUSNAME    "io_miiphy0"
+
+#define CONFIG_SYS_MDIO1_PIN  (0x80000000 >> 2)        /* MDIO is GPIO2 */
+#define CONFIG_SYS_MDC1_PIN   (0x80000000 >> 3)        /* MDC  is GPIO3 */
+
+#define CONFIG_SYS_GBIT_MII1_BUSNAME   "io_miiphy1"
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_MBYTES_SDRAM        (128)   /* 128MB */
+
+/*
+ * CONFIG_PPC4xx_DDR_AUTOCALIBRATION
+ *
+ * Note: DDR Autocalibration Method_A scans the full range of possible PPC4xx
+ *       SDRAM Controller DDR autocalibration values and takes a lot longer
+ *       to run than Method_B.
+ * (See the Method_A and Method_B algorithm discription in the file:
+ *     arch/powerpc/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c)
+ * Define CONFIG_PPC4xx_DDR_METHOD_A to use DDR autocalibration Method_A
+ *
+ * DDR Autocalibration Method_B is the default.
+ */
+#define        CONFIG_PPC4xx_DDR_AUTOCALIBRATION
+#define        DEBUG_PPC4xx_DDR_AUTOCALIBRATION
+#undef CONFIG_PPC4xx_DDR_METHOD_A
+
+#define        CONFIG_SYS_SDRAM0_MB0CF_BASE    ((0 << 20) + CONFIG_SYS_SDRAM_BASE)
+
+/* DDR1/2 SDRAM Device Control Register Data Values */
+#define CONFIG_SYS_SDRAM0_MB0CF        ((CONFIG_SYS_SDRAM0_MB0CF_BASE >> 3) | \
+                                SDRAM_RXBAS_SDSZ_128MB | \
+                                SDRAM_RXBAS_SDAM_MODE2 | \
+                                SDRAM_RXBAS_SDBE_ENABLE)
+#define CONFIG_SYS_SDRAM0_MB1CF        SDRAM_RXBAS_SDBE_DISABLE
+#define CONFIG_SYS_SDRAM0_MB2CF        SDRAM_RXBAS_SDBE_DISABLE
+#define CONFIG_SYS_SDRAM0_MB3CF        SDRAM_RXBAS_SDBE_DISABLE
+#define CONFIG_SYS_SDRAM0_MCOPT1       (SDRAM_MCOPT1_PMU_OPEN | \
+                                SDRAM_MCOPT1_4_BANKS | \
+                                SDRAM_MCOPT1_DDR2_TYPE | \
+                                SDRAM_MCOPT1_QDEP | \
+                                SDRAM_MCOPT1_DCOO_DISABLED)
+#define CONFIG_SYS_SDRAM0_MCOPT2       0x00000000
+#define CONFIG_SYS_SDRAM0_MODT0        (SDRAM_MODT_EB0W_ENABLE | \
+                                SDRAM_MODT_EB0R_ENABLE)
+#define CONFIG_SYS_SDRAM0_MODT1        0x00000000
+#define CONFIG_SYS_SDRAM0_CODT         (SDRAM_CODT_RK0R_ON | \
+                                SDRAM_CODT_CKLZ_36OHM | \
+                                SDRAM_CODT_DQS_1_8_V_DDR2 | \
+                                SDRAM_CODT_IO_NMODE)
+#define CONFIG_SYS_SDRAM0_RTR          SDRAM_RTR_RINT_ENCODE(1560)
+#define CONFIG_SYS_SDRAM0_INITPLR0     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(80) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_NOP))
+#define CONFIG_SYS_SDRAM0_INITPLR1     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(3) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_PRECHARGE) | \
+               SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR) | \
+               SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_PRECHARGE_ALL))
+#define CONFIG_SYS_SDRAM0_INITPLR2     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(2) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \
+               SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR2) | \
+               SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR2_TEMP_COMMERCIAL))
+#define CONFIG_SYS_SDRAM0_INITPLR3     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(2) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \
+               SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR3) | \
+               SDRAM_INITPLR_IMA_ENCODE(0))
+#define CONFIG_SYS_SDRAM0_INITPLR4     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(2) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \
+               SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR) | \
+               SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_DQS_DISABLE | \
+                                        JEDEC_MA_EMR_RTT_75OHM))
+#define CONFIG_SYS_SDRAM0_INITPLR5     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(2) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \
+               SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR) | \
+               SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_MR_WR_DDR2_3_CYC | \
+                                        JEDEC_MA_MR_CL_DDR2_5_0_CLK | \
+                                        JEDEC_MA_MR_BLEN_4 | \
+                                        JEDEC_MA_MR_DLL_RESET))
+#define CONFIG_SYS_SDRAM0_INITPLR6     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(3) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_PRECHARGE) | \
+               SDRAM_INITPLR_IBA_ENCODE(0x0) | \
+               SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_PRECHARGE_ALL))
+#define CONFIG_SYS_SDRAM0_INITPLR7     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(26) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH))
+#define CONFIG_SYS_SDRAM0_INITPLR8     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(26) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH))
+#define CONFIG_SYS_SDRAM0_INITPLR9     (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(26) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH))
+#define CONFIG_SYS_SDRAM0_INITPLR10    (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(26) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH))
+#define CONFIG_SYS_SDRAM0_INITPLR11    (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(2) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \
+               SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR) | \
+               SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_MR_WR_DDR2_3_CYC | \
+                                        JEDEC_MA_MR_CL_DDR2_5_0_CLK | \
+                                        JEDEC_MA_MR_BLEN_4))
+#define CONFIG_SYS_SDRAM0_INITPLR12    (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(2) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \
+               SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR) | \
+               SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_OCD_ENTER | \
+                                        JEDEC_MA_EMR_RDQS_DISABLE | \
+                                        JEDEC_MA_EMR_DQS_DISABLE | \
+                                        JEDEC_MA_EMR_RTT_DISABLED | \
+                                        JEDEC_MA_EMR_ODS_NORMAL))
+#define CONFIG_SYS_SDRAM0_INITPLR13    (SDRAM_INITPLR_ENABLE | \
+               SDRAM_INITPLR_IMWT_ENCODE(2) | \
+               SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \
+               SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR) | \
+               SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_OCD_EXIT | \
+                                        JEDEC_MA_EMR_RDQS_DISABLE | \
+                                        JEDEC_MA_EMR_DQS_DISABLE | \
+                                        JEDEC_MA_EMR_RTT_DISABLED | \
+                                        JEDEC_MA_EMR_ODS_NORMAL))
+#define CONFIG_SYS_SDRAM0_INITPLR14    (SDRAM_INITPLR_DISABLE)
+#define CONFIG_SYS_SDRAM0_INITPLR15    (SDRAM_INITPLR_DISABLE)
+#define CONFIG_SYS_SDRAM0_RQDC         (SDRAM_RQDC_RQDE_ENABLE | \
+                                SDRAM_RQDC_RQFD_ENCODE(56))
+#define CONFIG_SYS_SDRAM0_RFDC         SDRAM_RFDC_RFFD_ENCODE(521)
+#define CONFIG_SYS_SDRAM0_RDCC         (SDRAM_RDCC_RDSS_T2)
+#define CONFIG_SYS_SDRAM0_DLCR         (SDRAM_DLCR_DCLM_AUTO | \
+                                SDRAM_DLCR_DLCS_CONT_DONE | \
+                                SDRAM_DLCR_DLCV_ENCODE(165))
+#define CONFIG_SYS_SDRAM0_CLKTR        (SDRAM_CLKTR_CLKP_180_DEG_ADV)
+#define CONFIG_SYS_SDRAM0_WRDTR        0x00000000
+#define CONFIG_SYS_SDRAM0_SDTR1        (SDRAM_SDTR1_LDOF_2_CLK | \
+                                SDRAM_SDTR1_RTW_2_CLK | \
+                                SDRAM_SDTR1_WTWO_1_CLK | \
+                                SDRAM_SDTR1_RTRO_1_CLK)
+#define CONFIG_SYS_SDRAM0_SDTR2        (SDRAM_SDTR2_RCD_3_CLK | \
+                                SDRAM_SDTR2_WTR_2_CLK | \
+                                SDRAM_SDTR2_XSNR_32_CLK | \
+                                SDRAM_SDTR2_WPC_4_CLK | \
+                                SDRAM_SDTR2_RPC_2_CLK | \
+                                SDRAM_SDTR2_RP_3_CLK | \
+                                SDRAM_SDTR2_RRD_2_CLK)
+#define CONFIG_SYS_SDRAM0_SDTR3        (SDRAM_SDTR3_RAS_ENCODE(9) | \
+                                SDRAM_SDTR3_RC_ENCODE(12) | \
+                                SDRAM_SDTR3_XCS | \
+                                SDRAM_SDTR3_RFC_ENCODE(21))
+#define CONFIG_SYS_SDRAM0_MMODE        (SDRAM_MMODE_WR_DDR2_3_CYC | \
+                                SDRAM_MMODE_DCL_DDR2_5_0_CLK | \
+                                SDRAM_MMODE_BLEN_4)
+#define CONFIG_SYS_SDRAM0_MEMODE       (SDRAM_MEMODE_DQS_DISABLE | \
+                                SDRAM_MEMODE_RTT_75OHM)
+
+/*-----------------------------------------------------------------------
+ * I2C
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_I2C_SPEED   400000  /* I2C speed and slave address */
+
+#define CONFIG_PCA9698         1       /* NXP PCA9698 */
+
+#define CONFIG_SYS_I2C_EEPROM_ADDR     0x52    /* I2C boot EEPROM (24C02BN) */
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1       /* Bytes of address */
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS      3
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS  10
+
+/* I2C bootstrap EEPROM */
+#define CONFIG_4xx_CONFIG_I2C_EEPROM_ADDR      0x54
+#define CONFIG_4xx_CONFIG_I2C_EEPROM_OFFSET    0
+#define CONFIG_4xx_CONFIG_BLOCKSIZE            16
+
+/* Temp sensor/hwmon/dtt */
+#define CONFIG_DTT_LM63                1       /* National LM63 */
+#define CONFIG_DTT_SENSORS     { 0x18, 0x4c, 0x4e }    /* Sensor addresses */
+#define CONFIG_DTT_PWM_LOOKUPTABLE     \
+               { { 40, 10 }, { 43, 13 }, { 46, 16 },  \
+                 { 50, 20 }, { 53, 27 }, { 56, 34 }, { 60, 40 } }
+#define CONFIG_DTT_TACH_LIMIT  0xa10
+
+/*-----------------------------------------------------------------------
+ * Ethernet
+ *----------------------------------------------------------------------*/
+#define CONFIG_M88E1111_PHY    1
+#define CONFIG_IBM_EMAC4_V4    1
+#define CONFIG_EMAC_PHY_MODE   EMAC_PHY_MODE_RGMII_RGMII
+#define CONFIG_PHY_ADDR                0x12    /* PHY address, See schematics */
+
+#define CONFIG_PHY_RESET       1       /* reset phy upon startup */
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#define CONFIG_HAS_ETH0                1
+
+#define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
+#define CONFIG_PHY1_ADDR       0x13
+
+/* Debug messages for the DDR autocalibration */
+#define CONFIG_AUTOCALIB               "silent\0"
+
+/*
+ * Default environment variables
+ */
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       CONFIG_AMCC_DEF_ENV                                             \
+       CONFIG_AMCC_DEF_ENV_POWERPC                                     \
+       CONFIG_AMCC_DEF_ENV_PPC_OLD                                     \
+       CONFIG_AMCC_DEF_ENV_NOR_UPD                                     \
+       "logversion=2\0"                                                \
+       "kernel_addr=fc000000\0"                                        \
+       "fdt_addr=fc1e0000\0"                                           \
+       "ramdisk_addr=fc200000\0"                                       \
+       "pciconfighost=1\0"                                             \
+       "pcie_mode=RP:RP\0"                                             \
+       ""
+
+/*
+ * Commands additional to the ones defined in amcc-common.h
+ */
+#define CONFIG_CMD_CHIP_CONFIG
+#define CONFIG_CMD_DTT
+
+#define CONFIG_SYS_POST_MEMORY_ON      CONFIG_SYS_POST_MEMORY
+
+/* POST support */
+#define CONFIG_POST            (CONFIG_SYS_POST_CACHE          | \
+                                CONFIG_SYS_POST_CPU            | \
+                                CONFIG_SYS_POST_ETHER          | \
+                                CONFIG_SYS_POST_I2C            | \
+                                CONFIG_SYS_POST_MEMORY_ON      | \
+                                CONFIG_SYS_POST_UART)
+
+/* Define here the base-addresses of the UARTs to test in POST */
+#define CONFIG_SYS_POST_UART_TABLE     { CONFIG_SYS_NS16550_COM1, \
+                       CONFIG_SYS_NS16550_COM2 }
+
+#define CONFIG_LOGBUFFER
+#define CONFIG_SYS_POST_CACHE_ADDR     0x00800000 /* free virtual address */
+
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ *----------------------------------------------------------------------*/
+
+/* Memory Bank 0 (NOR-flash) */
+#define CONFIG_SYS_EBC_PB0AP   (EBC_BXAP_BME_DISABLED          |       \
+                                EBC_BXAP_TWT_ENCODE(11)        |       \
+                                EBC_BXAP_BCE_DISABLE           |       \
+                                EBC_BXAP_BCT_2TRANS            |       \
+                                EBC_BXAP_CSN_ENCODE(0)         |       \
+                                EBC_BXAP_OEN_ENCODE(0)         |       \
+                                EBC_BXAP_WBN_ENCODE(1)         |       \
+                                EBC_BXAP_WBF_ENCODE(2)         |       \
+                                EBC_BXAP_TH_ENCODE(2)          |       \
+                                EBC_BXAP_RE_DISABLED           |       \
+                                EBC_BXAP_SOR_NONDELAYED        |       \
+                                EBC_BXAP_BEM_WRITEONLY         |       \
+                                EBC_BXAP_PEN_DISABLED)
+#define CONFIG_SYS_EBC_PB0CR   (EBC_BXCR_BAS_ENCODE(CONFIG_SYS_FLASH_BASE) | \
+                                EBC_BXCR_BS_64MB               |       \
+                                EBC_BXCR_BU_RW                 |       \
+                                EBC_BXCR_BW_16BIT)
+
+/* Memory Bank 1 (NVRAM/Uart) */
+#define CONFIG_SYS_EBC_PB1AP   (EBC_BXAP_BME_ENABLED           |       \
+                                EBC_BXAP_FWT_ENCODE(8)         |       \
+                                EBC_BXAP_BWT_ENCODE(4)         |       \
+                                EBC_BXAP_BCE_DISABLE           |       \
+                                EBC_BXAP_BCT_2TRANS            |       \
+                                EBC_BXAP_CSN_ENCODE(0)         |       \
+                                EBC_BXAP_OEN_ENCODE(1)         |       \
+                                EBC_BXAP_WBN_ENCODE(1)         |       \
+                                EBC_BXAP_WBF_ENCODE(1)         |       \
+                                EBC_BXAP_TH_ENCODE(2)          |       \
+                                EBC_BXAP_RE_DISABLED           |       \
+                                EBC_BXAP_SOR_NONDELAYED        |       \
+                                EBC_BXAP_BEM_WRITEONLY         |       \
+                                EBC_BXAP_PEN_DISABLED)
+#define CONFIG_SYS_EBC_PB1CR   (EBC_BXCR_BAS_ENCODE(CONFIG_SYS_NVRAM_BASE) | \
+                                EBC_BXCR_BS_1MB                |       \
+                                EBC_BXCR_BU_RW                 |       \
+                                EBC_BXCR_BW_8BIT)
+
+/* Memory Bank 2 (FPGA) */
+#define CONFIG_SYS_EBC_PB2AP   (EBC_BXAP_BME_DISABLED          |       \
+                                EBC_BXAP_TWT_ENCODE(5)         |       \
+                                EBC_BXAP_BCE_DISABLE           |       \
+                                EBC_BXAP_BCT_2TRANS            |       \
+                                EBC_BXAP_CSN_ENCODE(0)         |       \
+                                EBC_BXAP_OEN_ENCODE(2)         |       \
+                                EBC_BXAP_WBN_ENCODE(1)         |       \
+                                EBC_BXAP_WBF_ENCODE(1)         |       \
+                                EBC_BXAP_TH_ENCODE(0)          |       \
+                                EBC_BXAP_RE_DISABLED           |       \
+                                EBC_BXAP_SOR_NONDELAYED        |       \
+                                EBC_BXAP_BEM_WRITEONLY         |       \
+                                EBC_BXAP_PEN_DISABLED)
+#define CONFIG_SYS_EBC_PB2CR   (EBC_BXCR_BAS_ENCODE(CONFIG_SYS_FPGA0_BASE) | \
+                                EBC_BXCR_BS_1MB                |       \
+                                EBC_BXCR_BU_RW                 |       \
+                                EBC_BXCR_BW_16BIT)
+
+/* Memory Bank 3 (Latches) */
+#define CONFIG_SYS_EBC_PB3AP   (EBC_BXAP_BME_ENABLED           |       \
+                                EBC_BXAP_FWT_ENCODE(8)         |       \
+                                EBC_BXAP_BWT_ENCODE(4)         |       \
+                                EBC_BXAP_BCE_DISABLE           |       \
+                                EBC_BXAP_BCT_2TRANS            |       \
+                                EBC_BXAP_CSN_ENCODE(0)         |       \
+                                EBC_BXAP_OEN_ENCODE(1)         |       \
+                                EBC_BXAP_WBN_ENCODE(1)         |       \
+                                EBC_BXAP_WBF_ENCODE(1)         |       \
+                                EBC_BXAP_TH_ENCODE(2)          |       \
+                                EBC_BXAP_RE_DISABLED           |       \
+                                EBC_BXAP_SOR_NONDELAYED        |       \
+                                EBC_BXAP_BEM_WRITEONLY         |       \
+                                EBC_BXAP_PEN_DISABLED)
+#define CONFIG_SYS_EBC_PB3CR   (EBC_BXCR_BAS_ENCODE(CONFIG_SYS_LATCH_BASE) | \
+                                EBC_BXCR_BS_1MB                |       \
+                                EBC_BXCR_BU_RW                 |       \
+                                EBC_BXCR_BW_16BIT)
+
+/* EBC peripherals */
+
+#define CONFIG_SYS_FPGA_BASE(k) \
+       (k ? CONFIG_SYS_FPGA1_BASE : CONFIG_SYS_FPGA0_BASE)
+
+#define CONFIG_SYS_FPGA_DONE(k) \
+       (k ? 0x0040 : 0x0080)
+
+#define CONFIG_SYS_FPGA_COUNT          2
+
+#define CONFIG_SYS_LATCH0_RESET                0xffff
+#define CONFIG_SYS_LATCH0_BOOT         0xffff
+#define CONFIG_SYS_LATCH1_RESET                0xffbf
+#define CONFIG_SYS_LATCH1_BOOT         0xffff
+
+/*-----------------------------------------------------------------------
+ * GPIO Setup
+ *----------------------------------------------------------------------*/
+#define CONFIG_SYS_4xx_GPIO_TABLE { /*   Out           GPIO */ \
+{ \
+/* GPIO Core 0 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO0 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO1 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO2 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO3 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO4 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO5 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO6 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO7 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO8 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO9 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO10 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO11 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO12 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO13 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO14 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO15 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0     }, /* GPIO16 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0     }, /* GPIO17 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0     }, /* GPIO18 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO19 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_0     }, /* GPIO20 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0     }, /* GPIO21 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO22 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO23 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0     }, /* GPIO24 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT3, GPIO_OUT_0     }, /* GPIO25 */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO26 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0     }, /* GPIO27 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0     }, /* GPIO28 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0     }, /* GPIO29 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0     }, /* GPIO30 */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0     }, /* GPIO31 */ \
+} \
+}
+
+#define CONFIG_SYS_GPIO_STARTUP_FINISHED       15
+#define CONFIG_SYS_GPIO_STARTUP_FINISHED_N     14
+
+#endif /* __CONFIG_H */
similarity index 88%
rename from include/configs/netspace_v2.h
rename to include/configs/lacie_kw.h
index bb27ed76486909512543b4bf4dbb1fc78d0fcd8d..6cbc752fbd93d7c186f91917a9517db37b284e2f 100644 (file)
@@ -15,8 +15,8 @@
  * GNU General Public License for more details.
  */
 
-#ifndef _CONFIG_NETSPACE_V2_H
-#define _CONFIG_NETSPACE_V2_H
+#ifndef _CONFIG_LACIE_KW_H
+#define _CONFIG_LACIE_KW_H
 
 /*
  * Machine number definition
@@ -30,6 +30,9 @@
 #elif defined(CONFIG_NETSPACE_MAX_V2)
 #define CONFIG_MACH_TYPE               MACH_TYPE_NETSPACE_MAX_V2
 #define CONFIG_IDENT_STRING            " NS Max v2"
+#elif defined(CONFIG_NET2BIG_V2)
+#define CONFIG_MACH_TYPE               MACH_TYPE_NET2BIG_V2
+#define CONFIG_IDENT_STRING            " 2Big v2"
 #else
 #error "Unknown board"
 #endif
 #define CONFIG_CMD_USB
 
 /*
- * Core clock definition.
+ * Core clock definition
  */
 #define CONFIG_SYS_TCLK                        166000000 /* 166MHz */
 
+/*
+ * SDRAM configuration
+ */
+#if defined(CONFIG_NET2BIG_V2)
+#define CONFIG_NR_DRAM_BANKS           2
+#else
 #define CONFIG_NR_DRAM_BANKS           1
+#endif
+
 #ifdef CONFIG_INETSPACE_V2
 /* Different SDRAM configuration and size for Internet Space v2 */
 #define CONFIG_SYS_KWD_CONFIG ($(SRCTREE)/$(CONFIG_BOARDDIR)/kwbimage-is2.cfg)
 #define CONFIG_ENV_SPI_MAX_HZ           20000000 /* 20Mhz */
 #define CONFIG_SYS_IDE_MAXBUS           1
 #define CONFIG_SYS_IDE_MAXDEVICE        1
+#if defined(CONFIG_NET2BIG_V2)
+#define CONFIG_SYS_PROMPT              "2big2> "
+#else
 #define CONFIG_SYS_PROMPT              "ns2> "
+#endif
 
 /*
  * Ethernet Driver configuration
  */
 #ifdef CONFIG_CMD_NET
+#define CONFIG_MISC_INIT_R /* Call misc_init_r() to initialize MAC address */
 #define CONFIG_MVGBE_PORTS             {1, 0} /* enable port 0 only */
 #define CONFIG_NETCONSOLE
 #endif
  */
 #ifdef CONFIG_MVSATA_IDE
 #define CONFIG_SYS_ATA_IDE0_OFFSET      MV_SATA_PORT0_OFFSET
-/* Network Space Max v2 use 2 SATA ports */
-#ifdef CONFIG_NETSPACE_MAX_V2
+#if defined(CONFIG_NETSPACE_MAX_V2) || defined(CONFIG_NET2BIG_V2)
 #define CONFIG_SYS_ATA_IDE1_OFFSET      MV_SATA_PORT1_OFFSET
 #endif
-#endif
+#endif /* CONFIG_MVSATA_IDE */
 
 /*
  * Enable GPI0 support
        "usbload=usb start && "                                 \
                "fatload usb 0:1 $loadaddr /boot/$bootfile\0"
 
-#endif /* _CONFIG_NETSPACE_V2_H */
+#endif /* _CONFIG_LACIE_KW_H */
index 90c5bf897476a64c1397b1147fbb5bbfafb26495..361ffc504e37605521791cd6f2ff4d1736f68221 100644 (file)
@@ -34,7 +34,7 @@
  * High Level Configuration Options
  * (easy to change)
  */
-#define CONFIG_PXA250          1       /* This is an PXA250 CPU    */
+#define CONFIG_CPU_PXA25X              1       /* This is an PXA250 CPU    */
 #define CONFIG_LUBBOCK         1       /* on an LUBBOCK Board      */
 #define CONFIG_LCD             1
 #ifdef CONFIG_LCD
 #define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
 
 #define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
+#define        CONFIG_SYS_INIT_SP_ADDR         0xfffff800
 
 #define FPGA_REGS_BASE_PHYSICAL 0x08000000
 
diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h
new file mode 100644 (file)
index 0000000..d4bd207
--- /dev/null
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __M28_H__
+#define __M28_H__
+
+#include <asm/arch/regs-base.h>
+
+/*
+ * SoC configurations
+ */
+#define        CONFIG_MX28                             /* i.MX28 SoC */
+#define        CONFIG_MXS_GPIO                         /* GPIO control */
+#define        CONFIG_SYS_HZ           1000            /* Ticks per second */
+
+/*
+ * Define M28EVK machine type by hand until it lands in mach-types
+ */
+#define        MACH_TYPE_M28EVK        3613
+
+#define        CONFIG_MACH_TYPE        MACH_TYPE_M28EVK
+
+#define        CONFIG_SYS_NO_FLASH
+#define        CONFIG_SYS_ICACHE_OFF
+#define        CONFIG_SYS_DCACHE_OFF
+#define        CONFIG_BOARD_EARLY_INIT_F
+#define        CONFIG_ARCH_CPU_INIT
+#define        CONFIG_ARCH_MISC_INIT
+
+/*
+ * SPL
+ */
+#define        CONFIG_SPL
+#define        CONFIG_SPL_NO_CPU_SUPPORT_CODE
+#define        CONFIG_SPL_START_S_PATH         "board/denx/m28evk"
+#define        CONFIG_SPL_LDSCRIPT             "board/denx/m28evk/u-boot-spl.lds"
+
+/*
+ * U-Boot Commands
+ */
+#include <config_cmd_default.h>
+#define        CONFIG_DISPLAY_CPUINFO
+#define        CONFIG_DOS_PARTITION
+
+#define        CONFIG_CMD_CACHE
+#define        CONFIG_CMD_DATE
+#define        CONFIG_CMD_DHCP
+#define        CONFIG_CMD_EEPROM
+#define        CONFIG_CMD_EXT2
+#define        CONFIG_CMD_FAT
+#define        CONFIG_CMD_GPIO
+#define        CONFIG_CMD_I2C
+#define        CONFIG_CMD_MII
+#define        CONFIG_CMD_MMC
+#define        CONFIG_CMD_NAND
+#define        CONFIG_CMD_NET
+#define        CONFIG_CMD_NFS
+#define        CONFIG_CMD_PING
+#define        CONFIG_CMD_SETEXPR
+#define        CONFIG_CMD_SF
+#define        CONFIG_CMD_SPI
+#define        CONFIG_CMD_USB
+
+/*
+ * Memory configurations
+ */
+#define        CONFIG_NR_DRAM_BANKS            1               /* 1 bank of DRAM */
+#define        PHYS_SDRAM_1                    0x40000000      /* Base address */
+#define        PHYS_SDRAM_1_SIZE               0x40000000      /* Max 1 GB RAM */
+#define        CONFIG_STACKSIZE                0x00010000      /* 128 KB stack */
+#define        CONFIG_SYS_MALLOC_LEN           0x00400000      /* 4 MB for malloc */
+#define        CONFIG_SYS_GBL_DATA_SIZE        128             /* Initial data */
+#define        CONFIG_SYS_MEMTEST_START        0x40000000      /* Memtest start adr */
+#define        CONFIG_SYS_MEMTEST_END          0x40400000      /* 4 MB RAM test */
+#define        CONFIG_SYS_SDRAM_BASE           PHYS_SDRAM_1
+/* Point initial SP in SRAM so SPL can use it too. */
+#define        CONFIG_SYS_INIT_SP_ADDR         0x00002000
+/*
+ * We need to sacrifice first 4 bytes of RAM here to avoid triggering some
+ * strange BUG in ROM corrupting first 4 bytes of RAM when loading U-Boot
+ * binary. In case there was more of this mess, 0x100 bytes are skipped.
+ */
+#define        CONFIG_SYS_TEXT_BASE            0x40000100
+
+/*
+ * U-Boot general configurations
+ */
+#define        CONFIG_SYS_LONGHELP
+#define        CONFIG_SYS_PROMPT       "=> "
+#define        CONFIG_SYS_CBSIZE       1024            /* Console I/O buffer size */
+#define        CONFIG_SYS_PBSIZE       \
+       (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+                                               /* Print buffer size */
+#define        CONFIG_SYS_MAXARGS      32              /* Max number of command args */
+#define        CONFIG_SYS_BARGSIZE     CONFIG_SYS_CBSIZE
+                                               /* Boot argument buffer size */
+#define        CONFIG_VERSION_VARIABLE                 /* U-BOOT version */
+#define        CONFIG_AUTO_COMPLETE                    /* Command auto complete */
+#define        CONFIG_CMDLINE_EDITING                  /* Command history etc */
+#define        CONFIG_SYS_HUSH_PARSER
+#define        CONFIG_SYS_PROMPT_HUSH_PS2      "> "
+
+/*
+ * Serial Driver
+ */
+#define        CONFIG_PL011_SERIAL
+#define        CONFIG_PL011_CLOCK              24000000
+#define        CONFIG_PL01x_PORTS              { (void *)MXS_UARTDBG_BASE }
+#define        CONFIG_CONS_INDEX               0
+#define        CONFIG_BAUDRATE                 115200  /* Default baud rate */
+#define        CONFIG_SYS_BAUDRATE_TABLE       { 9600, 19200, 38400, 57600, 115200 }
+
+/*
+ * MMC Driver
+ */
+#ifdef CONFIG_CMD_MMC
+#define        CONFIG_MMC
+#define        CONFIG_GENERIC_MMC
+#define        CONFIG_MXS_MMC
+#endif
+
+/*
+ * NAND
+ */
+#ifdef CONFIG_CMD_NAND
+#define        CONFIG_NAND_MXS
+#define CONFIG_APBH_DMA
+#define        CONFIG_SYS_MAX_NAND_DEVICE      1
+#define        CONFIG_SYS_NAND_BASE            0x60000000
+#define        CONFIG_SYS_NAND_5_ADDR_CYCLE
+#define        NAND_MAX_CHIPS                  8
+
+/* Environment is in NAND */
+#define        CONFIG_ENV_IS_IN_NAND
+#define        CONFIG_ENV_SIZE                 (16 * 1024)
+#define        CONFIG_ENV_SIZE_REDUND          CONFIG_ENV_SIZE
+#define        CONFIG_ENV_SECT_SIZE            (128 * 1024)
+#define        CONFIG_ENV_RANGE                (512 * 1024)
+#define        CONFIG_ENV_OFFSET               0x300000
+#define        CONFIG_ENV_OFFSET_REDUND        \
+               (CONFIG_ENV_OFFSET + CONFIG_ENV_RANGE)
+
+#define        CONFIG_CMD_UBI
+#define        CONFIG_CMD_UBIFS
+#define        CONFIG_CMD_MTDPARTS
+#define        CONFIG_RBTREE
+#define        CONFIG_LZO
+#define        CONFIG_MTD_DEVICE
+#define        CONFIG_MTD_PARTITIONS
+#define        MTDIDS_DEFAULT                  "nand0=gpmi-nand.0"
+#define        MTDPARTS_DEFAULT                        \
+       "mtdparts=gpmi-nand.0:"                 \
+               "3m(bootloader)ro,"             \
+               "512k(environment),"            \
+               "512k(redundant-environment),"  \
+               "4m(kernel),"                   \
+               "-(filesystem)"
+#endif
+
+/*
+ * Ethernet on SOC (FEC)
+ */
+#ifdef CONFIG_CMD_NET
+#define        CONFIG_NET_MULTI
+#define        CONFIG_ETHPRIME                 "FEC0"
+#define        CONFIG_FEC_MXC
+#define        CONFIG_FEC_MXC_MULTI
+#define        CONFIG_MII
+#define        CONFIG_DISCOVER_PHY
+#define        CONFIG_FEC_XCV_TYPE             RMII
+#endif
+
+/*
+ * I2C
+ */
+#ifdef CONFIG_CMD_I2C
+#define        CONFIG_I2C_MXS
+#define        CONFIG_HARD_I2C
+#define        CONFIG_SYS_I2C_SPEED            400000
+#endif
+
+/*
+ * EEPROM
+ */
+#ifdef CONFIG_CMD_EEPROM
+#define        CONFIG_SYS_I2C_MULTI_EEPROMS
+#define        CONFIG_SYS_I2C_EEPROM_ADDR_LEN  2
+#endif
+
+/*
+ * RTC
+ */
+#ifdef CONFIG_CMD_DATE
+/* Use the internal RTC in the MXS chip */
+#define        CONFIG_RTC_INTERNAL
+#ifdef CONFIG_RTC_INTERNAL
+#define        CONFIG_RTC_MXS
+#else
+#define        CONFIG_RTC_M41T62
+#define        CONFIG_SYS_I2C_RTC_ADDR         0x68
+#define        CONFIG_SYS_M41T11_BASE_YEAR     2000
+#endif
+#endif
+
+/*
+ * USB
+ */
+#ifdef CONFIG_CMD_USB
+#define        CONFIG_USB_EHCI
+#define        CONFIG_USB_EHCI_MXS
+#define        CONFIG_EHCI_MXS_PORT            1
+#define        CONFIG_EHCI_IS_TDI
+#define        CONFIG_USB_STORAGE
+#endif
+
+/*
+ * SPI
+ */
+#ifdef CONFIG_CMD_SPI
+#define        CONFIG_HARD_SPI
+#define        CONFIG_MXS_SPI
+#define        CONFIG_SPI_HALF_DUPLEX
+#define        CONFIG_DEFAULT_SPI_BUS          2
+#define        CONFIG_DEFAULT_SPI_MODE         SPI_MODE_0
+
+/* SPI FLASH */
+#ifdef CONFIG_CMD_SF
+#define        CONFIG_SPI_FLASH
+#define        CONFIG_SPI_FLASH_STMICRO
+#define        CONFIG_SPI_FLASH_CS             2
+#define        CONFIG_SF_DEFAULT_MODE          SPI_MODE_0
+#define        CONFIG_SF_DEFAULT_SPEED         24000000
+
+#define        CONFIG_ENV_SPI_CS               0
+#define        CONFIG_ENV_SPI_BUS              2
+#define        CONFIG_ENV_SPI_MAX_HZ           24000000
+#define        CONFIG_ENV_SPI_MODE             SPI_MODE_0
+#endif
+#endif
+
+/*
+ * Boot Linux
+ */
+#define        CONFIG_CMDLINE_TAG
+#define        CONFIG_SETUP_MEMORY_TAGS
+#define        CONFIG_BOOTDELAY        3
+#define        CONFIG_BOOTFILE         "uImage"
+#define        CONFIG_BOOTARGS         "console=ttyAM0,115200n8 "
+#define        CONFIG_BOOTCOMMAND      "run bootcmd_net"
+#define        CONFIG_LOADADDR         0x42000000
+#define        CONFIG_SYS_LOAD_ADDR    CONFIG_LOADADDR
+
+/*
+ * Extra Environments
+ */
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "update_nand_full_filename=u-boot.nand\0"                       \
+       "update_nand_firmware_filename=u-boot.sb\0"                     \
+       "update_nand_firmware_maxsz=0x100000\0"                         \
+       "update_nand_stride=0x40\0"     /* MX28 datasheet ch. 12.12 */  \
+       "update_nand_count=0x4\0"       /* MX28 datasheet ch. 12.12 */  \
+       "update_nand_get_fcb_size="     /* Get size of FCB blocks */    \
+               "nand device 0 ; "                                      \
+               "nand info ; "                                          \
+               "setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \
+               "setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \
+       "update_nand_full="             /* Update FCB, DBBT and FW */   \
+               "if tftp ${update_nand_full_filename} ; then "          \
+               "run update_nand_get_fcb_size ; "                       \
+               "nand scrub -y 0x0 ${filesize} ; "                      \
+               "nand write.raw ${loadaddr} 0x0 ${update_nand_fcb} ; "  \
+               "setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \
+               "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \
+               "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \
+               "fi\0"                                                  \
+       "update_nand_firmware="         /* Update only firmware */      \
+               "if tftp ${update_nand_firmware_filename} ; then "      \
+               "run update_nand_get_fcb_size ; "                       \
+               "setexpr fcb_sz ${update_nand_fcb} * 2 ; " /* FCB + DBBT */ \
+               "setexpr fw_sz ${update_nand_firmware_maxsz} * 2 ; "    \
+               "setexpr fw_off ${fcb_sz} + ${update_nand_firmware_maxsz};" \
+               "nand erase ${fcb_sz} ${fw_sz} ; "                      \
+               "nand write ${loadaddr} ${fcb_sz} ${filesize} ; "       \
+               "nand write ${loadaddr} ${fw_off} ${filesize} ; "       \
+               "fi\0"
+
+#endif /* __M28_H__ */
index ea402905ba067cc5c98858a4f29de4d2e7f2fc45..d6197bc610ab3ff1b8ff3dd94eabe84e7050b5ad 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * (C) Copyright 2009-2011
index 6b3fd7600371cdbc66f428b3d53c7f3f915a5bcf..03a6f5ad0b8d3eb741fe64774888aca54e38b4b0 100644 (file)
 #elif XILINX_UART16550_BASEADDR
 # define CONFIG_SYS_NS16550            1
 # define CONFIG_SYS_NS16550_SERIAL
-# define CONFIG_SYS_NS16550_REG_SIZE   -4
+# if defined(__MICROBLAZEEL__)
+#  define CONFIG_SYS_NS16550_REG_SIZE  -4
+# else
+#  define CONFIG_SYS_NS16550_REG_SIZE  4
+# endif
 # define CONFIG_CONS_INDEX             1
 # define CONFIG_SYS_NS16550_COM1 \
-                       (XILINX_UART16550_BASEADDR + 0x1000)
+               ((XILINX_UART16550_BASEADDR & ~0xF) + 0x1000)
 # define CONFIG_SYS_NS16550_CLK        XILINX_UART16550_CLOCK_HZ
 # define CONFIG_BAUDRATE       115200
 
index 8414376edd9b22d16b5da189394a06faece6eb4c..d1ba02b6eedcd8875572c2f56e93a6cb9f5cd080 100644 (file)
@@ -54,7 +54,7 @@
 
 /* Serial Info */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX25_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 #define CONFIG_CONS_INDEX      1       /* use UART0 for console */
 #define CONFIG_BAUDRATE                115200  /* Default baud rate */
 #define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
index 7e011aea9df3f4e038d262bbfe7a5c35d4348538..87638a4fa52fa7b87d89140bfd93a32113806e4e 100644 (file)
@@ -60,8 +60,8 @@
  * Hardware drivers
  */
 
-#define CONFIG_MXC_UART        1
-#define CONFIG_SYS_MX31_UART1          1
+#define CONFIG_MXC_UART
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 
 #define CONFIG_HARD_SPI                1
 #define CONFIG_MXC_SPI         1
index 4253c3e2bcf037188dcedad647b42b9dab9dffdf..4da6020c8cfbac6c1a9c3e1c62b9302365349971 100644 (file)
@@ -61,7 +61,7 @@
  */
 
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX31_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 #define CONFIG_HW_WATCHDOG
 #define CONFIG_MXC_GPIO
 
index 32ed6096ae1990c2afacd8104904be3a33da5aa5..0c62b9fdfb3deb2f6f605dd053fcd1c383e60f32 100644 (file)
@@ -85,7 +85,7 @@
  * UART (console)
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX35_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
index 7c7544f5a83c57b7377d0c0b52d1e38d79418176..dd53f48b9aab4d077cbe1e25ccb522b632887a14 100644 (file)
@@ -59,7 +59,7 @@
  * Hardware drivers
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX51_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 #define CONFIG_MXC_GPIO
 
 /*
index 15dfcb49ed1b5b173ed49dca29bd75b8a4593b02..f48a41ebc582c092d7d302e99719fbd72d8a4c20 100644 (file)
@@ -44,7 +44,7 @@
 #define CONFIG_MXC_GPIO
 
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX53_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 
 /* I2C Configs */
 #define CONFIG_CMD_I2C
index 7c491360f2efc2357676ae746fb1721ff04327c3..11fe6efe626517403cb003374259227b27cd395d 100644 (file)
@@ -47,7 +47,7 @@
 #define CONFIG_MXC_GPIO
 
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX53_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 
 /* I2C Configs */
 #define CONFIG_CMD_I2C
index d6990107db43de23734757ae253517a1e6dc9438..537649ee164f0fec1c915177968213ededca7494 100644 (file)
@@ -45,7 +45,7 @@
 #define CONFIG_MXC_GPIO
 
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX53_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 
 /* MMC Configs */
 #define CONFIG_FSL_ESDHC
index 48b32ddab689a946acd759ec6bd20a23c20265c8..032f72261e6ae0a8f055cf59dbfad50648e450fa 100644 (file)
@@ -44,7 +44,7 @@
 #define CONFIG_MXC_GPIO
 
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX53_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 
 /* I2C Configs */
 #define CONFIG_CMD_I2C
index 1395939ce04d9cdffd5c707ad4ff60b44bad994c..9ba35e8810356150e558eedecf3e8de008268ef8 100644 (file)
 /*
  * STATUS LED
  */
+#define CONFIG_ALTERA_PIO
+#define CONFIG_SYS_ALTERA_PIO_NUM      1
+#define CONFIG_SYS_ALTERA_PIO_GPIO_NUM LED_PIO_WIDTH
+
 #define CONFIG_STATUS_LED              /* Enable status driver */
 #define CONFIG_GPIO_LED                /* Enable GPIO LED driver */
 #define CONFIG_GPIO                    /* Enable GPIO driver */
index ebb572e3f05f27375aa00b123863579db0f2700e..91af8a025697b0055b87d135db0034b3e6b3e117 100644 (file)
@@ -33,7 +33,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_BEAGLE    1       /* working with BEAGLE */
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
 #define STATUS_LED_BOOT                        STATUS_LED_BIT
 #define STATUS_LED_GREEN               STATUS_LED_BIT1
 
-/* DDR - I use Micron DDR */
-#define CONFIG_OMAP3_MICRON_DDR                1
-
 /* Enable Multi Bus support for I2C */
 #define CONFIG_I2C_MULTI_BUS           1
 
        "rdaddr=0x81000000\0" \
        "usbtty=cdc_acm\0" \
        "bootfile=uImage.beagle\0" \
-       "console=ttyS2,115200n8\0" \
+       "console=ttyO2,115200n8\0" \
        "mpurate=auto\0" \
        "buddy=none "\
        "optargs=\0" \
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
  */
 #define CONFIG_NR_DRAM_BANKS   2       /* CS1 may or may not be populated */
 #define PHYS_SDRAM_1           OMAP34XX_SDRC_CS0
-#define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
 
 #define CONFIG_OMAP3_SPI
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SPL_NAND_SIMPLE
+#define CONFIG_SPL_TEXT_BASE           0x40200800
+#define CONFIG_SPL_MAX_SIZE            (45 * 1024)
+#define CONFIG_SPL_STACK               LOW_LEVEL_SRAM_STACK
+
+#define CONFIG_SPL_BSS_START_ADDR      0x80000000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x80000         /* 512 KB */
+
+#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR        0x300 /* address 0x60000 */
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x200 /* 256 KB */
+#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION   1
+#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME       "u-boot.img"
+
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SPL_POWER_SUPPORT
+#define CONFIG_SPL_OMAP3_ID_NAND
+#define CONFIG_SPL_LDSCRIPT            "$(CPUDIR)/omap-common/u-boot-spl.lds"
+
+/* NAND boot config */
+#define CONFIG_SYS_NAND_5_ADDR_CYCLE
+#define CONFIG_SYS_NAND_PAGE_COUNT     64
+#define CONFIG_SYS_NAND_PAGE_SIZE      2048
+#define CONFIG_SYS_NAND_OOBSIZE                64
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128*1024)
+#define CONFIG_SYS_NAND_BAD_BLOCK_POS  0
+#define CONFIG_SYS_NAND_ECCPOS         {2, 3, 4, 5, 6, 7, 8, 9,\
+                                               10, 11, 12, 13}
+#define CONFIG_SYS_NAND_ECCSIZE                512
+#define CONFIG_SYS_NAND_ECCBYTES       3
+#define CONFIG_SYS_NAND_ECCSTEPS       (CONFIG_SYS_NAND_PAGE_SIZE / \
+                                               CONFIG_SYS_NAND_ECCSIZE)
+#define CONFIG_SYS_NAND_ECCTOTAL       (CONFIG_SYS_NAND_ECCBYTES * \
+                                               CONFIG_SYS_NAND_ECCSTEPS)
+#define CONFIG_SYS_NAND_U_BOOT_START   CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    0x80000
+
+/*
+ * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
+ * 64 bytes before this address should be set aside for u-boot.img's
+ * header. That is 0x800FFFC0--0x80100000 should not be used for any
+ * other needs.
+ */
+#define CONFIG_SYS_TEXT_BASE           0x80100000
+#define CONFIG_SYS_SPL_MALLOC_START    0x80208000
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000
+
 #endif /* __CONFIG_H */
index 47ec39f29db7145eae2c35f190592759a53f3d68..2ce3959fdaf5f8963a0edce96f90791c3702f81c 100644 (file)
 #define CONFIG_MMC
 #define CONFIG_GENERIC_MMC
 #define CONFIG_OMAP_HSMMC
+
+/* SPL */
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR        0x300 /* address 0x60000 */
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x200 /* 256 KB */
+#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION   1
+#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME       "u-boot.img"
+
+/* Partition tables */
+/* Only need DOS partition support for SPL, currently */
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_EFI_PARTITION
+#endif
 #define CONFIG_DOS_PARTITION
 
 /* USB
 #define CONFIG_MUSB_HCD
 /* #define CONFIG_MUSB_UDC */
 
+/* NAND SPL */
+#define CONFIG_SPL_NAND_SIMPLE
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SYS_NAND_5_ADDR_CYCLE
+#define CONFIG_SYS_NAND_PAGE_COUNT     64
+#define CONFIG_SYS_NAND_PAGE_SIZE      2048
+#define CONFIG_SYS_NAND_OOBSIZE                64
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128*1024)
+#define CONFIG_SYS_NAND_BAD_BLOCK_POS  0
+#define CONFIG_SYS_NAND_ECCPOS         {2, 3, 4, 5, 6, 7, 8, 9,\
+                                               10, 11, 12, 13}
+#define CONFIG_SYS_NAND_ECCSIZE                512
+#define CONFIG_SYS_NAND_ECCBYTES       3
+#define CONFIG_SYS_NAND_ECCSTEPS       (CONFIG_SYS_NAND_PAGE_SIZE / \
+                                               CONFIG_SYS_NAND_ECCSIZE)
+#define CONFIG_SYS_NAND_ECCTOTAL       (CONFIG_SYS_NAND_ECCBYTES * \
+                                               CONFIG_SYS_NAND_ECCSTEPS)
+#define CONFIG_SYS_NAND_U_BOOT_START   CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    0x80000
+
 /* -----------------------------------------------------------------------------
  * Include common board configuration
  * -----------------------------------------------------------------------------
index 54aa7a78588dc6210d73d5f497509f5ce6ad0b52..b25631790551941864dcb0454c3c19c7bea69545 100644 (file)
  */
 #define CONFIG_OMAP                    /* This is TI OMAP core */
 #define CONFIG_OMAP34XX                        /* belonging to 34XX family */
-#define CONFIG_OMAP3430                        /* which is in a 3430 */
 
 #define CONFIG_SDRC                    /* The chip has SDRC controller */
 
 #define CONFIG_OMAP3_EVM               /* This is a OMAP3 EVM */
-#define CONFIG_OMAP3_MICRON_DDR                /* with MICRON DDR part */
 #define CONFIG_TWL4030_POWER           /* with TWL4030 PMIC */
 
 #undef CONFIG_USE_IRQ                  /* no support for IRQs */
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
 
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
-
 /*
  * Physical Memory Map
  * Note 1: CS1 may or may not be populated
  */
 #define CONFIG_NR_DRAM_BANKS           2
 #define PHYS_SDRAM_1                   OMAP34XX_SDRC_CS0
-#define PHYS_SDRAM_1_SIZE              (32 << 20)
 #define PHYS_SDRAM_2                   OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C
-
 /* Limits for memtest */
 #define CONFIG_SYS_MEMTEST_START       (OMAP34XX_SDRC_CS0)
 #define CONFIG_SYS_MEMTEST_END         (OMAP34XX_SDRC_CS0 + \
 /* Uncomment to define the board revision statically */
 /* #define CONFIG_STATIC_BOARD_REV     OMAP3EVM_BOARD_GEN_2 */
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SPL_TEXT_BASE           0x40200800
+#define CONFIG_SPL_MAX_SIZE            (45 * 1024)     /* 45 KB */
+#define CONFIG_SPL_STACK               LOW_LEVEL_SRAM_STACK
+
+#define CONFIG_SPL_BSS_START_ADDR      0x80000000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x80000         /* 512 KB */
+
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_POWER_SUPPORT
+#define CONFIG_SPL_OMAP3_ID_NAND
+#define CONFIG_SPL_LDSCRIPT            "$(CPUDIR)/omap-common/u-boot-spl.lds"
+
+/*
+ * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
+ * 64 bytes before this address should be set aside for u-boot.img's
+ * header. That is 0x800FFFC0--0x80100000 should not be used for any
+ * other needs.
+ */
+#define CONFIG_SYS_TEXT_BASE           0x80100000
+#define CONFIG_SYS_SPL_MALLOC_START    0x80208000
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000
+
 #endif /* __OMAP3_EVM_COMMON_H */
index 691e4c2984ce34ae75e6f2770de3c4a6fd52ef77..912da7d07471317bdfb55a4aa7806a7f152327e2 100644 (file)
        "root=/dev/mmcblk0p2 rw "       \
        "rootfstype=ext3 rootwait"
 
+/*
+ * SPL
+ */
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR        0x300 /* address 0x60000 */
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x200 /* 256 KB */
+#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION   1
+#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME       "u-boot.img"
+
 #endif /* __OMAP3_EVM_QUICK_MMC_H */
index 2d183140d7d97faafc713cfe7a0226dba77e14ee..2f879c0bf12ffd5b9799dc9aff1015ff4e11ce83 100644 (file)
        "root=/dev/mtdblock4 rw "       \
        "rootfstype=jffs2 "
 
+/*
+ * SPL
+ */
+#define CONFIG_SPL_NAND_SIMPLE
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SYS_NAND_5_ADDR_CYCLE
+#define CONFIG_SYS_NAND_PAGE_COUNT     64
+#define CONFIG_SYS_NAND_PAGE_SIZE      2048
+#define CONFIG_SYS_NAND_OOBSIZE                64
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128*1024)
+#define CONFIG_SYS_NAND_BAD_BLOCK_POS  0
+#define CONFIG_SYS_NAND_ECCPOS         {2, 3, 4, 5, 6, 7, 8, 9,\
+                                               10, 11, 12, 13}
+#define CONFIG_SYS_NAND_ECCSIZE                512
+#define CONFIG_SYS_NAND_ECCBYTES       3
+#define CONFIG_SYS_NAND_ECCSTEPS       (CONFIG_SYS_NAND_PAGE_SIZE / \
+                                               CONFIG_SYS_NAND_ECCSIZE)
+#define CONFIG_SYS_NAND_ECCTOTAL       (CONFIG_SYS_NAND_ECCBYTES * \
+                                               CONFIG_SYS_NAND_ECCSTEPS)
+#define CONFIG_SYS_NAND_U_BOOT_START   CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    0x80000
+
 #endif /* __OMAP3_EVM_QUICK_NAND_H */
index a0252a299921eb780b3462062cca5954b31f7bc4..eb51ea9f9baa279eaf977ac65445d413887bccf2 100644 (file)
@@ -37,7 +37,6 @@
 #define CONFIG_ARMV7           1       /* This is an ARM V7 CPU core */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_MVBLX           1       /* working with mvBlueLYNX-X */
 #define CONFIG_MACH_TYPE       MACH_TYPE_MVBLX
 
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 #define CONFIG_ENV_IS_NOWHERE  1
 
 /*----------------------------------------------------------------------------
 
 #define CONFIG_OMAP3_SPI
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
 #endif /* __CONFIG_H */
index afdefd95572d7e2c7a46d21053c52377a8f5e845..0874716299d4cedd644366136d5012c70a10a2cf 100644 (file)
@@ -25,7 +25,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_OVERO     1       /* working with overo */
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
                                         CONFIG_SYS_INIT_RAM_SIZE - \
                                         GENERATED_GBL_DATA_SIZE)
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
 #endif                         /* __CONFIG_H */
index 3c2793ea42a82376f52e47456579c7002033e38b..1a30454c7d09f104414da88517c1d72741f12f68 100644 (file)
@@ -28,7 +28,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_PANDORA   1       /* working with pandora */
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 #define CONFIG_SYS_TEXT_BASE           0x80008000
 #define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
 #define CONFIG_SYS_INIT_RAM_ADDR       0x4020f800
 #define CONFIG_ENV_OFFSET              SMNAND_ENV_OFFSET
 #define CONFIG_ENV_ADDR                        SMNAND_ENV_OFFSET
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
 #endif                         /* __CONFIG_H */
index 35472bb044916721f7bf53b7b3e334ca10624e36..90f4b9036ec65e5e087d93db42b4af67c31038b1 100644 (file)
@@ -38,7 +38,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_3430SDP   1       /* working with SDP Rev2 */
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10) /* Regular stack */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10) /* IRQ stack */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10) /* FIQ stack */
-#endif
 
 #define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
 #define CONFIG_SYS_INIT_RAM_ADDR       0x4020f800
 #define PHYS_SDRAM_1_SIZE      (32 << 20) /* at least 32 meg */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*--------------------------------------------------------------------------*/
 
 /*
  *  - rest for filesystem
  */
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
 #endif                         /* __CONFIG_H */
index fbac22235cd6c2bb3a64d236e442b7250c8d38f4..b0e10c762b570558068301ca87970e308cb180e2 100644 (file)
@@ -34,7 +34,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_ZOOM1     1       /* working with Zoom MDK Rev1 */
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
  * The stack sizes are set up in start.S using the settings below
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
 #define CONFIG_ENV_OFFSET              SMNAND_ENV_OFFSET
 #define CONFIG_ENV_ADDR                        SMNAND_ENV_OFFSET
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
 #endif                         /* __CONFIG_H */
index 8de3d317f092ca3affdca846e7ebd4fdb76c534d..8a37ebfa3afa178dcd138f99955884e6d86ee1de 100644 (file)
@@ -35,7 +35,6 @@
  */
 #define CONFIG_OMAP            1       /* in a TI OMAP core */
 #define CONFIG_OMAP34XX                1       /* which is a 34XX */
-#define CONFIG_OMAP3430                1       /* which is in a 3430 */
 #define CONFIG_OMAP3_ZOOM2     1       /* working with Zoom II */
 
 #define CONFIG_SDRC    /* The chip has SDRC controller */
  * The stack sizes are set up in start.S using these settings
  */
 #define CONFIG_STACKSIZE       (128 << 10)     /* regular stack 128 KiB */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack 4 KiB */
-#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack 4 KiB */
-#endif
 
 /*-----------------------------------------------------------------------
  * Physical Memory Map
 #define PHYS_SDRAM_1_SIZE      (32 << 20)      /* at least 32 MiB */
 #define PHYS_SDRAM_2           OMAP34XX_SDRC_CS1
 
-/* SDRAM Bank Allocation method */
-#define SDRC_R_B_C             1
-
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
 #define CONFIG_ENV_OFFSET              SMNAND_ENV_OFFSET
 #define CONFIG_ENV_ADDR                        SMNAND_ENV_OFFSET
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
 #endif /* __CONFIG_H */
index f535769559639eb9a34270c73fcf76c634e8026e..a989721afc4eab7ce6f743961e801d5f1303b913 100644 (file)
@@ -39,7 +39,7 @@
 
 /* Get CPU defs */
 #include <asm/arch/cpu.h>
-#include <asm/arch/omap4.h>
+#include <asm/arch/omap.h>
 
 /* Display CPU and Board Info */
 #define CONFIG_DISPLAY_CPUINFO         1
 /* Flash */
 #define CONFIG_SYS_NO_FLASH    1
 
+/* clocks */
+#define CONFIG_SYS_CLOCKS_ENABLE_ALL
+
 /* commands to include */
 #include <config_cmd_default.h>
 
 
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "loadaddr=0x82000000\0" \
-       "console=ttyS2,115200n8\0" \
+       "console=ttyO2,115200n8\0" \
        "usbtty=cdc_acm\0" \
        "vram=16M\0" \
        "mmcdev=0\0" \
 #define CONFIG_SYS_L2_PL310            1
 #define CONFIG_SYS_PL310_BASE  0x48242000
 #endif
+#define CONFIG_SYS_CACHELINE_SIZE      32
 
 /* Defines for SDRAM init */
 #define CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
 #define CONFIG_SPL_MAX_SIZE            (38 * 1024)
 #define CONFIG_SPL_STACK               LOW_LEVEL_SRAM_STACK
 
-#define CONFIG_SPL_BSS_START_ADDR      0x80000000
-#define CONFIG_SPL_BSS_MAX_SIZE                0x80000         /* 512 KB */
 /*
- * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
  * 64 bytes before this address should be set aside for u-boot.img's
- * header. That is 0x800FFFC0--0x80100000 should not be used for any
+ * header. That is 80E7FFC0--0x80E80000 should not be used for any
  * other needs.
  */
-#define CONFIG_SYS_TEXT_BASE           0x80100000
-#define CONFIG_SYS_SPL_MALLOC_START    0x80200000
-#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000        /* 1 MB */
+#define CONFIG_SYS_TEXT_BASE           0x80E80000
 
+/*
+ * BSS and malloc area 64MB into memory to allow enough
+ * space for the kernel at the beginning of memory
+ */
+#define CONFIG_SPL_BSS_START_ADDR      0x84000000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x100000        /* 1 MB */
+#define CONFIG_SYS_SPL_MALLOC_START    0x84100000
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000        /* 1 MB */
 
 #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR        0x300 /* address 0x60000 */
 #define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x200 /* 256 KB */
 #define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/armv7/omap-common/u-boot-spl.lds"
 
+#define CONFIG_SYS_ENABLE_PADS_ALL
+
 #endif /* __CONFIG_OMAP4_COMMON_H */
diff --git a/include/configs/omap5_evm.h b/include/configs/omap5_evm.h
new file mode 100644 (file)
index 0000000..d3d5263
--- /dev/null
@@ -0,0 +1,287 @@
+/*
+ * (C) Copyright 2010
+ * Texas Instruments Incorporated.
+ * Sricharan R   <r.sricharan@ti.com>
+ *
+ * Derived from OMAP4 done by:
+ *     Aneesh V <aneesh@ti.com>
+ *
+ * Configuration settings for the TI EVM5430 board.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_ARMV7   /* This is an ARM V7 CPU core */
+#define CONFIG_OMAP    /* in a TI OMAP core */
+#define CONFIG_OMAP54XX        /* which is a 54XX */
+#define CONFIG_OMAP5430        /* which is in a 5430 */
+#define CONFIG_5430EVM /* working with EVM */
+#define CONFIG_ARCH_CPU_INIT
+
+/* Get CPU defs */
+#include <asm/arch/cpu.h>
+#include <asm/arch/omap.h>
+
+/* Display CPU and Board Info */
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DISPLAY_BOARDINFO
+
+/* Clock Defines */
+#define V_OSCK 38400000 /* Clock output from T2 */
+#define V_SCLK V_OSCK
+
+#undef CONFIG_USE_IRQ  /* no support for IRQs */
+#define CONFIG_MISC_INIT_R
+
+#define CONFIG_OF_LIBFDT
+
+#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+
+/*
+ * Size of malloc() pool
+ * Total Size Environment - 128k
+ * Malloc - add 256k
+ */
+#define CONFIG_ENV_SIZE                        (128 << 10)
+#define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + (256 << 10))
+/* Vector Base */
+#define CONFIG_SYS_CA9_VECTOR_BASE     SRAM_ROM_VECT_BASE
+
+/*
+ * Hardware drivers
+ */
+
+/*
+ * serial port - NS16550 compatible
+ */
+#define V_NS16550_CLK                  48000000
+
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_REG_SIZE    (-4)
+#define CONFIG_SYS_NS16550_CLK         V_NS16550_CLK
+#define CONFIG_CONS_INDEX              3
+#define CONFIG_SYS_NS16550_COM3                UART3_BASE
+
+#define CONFIG_BAUDRATE                        115200
+#define CONFIG_SYS_BAUDRATE_TABLE      {4800, 9600, 19200, 38400, 57600,\
+                                       115200}
+/* I2C  */
+#define CONFIG_HARD_I2C
+#define CONFIG_SYS_I2C_SPEED           100000
+#define CONFIG_SYS_I2C_SLAVE           1
+#define CONFIG_DRIVER_OMAP34XX_I2C
+#define CONFIG_I2C_MULTI_BUS
+
+/* TWL6030 */
+#define CONFIG_TWL6030_POWER
+#define CONFIG_CMD_BAT
+
+/* MMC */
+#define CONFIG_GENERIC_MMC
+#define CONFIG_MMC
+#define CONFIG_OMAP_HSMMC
+#define CONFIG_DOS_PARTITION
+
+/* MMC ENV related defines */
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_SYS_MMC_ENV_DEV         1       /* SLOT2: eMMC(1) */
+#define CONFIG_ENV_OFFSET              0xE0000
+
+/* USB */
+#define CONFIG_MUSB_UDC
+#define CONFIG_USB_OMAP3
+
+/* USB device configuration */
+#define CONFIG_USB_DEVICE
+#define CONFIG_USB_TTY
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+
+/* Flash */
+#define CONFIG_SYS_NO_FLASH
+
+/* Cache */
+#define CONFIG_SYS_CACHELINE_SIZE      64
+#define CONFIG_SYS_CACHELINE_SHIFT     6
+
+/* commands to include */
+#include <config_cmd_default.h>
+
+/* Enabled commands */
+#define CONFIG_CMD_EXT2                /* EXT2 Support                 */
+#define CONFIG_CMD_FAT         /* FAT support                  */
+#define CONFIG_CMD_I2C         /* I2C serial bus support       */
+#define CONFIG_CMD_MMC         /* MMC support                  */
+#define CONFIG_CMD_SAVEENV
+
+/* Disabled commands */
+#undef CONFIG_CMD_NET
+#undef CONFIG_CMD_NFS
+#undef CONFIG_CMD_FPGA         /* FPGA configuration Support   */
+#undef CONFIG_CMD_IMLS         /* List all found images        */
+
+/*
+ * Environment setup
+ */
+
+#define CONFIG_BOOTDELAY       3
+
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "loadaddr=0x82000000\0" \
+       "console=ttyS2,115200n8\0" \
+       "usbtty=cdc_acm\0" \
+       "vram=16M\0" \
+       "mmcdev=0\0" \
+       "mmcroot=/dev/mmcblk0p2 rw\0" \
+       "mmcrootfstype=ext3 rootwait\0" \
+       "mmcargs=setenv bootargs console=${console} " \
+               "vram=${vram} " \
+               "root=${mmcroot} " \
+               "rootfstype=${mmcrootfstype}\0" \
+       "loadbootscript=fatload mmc ${mmcdev} ${loadaddr} boot.scr\0" \
+       "bootscript=echo Running bootscript from mmc${mmcdev} ...; " \
+               "source ${loadaddr}\0" \
+       "loaduimage=fatload mmc ${mmcdev} ${loadaddr} uImage\0" \
+       "mmcboot=echo Booting from mmc${mmcdev} ...; " \
+               "run mmcargs; " \
+               "bootm ${loadaddr}\0" \
+
+#define CONFIG_BOOTCOMMAND \
+       "if mmc rescan ${mmcdev}; then " \
+               "if run loadbootscript; then " \
+                       "run bootscript; " \
+               "else " \
+                       "if run loaduimage; then " \
+                               "run mmcboot; " \
+                       "fi; " \
+               "fi; " \
+       "fi"
+
+#define CONFIG_AUTO_COMPLETE           1
+
+/*
+ * Miscellaneous configurable options
+ */
+
+#define CONFIG_SYS_LONGHELP    /* undef to save memory */
+#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */
+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
+#define CONFIG_SYS_PROMPT              "OMAP5430 EVM # "
+#define CONFIG_SYS_CBSIZE              256
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE              (CONFIG_SYS_CBSIZE + \
+                                       sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS             16
+/* Boot Argument Buffer Size */
+#define CONFIG_SYS_BARGSIZE            (CONFIG_SYS_CBSIZE)
+
+/*
+ * memtest setup
+ */
+#define CONFIG_SYS_MEMTEST_START       0x80000000
+#define CONFIG_SYS_MEMTEST_END         (CONFIG_SYS_MEMTEST_START + (32 << 20))
+
+/* Default load address */
+#define CONFIG_SYS_LOAD_ADDR           0x80000000
+
+/* Use General purpose timer 1 */
+#define CONFIG_SYS_TIMERBASE           GPT2_BASE
+#define CONFIG_SYS_PTV                 2       /* Divisor: 2^(PTV+1) => 8 */
+#define CONFIG_SYS_HZ                  1000
+
+/*
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE       (128 << 10)     /* Regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ   (4 << 10)       /* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ   (4 << 10)       /* FIQ stack */
+#endif
+
+/*
+ * SDRAM Memory Map
+ * Even though we use two CS all the memory
+ * is mapped to one contiguous block
+ */
+#define CONFIG_NR_DRAM_BANKS   1
+
+#define CONFIG_SYS_SDRAM_BASE          0x80000000
+#define CONFIG_SYS_INIT_RAM_ADDR       0x4030D800
+#define CONFIG_SYS_INIT_RAM_SIZE       0x800
+#define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_INIT_RAM_ADDR + \
+                                        CONFIG_SYS_INIT_RAM_SIZE - \
+                                        GENERATED_GBL_DATA_SIZE)
+
+#define CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+
+/* Defines for SDRAM init */
+#ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
+#define CONFIG_SYS_AUTOMATIC_SDRAM_DETECTION
+#define CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
+#endif
+
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SPL_TEXT_BASE           0x40304350
+#define CONFIG_SPL_MAX_SIZE            0x1E000 /* 120K */
+#define CONFIG_SPL_STACK               LOW_LEVEL_SRAM_STACK
+
+#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR        0x300 /* address 0x60000 */
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x200 /* 256 KB */
+#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION   1
+#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME       "u-boot.img"
+
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/armv7/omap-common/u-boot-spl.lds"
+
+/*
+ * 64 bytes before this address should be set aside for u-boot.img's
+ * header. That is 80E7FFC0--0x80E80000 should not be used for any
+ * other needs.
+ */
+#define CONFIG_SYS_TEXT_BASE           0x80E80000
+
+/*
+ * BSS and malloc area 64MB into memory to allow enough
+ * space for the kernel at the beginning of memory
+ */
+#define CONFIG_SPL_BSS_START_ADDR      0x84000000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x100000        /* 1 MB */
+#define CONFIG_SYS_SPL_MALLOC_START    0x84100000
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000        /* 1 MB */
+
+#endif /* __CONFIG_H */
index c068aa0153e260af8d9c681df5c3f20e4facb1f8..b322c775a1052775a35bfa7f1d06ba177a83c56d 100644 (file)
@@ -4,7 +4,7 @@
  * esd electronic system design gmbh <www.esd.eu>
  *
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Configuation settings for the esd OTC570 board.
index bcfb0348404d33c83782c8d10b6e9cdb39528312..8e8fa163b8acd84e2bc7f3b5f7a6aa4ec9902406 100644 (file)
 
 /* IN case of NAND bootloader relocate CCSRBAR in RAMboot code not in the 4k
        SPL code*/
-#if defined(CONFIG_NAND_U_BOOT) && defined(CONFIG_NAND_SPL)
+#if defined(CONFIG_NAND_SPL)
 #define CONFIG_SYS_CCSR_DO_NOT_RELOCATE
 #endif
 
 
 #ifdef CONFIG_QE
 /* QE microcode/firmware address */
-#define CONFIG_SYS_QE_FW_ADDR          0xefec0000
-#define CONFIG_SYS_QE_FW_LENGTH                0x10000
+#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     0xefec0000
+#define CONFIG_SYS_QE_FMAN_FW_LENGTH   0x10000
 #endif /* CONFIG_QE */
 
 #ifdef CONFIG_P1025RDB
index 514bcaa58eaed70af5fc19617730b46ea270f176..88f4bfb4539e13b3836e64221da310923be75cae 100644 (file)
@@ -25,7 +25,7 @@
 /*
  * High Level Board Configuration Options
  */
-#define        CONFIG_PXA27X           1       /* Marvell PXA270 CPU */
+#define        CONFIG_CPU_PXA27X               1       /* Marvell PXA270 CPU */
 #define        CONFIG_PALMLD           1       /* Palm LifeDrive board */
 
 /*
index bdb5f57e429d9084b1697feeddc2dd865e9901cd..d1fef258ce82034fa43f452d8c50a62149ad43ce 100644 (file)
@@ -27,7 +27,7 @@
 /*
  * High Level Board Configuration Options
  */
-#define        CONFIG_PXA250                   1       /* Intel PXA255 CPU */
+#define        CONFIG_CPU_PXA25X                       1       /* Intel PXA255 CPU */
 #define        CONFIG_PALMTC                   1       /* Palm Tungsten|C board */
 
 /*
 #define        CONFIG_SYS_LOAD_ADDR            CONFIG_SYS_DRAM_BASE
 
 #define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
+#define        CONFIG_SYS_INIT_SP_ADDR         0xfffff800
 
 /*
  * NOR FLASH
diff --git a/include/configs/pleb2.h b/include/configs/pleb2.h
deleted file mode 100644 (file)
index 2aeb7fb..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * (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>
- *
- * Configuration settings for the PLEB 2 board.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-#define CONFIG_PXA250          1       /* This is an PXA255 CPU    */
-#define CONFIG_PLEB2           1       /* on an PLEB2 Board        */
-#undef CONFIG_LCD
-#undef CONFIG_MMC
-#define CONFIG_BOARD_LATE_INIT
-#define        CONFIG_SYS_TEXT_BASE    0x0
-
-#undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff */
-
-/* we will never enable dcache, because we have to setup MMU first */
-#define CONFIG_SYS_DCACHE_OFF
-
-/*
- * Size of malloc() pool
- */
-#define CONFIG_SYS_MALLOC_LEN      (CONFIG_ENV_SIZE + 128*1024)
-
-/*
- * Hardware drivers
- */
-
-/* None - PLEB 2 doesn't have any of this.
-       #define CONFIG_LAN91C96
-       #define CONFIG_LAN91C96_BASE 0x0C000000
- */
-
-/*
- * select serial console configuration
- */
-#define CONFIG_PXA_SERIAL
-#define CONFIG_FFUART         1       /* we use FFUART on PLEB 2 */
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE                115200
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#undef CONFIG_CMD_NET
-#undef CONFIG_CMD_NFS
-
-
-#define CONFIG_BOOTDELAY       3
-#define CONFIG_ETHADDR         08:00:3e:26:0a:5b
-#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_BOOTARGS                "root=/dev/mtdblock2 prompt_ramdisk=0 load_ramdisk=1 console=ttyS0,115200"
-
-#define CONFIG_CMDLINE_TAG
-#define CONFIG_INITRD_TAG
-#define CONFIG_SETUP_MEMORY_TAGS
-
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE   230400          /* speed to run kgdb serial port */
-#define CONFIG_KGDB_SER_INDEX  2               /* which serial port to use */
-#endif
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_SYS_HUSH_PARSER         1
-#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
-
-#define CONFIG_SYS_LONGHELP                            /* undef to save memory         */
-#ifdef CONFIG_SYS_HUSH_PARSER
-#define CONFIG_SYS_PROMPT              "$ "            /* Monitor Command Prompt */
-#else
-#define CONFIG_SYS_PROMPT              "=> "           /* Monitor Command Prompt */
-#endif
-#define CONFIG_SYS_CBSIZE              256             /* Console I/O Buffer Size      */
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS             16              /* max number of command args   */
-#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE       /* Boot Argument Buffer Size    */
-#define CONFIG_SYS_DEVICE_NULLDEV      1
-
-#define CONFIG_SYS_MEMTEST_START       0xa0400000      /* memtest works on     */
-#define CONFIG_SYS_MEMTEST_END         0xa0800000      /* 4 ... 8 MB in DRAM   */
-
-#define CONFIG_SYS_LOAD_ADDR           0xa2000000      /* default load address */
-
-#define CONFIG_SYS_HZ                  1000
-#define CONFIG_SYS_CPUSPEED            0x141           /* set core clock to 200/200/100 MHz */
-
-                                               /* valid baudrates */
-#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
-
-#ifdef CONFIG_MMC
-#define CONFIG_PXA_MMC
-#define CONFIG_CMD_MMC
-#endif
-
-/*
- * 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           0xa0000000 /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1_SIZE      0x02000000 /* 32 MB */
-
-#define PHYS_FLASH_1           0x00000000 /* Flash Bank #1 */
-#define PHYS_FLASH_2           0x04000000 /* Flash Bank #2 */
-#define PHYS_FLASH_SIZE                0x00800000 /* 4 MB */
-
-/* Not entirely sure about this - DS/CHC */
-#define PHYS_FLASH_BANK_SIZE   0x02000000 /* 32 MB Banks */
-#define PHYS_FLASH_SECT_SIZE   0x00010000 /* 64 KB sectors (x2) */
-
-#define CONFIG_SYS_DRAM_BASE           PHYS_SDRAM_1
-#define CONFIG_SYS_DRAM_SIZE           PHYS_SDRAM_1_SIZE
-
-#define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
-#define CONFIG_SYS_MONITOR_BASE        CONFIG_SYS_FLASH_BASE
-
-#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
-
-/*
- * GPIO settings
- */
-#define CONFIG_SYS_GPSR0_VAL           0x00000000  /* Don't set anything */
-#define CONFIG_SYS_GPSR1_VAL           0x00000080
-#define CONFIG_SYS_GPSR2_VAL           0x00000000
-
-#define CONFIG_SYS_GPCR0_VAL           0x00000000  /* Don't clear anything */
-#define CONFIG_SYS_GPCR1_VAL           0x00000000
-#define CONFIG_SYS_GPCR2_VAL           0x00000000
-
-#define CONFIG_SYS_GPDR0_VAL           0x00000000
-#define CONFIG_SYS_GPDR1_VAL           0x000007C3
-#define CONFIG_SYS_GPDR2_VAL           0x00000000
-
-/* Edge detect registers (these are set by the kernel) */
-#define CONFIG_SYS_GRER0_VAL       0x00000000
-#define CONFIG_SYS_GRER1_VAL       0x00000000
-#define CONFIG_SYS_GRER2_VAL       0x00000000
-#define CONFIG_SYS_GFER0_VAL       0x00000000
-#define CONFIG_SYS_GFER1_VAL       0x00000000
-#define CONFIG_SYS_GFER2_VAL       0x00000000
-
-#define CONFIG_SYS_GAFR0_L_VAL         0x00000000
-#define CONFIG_SYS_GAFR0_U_VAL         0x00000000
-#define CONFIG_SYS_GAFR1_L_VAL         0x00008010  /* Use FF UART Send and Receive */
-#define CONFIG_SYS_GAFR1_U_VAL         0x00000000
-#define CONFIG_SYS_GAFR2_L_VAL         0x00000000
-#define CONFIG_SYS_GAFR2_U_VAL         0x00000000
-
-#define CONFIG_SYS_PSSR_VAL            0x20
-#define CONFIG_SYS_CCCR                    0x00000141  /* 100 MHz memory, 200 MHz CPU  */
-#define CONFIG_SYS_CKEN                    0x00000060  /* FFUART and STUART enabled    */
-#define CONFIG_SYS_ICMR                    0x00000000  /* No interrupts enabled        */
-
-/*
- * Memory settings
- */
-#define CONFIG_SYS_MSC0_VAL            0x00007FF0 /* Not properly calculated - FIXME (DS) */
-#define CONFIG_SYS_MSC1_VAL            0x00000000
-#define CONFIG_SYS_MSC2_VAL            0x00000000
-
-#define CONFIG_SYS_MDCNFG_VAL          0x00000aC9 /* Memory timings for the SDRAM.
-                                             tRP=2, CL=2, tRCD=2, tRAS=5, tRC=8 */
-
-#define CONFIG_SYS_MDREFR_VAL          0x00403018 /* Initial setting, individual       */
-                                          /* bits set in lowlevel_init.S       */
-#define CONFIG_SYS_MDMRS_VAL           0x00000000
-
-#define        CONFIG_SYS_FLYCNFG_VAL          0x00000000
-#define        CONFIG_SYS_SXCNFG_VAL           0x00000000
-
-/*
- * PCMCIA and CF Interfaces
- */
-#define CONFIG_SYS_MECR_VAL            0x00000000  /* Hangover from Lubbock.
-                                              Needs calculating. (DS/CHC) */
-#define CONFIG_SYS_MCMEM0_VAL          0x00010504
-#define CONFIG_SYS_MCMEM1_VAL          0x00010504
-#define CONFIG_SYS_MCATT0_VAL          0x00010504
-#define CONFIG_SYS_MCATT1_VAL          0x00010504
-#define CONFIG_SYS_MCIO0_VAL           0x00004715
-#define CONFIG_SYS_MCIO1_VAL           0x00004715
-
-/*
- * FLASH and environment organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS     1       /* max number of memory banks           */
-#define CONFIG_SYS_MAX_FLASH_SECT      64      /* max number of sectors on one chip    */
-
-/* timeout values are in ticks */
-/* FIXME */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (25*CONFIG_SYS_HZ) /* Timeout for Flash Erase */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (25*CONFIG_SYS_HZ) /* Timeout for Flash Write */
-
-/* Flash protection */
-#define CONFIG_SYS_FLASH_PROTECTION    1
-
-/* FIXME */
-#define CONFIG_ENV_IS_IN_FLASH 1
-#define CONFIG_ENV_ADDR                (PHYS_FLASH_1 + 0x3C000)        /* Addr of Environment Sector   */
-#define CONFIG_ENV_SIZE                0x4000  /* Total Size of Environment */
-#define CONFIG_ENV_SECT_SIZE   0x20000
-
-/* Option added to get around byte ordering issues in the flash driver */
-#define CONFIG_SYS_LITTLE_ENDIAN       1
-
-#endif /* __CONFIG_H */
index 89e17b83f09b5addba016db4dea4862d74d0a34b..9fbf9afe2fb02d8cc3bb7bd78aac525d8b8a6b83 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Ilko Iliev <www.ronetix.at>
  *
@@ -52,6 +52,9 @@
 #undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff  */
 #define CONFIG_SYS_TEXT_BASE   0
 
+#define MACH_TYPE_PM9261       1187
+#define CONFIG_MACH_TYPE       MACH_TYPE_PM9261
+
 /* clocks */
 /* CKGR_MOR - enable main osc. */
 #define CONFIG_SYS_MOR_VAL                                             \
index 1f7543c1336a0b9b1be1f6bde3a3c72c16490438..374be27396fb37724474de47ef773a66dfb12e4d 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  * Ilko Iliev <www.ronetix.at>
  *
@@ -52,6 +52,9 @@
 #undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff  */
 #define CONFIG_SYS_TEXT_BASE   0
 
+#define MACH_TYPE_PM9263       1475
+#define CONFIG_MACH_TYPE       MACH_TYPE_PM9263
+
 /* clocks */
 #define CONFIG_SYS_MOR_VAL                                             \
                (AT91_PMC_MOR_MOSCEN |                                  \
index acc120445184bca895fae680609cabebf85c7c95..5b08d9109765047d9a67ea407a95a5516b715815 100644 (file)
@@ -5,7 +5,7 @@
  * Ronetix GmbH <www.ronetix.at>
  *
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Configuation settings for the PM9G45 board.
@@ -41,6 +41,9 @@
 #define CONFIG_PM9G45          1       /* It's an Ronetix PM9G45 */
 #define CONFIG_SYS_AT91_CPU_NAME       "AT91SAM9G45"
 
+#define MACH_TYPE_PM9G45       2672
+#define CONFIG_MACH_TYPE       MACH_TYPE_PM9G45
+
 /* ARM asynchronous clock */
 #define CONFIG_SYS_AT91_MAIN_CLOCK     12000000 /* from 12 MHz crystal */
 #define CONFIG_SYS_AT91_SLOW_CLOCK     32768           /* slow clock xtal */
diff --git a/include/configs/pxa-common.h b/include/configs/pxa-common.h
new file mode 100644 (file)
index 0000000..e8ddda6
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Toradex Colibri PXA270 configuration file
+ *
+ * Copyright (C) 2010 Marek Vasut <marek.vasut@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
+ */
+
+#ifndef        __CONFIG_PXA_COMMON_H__
+#define        __CONFIG_PXA_COMMON_H__
+
+#define        CONFIG_DISPLAY_CPUINFO
+
+/*
+ * KGDB
+ */
+#ifdef CONFIG_CMD_KGDB
+#define        CONFIG_KGDB_BAUDRATE            230400
+#define        CONFIG_KGDB_SER_INDEX           2
+#endif
+
+/*
+ * MMC Card Configuration
+ */
+#ifdef CONFIG_CMD_MMC
+#define        CONFIG_MMC
+#define        CONFIG_GENERIC_MMC
+#define        CONFIG_PXA_MMC_GENERIC
+#define        CONFIG_CMD_FAT
+#define        CONFIG_CMD_EXT2
+#define        CONFIG_DOS_PARTITION
+#endif
+
+/*
+ * OHCI USB
+ */
+#ifdef CONFIG_CMD_USB
+#define        CONFIG_USB_OHCI_NEW
+#define        CONFIG_SYS_USB_OHCI_CPU_INIT
+#define        CONFIG_SYS_USB_OHCI_BOARD_INIT
+#define        CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS      2
+#define        CONFIG_SYS_USB_OHCI_REGS_BASE           0x4c000000
+#define        CONFIG_SYS_USB_OHCI_SLOT_NAME           "pxa-ohci"
+#define        CONFIG_USB_STORAGE
+#endif
+
+#endif /* __CONFIG_PXA_COMMON_H__ */
index 620d270893e4338f94757d2347f2662e88102b8c..0666f7ba4fdcec13ac67b44d5200ef22fc5da6f4 100644 (file)
@@ -55,7 +55,7 @@
  * High Level Configuration Options
  * (easy to change)
  */
-#define CONFIG_PXA250          1       /* This is an PXA250 CPU    */
+#define CONFIG_CPU_PXA25X              1       /* This is an PXA250 CPU    */
 
 #undef CONFIG_LCD
 #ifdef CONFIG_LCD
 #define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
 
 #define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
+#define        CONFIG_SYS_INIT_SP_ADDR         0xfffff800
 
 /*
  * GPIO settings
index 3346802d13f0f7011a6fb4027242d21a78df2487..3e36bb0788495dfaf9ddfe8df608cd0646c496b8 100644 (file)
@@ -49,8 +49,8 @@
  * Hardware drivers
  */
 
-#define CONFIG_MXC_UART        1
-#define CONFIG_SYS_MX31_UART1  1
+#define CONFIG_MXC_UART
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 
 #define CONFIG_MXC_GPIO
 #define CONFIG_HW_WATCHDOG
index 2d6eb3320f980c49d2d8d59941984cc45cce8217..c1f9ce8a227b612b4e139c7f484ffe51a6256139 100644 (file)
 #define CONFIG_SH_32BIT                1
 #define CONFIG_CPU_SH7757      1
 #define CONFIG_SH7757LCR       1
+#define CONFIG_SH7757LCR_DDR_ECC       1
 
 #define CONFIG_SYS_TEXT_BASE   0x8ef80000
 #define CONFIG_SYS_LDSCRIPT    "board/renesas/sh7757lcr/u-boot.lds"
 
 #define CONFIG_CMD_MEMORY
 #define CONFIG_CMD_NET
+#define CONFIG_CMD_MII
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_NFS
 #define CONFIG_CMD_DFL
 #define CONFIG_SH_ETHER_USE_PORT       0
 #define CONFIG_SH_ETHER_PHY_ADDR       1
 #define CONFIG_SH_ETHER_CACHE_WRITEBACK        1
+#define CONFIG_PHYLIB
+#define CONFIG_BITBANGMII
+#define CONFIG_BITBANGMII_MULTI
 
 #define SH7757LCR_ETHERNET_MAC_BASE_SPI        0x000b0000
 #define SH7757LCR_SPI_SECTOR_SIZE      (64 * 1024)
index b8eb13de455c3088f5ee6b22bf9b81ffa237e63d..59728f575d6491144480adef96d1cb28dcd204ae 100644 (file)
@@ -39,6 +39,7 @@
 #define CONFIG_CMD_FLASH
 #define CONFIG_CMD_MEMORY
 #define CONFIG_CMD_NET
+#define CONFIG_CMD_MII
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_SAVEENV
 #define CONFIG_CMD_NFS
 #define CONFIG_SH_ETHER 1
 #define CONFIG_SH_ETHER_USE_PORT (1)
 #define CONFIG_SH_ETHER_PHY_ADDR (0x01)
+#define CONFIG_PHYLIB
+#define CONFIG_BITBANGMII
+#define CONFIG_BITBANGMII_MULTI
 
 #endif /* __SH7763RDP_H */
index 986aebaae447252f75c07518ffa8ed504b3bcfa3..ec8ec18ec5bb60646dba7ccfec4b539d237faa2f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2007-2008
- * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Stelian Pop <stelian@popies.net>
  * Lead Tech Design <www.leadtechdesign.com>
  *
  * Copyright (C) 2009
index 2d55044ededb15eb915422fbaefe6e3fe83833a6..af464e1bea3d68c20fe7d41fca009ea8defce1ce 100644 (file)
@@ -40,7 +40,7 @@
  * High Level Configuration Options
  * (easy to change)
  */
-#define CONFIG_PXA27X          1       /* This is an PXA27x CPU    */
+#define CONFIG_CPU_PXA27X              1       /* This is an PXA27x CPU    */
 
 #define CONFIG_MMC             1
 #define CONFIG_BOARD_LATE_INIT
index 6ef25cd6477755a94cf63dd3fe25c30ced5530c4..a553712699b6b2a4b6be02c10036785e54cde359 100644 (file)
  * make sure that the transceiver is enabled during PL=1 for testing!
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX31_UART2
+#define CONFIG_MXC_UART_BASE   UART2_BASE
 
 #define CONFIG_MXC_SPI
 #define CONFIG_MXC_GPIO
index f77c546687cee27b4c81d557666c19e53252eaa4..87bd8a6756ca98e2948a6bb2b91182a6b148e559 100644 (file)
@@ -90,7 +90,7 @@
  * Serial Info
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX25_UART1
+#define CONFIG_MXC_UART_BASE   UART1_BASE
 #define CONFIG_CONS_INDEX      1       /* use UART0 for console */
 #define CONFIG_BAUDRATE                115200  /* Default baud rate */
 #define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
index f321ad2dbc3ff5950c50a583a7440b3a8b9a1324..35b71f79e6320aaaa3588b0c9e57cb0422b8798b 100644 (file)
@@ -54,7 +54,7 @@
  * Hardware drivers
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX51_UART3
+#define CONFIG_MXC_UART_BASE   UART3_BASE
 #define CONFIG_MXC_GPIO
 #define CONFIG_MXC_SPI
 #define CONFIG_HW_WATCHDOG
index 9db4d999b713fe206f5087aea92a158a2fa364b8..7802f4449d16d7450ec2f0c95b0feaab41afdd63 100644 (file)
 /*
  * High Level Board Configuration Options
  */
-#define        CONFIG_PXA27X           1       /* Marvell PXA270 CPU */
+#define        CONFIG_CPU_PXA27X               1       /* Marvell PXA270 CPU */
 #define        CONFIG_VPAC270          1       /* Voipac PXA270 board */
-#define        CONFIG_SYS_TEXT_BASE    0x0
+#define        CONFIG_SYS_TEXT_BASE    0xa0000000
+
+#ifdef CONFIG_ONENAND
+#define        CONFIG_SPL
+#define        CONFIG_SPL_ONENAND_SUPPORT
+#define        CONFIG_SPL_ONENAND_LOAD_ADDR    0x2000
+#define        CONFIG_SPL_ONENAND_LOAD_SIZE    \
+       (512 * 1024 - CONFIG_SPL_ONENAND_LOAD_ADDR)
+#define        CONFIG_SPL_TEXT_BASE    0x5c000000
+#define        CONFIG_SPL_LDSCRIPT     "board/vpac270/u-boot-spl.lds"
+#endif
 
 /*
  * Environment settings
                "bootm 0xa4000000; "                                    \
        "fi; "                                                          \
        "bootm 0x60000;"
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "update_onenand="                                               \
+               "onenand erase 0x0 0x80000 ; "                          \
+               "onenand write 0xa0000000 0x0 0x80000"
+
 #define        CONFIG_BOOTARGS                 "console=tty0 console=ttyS0,115200"
 #define        CONFIG_TIMESTAMP
 #define        CONFIG_BOOTDELAY                2       /* Autoboot delay */
 #define        CONFIG_CMDLINE_TAG
 #define        CONFIG_SETUP_MEMORY_TAGS
 #define        CONFIG_LZMA                     /* LZMA compression support */
+#define        CONFIG_OF_LIBFDT
 
 /*
  * Serial Console Configuration
  */
 #ifdef CONFIG_CMD_MMC
 #define        CONFIG_MMC
-#define        CONFIG_PXA_MMC
+#define        CONFIG_GENERIC_MMC
+#define        CONFIG_PXA_MMC_GENERIC
 #define        CONFIG_SYS_MMC_BASE             0xF0000000
 #define        CONFIG_CMD_FAT
 #define        CONFIG_CMD_EXT2
 #define        CONFIG_SYS_MAXARGS              16
 #define        CONFIG_SYS_BARGSIZE             CONFIG_SYS_CBSIZE
 #define        CONFIG_SYS_DEVICE_NULLDEV       1
+#define        CONFIG_CMDLINE_EDITING          1
+#define        CONFIG_AUTO_COMPLETE            1
 
 /*
  * Clock Configuration
 #define        CONFIG_SYS_MEMTEST_END          0xa0800000      /* 4 ... 8 MB in DRAM */
 
 #define        CONFIG_SYS_LOAD_ADDR            PHYS_SDRAM_1
-#define        CONFIG_SYS_IPL_LOAD_ADDR        (0x5c000000)
 #define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         \
-       (PHYS_SDRAM_1 + GENERATED_GBL_DATA_SIZE + 2048)
+#define        CONFIG_SYS_INIT_SP_ADDR         0x5c010000
 
 /*
  * NOR FLASH
  */
 #define        CONFIG_SYS_MONITOR_BASE         0x0
-#define        CONFIG_SYS_MONITOR_LEN          0x40000
+#define        CONFIG_SYS_MONITOR_LEN          0x80000
 #define        CONFIG_ENV_ADDR                 \
                        (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
-#define        CONFIG_ENV_SIZE                 0x4000
+#define        CONFIG_ENV_SIZE                 0x20000
+#define        CONFIG_ENV_SECT_SIZE            0x20000
 
 #if    defined(CONFIG_CMD_FLASH)       /* NOR */
 #define        PHYS_FLASH_1                    0x00000000      /* Flash Bank #1 */
 
 #define        CONFIG_ENV_IS_IN_FLASH          1
 
-/*
- * The first four sectors of the NOR flash are 0x8000 bytes big, the rest of the
- * flash consists of 0x20000 bytes big sectors.
- */
-#if    (CONFIG_ENV_ADDR <= 0x18000)
-#define        CONFIG_ENV_SECT_SIZE            0x8000
-#else
-#define        CONFIG_ENV_SECT_SIZE            0x20000
-#endif
-
 #elif  defined(CONFIG_CMD_ONENAND)     /* OneNAND */
 #define        CONFIG_SYS_NO_FLASH
 #define        CONFIG_SYS_ONENAND_BASE         0x00000000
 
 #define        CONFIG_ENV_IS_IN_ONENAND        1
-#define        CONFIG_ENV_SECT_SIZE            0x20000
 
 #else  /* No flash */
 #define        CONFIG_SYS_NO_FLASH
index 6dce8aeaf1e0f0cf8f7d5037c2ee33e08dec3a34..941f80cb974daae8c6ce29e40f3386c3461bdfb0 100644 (file)
@@ -40,7 +40,7 @@
  * High Level Configuration Options
  * (easy to change)
  */
-#define CONFIG_PXA250          1       /* This is an PXA255 CPU    */
+#define CONFIG_CPU_PXA25X              1       /* This is an PXA255 CPU    */
 #define CONFIG_XAENIAX         1       /* on a xaeniax board       */
 #define        CONFIG_SYS_TEXT_BASE    0x0
 
 #define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
 
 #define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
+#define        CONFIG_SYS_INIT_SP_ADDR         0xfffff800
 
 /*
  * FLASH and environment organization
diff --git a/include/configs/xm250.h b/include/configs/xm250.h
deleted file mode 100644 (file)
index a35bce3..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * (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>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public 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_PXA250         1        /* This is an PXA250 CPU        */
-#define CONFIG_XM250          1        /* on a MicroSys XM250 Board    */
-#undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff  */
-#define        CONFIG_SYS_TEXT_BASE    0x0
-
-/* we will never enable dcache, because we have to setup MMU first */
-#define CONFIG_SYS_DCACHE_OFF
-
-/*
- * Size of malloc() pool; this lives below the uppermost 128 KiB which are
- * used for the RAM copy of the uboot code
- *
- */
-#define CONFIG_SYS_MALLOC_LEN          (256*1024)
-
-/*
- * Hardware drivers
- */
-#define CONFIG_SMC91111
-#define CONFIG_SMC91111_BASE           0x04000300
-#undef CONFIG_SMC91111_EXT_PHY
-#define CONFIG_SMC_USE_32_BIT
-#undef CONFIG_SHOW_ACTIVITY
-#define CONFIG_NET_RETRY_COUNT         10         /* # of retries              */
-
-/*
- * I2C bus
- */
-#define CONFIG_I2C_MV                  1
-#define CONFIG_MV_I2C_REG              0x40301680
-#define CONFIG_HARD_I2C                        1
-#define CONFIG_SYS_I2C_SPEED                   50000
-#define CONFIG_SYS_I2C_SLAVE                   0xfe
-
-#define CONFIG_RTC_PCF8563             1
-#define CONFIG_SYS_I2C_RTC_ADDR                0x51
-
-#define CONFIG_SYS_I2C_EEPROM_ADDR             0x58    /* A0 = 0 (hardwired)           */
-#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS      4       /* 4 bits = 16 octets           */
-#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS  10      /* between stop and start       */
-#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN         1       /* length of address            */
-#define CONFIG_SYS_EEPROM_SIZE                 2048    /* size in bytes                */
-#undef CONFIG_SYS_I2C_INIT_BOARD                       /* board has no own init        */
-
-/*
- * select serial console configuration
- */
-#define CONFIG_PXA_SERIAL
-#define CONFIG_FFUART         1       /* we use FFUART */
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE                115200
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_ELF
-#define CONFIG_CMD_EEPROM
-#define CONFIG_CMD_DATE
-#define CONFIG_CMD_I2C
-
-
-#define CONFIG_BOOTDELAY       3
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_SYS_LONGHELP                            /* undef to save memory         */
-#define CONFIG_SYS_PROMPT              "=> "           /* Monitor Command Prompt       */
-#define CONFIG_SYS_CBSIZE              256             /* Console I/O Buffer Size      */
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
-#define CONFIG_SYS_MAXARGS             16              /* max number of command args   */
-#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE       /* Boot Argument Buffer Size    */
-
-#define CONFIG_SYS_MEMTEST_START       0xa0400000      /* memtest works on             */
-#define CONFIG_SYS_MEMTEST_END         0xa0800000      /* 4 ... 8 MB in DRAM           */
-
-#define CONFIG_SYS_LOAD_ADDR           0xa3000000      /* default load address */
-
-#define CONFIG_SYS_HZ                  1000
-#define CONFIG_SYS_CPUSPEED            0x161           /* set core clock to 400/400/100 MHz */
-
-                                               /* valid baudrates */
-
-#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
-
-/*
- * Definitions related to passing arguments to kernel.
- */
-#define CONFIG_CMDLINE_TAG      1       /* send commandline to Kernel          */
-#define CONFIG_SETUP_MEMORY_TAGS 1      /* send memory definition to kernel    */
-#define        CONFIG_INITRD_TAG        1       /* do not send initrd params           */
-
-/*
- * 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
-#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 #1     */
-#define PHYS_FLASH_SIZE                0x01000000 /* 16 MB             */
-#define PHYS_FLASH_BANK_SIZE   0x01000000 /* 16 MB Banks       */
-#define PHYS_FLASH_SECT_SIZE   0x00040000 /* 256 KB sectors (x2) */
-
-#define CONFIG_SYS_DRAM_BASE           0xa0000000
-#define CONFIG_SYS_DRAM_SIZE           0x04000000
-
-#define CONFIG_SYS_FLASH_BASE          PHYS_FLASH_1
-
-#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define        CONFIG_SYS_INIT_SP_ADDR         (GENERATED_GBL_DATA_SIZE + PHYS_SDRAM_1)
-
-/*
- * FLASH and environment organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS     1     /* max number of memory banks             */
-#define CONFIG_SYS_MAX_FLASH_SECT      128   /* max number of sectors on one chip      */
-
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (2*CONFIG_SYS_HZ)       /* Timeout for Flash Erase      */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (2*CONFIG_SYS_HZ)       /* Timeout for Flash Write      */
-#define CONFIG_SYS_FLASH_LOCK_TOUT     (2*CONFIG_SYS_HZ)       /* Timeout for Flash Set Lock Bit */
-#define CONFIG_SYS_FLASH_UNLOCK_TOUT   (2*CONFIG_SYS_HZ)       /* Timeout for Flash Clear Lock Bits */
-#define CONFIG_SYS_FLASH_PROTECTION                    /* "Real" (hardware) sectors protection */
-
-#define CONFIG_ENV_IS_IN_FLASH 1
-#define CONFIG_ENV_ADDR                (PHYS_FLASH_1 + 0x40000)        /* Addr of Environment Sector   */
-#define CONFIG_ENV_SIZE                0x4000
-#define CONFIG_ENV_SECT_SIZE   0x40000                         /* Size of the Environment Sector       */
-#define CONFIG_SYS_MONITOR_LEN         0x20000                         /* 128 KiB */
-
-/******************************************************************************
- *
- * CPU specific defines
- *
- ******************************************************************************/
-
-/*
- * GPIO settings
- *
- * GPIO pin assignments
- * GPIO            Name        Dir Out AF
- * 0       NC
- * 1       NC
- * 2       SIRQ1       I
- * 3       SIRQ2       I
- * 4       SIRQ3       I
- * 5       DMAACK1     O   0
- * 6       DMAACK2     O   0
- * 7       DMAACK3     O   0
- * 8       TC1         O   0
- * 9       TC2         O   0
- * 10      TC3         O   0
- * 11      nDMAEN      O   1
- * 12      AENCTRL     O   0
- * 13      PLDTC       O   0
- * 14      ETHIRQ      I
- * 15      NC
- * 16      NC
- * 17      NC
- * 18      RDY         I
- * 19      DMASIO      I
- * 20      ETHIRQ      NC
- * 21      NC
- * 22      PGMEN       O   1    FIXME for debug only enable flash
- * 23      NC
- * 24      NC
- * 25      NC
- * 26      NC
- * 27      NC
- * 28      NC
- * 29      NC
- * 30      NC
- * 31      NC
- * 32      NC
- * 33      NC
- * 34      FFRXD       I       01
- * 35      FFCTS       I       01
- * 36      FFDCD       I       01
- * 37      FFDSR       I       01
- * 38      FFRI        I       01
- * 39      FFTXD       O   1   10
- * 40      FFDTR       O   0   10
- * 41      FFRTS       O   0   10
- * 42      RS232FOFF   O   0   00
- * 43      NC
- * 44      NC
- * 45      IRSL0       O   0
- * 46      IRRX0       I       01
- * 47      IRTX0       O   0   10
- * 48      NC
- * 49      nIOWE       O   0
- * 50      NC
- * 51      NC
- * 52      NC
- * 53      NC
- * 54      NC
- * 55      NC
- * 56      NC
- * 57      NC
- * 58      DKDIRQ      I
- * 59      NC
- * 60      NC
- * 61      NC
- * 62      NC
- * 63      NC
- * 64      COMLED      O   0
- * 65      COMLED      O   0
- * 66      COMLED      O   0
- * 67      COMLED      O   0
- * 68      COMLED      O   0
- * 69      COMLED      O   0
- * 70      COMLED      O   0
- * 71      COMLED      O   0
- * 72      NC
- * 73      NC
- * 74      NC
- * 75      NC
- * 76      NC
- * 77      NC
- * 78      CSIO        O   1
- * 79      NC
- * 80      CSETH       O   1
- *
- * NOTE: All NC's are defined to be outputs
- *
- */
-/* Pin direction control */
-#define CONFIG_SYS_GPDR0_VAL       0xd3808000
-#define CONFIG_SYS_GPDR1_VAL       0xfcffab83
-#define CONFIG_SYS_GPDR2_VAL       0x0001ffff
-/* Set and Clear registers */
-#define CONFIG_SYS_GPSR0_VAL       0x00008000
-#define CONFIG_SYS_GPSR1_VAL       0x00ff0002
-#define CONFIG_SYS_GPSR2_VAL       0x0001c000
-#define CONFIG_SYS_GPCR0_VAL       0x00000000
-#define CONFIG_SYS_GPCR1_VAL       0x00000000
-#define CONFIG_SYS_GPCR2_VAL       0x00000000
-/* Edge detect registers (these are set by the kernel) */
-#define CONFIG_SYS_GRER0_VAL       0x00002180
-#define CONFIG_SYS_GRER1_VAL       0x00000000
-#define CONFIG_SYS_GRER2_VAL       0x00000000
-#define CONFIG_SYS_GFER0_VAL       0x000043e0
-#define CONFIG_SYS_GFER1_VAL       0x00000000
-#define CONFIG_SYS_GFER2_VAL       0x00000000
-/* Alternate function registers */
-#define CONFIG_SYS_GAFR0_L_VAL     0x80000004
-#define CONFIG_SYS_GAFR0_U_VAL     0x595a8010
-#define CONFIG_SYS_GAFR1_L_VAL     0x699a9559
-#define CONFIG_SYS_GAFR1_U_VAL     0xaaa5aaaa
-#define CONFIG_SYS_GAFR2_L_VAL     0xaaaaaaaa
-#define CONFIG_SYS_GAFR2_U_VAL     0x00000002
-
-/*
- * Clocks, power control and interrupts
- */
-#define CONFIG_SYS_PSSR_VAL        0x00000030
-#define CONFIG_SYS_CCCR                    0x00000161  /* 100 MHz memory, 400 MHz CPU, 400 Turbo  */
-#define CONFIG_SYS_CKEN                    0x000141ec  /* FFUART and STUART enabled    */
-#define CONFIG_SYS_ICMR                    0x00000000  /* No interrupts enabled        */
-
-/* FIXME
- *
- * RTC settings
- * Watchdog
- *
- */
-
-/*
- * Memory settings
- *
- */
-#define CONFIG_SYS_MSC0_VAL        0x122423f0  /* FLASH   / LAN            (cs0)/(cS1)   */
-#define CONFIG_SYS_MSC1_VAL        0x35f4aa4c  /* USB     / ST3+ST5        (cs2)/(cS3)   */
-#define CONFIG_SYS_MSC2_VAL        0x35f435fc  /* IDE     / BCR + WatchDog (cs4)/(cS5)   */
-#define CONFIG_SYS_MDCNFG_VAL      0x000009c9
-#define CONFIG_SYS_MDMRS_VAL       0x00220022
-#define CONFIG_SYS_MDREFR_VAL      0x000da018  /* Initial setting, individual bits set in lowlevel_init.S */
-#define        CONFIG_SYS_FLYCNFG_VAL          0x00000000
-#define        CONFIG_SYS_SXCNFG_VAL           0x00000000
-
-/*
- * PCMCIA and CF Interfaces (NOT USED, these values from lubbock init)
- */
-#define CONFIG_SYS_MECR_VAL          0x00000000
-#define CONFIG_SYS_MCMEM0_VAL        0x00010504
-#define CONFIG_SYS_MCMEM1_VAL        0x00010504
-#define CONFIG_SYS_MCATT0_VAL        0x00010504
-#define CONFIG_SYS_MCATT1_VAL        0x00010504
-#define CONFIG_SYS_MCIO0_VAL         0x00004715
-#define CONFIG_SYS_MCIO1_VAL         0x00004715
-
-/* Board specific defines */
-
-#ifndef __ASSEMBLY__
-
-/* global prototypes */
-void led_code(int code, int color);
-
-#endif
-
-#endif /* __CONFIG_H */
index 9505007a8eb7deb421f93c613d3f488e4ddc1eb7..26204af2c29c9407eed3a79485b754b0d2534d28 100644 (file)
@@ -25,7 +25,7 @@
 /*
  * High Level Board Configuration Options
  */
-#define        CONFIG_PXA27X           1       /* Marvell PXA270 CPU */
+#define        CONFIG_CPU_PXA27X               1       /* Marvell PXA270 CPU */
 #define        CONFIG_ZIPITZ2          1       /* Zipit Z2 board */
 #define        CONFIG_SYS_TEXT_BASE    0x0
 
index 9a7a27ac1d45cfc79ac7d28bdf7c2f0e4bd40686..599d5bb42aacc9f3a9b24106b958f27a763c6acc 100644 (file)
@@ -66,7 +66,7 @@
  * Serial
  */
 #define CONFIG_MXC_UART
-#define CONFIG_SYS_MX25_UART2
+#define CONFIG_MXC_UART_BASE   UART2_BASE
 #define CONFIG_CONS_INDEX      1       /* use UART2 for console */
 #define CONFIG_BAUDRATE                115200  /* Default baud rate */
 #define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
index 96ac0975a63d037cf8426bea853ebe4458ce3578..94f86b3a306c21ea5fd79b2e63035f0e7ffc1d14 100644 (file)
@@ -207,7 +207,10 @@ extern int addr2ram(ulong addr);
 extern int dataflash_real_protect (int flag, unsigned long start_addr, unsigned long end_addr);
 extern int addr_dataflash (unsigned long addr);
 extern int read_dataflash (unsigned long addr, unsigned long size, char *result);
-extern int write_dataflash (unsigned long addr, unsigned long dest, unsigned long size);
+extern int write_dataflash(unsigned long addr_dest, unsigned long addr_src,
+                       unsigned long size);
+extern int AT91F_DataflashInit(void);
+
 extern void dataflash_print_info (void);
 extern void dataflash_perror (int err);
 extern void AT91F_DataflashSetEnv (void);
index 40a04635600963b827c6420062f581b78aa4c696..a9230b9108ed46e3c3915bcb433279662ad86c40 100644 (file)
@@ -325,5 +325,12 @@ extern unsigned int ddr3_spd_check(const ddr3_spd_eeprom_t *spd);
 #define DDR3_SPD_MODULETYPE_MICRO_DIMM (0x04)
 #define DDR3_SPD_MODULETYPE_MINI_RDIMM (0x05)
 #define DDR3_SPD_MODULETYPE_MINI_UDIMM (0x06)
+#define DDR3_SPD_MODULETYPE_MINI_CDIMM (0x07)
+#define DDR3_SPD_MODULETYPE_72B_SO_UDIMM       (0x08)
+#define DDR3_SPD_MODULETYPE_72B_SO_RDIMM       (0x09)
+#define DDR3_SPD_MODULETYPE_72B_SO_CDIMM       (0x0A)
+#define DDR3_SPD_MODULETYPE_LRDIMM     (0x0B)
+#define DDR3_SPD_MODULETYPE_16B_SO_DIMM        (0x0C)
+#define DDR3_SPD_MODULETYPE_32B_SO_DIMM        (0x0D)
 
 #endif /* _DDR_SPD_H_ */
index 6394a96c357d45c7112d75cc2edbbbd51e164a09..3c145af938ab99c98934815bdd09a017e2d7a1dd 100644 (file)
  */
 
 #if defined(CONFIG_ENV_IS_IN_FLASH)
-# ifndef  CONFIG_ENV_ADDR
-#  define CONFIG_ENV_ADDR      (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
+# ifndef       CONFIG_ENV_ADDR
+#  define      CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
 # endif
-# ifndef  CONFIG_ENV_OFFSET
-#  define CONFIG_ENV_OFFSET (CONFIG_ENV_ADDR - CONFIG_SYS_FLASH_BASE)
+# ifndef       CONFIG_ENV_OFFSET
+#  define      CONFIG_ENV_OFFSET (CONFIG_ENV_ADDR - CONFIG_SYS_FLASH_BASE)
 # endif
 # if !defined(CONFIG_ENV_ADDR_REDUND) && defined(CONFIG_ENV_OFFSET_REDUND)
-#  define CONFIG_ENV_ADDR_REDUND       (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET_REDUND)
+#  define      CONFIG_ENV_ADDR_REDUND  \
+               (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET_REDUND)
 # endif
 # if defined(CONFIG_ENV_SECT_SIZE) || defined(CONFIG_ENV_SIZE)
-#  ifndef  CONFIG_ENV_SECT_SIZE
-#   define CONFIG_ENV_SECT_SIZE        CONFIG_ENV_SIZE
+#  ifndef      CONFIG_ENV_SECT_SIZE
+#   define     CONFIG_ENV_SECT_SIZE    CONFIG_ENV_SIZE
 #  endif
-#  ifndef  CONFIG_ENV_SIZE
-#   define CONFIG_ENV_SIZE     CONFIG_ENV_SECT_SIZE
+#  ifndef      CONFIG_ENV_SIZE
+#   define     CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
 #  endif
 # else
 #  error "Both CONFIG_ENV_SECT_SIZE and CONFIG_ENV_SIZE undefined"
@@ -60,8 +61,9 @@
 # if defined(CONFIG_ENV_ADDR_REDUND) && !defined(CONFIG_ENV_SIZE_REDUND)
 #  define CONFIG_ENV_SIZE_REDUND       CONFIG_ENV_SIZE
 # endif
-# if (CONFIG_ENV_ADDR >= CONFIG_SYS_MONITOR_BASE) && \
-     (CONFIG_ENV_ADDR+CONFIG_ENV_SIZE) <= (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
+# if   (CONFIG_ENV_ADDR >= CONFIG_SYS_MONITOR_BASE) &&         \
+       (CONFIG_ENV_ADDR + CONFIG_ENV_SIZE) <=                  \
+       (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
 #  define ENV_IS_EMBEDDED      1
 # endif
 # if defined(CONFIG_ENV_ADDR_REDUND) || defined(CONFIG_ENV_OFFSET_REDUND)
@@ -105,10 +107,10 @@ extern unsigned long nand_env_oob_offset;
 
 /* Embedded env is only supported for some flash types */
 #ifdef CONFIG_ENV_IS_EMBEDDED
-# if !defined(CONFIG_ENV_IS_IN_FLASH) && \
-     !defined(CONFIG_ENV_IS_IN_NAND) && \
-     !defined(CONFIG_ENV_IS_IN_ONENAND) && \
-     !defined(CONFIG_ENV_IS_IN_SPI_FLASH)
+# if   !defined(CONFIG_ENV_IS_IN_FLASH)        && \
+       !defined(CONFIG_ENV_IS_IN_NAND)         && \
+       !defined(CONFIG_ENV_IS_IN_ONENAND)      && \
+       !defined(CONFIG_ENV_IS_IN_SPI_FLASH)
 #  error "CONFIG_ENV_IS_EMBEDDED not supported for your flash type"
 # endif
 #endif
@@ -141,10 +143,13 @@ extern unsigned long nand_env_oob_offset;
 # define ENV_HEADER_SIZE       (sizeof(uint32_t))
 #endif
 
+#if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
+extern char *env_name_spec;
+#endif
 
 #define ENV_SIZE (CONFIG_ENV_SIZE - ENV_HEADER_SIZE)
 
-typedef        struct environment_s {
+typedef struct environment_s {
        uint32_t        crc;            /* CRC32 over data bytes        */
 #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
        unsigned char   flags;          /* active/obsolete flags        */
@@ -152,6 +157,20 @@ typedef    struct environment_s {
        unsigned char   data[ENV_SIZE]; /* Environment data             */
 } env_t;
 
+#ifdef ENV_IS_EMBEDDED
+extern env_t environment;
+#endif /* ENV_IS_EMBEDDED */
+
+extern const unsigned char default_environment[];
+extern env_t *env_ptr;
+
+extern void env_relocate_spec(void);
+extern unsigned char env_get_char_spec(int);
+
+#if defined(CONFIG_NEEDS_MANUAL_RELOC)
+extern void env_reloc(void);
+#endif
+
 #ifndef DO_DEPS_ONLY
 
 #include <search.h>
@@ -159,14 +178,14 @@ typedef   struct environment_s {
 extern struct hsearch_data env_htab;
 
 /* Function that returns a character from the environment */
-unsigned char env_get_char (int);
+unsigned char env_get_char(int);
 
 /* Function that returns a pointer to a value from the environment */
 const unsigned char *env_get_addr(int);
-unsigned char env_get_char_memory (int index);
+unsigned char env_get_char_memory(int index);
 
 /* Function that updates CRC of the enironment */
-void env_crc_update (void);
+void env_crc_update(void);
 
 /* [re]set to the default environment */
 void set_default_env(const char *s);
@@ -174,6 +193,6 @@ void set_default_env(const char *s);
 /* Import from binary representation into hash table */
 int env_import(const char *buf, int check);
 
-#endif
+#endif /* DO_DEPS_ONLY */
 
-#endif /* _ENVIRONMENT_H_ */
+#endif /* _ENVIRONMENT_H_ */
index 94925664ee6eccc8318b10854071d18614665209..63aa4b264a17e70687c5e2aab8851d374f2a9b45 100644 (file)
@@ -3,8 +3,6 @@
 
 #ifndef __ASSEMBLY__
 
-#include <common.h>
-
 /* These are declarations of exported functions available in C code */
 unsigned long get_version(void);
 int  getc(void);
@@ -12,7 +10,7 @@ int  tstc(void);
 void putc(const char);
 void puts(const char*);
 int printf(const char* fmt, ...);
-void install_hdlr(int, interrupt_handler_t*, void*);
+void install_hdlr(int, void (*interrupt_handler_t)(void *), void*);
 void free_hdlr(int);
 void *malloc(size_t);
 void free(void*);
@@ -30,7 +28,6 @@ int ustrtoul(const char *cp, char **endp, unsigned int base);
 int i2c_write (uchar, uint, int , uchar* , int);
 int i2c_read (uchar, uint, int , uchar* , int);
 #endif
-#include <spi.h>
 
 void app_startup(char * const *);
 
index c7b4605f06e760ede18cb4fc8bedd66165434e98..cef3c6509d129b2dda20db93f358b48b96723a4b 100644 (file)
@@ -28,8 +28,8 @@
 
 #include <fdt.h>
 
-u32 fdt_getprop_u32_default(void *fdt, const char *path, const char *prop,
-                               const u32 dflt);
+u32 fdt_getprop_u32_default(const void *fdt, const char *path,
+                               const char *prop, const u32 dflt);
 int fdt_chosen(void *fdt, int force);
 int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force);
 void do_fixup_by_path(void *fdt, const char *path, const char *prop,
index c0b1b5c3d74a6876ecd7da9da34677fcb554b09e..e7a072bbe8b59595bde8a010e23f077292d3500d 100644 (file)
 #ifndef __GDSYS_FPGA_H
 #define __GDSYS_FPGA_H
 
+int init_func_fpga(void);
+
 enum {
        FPGA_STATE_DONE_FAILED = 1 << 0,
        FPGA_STATE_REFLECTION_FAILED = 1 << 1,
+       FPGA_STATE_PLATFORM = 1 << 2,
 };
 
 int get_fpga_state(unsigned dev);
@@ -68,6 +71,22 @@ typedef struct ihs_fpga {
 } ihs_fpga_t;
 #endif
 
+#ifdef CONFIG_IO64
+typedef struct ihs_fpga {
+       u16 reflection_low;     /* 0x0000 */
+       u16 versions;           /* 0x0002 */
+       u16 fpga_features;      /* 0x0004 */
+       u16 fpga_version;       /* 0x0006 */
+       u16 reserved_0[5];      /* 0x0008 */
+       u16 quad_serdes_reset;  /* 0x0012 */
+       u16 reserved_1[502];    /* 0x0014 */
+       u16 ch0_status_int;     /* 0x0400 */
+       u16 ch0_config_int;     /* 0x0402 */
+       u16 reserved_2[7677];   /* 0x0404 */
+       u16 reflection_high;    /* 0x3ffe */
+} ihs_fpga_t;
+#endif
+
 #ifdef CONFIG_IOCON
 typedef struct ihs_fpga {
        u16 reflection_low;     /* 0x0000 */
index c56a18df70dd8f560bf60c2f7eb1b1cbb99016fc..466c98018fdc8f93b89cb4ebe4ad1853c6673e2c 100644 (file)
 #define IH_ARCH_AVR32          17      /* AVR32        */
 #define IH_ARCH_ST200          18      /* STMicroelectronics ST200  */
 #define IH_ARCH_SANDBOX                19      /* Sandbox architecture (test only) */
-#define IH_ARCH_NDS32          19      /* ANDES Technology - NDS32  */
+#define IH_ARCH_NDS32          20      /* ANDES Technology - NDS32  */
 
 /*
  * Image Types
 #define IH_TYPE_UBLIMAGE       11      /* Davinci UBL Image            */
 #define IH_TYPE_OMAPIMAGE      12      /* TI OMAP Config Header Image  */
 #define IH_TYPE_AISIMAGE       13      /* TI Davinci AIS Image         */
+#define IH_TYPE_KERNEL_NOLOAD  14      /* OS Kernel Image, can run from any load address */
 
 /*
  * Compression Types
index 89cc90c0b9327742135e91fb9f37b8025cf0eb1c..d95feeb791d713355e997f95fe2c908a1fcfa8a4 100644 (file)
@@ -87,7 +87,8 @@ typedef struct vidinfo {
        u_char  vl_wbf;         /* Wait between frames */
 } vidinfo_t;
 
-#elif defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
+#elif defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
+       defined CONFIG_CPU_MONAHANS
 /*
  * PXA LCD DMA descriptor
  */
@@ -195,7 +196,7 @@ typedef struct vidinfo {
        void    *priv;          /* Pointer to driver-specific data */
 } vidinfo_t;
 
-#endif /* CONFIG_MPC823, CONFIG_PXA250 or CONFIG_MCC200 or CONFIG_ATMEL_LCD */
+#endif /* CONFIG_MPC823, CONFIG_CPU_PXA25X, CONFIG_MCC200, CONFIG_ATMEL_LCD */
 
 extern vidinfo_t panel_info;
 
@@ -210,6 +211,8 @@ void        lcd_disable     (void);
 void   lcd_putc        (const char c);
 void   lcd_puts        (const char *s);
 void   lcd_printf      (const char *fmt, ...);
+void   lcd_clear(void);
+int    lcd_display_bitmap(ulong bmp_image, int x, int y);
 
 /* Allow boards to customize the information displayed */
 void lcd_show_board_info(void);
index 987a2ec85d1a36e40559f300cf153077a9ef3fa9..1cdc7ae279352b982127566987497e9eb12bba4e 100644 (file)
@@ -623,4 +623,11 @@ struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd)
        return chip->priv;
 }
 
+/* Standard NAND functions from nand_base.c */
+void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
+void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len);
+void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len);
+void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len);
+uint8_t nand_read_byte(struct mtd_info *mtd);
+
 #endif /* __LINUX_MTD_NAND_H */
index 8138bb72fac47eee36ca5b7d5d76655bce5aa2aa..ea4127215e2235c8f5ac4d1b52a140e4708de5c6 100644 (file)
 #define VCAM_3_0       (3 << 16)
 #define VCAM_MASK      (3 << 16)
 
+/* Reg Mode 0 */
+#define VGEN1EN                (1 << 0)
+#define VGEN1STBY      (1 << 1)
+#define VGEN1MODE      (1 << 2)
+#define VIOHIEN                (1 << 3)
+#define VIOHISTBY      (1 << 4)
+#define VDIGEN         (1 << 9)
+#define VDIGSTBY       (1 << 10)
+#define VGEN2EN                (1 << 12)
+#define VGEN2STBY      (1 << 13)
+#define VGEN2MODE      (1 << 14)
+#define VPLLEN         (1 << 15)
+#define VPLLSTBY       (1 << 16)
+#define VUSBEN         (1 << 18)
+#define VUSBSTBY       (1 << 19)
+
 /* Reg Mode 1 */
 #define VGEN3EN                (1 << 0)
 #define VGEN3STBY      (1 << 1)
index b4140794c52980b1e4eed91dd1e6e29bf47dfac3..d444ddcefea7c37a9dbb96aa97f10109b39cd0ce 100644 (file)
@@ -135,9 +135,6 @@ int nand_get_lock_status(nand_info_t *meminfo, loff_t offset);
 int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst);
 void nand_deselect(void);
 
-void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len);
-void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len);
-
 #ifdef CONFIG_SYS_NAND_SELECT_DEVICE
 void board_nand_select_device(struct nand_chip *nand, int chip);
 #endif
index ad9afbf417d64a1b239a967c30d75e94049dc59a..fa5d525f6d964c3a58d4af0cfd637c805fc19eae 100644 (file)
@@ -33,7 +33,8 @@
 
 #define PKTALIGN       32
 
-typedef ulong          IPaddr_t;
+/* IPv4 addresses are always 32 bits in size */
+typedef u32            IPaddr_t;
 
 
 /**
index 92279d56ec6b1851377a88428c371646b33583e3..f321d8a99fddc6519698b552fd49fa91b3b6c756 100644 (file)
@@ -52,4 +52,7 @@ extern int flexonenand_set_boundary(struct mtd_info *mtd, int die,
 extern void s3c64xx_onenand_init(struct mtd_info *);
 extern void s3c64xx_set_width_regs(struct onenand_chip *);
 
+/* SPL */
+void onenand_spl_load_image(uint32_t offs, uint32_t size, void *dst);
+
 #endif /* __UBOOT_ONENAND_H */
index 2506088b4f535087beb55fdbd38dbb95ad72c3cd..67b364e6ab1a9e0139a34da9a39371fe8e131e82 100644 (file)
@@ -1,9 +1,34 @@
+/*
+ * (C) Copyright 2011
+ * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.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 __PCA9698_H_
 #define __PCA9698_H_
 
-int pca9698_direction_input(u8 chip, unsigned offset);
-int pca9698_direction_output(u8 chip, unsigned offset);
-int pca9698_get_input(u8 chip, unsigned offset);
-int pca9698_set_output(u8 chip, unsigned offset, int value);
+int pca9698_request(unsigned gpio, const char *label);
+void pca9698_free(unsigned gpio);
+int pca9698_direction_input(u8 addr, unsigned gpio);
+int pca9698_direction_output(u8 addr, unsigned gpio, int value);
+int pca9698_get_value(u8 addr, unsigned gpio);
+int pca9698_set_value(u8 addr, unsigned gpio, int value);
 
 #endif /* __PCA9698_H_ */
index 0690938046844a769ee340ad4e175b8a9d08c2ed..800f9d9c0733b9af0deaf45c3bd03c7ffbc8dac4 100644 (file)
  * quirks
  */
 #define SDHCI_QUIRK_32BIT_DMA_ADDR     (1 << 0)
+#define SDHCI_QUIRK_REG32_RW           (1 << 1)
 
 /* to make gcc happy */
 struct sdhci_host;
index b4edd43103554882e7a755d081bb8d2f9446f9f0..ef53edb9fef26d50c9c8ffd6ff8d4401dbee0ccf 100644 (file)
@@ -91,7 +91,8 @@ extern int hstrstr_r(const char *__match, int __last_idx, ENTRY ** __retval,
 extern int hdelete_r(const char *__key, struct hsearch_data *__htab);
 
 extern ssize_t hexport_r(struct hsearch_data *__htab,
-                    const char __sep, char **__resp, size_t __size);
+                    const char __sep, char **__resp, size_t __size,
+                    int argc, char * const argv[]);
 
 extern int himport_r(struct hsearch_data *__htab,
                     const char *__env, size_t __size, const char __sep,
index 5926244850b61fc4396f1d3d1615404749a3f2c7..fbc10365f1ac9071f3565e29b16b59c02144f78a 100644 (file)
@@ -24,14 +24,15 @@ struct serial_device {
 
 extern struct serial_device serial_smc_device;
 extern struct serial_device serial_scc_device;
-extern struct serial_device * default_serial_console (void);
-
-#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) || \
-    defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) || \
-    defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
-    defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
-    defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
-    defined(CONFIG_TEGRA2)
+extern struct serial_device *default_serial_console(void);
+
+#if    defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
+       defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
+       defined(CONFIG_405EX) || defined(CONFIG_440) || \
+       defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
+       defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
+       defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
+       defined(CONFIG_TEGRA2)
 extern struct serial_device serial0_device;
 extern struct serial_device serial1_device;
 #if defined(CONFIG_SYS_NS16550_SERIAL)
@@ -92,7 +93,7 @@ extern struct serial_device bfin_serial3_device;
 extern void serial_register(struct serial_device *);
 extern void serial_initialize(void);
 extern void serial_stdio_init(void);
-extern int serial_assign(char * name);
+extern int serial_assign(const char *name);
 extern void serial_reinit_all(void);
 
 /* For usbtty */
diff --git a/include/synopsys/dwcddr21mctl.h b/include/synopsys/dwcddr21mctl.h
new file mode 100644 (file)
index 0000000..a33b122
--- /dev/null
@@ -0,0 +1,337 @@
+/*
+ * (C) Copyright 2011 Andes Technology Corp
+ * Macpaul Lin <macpaul@andestech.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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/*
+ * DWCDDR21MCTL - Synopsys DWC DDR2/DDR1 Memory Controller
+ */
+#ifndef __DWCDDR21MCTL_H
+#define __DWCDDR21MCTL_H
+
+#ifndef __ASSEMBLY__
+struct dwcddr21mctl {
+       unsigned int    ccr;            /* Controller Configuration */
+       unsigned int    dcr;            /* DRAM Configuration */
+       unsigned int    iocr;           /* I/O Configuration */
+       unsigned int    csr;            /* Controller Status */
+       unsigned int    drr;            /* DRAM refresh */
+       unsigned int    tpr0;           /* SDRAM Timing Parameters 0 */
+       unsigned int    tpr1;           /* SDRAM Timing Parameters 1 */
+       unsigned int    tpr2;           /* SDRAM Timing Parameters 2 */
+       unsigned int    gdllcr;         /* Global DLL Control */
+       unsigned int    dllcr[10];      /* DLL Control */
+       unsigned int    rslr[4];        /* Rank System Lantency */
+       unsigned int    rdgr[4];        /* Rank DQS Gating */
+       unsigned int    dqtr[9];        /* DQ Timing */
+       unsigned int    dqstr;          /* DQS Timing */
+       unsigned int    dqsbtr;         /* DQS_b Timing */
+       unsigned int    odtcr;          /* ODT Configuration */
+       unsigned int    dtr[2];         /* Data Training */
+       unsigned int    dtar;           /* Data Training Address */
+       unsigned int    rsved[82];      /* Reserved */
+       unsigned int    mr;             /* Mode Register */
+       unsigned int    emr;            /* Extended Mode Register */
+       unsigned int    emr2;           /* Extended Mode Register 2 */
+       unsigned int    emr3;           /* Extended Mode Register 3 */
+       unsigned int    hpcr[32];       /* Host Port Configurarion */
+       unsigned int    pqcr[8];        /* Priority Queue Configuration */
+       unsigned int    mmgcr;          /* Memory Manager General Config */
+};
+#endif /* __ASSEMBLY__ */
+
+/*
+ * Control Configuration Register
+ */
+#define DWCDDR21MCTL_CCR_ECCEN(x)      ((x) << 0)
+#define DWCDDR21MCTL_CCR_NOMRWR(x)     ((x) << 1)
+#define DWCDDR21MCTL_CCR_HOSTEN(x)     ((x) << 2)
+#define DWCDDR21MCTL_CCR_XBISC(x)      ((x) << 3)
+#define DWCDDR21MCTL_CCR_NOAPD(x)      ((x) << 4)
+#define DWCDDR21MCTL_CCR_RRB(x)                ((x) << 13)
+#define DWCDDR21MCTL_CCR_DQSCFG(x)     ((x) << 14)
+#define DWCDDR21MCTL_CCR_DFTLM(x)      (((x) & 0x3) << 15)
+#define DWCDDR21MCTL_CCR_DFTCMP(x)     ((x) << 17)
+#define DWCDDR21MCTL_CCR_FLUSH(x)      ((x) << 27)
+#define DWCDDR21MCTL_CCR_ITMRST(x)     ((x) << 28)
+#define DWCDDR21MCTL_CCR_IB(x)         ((x) << 29)
+#define DWCDDR21MCTL_CCR_DTT(x)                ((x) << 30)
+#define DWCDDR21MCTL_CCR_IT(x)         ((x) << 31)
+
+/*
+ * DRAM Configuration Register
+ */
+#define DWCDDR21MCTL_DCR_DDRMD(x)      ((x) << 0)
+#define DWCDDR21MCTL_DCR_DIO(x)                (((x) & 0x3) << 1)
+#define DWCDDR21MCTL_DCR_DSIZE(x)      (((x) & 0x7) << 3)
+#define DWCDDR21MCTL_DCR_SIO(x)                (((x) & 0x7) << 6)
+#define DWCDDR21MCTL_DCR_PIO(x)                ((x) << 9)
+#define DWCDDR21MCTL_DCR_RANKS(x)      (((x) & 0x3) << 10)
+#define DWCDDR21MCTL_DCR_RNKALL(x)     ((x) << 12)
+#define DWCDDR21MCTL_DCR_AMAP(x)       (((x) & 0x3) << 13)
+#define DWCDDR21MCTL_DCR_RANK(x)       (((x) & 0x3) << 25)
+#define DWCDDR21MCTL_DCR_CMD(x)                (((x) & 0xf) << 27)
+#define DWCDDR21MCTL_DCR_EXE(x)                ((x) << 31)
+
+/*
+ * I/O Configuration Register
+ */
+#define DWCDDR21MCTL_IOCR_RTT(x)       (((x) & 0xf) << 0)
+#define DWCDDR21MCTL_IOCR_DS(x)                (((x) & 0xf) << 4)
+#define DWCDDR21MCTL_IOCR_TESTEN(x)    ((x) << 0x8)
+#define DWCDDR21MCTL_IOCR_RTTOH(x)     (((x) & 0x7) << 26)
+#define DWCDDR21MCTL_IOCR_RTTOE(x)     ((x) << 29)
+#define DWCDDR21MCTL_IOCR_DQRTT(x)     ((x) << 30)
+#define DWCDDR21MCTL_IOCR_DQSRTT(x)    ((x) << 31)
+
+/*
+ * Controller Status Register
+ */
+#define DWCDDR21MCTL_CSR_DRIFT(x)      (((x) & 0x3ff) << 0)
+#define DWCDDR21MCTL_CSR_DFTERR(x)     ((x) << 18)
+#define DWCDDR21MCTL_CSR_ECCERR(x)     ((x) << 19)
+#define DWCDDR21MCTL_CSR_DTERR(x)      ((x) << 20)
+#define DWCDDR21MCTL_CSR_DTIERR(x)     ((x) << 21)
+#define DWCDDR21MCTL_CSR_ECCSEC(x)     ((x) << 22)
+
+/*
+ * DRAM Refresh Register
+ */
+#define DWCDDR21MCTL_DRR_TRFC(x)       (((x) & 0xff) << 0)
+#define DWCDDR21MCTL_DRR_TRFPRD(x)     (((x) & 0xffff) << 8)
+#define DWCDDR21MCTL_DRR_RFBURST(x)    (((x) & 0xf) << 24)
+#define DWCDDR21MCTL_DRR_RD(x)         ((x) << 31)
+
+/*
+ * SDRAM Timing Parameters Register 0
+ */
+#define DWCDDR21MCTL_TPR0_TMRD(x)      (((x) & 0x3) << 0)
+#define DWCDDR21MCTL_TPR0_TRTP(x)      (((x) & 0x7) << 2)
+#define DWCDDR21MCTL_TPR0_TWTR(x)      (((x) & 0x7) << 5)
+#define DWCDDR21MCTL_TPR0_TRP(x)       (((x) & 0xf) << 8)
+#define DWCDDR21MCTL_TPR0_TRCD(x)      (((x) & 0xf) << 12)
+#define DWCDDR21MCTL_TPR0_TRAS(x)      (((x) & 0x1f) << 16)
+#define DWCDDR21MCTL_TPR0_TRRD(x)      (((x) & 0xf) << 21)
+#define DWCDDR21MCTL_TPR0_TRC(x)       (((x) & 0x3f) << 25)
+#define DWCDDR21MCTL_TPR0_TCCD(x)      ((x) << 31)
+
+/*
+ * SDRAM Timing Parameters Register 1
+ */
+#define DWCDDR21MCTL_TPR1_TAOND(x)     (((x) & 0x3) << 0)
+#define DWCDDR21MCTL_TPR1_TRTW(x)      ((x) << 2)
+#define DWCDDR21MCTL_TPR1_TFAW(x)      (((x) & 0x3f) << 3)
+#define DWCDDR21MCTL_TPR1_TRNKRTR(x)   (((x) & 0x3) << 12)
+#define DWCDDR21MCTL_TPR1_TRNKWTW(x)   (((x) & 0x3) << 14)
+#define DWCDDR21MCTL_TPR1_XCL(x)       (((x) & 0xf) << 23)
+#define DWCDDR21MCTL_TPR1_XWR(x)       (((x) & 0xf) << 27)
+#define DWCDDR21MCTL_TPR1_XTP(x)       ((x) << 31)
+
+/*
+ * SDRAM Timing Parameters Register 2
+ */
+#define DWCDDR21MCTL_TPR2_TXS(x)       (((x) & 0x3ff) << 0)
+#define DWCDDR21MCTL_TPR2_TXP(x)       (((x) & 0x1f) << 10)
+#define DWCDDR21MCTL_TPR2_TCKE(x)      (((x) & 0xf) << 15)
+
+/*
+ * Global DLL Control Register
+ */
+#define DWCDDR21MCTL_GDLLCR_DRES(x)    (((x) & 0x3) << 0)
+#define DWCDDR21MCTL_GDLLCR_IPUMP(x)   (((x) & 0x7) << 2)
+#define DWCDDR21MCTL_GDLLCR_TESTEN(x)  ((x) << 5)
+#define DWCDDR21MCTL_GDLLCR_DTC(x)     (((x) & 0x7) << 6)
+#define DWCDDR21MCTL_GDLLCR_ATC(x)     (((x) & 0x3) << 9)
+#define DWCDDR21MCTL_GDLLCR_TESTSW(x)  ((x) << 11)
+#define DWCDDR21MCTL_GDLLCR_MBIAS(x)   (((x) & 0xff) << 12)
+#define DWCDDR21MCTL_GDLLCR_SBIAS(x)   (((x) & 0xff) << 20)
+#define DWCDDR21MCTL_GDLLCR_LOCKDET(x) ((x) << 29)
+
+/*
+ * DLL Control Register 0-9
+ */
+#define DWCDDR21MCTL_DLLCR_SFBDLY(x)   (((x) & 0x7) << 0)
+#define DWCDDR21MCTL_DLLCR_SFWDLY(x)   (((x) & 0x7) << 3)
+#define DWCDDR21MCTL_DLLCR_MFBDLY(x)   (((x) & 0x7) << 6)
+#define DWCDDR21MCTL_DLLCR_MFWDLY(x)   (((x) & 0x7) << 9)
+#define DWCDDR21MCTL_DLLCR_SSTART(x)   (((x) & 0x3) << 12)
+#define DWCDDR21MCTL_DLLCR_PHASE(x)    (((x) & 0xf) << 14)
+#define DWCDDR21MCTL_DLLCR_ATESTEN(x)  ((x) << 18)
+#define DWCDDR21MCTL_DLLCR_DRSVD(x)    ((x) << 19)
+#define DWCDDR21MCTL_DLLCR_DD(x)       ((x) << 31)
+
+/*
+ * Rank System Lantency Register
+ */
+#define DWCDDR21MCTL_RSLR_SL0(x)       (((x) & 0x7) << 0)
+#define DWCDDR21MCTL_RSLR_SL1(x)       (((x) & 0x7) << 3)
+#define DWCDDR21MCTL_RSLR_SL2(x)       (((x) & 0x7) << 6)
+#define DWCDDR21MCTL_RSLR_SL3(x)       (((x) & 0x7) << 9)
+#define DWCDDR21MCTL_RSLR_SL4(x)       (((x) & 0x7) << 12)
+#define DWCDDR21MCTL_RSLR_SL5(x)       (((x) & 0x7) << 15)
+#define DWCDDR21MCTL_RSLR_SL6(x)       (((x) & 0x7) << 18)
+#define DWCDDR21MCTL_RSLR_SL7(x)       (((x) & 0x7) << 21)
+#define DWCDDR21MCTL_RSLR_SL8(x)       (((x) & 0x7) << 24)
+
+/*
+ * Rank DQS Gating Register
+ */
+#define DWCDDR21MCTL_RDGR_DQSSEL0(x)   (((x) & 0x3) << 0)
+#define DWCDDR21MCTL_RDGR_DQSSEL1(x)   (((x) & 0x3) << 2)
+#define DWCDDR21MCTL_RDGR_DQSSEL2(x)   (((x) & 0x3) << 4)
+#define DWCDDR21MCTL_RDGR_DQSSEL3(x)   (((x) & 0x3) << 6)
+#define DWCDDR21MCTL_RDGR_DQSSEL4(x)   (((x) & 0x3) << 8)
+#define DWCDDR21MCTL_RDGR_DQSSEL5(x)   (((x) & 0x3) << 10)
+#define DWCDDR21MCTL_RDGR_DQSSEL6(x)   (((x) & 0x3) << 12)
+#define DWCDDR21MCTL_RDGR_DQSSEL7(x)   (((x) & 0x3) << 14)
+#define DWCDDR21MCTL_RDGR_DQSSEL8(x)   (((x) & 0x3) << 16)
+
+/*
+ * DQ Timing Register
+ */
+#define DWCDDR21MCTL_DQTR_DQDLY0(x)    (((x) & 0xf) << 0)
+#define DWCDDR21MCTL_DQTR_DQDLY1(x)    (((x) & 0xf) << 4)
+#define DWCDDR21MCTL_DQTR_DQDLY2(x)    (((x) & 0xf) << 8)
+#define DWCDDR21MCTL_DQTR_DQDLY3(x)    (((x) & 0xf) << 12)
+#define DWCDDR21MCTL_DQTR_DQDLY4(x)    (((x) & 0xf) << 16)
+#define DWCDDR21MCTL_DQTR_DQDLY5(x)    (((x) & 0xf) << 20)
+#define DWCDDR21MCTL_DQTR_DQDLY6(x)    (((x) & 0xf) << 24)
+#define DWCDDR21MCTL_DQTR_DQDLY7(x)    (((x) & 0xf) << 28)
+
+/*
+ * DQS Timing Register
+ */
+#define DWCDDR21MCTL_DQSTR_DQSDLY0(x)  (((x) & 0x7) << 0)
+#define DWCDDR21MCTL_DQSTR_DQSDLY1(x)  (((x) & 0x7) << 3)
+#define DWCDDR21MCTL_DQSTR_DQSDLY2(x)  (((x) & 0x7) << 6)
+#define DWCDDR21MCTL_DQSTR_DQSDLY3(x)  (((x) & 0x7) << 9)
+#define DWCDDR21MCTL_DQSTR_DQSDLY4(x)  (((x) & 0x7) << 12)
+#define DWCDDR21MCTL_DQSTR_DQSDLY5(x)  (((x) & 0x7) << 15)
+#define DWCDDR21MCTL_DQSTR_DQSDLY6(x)  (((x) & 0x7) << 18)
+#define DWCDDR21MCTL_DQSTR_DQSDLY7(x)  (((x) & 0x7) << 21)
+#define DWCDDR21MCTL_DQSTR_DQSDLY8(x)  (((x) & 0x7) << 24)
+
+/*
+ * DQS_b (DQSBTR) Timing Register
+ */
+#define DWCDDR21MCTL_DQSBTR_DQSDLY0(x) (((x) & 0x7) << 0)
+#define DWCDDR21MCTL_DQSBTR_DQSDLY1(x) (((x) & 0x7) << 3)
+#define DWCDDR21MCTL_DQSBTR_DQSDLY2(x) (((x) & 0x7) << 6)
+#define DWCDDR21MCTL_DQSBTR_DQSDLY3(x) (((x) & 0x7) << 9)
+#define DWCDDR21MCTL_DQSBTR_DQSDLY4(x) (((x) & 0x7) << 12)
+#define DWCDDR21MCTL_DQSBTR_DQSDLY5(x) (((x) & 0x7) << 15)
+#define DWCDDR21MCTL_DQSBTR_DQSDLY6(x) (((x) & 0x7) << 18)
+#define DWCDDR21MCTL_DQSBTR_DQSDLY7(x) (((x) & 0x7) << 21)
+#define DWCDDR21MCTL_DQSBTR_DQSDLY8(x) (((x) & 0x7) << 24)
+
+/*
+ * ODT Configuration Register
+ */
+#define DWCDDR21MCTL_ODTCR_RDODT0(x)   (((x) & 0xf) << 0)
+#define DWCDDR21MCTL_ODTCR_RDODT1(x)   (((x) & 0xf) << 4)
+#define DWCDDR21MCTL_ODTCR_RDODT2(x)   (((x) & 0xf) << 8)
+#define DWCDDR21MCTL_ODTCR_RDODT3(x)   (((x) & 0xf) << 12)
+#define DWCDDR21MCTL_ODTCR_WDODT0(x)   (((x) & 0xf) << 16)
+#define DWCDDR21MCTL_ODTCR_WDODT1(x)   (((x) & 0xf) << 20)
+#define DWCDDR21MCTL_ODTCR_WDODT2(x)   (((x) & 0xf) << 24)
+#define DWCDDR21MCTL_ODTCR_WDODT3(x)   (((x) & 0xf) << 28)
+
+/*
+ * Data Training Register
+ */
+#define DWCDDR21MCTL_DTR0_DTBYTE0(x)   (((x) & 0xff) << 0)     /* def: 0x11 */
+#define DWCDDR21MCTL_DTR0_DTBYTE1(x)   (((x) & 0xff) << 8)     /* def: 0xee */
+#define DWCDDR21MCTL_DTR0_DTBYTE2(x)   (((x) & 0xff) << 16)    /* def: 0x22 */
+#define DWCDDR21MCTL_DTR0_DTBYTE3(x)   (((x) & 0xff) << 24)    /* def: 0xdd */
+
+#define DWCDDR21MCTL_DTR1_DTBYTE4(x)   (((x) & 0xff) << 0)     /* def: 0x44 */
+#define DWCDDR21MCTL_DTR1_DTBYTE5(x)   (((x) & 0xff) << 8)     /* def: 0xbb */
+#define DWCDDR21MCTL_DTR1_DTBYTE6(x)   (((x) & 0xff) << 16)    /* def: 0x88 */
+#define DWCDDR21MCTL_DTR1_DTBYTE7(x)   (((x) & 0xff) << 24)    /* def: 0x77 */
+
+/*
+ * Data Training Address Register
+ */
+#define DWCDDR21MCTL_DTAR_DTCOL(x)     (((x) & 0xfff) << 0)
+#define DWCDDR21MCTL_DTAR_DTROW(x)     (((x) & 0xffff) << 12)
+#define DWCDDR21MCTL_DTAR_DTBANK(x)    (((x) & 0x7) << 28)
+
+/*
+ * Mode Register
+ */
+#define DWCDDR21MCTL_MR_BL(x)          (((x) & 0x7) << 0)
+#define DWCDDR21MCTL_MR_BT(x)          ((x) << 3)
+#define DWCDDR21MCTL_MR_CL(x)          (((x) & 0x7) << 4)
+#define DWCDDR21MCTL_MR_TM(x)          ((x) << 7)
+#define DWCDDR21MCTL_MR_DR(x)          ((x) << 8)
+#define DWCDDR21MCTL_MR_WR(x)          (((x) & 0x7) << 9)
+#define DWCDDR21MCTL_MR_PD(x)          ((x) << 12)
+
+/*
+ * Extended Mode register
+ */
+#define DWCDDR21MCTL_EMR_DE(x)         ((x) << 0)
+#define DWCDDR21MCTL_EMR_ODS(x)                ((x) << 1)
+#define DWCDDR21MCTL_EMR_RTT2(x)       ((x) << 2)
+#define DWCDDR21MCTL_EMR_AL(x)         (((x) & 0x7) << 3)
+#define DWCDDR21MCTL_EMR_RTT6(x)       ((x) << 6)
+#define DWCDDR21MCTL_EMR_OCD(x)                (((x) & 0x7) << 7)
+#define DWCDDR21MCTL_EMR_DQS(x)                ((x) << 10)
+#define DWCDDR21MCTL_EMR_RDQS(x)       ((x) << 11)
+#define DWCDDR21MCTL_EMR_OE(x)         ((x) << 12)
+
+#define EMR_RTT2(x)                    DWCDDR21MCTL_EMR_RTT2(x)
+#define EMR_RTT6(x)                    DWCDDR21MCTL_EMR_RTT6(x)
+
+#define DWCDDR21MCTL_EMR_RTT_DISABLED  (EMR_RTT6(0) | EMR_RTT2(0))
+#define DWCDDR21MCTL_EMR_RTT_75                (EMR_RTT6(0) | EMR_RTT2(1))
+#define DWCDDR21MCTL_EMR_RTT_150       (EMR_RTT6(1) | EMR_RTT2(0))
+#define DWCDDR21MCTL_EMR_RTT_50                (EMR_RTT6(1) | EMR_RTT2(1))
+
+/*
+ * Extended Mode register 2
+ */
+#define DWCDDR21MCTL_EMR2_PASR(x)      (((x) & 0x7) << 0)
+#define DWCDDR21MCTL_EMR2_DCC(x)       ((x) << 3)
+#define DWCDDR21MCTL_EMR2_SRF(x)       ((x) << 7)
+
+/*
+ * Extended Mode register 3: [15:0] reserved for JEDEC.
+ */
+
+/*
+ * Host port Configuration register 0-31
+ */
+#define DWCDDR21MCTL_HPCR_HPBL(x)      (((x) & 0xf) << 0)
+
+/*
+ * Priority Queue Configuration register 0-7
+ */
+#define DWCDDR21MCTL_HPCR_TOUT(x)      (((x) & 0xf) << 0)
+#define DWCDDR21MCTL_HPCR_TOUTX(x)     (((x) & 0x3) << 8)
+#define DWCDDR21MCTL_HPCR_LPQS(x)      (((x) & 0x3) << 10)
+#define DWCDDR21MCTL_HPCR_PQBL(x)      (((x) & 0xff) << 12)
+#define DWCDDR21MCTL_HPCR_SWAIT(x)     (((x) & 0x1f) << 20)
+#define DWCDDR21MCTL_HPCR_INTRPT(x)    (((x) & 0x7) << 25)
+#define DWCDDR21MCTL_HPCR_APQS(x)      ((x) << 28)
+
+/*
+ * Memory Manager General Configuration register
+ */
+#define DWCDDR21MCTL_MMGCR_UHPP(x)     (((x) & 0x3) << 0)
+
+#endif /* __DWCDDR21MCTL_H */
diff --git a/include/tpm.h b/include/tpm.h
new file mode 100644 (file)
index 0000000..6b21e9c
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 _INCLUDE_TPM_H_
+#define _INCLUDE_TPM_H_
+
+#include <common.h>
+
+/*
+ * tis_init()
+ *
+ * Initialize the TPM device. Returns 0 on success or -1 on
+ * failure (in case device probing did not succeed).
+ */
+int tis_init(void);
+
+/*
+ * tis_open()
+ *
+ * Requests access to locality 0 for the caller. After all commands have been
+ * completed the caller is supposed to call tis_close().
+ *
+ * Returns 0 on success, -1 on failure.
+ */
+int tis_open(void);
+
+/*
+ * tis_close()
+ *
+ * terminate the currect session with the TPM by releasing the locked
+ * locality. Returns 0 on success of -1 on failure (in case lock
+ * removal did not succeed).
+ */
+int tis_close(void);
+
+/*
+ * tis_sendrecv()
+ *
+ * Send the requested data to the TPM and then try to get its response
+ *
+ * @sendbuf - buffer of the data to send
+ * @send_size size of the data to send
+ * @recvbuf - memory to save the response to
+ * @recv_len - pointer to the size of the response buffer
+ *
+ * Returns 0 on success (and places the number of response bytes at recv_len)
+ * or -1 on failure.
+ */
+int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf,
+                       size_t *recv_len);
+
+#endif /* _INCLUDE_TPM_H_ */
index 706e185149d2a6afdee894e8aecd6e613ee4f212..47957c4a7a6eddaa31852efe6d6c614cd8028ce1 100644 (file)
 #define VIDEO_FONT_HEIGHT      16
 #define VIDEO_FONT_SIZE                (VIDEO_FONT_CHARS * VIDEO_FONT_HEIGHT)
 
-static unsigned char video_fontdata[VIDEO_FONT_SIZE] = {
-
-       /* 0 0x00 '^@' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 1 0x01 '^A' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x81, /* 10000001 */
-       0xa5, /* 10100101 */
-       0x81, /* 10000001 */
-       0x81, /* 10000001 */
-       0xbd, /* 10111101 */
-       0x99, /* 10011001 */
-       0x81, /* 10000001 */
-       0x81, /* 10000001 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 2 0x02 '^B' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0xff, /* 11111111 */
-       0xdb, /* 11011011 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xc3, /* 11000011 */
-       0xe7, /* 11100111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 3 0x03 '^C' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x6c, /* 01101100 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0x7c, /* 01111100 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 4 0x04 '^D' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x7c, /* 01111100 */
-       0xfe, /* 11111110 */
-       0x7c, /* 01111100 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 5 0x05 '^E' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0xe7, /* 11100111 */
-       0xe7, /* 11100111 */
-       0xe7, /* 11100111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 6 0x06 '^F' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x7e, /* 01111110 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 7 0x07 '^G' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 8 0x08 '^H' */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xe7, /* 11100111 */
-       0xc3, /* 11000011 */
-       0xc3, /* 11000011 */
-       0xe7, /* 11100111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-
-       /* 9 0x09 '^I' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x42, /* 01000010 */
-       0x42, /* 01000010 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 10 0x0a '^J' */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xc3, /* 11000011 */
-       0x99, /* 10011001 */
-       0xbd, /* 10111101 */
-       0xbd, /* 10111101 */
-       0x99, /* 10011001 */
-       0xc3, /* 11000011 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-
-       /* 11 0x0b '^K' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1e, /* 00011110 */
-       0x0e, /* 00001110 */
-       0x1a, /* 00011010 */
-       0x32, /* 00110010 */
-       0x78, /* 01111000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 12 0x0c '^L' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 13 0x0d '^M' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3f, /* 00111111 */
-       0x33, /* 00110011 */
-       0x3f, /* 00111111 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x70, /* 01110000 */
-       0xf0, /* 11110000 */
-       0xe0, /* 11100000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 14 0x0e '^N' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7f, /* 01111111 */
-       0x63, /* 01100011 */
-       0x7f, /* 01111111 */
-       0x63, /* 01100011 */
-       0x63, /* 01100011 */
-       0x63, /* 01100011 */
-       0x63, /* 01100011 */
-       0x67, /* 01100111 */
-       0xe7, /* 11100111 */
-       0xe6, /* 11100110 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 15 0x0f '^O' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xdb, /* 11011011 */
-       0x3c, /* 00111100 */
-       0xe7, /* 11100111 */
-       0x3c, /* 00111100 */
-       0xdb, /* 11011011 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 16 0x10 '^P' */
-       0x00, /* 00000000 */
-       0x80, /* 10000000 */
-       0xc0, /* 11000000 */
-       0xe0, /* 11100000 */
-       0xf0, /* 11110000 */
-       0xf8, /* 11111000 */
-       0xfe, /* 11111110 */
-       0xf8, /* 11111000 */
-       0xf0, /* 11110000 */
-       0xe0, /* 11100000 */
-       0xc0, /* 11000000 */
-       0x80, /* 10000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 17 0x11 '^Q' */
-       0x00, /* 00000000 */
-       0x02, /* 00000010 */
-       0x06, /* 00000110 */
-       0x0e, /* 00001110 */
-       0x1e, /* 00011110 */
-       0x3e, /* 00111110 */
-       0xfe, /* 11111110 */
-       0x3e, /* 00111110 */
-       0x1e, /* 00011110 */
-       0x0e, /* 00001110 */
-       0x06, /* 00000110 */
-       0x02, /* 00000010 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 18 0x12 '^R' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 19 0x13 '^S' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 20 0x14 '^T' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7f, /* 01111111 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0x7b, /* 01111011 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 21 0x15 '^U' */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0x60, /* 01100000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x0c, /* 00001100 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 22 0x16 '^V' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 23 0x17 '^W' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 24 0x18 '^X' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 25 0x19 '^Y' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 26 0x1a '^Z' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0xfe, /* 11111110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 27 0x1b '^[' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xfe, /* 11111110 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 28 0x1c '^\' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 29 0x1d '^]' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x28, /* 00101000 */
-       0x6c, /* 01101100 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x28, /* 00101000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 30 0x1e '^^' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x7c, /* 01111100 */
-       0x7c, /* 01111100 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 31 0x1f '^_' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0x7c, /* 01111100 */
-       0x7c, /* 01111100 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 32 0x20 ' ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 33 0x21 '!' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 34 0x22 '"' */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x24, /* 00100100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 35 0x23 '#' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 36 0x24 '$' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc2, /* 11000010 */
-       0xc0, /* 11000000 */
-       0x7c, /* 01111100 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x86, /* 10000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 37 0x25 '%' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc2, /* 11000010 */
-       0xc6, /* 11000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc6, /* 11000110 */
-       0x86, /* 10000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 38 0x26 '&' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 39 0x27 ''' */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 40 0x28 '(' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 41 0x29 ')' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 42 0x2a '*' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0xff, /* 11111111 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 43 0x2b '+' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 44 0x2c ',' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 45 0x2d '-' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 46 0x2e '.' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 47 0x2f '/' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x02, /* 00000010 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0x80, /* 10000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 48 0x30 '0' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 49 0x31 '1' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x38, /* 00111000 */
-       0x78, /* 01111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 50 0x32 '2' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 51 0x33 '3' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x3c, /* 00111100 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 52 0x34 '4' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x1c, /* 00011100 */
-       0x3c, /* 00111100 */
-       0x6c, /* 01101100 */
-       0xcc, /* 11001100 */
-       0xfe, /* 11111110 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x1e, /* 00011110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 53 0x35 '5' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xfc, /* 11111100 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 54 0x36 '6' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xfc, /* 11111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 55 0x37 '7' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 56 0x38 '8' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 57 0x39 '9' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7e, /* 01111110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 58 0x3a ':' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 59 0x3b ';' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 60 0x3c '<' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x06, /* 00000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 61 0x3d '=' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 62 0x3e '>' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 63 0x3f '?' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 64 0x40 '@' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xde, /* 11011110 */
-       0xde, /* 11011110 */
-       0xde, /* 11011110 */
-       0xdc, /* 11011100 */
-       0xc0, /* 11000000 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 65 0x41 'A' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 66 0x42 'B' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfc, /* 11111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0xfc, /* 11111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 67 0x43 'C' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0xc2, /* 11000010 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc2, /* 11000010 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 68 0x44 'D' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xf8, /* 11111000 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0xf8, /* 11111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 69 0x45 'E' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x66, /* 01100110 */
-       0x62, /* 01100010 */
-       0x68, /* 01101000 */
-       0x78, /* 01111000 */
-       0x68, /* 01101000 */
-       0x60, /* 01100000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 70 0x46 'F' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x66, /* 01100110 */
-       0x62, /* 01100010 */
-       0x68, /* 01101000 */
-       0x78, /* 01111000 */
-       0x68, /* 01101000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 71 0x47 'G' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0xc2, /* 11000010 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xde, /* 11011110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x66, /* 01100110 */
-       0x3a, /* 00111010 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 72 0x48 'H' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 73 0x49 'I' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 74 0x4a 'J' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1e, /* 00011110 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 75 0x4b 'K' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xe6, /* 11100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0x78, /* 01111000 */
-       0x78, /* 01111000 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0xe6, /* 11100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 76 0x4c 'L' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xf0, /* 11110000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 77 0x4d 'M' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xee, /* 11101110 */
-       0xfe, /* 11111110 */
-       0xfe, /* 11111110 */
-       0xd6, /* 11010110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 78 0x4e 'N' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xe6, /* 11100110 */
-       0xf6, /* 11110110 */
-       0xfe, /* 11111110 */
-       0xde, /* 11011110 */
-       0xce, /* 11001110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 79 0x4f 'O' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 80 0x50 'P' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfc, /* 11111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 81 0x51 'Q' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xd6, /* 11010110 */
-       0xde, /* 11011110 */
-       0x7c, /* 01111100 */
-       0x0c, /* 00001100 */
-       0x0e, /* 00001110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 82 0x52 'R' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfc, /* 11111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0xe6, /* 11100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 83 0x53 'S' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x60, /* 01100000 */
-       0x38, /* 00111000 */
-       0x0c, /* 00001100 */
-       0x06, /* 00000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 84 0x54 'T' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x5a, /* 01011010 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 85 0x55 'U' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 86 0x56 'V' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 87 0x57 'W' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xfe, /* 11111110 */
-       0xee, /* 11101110 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 88 0x58 'X' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x7c, /* 01111100 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x7c, /* 01111100 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 89 0x59 'Y' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 90 0x5a 'Z' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0x86, /* 10000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc2, /* 11000010 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 91 0x5b '[' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 92 0x5c '\' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x80, /* 10000000 */
-       0xc0, /* 11000000 */
-       0xe0, /* 11100000 */
-       0x70, /* 01110000 */
-       0x38, /* 00111000 */
-       0x1c, /* 00011100 */
-       0x0e, /* 00001110 */
-       0x06, /* 00000110 */
-       0x02, /* 00000010 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 93 0x5d ']' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 94 0x5e '^' */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 95 0x5f '_' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 96 0x60 '`' */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 97 0x61 'a' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 98 0x62 'b' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xe0, /* 11100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x78, /* 01111000 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 99 0x63 'c' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 100 0x64 'd' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1c, /* 00011100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x3c, /* 00111100 */
-       0x6c, /* 01101100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 101 0x65 'e' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 102 0x66 'f' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1c, /* 00011100 */
-       0x36, /* 00110110 */
-       0x32, /* 00110010 */
-       0x30, /* 00110000 */
-       0x78, /* 01111000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 103 0x67 'g' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x7c, /* 01111100 */
-       0x0c, /* 00001100 */
-       0xcc, /* 11001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-
-       /* 104 0x68 'h' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xe0, /* 11100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x6c, /* 01101100 */
-       0x76, /* 01110110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0xe6, /* 11100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 105 0x69 'i' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 106 0x6a 'j' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x00, /* 00000000 */
-       0x0e, /* 00001110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-
-       /* 107 0x6b 'k' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xe0, /* 11100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0x78, /* 01111000 */
-       0x78, /* 01111000 */
-       0x6c, /* 01101100 */
-       0x66, /* 01100110 */
-       0xe6, /* 11100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 108 0x6c 'l' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 109 0x6d 'm' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xec, /* 11101100 */
-       0xfe, /* 11111110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 110 0x6e 'n' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xdc, /* 11011100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 111 0x6f 'o' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 112 0x70 'p' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xdc, /* 11011100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x00, /* 00000000 */
-
-       /* 113 0x71 'q' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x7c, /* 01111100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x1e, /* 00011110 */
-       0x00, /* 00000000 */
-
-       /* 114 0x72 'r' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xdc, /* 11011100 */
-       0x76, /* 01110110 */
-       0x66, /* 01100110 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 115 0x73 's' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0x60, /* 01100000 */
-       0x38, /* 00111000 */
-       0x0c, /* 00001100 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 116 0x74 't' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0xfc, /* 11111100 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x36, /* 00110110 */
-       0x1c, /* 00011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 117 0x75 'u' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 118 0x76 'v' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 119 0x77 'w' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xd6, /* 11010110 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 120 0x78 'x' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 121 0x79 'y' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7e, /* 01111110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0xf8, /* 11111000 */
-       0x00, /* 00000000 */
-
-       /* 122 0x7a 'z' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xcc, /* 11001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 123 0x7b '{' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0e, /* 00001110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x70, /* 01110000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x0e, /* 00001110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 124 0x7c '|' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 125 0x7d '}' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x70, /* 01110000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x0e, /* 00001110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 126 0x7e '~' */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 127 0x7f '\7f' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 128 0x80 '\80' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0xc2, /* 11000010 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc2, /* 11000010 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 129 0x81 '\81' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 130 0x82 '\82' */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 131 0x83 '\83' */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 132 0x84 '\84' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 133 0x85 '\85' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 134 0x86 '\86' */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 135 0x87 '\87' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x18, /* 00011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 136 0x88 '\88' */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 137 0x89 '\89' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 138 0x8a '\8a' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 139 0x8b '\8b' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 140 0x8c '\8c' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 141 0x8d '\8d' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 142 0x8e '\8e' */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 143 0x8f '\8f' */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 144 0x90 '\90' */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x66, /* 01100110 */
-       0x62, /* 01100010 */
-       0x68, /* 01101000 */
-       0x78, /* 01111000 */
-       0x68, /* 01101000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 145 0x91 '\91' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xec, /* 11101100 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x7e, /* 01111110 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0x6e, /* 01101110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 146 0x92 '\92' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3e, /* 00111110 */
-       0x6c, /* 01101100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xfe, /* 11111110 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xce, /* 11001110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 147 0x93 '\93' */
-       0x00, /* 00000000 */
-       0x10, /* 00010000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 148 0x94 '\94' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 149 0x95 '\95' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 150 0x96 '\96' */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x78, /* 01111000 */
-       0xcc, /* 11001100 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 151 0x97 '\97' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 152 0x98 '\98' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7e, /* 01111110 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x78, /* 01111000 */
-       0x00, /* 00000000 */
-
-       /* 153 0x99 '\99' */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 154 0x9a '\9a' */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 155 0x9b '\9b' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 156 0x9c '\9c' */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x64, /* 01100100 */
-       0x60, /* 01100000 */
-       0xf0, /* 11110000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xe6, /* 11100110 */
-       0xfc, /* 11111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 157 0x9d '\9d' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 158 0x9e '\9e' */
-       0x00, /* 00000000 */
-       0xf8, /* 11111000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xf8, /* 11111000 */
-       0xc4, /* 11000100 */
-       0xcc, /* 11001100 */
-       0xde, /* 11011110 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 159 0x9f '\9f' */
-       0x00, /* 00000000 */
-       0x0e, /* 00001110 */
-       0x1b, /* 00011011 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xd8, /* 11011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 160 0xa0 ' ' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0x0c, /* 00001100 */
-       0x7c, /* 01111100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 161 0xa1 '¡' */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 162 0xa2 '¢' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 163 0xa3 '£' */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x00, /* 00000000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 164 0xa4 '¤' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0xdc, /* 11011100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 165 0xa5 '¥' */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0xc6, /* 11000110 */
-       0xe6, /* 11100110 */
-       0xf6, /* 11110110 */
-       0xfe, /* 11111110 */
-       0xde, /* 11011110 */
-       0xce, /* 11001110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 166 0xa6 '¦' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x3e, /* 00111110 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 167 0xa7 '§' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 168 0xa8 '¨' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x7c, /* 01111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 169 0xa9 '©' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 170 0xaa 'ª' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 171 0xab '«' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0xe0, /* 11100000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xdc, /* 11011100 */
-       0x86, /* 10000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x3e, /* 00111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 172 0xac '¬' */
-       0x00, /* 00000000 */
-       0x60, /* 01100000 */
-       0xe0, /* 11100000 */
-       0x62, /* 01100010 */
-       0x66, /* 01100110 */
-       0x6c, /* 01101100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x66, /* 01100110 */
-       0xce, /* 11001110 */
-       0x9a, /* 10011010 */
-       0x3f, /* 00111111 */
-       0x06, /* 00000110 */
-       0x06, /* 00000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 173 0xad '­' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 174 0xae '®' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x36, /* 00110110 */
-       0x6c, /* 01101100 */
-       0xd8, /* 11011000 */
-       0x6c, /* 01101100 */
-       0x36, /* 00110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 175 0xaf '¯' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xd8, /* 11011000 */
-       0x6c, /* 01101100 */
-       0x36, /* 00110110 */
-       0x6c, /* 01101100 */
-       0xd8, /* 11011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 176 0xb0 '°' */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-       0x11, /* 00010001 */
-       0x44, /* 01000100 */
-
-       /* 177 0xb1 '±' */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-       0x55, /* 01010101 */
-       0xaa, /* 10101010 */
-
-       /* 178 0xb2 '²' */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-       0xdd, /* 11011101 */
-       0x77, /* 01110111 */
-
-       /* 179 0xb3 '³' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 180 0xb4 '´' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 181 0xb5 'µ' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 182 0xb6 '¶' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf6, /* 11110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 183 0xb7 '·' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 184 0xb8 '¸' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 185 0xb9 '¹' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf6, /* 11110110 */
-       0x06, /* 00000110 */
-       0xf6, /* 11110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 186 0xba 'º' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 187 0xbb '»' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x06, /* 00000110 */
-       0xf6, /* 11110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 188 0xbc '¼' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf6, /* 11110110 */
-       0x06, /* 00000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 189 0xbd '½' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 190 0xbe '¾' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 191 0xbf '¿' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xf8, /* 11111000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 192 0xc0 'À' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 193 0xc1 'Á' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 194 0xc2 'Â' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 195 0xc3 'Ã' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 196 0xc4 'Ä' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 197 0xc5 'Å' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 198 0xc6 'Æ' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 199 0xc7 'Ç' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x37, /* 00110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 200 0xc8 'È' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x37, /* 00110111 */
-       0x30, /* 00110000 */
-       0x3f, /* 00111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 201 0xc9 'É' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3f, /* 00111111 */
-       0x30, /* 00110000 */
-       0x37, /* 00110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 202 0xca 'Ê' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf7, /* 11110111 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 203 0xcb 'Ë' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0xf7, /* 11110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 204 0xcc 'Ì' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x37, /* 00110111 */
-       0x30, /* 00110000 */
-       0x37, /* 00110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 205 0xcd 'Í' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 206 0xce 'Î' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xf7, /* 11110111 */
-       0x00, /* 00000000 */
-       0xf7, /* 11110111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 207 0xcf 'Ï' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 208 0xd0 'Ð' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 209 0xd1 'Ñ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 210 0xd2 'Ò' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 211 0xd3 'Ó' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x3f, /* 00111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 212 0xd4 'Ô' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 213 0xd5 'Õ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 214 0xd6 'Ö' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x3f, /* 00111111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 215 0xd7 '×' */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0xff, /* 11111111 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-
-       /* 216 0xd8 'Ø' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0xff, /* 11111111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 217 0xd9 'Ù' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xf8, /* 11111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 218 0xda 'Ú' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1f, /* 00011111 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 219 0xdb 'Û' */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-
-       /* 220 0xdc 'Ü' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-
-       /* 221 0xdd 'Ý' */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-       0xf0, /* 11110000 */
-
-       /* 222 0xde 'Þ' */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-       0x0f, /* 00001111 */
-
-       /* 223 0xdf 'ß' */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0xff, /* 11111111 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 224 0xe0 'à' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xdc, /* 11011100 */
-       0x76, /* 01110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 225 0xe1 'á' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x78, /* 01111000 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xcc, /* 11001100 */
-       0xd8, /* 11011000 */
-       0xcc, /* 11001100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xcc, /* 11001100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 226 0xe2 'â' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 227 0xe3 'ã' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 228 0xe4 'ä' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 229 0xe5 'å' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 230 0xe6 'æ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x7c, /* 01111100 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-
-       /* 231 0xe7 'ç' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 232 0xe8 'è' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 233 0xe9 'é' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xfe, /* 11111110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 234 0xea 'ê' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0xee, /* 11101110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 235 0xeb 'ë' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1e, /* 00011110 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x3e, /* 00111110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x66, /* 01100110 */
-       0x3c, /* 00111100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 236 0xec 'ì' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 237 0xed 'í' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x03, /* 00000011 */
-       0x06, /* 00000110 */
-       0x7e, /* 01111110 */
-       0xdb, /* 11011011 */
-       0xdb, /* 11011011 */
-       0xf3, /* 11110011 */
-       0x7e, /* 01111110 */
-       0x60, /* 01100000 */
-       0xc0, /* 11000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 238 0xee 'î' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x1c, /* 00011100 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x7c, /* 01111100 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x1c, /* 00011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 239 0xef 'ï' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7c, /* 01111100 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0xc6, /* 11000110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 240 0xf0 'ð' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0xfe, /* 11111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 241 0xf1 'ñ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x7e, /* 01111110 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 242 0xf2 'ò' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x06, /* 00000110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 243 0xf3 'ó' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x30, /* 00110000 */
-       0x60, /* 01100000 */
-       0x30, /* 00110000 */
-       0x18, /* 00011000 */
-       0x0c, /* 00001100 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 244 0xf4 'ô' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x0e, /* 00001110 */
-       0x1b, /* 00011011 */
-       0x1b, /* 00011011 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-
-       /* 245 0xf5 'õ' */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0xd8, /* 11011000 */
-       0x70, /* 01110000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 246 0xf6 'ö' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 247 0xf7 '÷' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0x76, /* 01110110 */
-       0xdc, /* 11011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 248 0xf8 'ø' */
-       0x00, /* 00000000 */
-       0x38, /* 00111000 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x38, /* 00111000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 249 0xf9 'ù' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 250 0xfa 'ú' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x18, /* 00011000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 251 0xfb 'û' */
-       0x00, /* 00000000 */
-       0x0f, /* 00001111 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0x0c, /* 00001100 */
-       0xec, /* 11101100 */
-       0x6c, /* 01101100 */
-       0x6c, /* 01101100 */
-       0x3c, /* 00111100 */
-       0x1c, /* 00011100 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 252 0xfc 'ü' */
-       0x00, /* 00000000 */
-       0x6c, /* 01101100 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x36, /* 00110110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 253 0xfd 'ý' */
-       0x00, /* 00000000 */
-       0x3c, /* 00111100 */
-       0x66, /* 01100110 */
-       0x0c, /* 00001100 */
-       0x18, /* 00011000 */
-       0x32, /* 00110010 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 254 0xfe 'þ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x7e, /* 01111110 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-       /* 255 0xff 'ÿ' */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-       0x00, /* 00000000 */
-
-};
-
-#endif
+#endif /* _VIDEO_FONT_ */
diff --git a/include/video_font_data.h b/include/video_font_data.h
new file mode 100644 (file)
index 0000000..c7a8b9b
--- /dev/null
@@ -0,0 +1,4639 @@
+/*
+ * (C) Copyright 2000
+ * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 _VIDEO_FONT_DATA_
+#define _VIDEO_FONT_DATA_
+
+static unsigned char video_fontdata[VIDEO_FONT_SIZE] = {
+
+       /* 0 0x00 '^@' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 1 0x01 '^A' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x81, /* 10000001 */
+       0xa5, /* 10100101 */
+       0x81, /* 10000001 */
+       0x81, /* 10000001 */
+       0xbd, /* 10111101 */
+       0x99, /* 10011001 */
+       0x81, /* 10000001 */
+       0x81, /* 10000001 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 2 0x02 '^B' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0xff, /* 11111111 */
+       0xdb, /* 11011011 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xc3, /* 11000011 */
+       0xe7, /* 11100111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 3 0x03 '^C' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x6c, /* 01101100 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0x7c, /* 01111100 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 4 0x04 '^D' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x7c, /* 01111100 */
+       0xfe, /* 11111110 */
+       0x7c, /* 01111100 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 5 0x05 '^E' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0xe7, /* 11100111 */
+       0xe7, /* 11100111 */
+       0xe7, /* 11100111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 6 0x06 '^F' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x7e, /* 01111110 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 7 0x07 '^G' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 8 0x08 '^H' */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xe7, /* 11100111 */
+       0xc3, /* 11000011 */
+       0xc3, /* 11000011 */
+       0xe7, /* 11100111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+
+       /* 9 0x09 '^I' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x42, /* 01000010 */
+       0x42, /* 01000010 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 10 0x0a '^J' */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xc3, /* 11000011 */
+       0x99, /* 10011001 */
+       0xbd, /* 10111101 */
+       0xbd, /* 10111101 */
+       0x99, /* 10011001 */
+       0xc3, /* 11000011 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+
+       /* 11 0x0b '^K' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1e, /* 00011110 */
+       0x0e, /* 00001110 */
+       0x1a, /* 00011010 */
+       0x32, /* 00110010 */
+       0x78, /* 01111000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 12 0x0c '^L' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 13 0x0d '^M' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3f, /* 00111111 */
+       0x33, /* 00110011 */
+       0x3f, /* 00111111 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x70, /* 01110000 */
+       0xf0, /* 11110000 */
+       0xe0, /* 11100000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 14 0x0e '^N' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7f, /* 01111111 */
+       0x63, /* 01100011 */
+       0x7f, /* 01111111 */
+       0x63, /* 01100011 */
+       0x63, /* 01100011 */
+       0x63, /* 01100011 */
+       0x63, /* 01100011 */
+       0x67, /* 01100111 */
+       0xe7, /* 11100111 */
+       0xe6, /* 11100110 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 15 0x0f '^O' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xdb, /* 11011011 */
+       0x3c, /* 00111100 */
+       0xe7, /* 11100111 */
+       0x3c, /* 00111100 */
+       0xdb, /* 11011011 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 16 0x10 '^P' */
+       0x00, /* 00000000 */
+       0x80, /* 10000000 */
+       0xc0, /* 11000000 */
+       0xe0, /* 11100000 */
+       0xf0, /* 11110000 */
+       0xf8, /* 11111000 */
+       0xfe, /* 11111110 */
+       0xf8, /* 11111000 */
+       0xf0, /* 11110000 */
+       0xe0, /* 11100000 */
+       0xc0, /* 11000000 */
+       0x80, /* 10000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 17 0x11 '^Q' */
+       0x00, /* 00000000 */
+       0x02, /* 00000010 */
+       0x06, /* 00000110 */
+       0x0e, /* 00001110 */
+       0x1e, /* 00011110 */
+       0x3e, /* 00111110 */
+       0xfe, /* 11111110 */
+       0x3e, /* 00111110 */
+       0x1e, /* 00011110 */
+       0x0e, /* 00001110 */
+       0x06, /* 00000110 */
+       0x02, /* 00000010 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 18 0x12 '^R' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 19 0x13 '^S' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 20 0x14 '^T' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7f, /* 01111111 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0x7b, /* 01111011 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 21 0x15 '^U' */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0x60, /* 01100000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x0c, /* 00001100 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 22 0x16 '^V' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 23 0x17 '^W' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 24 0x18 '^X' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 25 0x19 '^Y' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 26 0x1a '^Z' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0xfe, /* 11111110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 27 0x1b '^[' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xfe, /* 11111110 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 28 0x1c '^\' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 29 0x1d '^]' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x28, /* 00101000 */
+       0x6c, /* 01101100 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x28, /* 00101000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 30 0x1e '^^' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x7c, /* 01111100 */
+       0x7c, /* 01111100 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 31 0x1f '^_' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0x7c, /* 01111100 */
+       0x7c, /* 01111100 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 32 0x20 ' ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 33 0x21 '!' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 34 0x22 '"' */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x24, /* 00100100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 35 0x23 '#' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 36 0x24 '$' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc2, /* 11000010 */
+       0xc0, /* 11000000 */
+       0x7c, /* 01111100 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x86, /* 10000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 37 0x25 '%' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc2, /* 11000010 */
+       0xc6, /* 11000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc6, /* 11000110 */
+       0x86, /* 10000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 38 0x26 '&' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 39 0x27 ''' */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 40 0x28 '(' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 41 0x29 ')' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 42 0x2a '*' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0xff, /* 11111111 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 43 0x2b '+' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 44 0x2c ',' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 45 0x2d '-' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 46 0x2e '.' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 47 0x2f '/' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x02, /* 00000010 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0x80, /* 10000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 48 0x30 '0' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 49 0x31 '1' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x38, /* 00111000 */
+       0x78, /* 01111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 50 0x32 '2' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 51 0x33 '3' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x3c, /* 00111100 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 52 0x34 '4' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x1c, /* 00011100 */
+       0x3c, /* 00111100 */
+       0x6c, /* 01101100 */
+       0xcc, /* 11001100 */
+       0xfe, /* 11111110 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x1e, /* 00011110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 53 0x35 '5' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xfc, /* 11111100 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 54 0x36 '6' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xfc, /* 11111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 55 0x37 '7' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 56 0x38 '8' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 57 0x39 '9' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7e, /* 01111110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 58 0x3a ':' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 59 0x3b ';' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 60 0x3c '<' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x06, /* 00000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 61 0x3d '=' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 62 0x3e '>' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 63 0x3f '?' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 64 0x40 '@' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xde, /* 11011110 */
+       0xde, /* 11011110 */
+       0xde, /* 11011110 */
+       0xdc, /* 11011100 */
+       0xc0, /* 11000000 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 65 0x41 'A' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 66 0x42 'B' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfc, /* 11111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0xfc, /* 11111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 67 0x43 'C' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0xc2, /* 11000010 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc2, /* 11000010 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 68 0x44 'D' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xf8, /* 11111000 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0xf8, /* 11111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 69 0x45 'E' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x66, /* 01100110 */
+       0x62, /* 01100010 */
+       0x68, /* 01101000 */
+       0x78, /* 01111000 */
+       0x68, /* 01101000 */
+       0x60, /* 01100000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 70 0x46 'F' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x66, /* 01100110 */
+       0x62, /* 01100010 */
+       0x68, /* 01101000 */
+       0x78, /* 01111000 */
+       0x68, /* 01101000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 71 0x47 'G' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0xc2, /* 11000010 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xde, /* 11011110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x66, /* 01100110 */
+       0x3a, /* 00111010 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 72 0x48 'H' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 73 0x49 'I' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 74 0x4a 'J' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1e, /* 00011110 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 75 0x4b 'K' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xe6, /* 11100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0x78, /* 01111000 */
+       0x78, /* 01111000 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0xe6, /* 11100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 76 0x4c 'L' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xf0, /* 11110000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 77 0x4d 'M' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xee, /* 11101110 */
+       0xfe, /* 11111110 */
+       0xfe, /* 11111110 */
+       0xd6, /* 11010110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 78 0x4e 'N' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xe6, /* 11100110 */
+       0xf6, /* 11110110 */
+       0xfe, /* 11111110 */
+       0xde, /* 11011110 */
+       0xce, /* 11001110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 79 0x4f 'O' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 80 0x50 'P' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfc, /* 11111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 81 0x51 'Q' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xd6, /* 11010110 */
+       0xde, /* 11011110 */
+       0x7c, /* 01111100 */
+       0x0c, /* 00001100 */
+       0x0e, /* 00001110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 82 0x52 'R' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfc, /* 11111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0xe6, /* 11100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 83 0x53 'S' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x60, /* 01100000 */
+       0x38, /* 00111000 */
+       0x0c, /* 00001100 */
+       0x06, /* 00000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 84 0x54 'T' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x5a, /* 01011010 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 85 0x55 'U' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 86 0x56 'V' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 87 0x57 'W' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xfe, /* 11111110 */
+       0xee, /* 11101110 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 88 0x58 'X' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x7c, /* 01111100 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x7c, /* 01111100 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 89 0x59 'Y' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 90 0x5a 'Z' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0x86, /* 10000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc2, /* 11000010 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 91 0x5b '[' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 92 0x5c '\' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x80, /* 10000000 */
+       0xc0, /* 11000000 */
+       0xe0, /* 11100000 */
+       0x70, /* 01110000 */
+       0x38, /* 00111000 */
+       0x1c, /* 00011100 */
+       0x0e, /* 00001110 */
+       0x06, /* 00000110 */
+       0x02, /* 00000010 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 93 0x5d ']' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 94 0x5e '^' */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 95 0x5f '_' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 96 0x60 '`' */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 97 0x61 'a' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 98 0x62 'b' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xe0, /* 11100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x78, /* 01111000 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 99 0x63 'c' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 100 0x64 'd' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1c, /* 00011100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x3c, /* 00111100 */
+       0x6c, /* 01101100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 101 0x65 'e' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 102 0x66 'f' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1c, /* 00011100 */
+       0x36, /* 00110110 */
+       0x32, /* 00110010 */
+       0x30, /* 00110000 */
+       0x78, /* 01111000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 103 0x67 'g' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x7c, /* 01111100 */
+       0x0c, /* 00001100 */
+       0xcc, /* 11001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+
+       /* 104 0x68 'h' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xe0, /* 11100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x6c, /* 01101100 */
+       0x76, /* 01110110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0xe6, /* 11100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 105 0x69 'i' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 106 0x6a 'j' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x00, /* 00000000 */
+       0x0e, /* 00001110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+
+       /* 107 0x6b 'k' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xe0, /* 11100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0x78, /* 01111000 */
+       0x78, /* 01111000 */
+       0x6c, /* 01101100 */
+       0x66, /* 01100110 */
+       0xe6, /* 11100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 108 0x6c 'l' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 109 0x6d 'm' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xec, /* 11101100 */
+       0xfe, /* 11111110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 110 0x6e 'n' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xdc, /* 11011100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 111 0x6f 'o' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 112 0x70 'p' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xdc, /* 11011100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x00, /* 00000000 */
+
+       /* 113 0x71 'q' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x7c, /* 01111100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x1e, /* 00011110 */
+       0x00, /* 00000000 */
+
+       /* 114 0x72 'r' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xdc, /* 11011100 */
+       0x76, /* 01110110 */
+       0x66, /* 01100110 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 115 0x73 's' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0x60, /* 01100000 */
+       0x38, /* 00111000 */
+       0x0c, /* 00001100 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 116 0x74 't' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0xfc, /* 11111100 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x36, /* 00110110 */
+       0x1c, /* 00011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 117 0x75 'u' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 118 0x76 'v' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 119 0x77 'w' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xd6, /* 11010110 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 120 0x78 'x' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 121 0x79 'y' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7e, /* 01111110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0xf8, /* 11111000 */
+       0x00, /* 00000000 */
+
+       /* 122 0x7a 'z' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xcc, /* 11001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 123 0x7b '{' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0e, /* 00001110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x70, /* 01110000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x0e, /* 00001110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 124 0x7c '|' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 125 0x7d '}' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x70, /* 01110000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x0e, /* 00001110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 126 0x7e '~' */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 127 0x7f '\7f' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 128 0x80 '\80' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0xc2, /* 11000010 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc2, /* 11000010 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 129 0x81 '\81' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 130 0x82 '\82' */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 131 0x83 '\83' */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 132 0x84 '\84' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 133 0x85 '\85' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 134 0x86 '\86' */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 135 0x87 '\87' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x18, /* 00011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 136 0x88 '\88' */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 137 0x89 '\89' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 138 0x8a '\8a' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 139 0x8b '\8b' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 140 0x8c '\8c' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 141 0x8d '\8d' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 142 0x8e '\8e' */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 143 0x8f '\8f' */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 144 0x90 '\90' */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x66, /* 01100110 */
+       0x62, /* 01100010 */
+       0x68, /* 01101000 */
+       0x78, /* 01111000 */
+       0x68, /* 01101000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 145 0x91 '\91' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xec, /* 11101100 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x7e, /* 01111110 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0x6e, /* 01101110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 146 0x92 '\92' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3e, /* 00111110 */
+       0x6c, /* 01101100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xfe, /* 11111110 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xce, /* 11001110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 147 0x93 '\93' */
+       0x00, /* 00000000 */
+       0x10, /* 00010000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 148 0x94 '\94' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 149 0x95 '\95' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 150 0x96 '\96' */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x78, /* 01111000 */
+       0xcc, /* 11001100 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 151 0x97 '\97' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 152 0x98 '\98' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7e, /* 01111110 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x78, /* 01111000 */
+       0x00, /* 00000000 */
+
+       /* 153 0x99 '\99' */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 154 0x9a '\9a' */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 155 0x9b '\9b' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 156 0x9c '\9c' */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x64, /* 01100100 */
+       0x60, /* 01100000 */
+       0xf0, /* 11110000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xe6, /* 11100110 */
+       0xfc, /* 11111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 157 0x9d '\9d' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 158 0x9e '\9e' */
+       0x00, /* 00000000 */
+       0xf8, /* 11111000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xf8, /* 11111000 */
+       0xc4, /* 11000100 */
+       0xcc, /* 11001100 */
+       0xde, /* 11011110 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 159 0x9f '\9f' */
+       0x00, /* 00000000 */
+       0x0e, /* 00001110 */
+       0x1b, /* 00011011 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xd8, /* 11011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 160 0xa0 ' ' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0x0c, /* 00001100 */
+       0x7c, /* 01111100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 161 0xa1 '¡' */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 162 0xa2 '¢' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 163 0xa3 '£' */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x00, /* 00000000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 164 0xa4 '¤' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0xdc, /* 11011100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 165 0xa5 '¥' */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0xc6, /* 11000110 */
+       0xe6, /* 11100110 */
+       0xf6, /* 11110110 */
+       0xfe, /* 11111110 */
+       0xde, /* 11011110 */
+       0xce, /* 11001110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 166 0xa6 '¦' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x3e, /* 00111110 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 167 0xa7 '§' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 168 0xa8 '¨' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x7c, /* 01111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 169 0xa9 '©' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 170 0xaa 'ª' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 171 0xab '«' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0xe0, /* 11100000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xdc, /* 11011100 */
+       0x86, /* 10000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x3e, /* 00111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 172 0xac '¬' */
+       0x00, /* 00000000 */
+       0x60, /* 01100000 */
+       0xe0, /* 11100000 */
+       0x62, /* 01100010 */
+       0x66, /* 01100110 */
+       0x6c, /* 01101100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x66, /* 01100110 */
+       0xce, /* 11001110 */
+       0x9a, /* 10011010 */
+       0x3f, /* 00111111 */
+       0x06, /* 00000110 */
+       0x06, /* 00000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 173 0xad '­' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 174 0xae '®' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x36, /* 00110110 */
+       0x6c, /* 01101100 */
+       0xd8, /* 11011000 */
+       0x6c, /* 01101100 */
+       0x36, /* 00110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 175 0xaf '¯' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xd8, /* 11011000 */
+       0x6c, /* 01101100 */
+       0x36, /* 00110110 */
+       0x6c, /* 01101100 */
+       0xd8, /* 11011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 176 0xb0 '°' */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+       0x11, /* 00010001 */
+       0x44, /* 01000100 */
+
+       /* 177 0xb1 '±' */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+       0x55, /* 01010101 */
+       0xaa, /* 10101010 */
+
+       /* 178 0xb2 '²' */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+       0xdd, /* 11011101 */
+       0x77, /* 01110111 */
+
+       /* 179 0xb3 '³' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 180 0xb4 '´' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 181 0xb5 'µ' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 182 0xb6 '¶' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf6, /* 11110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 183 0xb7 '·' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 184 0xb8 '¸' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 185 0xb9 '¹' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf6, /* 11110110 */
+       0x06, /* 00000110 */
+       0xf6, /* 11110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 186 0xba 'º' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 187 0xbb '»' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x06, /* 00000110 */
+       0xf6, /* 11110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 188 0xbc '¼' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf6, /* 11110110 */
+       0x06, /* 00000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 189 0xbd '½' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 190 0xbe '¾' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 191 0xbf '¿' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xf8, /* 11111000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 192 0xc0 'À' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 193 0xc1 'Á' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 194 0xc2 'Â' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 195 0xc3 'Ã' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 196 0xc4 'Ä' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 197 0xc5 'Å' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 198 0xc6 'Æ' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 199 0xc7 'Ç' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x37, /* 00110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 200 0xc8 'È' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x37, /* 00110111 */
+       0x30, /* 00110000 */
+       0x3f, /* 00111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 201 0xc9 'É' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3f, /* 00111111 */
+       0x30, /* 00110000 */
+       0x37, /* 00110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 202 0xca 'Ê' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf7, /* 11110111 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 203 0xcb 'Ë' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0xf7, /* 11110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 204 0xcc 'Ì' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x37, /* 00110111 */
+       0x30, /* 00110000 */
+       0x37, /* 00110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 205 0xcd 'Í' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 206 0xce 'Î' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xf7, /* 11110111 */
+       0x00, /* 00000000 */
+       0xf7, /* 11110111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 207 0xcf 'Ï' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 208 0xd0 'Ð' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 209 0xd1 'Ñ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 210 0xd2 'Ò' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 211 0xd3 'Ó' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x3f, /* 00111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 212 0xd4 'Ô' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 213 0xd5 'Õ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 214 0xd6 'Ö' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x3f, /* 00111111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 215 0xd7 '×' */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0xff, /* 11111111 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+
+       /* 216 0xd8 'Ø' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0xff, /* 11111111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 217 0xd9 'Ù' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xf8, /* 11111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 218 0xda 'Ú' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1f, /* 00011111 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 219 0xdb 'Û' */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+
+       /* 220 0xdc 'Ü' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+
+       /* 221 0xdd 'Ý' */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+       0xf0, /* 11110000 */
+
+       /* 222 0xde 'Þ' */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+       0x0f, /* 00001111 */
+
+       /* 223 0xdf 'ß' */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0xff, /* 11111111 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 224 0xe0 'à' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xdc, /* 11011100 */
+       0x76, /* 01110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 225 0xe1 'á' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x78, /* 01111000 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xcc, /* 11001100 */
+       0xd8, /* 11011000 */
+       0xcc, /* 11001100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xcc, /* 11001100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 226 0xe2 'â' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 227 0xe3 'ã' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 228 0xe4 'ä' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 229 0xe5 'å' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 230 0xe6 'æ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x7c, /* 01111100 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+
+       /* 231 0xe7 'ç' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 232 0xe8 'è' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 233 0xe9 'é' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xfe, /* 11111110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 234 0xea 'ê' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0xee, /* 11101110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 235 0xeb 'ë' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1e, /* 00011110 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x3e, /* 00111110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x66, /* 01100110 */
+       0x3c, /* 00111100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 236 0xec 'ì' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 237 0xed 'í' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x03, /* 00000011 */
+       0x06, /* 00000110 */
+       0x7e, /* 01111110 */
+       0xdb, /* 11011011 */
+       0xdb, /* 11011011 */
+       0xf3, /* 11110011 */
+       0x7e, /* 01111110 */
+       0x60, /* 01100000 */
+       0xc0, /* 11000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 238 0xee 'î' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x1c, /* 00011100 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x7c, /* 01111100 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x1c, /* 00011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 239 0xef 'ï' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7c, /* 01111100 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0xc6, /* 11000110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 240 0xf0 'ð' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0xfe, /* 11111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 241 0xf1 'ñ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x7e, /* 01111110 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 242 0xf2 'ò' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x06, /* 00000110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 243 0xf3 'ó' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x30, /* 00110000 */
+       0x60, /* 01100000 */
+       0x30, /* 00110000 */
+       0x18, /* 00011000 */
+       0x0c, /* 00001100 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 244 0xf4 'ô' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x0e, /* 00001110 */
+       0x1b, /* 00011011 */
+       0x1b, /* 00011011 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+
+       /* 245 0xf5 'õ' */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0xd8, /* 11011000 */
+       0x70, /* 01110000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 246 0xf6 'ö' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 247 0xf7 '÷' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0x76, /* 01110110 */
+       0xdc, /* 11011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 248 0xf8 'ø' */
+       0x00, /* 00000000 */
+       0x38, /* 00111000 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x38, /* 00111000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 249 0xf9 'ù' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 250 0xfa 'ú' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x18, /* 00011000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 251 0xfb 'û' */
+       0x00, /* 00000000 */
+       0x0f, /* 00001111 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0x0c, /* 00001100 */
+       0xec, /* 11101100 */
+       0x6c, /* 01101100 */
+       0x6c, /* 01101100 */
+       0x3c, /* 00111100 */
+       0x1c, /* 00011100 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 252 0xfc 'ü' */
+       0x00, /* 00000000 */
+       0x6c, /* 01101100 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x36, /* 00110110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 253 0xfd 'ý' */
+       0x00, /* 00000000 */
+       0x3c, /* 00111100 */
+       0x66, /* 01100110 */
+       0x0c, /* 00001100 */
+       0x18, /* 00011000 */
+       0x32, /* 00110010 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 254 0xfe 'þ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x7e, /* 01111110 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+       /* 255 0xff 'ÿ' */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+       0x00, /* 00000000 */
+
+};
+
+#endif
index 6895550d3cae5a7ac476f3aa8770542fefd87e1f..abd61c891861ee6c2c011beaac051c645e1222e6 100644 (file)
@@ -478,7 +478,8 @@ static int cmpkey(const void *p1, const void *p2)
 }
 
 ssize_t hexport_r(struct hsearch_data *htab, const char sep,
-                char **resp, size_t size)
+                char **resp, size_t size,
+                int argc, char * const argv[])
 {
        ENTRY *list[htab->size];
        char *res, *p;
@@ -491,8 +492,8 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep,
                return (-1);
        }
 
-       debug("EXPORT  table = %p, htab.size = %d, htab.filled = %d, size = %d\n",
-               htab, htab->size, htab->filled, size);
+       debug("EXPORT  table = %p, htab.size = %d, htab.filled = %d, "
+               "size = %zu\n", htab, htab->size, htab->filled, size);
        /*
         * Pass 1:
         * search used entries,
@@ -502,6 +503,16 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep,
 
                if (htab->table[i].used > 0) {
                        ENTRY *ep = &htab->table[i].entry;
+                       int arg, found = 0;
+
+                       for (arg = 0; arg < argc; ++arg) {
+                               if (strcmp(argv[arg], ep->key) == 0) {
+                                       found = 1;
+                                       break;
+                               }
+                       }
+                       if ((argc > 0) && (found == 0))
+                               continue;
 
                        list[n++] = ep;
 
@@ -539,8 +550,8 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep,
        /* Check if the user supplied buffer size is sufficient */
        if (size) {
                if (size < totlen + 1) {        /* provided buffer too small */
-                       debug("### buffer too small: %d, but need %d\n",
-                               size, totlen + 1);
+                       printf("Env export buffer too small: %zu, "
+                               "but need %zu\n", size, totlen + 1);
                        __set_errno(ENOMEM);
                        return (-1);
                }
@@ -640,7 +651,7 @@ int himport_r(struct hsearch_data *htab,
 
        /* we allocate new space to make sure we can write to the array */
        if ((data = malloc(size)) == NULL) {
-               debug("himport_r: can't malloc %d bytes\n", size);
+               debug("himport_r: can't malloc %zu bytes\n", size);
                __set_errno(ENOMEM);
                return 0;
        }
index 86c392c225a53f5ebfe03f636853acae379ed056..57098841f9a40ff9bd590075845ca6b9b06f8a9a 100644 (file)
@@ -16,6 +16,7 @@
  * bcc and gcc. */
 
 #include <linux/types.h>
+#include <common.h>
 #include <exports.h>
 
 void qsort(void  *base,
index accf71607c54be0126d2e4d114cafb09cc49b7e1..7746e41dd14dd2d5532aaeae19e05df440298aad 100644 (file)
@@ -42,10 +42,10 @@ SOBJS       = _divsi3.o \
 
 COBJS  = cpu.o \
        davinci_nand.o \
-       davinci_pinmux.o \
+       pinmux.o \
+       da850_pinmux.o \
        div0.o \
        hawkboard_nand_spl.o \
-       memsize.o \
        misc.o \
        nand_boot.o \
        ns16550.o \
@@ -78,9 +78,13 @@ $(nandobj)u-boot.lds: $(LDSCRIPT)
 # create symbolic links for common files
 
 # from board directory
-$(obj)davinci_pinmux.c:
+$(obj)pinmux.c:
        @rm -f $@
-       @ln -s $(TOPDIR)/board/davinci/common/davinci_pinmux.c $@
+       @ln -s $(TOPDIR)/arch/arm/cpu/arm926ejs/davinci/pinmux.c $@
+
+$(obj)da850_pinmux.c:
+       @rm -f $@
+       @ln -s $(TOPDIR)/arch/arm/cpu/arm926ejs/davinci/da850_pinmux.c $@
 
 # from drivers/mtd/nand directory
 $(obj)davinci_nand.c:
@@ -122,25 +126,19 @@ $(obj)cpu.c:
        @rm -f $@
        @ln -s $(TOPDIR)/arch/arm/cpu/arm926ejs/davinci/cpu.c $@
 
-# from board directory
-$(obj)hawkboard_nand_spl.c:
+$(obj)misc.c:
        @rm -f $@
-       ln -s $(TOPDIR)/board/davinci/da8xxevm/hawkboard_nand_spl.c $@
+       ln -s $(TOPDIR)/arch/arm/cpu/arm926ejs/davinci/misc.c $@
 
 # from board directory
-$(obj)misc.c:
+$(obj)hawkboard_nand_spl.c:
        @rm -f $@
-       ln -s $(TOPDIR)/board/davinci/common/misc.c $@
+       ln -s $(TOPDIR)/board/davinci/da8xxevm/hawkboard_nand_spl.c $@
 
 $(obj)psc.c:
        @rm -f $@
        ln -s $(TOPDIR)/arch/arm/cpu/arm926ejs/davinci/psc.c $@
 
-# from common directory
-$(obj)memsize.c:
-       @rm -f $@
-       ln -s $(TOPDIR)/common/memsize.c $@
-
 #########################################################################
 
 $(obj)%.o:     $(obj)%.S
index 2f9c307756517f7065d67c26f395ca16f77c9b8d..c9e75ba7f17a97601f9b570dd61c97b4cfb4ee68 100644 (file)
@@ -33,12 +33,12 @@ nandobj     := $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
-          $(LDFLAGS_FINAL)
+               $(LDFLAGS_FINAL) -gc-sections
 AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+CFLAGS += -DCONFIG_NAND_SPL -ffunction-sections
 
 SOBJS  = start.o cpu_init.o lowlevel_init.o
-COBJS  = nand_boot.o nand_ecc.o s3c64xx.o smdk6400_nand_spl.o
+COBJS  = nand_boot.o nand_ecc.o s3c64xx.o smdk6400_nand_spl.o nand_base.o
 
 SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
@@ -98,6 +98,9 @@ $(obj)smdk6400_nand_spl.c:
        @rm -f $@
        @ln -s $(TOPDIR)/board/samsung/smdk6400/smdk6400_nand_spl.c $@
 
+$(obj)nand_base.c:
+       @rm -f $@
+       @ln -s $(TOPDIR)/drivers/mtd/nand/nand_base.c $@
 #########################################################################
 
 $(obj)%.o:     $(obj)%.S
index 615ef258a8c6e5715398d587ce71d65abf4c884d..bee102950adfc16add8563f4c0a68db272250d23 100644 (file)
@@ -187,7 +187,6 @@ static int nand_read_page(struct mtd_info *mtd, int block, int page, uchar *dst)
        int eccbytes = CONFIG_SYS_NAND_ECCBYTES;
        int eccsteps = CONFIG_SYS_NAND_ECCSTEPS;
        uint8_t *p = dst;
-       int stat;
 
        nand_command(mtd, block, page, 0, NAND_CMD_READ0);
 
@@ -217,7 +216,7 @@ static int nand_read_page(struct mtd_info *mtd, int block, int page, uchar *dst)
                 * from correct_data(). We just hope that all possible errors
                 * are corrected by this routine.
                 */
-               stat = this->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
+               this->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
        }
 
        return 0;
@@ -268,7 +267,6 @@ void nand_boot(void)
 {
        struct nand_chip nand_chip;
        nand_info_t nand_info;
-       int ret;
        __attribute__((noreturn)) void (*uboot)(void);
 
        /*
@@ -287,8 +285,8 @@ void nand_boot(void)
        /*
         * Load U-Boot image from NAND into RAM
         */
-       ret = nand_load(&nand_info, CONFIG_SYS_NAND_U_BOOT_OFFS, CONFIG_SYS_NAND_U_BOOT_SIZE,
-                       (uchar *)CONFIG_SYS_NAND_U_BOOT_DST);
+       nand_load(&nand_info, CONFIG_SYS_NAND_U_BOOT_OFFS, CONFIG_SYS_NAND_U_BOOT_SIZE,
+                 (uchar *)CONFIG_SYS_NAND_U_BOOT_DST);
 
 #ifdef CONFIG_NAND_ENV_DST
        nand_load(&nand_info, CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
index b789eec0d7edc3966da5197c1f7bbe5a330ce609..34124b8fc2425d6fe70e3b5cd42ec159119670df 100644 (file)
@@ -17,6 +17,7 @@
 #ifdef CONFIG_STATUS_LED
 #include <status_led.h>
 #endif
+#include <linux/compiler.h>
 
 #define BOOTP_VENDOR_MAGIC     0x63825363      /* RFC1048 Magic Cookie         */
 
@@ -105,7 +106,7 @@ static int BootpCheckPkt(uchar *pkt, unsigned dest, unsigned src, unsigned len)
  */
 static void BootpCopyNetParams(Bootp_t *bp)
 {
-       IPaddr_t tmp_ip;
+       __maybe_unused IPaddr_t tmp_ip;
 
        NetCopyIP(&NetOurIP, &bp->bp_yiaddr);
 #if !defined(CONFIG_BOOTP_SERVERIP)
index d0fe1c4960a2fb024dc5cb704712fb0e61ab785e..045405b7a89742c1d1933f73d5a977cb82d3b270 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -728,7 +728,7 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len)
         */
        if (memcmp(ether, NetEtherNullAddr, 6) == 0) {
 
-               debug("sending ARP for %08lx\n", dest);
+               debug("sending ARP for %08x\n", dest);
 
                NetArpWaitPacketIP = dest;
                NetArpWaitPacketMAC = ether;
@@ -751,7 +751,7 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len)
                return 1;       /* waiting */
        }
 
-       debug("sending UDP to %08lx/%pM\n", dest, ether);
+       debug("sending UDP to %08x/%pM\n", dest, ether);
 
        pkt = (uchar *)NetTxPacket;
        pkt += NetSetEther(pkt, ether, PROT_IP);
@@ -775,7 +775,7 @@ int PingSend(void)
 
        memcpy(mac, NetEtherNullAddr, 6);
 
-       debug("sending ARP for %08lx\n", NetPingIP);
+       debug("sending ARP for %08x\n", NetPingIP);
 
        NetArpWaitPacketIP = NetPingIP;
        NetArpWaitPacketMAC = mac;
index 5e717e3c6d63221569ce94210afd5197dcd041db..b5b482c3f3cefce41f22e8e596194f4e21b469a3 100644 (file)
--- a/net/nfs.c
+++ b/net/nfs.c
@@ -688,7 +688,7 @@ NfsStart (void)
        }
 
        if (BootFile[0] == '\0') {
-               sprintf (default_filename, "/nfsroot/%02lX%02lX%02lX%02lX.img",
+               sprintf(default_filename, "/nfsroot/%02X%02X%02X%02X.img",
                        NetOurIP & 0xFF,
                        (NetOurIP >>  8) & 0xFF,
                        (NetOurIP >> 16) & 0xFF,
index 49997073872eef56dabd9a294b49f0f907e10b9f..7aa3e23c95d1aba5f79202b7a0f550fd04889754 100644 (file)
@@ -708,7 +708,7 @@ void TftpStart(enum proto_t protocol)
 
        TftpRemoteIP = NetServerIP;
        if (BootFile[0] == '\0') {
-               sprintf(default_filename, "%02lX%02lX%02lX%02lX.img",
+               sprintf(default_filename, "%02X%02X%02X%02X.img",
                        NetOurIP & 0xFF,
                        (NetOurIP >>  8) & 0xFF,
                        (NetOurIP >> 16) & 0xFF,
diff --git a/onenand_ipl/board/vpac270/Makefile b/onenand_ipl/board/vpac270/Makefile
deleted file mode 100644 (file)
index f850ddd..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-
-include $(TOPDIR)/config.mk
-include $(TOPDIR)/board/$(BOARDDIR)/config.mk
-
-LDSCRIPT= $(TOPDIR)/onenand_ipl/board/$(BOARDDIR)/u-boot.onenand.lds
-LDFLAGS        = -Bstatic -T $(onenandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(PLATFORM_LDFLAGS)
-AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_ONENAND_IPL
-CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_ONENAND_IPL
-OBJCFLAGS += --gap-fill=0x00
-
-SOBJS  += start.o
-COBJS  := vpac270.o
-COBJS  += onenand_read.o
-COBJS  += onenand_boot.o
-
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
-__OBJS := $(SOBJS) $(COBJS)
-LNDIR  := $(OBJTREE)/onenand_ipl/board/$(BOARDDIR)
-
-onenandobj     := $(OBJTREE)/onenand_ipl/
-
-ALL    = $(onenandobj)onenand-ipl $(onenandobj)onenand-ipl.bin $(onenandobj)onenand-ipl-2k.bin
-
-all:   $(obj).depend $(ALL)
-
-$(onenandobj)onenand-ipl-2k.bin:       $(onenandobj)onenand-ipl
-       $(OBJCOPY) ${OBJCFLAGS} --pad-to=0x0800 -O binary $< $@
-
-$(onenandobj)onenand-ipl.bin:  $(onenandobj)onenand-ipl
-       $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
-
-$(onenandobj)onenand-ipl:      $(OBJS) $(onenandobj)u-boot.lds
-       cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
-               -Map $@.map -o $@
-
-$(onenandobj)u-boot.lds:       $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
-
-# create symbolic links from common files
-
-# from cpu directory
-$(obj)start.S:
-       @rm -f $@
-       ln -s $(SRCTREE)/$(CPUDIR)/start.S $@
-
-# from onenand_ipl directory
-$(obj)onenand_ipl.h:
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/onenand_ipl.h $@
-
-$(obj)onenand_boot.c:  $(obj)onenand_ipl.h
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/onenand_boot.c $@
-
-$(obj)onenand_read.c:  $(obj)onenand_ipl.h
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/onenand_read.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)vpac270.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/board/$(BOARDDIR)/vpac270.c $@
-endif
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)$.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
diff --git a/onenand_ipl/board/vpac270/config.mk b/onenand_ipl/board/vpac270/config.mk
deleted file mode 100644 (file)
index 752836d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SYS_TEXT_BASE = 0x5c03fc00
index 719194b5d930b555eeb23f1c5d8b616e8a695b6f..6bbd2c236af37d1b96e293df47470fabb63a1041 100644 (file)
@@ -63,13 +63,12 @@ const static unsigned long otherpattern = 0x01234567;
 /* test write/read og a given LIME Register */
 static int gdc_test_reg_one(uint value)
 {
-       int ret;
        uint read_value;
 
        /* write test pattern */
        out_be32((void *)GDC_SCRATCH_REG, value);
        /* read other location (protect against data lines capacity) */
-       ret = in_be32((void *)GDC_RAM_START);
+       in_be32((void *)GDC_RAM_START);
        /* verify test pattern */
        read_value = in_be32((void *)GDC_SCRATCH_REG);
        if (read_value != value) {
index 4af300d880ac1c21a44a1eba919d3940b3465a3d..5b4f42c6d22a1496d760f7b5712d58d7d45564a9 100644 (file)
@@ -34,12 +34,11 @@ GNU_FPOST_ATTR
 
 int fpu_post_test_math1 (void)
 {
-       volatile double a, *p;
+       volatile double a;
        double c, d;
        volatile double b;
 
        d = 1.0;
-       p = &b;
 
        do
        {
index c8317fa7027c16f2a76b3361e8fd17a9c4267090..6ac42a2d6752ce85a21a5814d1ad6eb00b4ab415 100644 (file)
@@ -54,6 +54,7 @@ LIBS-$(CONFIG_SPL_FAT_SUPPORT) += fs/fat/libfat.o
 LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/libgeneric.o
 LIBS-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/libpower.o
 LIBS-$(CONFIG_SPL_NAND_SUPPORT) += drivers/mtd/nand/libnand.o
+LIBS-$(CONFIG_SPL_ONENAND_SUPPORT) += drivers/mtd/onenand/libonenand.o
 LIBS-$(CONFIG_SPL_DMA_SUPPORT) += drivers/dma/libdma.o
 LIBS-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/memory.o
 
@@ -63,6 +64,9 @@ endif
 ifeq ($(SOC),omap4)
 LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
 endif
+ifeq ($(SOC),omap5)
+LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
+endif
 
 START := $(addprefix $(SPLTREE)/,$(START))
 LIBS := $(addprefix $(SPLTREE)/,$(sort $(LIBS-y)))
index 07f21a376ecd7c68816e104cb2ea8e4783ed6fac..e4d2c2f55ec8f767c062b68e01326303debc43d8 100644 (file)
@@ -2,8 +2,10 @@
 /envcrc
 /gen_eth_addr
 /img2srec
+/mkenvimage
 /mkimage
 /mpc86x_clk
+/mxsboot
 /ncb
 /ncp
 /ubsha1
index df56a250b3e6c84f2fc93650573c867056f6062e..a5f989a67173446f9af35314e44f360edd4af497 100644 (file)
@@ -66,7 +66,9 @@ BIN_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc$(SFX)
 BIN_FILES-$(CONFIG_CMD_NET) += gen_eth_addr$(SFX)
 BIN_FILES-$(CONFIG_CMD_LOADS) += img2srec$(SFX)
 BIN_FILES-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes$(SFX)
+BIN_FILES-y += mkenvimage$(SFX)
 BIN_FILES-y += mkimage$(SFX)
+BIN_FILES-$(CONFIG_MX28) += mxsboot$(SFX)
 BIN_FILES-$(CONFIG_NETCONSOLE) += ncb$(SFX)
 BIN_FILES-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1$(SFX)
 
@@ -90,7 +92,9 @@ NOPED_OBJ_FILES-y += aisimage.o
 NOPED_OBJ_FILES-y += kwbimage.o
 NOPED_OBJ_FILES-y += imximage.o
 NOPED_OBJ_FILES-y += omapimage.o
+NOPED_OBJ_FILES-y += mkenvimage.o
 NOPED_OBJ_FILES-y += mkimage.o
+OBJ_FILES-$(CONFIG_MX28) += mxsboot.o
 OBJ_FILES-$(CONFIG_NETCONSOLE) += ncb.o
 NOPED_OBJ_FILES-y += os_support.o
 OBJ_FILES-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1.o
@@ -111,8 +115,11 @@ LIBFDT_OBJ_FILES-y += fdt_wip.o
 
 # Generated LCD/video logo
 LOGO_H = $(OBJTREE)/include/bmp_logo.h
+LOGO_DATA_H = $(OBJTREE)/include/bmp_logo_data.h
 LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_H)
+LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_DATA_H)
 LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_H)
+LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_DATA_H)
 
 ifeq ($(LOGO_BMP),)
 LOGO_BMP= logos/denx.bmp
@@ -185,6 +192,9 @@ $(obj)xway-swap-bytes$(SFX):        $(obj)xway-swap-bytes.o
        $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
        $(HOSTSTRIP) $@
 
+$(obj)mkenvimage$(SFX):        $(obj)crc32.o $(obj)mkenvimage.o
+       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
+
 $(obj)mkimage$(SFX):   $(obj)aisimage.o \
                        $(obj)crc32.o \
                        $(obj)default_image.o \
@@ -206,6 +216,10 @@ $(obj)mpc86x_clk$(SFX):    $(obj)mpc86x_clk.o
        $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
        $(HOSTSTRIP) $@
 
+$(obj)mxsboot$(SFX):   $(obj)mxsboot.o
+       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
+       $(HOSTSTRIP) $@
+
 $(obj)ncb$(SFX):       $(obj)ncb.o
        $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
        $(HOSTSTRIP) $@
@@ -236,7 +250,10 @@ else
 endif
 
 $(LOGO_H):     $(obj)bmp_logo $(LOGO_BMP)
-       $(obj)./bmp_logo $(LOGO_BMP) >$@
+       $(obj)./bmp_logo --gen-info $(LOGO_BMP) > $@
+
+$(LOGO_DATA_H):        $(obj)bmp_logo $(LOGO_BMP)
+       $(obj)./bmp_logo --gen-data $(LOGO_BMP) > $@
 
 #########################################################################
 
index 6a1011194a5a5eea9dabad34d6b5bde608237989..c645708da5984875113d0cdbf4a73b694c3ca0a2 100644 (file)
@@ -180,7 +180,7 @@ static void aisimage_print_header(const void *hdr)
 
 static uint32_t *ais_insert_cmd_header(uint32_t cmd, uint32_t nargs,
        uint32_t *parms, struct image_type_params *tparams,
-       uint32_t *ptr, uint32_t size)
+       uint32_t *ptr)
 {
        int i;
 
@@ -285,7 +285,7 @@ static int aisimage_generate(struct mkimage_params *params,
        uint32_t nargs, cmd_parms[10];
        uint32_t value, size;
        char *name = params->imagename;
-       uint32_t *aishdr, tsize;
+       uint32_t *aishdr;
 
        fd = fopen(name, "r");
        if (fd == 0) {
@@ -363,7 +363,7 @@ static int aisimage_generate(struct mkimage_params *params,
                if (cmd != CMD_INVALID) {
                        /* Now insert the command into the header */
                        aishdr = ais_insert_cmd_header(cmd, nargs, cmd_parms,
-                               tparams, aishdr, tsize);
+                               tparams, aishdr);
                }
 
        }
index 47228d255b344a755790f7cfdcbe6e27246cea86..b2ad3d592768747ae0eed5bda884272a58bc47b7 100644 (file)
@@ -1,5 +1,10 @@
 #include "compiler.h"
 
+enum {
+       MODE_GEN_INFO,
+       MODE_GEN_DATA
+};
+
 typedef struct bitmap_s {              /* bitmap description */
        uint16_t width;
        uint16_t height;
@@ -9,6 +14,11 @@ typedef struct bitmap_s {             /* bitmap description */
 
 #define DEFAULT_CMAP_SIZE      16      /* size of default color map    */
 
+void usage(const char *prog)
+{
+       fprintf(stderr, "Usage: %s [--gen-info|--gen-data] file\n", prog);
+}
+
 /*
  * Neutralize little endians.
  */
@@ -39,21 +49,52 @@ int error (char * msg, FILE *fp)
        exit (EXIT_FAILURE);
 }
 
+void gen_info(bitmap_t *b, uint16_t n_colors)
+{
+       printf("/*\n"
+               " * Automatically generated by \"tools/bmp_logo\"\n"
+               " *\n"
+               " * DO NOT EDIT\n"
+               " *\n"
+               " */\n\n\n"
+               "#ifndef __BMP_LOGO_H__\n"
+               "#define __BMP_LOGO_H__\n\n"
+               "#define BMP_LOGO_WIDTH\t\t%d\n"
+               "#define BMP_LOGO_HEIGHT\t\t%d\n"
+               "#define BMP_LOGO_COLORS\t\t%d\n"
+               "#define BMP_LOGO_OFFSET\t\t%d\n\n"
+               "extern unsigned short bmp_logo_palette[];\n"
+               "extern unsigned char bmp_logo_bitmap[];\n\n"
+               "#endif /* __BMP_LOGO_H__ */\n",
+               b->width, b->height, n_colors,
+               DEFAULT_CMAP_SIZE);
+}
+
 int main (int argc, char *argv[])
 {
-       int     i, x;
+       int     mode, i, x;
        FILE    *fp;
        bitmap_t bmp;
        bitmap_t *b = &bmp;
        uint16_t data_offset, n_colors;
 
-       if (argc < 2) {
-               fprintf (stderr, "Usage: %s file\n", argv[0]);
+       if (argc < 3) {
+               usage(argv[0]);
                exit (EXIT_FAILURE);
        }
 
-       if ((fp = fopen (argv[1], "rb")) == NULL) {
-               perror (argv[1]);
+       if (!strcmp(argv[1], "--gen-info"))
+               mode = MODE_GEN_INFO;
+       else if (!strcmp(argv[1], "--gen-data"))
+               mode = MODE_GEN_DATA;
+       else {
+               usage(argv[0]);
+               exit(EXIT_FAILURE);
+       }
+
+       fp = fopen(argv[2], "rb");
+       if (!fp) {
+               perror(argv[2]);
                exit (EXIT_FAILURE);
        }
 
@@ -92,28 +133,26 @@ int main (int argc, char *argv[])
                n_colors = 256 - DEFAULT_CMAP_SIZE;
        }
 
-       printf ("/*\n"
+       if (mode == MODE_GEN_INFO) {
+               gen_info(b, n_colors);
+               goto out;
+       }
+
+       printf("/*\n"
                " * Automatically generated by \"tools/bmp_logo\"\n"
                " *\n"
                " * DO NOT EDIT\n"
                " *\n"
                " */\n\n\n"
-               "#ifndef __BMP_LOGO_H__\n"
-               "#define __BMP_LOGO_H__\n\n"
-               "#define BMP_LOGO_WIDTH\t\t%d\n"
-               "#define BMP_LOGO_HEIGHT\t\t%d\n"
-               "#define BMP_LOGO_COLORS\t\t%d\n"
-               "#define BMP_LOGO_OFFSET\t\t%d\n"
-               "\n",
-               b->width, b->height, n_colors,
-               DEFAULT_CMAP_SIZE);
+               "#ifndef __BMP_LOGO_DATA_H__\n"
+               "#define __BMP_LOGO_DATA_H__\n\n");
 
        /* allocate memory */
        if ((b->data = (uint8_t *)malloc(b->width * b->height)) == NULL)
                error ("Error allocating memory for file", fp);
 
        /* read and print the palette information */
-       printf ("unsigned short bmp_logo_palette[] = {\n");
+       printf("unsigned short bmp_logo_palette[] = {\n");
 
        for (i=0; i<n_colors; ++i) {
                b->palette[(int)(i*3+2)] = fgetc(fp);
@@ -137,14 +176,13 @@ int main (int argc, char *argv[])
        printf ("\n");
        printf ("};\n");
        printf ("\n");
-       printf ("unsigned char bmp_logo_bitmap[] = {\n");
+       printf("unsigned char bmp_logo_bitmap[] = {\n");
        for (i=(b->height-1)*b->width; i>=0; i-=b->width) {
                for (x = 0; x < b->width; x++) {
                        b->data[(uint16_t) i + x] = (uint8_t) fgetc (fp) \
                                                + DEFAULT_CMAP_SIZE;
                }
        }
-       fclose (fp);
 
        for (i=0; i<(b->height*b->width); ++i) {
                if ((i%8) == 0)
@@ -156,8 +194,10 @@ int main (int argc, char *argv[])
        }
        printf ("\n"
                "};\n\n"
-               "#endif /* __BMP_LOGO_H__ */\n"
+               "#endif /* __BMP_LOGO_DATA_H__ */\n"
        );
 
-       return (0);
+out:
+       fclose(fp);
+       return 0;
 }
diff --git a/tools/checkpatch.pl b/tools/checkpatch.pl
new file mode 100755 (executable)
index 0000000..2048a44
--- /dev/null
@@ -0,0 +1,3337 @@
+#!/usr/bin/perl -w
+# (c) 2001, Dave Jones. (the file handling bit)
+# (c) 2005, Joel Schopp <jschopp@austin.ibm.com> (the ugly bit)
+# (c) 2007,2008, Andy Whitcroft <apw@uk.ibm.com> (new conditions, test suite)
+# (c) 2008-2010 Andy Whitcroft <apw@canonical.com>
+# Licensed under the terms of the GNU GPL License version 2
+
+use strict;
+
+my $P = $0;
+$P =~ s@.*/@@g;
+
+my $V = '0.32';
+
+use Getopt::Long qw(:config no_auto_abbrev);
+
+my $quiet = 0;
+my $tree = 1;
+my $chk_signoff = 1;
+my $chk_patch = 1;
+my $tst_only;
+my $emacs = 0;
+my $terse = 0;
+my $file = 0;
+my $check = 0;
+my $summary = 1;
+my $mailback = 0;
+my $summary_file = 0;
+my $show_types = 0;
+my $root;
+my %debug;
+my %ignore_type = ();
+my @ignore = ();
+my $help = 0;
+my $configuration_file = ".checkpatch.conf";
+
+sub help {
+       my ($exitcode) = @_;
+
+       print << "EOM";
+Usage: $P [OPTION]... [FILE]...
+Version: $V
+
+Options:
+  -q, --quiet                quiet
+  --no-tree                  run without a kernel tree
+  --no-signoff               do not check for 'Signed-off-by' line
+  --patch                    treat FILE as patchfile (default)
+  --emacs                    emacs compile window format
+  --terse                    one line per report
+  -f, --file                 treat FILE as regular source file
+  --subjective, --strict     enable more subjective tests
+  --ignore TYPE(,TYPE2...)   ignore various comma separated message types
+  --show-types               show the message "types" in the output
+  --root=PATH                PATH to the kernel tree root
+  --no-summary               suppress the per-file summary
+  --mailback                 only produce a report in case of warnings/errors
+  --summary-file             include the filename in summary
+  --debug KEY=[0|1]          turn on/off debugging of KEY, where KEY is one of
+                             'values', 'possible', 'type', and 'attr' (default
+                             is all off)
+  --test-only=WORD           report only warnings/errors containing WORD
+                             literally
+  -h, --help, --version      display this help and exit
+
+When FILE is - read standard input.
+EOM
+
+       exit($exitcode);
+}
+
+my $conf = which_conf($configuration_file);
+if (-f $conf) {
+       my @conf_args;
+       open(my $conffile, '<', "$conf")
+           or warn "$P: Can't find a readable $configuration_file file $!\n";
+
+       while (<$conffile>) {
+               my $line = $_;
+
+               $line =~ s/\s*\n?$//g;
+               $line =~ s/^\s*//g;
+               $line =~ s/\s+/ /g;
+
+               next if ($line =~ m/^\s*#/);
+               next if ($line =~ m/^\s*$/);
+
+               my @words = split(" ", $line);
+               foreach my $word (@words) {
+                       last if ($word =~ m/^#/);
+                       push (@conf_args, $word);
+               }
+       }
+       close($conffile);
+       unshift(@ARGV, @conf_args) if @conf_args;
+}
+
+GetOptions(
+       'q|quiet+'      => \$quiet,
+       'tree!'         => \$tree,
+       'signoff!'      => \$chk_signoff,
+       'patch!'        => \$chk_patch,
+       'emacs!'        => \$emacs,
+       'terse!'        => \$terse,
+       'f|file!'       => \$file,
+       'subjective!'   => \$check,
+       'strict!'       => \$check,
+       'ignore=s'      => \@ignore,
+       'show-types!'   => \$show_types,
+       'root=s'        => \$root,
+       'summary!'      => \$summary,
+       'mailback!'     => \$mailback,
+       'summary-file!' => \$summary_file,
+
+       'debug=s'       => \%debug,
+       'test-only=s'   => \$tst_only,
+       'h|help'        => \$help,
+       'version'       => \$help
+) or help(1);
+
+help(0) if ($help);
+
+my $exit = 0;
+
+if ($#ARGV < 0) {
+       print "$P: no input files\n";
+       exit(1);
+}
+
+@ignore = split(/,/, join(',',@ignore));
+foreach my $word (@ignore) {
+       $word =~ s/\s*\n?$//g;
+       $word =~ s/^\s*//g;
+       $word =~ s/\s+/ /g;
+       $word =~ tr/[a-z]/[A-Z]/;
+
+       next if ($word =~ m/^\s*#/);
+       next if ($word =~ m/^\s*$/);
+
+       $ignore_type{$word}++;
+}
+
+my $dbg_values = 0;
+my $dbg_possible = 0;
+my $dbg_type = 0;
+my $dbg_attr = 0;
+for my $key (keys %debug) {
+       ## no critic
+       eval "\${dbg_$key} = '$debug{$key}';";
+       die "$@" if ($@);
+}
+
+my $rpt_cleaners = 0;
+
+if ($terse) {
+       $emacs = 1;
+       $quiet++;
+}
+
+if ($tree) {
+       if (defined $root) {
+               if (!top_of_kernel_tree($root)) {
+                       die "$P: $root: --root does not point at a valid tree\n";
+               }
+       } else {
+               if (top_of_kernel_tree('.')) {
+                       $root = '.';
+               } elsif ($0 =~ m@(.*)/scripts/[^/]*$@ &&
+                                               top_of_kernel_tree($1)) {
+                       $root = $1;
+               }
+       }
+
+       if (!defined $root) {
+               print "Must be run from the top-level dir. of a kernel tree\n";
+               exit(2);
+       }
+}
+
+my $emitted_corrupt = 0;
+
+our $Ident     = qr{
+                       [A-Za-z_][A-Za-z\d_]*
+                       (?:\s*\#\#\s*[A-Za-z_][A-Za-z\d_]*)*
+               }x;
+our $Storage   = qr{extern|static|asmlinkage};
+our $Sparse    = qr{
+                       __user|
+                       __kernel|
+                       __force|
+                       __iomem|
+                       __must_check|
+                       __init_refok|
+                       __kprobes|
+                       __ref|
+                       __rcu
+               }x;
+
+# Notes to $Attribute:
+# We need \b after 'init' otherwise 'initconst' will cause a false positive in a check
+our $Attribute = qr{
+                       const|
+                       __percpu|
+                       __nocast|
+                       __safe|
+                       __bitwise__|
+                       __packed__|
+                       __packed2__|
+                       __naked|
+                       __maybe_unused|
+                       __always_unused|
+                       __noreturn|
+                       __used|
+                       __cold|
+                       __noclone|
+                       __deprecated|
+                       __read_mostly|
+                       __kprobes|
+                       __(?:mem|cpu|dev|)(?:initdata|initconst|init\b)|
+                       ____cacheline_aligned|
+                       ____cacheline_aligned_in_smp|
+                       ____cacheline_internodealigned_in_smp|
+                       __weak
+                 }x;
+our $Modifier;
+our $Inline    = qr{inline|__always_inline|noinline};
+our $Member    = qr{->$Ident|\.$Ident|\[[^]]*\]};
+our $Lval      = qr{$Ident(?:$Member)*};
+
+our $Constant  = qr{(?:[0-9]+|0x[0-9a-fA-F]+)[UL]*};
+our $Assignment        = qr{(?:\*\=|/=|%=|\+=|-=|<<=|>>=|&=|\^=|\|=|=)};
+our $Compare    = qr{<=|>=|==|!=|<|>};
+our $Operators = qr{
+                       <=|>=|==|!=|
+                       =>|->|<<|>>|<|>|!|~|
+                       &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/|%
+                 }x;
+
+our $NonptrType;
+our $Type;
+our $Declare;
+
+our $UTF8      = qr {
+       [\x09\x0A\x0D\x20-\x7E]              # ASCII
+       | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
+       |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
+       | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
+       |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
+       |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
+       | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
+       |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
+}x;
+
+our $typeTypedefs = qr{(?x:
+       (?:__)?(?:u|s|be|le)(?:8|16|32|64)|
+       atomic_t
+)};
+
+our $logFunctions = qr{(?x:
+       printk(?:_ratelimited|_once|)|
+       [a-z0-9]+_(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
+       WARN(?:_RATELIMIT|_ONCE|)|
+       panic|
+       MODULE_[A-Z_]+
+)};
+
+our $signature_tags = qr{(?xi:
+       Signed-off-by:|
+       Acked-by:|
+       Tested-by:|
+       Reviewed-by:|
+       Reported-by:|
+       To:|
+       Cc:
+)};
+
+our @typeList = (
+       qr{void},
+       qr{(?:unsigned\s+)?char},
+       qr{(?:unsigned\s+)?short},
+       qr{(?:unsigned\s+)?int},
+       qr{(?:unsigned\s+)?long},
+       qr{(?:unsigned\s+)?long\s+int},
+       qr{(?:unsigned\s+)?long\s+long},
+       qr{(?:unsigned\s+)?long\s+long\s+int},
+       qr{unsigned},
+       qr{float},
+       qr{double},
+       qr{bool},
+       qr{struct\s+$Ident},
+       qr{union\s+$Ident},
+       qr{enum\s+$Ident},
+       qr{${Ident}_t},
+       qr{${Ident}_handler},
+       qr{${Ident}_handler_fn},
+);
+our @modifierList = (
+       qr{fastcall},
+);
+
+our $allowed_asm_includes = qr{(?x:
+       irq|
+       memory
+)};
+# memory.h: ARM has a custom one
+
+sub build_types {
+       my $mods = "(?x:  \n" . join("|\n  ", @modifierList) . "\n)";
+       my $all = "(?x:  \n" . join("|\n  ", @typeList) . "\n)";
+       $Modifier       = qr{(?:$Attribute|$Sparse|$mods)};
+       $NonptrType     = qr{
+                       (?:$Modifier\s+|const\s+)*
+                       (?:
+                               (?:typeof|__typeof__)\s*\(\s*\**\s*$Ident\s*\)|
+                               (?:$typeTypedefs\b)|
+                               (?:${all}\b)
+                       )
+                       (?:\s+$Modifier|\s+const)*
+                 }x;
+       $Type   = qr{
+                       $NonptrType
+                       (?:[\s\*]+\s*const|[\s\*]+|(?:\s*\[\s*\])+)?
+                       (?:\s+$Inline|\s+$Modifier)*
+                 }x;
+       $Declare        = qr{(?:$Storage\s+)?$Type};
+}
+build_types();
+
+our $match_balanced_parentheses = qr/(\((?:[^\(\)]+|(-1))*\))/;
+
+our $Typecast  = qr{\s*(\(\s*$NonptrType\s*\)){0,1}\s*};
+our $LvalOrFunc        = qr{($Lval)\s*($match_balanced_parentheses{0,1})\s*};
+
+sub deparenthesize {
+       my ($string) = @_;
+       return "" if (!defined($string));
+       $string =~ s@^\s*\(\s*@@g;
+       $string =~ s@\s*\)\s*$@@g;
+       $string =~ s@\s+@ @g;
+       return $string;
+}
+
+$chk_signoff = 0 if ($file);
+
+my @dep_includes = ();
+my @dep_functions = ();
+my $removal = "Documentation/feature-removal-schedule.txt";
+if ($tree && -f "$root/$removal") {
+       open(my $REMOVE, '<', "$root/$removal") ||
+                               die "$P: $removal: open failed - $!\n";
+       while (<$REMOVE>) {
+               if (/^Check:\s+(.*\S)/) {
+                       for my $entry (split(/[, ]+/, $1)) {
+                               if ($entry =~ m@include/(.*)@) {
+                                       push(@dep_includes, $1);
+
+                               } elsif ($entry !~ m@/@) {
+                                       push(@dep_functions, $entry);
+                               }
+                       }
+               }
+       }
+       close($REMOVE);
+}
+
+my @rawlines = ();
+my @lines = ();
+my $vname;
+for my $filename (@ARGV) {
+       my $FILE;
+       if ($file) {
+               open($FILE, '-|', "diff -u /dev/null $filename") ||
+                       die "$P: $filename: diff failed - $!\n";
+       } elsif ($filename eq '-') {
+               open($FILE, '<&STDIN');
+       } else {
+               open($FILE, '<', "$filename") ||
+                       die "$P: $filename: open failed - $!\n";
+       }
+       if ($filename eq '-') {
+               $vname = 'Your patch';
+       } else {
+               $vname = $filename;
+       }
+       while (<$FILE>) {
+               chomp;
+               push(@rawlines, $_);
+       }
+       close($FILE);
+       if (!process($filename)) {
+               $exit = 1;
+       }
+       @rawlines = ();
+       @lines = ();
+}
+
+exit($exit);
+
+sub top_of_kernel_tree {
+       my ($root) = @_;
+
+       my @tree_check = (
+               "COPYING", "CREDITS", "Kbuild", "MAINTAINERS", "Makefile",
+               "README", "Documentation", "arch", "include", "drivers",
+               "fs", "init", "ipc", "kernel", "lib", "scripts",
+       );
+
+       foreach my $check (@tree_check) {
+               if (! -e $root . '/' . $check) {
+                       return 0;
+               }
+       }
+       return 1;
+    }
+
+sub parse_email {
+       my ($formatted_email) = @_;
+
+       my $name = "";
+       my $address = "";
+       my $comment = "";
+
+       if ($formatted_email =~ /^(.*)<(\S+\@\S+)>(.*)$/) {
+               $name = $1;
+               $address = $2;
+               $comment = $3 if defined $3;
+       } elsif ($formatted_email =~ /^\s*<(\S+\@\S+)>(.*)$/) {
+               $address = $1;
+               $comment = $2 if defined $2;
+       } elsif ($formatted_email =~ /(\S+\@\S+)(.*)$/) {
+               $address = $1;
+               $comment = $2 if defined $2;
+               $formatted_email =~ s/$address.*$//;
+               $name = $formatted_email;
+               $name =~ s/^\s+|\s+$//g;
+               $name =~ s/^\"|\"$//g;
+               # If there's a name left after stripping spaces and
+               # leading quotes, and the address doesn't have both
+               # leading and trailing angle brackets, the address
+               # is invalid. ie:
+               #   "joe smith joe@smith.com" bad
+               #   "joe smith <joe@smith.com" bad
+               if ($name ne "" && $address !~ /^<[^>]+>$/) {
+                       $name = "";
+                       $address = "";
+                       $comment = "";
+               }
+       }
+
+       $name =~ s/^\s+|\s+$//g;
+       $name =~ s/^\"|\"$//g;
+       $address =~ s/^\s+|\s+$//g;
+       $address =~ s/^\<|\>$//g;
+
+       if ($name =~ /[^\w \-]/i) { ##has "must quote" chars
+               $name =~ s/(?<!\\)"/\\"/g; ##escape quotes
+               $name = "\"$name\"";
+       }
+
+       return ($name, $address, $comment);
+}
+
+sub format_email {
+       my ($name, $address) = @_;
+
+       my $formatted_email;
+
+       $name =~ s/^\s+|\s+$//g;
+       $name =~ s/^\"|\"$//g;
+       $address =~ s/^\s+|\s+$//g;
+
+       if ($name =~ /[^\w \-]/i) { ##has "must quote" chars
+               $name =~ s/(?<!\\)"/\\"/g; ##escape quotes
+               $name = "\"$name\"";
+       }
+
+       if ("$name" eq "") {
+               $formatted_email = "$address";
+       } else {
+               $formatted_email = "$name <$address>";
+       }
+
+       return $formatted_email;
+}
+
+sub which_conf {
+       my ($conf) = @_;
+
+       foreach my $path (split(/:/, ".:$ENV{HOME}:.scripts")) {
+               if (-e "$path/$conf") {
+                       return "$path/$conf";
+               }
+       }
+
+       return "";
+}
+
+sub expand_tabs {
+       my ($str) = @_;
+
+       my $res = '';
+       my $n = 0;
+       for my $c (split(//, $str)) {
+               if ($c eq "\t") {
+                       $res .= ' ';
+                       $n++;
+                       for (; ($n % 8) != 0; $n++) {
+                               $res .= ' ';
+                       }
+                       next;
+               }
+               $res .= $c;
+               $n++;
+       }
+
+       return $res;
+}
+sub copy_spacing {
+       (my $res = shift) =~ tr/\t/ /c;
+       return $res;
+}
+
+sub line_stats {
+       my ($line) = @_;
+
+       # Drop the diff line leader and expand tabs
+       $line =~ s/^.//;
+       $line = expand_tabs($line);
+
+       # Pick the indent from the front of the line.
+       my ($white) = ($line =~ /^(\s*)/);
+
+       return (length($line), length($white));
+}
+
+my $sanitise_quote = '';
+
+sub sanitise_line_reset {
+       my ($in_comment) = @_;
+
+       if ($in_comment) {
+               $sanitise_quote = '*/';
+       } else {
+               $sanitise_quote = '';
+       }
+}
+sub sanitise_line {
+       my ($line) = @_;
+
+       my $res = '';
+       my $l = '';
+
+       my $qlen = 0;
+       my $off = 0;
+       my $c;
+
+       # Always copy over the diff marker.
+       $res = substr($line, 0, 1);
+
+       for ($off = 1; $off < length($line); $off++) {
+               $c = substr($line, $off, 1);
+
+               # Comments we are wacking completly including the begin
+               # and end, all to $;.
+               if ($sanitise_quote eq '' && substr($line, $off, 2) eq '/*') {
+                       $sanitise_quote = '*/';
+
+                       substr($res, $off, 2, "$;$;");
+                       $off++;
+                       next;
+               }
+               if ($sanitise_quote eq '*/' && substr($line, $off, 2) eq '*/') {
+                       $sanitise_quote = '';
+                       substr($res, $off, 2, "$;$;");
+                       $off++;
+                       next;
+               }
+               if ($sanitise_quote eq '' && substr($line, $off, 2) eq '//') {
+                       $sanitise_quote = '//';
+
+                       substr($res, $off, 2, $sanitise_quote);
+                       $off++;
+                       next;
+               }
+
+               # A \ in a string means ignore the next character.
+               if (($sanitise_quote eq "'" || $sanitise_quote eq '"') &&
+                   $c eq "\\") {
+                       substr($res, $off, 2, 'XX');
+                       $off++;
+                       next;
+               }
+               # Regular quotes.
+               if ($c eq "'" || $c eq '"') {
+                       if ($sanitise_quote eq '') {
+                               $sanitise_quote = $c;
+
+                               substr($res, $off, 1, $c);
+                               next;
+                       } elsif ($sanitise_quote eq $c) {
+                               $sanitise_quote = '';
+                       }
+               }
+
+               #print "c<$c> SQ<$sanitise_quote>\n";
+               if ($off != 0 && $sanitise_quote eq '*/' && $c ne "\t") {
+                       substr($res, $off, 1, $;);
+               } elsif ($off != 0 && $sanitise_quote eq '//' && $c ne "\t") {
+                       substr($res, $off, 1, $;);
+               } elsif ($off != 0 && $sanitise_quote && $c ne "\t") {
+                       substr($res, $off, 1, 'X');
+               } else {
+                       substr($res, $off, 1, $c);
+               }
+       }
+
+       if ($sanitise_quote eq '//') {
+               $sanitise_quote = '';
+       }
+
+       # The pathname on a #include may be surrounded by '<' and '>'.
+       if ($res =~ /^.\s*\#\s*include\s+\<(.*)\>/) {
+               my $clean = 'X' x length($1);
+               $res =~ s@\<.*\>@<$clean>@;
+
+       # The whole of a #error is a string.
+       } elsif ($res =~ /^.\s*\#\s*(?:error|warning)\s+(.*)\b/) {
+               my $clean = 'X' x length($1);
+               $res =~ s@(\#\s*(?:error|warning)\s+).*@$1$clean@;
+       }
+
+       return $res;
+}
+
+sub ctx_statement_block {
+       my ($linenr, $remain, $off) = @_;
+       my $line = $linenr - 1;
+       my $blk = '';
+       my $soff = $off;
+       my $coff = $off - 1;
+       my $coff_set = 0;
+
+       my $loff = 0;
+
+       my $type = '';
+       my $level = 0;
+       my @stack = ();
+       my $p;
+       my $c;
+       my $len = 0;
+
+       my $remainder;
+       while (1) {
+               @stack = (['', 0]) if ($#stack == -1);
+
+               #warn "CSB: blk<$blk> remain<$remain>\n";
+               # If we are about to drop off the end, pull in more
+               # context.
+               if ($off >= $len) {
+                       for (; $remain > 0; $line++) {
+                               last if (!defined $lines[$line]);
+                               next if ($lines[$line] =~ /^-/);
+                               $remain--;
+                               $loff = $len;
+                               $blk .= $lines[$line] . "\n";
+                               $len = length($blk);
+                               $line++;
+                               last;
+                       }
+                       # Bail if there is no further context.
+                       #warn "CSB: blk<$blk> off<$off> len<$len>\n";
+                       if ($off >= $len) {
+                               last;
+                       }
+               }
+               $p = $c;
+               $c = substr($blk, $off, 1);
+               $remainder = substr($blk, $off);
+
+               #warn "CSB: c<$c> type<$type> level<$level> remainder<$remainder> coff_set<$coff_set>\n";
+
+               # Handle nested #if/#else.
+               if ($remainder =~ /^#\s*(?:ifndef|ifdef|if)\s/) {
+                       push(@stack, [ $type, $level ]);
+               } elsif ($remainder =~ /^#\s*(?:else|elif)\b/) {
+                       ($type, $level) = @{$stack[$#stack - 1]};
+               } elsif ($remainder =~ /^#\s*endif\b/) {
+                       ($type, $level) = @{pop(@stack)};
+               }
+
+               # Statement ends at the ';' or a close '}' at the
+               # outermost level.
+               if ($level == 0 && $c eq ';') {
+                       last;
+               }
+
+               # An else is really a conditional as long as its not else if
+               if ($level == 0 && $coff_set == 0 &&
+                               (!defined($p) || $p =~ /(?:\s|\}|\+)/) &&
+                               $remainder =~ /^(else)(?:\s|{)/ &&
+                               $remainder !~ /^else\s+if\b/) {
+                       $coff = $off + length($1) - 1;
+                       $coff_set = 1;
+                       #warn "CSB: mark coff<$coff> soff<$soff> 1<$1>\n";
+                       #warn "[" . substr($blk, $soff, $coff - $soff + 1) . "]\n";
+               }
+
+               if (($type eq '' || $type eq '(') && $c eq '(') {
+                       $level++;
+                       $type = '(';
+               }
+               if ($type eq '(' && $c eq ')') {
+                       $level--;
+                       $type = ($level != 0)? '(' : '';
+
+                       if ($level == 0 && $coff < $soff) {
+                               $coff = $off;
+                               $coff_set = 1;
+                               #warn "CSB: mark coff<$coff>\n";
+                       }
+               }
+               if (($type eq '' || $type eq '{') && $c eq '{') {
+                       $level++;
+                       $type = '{';
+               }
+               if ($type eq '{' && $c eq '}') {
+                       $level--;
+                       $type = ($level != 0)? '{' : '';
+
+                       if ($level == 0) {
+                               if (substr($blk, $off + 1, 1) eq ';') {
+                                       $off++;
+                               }
+                               last;
+                       }
+               }
+               $off++;
+       }
+       # We are truly at the end, so shuffle to the next line.
+       if ($off == $len) {
+               $loff = $len + 1;
+               $line++;
+               $remain--;
+       }
+
+       my $statement = substr($blk, $soff, $off - $soff + 1);
+       my $condition = substr($blk, $soff, $coff - $soff + 1);
+
+       #warn "STATEMENT<$statement>\n";
+       #warn "CONDITION<$condition>\n";
+
+       #print "coff<$coff> soff<$off> loff<$loff>\n";
+
+       return ($statement, $condition,
+                       $line, $remain + 1, $off - $loff + 1, $level);
+}
+
+sub statement_lines {
+       my ($stmt) = @_;
+
+       # Strip the diff line prefixes and rip blank lines at start and end.
+       $stmt =~ s/(^|\n)./$1/g;
+       $stmt =~ s/^\s*//;
+       $stmt =~ s/\s*$//;
+
+       my @stmt_lines = ($stmt =~ /\n/g);
+
+       return $#stmt_lines + 2;
+}
+
+sub statement_rawlines {
+       my ($stmt) = @_;
+
+       my @stmt_lines = ($stmt =~ /\n/g);
+
+       return $#stmt_lines + 2;
+}
+
+sub statement_block_size {
+       my ($stmt) = @_;
+
+       $stmt =~ s/(^|\n)./$1/g;
+       $stmt =~ s/^\s*{//;
+       $stmt =~ s/}\s*$//;
+       $stmt =~ s/^\s*//;
+       $stmt =~ s/\s*$//;
+
+       my @stmt_lines = ($stmt =~ /\n/g);
+       my @stmt_statements = ($stmt =~ /;/g);
+
+       my $stmt_lines = $#stmt_lines + 2;
+       my $stmt_statements = $#stmt_statements + 1;
+
+       if ($stmt_lines > $stmt_statements) {
+               return $stmt_lines;
+       } else {
+               return $stmt_statements;
+       }
+}
+
+sub ctx_statement_full {
+       my ($linenr, $remain, $off) = @_;
+       my ($statement, $condition, $level);
+
+       my (@chunks);
+
+       # Grab the first conditional/block pair.
+       ($statement, $condition, $linenr, $remain, $off, $level) =
+                               ctx_statement_block($linenr, $remain, $off);
+       #print "F: c<$condition> s<$statement> remain<$remain>\n";
+       push(@chunks, [ $condition, $statement ]);
+       if (!($remain > 0 && $condition =~ /^\s*(?:\n[+-])?\s*(?:if|else|do)\b/s)) {
+               return ($level, $linenr, @chunks);
+       }
+
+       # Pull in the following conditional/block pairs and see if they
+       # could continue the statement.
+       for (;;) {
+               ($statement, $condition, $linenr, $remain, $off, $level) =
+                               ctx_statement_block($linenr, $remain, $off);
+               #print "C: c<$condition> s<$statement> remain<$remain>\n";
+               last if (!($remain > 0 && $condition =~ /^(?:\s*\n[+-])*\s*(?:else|do)\b/s));
+               #print "C: push\n";
+               push(@chunks, [ $condition, $statement ]);
+       }
+
+       return ($level, $linenr, @chunks);
+}
+
+sub ctx_block_get {
+       my ($linenr, $remain, $outer, $open, $close, $off) = @_;
+       my $line;
+       my $start = $linenr - 1;
+       my $blk = '';
+       my @o;
+       my @c;
+       my @res = ();
+
+       my $level = 0;
+       my @stack = ($level);
+       for ($line = $start; $remain > 0; $line++) {
+               next if ($rawlines[$line] =~ /^-/);
+               $remain--;
+
+               $blk .= $rawlines[$line];
+
+               # Handle nested #if/#else.
+               if ($lines[$line] =~ /^.\s*#\s*(?:ifndef|ifdef|if)\s/) {
+                       push(@stack, $level);
+               } elsif ($lines[$line] =~ /^.\s*#\s*(?:else|elif)\b/) {
+                       $level = $stack[$#stack - 1];
+               } elsif ($lines[$line] =~ /^.\s*#\s*endif\b/) {
+                       $level = pop(@stack);
+               }
+
+               foreach my $c (split(//, $lines[$line])) {
+                       ##print "C<$c>L<$level><$open$close>O<$off>\n";
+                       if ($off > 0) {
+                               $off--;
+                               next;
+                       }
+
+                       if ($c eq $close && $level > 0) {
+                               $level--;
+                               last if ($level == 0);
+                       } elsif ($c eq $open) {
+                               $level++;
+                       }
+               }
+
+               if (!$outer || $level <= 1) {
+                       push(@res, $rawlines[$line]);
+               }
+
+               last if ($level == 0);
+       }
+
+       return ($level, @res);
+}
+sub ctx_block_outer {
+       my ($linenr, $remain) = @_;
+
+       my ($level, @r) = ctx_block_get($linenr, $remain, 1, '{', '}', 0);
+       return @r;
+}
+sub ctx_block {
+       my ($linenr, $remain) = @_;
+
+       my ($level, @r) = ctx_block_get($linenr, $remain, 0, '{', '}', 0);
+       return @r;
+}
+sub ctx_statement {
+       my ($linenr, $remain, $off) = @_;
+
+       my ($level, @r) = ctx_block_get($linenr, $remain, 0, '(', ')', $off);
+       return @r;
+}
+sub ctx_block_level {
+       my ($linenr, $remain) = @_;
+
+       return ctx_block_get($linenr, $remain, 0, '{', '}', 0);
+}
+sub ctx_statement_level {
+       my ($linenr, $remain, $off) = @_;
+
+       return ctx_block_get($linenr, $remain, 0, '(', ')', $off);
+}
+
+sub ctx_locate_comment {
+       my ($first_line, $end_line) = @_;
+
+       # Catch a comment on the end of the line itself.
+       my ($current_comment) = ($rawlines[$end_line - 1] =~ m@.*(/\*.*\*/)\s*(?:\\\s*)?$@);
+       return $current_comment if (defined $current_comment);
+
+       # Look through the context and try and figure out if there is a
+       # comment.
+       my $in_comment = 0;
+       $current_comment = '';
+       for (my $linenr = $first_line; $linenr < $end_line; $linenr++) {
+               my $line = $rawlines[$linenr - 1];
+               #warn "           $line\n";
+               if ($linenr == $first_line and $line =~ m@^.\s*\*@) {
+                       $in_comment = 1;
+               }
+               if ($line =~ m@/\*@) {
+                       $in_comment = 1;
+               }
+               if (!$in_comment && $current_comment ne '') {
+                       $current_comment = '';
+               }
+               $current_comment .= $line . "\n" if ($in_comment);
+               if ($line =~ m@\*/@) {
+                       $in_comment = 0;
+               }
+       }
+
+       chomp($current_comment);
+       return($current_comment);
+}
+sub ctx_has_comment {
+       my ($first_line, $end_line) = @_;
+       my $cmt = ctx_locate_comment($first_line, $end_line);
+
+       ##print "LINE: $rawlines[$end_line - 1 ]\n";
+       ##print "CMMT: $cmt\n";
+
+       return ($cmt ne '');
+}
+
+sub raw_line {
+       my ($linenr, $cnt) = @_;
+
+       my $offset = $linenr - 1;
+       $cnt++;
+
+       my $line;
+       while ($cnt) {
+               $line = $rawlines[$offset++];
+               next if (defined($line) && $line =~ /^-/);
+               $cnt--;
+       }
+
+       return $line;
+}
+
+sub cat_vet {
+       my ($vet) = @_;
+       my ($res, $coded);
+
+       $res = '';
+       while ($vet =~ /([^[:cntrl:]]*)([[:cntrl:]]|$)/g) {
+               $res .= $1;
+               if ($2 ne '') {
+                       $coded = sprintf("^%c", unpack('C', $2) + 64);
+                       $res .= $coded;
+               }
+       }
+       $res =~ s/$/\$/;
+
+       return $res;
+}
+
+my $av_preprocessor = 0;
+my $av_pending;
+my @av_paren_type;
+my $av_pend_colon;
+
+sub annotate_reset {
+       $av_preprocessor = 0;
+       $av_pending = '_';
+       @av_paren_type = ('E');
+       $av_pend_colon = 'O';
+}
+
+sub annotate_values {
+       my ($stream, $type) = @_;
+
+       my $res;
+       my $var = '_' x length($stream);
+       my $cur = $stream;
+
+       print "$stream\n" if ($dbg_values > 1);
+
+       while (length($cur)) {
+               @av_paren_type = ('E') if ($#av_paren_type < 0);
+               print " <" . join('', @av_paren_type) .
+                               "> <$type> <$av_pending>" if ($dbg_values > 1);
+               if ($cur =~ /^(\s+)/o) {
+                       print "WS($1)\n" if ($dbg_values > 1);
+                       if ($1 =~ /\n/ && $av_preprocessor) {
+                               $type = pop(@av_paren_type);
+                               $av_preprocessor = 0;
+                       }
+
+               } elsif ($cur =~ /^(\(\s*$Type\s*)\)/ && $av_pending eq '_') {
+                       print "CAST($1)\n" if ($dbg_values > 1);
+                       push(@av_paren_type, $type);
+                       $type = 'C';
+
+               } elsif ($cur =~ /^($Type)\s*(?:$Ident|,|\)|\(|\s*$)/) {
+                       print "DECLARE($1)\n" if ($dbg_values > 1);
+                       $type = 'T';
+
+               } elsif ($cur =~ /^($Modifier)\s*/) {
+                       print "MODIFIER($1)\n" if ($dbg_values > 1);
+                       $type = 'T';
+
+               } elsif ($cur =~ /^(\#\s*define\s*$Ident)(\(?)/o) {
+                       print "DEFINE($1,$2)\n" if ($dbg_values > 1);
+                       $av_preprocessor = 1;
+                       push(@av_paren_type, $type);
+                       if ($2 ne '') {
+                               $av_pending = 'N';
+                       }
+                       $type = 'E';
+
+               } elsif ($cur =~ /^(\#\s*(?:undef\s*$Ident|include\b))/o) {
+                       print "UNDEF($1)\n" if ($dbg_values > 1);
+                       $av_preprocessor = 1;
+                       push(@av_paren_type, $type);
+
+               } elsif ($cur =~ /^(\#\s*(?:ifdef|ifndef|if))/o) {
+                       print "PRE_START($1)\n" if ($dbg_values > 1);
+                       $av_preprocessor = 1;
+
+                       push(@av_paren_type, $type);
+                       push(@av_paren_type, $type);
+                       $type = 'E';
+
+               } elsif ($cur =~ /^(\#\s*(?:else|elif))/o) {
+                       print "PRE_RESTART($1)\n" if ($dbg_values > 1);
+                       $av_preprocessor = 1;
+
+                       push(@av_paren_type, $av_paren_type[$#av_paren_type]);
+
+                       $type = 'E';
+
+               } elsif ($cur =~ /^(\#\s*(?:endif))/o) {
+                       print "PRE_END($1)\n" if ($dbg_values > 1);
+
+                       $av_preprocessor = 1;
+
+                       # Assume all arms of the conditional end as this
+                       # one does, and continue as if the #endif was not here.
+                       pop(@av_paren_type);
+                       push(@av_paren_type, $type);
+                       $type = 'E';
+
+               } elsif ($cur =~ /^(\\\n)/o) {
+                       print "PRECONT($1)\n" if ($dbg_values > 1);
+
+               } elsif ($cur =~ /^(__attribute__)\s*\(?/o) {
+                       print "ATTR($1)\n" if ($dbg_values > 1);
+                       $av_pending = $type;
+                       $type = 'N';
+
+               } elsif ($cur =~ /^(sizeof)\s*(\()?/o) {
+                       print "SIZEOF($1)\n" if ($dbg_values > 1);
+                       if (defined $2) {
+                               $av_pending = 'V';
+                       }
+                       $type = 'N';
+
+               } elsif ($cur =~ /^(if|while|for)\b/o) {
+                       print "COND($1)\n" if ($dbg_values > 1);
+                       $av_pending = 'E';
+                       $type = 'N';
+
+               } elsif ($cur =~/^(case)/o) {
+                       print "CASE($1)\n" if ($dbg_values > 1);
+                       $av_pend_colon = 'C';
+                       $type = 'N';
+
+               } elsif ($cur =~/^(return|else|goto|typeof|__typeof__)\b/o) {
+                       print "KEYWORD($1)\n" if ($dbg_values > 1);
+                       $type = 'N';
+
+               } elsif ($cur =~ /^(\()/o) {
+                       print "PAREN('$1')\n" if ($dbg_values > 1);
+                       push(@av_paren_type, $av_pending);
+                       $av_pending = '_';
+                       $type = 'N';
+
+               } elsif ($cur =~ /^(\))/o) {
+                       my $new_type = pop(@av_paren_type);
+                       if ($new_type ne '_') {
+                               $type = $new_type;
+                               print "PAREN('$1') -> $type\n"
+                                                       if ($dbg_values > 1);
+                       } else {
+                               print "PAREN('$1')\n" if ($dbg_values > 1);
+                       }
+
+               } elsif ($cur =~ /^($Ident)\s*\(/o) {
+                       print "FUNC($1)\n" if ($dbg_values > 1);
+                       $type = 'V';
+                       $av_pending = 'V';
+
+               } elsif ($cur =~ /^($Ident\s*):(?:\s*\d+\s*(,|=|;))?/) {
+                       if (defined $2 && $type eq 'C' || $type eq 'T') {
+                               $av_pend_colon = 'B';
+                       } elsif ($type eq 'E') {
+                               $av_pend_colon = 'L';
+                       }
+                       print "IDENT_COLON($1,$type>$av_pend_colon)\n" if ($dbg_values > 1);
+                       $type = 'V';
+
+               } elsif ($cur =~ /^($Ident|$Constant)/o) {
+                       print "IDENT($1)\n" if ($dbg_values > 1);
+                       $type = 'V';
+
+               } elsif ($cur =~ /^($Assignment)/o) {
+                       print "ASSIGN($1)\n" if ($dbg_values > 1);
+                       $type = 'N';
+
+               } elsif ($cur =~/^(;|{|})/) {
+                       print "END($1)\n" if ($dbg_values > 1);
+                       $type = 'E';
+                       $av_pend_colon = 'O';
+
+               } elsif ($cur =~/^(,)/) {
+                       print "COMMA($1)\n" if ($dbg_values > 1);
+                       $type = 'C';
+
+               } elsif ($cur =~ /^(\?)/o) {
+                       print "QUESTION($1)\n" if ($dbg_values > 1);
+                       $type = 'N';
+
+               } elsif ($cur =~ /^(:)/o) {
+                       print "COLON($1,$av_pend_colon)\n" if ($dbg_values > 1);
+
+                       substr($var, length($res), 1, $av_pend_colon);
+                       if ($av_pend_colon eq 'C' || $av_pend_colon eq 'L') {
+                               $type = 'E';
+                       } else {
+                               $type = 'N';
+                       }
+                       $av_pend_colon = 'O';
+
+               } elsif ($cur =~ /^(\[)/o) {
+                       print "CLOSE($1)\n" if ($dbg_values > 1);
+                       $type = 'N';
+
+               } elsif ($cur =~ /^(-(?![->])|\+(?!\+)|\*|\&\&|\&)/o) {
+                       my $variant;
+
+                       print "OPV($1)\n" if ($dbg_values > 1);
+                       if ($type eq 'V') {
+                               $variant = 'B';
+                       } else {
+                               $variant = 'U';
+                       }
+
+                       substr($var, length($res), 1, $variant);
+                       $type = 'N';
+
+               } elsif ($cur =~ /^($Operators)/o) {
+                       print "OP($1)\n" if ($dbg_values > 1);
+                       if ($1 ne '++' && $1 ne '--') {
+                               $type = 'N';
+                       }
+
+               } elsif ($cur =~ /(^.)/o) {
+                       print "C($1)\n" if ($dbg_values > 1);
+               }
+               if (defined $1) {
+                       $cur = substr($cur, length($1));
+                       $res .= $type x length($1);
+               }
+       }
+
+       return ($res, $var);
+}
+
+sub possible {
+       my ($possible, $line) = @_;
+       my $notPermitted = qr{(?:
+               ^(?:
+                       $Modifier|
+                       $Storage|
+                       $Type|
+                       DEFINE_\S+
+               )$|
+               ^(?:
+                       goto|
+                       return|
+                       case|
+                       else|
+                       asm|__asm__|
+                       do
+               )(?:\s|$)|
+               ^(?:typedef|struct|enum)\b
+           )}x;
+       warn "CHECK<$possible> ($line)\n" if ($dbg_possible > 2);
+       if ($possible !~ $notPermitted) {
+               # Check for modifiers.
+               $possible =~ s/\s*$Storage\s*//g;
+               $possible =~ s/\s*$Sparse\s*//g;
+               if ($possible =~ /^\s*$/) {
+
+               } elsif ($possible =~ /\s/) {
+                       $possible =~ s/\s*$Type\s*//g;
+                       for my $modifier (split(' ', $possible)) {
+                               if ($modifier !~ $notPermitted) {
+                                       warn "MODIFIER: $modifier ($possible) ($line)\n" if ($dbg_possible);
+                                       push(@modifierList, $modifier);
+                               }
+                       }
+
+               } else {
+                       warn "POSSIBLE: $possible ($line)\n" if ($dbg_possible);
+                       push(@typeList, $possible);
+               }
+               build_types();
+       } else {
+               warn "NOTPOSS: $possible ($line)\n" if ($dbg_possible > 1);
+       }
+}
+
+my $prefix = '';
+
+sub show_type {
+       return !defined $ignore_type{$_[0]};
+}
+
+sub report {
+       if (!show_type($_[1]) ||
+           (defined $tst_only && $_[2] !~ /\Q$tst_only\E/)) {
+               return 0;
+       }
+       my $line;
+       if ($show_types) {
+               $line = "$prefix$_[0]:$_[1]: $_[2]\n";
+       } else {
+               $line = "$prefix$_[0]: $_[2]\n";
+       }
+       $line = (split('\n', $line))[0] . "\n" if ($terse);
+
+       push(our @report, $line);
+
+       return 1;
+}
+sub report_dump {
+       our @report;
+}
+
+sub ERROR {
+       if (report("ERROR", $_[0], $_[1])) {
+               our $clean = 0;
+               our $cnt_error++;
+       }
+}
+sub WARN {
+       if (report("WARNING", $_[0], $_[1])) {
+               our $clean = 0;
+               our $cnt_warn++;
+       }
+}
+sub CHK {
+       if ($check && report("CHECK", $_[0], $_[1])) {
+               our $clean = 0;
+               our $cnt_chk++;
+       }
+}
+
+sub check_absolute_file {
+       my ($absolute, $herecurr) = @_;
+       my $file = $absolute;
+
+       ##print "absolute<$absolute>\n";
+
+       # See if any suffix of this path is a path within the tree.
+       while ($file =~ s@^[^/]*/@@) {
+               if (-f "$root/$file") {
+                       ##print "file<$file>\n";
+                       last;
+               }
+       }
+       if (! -f _)  {
+               return 0;
+       }
+
+       # It is, so see if the prefix is acceptable.
+       my $prefix = $absolute;
+       substr($prefix, -length($file)) = '';
+
+       ##print "prefix<$prefix>\n";
+       if ($prefix ne ".../") {
+               WARN("USE_RELATIVE_PATH",
+                    "use relative pathname instead of absolute in changelog text\n" . $herecurr);
+       }
+}
+
+sub process {
+       my $filename = shift;
+
+       my $linenr=0;
+       my $prevline="";
+       my $prevrawline="";
+       my $stashline="";
+       my $stashrawline="";
+
+       my $length;
+       my $indent;
+       my $previndent=0;
+       my $stashindent=0;
+
+       our $clean = 1;
+       my $signoff = 0;
+       my $is_patch = 0;
+
+       our @report = ();
+       our $cnt_lines = 0;
+       our $cnt_error = 0;
+       our $cnt_warn = 0;
+       our $cnt_chk = 0;
+
+       # Trace the real file/line as we go.
+       my $realfile = '';
+       my $realline = 0;
+       my $realcnt = 0;
+       my $here = '';
+       my $in_comment = 0;
+       my $comment_edge = 0;
+       my $first_line = 0;
+       my $p1_prefix = '';
+
+       my $prev_values = 'E';
+
+       # suppression flags
+       my %suppress_ifbraces;
+       my %suppress_whiletrailers;
+       my %suppress_export;
+
+       # Pre-scan the patch sanitizing the lines.
+       # Pre-scan the patch looking for any __setup documentation.
+       #
+       my @setup_docs = ();
+       my $setup_docs = 0;
+
+       sanitise_line_reset();
+       my $line;
+       foreach my $rawline (@rawlines) {
+               $linenr++;
+               $line = $rawline;
+
+               if ($rawline=~/^\+\+\+\s+(\S+)/) {
+                       $setup_docs = 0;
+                       if ($1 =~ m@Documentation/kernel-parameters.txt$@) {
+                               $setup_docs = 1;
+                       }
+                       #next;
+               }
+               if ($rawline=~/^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@/) {
+                       $realline=$1-1;
+                       if (defined $2) {
+                               $realcnt=$3+1;
+                       } else {
+                               $realcnt=1+1;
+                       }
+                       $in_comment = 0;
+
+                       # Guestimate if this is a continuing comment.  Run
+                       # the context looking for a comment "edge".  If this
+                       # edge is a close comment then we must be in a comment
+                       # at context start.
+                       my $edge;
+                       my $cnt = $realcnt;
+                       for (my $ln = $linenr + 1; $cnt > 0; $ln++) {
+                               next if (defined $rawlines[$ln - 1] &&
+                                        $rawlines[$ln - 1] =~ /^-/);
+                               $cnt--;
+                               #print "RAW<$rawlines[$ln - 1]>\n";
+                               last if (!defined $rawlines[$ln - 1]);
+                               if ($rawlines[$ln - 1] =~ m@(/\*|\*/)@ &&
+                                   $rawlines[$ln - 1] !~ m@"[^"]*(?:/\*|\*/)[^"]*"@) {
+                                       ($edge) = $1;
+                                       last;
+                               }
+                       }
+                       if (defined $edge && $edge eq '*/') {
+                               $in_comment = 1;
+                       }
+
+                       # Guestimate if this is a continuing comment.  If this
+                       # is the start of a diff block and this line starts
+                       # ' *' then it is very likely a comment.
+                       if (!defined $edge &&
+                           $rawlines[$linenr] =~ m@^.\s*(?:\*\*+| \*)(?:\s|$)@)
+                       {
+                               $in_comment = 1;
+                       }
+
+                       ##print "COMMENT:$in_comment edge<$edge> $rawline\n";
+                       sanitise_line_reset($in_comment);
+
+               } elsif ($realcnt && $rawline =~ /^(?:\+| |$)/) {
+                       # Standardise the strings and chars within the input to
+                       # simplify matching -- only bother with positive lines.
+                       $line = sanitise_line($rawline);
+               }
+               push(@lines, $line);
+
+               if ($realcnt > 1) {
+                       $realcnt-- if ($line =~ /^(?:\+| |$)/);
+               } else {
+                       $realcnt = 0;
+               }
+
+               #print "==>$rawline\n";
+               #print "-->$line\n";
+
+               if ($setup_docs && $line =~ /^\+/) {
+                       push(@setup_docs, $line);
+               }
+       }
+
+       $prefix = '';
+
+       $realcnt = 0;
+       $linenr = 0;
+       foreach my $line (@lines) {
+               $linenr++;
+
+               my $rawline = $rawlines[$linenr - 1];
+
+#extract the line range in the file after the patch is applied
+               if ($line=~/^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@/) {
+                       $is_patch = 1;
+                       $first_line = $linenr + 1;
+                       $realline=$1-1;
+                       if (defined $2) {
+                               $realcnt=$3+1;
+                       } else {
+                               $realcnt=1+1;
+                       }
+                       annotate_reset();
+                       $prev_values = 'E';
+
+                       %suppress_ifbraces = ();
+                       %suppress_whiletrailers = ();
+                       %suppress_export = ();
+                       next;
+
+# track the line number as we move through the hunk, note that
+# new versions of GNU diff omit the leading space on completely
+# blank context lines so we need to count that too.
+               } elsif ($line =~ /^( |\+|$)/) {
+                       $realline++;
+                       $realcnt-- if ($realcnt != 0);
+
+                       # Measure the line length and indent.
+                       ($length, $indent) = line_stats($rawline);
+
+                       # Track the previous line.
+                       ($prevline, $stashline) = ($stashline, $line);
+                       ($previndent, $stashindent) = ($stashindent, $indent);
+                       ($prevrawline, $stashrawline) = ($stashrawline, $rawline);
+
+                       #warn "line<$line>\n";
+
+               } elsif ($realcnt == 1) {
+                       $realcnt--;
+               }
+
+               my $hunk_line = ($realcnt != 0);
+
+#make up the handle for any error we report on this line
+               $prefix = "$filename:$realline: " if ($emacs && $file);
+               $prefix = "$filename:$linenr: " if ($emacs && !$file);
+
+               $here = "#$linenr: " if (!$file);
+               $here = "#$realline: " if ($file);
+
+               # extract the filename as it passes
+               if ($line =~ /^diff --git.*?(\S+)$/) {
+                       $realfile = $1;
+                       $realfile =~ s@^([^/]*)/@@;
+
+               } elsif ($line =~ /^\+\+\+\s+(\S+)/) {
+                       $realfile = $1;
+                       $realfile =~ s@^([^/]*)/@@;
+
+                       $p1_prefix = $1;
+                       if (!$file && $tree && $p1_prefix ne '' &&
+                           -e "$root/$p1_prefix") {
+                               WARN("PATCH_PREFIX",
+                                    "patch prefix '$p1_prefix' exists, appears to be a -p0 patch\n");
+                       }
+
+                       if ($realfile =~ m@^include/asm/@) {
+                               ERROR("MODIFIED_INCLUDE_ASM",
+                                     "do not modify files in include/asm, change architecture specific files in include/asm-<architecture>\n" . "$here$rawline\n");
+                       }
+                       next;
+               }
+
+               $here .= "FILE: $realfile:$realline:" if ($realcnt != 0);
+
+               my $hereline = "$here\n$rawline\n";
+               my $herecurr = "$here\n$rawline\n";
+               my $hereprev = "$here\n$prevrawline\n$rawline\n";
+
+               $cnt_lines++ if ($realcnt != 0);
+
+# Check for incorrect file permissions
+               if ($line =~ /^new (file )?mode.*[7531]\d{0,2}$/) {
+                       my $permhere = $here . "FILE: $realfile\n";
+                       if ($realfile =~ /(Makefile|Kconfig|\.c|\.h|\.S|\.tmpl)$/) {
+                               ERROR("EXECUTE_PERMISSIONS",
+                                     "do not set execute permissions for source files\n" . $permhere);
+                       }
+               }
+
+# Check the patch for a signoff:
+               if ($line =~ /^\s*signed-off-by:/i) {
+                       $signoff++;
+               }
+
+# Check signature styles
+               if ($line =~ /^(\s*)($signature_tags)(\s*)(.*)/) {
+                       my $space_before = $1;
+                       my $sign_off = $2;
+                       my $space_after = $3;
+                       my $email = $4;
+                       my $ucfirst_sign_off = ucfirst(lc($sign_off));
+
+                       if (defined $space_before && $space_before ne "") {
+                               WARN("BAD_SIGN_OFF",
+                                    "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr);
+                       }
+                       if ($sign_off =~ /-by:$/i && $sign_off ne $ucfirst_sign_off) {
+                               WARN("BAD_SIGN_OFF",
+                                    "'$ucfirst_sign_off' is the preferred signature form\n" . $herecurr);
+                       }
+                       if (!defined $space_after || $space_after ne " ") {
+                               WARN("BAD_SIGN_OFF",
+                                    "Use a single space after $ucfirst_sign_off\n" . $herecurr);
+                       }
+
+                       my ($email_name, $email_address, $comment) = parse_email($email);
+                       my $suggested_email = format_email(($email_name, $email_address));
+                       if ($suggested_email eq "") {
+                               ERROR("BAD_SIGN_OFF",
+                                     "Unrecognized email address: '$email'\n" . $herecurr);
+                       } else {
+                               my $dequoted = $suggested_email;
+                               $dequoted =~ s/^"//;
+                               $dequoted =~ s/" </ </;
+                               # Don't force email to have quotes
+                               # Allow just an angle bracketed address
+                               if ("$dequoted$comment" ne $email &&
+                                   "<$email_address>$comment" ne $email &&
+                                   "$suggested_email$comment" ne $email) {
+                                       WARN("BAD_SIGN_OFF",
+                                            "email address '$email' might be better as '$suggested_email$comment'\n" . $herecurr);
+                               }
+                       }
+               }
+
+# Check for wrappage within a valid hunk of the file
+               if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
+                       ERROR("CORRUPTED_PATCH",
+                             "patch seems to be corrupt (line wrapped?)\n" .
+                               $herecurr) if (!$emitted_corrupt++);
+               }
+
+# Check for absolute kernel paths.
+               if ($tree) {
+                       while ($line =~ m{(?:^|\s)(/\S*)}g) {
+                               my $file = $1;
+
+                               if ($file =~ m{^(.*?)(?::\d+)+:?$} &&
+                                   check_absolute_file($1, $herecurr)) {
+                                       #
+                               } else {
+                                       check_absolute_file($file, $herecurr);
+                               }
+                       }
+               }
+
+# UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php
+               if (($realfile =~ /^$/ || $line =~ /^\+/) &&
+                   $rawline !~ m/^$UTF8*$/) {
+                       my ($utf8_prefix) = ($rawline =~ /^($UTF8*)/);
+
+                       my $blank = copy_spacing($rawline);
+                       my $ptr = substr($blank, 0, length($utf8_prefix)) . "^";
+                       my $hereptr = "$hereline$ptr\n";
+
+                       CHK("INVALID_UTF8",
+                           "Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $hereptr);
+               }
+
+# ignore non-hunk lines and lines being removed
+               next if (!$hunk_line || $line =~ /^-/);
+
+#trailing whitespace
+               if ($line =~ /^\+.*\015/) {
+                       my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+                       ERROR("DOS_LINE_ENDINGS",
+                             "DOS line endings\n" . $herevet);
+
+               } elsif ($rawline =~ /^\+.*\S\s+$/ || $rawline =~ /^\+\s+$/) {
+                       my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+                       ERROR("TRAILING_WHITESPACE",
+                             "trailing whitespace\n" . $herevet);
+                       $rpt_cleaners = 1;
+               }
+
+# check for Kconfig help text having a real description
+# Only applies when adding the entry originally, after that we do not have
+# sufficient context to determine whether it is indeed long enough.
+               if ($realfile =~ /Kconfig/ &&
+                   $line =~ /\+\s*(?:---)?help(?:---)?$/) {
+                       my $length = 0;
+                       my $cnt = $realcnt;
+                       my $ln = $linenr + 1;
+                       my $f;
+                       my $is_end = 0;
+                       while ($cnt > 0 && defined $lines[$ln - 1]) {
+                               $f = $lines[$ln - 1];
+                               $cnt-- if ($lines[$ln - 1] !~ /^-/);
+                               $is_end = $lines[$ln - 1] =~ /^\+/;
+                               $ln++;
+
+                               next if ($f =~ /^-/);
+                               $f =~ s/^.//;
+                               $f =~ s/#.*//;
+                               $f =~ s/^\s+//;
+                               next if ($f =~ /^$/);
+                               if ($f =~ /^\s*config\s/) {
+                                       $is_end = 1;
+                                       last;
+                               }
+                               $length++;
+                       }
+                       WARN("CONFIG_DESCRIPTION",
+                            "please write a paragraph that describes the config symbol fully\n" . $herecurr) if ($is_end && $length < 4);
+                       #print "is_end<$is_end> length<$length>\n";
+               }
+
+# check we are in a valid source file if not then ignore this hunk
+               next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/);
+
+#80 column limit
+               if ($line =~ /^\+/ && $prevrawline !~ /\/\*\*/ &&
+                   $rawline !~ /^.\s*\*\s*\@$Ident\s/ &&
+                   !($line =~ /^\+\s*$logFunctions\s*\(\s*(?:(KERN_\S+\s*|[^"]*))?"[X\t]*"\s*(?:|,|\)\s*;)\s*$/ ||
+                   $line =~ /^\+\s*"[^"]*"\s*(?:\s*|,|\)\s*;)\s*$/) &&
+                   $length > 80)
+               {
+                       WARN("LONG_LINE",
+                            "line over 80 characters\n" . $herecurr);
+               }
+
+# check for spaces before a quoted newline
+               if ($rawline =~ /^.*\".*\s\\n/) {
+                       WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE",
+                            "unnecessary whitespace before a quoted newline\n" . $herecurr);
+               }
+
+# check for adding lines without a newline.
+               if ($line =~ /^\+/ && defined $lines[$linenr] && $lines[$linenr] =~ /^\\ No newline at end of file/) {
+                       WARN("MISSING_EOF_NEWLINE",
+                            "adding a line without newline at end of file\n" . $herecurr);
+               }
+
+# Blackfin: use hi/lo macros
+               if ($realfile =~ m@arch/blackfin/.*\.S$@) {
+                       if ($line =~ /\.[lL][[:space:]]*=.*&[[:space:]]*0x[fF][fF][fF][fF]/) {
+                               my $herevet = "$here\n" . cat_vet($line) . "\n";
+                               ERROR("LO_MACRO",
+                                     "use the LO() macro, not (... & 0xFFFF)\n" . $herevet);
+                       }
+                       if ($line =~ /\.[hH][[:space:]]*=.*>>[[:space:]]*16/) {
+                               my $herevet = "$here\n" . cat_vet($line) . "\n";
+                               ERROR("HI_MACRO",
+                                     "use the HI() macro, not (... >> 16)\n" . $herevet);
+                       }
+               }
+
+# check we are in a valid source file C or perl if not then ignore this hunk
+               next if ($realfile !~ /\.(h|c|pl)$/);
+
+# at the beginning of a line any tabs must come first and anything
+# more than 8 must use tabs.
+               if ($rawline =~ /^\+\s* \t\s*\S/ ||
+                   $rawline =~ /^\+\s*        \s*/) {
+                       my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+                       ERROR("CODE_INDENT",
+                             "code indent should use tabs where possible\n" . $herevet);
+                       $rpt_cleaners = 1;
+               }
+
+# check for space before tabs.
+               if ($rawline =~ /^\+/ && $rawline =~ / \t/) {
+                       my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+                       WARN("SPACE_BEFORE_TAB",
+                            "please, no space before tabs\n" . $herevet);
+               }
+
+# check for spaces at the beginning of a line.
+# Exceptions:
+#  1) within comments
+#  2) indented preprocessor commands
+#  3) hanging labels
+               if ($rawline =~ /^\+ / && $line !~ /\+ *(?:$;|#|$Ident:)/)  {
+                       my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+                       WARN("LEADING_SPACE",
+                            "please, no spaces at the start of a line\n" . $herevet);
+               }
+
+# check we are in a valid C source file if not then ignore this hunk
+               next if ($realfile !~ /\.(h|c)$/);
+
+# check for RCS/CVS revision markers
+               if ($rawline =~ /^\+.*\$(Revision|Log|Id)(?:\$|)/) {
+                       WARN("CVS_KEYWORD",
+                            "CVS style keyword markers, these will _not_ be updated\n". $herecurr);
+               }
+
+# Blackfin: don't use __builtin_bfin_[cs]sync
+               if ($line =~ /__builtin_bfin_csync/) {
+                       my $herevet = "$here\n" . cat_vet($line) . "\n";
+                       ERROR("CSYNC",
+                             "use the CSYNC() macro in asm/blackfin.h\n" . $herevet);
+               }
+               if ($line =~ /__builtin_bfin_ssync/) {
+                       my $herevet = "$here\n" . cat_vet($line) . "\n";
+                       ERROR("SSYNC",
+                             "use the SSYNC() macro in asm/blackfin.h\n" . $herevet);
+               }
+
+# Check for potential 'bare' types
+               my ($stat, $cond, $line_nr_next, $remain_next, $off_next,
+                   $realline_next);
+               if ($realcnt && $line =~ /.\s*\S/) {
+                       ($stat, $cond, $line_nr_next, $remain_next, $off_next) =
+                               ctx_statement_block($linenr, $realcnt, 0);
+                       $stat =~ s/\n./\n /g;
+                       $cond =~ s/\n./\n /g;
+
+                       # Find the real next line.
+                       $realline_next = $line_nr_next;
+                       if (defined $realline_next &&
+                           (!defined $lines[$realline_next - 1] ||
+                            substr($lines[$realline_next - 1], $off_next) =~ /^\s*$/)) {
+                               $realline_next++;
+                       }
+
+                       my $s = $stat;
+                       $s =~ s/{.*$//s;
+
+                       # Ignore goto labels.
+                       if ($s =~ /$Ident:\*$/s) {
+
+                       # Ignore functions being called
+                       } elsif ($s =~ /^.\s*$Ident\s*\(/s) {
+
+                       } elsif ($s =~ /^.\s*else\b/s) {
+
+                       # declarations always start with types
+                       } elsif ($prev_values eq 'E' && $s =~ /^.\s*(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?((?:\s*$Ident)+?)\b(?:\s+$Sparse)?\s*\**\s*(?:$Ident|\(\*[^\)]*\))(?:\s*$Modifier)?\s*(?:;|=|,|\()/s) {
+                               my $type = $1;
+                               $type =~ s/\s+/ /g;
+                               possible($type, "A:" . $s);
+
+                       # definitions in global scope can only start with types
+                       } elsif ($s =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b\s*(?!:)/s) {
+                               possible($1, "B:" . $s);
+                       }
+
+                       # any (foo ... *) is a pointer cast, and foo is a type
+                       while ($s =~ /\(($Ident)(?:\s+$Sparse)*[\s\*]+\s*\)/sg) {
+                               possible($1, "C:" . $s);
+                       }
+
+                       # Check for any sort of function declaration.
+                       # int foo(something bar, other baz);
+                       # void (*store_gdt)(x86_descr_ptr *);
+                       if ($prev_values eq 'E' && $s =~ /^(.(?:typedef\s*)?(?:(?:$Storage|$Inline)\s*)*\s*$Type\s*(?:\b$Ident|\(\*\s*$Ident\))\s*)\(/s) {
+                               my ($name_len) = length($1);
+
+                               my $ctx = $s;
+                               substr($ctx, 0, $name_len + 1, '');
+                               $ctx =~ s/\)[^\)]*$//;
+
+                               for my $arg (split(/\s*,\s*/, $ctx)) {
+                                       if ($arg =~ /^(?:const\s+)?($Ident)(?:\s+$Sparse)*\s*\**\s*(:?\b$Ident)?$/s || $arg =~ /^($Ident)$/s) {
+
+                                               possible($1, "D:" . $s);
+                                       }
+                               }
+                       }
+
+               }
+
+#
+# Checks which may be anchored in the context.
+#
+
+# Check for switch () and associated case and default
+# statements should be at the same indent.
+               if ($line=~/\bswitch\s*\(.*\)/) {
+                       my $err = '';
+                       my $sep = '';
+                       my @ctx = ctx_block_outer($linenr, $realcnt);
+                       shift(@ctx);
+                       for my $ctx (@ctx) {
+                               my ($clen, $cindent) = line_stats($ctx);
+                               if ($ctx =~ /^\+\s*(case\s+|default:)/ &&
+                                                       $indent != $cindent) {
+                                       $err .= "$sep$ctx\n";
+                                       $sep = '';
+                               } else {
+                                       $sep = "[...]\n";
+                               }
+                       }
+                       if ($err ne '') {
+                               ERROR("SWITCH_CASE_INDENT_LEVEL",
+                                     "switch and case should be at the same indent\n$hereline$err");
+                       }
+               }
+
+# if/while/etc brace do not go on next line, unless defining a do while loop,
+# or if that brace on the next line is for something else
+               if ($line =~ /(.*)\b((?:if|while|for|switch)\s*\(|do\b|else\b)/ && $line !~ /^.\s*\#/) {
+                       my $pre_ctx = "$1$2";
+
+                       my ($level, @ctx) = ctx_statement_level($linenr, $realcnt, 0);
+                       my $ctx_cnt = $realcnt - $#ctx - 1;
+                       my $ctx = join("\n", @ctx);
+
+                       my $ctx_ln = $linenr;
+                       my $ctx_skip = $realcnt;
+
+                       while ($ctx_skip > $ctx_cnt || ($ctx_skip == $ctx_cnt &&
+                                       defined $lines[$ctx_ln - 1] &&
+                                       $lines[$ctx_ln - 1] =~ /^-/)) {
+                               ##print "SKIP<$ctx_skip> CNT<$ctx_cnt>\n";
+                               $ctx_skip-- if (!defined $lines[$ctx_ln - 1] || $lines[$ctx_ln - 1] !~ /^-/);
+                               $ctx_ln++;
+                       }
+
+                       #print "realcnt<$realcnt> ctx_cnt<$ctx_cnt>\n";
+                       #print "pre<$pre_ctx>\nline<$line>\nctx<$ctx>\nnext<$lines[$ctx_ln - 1]>\n";
+
+                       if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) {
+                               ERROR("OPEN_BRACE",
+                                     "that open brace { should be on the previous line\n" .
+                                       "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
+                       }
+                       if ($level == 0 && $pre_ctx !~ /}\s*while\s*\($/ &&
+                           $ctx =~ /\)\s*\;\s*$/ &&
+                           defined $lines[$ctx_ln - 1])
+                       {
+                               my ($nlength, $nindent) = line_stats($lines[$ctx_ln - 1]);
+                               if ($nindent > $indent) {
+                                       WARN("TRAILING_SEMICOLON",
+                                            "trailing semicolon indicates no statements, indent implies otherwise\n" .
+                                               "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
+                               }
+                       }
+               }
+
+# Check relative indent for conditionals and blocks.
+               if ($line =~ /\b(?:(?:if|while|for)\s*\(|do\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) {
+                       my ($s, $c) = ($stat, $cond);
+
+                       substr($s, 0, length($c), '');
+
+                       # Make sure we remove the line prefixes as we have
+                       # none on the first line, and are going to readd them
+                       # where necessary.
+                       $s =~ s/\n./\n/gs;
+
+                       # Find out how long the conditional actually is.
+                       my @newlines = ($c =~ /\n/gs);
+                       my $cond_lines = 1 + $#newlines;
+
+                       # We want to check the first line inside the block
+                       # starting at the end of the conditional, so remove:
+                       #  1) any blank line termination
+                       #  2) any opening brace { on end of the line
+                       #  3) any do (...) {
+                       my $continuation = 0;
+                       my $check = 0;
+                       $s =~ s/^.*\bdo\b//;
+                       $s =~ s/^\s*{//;
+                       if ($s =~ s/^\s*\\//) {
+                               $continuation = 1;
+                       }
+                       if ($s =~ s/^\s*?\n//) {
+                               $check = 1;
+                               $cond_lines++;
+                       }
+
+                       # Also ignore a loop construct at the end of a
+                       # preprocessor statement.
+                       if (($prevline =~ /^.\s*#\s*define\s/ ||
+                           $prevline =~ /\\\s*$/) && $continuation == 0) {
+                               $check = 0;
+                       }
+
+                       my $cond_ptr = -1;
+                       $continuation = 0;
+                       while ($cond_ptr != $cond_lines) {
+                               $cond_ptr = $cond_lines;
+
+                               # If we see an #else/#elif then the code
+                               # is not linear.
+                               if ($s =~ /^\s*\#\s*(?:else|elif)/) {
+                                       $check = 0;
+                               }
+
+                               # Ignore:
+                               #  1) blank lines, they should be at 0,
+                               #  2) preprocessor lines, and
+                               #  3) labels.
+                               if ($continuation ||
+                                   $s =~ /^\s*?\n/ ||
+                                   $s =~ /^\s*#\s*?/ ||
+                                   $s =~ /^\s*$Ident\s*:/) {
+                                       $continuation = ($s =~ /^.*?\\\n/) ? 1 : 0;
+                                       if ($s =~ s/^.*?\n//) {
+                                               $cond_lines++;
+                                       }
+                               }
+                       }
+
+                       my (undef, $sindent) = line_stats("+" . $s);
+                       my $stat_real = raw_line($linenr, $cond_lines);
+
+                       # Check if either of these lines are modified, else
+                       # this is not this patch's fault.
+                       if (!defined($stat_real) ||
+                           $stat !~ /^\+/ && $stat_real !~ /^\+/) {
+                               $check = 0;
+                       }
+                       if (defined($stat_real) && $cond_lines > 1) {
+                               $stat_real = "[...]\n$stat_real";
+                       }
+
+                       #print "line<$line> prevline<$prevline> indent<$indent> sindent<$sindent> check<$check> continuation<$continuation> s<$s> cond_lines<$cond_lines> stat_real<$stat_real> stat<$stat>\n";
+
+                       if ($check && (($sindent % 8) != 0 ||
+                           ($sindent <= $indent && $s ne ''))) {
+                               WARN("SUSPECT_CODE_INDENT",
+                                    "suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n");
+                       }
+               }
+
+               # Track the 'values' across context and added lines.
+               my $opline = $line; $opline =~ s/^./ /;
+               my ($curr_values, $curr_vars) =
+                               annotate_values($opline . "\n", $prev_values);
+               $curr_values = $prev_values . $curr_values;
+               if ($dbg_values) {
+                       my $outline = $opline; $outline =~ s/\t/ /g;
+                       print "$linenr > .$outline\n";
+                       print "$linenr > $curr_values\n";
+                       print "$linenr >  $curr_vars\n";
+               }
+               $prev_values = substr($curr_values, -1);
+
+#ignore lines not being added
+               if ($line=~/^[^\+]/) {next;}
+
+# TEST: allow direct testing of the type matcher.
+               if ($dbg_type) {
+                       if ($line =~ /^.\s*$Declare\s*$/) {
+                               ERROR("TEST_TYPE",
+                                     "TEST: is type\n" . $herecurr);
+                       } elsif ($dbg_type > 1 && $line =~ /^.+($Declare)/) {
+                               ERROR("TEST_NOT_TYPE",
+                                     "TEST: is not type ($1 is)\n". $herecurr);
+                       }
+                       next;
+               }
+# TEST: allow direct testing of the attribute matcher.
+               if ($dbg_attr) {
+                       if ($line =~ /^.\s*$Modifier\s*$/) {
+                               ERROR("TEST_ATTR",
+                                     "TEST: is attr\n" . $herecurr);
+                       } elsif ($dbg_attr > 1 && $line =~ /^.+($Modifier)/) {
+                               ERROR("TEST_NOT_ATTR",
+                                     "TEST: is not attr ($1 is)\n". $herecurr);
+                       }
+                       next;
+               }
+
+# check for initialisation to aggregates open brace on the next line
+               if ($line =~ /^.\s*{/ &&
+                   $prevline =~ /(?:^|[^=])=\s*$/) {
+                       ERROR("OPEN_BRACE",
+                             "that open brace { should be on the previous line\n" . $hereprev);
+               }
+
+#
+# Checks which are anchored on the added line.
+#
+
+# check for malformed paths in #include statements (uses RAW line)
+               if ($rawline =~ m{^.\s*\#\s*include\s+[<"](.*)[">]}) {
+                       my $path = $1;
+                       if ($path =~ m{//}) {
+                               ERROR("MALFORMED_INCLUDE",
+                                     "malformed #include filename\n" .
+                                       $herecurr);
+                       }
+               }
+
+# no C99 // comments
+               if ($line =~ m{//}) {
+                       ERROR("C99_COMMENTS",
+                             "do not use C99 // comments\n" . $herecurr);
+               }
+               # Remove C99 comments.
+               $line =~ s@//.*@@;
+               $opline =~ s@//.*@@;
+
+# EXPORT_SYMBOL should immediately follow the thing it is exporting, consider
+# the whole statement.
+#print "APW <$lines[$realline_next - 1]>\n";
+               if (defined $realline_next &&
+                   exists $lines[$realline_next - 1] &&
+                   !defined $suppress_export{$realline_next} &&
+                   ($lines[$realline_next - 1] =~ /EXPORT_SYMBOL.*\((.*)\)/ ||
+                    $lines[$realline_next - 1] =~ /EXPORT_UNUSED_SYMBOL.*\((.*)\)/)) {
+                       # Handle definitions which produce identifiers with
+                       # a prefix:
+                       #   XXX(foo);
+                       #   EXPORT_SYMBOL(something_foo);
+                       my $name = $1;
+                       if ($stat =~ /^.([A-Z_]+)\s*\(\s*($Ident)/ &&
+                           $name =~ /^${Ident}_$2/) {
+#print "FOO C name<$name>\n";
+                               $suppress_export{$realline_next} = 1;
+
+                       } elsif ($stat !~ /(?:
+                               \n.}\s*$|
+                               ^.DEFINE_$Ident\(\Q$name\E\)|
+                               ^.DECLARE_$Ident\(\Q$name\E\)|
+                               ^.LIST_HEAD\(\Q$name\E\)|
+                               ^.(?:$Storage\s+)?$Type\s*\(\s*\*\s*\Q$name\E\s*\)\s*\(|
+                               \b\Q$name\E(?:\s+$Attribute)*\s*(?:;|=|\[|\()
+                           )/x) {
+#print "FOO A<$lines[$realline_next - 1]> stat<$stat> name<$name>\n";
+                               $suppress_export{$realline_next} = 2;
+                       } else {
+                               $suppress_export{$realline_next} = 1;
+                       }
+               }
+               if (!defined $suppress_export{$linenr} &&
+                   $prevline =~ /^.\s*$/ &&
+                   ($line =~ /EXPORT_SYMBOL.*\((.*)\)/ ||
+                    $line =~ /EXPORT_UNUSED_SYMBOL.*\((.*)\)/)) {
+#print "FOO B <$lines[$linenr - 1]>\n";
+                       $suppress_export{$linenr} = 2;
+               }
+               if (defined $suppress_export{$linenr} &&
+                   $suppress_export{$linenr} == 2) {
+                       WARN("EXPORT_SYMBOL",
+                            "EXPORT_SYMBOL(foo); should immediately follow its function/variable\n" . $herecurr);
+               }
+
+# check for global initialisers.
+               if ($line =~ /^.$Type\s*$Ident\s*(?:\s+$Modifier)*\s*=\s*(0|NULL|false)\s*;/) {
+                       ERROR("GLOBAL_INITIALISERS",
+                             "do not initialise globals to 0 or NULL\n" .
+                               $herecurr);
+               }
+# check for static initialisers.
+               if ($line =~ /\bstatic\s.*=\s*(0|NULL|false)\s*;/) {
+                       ERROR("INITIALISED_STATIC",
+                             "do not initialise statics to 0 or NULL\n" .
+                               $herecurr);
+               }
+
+# check for static const char * arrays.
+               if ($line =~ /\bstatic\s+const\s+char\s*\*\s*(\w+)\s*\[\s*\]\s*=\s*/) {
+                       WARN("STATIC_CONST_CHAR_ARRAY",
+                            "static const char * array should probably be static const char * const\n" .
+                               $herecurr);
+               }
+
+# check for static char foo[] = "bar" declarations.
+               if ($line =~ /\bstatic\s+char\s+(\w+)\s*\[\s*\]\s*=\s*"/) {
+                       WARN("STATIC_CONST_CHAR_ARRAY",
+                            "static char array declaration should probably be static const char\n" .
+                               $herecurr);
+               }
+
+# check for declarations of struct pci_device_id
+               if ($line =~ /\bstruct\s+pci_device_id\s+\w+\s*\[\s*\]\s*\=\s*\{/) {
+                       WARN("DEFINE_PCI_DEVICE_TABLE",
+                            "Use DEFINE_PCI_DEVICE_TABLE for struct pci_device_id\n" . $herecurr);
+               }
+
+# check for new typedefs, only function parameters and sparse annotations
+# make sense.
+               if ($line =~ /\btypedef\s/ &&
+                   $line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ &&
+                   $line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ &&
+                   $line !~ /\b$typeTypedefs\b/ &&
+                   $line !~ /\b__bitwise(?:__|)\b/) {
+                       WARN("NEW_TYPEDEFS",
+                            "do not add new typedefs\n" . $herecurr);
+               }
+
+# * goes on variable not on type
+               # (char*[ const])
+               if ($line =~ m{\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\)}) {
+                       my ($from, $to) = ($1, $1);
+
+                       # Should start with a space.
+                       $to =~ s/^(\S)/ $1/;
+                       # Should not end with a space.
+                       $to =~ s/\s+$//;
+                       # '*'s should not have spaces between.
+                       while ($to =~ s/\*\s+\*/\*\*/) {
+                       }
+
+                       #print "from<$from> to<$to>\n";
+                       if ($from ne $to) {
+                               ERROR("POINTER_LOCATION",
+                                     "\"(foo$from)\" should be \"(foo$to)\"\n" .  $herecurr);
+                       }
+               } elsif ($line =~ m{\b$NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)($Ident)}) {
+                       my ($from, $to, $ident) = ($1, $1, $2);
+
+                       # Should start with a space.
+                       $to =~ s/^(\S)/ $1/;
+                       # Should not end with a space.
+                       $to =~ s/\s+$//;
+                       # '*'s should not have spaces between.
+                       while ($to =~ s/\*\s+\*/\*\*/) {
+                       }
+                       # Modifiers should have spaces.
+                       $to =~ s/(\b$Modifier$)/$1 /;
+
+                       #print "from<$from> to<$to> ident<$ident>\n";
+                       if ($from ne $to && $ident !~ /^$Modifier$/) {
+                               ERROR("POINTER_LOCATION",
+                                     "\"foo${from}bar\" should be \"foo${to}bar\"\n" .  $herecurr);
+                       }
+               }
+
+# # no BUG() or BUG_ON()
+#              if ($line =~ /\b(BUG|BUG_ON)\b/) {
+#                      print "Try to use WARN_ON & Recovery code rather than BUG() or BUG_ON()\n";
+#                      print "$herecurr";
+#                      $clean = 0;
+#              }
+
+               if ($line =~ /\bLINUX_VERSION_CODE\b/) {
+                       WARN("LINUX_VERSION_CODE",
+                            "LINUX_VERSION_CODE should be avoided, code should be for the version to which it is merged\n" . $herecurr);
+               }
+
+# check for uses of printk_ratelimit
+               if ($line =~ /\bprintk_ratelimit\s*\(/) {
+                       WARN("PRINTK_RATELIMITED",
+"Prefer printk_ratelimited or pr_<level>_ratelimited to printk_ratelimit\n" . $herecurr);
+               }
+
+# printk should use KERN_* levels.  Note that follow on printk's on the
+# same line do not need a level, so we use the current block context
+# to try and find and validate the current printk.  In summary the current
+# printk includes all preceding printk's which have no newline on the end.
+# we assume the first bad printk is the one to report.
+               if ($line =~ /\bprintk\((?!KERN_)\s*"/) {
+                       my $ok = 0;
+                       for (my $ln = $linenr - 1; $ln >= $first_line; $ln--) {
+                               #print "CHECK<$lines[$ln - 1]\n";
+                               # we have a preceding printk if it ends
+                               # with "\n" ignore it, else it is to blame
+                               if ($lines[$ln - 1] =~ m{\bprintk\(}) {
+                                       if ($rawlines[$ln - 1] !~ m{\\n"}) {
+                                               $ok = 1;
+                                       }
+                                       last;
+                               }
+                       }
+                       if ($ok == 0) {
+                               WARN("PRINTK_WITHOUT_KERN_LEVEL",
+                                    "printk() should include KERN_ facility level\n" . $herecurr);
+                       }
+               }
+
+# function brace can't be on same line, except for #defines of do while,
+# or if closed on same line
+               if (($line=~/$Type\s*$Ident\(.*\).*\s{/) and
+                   !($line=~/\#\s*define.*do\s{/) and !($line=~/}/)) {
+                       ERROR("OPEN_BRACE",
+                             "open brace '{' following function declarations go on the next line\n" . $herecurr);
+               }
+
+# open braces for enum, union and struct go on the same line.
+               if ($line =~ /^.\s*{/ &&
+                   $prevline =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?\s*$/) {
+                       ERROR("OPEN_BRACE",
+                             "open brace '{' following $1 go on the same line\n" . $hereprev);
+               }
+
+# missing space after union, struct or enum definition
+               if ($line =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?(?:\s+$Ident)?[=\{]/) {
+                   WARN("SPACING",
+                        "missing space after $1 definition\n" . $herecurr);
+               }
+
+# check for spacing round square brackets; allowed:
+#  1. with a type on the left -- int [] a;
+#  2. at the beginning of a line for slice initialisers -- [0...10] = 5,
+#  3. inside a curly brace -- = { [0...10] = 5 }
+               while ($line =~ /(.*?\s)\[/g) {
+                       my ($where, $prefix) = ($-[1], $1);
+                       if ($prefix !~ /$Type\s+$/ &&
+                           ($where != 0 || $prefix !~ /^.\s+$/) &&
+                           $prefix !~ /{\s+$/) {
+                               ERROR("BRACKET_SPACE",
+                                     "space prohibited before open square bracket '['\n" . $herecurr);
+                       }
+               }
+
+# check for spaces between functions and their parentheses.
+               while ($line =~ /($Ident)\s+\(/g) {
+                       my $name = $1;
+                       my $ctx_before = substr($line, 0, $-[1]);
+                       my $ctx = "$ctx_before$name";
+
+                       # Ignore those directives where spaces _are_ permitted.
+                       if ($name =~ /^(?:
+                               if|for|while|switch|return|case|
+                               volatile|__volatile__|
+                               __attribute__|format|__extension__|
+                               asm|__asm__)$/x)
+                       {
+
+                       # cpp #define statements have non-optional spaces, ie
+                       # if there is a space between the name and the open
+                       # parenthesis it is simply not a parameter group.
+                       } elsif ($ctx_before =~ /^.\s*\#\s*define\s*$/) {
+
+                       # cpp #elif statement condition may start with a (
+                       } elsif ($ctx =~ /^.\s*\#\s*elif\s*$/) {
+
+                       # If this whole things ends with a type its most
+                       # likely a typedef for a function.
+                       } elsif ($ctx =~ /$Type$/) {
+
+                       } else {
+                               WARN("SPACING",
+                                    "space prohibited between function name and open parenthesis '('\n" . $herecurr);
+                       }
+               }
+# Check operator spacing.
+               if (!($line=~/\#\s*include/)) {
+                       my $ops = qr{
+                               <<=|>>=|<=|>=|==|!=|
+                               \+=|-=|\*=|\/=|%=|\^=|\|=|&=|
+                               =>|->|<<|>>|<|>|=|!|~|
+                               &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/|%|
+                               \?|:
+                       }x;
+                       my @elements = split(/($ops|;)/, $opline);
+                       my $off = 0;
+
+                       my $blank = copy_spacing($opline);
+
+                       for (my $n = 0; $n < $#elements; $n += 2) {
+                               $off += length($elements[$n]);
+
+                               # Pick up the preceding and succeeding characters.
+                               my $ca = substr($opline, 0, $off);
+                               my $cc = '';
+                               if (length($opline) >= ($off + length($elements[$n + 1]))) {
+                                       $cc = substr($opline, $off + length($elements[$n + 1]));
+                               }
+                               my $cb = "$ca$;$cc";
+
+                               my $a = '';
+                               $a = 'V' if ($elements[$n] ne '');
+                               $a = 'W' if ($elements[$n] =~ /\s$/);
+                               $a = 'C' if ($elements[$n] =~ /$;$/);
+                               $a = 'B' if ($elements[$n] =~ /(\[|\()$/);
+                               $a = 'O' if ($elements[$n] eq '');
+                               $a = 'E' if ($ca =~ /^\s*$/);
+
+                               my $op = $elements[$n + 1];
+
+                               my $c = '';
+                               if (defined $elements[$n + 2]) {
+                                       $c = 'V' if ($elements[$n + 2] ne '');
+                                       $c = 'W' if ($elements[$n + 2] =~ /^\s/);
+                                       $c = 'C' if ($elements[$n + 2] =~ /^$;/);
+                                       $c = 'B' if ($elements[$n + 2] =~ /^(\)|\]|;)/);
+                                       $c = 'O' if ($elements[$n + 2] eq '');
+                                       $c = 'E' if ($elements[$n + 2] =~ /^\s*\\$/);
+                               } else {
+                                       $c = 'E';
+                               }
+
+                               my $ctx = "${a}x${c}";
+
+                               my $at = "(ctx:$ctx)";
+
+                               my $ptr = substr($blank, 0, $off) . "^";
+                               my $hereptr = "$hereline$ptr\n";
+
+                               # Pull out the value of this operator.
+                               my $op_type = substr($curr_values, $off + 1, 1);
+
+                               # Get the full operator variant.
+                               my $opv = $op . substr($curr_vars, $off, 1);
+
+                               # Ignore operators passed as parameters.
+                               if ($op_type ne 'V' &&
+                                   $ca =~ /\s$/ && $cc =~ /^\s*,/) {
+
+#                              # Ignore comments
+#                              } elsif ($op =~ /^$;+$/) {
+
+                               # ; should have either the end of line or a space or \ after it
+                               } elsif ($op eq ';') {
+                                       if ($ctx !~ /.x[WEBC]/ &&
+                                           $cc !~ /^\\/ && $cc !~ /^;/) {
+                                               ERROR("SPACING",
+                                                     "space required after that '$op' $at\n" . $hereptr);
+                                       }
+
+                               # // is a comment
+                               } elsif ($op eq '//') {
+
+                               # No spaces for:
+                               #   ->
+                               #   :   when part of a bitfield
+                               } elsif ($op eq '->' || $opv eq ':B') {
+                                       if ($ctx =~ /Wx.|.xW/) {
+                                               ERROR("SPACING",
+                                                     "spaces prohibited around that '$op' $at\n" . $hereptr);
+                                       }
+
+                               # , must have a space on the right.
+                               } elsif ($op eq ',') {
+                                       if ($ctx !~ /.x[WEC]/ && $cc !~ /^}/) {
+                                               ERROR("SPACING",
+                                                     "space required after that '$op' $at\n" . $hereptr);
+                                       }
+
+                               # '*' as part of a type definition -- reported already.
+                               } elsif ($opv eq '*_') {
+                                       #warn "'*' is part of type\n";
+
+                               # unary operators should have a space before and
+                               # none after.  May be left adjacent to another
+                               # unary operator, or a cast
+                               } elsif ($op eq '!' || $op eq '~' ||
+                                        $opv eq '*U' || $opv eq '-U' ||
+                                        $opv eq '&U' || $opv eq '&&U') {
+                                       if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) {
+                                               ERROR("SPACING",
+                                                     "space required before that '$op' $at\n" . $hereptr);
+                                       }
+                                       if ($op eq '*' && $cc =~/\s*$Modifier\b/) {
+                                               # A unary '*' may be const
+
+                                       } elsif ($ctx =~ /.xW/) {
+                                               ERROR("SPACING",
+                                                     "space prohibited after that '$op' $at\n" . $hereptr);
+                                       }
+
+                               # unary ++ and unary -- are allowed no space on one side.
+                               } elsif ($op eq '++' or $op eq '--') {
+                                       if ($ctx !~ /[WEOBC]x[^W]/ && $ctx !~ /[^W]x[WOBEC]/) {
+                                               ERROR("SPACING",
+                                                     "space required one side of that '$op' $at\n" . $hereptr);
+                                       }
+                                       if ($ctx =~ /Wx[BE]/ ||
+                                           ($ctx =~ /Wx./ && $cc =~ /^;/)) {
+                                               ERROR("SPACING",
+                                                     "space prohibited before that '$op' $at\n" . $hereptr);
+                                       }
+                                       if ($ctx =~ /ExW/) {
+                                               ERROR("SPACING",
+                                                     "space prohibited after that '$op' $at\n" . $hereptr);
+                                       }
+
+
+                               # << and >> may either have or not have spaces both sides
+                               } elsif ($op eq '<<' or $op eq '>>' or
+                                        $op eq '&' or $op eq '^' or $op eq '|' or
+                                        $op eq '+' or $op eq '-' or
+                                        $op eq '*' or $op eq '/' or
+                                        $op eq '%')
+                               {
+                                       if ($ctx =~ /Wx[^WCE]|[^WCE]xW/) {
+                                               ERROR("SPACING",
+                                                     "need consistent spacing around '$op' $at\n" .
+                                                       $hereptr);
+                                       }
+
+                               # A colon needs no spaces before when it is
+                               # terminating a case value or a label.
+                               } elsif ($opv eq ':C' || $opv eq ':L') {
+                                       if ($ctx =~ /Wx./) {
+                                               ERROR("SPACING",
+                                                     "space prohibited before that '$op' $at\n" . $hereptr);
+                                       }
+
+                               # All the others need spaces both sides.
+                               } elsif ($ctx !~ /[EWC]x[CWE]/) {
+                                       my $ok = 0;
+
+                                       # Ignore email addresses <foo@bar>
+                                       if (($op eq '<' &&
+                                            $cc =~ /^\S+\@\S+>/) ||
+                                           ($op eq '>' &&
+                                            $ca =~ /<\S+\@\S+$/))
+                                       {
+                                               $ok = 1;
+                                       }
+
+                                       # Ignore ?:
+                                       if (($opv eq ':O' && $ca =~ /\?$/) ||
+                                           ($op eq '?' && $cc =~ /^:/)) {
+                                               $ok = 1;
+                                       }
+
+                                       if ($ok == 0) {
+                                               ERROR("SPACING",
+                                                     "spaces required around that '$op' $at\n" . $hereptr);
+                                       }
+                               }
+                               $off += length($elements[$n + 1]);
+                       }
+               }
+
+# check for multiple assignments
+               if ($line =~ /^.\s*$Lval\s*=\s*$Lval\s*=(?!=)/) {
+                       CHK("MULTIPLE_ASSIGNMENTS",
+                           "multiple assignments should be avoided\n" . $herecurr);
+               }
+
+## # check for multiple declarations, allowing for a function declaration
+## # continuation.
+##             if ($line =~ /^.\s*$Type\s+$Ident(?:\s*=[^,{]*)?\s*,\s*$Ident.*/ &&
+##                 $line !~ /^.\s*$Type\s+$Ident(?:\s*=[^,{]*)?\s*,\s*$Type\s*$Ident.*/) {
+##
+##                     # Remove any bracketed sections to ensure we do not
+##                     # falsly report the parameters of functions.
+##                     my $ln = $line;
+##                     while ($ln =~ s/\([^\(\)]*\)//g) {
+##                     }
+##                     if ($ln =~ /,/) {
+##                             WARN("MULTIPLE_DECLARATION",
+##                                  "declaring multiple variables together should be avoided\n" . $herecurr);
+##                     }
+##             }
+
+#need space before brace following if, while, etc
+               if (($line =~ /\(.*\){/ && $line !~ /\($Type\){/) ||
+                   $line =~ /do{/) {
+                       ERROR("SPACING",
+                             "space required before the open brace '{'\n" . $herecurr);
+               }
+
+# closing brace should have a space following it when it has anything
+# on the line
+               if ($line =~ /}(?!(?:,|;|\)))\S/) {
+                       ERROR("SPACING",
+                             "space required after that close brace '}'\n" . $herecurr);
+               }
+
+# check spacing on square brackets
+               if ($line =~ /\[\s/ && $line !~ /\[\s*$/) {
+                       ERROR("SPACING",
+                             "space prohibited after that open square bracket '['\n" . $herecurr);
+               }
+               if ($line =~ /\s\]/) {
+                       ERROR("SPACING",
+                             "space prohibited before that close square bracket ']'\n" . $herecurr);
+               }
+
+# check spacing on parentheses
+               if ($line =~ /\(\s/ && $line !~ /\(\s*(?:\\)?$/ &&
+                   $line !~ /for\s*\(\s+;/) {
+                       ERROR("SPACING",
+                             "space prohibited after that open parenthesis '('\n" . $herecurr);
+               }
+               if ($line =~ /(\s+)\)/ && $line !~ /^.\s*\)/ &&
+                   $line !~ /for\s*\(.*;\s+\)/ &&
+                   $line !~ /:\s+\)/) {
+                       ERROR("SPACING",
+                             "space prohibited before that close parenthesis ')'\n" . $herecurr);
+               }
+
+#goto labels aren't indented, allow a single space however
+               if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and
+                  !($line=~/^. [A-Za-z\d_]+:/) and !($line=~/^.\s+default:/)) {
+                       WARN("INDENTED_LABEL",
+                            "labels should not be indented\n" . $herecurr);
+               }
+
+# Return is not a function.
+               if (defined($stat) && $stat =~ /^.\s*return(\s*)(\(.*);/s) {
+                       my $spacing = $1;
+                       my $value = $2;
+
+                       # Flatten any parentheses
+                       $value =~ s/\(/ \(/g;
+                       $value =~ s/\)/\) /g;
+                       while ($value =~ s/\[[^\{\}]*\]/1/ ||
+                              $value !~ /(?:$Ident|-?$Constant)\s*
+                                            $Compare\s*
+                                            (?:$Ident|-?$Constant)/x &&
+                              $value =~ s/\([^\(\)]*\)/1/) {
+                       }
+#print "value<$value>\n";
+                       if ($value =~ /^\s*(?:$Ident|-?$Constant)\s*$/) {
+                               ERROR("RETURN_PARENTHESES",
+                                     "return is not a function, parentheses are not required\n" . $herecurr);
+
+                       } elsif ($spacing !~ /\s+/) {
+                               ERROR("SPACING",
+                                     "space required before the open parenthesis '('\n" . $herecurr);
+                       }
+               }
+# Return of what appears to be an errno should normally be -'ve
+               if ($line =~ /^.\s*return\s*(E[A-Z]*)\s*;/) {
+                       my $name = $1;
+                       if ($name ne 'EOF' && $name ne 'ERROR') {
+                               WARN("USE_NEGATIVE_ERRNO",
+                                    "return of an errno should typically be -ve (return -$1)\n" . $herecurr);
+                       }
+               }
+
+# typecasts on min/max could be min_t/max_t
+               if ($line =~ /^\+(?:.*?)\b(min|max)\s*\($Typecast{0,1}($LvalOrFunc)\s*,\s*$Typecast{0,1}($LvalOrFunc)\s*\)/) {
+                       if (defined $2 || defined $8) {
+                               my $call = $1;
+                               my $cast1 = deparenthesize($2);
+                               my $arg1 = $3;
+                               my $cast2 = deparenthesize($8);
+                               my $arg2 = $9;
+                               my $cast;
+
+                               if ($cast1 ne "" && $cast2 ne "") {
+                                       $cast = "$cast1 or $cast2";
+                               } elsif ($cast1 ne "") {
+                                       $cast = $cast1;
+                               } else {
+                                       $cast = $cast2;
+                               }
+                               WARN("MINMAX",
+                                    "$call() should probably be ${call}_t($cast, $arg1, $arg2)\n" . $herecurr);
+                       }
+               }
+
+# Need a space before open parenthesis after if, while etc
+               if ($line=~/\b(if|while|for|switch)\(/) {
+                       ERROR("SPACING", "space required before the open parenthesis '('\n" . $herecurr);
+               }
+
+# Check for illegal assignment in if conditional -- and check for trailing
+# statements after the conditional.
+               if ($line =~ /do\s*(?!{)/) {
+                       my ($stat_next) = ctx_statement_block($line_nr_next,
+                                               $remain_next, $off_next);
+                       $stat_next =~ s/\n./\n /g;
+                       ##print "stat<$stat> stat_next<$stat_next>\n";
+
+                       if ($stat_next =~ /^\s*while\b/) {
+                               # If the statement carries leading newlines,
+                               # then count those as offsets.
+                               my ($whitespace) =
+                                       ($stat_next =~ /^((?:\s*\n[+-])*\s*)/s);
+                               my $offset =
+                                       statement_rawlines($whitespace) - 1;
+
+                               $suppress_whiletrailers{$line_nr_next +
+                                                               $offset} = 1;
+                       }
+               }
+               if (!defined $suppress_whiletrailers{$linenr} &&
+                   $line =~ /\b(?:if|while|for)\s*\(/ && $line !~ /^.\s*#/) {
+                       my ($s, $c) = ($stat, $cond);
+
+                       if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/s) {
+                               ERROR("ASSIGN_IN_IF",
+                                     "do not use assignment in if condition\n" . $herecurr);
+                       }
+
+                       # Find out what is on the end of the line after the
+                       # conditional.
+                       substr($s, 0, length($c), '');
+                       $s =~ s/\n.*//g;
+                       $s =~ s/$;//g;  # Remove any comments
+                       if (length($c) && $s !~ /^\s*{?\s*\\*\s*$/ &&
+                           $c !~ /}\s*while\s*/)
+                       {
+                               # Find out how long the conditional actually is.
+                               my @newlines = ($c =~ /\n/gs);
+                               my $cond_lines = 1 + $#newlines;
+                               my $stat_real = '';
+
+                               $stat_real = raw_line($linenr, $cond_lines)
+                                                       . "\n" if ($cond_lines);
+                               if (defined($stat_real) && $cond_lines > 1) {
+                                       $stat_real = "[...]\n$stat_real";
+                               }
+
+                               ERROR("TRAILING_STATEMENTS",
+                                     "trailing statements should be on next line\n" . $herecurr . $stat_real);
+                       }
+               }
+
+# Check for bitwise tests written as boolean
+               if ($line =~ /
+                       (?:
+                               (?:\[|\(|\&\&|\|\|)
+                               \s*0[xX][0-9]+\s*
+                               (?:\&\&|\|\|)
+                       |
+                               (?:\&\&|\|\|)
+                               \s*0[xX][0-9]+\s*
+                               (?:\&\&|\|\||\)|\])
+                       )/x)
+               {
+                       WARN("HEXADECIMAL_BOOLEAN_TEST",
+                            "boolean test with hexadecimal, perhaps just 1 \& or \|?\n" . $herecurr);
+               }
+
+# if and else should not have general statements after it
+               if ($line =~ /^.\s*(?:}\s*)?else\b(.*)/) {
+                       my $s = $1;
+                       $s =~ s/$;//g;  # Remove any comments
+                       if ($s !~ /^\s*(?:\sif|(?:{|)\s*\\?\s*$)/) {
+                               ERROR("TRAILING_STATEMENTS",
+                                     "trailing statements should be on next line\n" . $herecurr);
+                       }
+               }
+# if should not continue a brace
+               if ($line =~ /}\s*if\b/) {
+                       ERROR("TRAILING_STATEMENTS",
+                             "trailing statements should be on next line\n" .
+                               $herecurr);
+               }
+# case and default should not have general statements after them
+               if ($line =~ /^.\s*(?:case\s*.*|default\s*):/g &&
+                   $line !~ /\G(?:
+                       (?:\s*$;*)(?:\s*{)?(?:\s*$;*)(?:\s*\\)?\s*$|
+                       \s*return\s+
+                   )/xg)
+               {
+                       ERROR("TRAILING_STATEMENTS",
+                             "trailing statements should be on next line\n" . $herecurr);
+               }
+
+               # Check for }<nl>else {, these must be at the same
+               # indent level to be relevant to each other.
+               if ($prevline=~/}\s*$/ and $line=~/^.\s*else\s*/ and
+                                               $previndent == $indent) {
+                       ERROR("ELSE_AFTER_BRACE",
+                             "else should follow close brace '}'\n" . $hereprev);
+               }
+
+               if ($prevline=~/}\s*$/ and $line=~/^.\s*while\s*/ and
+                                               $previndent == $indent) {
+                       my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0);
+
+                       # Find out what is on the end of the line after the
+                       # conditional.
+                       substr($s, 0, length($c), '');
+                       $s =~ s/\n.*//g;
+
+                       if ($s =~ /^\s*;/) {
+                               ERROR("WHILE_AFTER_BRACE",
+                                     "while should follow close brace '}'\n" . $hereprev);
+                       }
+               }
+
+#studly caps, commented out until figure out how to distinguish between use of existing and adding new
+#              if (($line=~/[\w_][a-z\d]+[A-Z]/) and !($line=~/print/)) {
+#                  print "No studly caps, use _\n";
+#                  print "$herecurr";
+#                  $clean = 0;
+#              }
+
+#no spaces allowed after \ in define
+               if ($line=~/\#\s*define.*\\\s$/) {
+                       WARN("WHITESPACE_AFTER_LINE_CONTINUATION",
+                            "Whitepspace after \\ makes next lines useless\n" . $herecurr);
+               }
+
+#warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line)
+               if ($tree && $rawline =~ m{^.\s*\#\s*include\s*\<asm\/(.*)\.h\>}) {
+                       my $file = "$1.h";
+                       my $checkfile = "include/linux/$file";
+                       if (-f "$root/$checkfile" &&
+                           $realfile ne $checkfile &&
+                           $1 !~ /$allowed_asm_includes/)
+                       {
+                               if ($realfile =~ m{^arch/}) {
+                                       CHK("ARCH_INCLUDE_LINUX",
+                                           "Consider using #include <linux/$file> instead of <asm/$file>\n" . $herecurr);
+                               } else {
+                                       WARN("INCLUDE_LINUX",
+                                            "Use #include <linux/$file> instead of <asm/$file>\n" . $herecurr);
+                               }
+                       }
+               }
+
+# multi-statement macros should be enclosed in a do while loop, grab the
+# first statement and ensure its the whole macro if its not enclosed
+# in a known good container
+               if ($realfile !~ m@/vmlinux.lds.h$@ &&
+                   $line =~ /^.\s*\#\s*define\s*$Ident(\()?/) {
+                       my $ln = $linenr;
+                       my $cnt = $realcnt;
+                       my ($off, $dstat, $dcond, $rest);
+                       my $ctx = '';
+
+                       my $args = defined($1);
+
+                       # Find the end of the macro and limit our statement
+                       # search to that.
+                       while ($cnt > 0 && defined $lines[$ln - 1] &&
+                               $lines[$ln - 1] =~ /^(?:-|..*\\$)/)
+                       {
+                               $ctx .= $rawlines[$ln - 1] . "\n";
+                               $cnt-- if ($lines[$ln - 1] !~ /^-/);
+                               $ln++;
+                       }
+                       $ctx .= $rawlines[$ln - 1];
+
+                       ($dstat, $dcond, $ln, $cnt, $off) =
+                               ctx_statement_block($linenr, $ln - $linenr + 1, 0);
+                       #print "dstat<$dstat> dcond<$dcond> cnt<$cnt> off<$off>\n";
+                       #print "LINE<$lines[$ln-1]> len<" . length($lines[$ln-1]) . "\n";
+
+                       # Extract the remainder of the define (if any) and
+                       # rip off surrounding spaces, and trailing \'s.
+                       $rest = '';
+                       while ($off != 0 || ($cnt > 0 && $rest =~ /\\\s*$/)) {
+                               #print "ADDING cnt<$cnt> $off <" . substr($lines[$ln - 1], $off) . "> rest<$rest>\n";
+                               if ($off != 0 || $lines[$ln - 1] !~ /^-/) {
+                                       $rest .= substr($lines[$ln - 1], $off) . "\n";
+                                       $cnt--;
+                               }
+                               $ln++;
+                               $off = 0;
+                       }
+                       $rest =~ s/\\\n.//g;
+                       $rest =~ s/^\s*//s;
+                       $rest =~ s/\s*$//s;
+
+                       # Clean up the original statement.
+                       if ($args) {
+                               substr($dstat, 0, length($dcond), '');
+                       } else {
+                               $dstat =~ s/^.\s*\#\s*define\s+$Ident\s*//;
+                       }
+                       $dstat =~ s/$;//g;
+                       $dstat =~ s/\\\n.//g;
+                       $dstat =~ s/^\s*//s;
+                       $dstat =~ s/\s*$//s;
+
+                       # Flatten any parentheses and braces
+                       while ($dstat =~ s/\([^\(\)]*\)/1/ ||
+                              $dstat =~ s/\{[^\{\}]*\}/1/ ||
+                              $dstat =~ s/\[[^\{\}]*\]/1/)
+                       {
+                       }
+
+                       my $exceptions = qr{
+                               $Declare|
+                               module_param_named|
+                               MODULE_PARAM_DESC|
+                               DECLARE_PER_CPU|
+                               DEFINE_PER_CPU|
+                               __typeof__\(|
+                               union|
+                               struct|
+                               \.$Ident\s*=\s*|
+                               ^\"|\"$
+                       }x;
+                       #print "REST<$rest> dstat<$dstat> ctx<$ctx>\n";
+                       if ($rest ne '' && $rest ne ',') {
+                               if ($rest !~ /while\s*\(/ &&
+                                   $dstat !~ /$exceptions/)
+                               {
+                                       ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE",
+                                             "Macros with multiple statements should be enclosed in a do - while loop\n" . "$here\n$ctx\n");
+                               }
+
+                       } elsif ($ctx !~ /;/) {
+                               if ($dstat ne '' &&
+                                   $dstat !~ /^(?:$Ident|-?$Constant)$/ &&
+                                   $dstat !~ /$exceptions/ &&
+                                   $dstat !~ /^\.$Ident\s*=/ &&
+                                   $dstat =~ /$Operators/)
+                               {
+                                       ERROR("COMPLEX_MACRO",
+                                             "Macros with complex values should be enclosed in parenthesis\n" . "$here\n$ctx\n");
+                               }
+                       }
+               }
+
+# make sure symbols are always wrapped with VMLINUX_SYMBOL() ...
+# all assignments may have only one of the following with an assignment:
+#      .
+#      ALIGN(...)
+#      VMLINUX_SYMBOL(...)
+               if ($realfile eq 'vmlinux.lds.h' && $line =~ /(?:(?:^|\s)$Ident\s*=|=\s*$Ident(?:\s|$))/) {
+                       WARN("MISSING_VMLINUX_SYMBOL",
+                            "vmlinux.lds.h needs VMLINUX_SYMBOL() around C-visible symbols\n" . $herecurr);
+               }
+
+# check for redundant bracing round if etc
+               if ($line =~ /(^.*)\bif\b/ && $1 !~ /else\s*$/) {
+                       my ($level, $endln, @chunks) =
+                               ctx_statement_full($linenr, $realcnt, 1);
+                       #print "chunks<$#chunks> linenr<$linenr> endln<$endln> level<$level>\n";
+                       #print "APW: <<$chunks[1][0]>><<$chunks[1][1]>>\n";
+                       if ($#chunks > 0 && $level == 0) {
+                               my $allowed = 0;
+                               my $seen = 0;
+                               my $herectx = $here . "\n";
+                               my $ln = $linenr - 1;
+                               for my $chunk (@chunks) {
+                                       my ($cond, $block) = @{$chunk};
+
+                                       # If the condition carries leading newlines, then count those as offsets.
+                                       my ($whitespace) = ($cond =~ /^((?:\s*\n[+-])*\s*)/s);
+                                       my $offset = statement_rawlines($whitespace) - 1;
+
+                                       #print "COND<$cond> whitespace<$whitespace> offset<$offset>\n";
+
+                                       # We have looked at and allowed this specific line.
+                                       $suppress_ifbraces{$ln + $offset} = 1;
+
+                                       $herectx .= "$rawlines[$ln + $offset]\n[...]\n";
+                                       $ln += statement_rawlines($block) - 1;
+
+                                       substr($block, 0, length($cond), '');
+
+                                       $seen++ if ($block =~ /^\s*{/);
+
+                                       #print "cond<$cond> block<$block> allowed<$allowed>\n";
+                                       if (statement_lines($cond) > 1) {
+                                               #print "APW: ALLOWED: cond<$cond>\n";
+                                               $allowed = 1;
+                                       }
+                                       if ($block =~/\b(?:if|for|while)\b/) {
+                                               #print "APW: ALLOWED: block<$block>\n";
+                                               $allowed = 1;
+                                       }
+                                       if (statement_block_size($block) > 1) {
+                                               #print "APW: ALLOWED: lines block<$block>\n";
+                                               $allowed = 1;
+                                       }
+                               }
+                               if ($seen && !$allowed) {
+                                       WARN("BRACES",
+                                            "braces {} are not necessary for any arm of this statement\n" . $herectx);
+                               }
+                       }
+               }
+               if (!defined $suppress_ifbraces{$linenr - 1} &&
+                                       $line =~ /\b(if|while|for|else)\b/) {
+                       my $allowed = 0;
+
+                       # Check the pre-context.
+                       if (substr($line, 0, $-[0]) =~ /(\}\s*)$/) {
+                               #print "APW: ALLOWED: pre<$1>\n";
+                               $allowed = 1;
+                       }
+
+                       my ($level, $endln, @chunks) =
+                               ctx_statement_full($linenr, $realcnt, $-[0]);
+
+                       # Check the condition.
+                       my ($cond, $block) = @{$chunks[0]};
+                       #print "CHECKING<$linenr> cond<$cond> block<$block>\n";
+                       if (defined $cond) {
+                               substr($block, 0, length($cond), '');
+                       }
+                       if (statement_lines($cond) > 1) {
+                               #print "APW: ALLOWED: cond<$cond>\n";
+                               $allowed = 1;
+                       }
+                       if ($block =~/\b(?:if|for|while)\b/) {
+                               #print "APW: ALLOWED: block<$block>\n";
+                               $allowed = 1;
+                       }
+                       if (statement_block_size($block) > 1) {
+                               #print "APW: ALLOWED: lines block<$block>\n";
+                               $allowed = 1;
+                       }
+                       # Check the post-context.
+                       if (defined $chunks[1]) {
+                               my ($cond, $block) = @{$chunks[1]};
+                               if (defined $cond) {
+                                       substr($block, 0, length($cond), '');
+                               }
+                               if ($block =~ /^\s*\{/) {
+                                       #print "APW: ALLOWED: chunk-1 block<$block>\n";
+                                       $allowed = 1;
+                               }
+                       }
+                       if ($level == 0 && $block =~ /^\s*\{/ && !$allowed) {
+                               my $herectx = $here . "\n";;
+                               my $cnt = statement_rawlines($block);
+
+                               for (my $n = 0; $n < $cnt; $n++) {
+                                       $herectx .= raw_line($linenr, $n) . "\n";;
+                               }
+
+                               WARN("BRACES",
+                                    "braces {} are not necessary for single statement blocks\n" . $herectx);
+                       }
+               }
+
+# don't include deprecated include files (uses RAW line)
+               for my $inc (@dep_includes) {
+                       if ($rawline =~ m@^.\s*\#\s*include\s*\<$inc>@) {
+                               ERROR("DEPRECATED_INCLUDE",
+                                     "Don't use <$inc>: see Documentation/feature-removal-schedule.txt\n" . $herecurr);
+                       }
+               }
+
+# don't use deprecated functions
+               for my $func (@dep_functions) {
+                       if ($line =~ /\b$func\b/) {
+                               ERROR("DEPRECATED_FUNCTION",
+                                     "Don't use $func(): see Documentation/feature-removal-schedule.txt\n" . $herecurr);
+                       }
+               }
+
+# no volatiles please
+               my $asm_volatile = qr{\b(__asm__|asm)\s+(__volatile__|volatile)\b};
+               if ($line =~ /\bvolatile\b/ && $line !~ /$asm_volatile/) {
+                       WARN("VOLATILE",
+                            "Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt\n" . $herecurr);
+               }
+
+# warn about #if 0
+               if ($line =~ /^.\s*\#\s*if\s+0\b/) {
+                       CHK("REDUNDANT_CODE",
+                           "if this code is redundant consider removing it\n" .
+                               $herecurr);
+               }
+
+# check for needless kfree() checks
+               if ($prevline =~ /\bif\s*\(([^\)]*)\)/) {
+                       my $expr = $1;
+                       if ($line =~ /\bkfree\(\Q$expr\E\);/) {
+                               WARN("NEEDLESS_KFREE",
+                                    "kfree(NULL) is safe this check is probably not required\n" . $hereprev);
+                       }
+               }
+# check for needless usb_free_urb() checks
+               if ($prevline =~ /\bif\s*\(([^\)]*)\)/) {
+                       my $expr = $1;
+                       if ($line =~ /\busb_free_urb\(\Q$expr\E\);/) {
+                               WARN("NEEDLESS_USB_FREE_URB",
+                                    "usb_free_urb(NULL) is safe this check is probably not required\n" . $hereprev);
+                       }
+               }
+
+# prefer usleep_range over udelay
+               if ($line =~ /\budelay\s*\(\s*(\w+)\s*\)/) {
+                       # ignore udelay's < 10, however
+                       if (! (($1 =~ /(\d+)/) && ($1 < 10)) ) {
+                               CHK("USLEEP_RANGE",
+                                   "usleep_range is preferred over udelay; see Documentation/timers/timers-howto.txt\n" . $line);
+                       }
+               }
+
+# warn about unexpectedly long msleep's
+               if ($line =~ /\bmsleep\s*\((\d+)\);/) {
+                       if ($1 < 20) {
+                               WARN("MSLEEP",
+                                    "msleep < 20ms can sleep for up to 20ms; see Documentation/timers/timers-howto.txt\n" . $line);
+                       }
+               }
+
+# warn about #ifdefs in C files
+#              if ($line =~ /^.\s*\#\s*if(|n)def/ && ($realfile =~ /\.c$/)) {
+#                      print "#ifdef in C files should be avoided\n";
+#                      print "$herecurr";
+#                      $clean = 0;
+#              }
+
+# warn about spacing in #ifdefs
+               if ($line =~ /^.\s*\#\s*(ifdef|ifndef|elif)\s\s+/) {
+                       ERROR("SPACING",
+                             "exactly one space required after that #$1\n" . $herecurr);
+               }
+
+# check for spinlock_t definitions without a comment.
+               if ($line =~ /^.\s*(struct\s+mutex|spinlock_t)\s+\S+;/ ||
+                   $line =~ /^.\s*(DEFINE_MUTEX)\s*\(/) {
+                       my $which = $1;
+                       if (!ctx_has_comment($first_line, $linenr)) {
+                               CHK("UNCOMMENTED_DEFINITION",
+                                   "$1 definition without comment\n" . $herecurr);
+                       }
+               }
+# check for memory barriers without a comment.
+               if ($line =~ /\b(mb|rmb|wmb|read_barrier_depends|smp_mb|smp_rmb|smp_wmb|smp_read_barrier_depends)\(/) {
+                       if (!ctx_has_comment($first_line, $linenr)) {
+                               CHK("MEMORY_BARRIER",
+                                   "memory barrier without comment\n" . $herecurr);
+                       }
+               }
+# check of hardware specific defines
+               if ($line =~ m@^.\s*\#\s*if.*\b(__i386__|__powerpc64__|__sun__|__s390x__)\b@ && $realfile !~ m@include/asm-@) {
+                       CHK("ARCH_DEFINES",
+                           "architecture specific defines should be avoided\n" .  $herecurr);
+               }
+
+# Check that the storage class is at the beginning of a declaration
+               if ($line =~ /\b$Storage\b/ && $line !~ /^.\s*$Storage\b/) {
+                       WARN("STORAGE_CLASS",
+                            "storage class should be at the beginning of the declaration\n" . $herecurr)
+               }
+
+# check the location of the inline attribute, that it is between
+# storage class and type.
+               if ($line =~ /\b$Type\s+$Inline\b/ ||
+                   $line =~ /\b$Inline\s+$Storage\b/) {
+                       ERROR("INLINE_LOCATION",
+                             "inline keyword should sit between storage class and type\n" . $herecurr);
+               }
+
+# Check for __inline__ and __inline, prefer inline
+               if ($line =~ /\b(__inline__|__inline)\b/) {
+                       WARN("INLINE",
+                            "plain inline is preferred over $1\n" . $herecurr);
+               }
+
+# Check for __attribute__ packed, prefer __packed
+               if ($line =~ /\b__attribute__\s*\(\s*\(.*\bpacked\b/) {
+                       WARN("PREFER_PACKED",
+                            "__packed is preferred over __attribute__((packed))\n" . $herecurr);
+               }
+
+# Check for __attribute__ aligned, prefer __aligned
+               if ($line =~ /\b__attribute__\s*\(\s*\(.*aligned/) {
+                       WARN("PREFER_ALIGNED",
+                            "__aligned(size) is preferred over __attribute__((aligned(size)))\n" . $herecurr);
+               }
+
+# check for sizeof(&)
+               if ($line =~ /\bsizeof\s*\(\s*\&/) {
+                       WARN("SIZEOF_ADDRESS",
+                            "sizeof(& should be avoided\n" . $herecurr);
+               }
+
+# check for line continuations in quoted strings with odd counts of "
+               if ($rawline =~ /\\$/ && $rawline =~ tr/"/"/ % 2) {
+                       WARN("LINE_CONTINUATIONS",
+                            "Avoid line continuations in quoted strings\n" . $herecurr);
+               }
+
+# check for new externs in .c files.
+               if ($realfile =~ /\.c$/ && defined $stat &&
+                   $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s)
+               {
+                       my $function_name = $1;
+                       my $paren_space = $2;
+
+                       my $s = $stat;
+                       if (defined $cond) {
+                               substr($s, 0, length($cond), '');
+                       }
+                       if ($s =~ /^\s*;/ &&
+                           $function_name ne 'uninitialized_var')
+                       {
+                               WARN("AVOID_EXTERNS",
+                                    "externs should be avoided in .c files\n" .  $herecurr);
+                       }
+
+                       if ($paren_space =~ /\n/) {
+                               WARN("FUNCTION_ARGUMENTS",
+                                    "arguments for function declarations should follow identifier\n" . $herecurr);
+                       }
+
+               } elsif ($realfile =~ /\.c$/ && defined $stat &&
+                   $stat =~ /^.\s*extern\s+/)
+               {
+                       WARN("AVOID_EXTERNS",
+                            "externs should be avoided in .c files\n" .  $herecurr);
+               }
+
+# checks for new __setup's
+               if ($rawline =~ /\b__setup\("([^"]*)"/) {
+                       my $name = $1;
+
+                       if (!grep(/$name/, @setup_docs)) {
+                               CHK("UNDOCUMENTED_SETUP",
+                                   "__setup appears un-documented -- check Documentation/kernel-parameters.txt\n" . $herecurr);
+                       }
+               }
+
+# check for pointless casting of kmalloc return
+               if ($line =~ /\*\s*\)\s*[kv][czm]alloc(_node){0,1}\b/) {
+                       WARN("UNNECESSARY_CASTS",
+                            "unnecessary cast may hide bugs, see http://c-faq.com/malloc/mallocnocast.html\n" . $herecurr);
+               }
+
+# check for multiple semicolons
+               if ($line =~ /;\s*;\s*$/) {
+                   WARN("ONE_SEMICOLON",
+                        "Statements terminations use 1 semicolon\n" . $herecurr);
+               }
+
+# check for gcc specific __FUNCTION__
+               if ($line =~ /__FUNCTION__/) {
+                       WARN("USE_FUNC",
+                            "__func__ should be used instead of gcc specific __FUNCTION__\n"  . $herecurr);
+               }
+
+# check for semaphores initialized locked
+               if ($line =~ /^.\s*sema_init.+,\W?0\W?\)/) {
+                       WARN("CONSIDER_COMPLETION",
+                            "consider using a completion\n" . $herecurr);
+
+               }
+# recommend kstrto* over simple_strto*
+               if ($line =~ /\bsimple_(strto.*?)\s*\(/) {
+                       WARN("CONSIDER_KSTRTO",
+                            "consider using kstrto* in preference to simple_$1\n" . $herecurr);
+               }
+# check for __initcall(), use device_initcall() explicitly please
+               if ($line =~ /^.\s*__initcall\s*\(/) {
+                       WARN("USE_DEVICE_INITCALL",
+                            "please use device_initcall() instead of __initcall()\n" . $herecurr);
+               }
+# check for various ops structs, ensure they are const.
+               my $struct_ops = qr{acpi_dock_ops|
+                               address_space_operations|
+                               backlight_ops|
+                               block_device_operations|
+                               dentry_operations|
+                               dev_pm_ops|
+                               dma_map_ops|
+                               extent_io_ops|
+                               file_lock_operations|
+                               file_operations|
+                               hv_ops|
+                               ide_dma_ops|
+                               intel_dvo_dev_ops|
+                               item_operations|
+                               iwl_ops|
+                               kgdb_arch|
+                               kgdb_io|
+                               kset_uevent_ops|
+                               lock_manager_operations|
+                               microcode_ops|
+                               mtrr_ops|
+                               neigh_ops|
+                               nlmsvc_binding|
+                               pci_raw_ops|
+                               pipe_buf_operations|
+                               platform_hibernation_ops|
+                               platform_suspend_ops|
+                               proto_ops|
+                               rpc_pipe_ops|
+                               seq_operations|
+                               snd_ac97_build_ops|
+                               soc_pcmcia_socket_ops|
+                               stacktrace_ops|
+                               sysfs_ops|
+                               tty_operations|
+                               usb_mon_operations|
+                               wd_ops}x;
+               if ($line !~ /\bconst\b/ &&
+                   $line =~ /\bstruct\s+($struct_ops)\b/) {
+                       WARN("CONST_STRUCT",
+                            "struct $1 should normally be const\n" .
+                               $herecurr);
+               }
+
+# use of NR_CPUS is usually wrong
+# ignore definitions of NR_CPUS and usage to define arrays as likely right
+               if ($line =~ /\bNR_CPUS\b/ &&
+                   $line !~ /^.\s*\s*#\s*if\b.*\bNR_CPUS\b/ &&
+                   $line !~ /^.\s*\s*#\s*define\b.*\bNR_CPUS\b/ &&
+                   $line !~ /^.\s*$Declare\s.*\[[^\]]*NR_CPUS[^\]]*\]/ &&
+                   $line !~ /\[[^\]]*\.\.\.[^\]]*NR_CPUS[^\]]*\]/ &&
+                   $line !~ /\[[^\]]*NR_CPUS[^\]]*\.\.\.[^\]]*\]/)
+               {
+                       WARN("NR_CPUS",
+                            "usage of NR_CPUS is often wrong - consider using cpu_possible(), num_possible_cpus(), for_each_possible_cpu(), etc\n" . $herecurr);
+               }
+
+# check for %L{u,d,i} in strings
+               my $string;
+               while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) {
+                       $string = substr($rawline, $-[1], $+[1] - $-[1]);
+                       $string =~ s/%%/__/g;
+                       if ($string =~ /(?<!%)%L[udi]/) {
+                               WARN("PRINTF_L",
+                                    "\%Ld/%Lu are not-standard C, use %lld/%llu\n" . $herecurr);
+                               last;
+                       }
+               }
+
+# whine mightly about in_atomic
+               if ($line =~ /\bin_atomic\s*\(/) {
+                       if ($realfile =~ m@^drivers/@) {
+                               ERROR("IN_ATOMIC",
+                                     "do not use in_atomic in drivers\n" . $herecurr);
+                       } elsif ($realfile !~ m@^kernel/@) {
+                               WARN("IN_ATOMIC",
+                                    "use of in_atomic() is incorrect outside core kernel code\n" . $herecurr);
+                       }
+               }
+
+# check for lockdep_set_novalidate_class
+               if ($line =~ /^.\s*lockdep_set_novalidate_class\s*\(/ ||
+                   $line =~ /__lockdep_no_validate__\s*\)/ ) {
+                       if ($realfile !~ m@^kernel/lockdep@ &&
+                           $realfile !~ m@^include/linux/lockdep@ &&
+                           $realfile !~ m@^drivers/base/core@) {
+                               ERROR("LOCKDEP",
+                                     "lockdep_no_validate class is reserved for device->mutex.\n" . $herecurr);
+                       }
+               }
+
+               if ($line =~ /debugfs_create_file.*S_IWUGO/ ||
+                   $line =~ /DEVICE_ATTR.*S_IWUGO/ ) {
+                       WARN("EXPORTED_WORLD_WRITABLE",
+                            "Exporting world writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr);
+               }
+
+               # Check for memset with swapped arguments
+               if ($line =~ /memset.*\,(\ |)(0x|)0(\ |0|)\);/) {
+                       ERROR("MEMSET",
+                             "memset size is 3rd argument, not the second.\n" . $herecurr);
+               }
+       }
+
+       # If we have no input at all, then there is nothing to report on
+       # so just keep quiet.
+       if ($#rawlines == -1) {
+               exit(0);
+       }
+
+       # In mailback mode only produce a report in the negative, for
+       # things that appear to be patches.
+       if ($mailback && ($clean == 1 || !$is_patch)) {
+               exit(0);
+       }
+
+       # This is not a patch, and we are are in 'no-patch' mode so
+       # just keep quiet.
+       if (!$chk_patch && !$is_patch) {
+               exit(0);
+       }
+
+       if (!$is_patch) {
+               ERROR("NOT_UNIFIED_DIFF",
+                     "Does not appear to be a unified-diff format patch\n");
+       }
+       if ($is_patch && $chk_signoff && $signoff == 0) {
+               ERROR("MISSING_SIGN_OFF",
+                     "Missing Signed-off-by: line(s)\n");
+       }
+
+       print report_dump();
+       if ($summary && !($clean == 1 && $quiet == 1)) {
+               print "$filename " if ($summary_file);
+               print "total: $cnt_error errors, $cnt_warn warnings, " .
+                       (($check)? "$cnt_chk checks, " : "") .
+                       "$cnt_lines lines checked\n";
+               print "\n" if ($quiet == 0);
+       }
+
+       if ($quiet == 0) {
+               # If there were whitespace errors which cleanpatch can fix
+               # then suggest that.
+               if ($rpt_cleaners) {
+                       print "NOTE: whitespace errors detected, you may wish to use scripts/cleanpatch or\n";
+                       print "      scripts/cleanfile\n\n";
+                       $rpt_cleaners = 0;
+               }
+       }
+
+       if (keys %ignore_type) {
+           print "NOTE: Ignored message types:";
+           foreach my $ignore (sort keys %ignore_type) {
+               print " $ignore";
+           }
+           print "\n";
+           print "\n" if ($quiet == 0);
+       }
+
+       if ($clean == 1 && $quiet == 0) {
+               print "$vname has no obvious style problems and is ready for submission.\n"
+       }
+       if ($clean == 0 && $quiet == 0) {
+               print << "EOM";
+$vname has style problems, please review.
+
+If any of these errors are false positives, please report
+them to the maintainer, see CHECKPATCH in MAINTAINERS.
+EOM
+       }
+
+       return $clean;
+}
index 6ea3b462cdd76e40ccc1df3fa2cff04606e373c6..e9d072975bb8b330d5868699e73f11f18376ca95 100644 (file)
@@ -35,7 +35,8 @@ static image_header_t header;
 
 static int image_check_image_types(uint8_t type)
 {
-       if ((type > IH_TYPE_INVALID) && (type < IH_TYPE_FLATDT))
+       if (((type > IH_TYPE_INVALID) && (type < IH_TYPE_FLATDT)) ||
+           (type == IH_TYPE_KERNEL_NOLOAD))
                return EXIT_SUCCESS;
        else
                return EXIT_FAILURE;
index 2f7a59c00b959a04a8f28d64b1d5b662b26dd849..28b73da4ad66cef05c0ed8ace43a379457ce360f 100644 (file)
@@ -23,7 +23,7 @@
 
 include $(TOPDIR)/config.mk
 
-HOSTSRCS := $(obj)crc32.c  fw_env.c  fw_env_main.c
+HOSTSRCS := $(SRCTREE)/lib/crc32.c  fw_env.c  fw_env_main.c
 HEADERS        := fw_env.h
 
 # Compile for a hosted environment on the target
@@ -43,10 +43,7 @@ $(obj)fw_printenv:   $(HOSTSRCS) $(HEADERS)
        $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTLDFLAGS) -o $@ $(HOSTSRCS)
 
 clean:
-       rm -f $(obj)fw_printenv $(obj)crc32.c
-
-$(obj)crc32.c:
-       ln -s $(src)../../lib/crc32.c $(obj)crc32.c
+       rm -f $(obj)fw_printenv
 
 #########################################################################
 
index feebbabea0be822abe514340404a1fca9da9d468..51e3f54a38aaf7f0612c00d0a694854645ada0d6 100644 (file)
 #define ENV_SIZE (CONFIG_ENV_SIZE - ENV_HEADER_SIZE)
 
 
-extern uint32_t crc32 (uint32_t, const unsigned char *, unsigned int);
-
 #ifdef CONFIG_BUILD_ENVCRC
+# include <environment.h>
 extern unsigned int env_size;
-extern unsigned char environment;
+extern env_t environment;
 #endif /* CONFIG_BUILD_ENVCRC */
 
+extern uint32_t crc32 (uint32_t, const unsigned char *, unsigned int);
+
 int main (int argc, char **argv)
 {
 #ifdef CONFIG_BUILD_ENVCRC
        unsigned char pad = 0x00;
        uint32_t crc;
-       unsigned char *envptr = &environment,
+       unsigned char *envptr = (unsigned char *)&environment,
                *dataptr = envptr + ENV_HEADER_SIZE;
        unsigned int datasize = ENV_SIZE;
        unsigned int eoe;
diff --git a/tools/mkenvimage.c b/tools/mkenvimage.c
new file mode 100644 (file)
index 0000000..9c32f4a
--- /dev/null
@@ -0,0 +1,270 @@
+/*
+ * (C) Copyright 2011 Free Electrons
+ * David Wagner <david.wagner@free-electrons.com>
+ *
+ * Inspired from envcrc.c:
+ * (C) Copyright 2001
+ * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <compiler.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <u-boot/crc.h>
+
+#define CRC_SIZE sizeof(uint32_t)
+
+static void usage(const char *exec_name)
+{
+       fprintf(stderr, "%s [-h] [-r] [-b] [-p <byte>] "
+              "-s <environment partition size> -o <output> <input file>\n"
+              "\n"
+              "This tool takes a key=value input file (same as would a "
+              "`printenv' show) and generates the corresponding environment "
+              "image, ready to be flashed.\n"
+              "\n"
+              "\tThe input file is in format:\n"
+              "\t\tkey1=value1\n"
+              "\t\tkey2=value2\n"
+              "\t\t...\n"
+              "\t-r : the environment has multiple copies in flash\n"
+              "\t-b : the target is big endian (default is little endian)\n"
+              "\t-p <byte> : fill the image with <byte> bytes instead of "
+              "0xff bytes\n"
+              "\n"
+              "If the input file is \"-\", data is read from standard input\n",
+              exec_name);
+}
+
+int main(int argc, char **argv)
+{
+       uint32_t crc, targetendian_crc;
+       const char *txt_filename = NULL, *bin_filename = NULL;
+       int txt_fd, bin_fd;
+       unsigned char *dataptr, *envptr;
+       unsigned char *filebuf = NULL;
+       unsigned int filesize = 0, envsize = 0, datasize = 0;
+       int bigendian = 0;
+       int redundant = 0;
+       unsigned char padbyte = 0xff;
+
+       int option;
+       int ret = EXIT_SUCCESS;
+
+       struct stat txt_file_stat;
+
+       int fp, ep;
+
+       /* Parse the cmdline */
+       while ((option = getopt(argc, argv, "s:o:rbp:h")) != -1) {
+               switch (option) {
+               case 's':
+                       datasize = strtol(optarg, NULL, 0);
+                       break;
+               case 'o':
+                       bin_filename = strdup(optarg);
+                       if (!bin_filename) {
+                               fprintf(stderr, "Can't strdup() the output "
+                                               "filename\n");
+                               return EXIT_FAILURE;
+                       }
+                       break;
+               case 'r':
+                       redundant = 1;
+                       break;
+               case 'b':
+                       bigendian = 1;
+                       break;
+               case 'p':
+                       padbyte = strtol(optarg, NULL, 0);
+                       break;
+               case 'h':
+                       usage(argv[0]);
+                       return EXIT_SUCCESS;
+               default:
+                       fprintf(stderr, "Wrong option -%c\n", option);
+                       usage(argv[0]);
+                       return EXIT_FAILURE;
+               }
+       }
+
+       /* Check datasize and allocate the data */
+       if (datasize == 0) {
+               fprintf(stderr,
+                       "Please specify the size of the envrionnment "
+                       "partition.\n");
+               usage(argv[0]);
+               return EXIT_FAILURE;
+       }
+
+       dataptr = malloc(datasize * sizeof(*dataptr));
+       if (!dataptr) {
+               fprintf(stderr, "Can't alloc dataptr.\n");
+               return EXIT_FAILURE;
+       }
+
+       /*
+        * envptr points to the beginning of the actual environment (after the
+        * crc and possible `redundant' bit
+        */
+       envsize = datasize - (CRC_SIZE + redundant);
+       envptr = dataptr + CRC_SIZE + redundant;
+
+       /* Pad the environment with the padding byte */
+       memset(envptr, padbyte, envsize);
+
+       /* Open the input file ... */
+       if (optind >= argc) {
+               fprintf(stderr, "Please specify an input filename\n");
+               return EXIT_FAILURE;
+       }
+
+       txt_filename = argv[optind];
+       if (strcmp(txt_filename, "-") == 0) {
+               int readbytes = 0;
+               int readlen = sizeof(*envptr) * 2048;
+               txt_fd = STDIN_FILENO;
+
+               do {
+                       filebuf = realloc(filebuf, readlen);
+                       readbytes = read(txt_fd, filebuf + filesize, readlen);
+                       filesize += readbytes;
+               } while (readbytes == readlen);
+
+       } else {
+               txt_fd = open(txt_filename, O_RDONLY);
+               if (txt_fd == -1) {
+                       fprintf(stderr, "Can't open \"%s\": %s\n",
+                                       txt_filename, strerror(errno));
+                       return EXIT_FAILURE;
+               }
+               /* ... and check it */
+               ret = fstat(txt_fd, &txt_file_stat);
+               if (ret == -1) {
+                       fprintf(stderr, "Can't stat() on \"%s\": "
+                                       "%s\n", txt_filename, strerror(errno));
+                       return EXIT_FAILURE;
+               }
+
+               filesize = txt_file_stat.st_size;
+               /* Read the raw input file and transform it */
+               filebuf = malloc(sizeof(*envptr) * filesize);
+               ret = read(txt_fd, filebuf, sizeof(*envptr) * filesize);
+               if (ret != sizeof(*envptr) * filesize) {
+                       fprintf(stderr, "Can't read the whole input file\n");
+                       return EXIT_FAILURE;
+               }
+               ret = close(txt_fd);
+       }
+       /*
+        * The right test to do is "=>" (not ">") because of the additionnal
+        * ending \0. See below.
+        */
+       if (filesize >= envsize) {
+               fprintf(stderr, "The input file is larger than the "
+                               "envrionnment partition size\n");
+               return EXIT_FAILURE;
+       }
+
+       /* Replace newlines separating variables with \0 */
+       for (fp = 0, ep = 0 ; fp < filesize ; fp++) {
+               if (filebuf[fp] == '\n') {
+                       if (fp == 0) {
+                               /*
+                                * Newline at the beggining of the file ?
+                                * Ignore it.
+                                */
+                               continue;
+                       } else if (filebuf[fp-1] == '\\') {
+                               /*
+                                * Embedded newline in a variable.
+                                *
+                                * The backslash was added to the envptr ;
+                                * rewind and replace it with a newline
+                                */
+                               ep--;
+                               envptr[ep++] = '\n';
+                       } else {
+                               /* End of a variable */
+                               envptr[ep++] = '\0';
+                       }
+               } else if (filebuf[fp] == '#') {
+                       if (fp != 0 && filebuf[fp-1] == '\n') {
+                               /* This line is a comment, let's skip it */
+                               while (fp < txt_file_stat.st_size && fp++ &&
+                                      filebuf[fp] != '\n');
+                       } else {
+                               envptr[ep++] = filebuf[fp];
+                       }
+               } else {
+                       envptr[ep++] = filebuf[fp];
+               }
+       }
+       /*
+        * Make sure there is a final '\0'
+        * And do it again on the next byte to mark the end of the environment.
+        */
+       if (envptr[ep-1] != '\0') {
+               envptr[ep++] = '\0';
+               /*
+                * The text file doesn't have an ending newline.  We need to
+                * check the env size again to make sure we have room for two \0
+                */
+               if (ep >= envsize) {
+                       fprintf(stderr, "The environment file is too large for "
+                                       "the target environment storage\n");
+                       return EXIT_FAILURE;
+               }
+               envptr[ep] = '\0';
+       } else {
+               envptr[ep] = '\0';
+       }
+
+       /* Computes the CRC and put it at the beginning of the data */
+       crc = crc32(0, envptr, envsize);
+       targetendian_crc = bigendian ? cpu_to_be32(crc) : cpu_to_le32(crc);
+
+       memcpy(dataptr, &targetendian_crc, sizeof(uint32_t));
+
+       bin_fd = creat(bin_filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+       if (bin_fd == -1) {
+               fprintf(stderr, "Can't open output file \"%s\": %s\n",
+                               bin_filename, strerror(errno));
+               return EXIT_FAILURE;
+       }
+
+       if (write(bin_fd, dataptr, sizeof(*dataptr) * datasize) !=
+                       sizeof(*dataptr) * datasize) {
+               fprintf(stderr, "write() failed: %s\n", strerror(errno));
+               return EXIT_FAILURE;
+       }
+
+       ret = close(bin_fd);
+
+       return ret;
+}
diff --git a/tools/mxsboot.c b/tools/mxsboot.c
new file mode 100644 (file)
index 0000000..176753d
--- /dev/null
@@ -0,0 +1,684 @@
+/*
+ * Freescale i.MX28 image generator
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "compiler.h"
+
+/*
+ * Default BCB layout.
+ *
+ * TWEAK this if you have blown any OCOTP fuses.
+ */
+#define        STRIDE_PAGES            64
+#define        STRIDE_COUNT            4
+
+/*
+ * Layout for 256Mb big NAND with 2048b page size, 64b OOB size and
+ * 128kb erase size.
+ *
+ * TWEAK this if you have different kind of NAND chip.
+ */
+uint32_t nand_writesize = 2048;
+uint32_t nand_oobsize = 64;
+uint32_t nand_erasesize = 128 * 1024;
+
+/*
+ * Sector on which the SigmaTel boot partition (0x53) starts.
+ */
+uint32_t sd_sector = 2048;
+
+/*
+ * Each of the U-Boot bootstreams is at maximum 1MB big.
+ *
+ * TWEAK this if, for some wild reason, you need to boot bigger image.
+ */
+#define        MAX_BOOTSTREAM_SIZE     (1 * 1024 * 1024)
+
+/* i.MX28 NAND controller-specific constants. DO NOT TWEAK! */
+#define        MXS_NAND_DMA_DESCRIPTOR_COUNT           4
+#define        MXS_NAND_CHUNK_DATA_CHUNK_SIZE          512
+#define        MXS_NAND_METADATA_SIZE                  10
+#define        MXS_NAND_COMMAND_BUFFER_SIZE            32
+
+struct mx28_nand_fcb {
+       uint32_t                checksum;
+       uint32_t                fingerprint;
+       uint32_t                version;
+       struct {
+               uint8_t                 data_setup;
+               uint8_t                 data_hold;
+               uint8_t                 address_setup;
+               uint8_t                 dsample_time;
+               uint8_t                 nand_timing_state;
+               uint8_t                 rea;
+               uint8_t                 rloh;
+               uint8_t                 rhoh;
+       }                       timing;
+       uint32_t                page_data_size;
+       uint32_t                total_page_size;
+       uint32_t                sectors_per_block;
+       uint32_t                number_of_nands;                /* Ignored */
+       uint32_t                total_internal_die;             /* Ignored */
+       uint32_t                cell_type;                      /* Ignored */
+       uint32_t                ecc_block_n_ecc_type;
+       uint32_t                ecc_block_0_size;
+       uint32_t                ecc_block_n_size;
+       uint32_t                ecc_block_0_ecc_type;
+       uint32_t                metadata_bytes;
+       uint32_t                num_ecc_blocks_per_page;
+       uint32_t                ecc_block_n_ecc_level_sdk;      /* Ignored */
+       uint32_t                ecc_block_0_size_sdk;           /* Ignored */
+       uint32_t                ecc_block_n_size_sdk;           /* Ignored */
+       uint32_t                ecc_block_0_ecc_level_sdk;      /* Ignored */
+       uint32_t                num_ecc_blocks_per_page_sdk;    /* Ignored */
+       uint32_t                metadata_bytes_sdk;             /* Ignored */
+       uint32_t                erase_threshold;
+       uint32_t                boot_patch;
+       uint32_t                patch_sectors;
+       uint32_t                firmware1_starting_sector;
+       uint32_t                firmware2_starting_sector;
+       uint32_t                sectors_in_firmware1;
+       uint32_t                sectors_in_firmware2;
+       uint32_t                dbbt_search_area_start_address;
+       uint32_t                badblock_marker_byte;
+       uint32_t                badblock_marker_start_bit;
+       uint32_t                bb_marker_physical_offset;
+};
+
+struct mx28_nand_dbbt {
+       uint32_t                checksum;
+       uint32_t                fingerprint;
+       uint32_t                version;
+       uint32_t                number_bb;
+       uint32_t                number_2k_pages_bb;
+};
+
+struct mx28_nand_bbt {
+       uint32_t                nand;
+       uint32_t                number_bb;
+       uint32_t                badblock[510];
+};
+
+struct mx28_sd_drive_info {
+       uint32_t                chip_num;
+       uint32_t                drive_type;
+       uint32_t                tag;
+       uint32_t                first_sector_number;
+       uint32_t                sector_count;
+};
+
+struct mx28_sd_config_block {
+       uint32_t                        signature;
+       uint32_t                        primary_boot_tag;
+       uint32_t                        secondary_boot_tag;
+       uint32_t                        num_copies;
+       struct mx28_sd_drive_info       drv_info[1];
+};
+
+static inline uint32_t mx28_nand_ecc_size_in_bits(uint32_t ecc_strength)
+{
+       return ecc_strength * 13;
+}
+
+static inline uint32_t mx28_nand_get_ecc_strength(uint32_t page_data_size,
+                                               uint32_t page_oob_size)
+{
+       if (page_data_size == 2048)
+               return 8;
+
+       if (page_data_size == 4096) {
+               if (page_oob_size == 128)
+                       return 8;
+
+               if (page_oob_size == 218)
+                       return 16;
+       }
+
+       return 0;
+}
+
+static inline uint32_t mx28_nand_get_mark_offset(uint32_t page_data_size,
+                                               uint32_t ecc_strength)
+{
+       uint32_t chunk_data_size_in_bits;
+       uint32_t chunk_ecc_size_in_bits;
+       uint32_t chunk_total_size_in_bits;
+       uint32_t block_mark_chunk_number;
+       uint32_t block_mark_chunk_bit_offset;
+       uint32_t block_mark_bit_offset;
+
+       chunk_data_size_in_bits = MXS_NAND_CHUNK_DATA_CHUNK_SIZE * 8;
+       chunk_ecc_size_in_bits  = mx28_nand_ecc_size_in_bits(ecc_strength);
+
+       chunk_total_size_in_bits =
+                       chunk_data_size_in_bits + chunk_ecc_size_in_bits;
+
+       /* Compute the bit offset of the block mark within the physical page. */
+       block_mark_bit_offset = page_data_size * 8;
+
+       /* Subtract the metadata bits. */
+       block_mark_bit_offset -= MXS_NAND_METADATA_SIZE * 8;
+
+       /*
+        * Compute the chunk number (starting at zero) in which the block mark
+        * appears.
+        */
+       block_mark_chunk_number =
+                       block_mark_bit_offset / chunk_total_size_in_bits;
+
+       /*
+        * Compute the bit offset of the block mark within its chunk, and
+        * validate it.
+        */
+       block_mark_chunk_bit_offset = block_mark_bit_offset -
+                       (block_mark_chunk_number * chunk_total_size_in_bits);
+
+       if (block_mark_chunk_bit_offset > chunk_data_size_in_bits)
+               return 1;
+
+       /*
+        * Now that we know the chunk number in which the block mark appears,
+        * we can subtract all the ECC bits that appear before it.
+        */
+       block_mark_bit_offset -=
+               block_mark_chunk_number * chunk_ecc_size_in_bits;
+
+       return block_mark_bit_offset;
+}
+
+static inline uint32_t mx28_nand_mark_byte_offset(void)
+{
+       uint32_t ecc_strength;
+       ecc_strength = mx28_nand_get_ecc_strength(nand_writesize, nand_oobsize);
+       return mx28_nand_get_mark_offset(nand_writesize, ecc_strength) >> 3;
+}
+
+static inline uint32_t mx28_nand_mark_bit_offset(void)
+{
+       uint32_t ecc_strength;
+       ecc_strength = mx28_nand_get_ecc_strength(nand_writesize, nand_oobsize);
+       return mx28_nand_get_mark_offset(nand_writesize, ecc_strength) & 0x7;
+}
+
+static uint32_t mx28_nand_block_csum(uint8_t *block, uint32_t size)
+{
+       uint32_t csum = 0;
+       int i;
+
+       for (i = 0; i < size; i++)
+               csum += block[i];
+
+       return csum ^ 0xffffffff;
+}
+
+static struct mx28_nand_fcb *mx28_nand_get_fcb(uint32_t size)
+{
+       struct mx28_nand_fcb *fcb;
+       uint32_t bcb_size_bytes;
+       uint32_t stride_size_bytes;
+       uint32_t bootstream_size_pages;
+       uint32_t fw1_start_page;
+       uint32_t fw2_start_page;
+
+       fcb = malloc(nand_writesize);
+       if (!fcb) {
+               printf("MX28 NAND: Unable to allocate FCB\n");
+               return NULL;
+       }
+
+       memset(fcb, 0, nand_writesize);
+
+       fcb->fingerprint =                      0x20424346;
+       fcb->version =                          0x01000000;
+
+       /*
+        * FIXME: These here are default values as found in kobs-ng. We should
+        * probably retrieve the data from NAND or something.
+        */
+       fcb->timing.data_setup =                80;
+       fcb->timing.data_hold =                 60;
+       fcb->timing.address_setup =             25;
+       fcb->timing.dsample_time =              6;
+
+       fcb->page_data_size =           nand_writesize;
+       fcb->total_page_size =          nand_writesize + nand_oobsize;
+       fcb->sectors_per_block =        nand_erasesize / nand_writesize;
+
+       fcb->num_ecc_blocks_per_page =  (nand_writesize / 512) - 1;
+       fcb->ecc_block_0_size =         512;
+       fcb->ecc_block_n_size =         512;
+       fcb->metadata_bytes =           10;
+
+       if (nand_writesize == 2048) {
+               fcb->ecc_block_n_ecc_type =             4;
+               fcb->ecc_block_0_ecc_type =             4;
+       } else if (nand_writesize == 4096) {
+               if (nand_oobsize == 128) {
+                       fcb->ecc_block_n_ecc_type =     4;
+                       fcb->ecc_block_0_ecc_type =     4;
+               } else if (nand_oobsize == 218) {
+                       fcb->ecc_block_n_ecc_type =     8;
+                       fcb->ecc_block_0_ecc_type =     8;
+               }
+       }
+
+       if (fcb->ecc_block_n_ecc_type == 0) {
+               printf("MX28 NAND: Unsupported NAND geometry\n");
+               goto err;
+       }
+
+       fcb->boot_patch =                       0;
+       fcb->patch_sectors =                    0;
+
+       fcb->badblock_marker_byte =     mx28_nand_mark_byte_offset();
+       fcb->badblock_marker_start_bit = mx28_nand_mark_bit_offset();
+       fcb->bb_marker_physical_offset = nand_writesize;
+
+       stride_size_bytes = STRIDE_PAGES * nand_writesize;
+       bcb_size_bytes = stride_size_bytes * STRIDE_COUNT;
+
+       bootstream_size_pages = (size + (nand_writesize - 1)) /
+                                       nand_writesize;
+
+       fw1_start_page = 2 * bcb_size_bytes / nand_writesize;
+       fw2_start_page = (2 * bcb_size_bytes + MAX_BOOTSTREAM_SIZE) /
+                               nand_writesize;
+
+       fcb->firmware1_starting_sector =        fw1_start_page;
+       fcb->firmware2_starting_sector =        fw2_start_page;
+       fcb->sectors_in_firmware1 =             bootstream_size_pages;
+       fcb->sectors_in_firmware2 =             bootstream_size_pages;
+
+       fcb->dbbt_search_area_start_address =   STRIDE_PAGES * STRIDE_COUNT;
+
+       return fcb;
+
+err:
+       free(fcb);
+       return NULL;
+}
+
+static struct mx28_nand_dbbt *mx28_nand_get_dbbt(void)
+{
+       struct mx28_nand_dbbt *dbbt;
+
+       dbbt = malloc(nand_writesize);
+       if (!dbbt) {
+               printf("MX28 NAND: Unable to allocate DBBT\n");
+               return NULL;
+       }
+
+       memset(dbbt, 0, nand_writesize);
+
+       dbbt->fingerprint       = 0x54424244;
+       dbbt->version           = 0x1;
+
+       return dbbt;
+}
+
+static inline uint8_t mx28_nand_parity_13_8(const uint8_t b)
+{
+       uint32_t parity = 0, tmp;
+
+       tmp = ((b >> 6) ^ (b >> 5) ^ (b >> 3) ^ (b >> 2)) & 1;
+       parity |= tmp << 0;
+
+       tmp = ((b >> 7) ^ (b >> 5) ^ (b >> 4) ^ (b >> 2) ^ (b >> 1)) & 1;
+       parity |= tmp << 1;
+
+       tmp = ((b >> 7) ^ (b >> 6) ^ (b >> 5) ^ (b >> 1) ^ (b >> 0)) & 1;
+       parity |= tmp << 2;
+
+       tmp = ((b >> 7) ^ (b >> 4) ^ (b >> 3) ^ (b >> 0)) & 1;
+       parity |= tmp << 3;
+
+       tmp = ((b >> 6) ^ (b >> 4) ^ (b >> 3) ^
+               (b >> 2) ^ (b >> 1) ^ (b >> 0)) & 1;
+       parity |= tmp << 4;
+
+       return parity;
+}
+
+static uint8_t *mx28_nand_fcb_block(struct mx28_nand_fcb *fcb)
+{
+       uint8_t *block;
+       uint8_t *ecc;
+       int i;
+
+       block = malloc(nand_writesize + nand_oobsize);
+       if (!block) {
+               printf("MX28 NAND: Unable to allocate FCB block\n");
+               return NULL;
+       }
+
+       memset(block, 0, nand_writesize + nand_oobsize);
+
+       /* Update the FCB checksum */
+       fcb->checksum = mx28_nand_block_csum(((uint8_t *)fcb) + 4, 508);
+
+       /* Figure 12-11. in iMX28RM, rev. 1, says FCB is at offset 12 */
+       memcpy(block + 12, fcb, sizeof(struct mx28_nand_fcb));
+
+       /* ECC is at offset 12 + 512 */
+       ecc = block + 12 + 512;
+
+       /* Compute the ECC parity */
+       for (i = 0; i < sizeof(struct mx28_nand_fcb); i++)
+               ecc[i] = mx28_nand_parity_13_8(block[i + 12]);
+
+       return block;
+}
+
+static int mx28_nand_write_fcb(struct mx28_nand_fcb *fcb, char *buf)
+{
+       uint32_t offset;
+       uint8_t *fcbblock;
+       int ret = 0;
+       int i;
+
+       fcbblock = mx28_nand_fcb_block(fcb);
+       if (!fcbblock)
+               return -1;
+
+       for (i = 0; i < STRIDE_PAGES * STRIDE_COUNT; i += STRIDE_PAGES) {
+               offset = i * nand_writesize;
+               memcpy(buf + offset, fcbblock, nand_writesize + nand_oobsize);
+       }
+
+       free(fcbblock);
+       return ret;
+}
+
+static int mx28_nand_write_dbbt(struct mx28_nand_dbbt *dbbt, char *buf)
+{
+       uint32_t offset;
+       int i = STRIDE_PAGES * STRIDE_COUNT;
+
+       for (; i < 2 * STRIDE_PAGES * STRIDE_COUNT; i += STRIDE_PAGES) {
+               offset = i * nand_writesize;
+               memcpy(buf + offset, dbbt, sizeof(struct mx28_nand_dbbt));
+       }
+
+       return 0;
+}
+
+static int mx28_nand_write_firmware(struct mx28_nand_fcb *fcb, int infd,
+                                       char *buf)
+{
+       int ret;
+       off_t size;
+       uint32_t offset1, offset2;
+
+       size = lseek(infd, 0, SEEK_END);
+       lseek(infd, 0, SEEK_SET);
+
+       offset1 = fcb->firmware1_starting_sector * nand_writesize;
+       offset2 = fcb->firmware2_starting_sector * nand_writesize;
+
+       ret = read(infd, buf + offset1, size);
+       if (ret != size)
+               return -1;
+
+       memcpy(buf + offset2, buf + offset1, size);
+
+       return 0;
+}
+
+void usage(void)
+{
+       printf(
+               "Usage: mx28image [ops] <type> <infile> <outfile>\n"
+               "Augment BootStream file with a proper header for i.MX28 boot\n"
+               "\n"
+               "  <type>       type of image:\n"
+               "                 \"nand\" for NAND image\n"
+               "                 \"sd\" for SD image\n"
+               "  <infile>     input file, the u-boot.sb bootstream\n"
+               "  <outfile>    output file, the bootable image\n"
+               "\n");
+       printf(
+               "For NAND boot, these options are accepted:\n"
+               "  -w <size>    NAND page size\n"
+               "  -o <size>    NAND OOB size\n"
+               "  -e <size>    NAND erase size\n"
+               "\n"
+               "For SD boot, these options are accepted:\n"
+               "  -p <sector>  Sector where the SGTL partition starts\n"
+       );
+}
+
+static int mx28_create_nand_image(int infd, int outfd)
+{
+       struct mx28_nand_fcb *fcb;
+       struct mx28_nand_dbbt *dbbt;
+       int ret = -1;
+       char *buf;
+       int size;
+       ssize_t wr_size;
+
+       size = nand_writesize * 512 + 2 * MAX_BOOTSTREAM_SIZE;
+
+       buf = malloc(size);
+       if (!buf) {
+               printf("Can not allocate output buffer of %d bytes\n", size);
+               goto err0;
+       }
+
+       memset(buf, 0, size);
+
+       fcb = mx28_nand_get_fcb(MAX_BOOTSTREAM_SIZE);
+       if (!fcb) {
+               printf("Unable to compile FCB\n");
+               goto err1;
+       }
+
+       dbbt = mx28_nand_get_dbbt();
+       if (!dbbt) {
+               printf("Unable to compile DBBT\n");
+               goto err2;
+       }
+
+       ret = mx28_nand_write_fcb(fcb, buf);
+       if (ret) {
+               printf("Unable to write FCB to buffer\n");
+               goto err3;
+       }
+
+       ret = mx28_nand_write_dbbt(dbbt, buf);
+       if (ret) {
+               printf("Unable to write DBBT to buffer\n");
+               goto err3;
+       }
+
+       ret = mx28_nand_write_firmware(fcb, infd, buf);
+       if (ret) {
+               printf("Unable to write firmware to buffer\n");
+               goto err3;
+       }
+
+       wr_size = write(outfd, buf, size);
+       if (wr_size != size) {
+               ret = -1;
+               goto err3;
+       }
+
+       ret = 0;
+
+err3:
+       free(dbbt);
+err2:
+       free(fcb);
+err1:
+       free(buf);
+err0:
+       return ret;
+}
+
+static int mx28_create_sd_image(int infd, int outfd)
+{
+       int ret = -1;
+       uint32_t *buf;
+       int size;
+       off_t fsize;
+       ssize_t wr_size;
+       struct mx28_sd_config_block *cb;
+
+       fsize = lseek(infd, 0, SEEK_END);
+       lseek(infd, 0, SEEK_SET);
+       size = fsize + 512;
+
+       buf = malloc(size);
+       if (!buf) {
+               printf("Can not allocate output buffer of %d bytes\n", size);
+               goto err0;
+       }
+
+       ret = read(infd, (uint8_t *)buf + 512, fsize);
+       if (ret != fsize) {
+               ret = -1;
+               goto err1;
+       }
+
+       cb = (struct mx28_sd_config_block *)buf;
+
+       cb->signature = 0x00112233;
+       cb->primary_boot_tag = 0x1;
+       cb->secondary_boot_tag = 0x1;
+       cb->num_copies = 1;
+       cb->drv_info[0].chip_num = 0x0;
+       cb->drv_info[0].drive_type = 0x0;
+       cb->drv_info[0].tag = 0x1;
+       cb->drv_info[0].first_sector_number = sd_sector + 1;
+       cb->drv_info[0].sector_count = (size - 1) / 512;
+
+       wr_size = write(outfd, buf, size);
+       if (wr_size != size) {
+               ret = -1;
+               goto err1;
+       }
+
+       ret = 0;
+
+err1:
+       free(buf);
+err0:
+       return ret;
+}
+
+int parse_ops(int argc, char **argv)
+{
+       int i;
+       int tmp;
+       char *end;
+       enum param {
+               PARAM_WRITE,
+               PARAM_OOB,
+               PARAM_ERASE,
+               PARAM_PART,
+               PARAM_SD,
+               PARAM_NAND
+       };
+       int type;
+
+       for (i = 1; i < argc; i++) {
+               if (!strncmp(argv[i], "-w", 2))
+                       type = PARAM_WRITE;
+               else if (!strncmp(argv[i], "-o", 2))
+                       type = PARAM_OOB;
+               else if (!strncmp(argv[i], "-e", 2))
+                       type = PARAM_ERASE;
+               else if (!strncmp(argv[i], "-p", 2))
+                       type = PARAM_PART;
+               else    /* SD/MMC */
+                       break;
+
+               tmp = strtol(argv[++i], &end, 10);
+               if (tmp % 2)
+                       return -1;
+               if (tmp <= 0)
+                       return -1;
+
+               if (type == PARAM_WRITE)
+                       nand_writesize = tmp;
+               if (type == PARAM_OOB)
+                       nand_oobsize = tmp;
+               if (type == PARAM_ERASE)
+                       nand_erasesize = tmp;
+               if (type == PARAM_PART)
+                       sd_sector = tmp;
+       }
+
+       if (strcmp(argv[i], "sd") && strcmp(argv[i], "nand"))
+               return -1;
+
+       if (i + 3 != argc)
+               return -1;
+
+       return i;
+}
+
+int main(int argc, char **argv)
+{
+       int infd, outfd;
+       int ret = 0;
+       int offset;
+
+       offset = parse_ops(argc, argv);
+       if (offset < 0) {
+               usage();
+               ret = 1;
+               goto err1;
+       }
+
+       infd = open(argv[offset + 1], O_RDONLY);
+       if (infd < 0) {
+               printf("Input BootStream file can not be opened\n");
+               ret = 2;
+               goto err1;
+       }
+
+       outfd = open(argv[offset + 2], O_CREAT | O_TRUNC | O_WRONLY,
+                                       S_IRUSR | S_IWUSR);
+       if (outfd < 0) {
+               printf("Output file can not be created\n");
+               ret = 3;
+               goto err2;
+       }
+
+       if (!strcmp(argv[offset], "sd"))
+               ret = mx28_create_sd_image(infd, outfd);
+       else if (!strcmp(argv[offset], "nand"))
+               ret = mx28_create_nand_image(infd, outfd);
+
+       close(outfd);
+err2:
+       close(infd);
+err1:
+       return ret;
+}
index cfc176042a71bb5150b91c5f955dc208281f6bbb..c27577b70cc076672846a8acd4cc8ca6be1ce4eb 100644 (file)
@@ -63,45 +63,41 @@ typedef unsigned int u32;
  *     $ gcc clocks_get_m_n.c
  *     $ ./a.out
  */
-int get_m_n_optimized(u32 target_freq_khz, u32 ref_freq_khz, u32 *m, u32 *n,
-                       u32 tolerance_khz)
+int get_m_n_optimized(u32 target_freq_khz, u32 ref_freq_khz, u32 *M, u32 *N)
 {
-       u32 min_freq = target_freq_khz - tolerance_khz;
-       u32 max_freq = target_freq_khz;
-       u32 freq, freq_old;
-       *n = 1;
+       u32 freq = target_freq_khz;
+       u32 m_optimal, n_optimal, freq_optimal = 0, freq_old;
+       u32 m, n;
+       n = 1;
        while (1) {
-               *m = min_freq / ref_freq_khz / 2 * (*n) ;
+               m = target_freq_khz / ref_freq_khz / 2 * n;
                freq_old = 0;
                while (1) {
-                       freq = ref_freq_khz * 2 * (*m) / (*n);
-                       if (abs(target_freq_khz - freq_old) <=
-                               abs(target_freq_khz - freq)) {
+                       freq = ref_freq_khz * 2 * m / n;
+                       if (freq > target_freq_khz) {
                                freq = freq_old;
-                               (*m)--;
+                               m--;
                                break;
                        }
-                       (*m)++;
+                       m++;
                        freq_old = freq;
                }
-               if (freq >= min_freq && freq <= max_freq)
+               if (freq > freq_optimal) {
+                       freq_optimal = freq;
+                       m_optimal = m;
+                       n_optimal = n;
+               }
+               n++;
+               if ((freq_optimal == target_freq_khz) ||
+                       ((ref_freq_khz / n) < 1000)) {
                        break;
-               (*n)++;
-               if ((*n) > MAX_N + 1) {
-                       printf("ref %d m %d n %d target %d : ",
-                               ref_freq_khz, *m, *n, target_freq_khz);
-                       printf("can not find m & n - please consider"
-                               " increasing tolerance\n");
-                       return -1;
                }
        }
-       (*n)--;
-       printf("ref %d m %d n %d target %d locked %d\n",
-               ref_freq_khz, *m, *n, target_freq_khz, freq);
-       if ((ref_freq_khz / (*n + 1)) < 1000) {
-               printf("\tREFCLK - CLKINP/(N+1) is less than 1 MHz - less than"
-                       " ideal, locking time will be high!\n");
-       }
+       n--;
+       *M = m_optimal;
+       *N = n_optimal - 1;
+       printf("ref %d m %d n %d target %d locked %d\n", ref_freq_khz,
+               m_optimal, n_optimal - 1, target_freq_khz, freq_optimal);
        return 0;
 }
 
@@ -109,89 +105,98 @@ void main(void)
 {
        u32 m, n;
        printf("\nMPU - 2000000\n");
-       get_m_n_optimized(2000000, 12000, &m, &n, 0);
-       get_m_n_optimized(2000000, 13000, &m, &n, 0);
-       get_m_n_optimized(2000000, 16800, &m, &n, 800);
-       get_m_n_optimized(2000000, 19200, &m, &n, 0);
-       get_m_n_optimized(2000000, 26000, &m, &n, 0);
-       get_m_n_optimized(2000000, 27000, &m, &n, 0);
-       get_m_n_optimized(2000000, 38400, &m, &n, 0);
+       get_m_n_optimized(2000000, 12000, &m, &n);
+       get_m_n_optimized(2000000, 13000, &m, &n);
+       get_m_n_optimized(2000000, 16800, &m, &n);
+       get_m_n_optimized(2000000, 19200, &m, &n);
+       get_m_n_optimized(2000000, 26000, &m, &n);
+       get_m_n_optimized(2000000, 27000, &m, &n);
+       get_m_n_optimized(2000000, 38400, &m, &n);
 
        printf("\nMPU - 1200000\n");
-       get_m_n_optimized(1200000, 12000, &m, &n, 0);
-       get_m_n_optimized(1200000, 13000, &m, &n, 0);
-       get_m_n_optimized(1200000, 16800, &m, &n, 800);
-       get_m_n_optimized(1200000, 19200, &m, &n, 0);
-       get_m_n_optimized(1200000, 26000, &m, &n, 0);
-       get_m_n_optimized(1200000, 27000, &m, &n, 0);
-       get_m_n_optimized(1200000, 38400, &m, &n, 0);
+       get_m_n_optimized(1200000, 12000, &m, &n);
+       get_m_n_optimized(1200000, 13000, &m, &n);
+       get_m_n_optimized(1200000, 16800, &m, &n);
+       get_m_n_optimized(1200000, 19200, &m, &n);
+       get_m_n_optimized(1200000, 26000, &m, &n);
+       get_m_n_optimized(1200000, 27000, &m, &n);
+       get_m_n_optimized(1200000, 38400, &m, &n);
 
        printf("\nMPU - 1584000\n");
-       get_m_n_optimized(1584000, 12000, &m, &n, 0);
-       get_m_n_optimized(1584000, 13000, &m, &n, 0);
-       get_m_n_optimized(1584000, 16800, &m, &n, 400);
-       get_m_n_optimized(1584000, 19200, &m, &n, 0);
-       get_m_n_optimized(1584000, 26000, &m, &n, 0);
-       get_m_n_optimized(1584000, 27000, &m, &n, 0);
-       get_m_n_optimized(1584000, 38400, &m, &n, 0);
+       get_m_n_optimized(1584000, 12000, &m, &n);
+       get_m_n_optimized(1584000, 13000, &m, &n);
+       get_m_n_optimized(1584000, 16800, &m, &n);
+       get_m_n_optimized(1584000, 19200, &m, &n);
+       get_m_n_optimized(1584000, 26000, &m, &n);
+       get_m_n_optimized(1584000, 27000, &m, &n);
+       get_m_n_optimized(1584000, 38400, &m, &n);
 
        printf("\nCore 1600000\n");
-       get_m_n_optimized(1600000, 12000, &m, &n, 0);
-       get_m_n_optimized(1600000, 13000, &m, &n, 0);
-       get_m_n_optimized(1600000, 16800, &m, &n, 200);
-       get_m_n_optimized(1600000, 19200, &m, &n, 0);
-       get_m_n_optimized(1600000, 26000, &m, &n, 0);
-       get_m_n_optimized(1600000, 27000, &m, &n, 0);
-       get_m_n_optimized(1600000, 38400, &m, &n, 0);
+       get_m_n_optimized(1600000, 12000, &m, &n);
+       get_m_n_optimized(1600000, 13000, &m, &n);
+       get_m_n_optimized(1600000, 16800, &m, &n);
+       get_m_n_optimized(1600000, 19200, &m, &n);
+       get_m_n_optimized(1600000, 26000, &m, &n);
+       get_m_n_optimized(1600000, 27000, &m, &n);
+       get_m_n_optimized(1600000, 38400, &m, &n);
 
        printf("\nPER 1536000\n");
-       get_m_n_optimized(1536000, 12000, &m, &n, 0);
-       get_m_n_optimized(1536000, 13000, &m, &n, 0);
-       get_m_n_optimized(1536000, 16800, &m, &n, 0);
-       get_m_n_optimized(1536000, 19200, &m, &n, 0);
-       get_m_n_optimized(1536000, 26000, &m, &n, 0);
-       get_m_n_optimized(1536000, 27000, &m, &n, 0);
-       get_m_n_optimized(1536000, 38400, &m, &n, 0);
+       get_m_n_optimized(1536000, 12000, &m, &n);
+       get_m_n_optimized(1536000, 13000, &m, &n);
+       get_m_n_optimized(1536000, 16800, &m, &n);
+       get_m_n_optimized(1536000, 19200, &m, &n);
+       get_m_n_optimized(1536000, 26000, &m, &n);
+       get_m_n_optimized(1536000, 27000, &m, &n);
+       get_m_n_optimized(1536000, 38400, &m, &n);
 
        printf("\nIVA 1862000\n");
-       get_m_n_optimized(1862000, 12000, &m, &n, 0);
-       get_m_n_optimized(1862000, 13000, &m, &n, 0);
-       get_m_n_optimized(1862000, 16800, &m, &n, 0);
-       get_m_n_optimized(1862000, 19200, &m, &n, 900);
-       get_m_n_optimized(1862000, 26000, &m, &n, 0);
-       get_m_n_optimized(1862000, 27000, &m, &n, 0);
-       get_m_n_optimized(1862000, 38400, &m, &n, 800);
+       get_m_n_optimized(1862000, 12000, &m, &n);
+       get_m_n_optimized(1862000, 13000, &m, &n);
+       get_m_n_optimized(1862000, 16800, &m, &n);
+       get_m_n_optimized(1862000, 19200, &m, &n);
+       get_m_n_optimized(1862000, 26000, &m, &n);
+       get_m_n_optimized(1862000, 27000, &m, &n);
+       get_m_n_optimized(1862000, 38400, &m, &n);
+
+       printf("\nIVA Nitro - 1290000\n");
+       get_m_n_optimized(1290000, 12000, &m, &n);
+       get_m_n_optimized(1290000, 13000, &m, &n);
+       get_m_n_optimized(1290000, 16800, &m, &n);
+       get_m_n_optimized(1290000, 19200, &m, &n);
+       get_m_n_optimized(1290000, 26000, &m, &n);
+       get_m_n_optimized(1290000, 27000, &m, &n);
+       get_m_n_optimized(1290000, 38400, &m, &n);
 
        printf("\nABE 196608 sys clk\n");
-       get_m_n_optimized(196608, 12000, &m, &n, 700);
-       get_m_n_optimized(196608, 13000, &m, &n, 200);
-       get_m_n_optimized(196608, 16800, &m, &n, 700);
-       get_m_n_optimized(196608, 19200, &m, &n, 400);
-       get_m_n_optimized(196608, 26000, &m, &n, 200);
-       get_m_n_optimized(196608, 27000, &m, &n, 900);
-       get_m_n_optimized(196608, 38400, &m, &n, 0);
+       get_m_n_optimized(196608, 12000, &m, &n);
+       get_m_n_optimized(196608, 13000, &m, &n);
+       get_m_n_optimized(196608, 16800, &m, &n);
+       get_m_n_optimized(196608, 19200, &m, &n);
+       get_m_n_optimized(196608, 26000, &m, &n);
+       get_m_n_optimized(196608, 27000, &m, &n);
+       get_m_n_optimized(196608, 38400, &m, &n);
 
        printf("\nABE 196608 32K\n");
-       get_m_n_optimized(196608000/4, 32768, &m, &n, 0);
+       get_m_n_optimized(196608000/4, 32768, &m, &n);
 
        printf("\nUSB 1920000\n");
-       get_m_n_optimized(1920000, 12000, &m, &n, 0);
-       get_m_n_optimized(1920000, 13000, &m, &n, 0);
-       get_m_n_optimized(1920000, 16800, &m, &n, 0);
-       get_m_n_optimized(1920000, 19200, &m, &n, 0);
-       get_m_n_optimized(1920000, 26000, &m, &n, 0);
-       get_m_n_optimized(1920000, 27000, &m, &n, 0);
-       get_m_n_optimized(1920000, 38400, &m, &n, 0);
+       get_m_n_optimized(1920000, 12000, &m, &n);
+       get_m_n_optimized(1920000, 13000, &m, &n);
+       get_m_n_optimized(1920000, 16800, &m, &n);
+       get_m_n_optimized(1920000, 19200, &m, &n);
+       get_m_n_optimized(1920000, 26000, &m, &n);
+       get_m_n_optimized(1920000, 27000, &m, &n);
+       get_m_n_optimized(1920000, 38400, &m, &n);
 
        printf("\nCore ES1 1523712\n");
-       get_m_n_optimized(1524000, 12000, &m, &n, 100);
-       get_m_n_optimized(1524000, 13000, &m, &n, 0);
-       get_m_n_optimized(1524000, 16800, &m, &n, 0);
-       get_m_n_optimized(1524000, 19200, &m, &n, 0);
-       get_m_n_optimized(1524000, 26000, &m, &n, 0);
-       get_m_n_optimized(1524000, 27000, &m, &n, 0);
+       get_m_n_optimized(1524000, 12000, &m, &n);
+       get_m_n_optimized(1524000, 13000, &m, &n);
+       get_m_n_optimized(1524000, 16800, &m, &n);
+       get_m_n_optimized(1524000, 19200, &m, &n);
+       get_m_n_optimized(1524000, 26000, &m, &n);
+       get_m_n_optimized(1524000, 27000, &m, &n);
 
        /* exact recommendation for SDPs */
-       get_m_n_optimized(1523712, 38400, &m, &n, 0);
+       get_m_n_optimized(1523712, 38400, &m, &n);
 
 }
index 1ed89e6c85c4fde975c28a2bebedfcbbc8741a69..319c0fe2a23ed39324293fd3243feb21d1b0ccd3 100644 (file)
@@ -23,6 +23,6 @@
 #ifdef __MINGW32__
 #include "mingw_support.c"
 #endif
-#ifdef __APPLE__
+#if defined(__APPLE__) && __DARWIN_C_LEVEL < 200809L
 #include "getline.c"
 #endif
index 7dcbee4b3e508ecf8c6d50c6143f4f2ecffe0e15..5bf7add39cc5d4fdfcfa20cd4528d596c855b75e 100644 (file)
@@ -28,7 +28,7 @@
 #include "mingw_support.h"
 #endif
 
-#ifdef __APPLE__
+#if defined(__APPLE__) && __DARWIN_C_LEVEL < 200809L
 #include "getline.h"
 #endif