]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'u-boot-samsung/master' into 'u-boot-arm/master'
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>
Wed, 11 Sep 2013 07:59:27 +0000 (09:59 +0200)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Wed, 11 Sep 2013 07:59:27 +0000 (09:59 +0200)
Conflicts:
tools/Makefile

646 files changed:
.gitignore
Licenses/README
Licenses/bsd-2-clause.txt [new file with mode: 0644]
Licenses/bsd-3-clause.txt [new file with mode: 0644]
Licenses/ibm-pibs.txt [new file with mode: 0644]
MAINTAINERS
Makefile
README
arch/arm/cpu/arm926ejs/mxs/mxsimage.mx23.cfg [new file with mode: 0644]
arch/arm/cpu/arm926ejs/mxs/mxsimage.mx28.cfg [new file with mode: 0644]
arch/arm/cpu/arm926ejs/mxs/spl_power_init.c
arch/arm/cpu/armv7/at91/sama5d3_devices.c
arch/arm/cpu/armv7/mx5/clock.c
arch/arm/cpu/armv7/mx6/Makefile
arch/arm/cpu/armv7/mx6/hab.c [new file with mode: 0644]
arch/arm/cpu/armv7/mx6/soc.c
arch/arm/cpu/armv7/omap3/clock.c
arch/arm/cpu/armv7/omap3/lowlevel_init.S
arch/arm/cpu/armv7/omap4/hw_data.c
arch/arm/cpu/armv7/omap4/hwinit.c
arch/arm/cpu/armv7/omap4/sdram_elpida.c
arch/arm/cpu/armv7/socfpga/Makefile
arch/arm/cpu/armv7/socfpga/misc.c
arch/arm/cpu/armv7/socfpga/reset_manager.c [new file with mode: 0644]
arch/arm/cpu/armv7/tegra114/config.mk [deleted file]
arch/arm/cpu/armv7/tegra20/config.mk [deleted file]
arch/arm/cpu/armv7/tegra30/config.mk [deleted file]
arch/arm/cpu/armv7/zynq/Makefile
arch/arm/cpu/armv7/zynq/ddrc.c [new file with mode: 0644]
arch/arm/cpu/armv7/zynq/slcr.c
arch/arm/cpu/u-boot.lds
arch/arm/include/asm/arch-am33xx/cpu.h
arch/arm/include/asm/arch-am33xx/hardware.h
arch/arm/include/asm/arch-am33xx/hardware_am33xx.h
arch/arm/include/asm/arch-am33xx/omap.h
arch/arm/include/asm/arch-at91/at91_common.h
arch/arm/include/asm/arch-at91/at91sam9x5.h
arch/arm/include/asm/arch-at91/sama5d3.h
arch/arm/include/asm/arch-at91/sama5d3_smc.h
arch/arm/include/asm/arch-exynos/mipi_dsim.h
arch/arm/include/asm/arch-mx5/clock.h
arch/arm/include/asm/arch-mx6/hab.h [new file with mode: 0644]
arch/arm/include/asm/arch-mx6/imx-regs.h
arch/arm/include/asm/arch-mx6/sys_proto.h
arch/arm/include/asm/arch-mxs/regs-uartapp.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap3/clock.h
arch/arm/include/asm/arch-omap3/gpio.h
arch/arm/include/asm/arch-omap4/clock.h
arch/arm/include/asm/arch-omap4/gpio.h
arch/arm/include/asm/arch-omap4/omap.h
arch/arm/include/asm/arch-omap5/clock.h
arch/arm/include/asm/arch-omap5/ehci.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap5/gpio.h
arch/arm/include/asm/arch-omap5/omap.h
arch/arm/include/asm/arch-socfpga/reset_manager.h
arch/arm/include/asm/arch-zynq/hardware.h
arch/arm/include/asm/arch-zynq/sys_proto.h
arch/arm/include/asm/ehci-omap.h
arch/arm/include/asm/imx-common/dma.h
arch/arm/include/asm/omap_common.h
arch/arm/include/asm/omap_gpio.h
arch/blackfin/cpu/gpio.c
arch/blackfin/lib/board.c
arch/microblaze/config.mk
arch/microblaze/lib/board.c
arch/mips/include/asm/config.h
arch/mips/lib/Makefile
arch/mips/lib/bootm.c
arch/mips/lib/bootm_qemu_mips.c [deleted file]
arch/nds32/include/asm/dma-mapping.h [new file with mode: 0644]
arch/powerpc/cpu/mpc824x/cpu.c
arch/powerpc/cpu/mpc83xx/pcie.c
arch/powerpc/cpu/mpc85xx/Makefile
arch/powerpc/cpu/mpc85xx/b4860_ids.c
arch/powerpc/cpu/mpc85xx/c29x_serdes.c [new file with mode: 0644]
arch/powerpc/cpu/mpc85xx/cmd_errata.c
arch/powerpc/cpu/mpc85xx/cpu.c
arch/powerpc/cpu/mpc85xx/cpu_init.c
arch/powerpc/cpu/mpc85xx/ddr-gen1.c
arch/powerpc/cpu/mpc85xx/ddr-gen2.c
arch/powerpc/cpu/mpc85xx/ddr-gen3.c
arch/powerpc/cpu/mpc85xx/fdt.c
arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c
arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.h
arch/powerpc/cpu/mpc85xx/release.S
arch/powerpc/cpu/mpc85xx/speed.c
arch/powerpc/cpu/mpc85xx/start.S
arch/powerpc/cpu/mpc85xx/t4240_ids.c
arch/powerpc/cpu/mpc85xx/t4240_serdes.c
arch/powerpc/cpu/mpc85xx/tlb.c
arch/powerpc/cpu/mpc85xx/u-boot-spl.lds
arch/powerpc/cpu/mpc86xx/cpu.c
arch/powerpc/cpu/mpc86xx/ddr-8641.c
arch/powerpc/cpu/mpc86xx/speed.c
arch/powerpc/cpu/mpc8xx/cpu.c
arch/powerpc/cpu/mpc8xx/video.c
arch/powerpc/cpu/mpc8xxx/cpu.c
arch/powerpc/cpu/mpc8xxx/ddr/ctrl_regs.c
arch/powerpc/cpu/mpc8xxx/ddr/ddr.h
arch/powerpc/cpu/mpc8xxx/ddr/ddr3_dimm_params.c
arch/powerpc/cpu/mpc8xxx/ddr/interactive.c
arch/powerpc/cpu/mpc8xxx/ddr/lc_common_dimm_params.c
arch/powerpc/cpu/mpc8xxx/ddr/main.c
arch/powerpc/cpu/mpc8xxx/ddr/options.c
arch/powerpc/cpu/mpc8xxx/fdt.c
arch/powerpc/cpu/mpc8xxx/law.c
arch/powerpc/cpu/ppc4xx/4xx_pci.c
arch/powerpc/cpu/ppc4xx/4xx_uart.c
arch/powerpc/cpu/ppc4xx/cpu.c
arch/powerpc/cpu/ppc4xx/cpu_init.c
arch/powerpc/cpu/ppc4xx/miiphy.c
arch/powerpc/cpu/ppc4xx/speed.c
arch/powerpc/cpu/ppc4xx/start.S
arch/powerpc/include/asm/config_mpc85xx.h
arch/powerpc/include/asm/fsl_ddr_dimm_params.h
arch/powerpc/include/asm/fsl_ddr_sdram.h
arch/powerpc/include/asm/fsl_i2c.h
arch/powerpc/include/asm/fsl_law.h
arch/powerpc/include/asm/fsl_liodn.h
arch/powerpc/include/asm/fsl_pci.h
arch/powerpc/include/asm/fsl_serdes.h
arch/powerpc/include/asm/immap_85xx.h
arch/powerpc/include/asm/ppc405.h
arch/powerpc/include/asm/ppc405cr.h [deleted file]
arch/powerpc/include/asm/ppc440.h
arch/powerpc/include/asm/ppc4xx-ebc.h
arch/powerpc/include/asm/ppc4xx-emac.h
arch/powerpc/include/asm/ppc4xx-mal.h
arch/powerpc/include/asm/ppc4xx.h
arch/powerpc/include/asm/processor.h
arch/powerpc/include/asm/u-boot.h
arch/x86/cpu/coreboot/config.mk [deleted file]
arch/x86/cpu/coreboot/tables.c
arch/x86/include/asm/arch-coreboot/sysinfo.h
arch/x86/include/asm/arch-coreboot/tables.h
board/AndesTech/adp-ag102/Makefile
board/a3m071/README
board/atmel/at91sam9m10g45ek/config.mk [deleted file]
board/atmel/at91sam9x5ek/config.mk [deleted file]
board/atmel/sama5d3xek/sama5d3xek.c
board/boundary/nitrogen6x/nitrogen6x.c
board/chromebook-x86/coreboot/config.mk
board/chromebook-x86/dts/link.dts
board/congatec/cgtqmx6eval/README
board/cray/L1/init.S
board/csb272/init.S
board/csb472/init.S
board/davinci/ea20/ea20.c
board/esd/canbt/canbt.c [deleted file]
board/esd/canbt/canbt.h [deleted file]
board/esd/canbt/flash.c [deleted file]
board/esd/canbt/fpgadata.c [deleted file]
board/esd/cpci750/mv_eth.c
board/esd/pci405/writeibm.S
board/freescale/b4860qds/b4860qds.c
board/freescale/b4860qds/b4860qds_crossbar_con.h
board/freescale/b4860qds/eth_b4860qds.c
board/freescale/bsc9131rdb/ddr.c
board/freescale/bsc9132qds/bsc9132qds.c
board/freescale/bsc9132qds/ddr.c
board/freescale/bsc9132qds/law.c
board/freescale/bsc9132qds/tlb.c
board/freescale/c29xpcie/Makefile [moved from board/esd/canbt/Makefile with 57% similarity]
board/freescale/c29xpcie/README [new file with mode: 0644]
board/freescale/c29xpcie/c29xpcie.c [new file with mode: 0644]
board/freescale/c29xpcie/cpld.c [new file with mode: 0644]
board/freescale/c29xpcie/cpld.h [new file with mode: 0644]
board/freescale/c29xpcie/ddr.c [new file with mode: 0644]
board/freescale/c29xpcie/law.c [new file with mode: 0644]
board/freescale/c29xpcie/tlb.c [new file with mode: 0644]
board/freescale/common/Makefile
board/freescale/common/idt8t49n222a_serdes_clk.c [new file with mode: 0644]
board/freescale/common/idt8t49n222a_serdes_clk.h [new file with mode: 0644]
board/freescale/common/qixis.c
board/freescale/common/vsc3316_3308.c
board/freescale/common/vsc3316_3308.h
board/freescale/corenet_ds/corenet_ds.c
board/freescale/corenet_ds/ddr.c
board/freescale/mpc8540ads/mpc8540ads.c
board/freescale/mpc8541cds/mpc8541cds.c
board/freescale/mpc8555cds/mpc8555cds.c
board/freescale/mpc8560ads/mpc8560ads.c
board/freescale/p1010rdb/ddr.c
board/freescale/p1010rdb/spl_minimal.c
board/freescale/p1022ds/Makefile
board/freescale/p1022ds/spl.c [new file with mode: 0644]
board/freescale/p1022ds/spl_minimal.c
board/freescale/p1022ds/tlb.c
board/freescale/p1_p2_rdb/ddr.c
board/freescale/p1_p2_rdb_pc/README
board/freescale/p1_p2_rdb_pc/ddr.c
board/freescale/p1_p2_rdb_pc/tlb.c
board/freescale/p1_twr/Makefile [new file with mode: 0644]
board/freescale/p1_twr/ddr.c [new file with mode: 0644]
board/freescale/p1_twr/law.c [new file with mode: 0644]
board/freescale/p1_twr/p1_twr.c [new file with mode: 0644]
board/freescale/p1_twr/tlb.c [new file with mode: 0644]
board/freescale/p2041rdb/p2041rdb.c
board/freescale/t4qds/Makefile
board/freescale/t4qds/ddr.c
board/freescale/t4qds/ddr.h [new file with mode: 0644]
board/freescale/t4qds/eth.c
board/freescale/t4qds/law.c
board/freescale/t4qds/t4240emu.c [new file with mode: 0644]
board/freescale/t4qds/t4240qds.c [moved from board/freescale/t4qds/t4qds.c with 88% similarity]
board/freescale/t4qds/tlb.c
board/gdsys/405ep/405ep.c
board/gdsys/405ep/dlvision-10g.c
board/gdsys/405ep/io.c
board/gdsys/405ep/iocon.c
board/gdsys/405ep/neo.c
board/gdsys/405ex/405ex.c
board/gdsys/405ex/io64.c
board/gdsys/common/Makefile
board/gdsys/common/dp501.c
board/gdsys/common/fpga.c [new file with mode: 0644]
board/gdsys/common/mclink.c [new file with mode: 0644]
board/gdsys/common/mclink.h [new file with mode: 0644]
board/gdsys/common/osd.c
board/isee/igep0033/board.c
board/jse/init.S
board/mpl/common/pci.c
board/mpl/mip405/init.S
board/mpl/pip405/init.S
board/phytec/pcm051/board.c
board/samsung/common/multi_i2c.c
board/samsung/dts/exynos5250-smdk5250.dts
board/samsung/dts/exynos5250-snow.dts
board/samsung/goni/goni.c
board/samsung/trats/trats.c
board/samsung/universal_c210/universal.c
board/sbc8548/sbc8548.c
board/sc3/init.S
board/scb9328/intel.h
board/siemens/common/board.c [new file with mode: 0644]
board/siemens/common/factoryset.c [new file with mode: 0644]
board/siemens/common/factoryset.h [new file with mode: 0644]
board/siemens/dxr2/Makefile [new file with mode: 0644]
board/siemens/dxr2/board.c [new file with mode: 0644]
board/siemens/dxr2/board.h [new file with mode: 0644]
board/siemens/dxr2/mux.c [new file with mode: 0644]
board/siemens/pxm2/Makefile [new file with mode: 0644]
board/siemens/pxm2/board.c [new file with mode: 0644]
board/siemens/pxm2/board.h [new file with mode: 0644]
board/siemens/pxm2/mux.c [new file with mode: 0644]
board/siemens/pxm2/pmic.h [new file with mode: 0644]
board/siemens/rut/Makefile [new file with mode: 0644]
board/siemens/rut/board.c [new file with mode: 0644]
board/siemens/rut/board.h [new file with mode: 0644]
board/siemens/rut/mux.c [new file with mode: 0644]
board/socrates/socrates.c
board/ti/am335x/README
board/ti/am335x/board.c
board/ti/omap5_uevm/evm.c
board/ti/omap5_uevm/mux_data.h
board/ti/sdp4430/sdp.c
board/w7o/init.S
board/xes/xpedite537x/ddr.c
board/xilinx/dts/microblaze-generic.dts [moved from board/xilinx/microblaze-generic/dts/microblaze.dts with 100% similarity]
board/xilinx/dts/microblaze.dts [deleted file]
board/xilinx/zynq/board.c
boards.cfg
common/Makefile
common/cmd_bdinfo.c
common/cmd_bootm.c
common/cmd_dfu.c
common/cmd_fpgad.c [new file with mode: 0644]
common/cmd_i2c.c
common/cmd_ini.c
common/cmd_load.c
common/cmd_nand.c
common/cmd_sf.c
common/env_common.c
common/env_nand.c
common/env_sf.c
common/image-fit.c
common/image.c
common/lcd.c
common/spl/spl.c
common/stdio.c
common/usb.c
common/usb_hub.c
common/usb_kbd.c
config.mk
doc/README.SPL
doc/README.TPL [new file with mode: 0644]
doc/README.atmel_pmecc
doc/README.fdt-control
doc/README.imximage
doc/README.mpc85xx-sd-spi-boot [new file with mode: 0644]
doc/README.mxc_hab [new file with mode: 0644]
doc/README.mxsimage [new file with mode: 0644]
doc/README.scrapyard
drivers/dfu/dfu.c
drivers/dfu/dfu_nand.c
drivers/dma/apbh_dma.c
drivers/fpga/zynqpl.c
drivers/gpio/adi_gpio2.c
drivers/gpio/at91_gpio.c
drivers/gpio/omap_gpio.c
drivers/gpio/pca953x.c
drivers/i2c/fsl_i2c.c
drivers/i2c/soft_i2c.c
drivers/i2c/tegra_i2c.c
drivers/mmc/Makefile
drivers/mmc/fsl_esdhc_spl.c [new file with mode: 0644]
drivers/mmc/mmc.c
drivers/mmc/mxsmmc.c
drivers/mtd/cfi_flash.c
drivers/mtd/nand/Makefile
drivers/mtd/nand/atmel_nand.c
drivers/mtd/nand/fsl_elbc_spl.c
drivers/mtd/nand/nand_util.c
drivers/mtd/spi/Makefile
drivers/mtd/spi/atmel.c
drivers/mtd/spi/eon.c
drivers/mtd/spi/fsl_espi_spl.c [new file with mode: 0644]
drivers/mtd/spi/gigadevice.c
drivers/mtd/spi/ramtron.c
drivers/mtd/spi/spansion.c
drivers/mtd/spi/spi_flash.c
drivers/mtd/spi/spi_spl_load.c
drivers/mtd/spi/sst.c
drivers/mtd/spi/stmicro.c
drivers/mtd/spi/winbond.c
drivers/net/4xx_enet.c
drivers/net/ax88180.c
drivers/net/fec_mxc.c
drivers/net/fm/eth.c
drivers/net/fm/fm.c
drivers/net/fm/memac.c
drivers/net/fm/t4240.c
drivers/net/fsl_mcdmafec.c
drivers/net/ftmac110.c
drivers/net/ftmac110.h
drivers/net/lan91c96.c
drivers/net/macb.c
drivers/net/mcffec.c
drivers/net/mcfmii.c
drivers/net/ne2000.c
drivers/net/npe/IxEthAcc.c
drivers/net/npe/IxEthAccCommon.c
drivers/net/npe/IxEthAccControlInterface.c
drivers/net/npe/IxEthAccDataPlane.c
drivers/net/npe/IxEthAccMac.c
drivers/net/npe/IxEthAccMii.c
drivers/net/npe/IxEthDBAPI.c
drivers/net/npe/IxEthDBAPISupport.c
drivers/net/npe/IxEthDBCore.c
drivers/net/npe/IxEthDBEvents.c
drivers/net/npe/IxEthDBFeatures.c
drivers/net/npe/IxEthDBFirewall.c
drivers/net/npe/IxEthDBHashtable.c
drivers/net/npe/IxEthDBLearning.c
drivers/net/npe/IxEthDBMem.c
drivers/net/npe/IxEthDBNPEAdaptor.c
drivers/net/npe/IxEthDBPortUpdate.c
drivers/net/npe/IxEthDBReports.c
drivers/net/npe/IxEthDBSearch.c
drivers/net/npe/IxEthDBSpanningTree.c
drivers/net/npe/IxEthDBUtil.c
drivers/net/npe/IxEthDBVlan.c
drivers/net/npe/IxEthDBWiFi.c
drivers/net/npe/IxEthMii.c
drivers/net/npe/IxFeatureCtrl.c
drivers/net/npe/IxNpeDl.c
drivers/net/npe/IxNpeDlImageMgr.c
drivers/net/npe/IxNpeDlNpeMgr.c
drivers/net/npe/IxNpeDlNpeMgrUtils.c
drivers/net/npe/IxNpeMh.c
drivers/net/npe/IxNpeMhConfig.c
drivers/net/npe/IxNpeMhReceive.c
drivers/net/npe/IxNpeMhSend.c
drivers/net/npe/IxNpeMhSolicitedCbMgr.c
drivers/net/npe/IxNpeMhUnsolicitedCbMgr.c
drivers/net/npe/IxOsalBufferMgt.c
drivers/net/npe/IxOsalIoMem.c
drivers/net/npe/IxOsalOsCacheMMU.c
drivers/net/npe/IxOsalOsMsgQ.c
drivers/net/npe/IxOsalOsSemaphore.c
drivers/net/npe/IxOsalOsServices.c
drivers/net/npe/IxOsalOsThread.c
drivers/net/npe/IxQMgrAqmIf.c
drivers/net/npe/IxQMgrDispatcher.c
drivers/net/npe/IxQMgrInit.c
drivers/net/npe/IxQMgrQAccess.c
drivers/net/npe/IxQMgrQCfg.c
drivers/net/npe/include/IxAssert.h
drivers/net/npe/include/IxAtmSch.h
drivers/net/npe/include/IxAtmTypes.h
drivers/net/npe/include/IxAtmdAcc.h
drivers/net/npe/include/IxAtmdAccCtrl.h
drivers/net/npe/include/IxAtmm.h
drivers/net/npe/include/IxDmaAcc.h
drivers/net/npe/include/IxEthAcc.h
drivers/net/npe/include/IxEthAccDataPlane_p.h
drivers/net/npe/include/IxEthAccMac_p.h
drivers/net/npe/include/IxEthAccMii_p.h
drivers/net/npe/include/IxEthAccQueueAssign_p.h
drivers/net/npe/include/IxEthAcc_p.h
drivers/net/npe/include/IxEthDB.h
drivers/net/npe/include/IxEthDBLocks_p.h
drivers/net/npe/include/IxEthDBLog_p.h
drivers/net/npe/include/IxEthDBMessages_p.h
drivers/net/npe/include/IxEthDBPortDefs.h
drivers/net/npe/include/IxEthDBQoS.h
drivers/net/npe/include/IxEthDB_p.h
drivers/net/npe/include/IxEthMii.h
drivers/net/npe/include/IxEthMii_p.h
drivers/net/npe/include/IxEthNpe.h
drivers/net/npe/include/IxFeatureCtrl.h
drivers/net/npe/include/IxHssAcc.h
drivers/net/npe/include/IxI2cDrv.h
drivers/net/npe/include/IxNpeA.h
drivers/net/npe/include/IxNpeDl.h
drivers/net/npe/include/IxNpeDlImageMgr_p.h
drivers/net/npe/include/IxNpeDlMacros_p.h
drivers/net/npe/include/IxNpeDlNpeMgrEcRegisters_p.h
drivers/net/npe/include/IxNpeDlNpeMgrUtils_p.h
drivers/net/npe/include/IxNpeDlNpeMgr_p.h
drivers/net/npe/include/IxNpeMh.h
drivers/net/npe/include/IxNpeMhConfig_p.h
drivers/net/npe/include/IxNpeMhMacros_p.h
drivers/net/npe/include/IxNpeMhReceive_p.h
drivers/net/npe/include/IxNpeMhSend_p.h
drivers/net/npe/include/IxNpeMhSolicitedCbMgr_p.h
drivers/net/npe/include/IxNpeMhUnsolicitedCbMgr_p.h
drivers/net/npe/include/IxNpeMicrocode.h
drivers/net/npe/include/IxOsBufLib.h
drivers/net/npe/include/IxOsBuffMgt.h
drivers/net/npe/include/IxOsBuffPoolMgt.h
drivers/net/npe/include/IxOsCacheMMU.h
drivers/net/npe/include/IxOsPrintf.h
drivers/net/npe/include/IxOsServices.h
drivers/net/npe/include/IxOsServicesComponents.h
drivers/net/npe/include/IxOsServicesEndianess.h
drivers/net/npe/include/IxOsServicesMemAccess.h
drivers/net/npe/include/IxOsServicesMemMap.h
drivers/net/npe/include/IxOsal.h
drivers/net/npe/include/IxOsalAssert.h
drivers/net/npe/include/IxOsalBackward.h
drivers/net/npe/include/IxOsalBackwardAssert.h
drivers/net/npe/include/IxOsalBackwardBufferMgt.h
drivers/net/npe/include/IxOsalBackwardCacheMMU.h
drivers/net/npe/include/IxOsalBackwardMemMap.h
drivers/net/npe/include/IxOsalBackwardOsServices.h
drivers/net/npe/include/IxOsalBackwardOssl.h
drivers/net/npe/include/IxOsalBufferMgt.h
drivers/net/npe/include/IxOsalBufferMgtDefault.h
drivers/net/npe/include/IxOsalConfig.h
drivers/net/npe/include/IxOsalEndianess.h
drivers/net/npe/include/IxOsalIoMem.h
drivers/net/npe/include/IxOsalMemAccess.h
drivers/net/npe/include/IxOsalOem.h
drivers/net/npe/include/IxOsalOsBufferMgt.h
drivers/net/npe/include/IxOsalOsIxp400.h
drivers/net/npe/include/IxOsalOsIxp400CustomizedMapping.h
drivers/net/npe/include/IxOsalTypes.h
drivers/net/npe/include/IxOsalUtilitySymbols.h
drivers/net/npe/include/IxParityENAcc.h
drivers/net/npe/include/IxPerfProfAcc.h
drivers/net/npe/include/IxQMgr.h
drivers/net/npe/include/IxQMgrAqmIf_p.h
drivers/net/npe/include/IxQMgrDefines_p.h
drivers/net/npe/include/IxQMgrDispatcher_p.h
drivers/net/npe/include/IxQMgrLog_p.h
drivers/net/npe/include/IxQMgrQAccess_p.h
drivers/net/npe/include/IxQMgrQCfg_p.h
drivers/net/npe/include/IxQueueAssignments.h
drivers/net/npe/include/IxSspAcc.h
drivers/net/npe/include/IxTimeSyncAcc.h
drivers/net/npe/include/IxTimerCtrl.h
drivers/net/npe/include/IxTypes.h
drivers/net/npe/include/IxUART.h
drivers/net/npe/include/IxVersionId.h
drivers/net/npe/include/ix_error.h
drivers/net/npe/include/ix_macros.h
drivers/net/npe/include/ix_os_type.h
drivers/net/npe/include/ix_ossl.h
drivers/net/npe/include/ix_symbols.h
drivers/net/npe/include/ix_types.h
drivers/net/npe/include/os_datatypes.h
drivers/net/npe/miiphy.c
drivers/net/phy/realtek.c
drivers/net/phy/smsc.c
drivers/pci/fsl_pci_init.c
drivers/power/power_i2c.c
drivers/serial/Makefile
drivers/serial/arm_dcc.c
drivers/serial/mxs_auart.c [new file with mode: 0644]
drivers/serial/serial.c
drivers/serial/usbtty.h
drivers/spi/Makefile
drivers/spi/bfin_spi.c
drivers/spi/fsl_espi.c
drivers/spi/mpc8xxx_spi.c
drivers/spi/zynq_spi.c [new file with mode: 0644]
drivers/usb/eth/smsc95xx.c
drivers/usb/gadget/f_dfu.c
drivers/usb/gadget/f_mass_storage.c
drivers/usb/gadget/g_dnl.c
drivers/usb/gadget/gadget_chips.h
drivers/usb/gadget/mv_udc.c
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-mx5.c
drivers/usb/host/ehci-omap.c
drivers/usb/host/ehci.h
drivers/usb/musb-new/linux-compat.h
drivers/video/Makefile
drivers/video/cfb_console.c
drivers/video/da8xx-fb.c
drivers/video/da8xx-fb.h [moved from arch/arm/include/asm/arch-davinci/da8xx-fb.h with 94% similarity]
drivers/video/exynos_mipi_dsi_common.c
drivers/video/exynos_mipi_dsi_common.h
drivers/video/exynos_mipi_dsi_lowlevel.c
drivers/video/exynos_mipi_dsi_lowlevel.h
drivers/video/formike.c [new file with mode: 0644]
drivers/video/l5f31188.c [new file with mode: 0644]
drivers/video/mxsfb.c
drivers/video/s6e8ax0.c
drivers/video/sed156x.c
drivers/watchdog/Makefile
drivers/watchdog/omap_wdt.c [new file with mode: 0644]
dts/Makefile
fs/yaffs2/yaffs_qsort.c
include/api_public.h
include/asm-generic/u-boot.h
include/configs/B4860QDS.h
include/configs/BSC9132QDS.h
include/configs/C29XPCIE.h [new file with mode: 0644]
include/configs/CANBT.h [deleted file]
include/configs/MPC8313ERDB.h
include/configs/P1022DS.h
include/configs/P2041RDB.h
include/configs/T4240EMU.h [new file with mode: 0644]
include/configs/T4240QDS.h
include/configs/a3m071.h
include/configs/am335x_evm.h
include/configs/at91sam9m10g45ek.h
include/configs/at91sam9n12ek.h
include/configs/at91sam9x5ek.h
include/configs/blackstamp.h
include/configs/calimain.h
include/configs/cam_enc_4xx.h
include/configs/corenet_ds.h
include/configs/da830evm.h
include/configs/da850evm.h
include/configs/dalmore.h
include/configs/davinci_dm365evm.h
include/configs/davinci_dm6467evm.h
include/configs/davinci_dvevm.h
include/configs/davinci_schmoogie.h
include/configs/davinci_sffsdr.h
include/configs/davinci_sonata.h
include/configs/dlvision-10g.h
include/configs/dlvision.h
include/configs/dra7xx_evm.h
include/configs/dxr2.h [new file with mode: 0644]
include/configs/ea20.h
include/configs/eb_cpux9k2.h
include/configs/enbw_cmc.h
include/configs/exynos5250-dt.h
include/configs/galaxy5200.h
include/configs/hawkboard.h
include/configs/igep0033.h
include/configs/igep00x0.h
include/configs/io.h
include/configs/io64.h
include/configs/iocon.h
include/configs/linkstation.h
include/configs/mcx.h
include/configs/microblaze-generic.h
include/configs/mxs.h
include/configs/neo.h
include/configs/omap4_sdp4430.h
include/configs/omap5_common.h
include/configs/omap5_uevm.h
include/configs/p1_p2_rdb_pc.h
include/configs/p1_twr.h [new file with mode: 0644]
include/configs/pcm051.h
include/configs/pxm2.h [new file with mode: 0644]
include/configs/rut.h [new file with mode: 0644]
include/configs/sama5d3xek.h
include/configs/siemens-am33x-common.h [new file with mode: 0644]
include/configs/socfpga_cyclone5.h
include/configs/t4qds.h
include/configs/tam3517-common.h
include/configs/tegra-common.h
include/configs/tegra114-common.h
include/configs/tegra20-common.h
include/configs/tegra30-common.h
include/configs/ti814x_evm.h
include/configs/ti_am335x_common.h
include/configs/ti_armv7_common.h
include/configs/trats.h
include/configs/zynq.h
include/dfu.h
include/e500.h
include/edid.h
include/elf.h
include/fsl_esdhc.h
include/fsl_usb.h [new file with mode: 0644]
include/gdsys_fpga.h
include/i2c.h
include/image.h
include/linux/compat.h
include/miiphy.h
include/mpc86xx.h
include/mtd/cfi_flash.h
include/net.h
include/pci.h
include/serial.h
include/stdio_dev.h
include/usb/mv_udc.h
include/video.h
include/video_font.h
include/video_font_4x6.h [new file with mode: 0644]
include/video_font_data.h
include/zynqpl.h
lib/libfdt/fdt.c
lib/libfdt/fdt_empty_tree.c
lib/libfdt/fdt_ro.c
lib/libfdt/fdt_rw.c
lib/libfdt/fdt_strerror.c
lib/libfdt/fdt_sw.c
lib/libfdt/fdt_wip.c
lib/libfdt/libfdt_internal.h
net/net.c
spl/Makefile
tools/Makefile
tools/aisimage.c
tools/bmp_logo.c
tools/dtc-version.sh [new file with mode: 0755]
tools/imximage.c
tools/imximage.h
tools/kwbimage.c
tools/logos/siemens.bmp [new file with mode: 0644]
tools/mkenvimage.c
tools/mkimage.c
tools/mkimage.h
tools/mxsboot.c
tools/mxsimage.c [new file with mode: 0644]
tools/mxsimage.h [new file with mode: 0644]
tools/omapimage.c
tools/pblimage.c
tools/ublimage.c

index d1282e790e43d56bfd9aa444db5d740d7ff133a4..255d89f8933c9a6fd9bf9456d110bb005bede67c 100644 (file)
@@ -16,6 +16,7 @@
 *.patch
 *.bin
 *.cfgtmp
+*.dts.tmp
 
 # Build tree
 /build-*
index b1a59cc22fed296bdc5946468038c3f20f17ab1b..41961256a63665425559ea85abd1f2c8d37dcd6b 100644 (file)
@@ -43,10 +43,14 @@ at [2].
 [1] http://spdx.org/
 [2] http://spdx.org/licenses/
 
-Full name                                      SPDX Identifier OSI Approved    File name       URI
+Full name                                      SPDX Identifier OSI Approved    File name               URI
 =======================================================================================================================================
-GNU General Public License v2.0 only           GPL-2.0         Y               gpl-2.0.txt     http://www.gnu.org/licenses/gpl-2.0.txt
-GNU General Public License v2.0 or later       GPL-2.0+        Y               gpl-2.0.txt     http://www.gnu.org/licenses/gpl-2.0.txt
-GNU Library General Public License v2 or later LGPL-2.0+       Y               lgpl-2.0.txt    http://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt
-GNU Lesser General Public License v2.1 or later        LGPL-2.1+       Y               lgpl-2.1.txt    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
-eCos license version 2.0                       eCos-2.0                        eCos-2.0.txt    http://www.gnu.org/licenses/ecos-license.html
+GNU General Public License v2.0 only           GPL-2.0         Y               gpl-2.0.txt             http://www.gnu.org/licenses/gpl-2.0.txt
+GNU General Public License v2.0 or later       GPL-2.0+        Y               gpl-2.0.txt             http://www.gnu.org/licenses/gpl-2.0.txt
+GNU Library General Public License v2 or later LGPL-2.0+       Y               lgpl-2.0.txt            http://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt
+GNU Lesser General Public License v2.1 or later        LGPL-2.1+       Y               lgpl-2.1.txt            http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
+eCos license version 2.0                       eCos-2.0                        eCos-2.0.txt            http://www.gnu.org/licenses/ecos-license.html
+BSD 2-Clause License                           BSD-2-Clause    Y               bsd-2-clause.txt        http://spdx.org/licenses/BSD-2-Clause
+BSD 3-clause "New" or "Revised" License                BSD-3-Clause    Y               bsd-3-clause.txt        http://spdx.org/licenses/BSD-3-Clause#licenseText
+IBM PIBS (PowerPC Initialization and           ibm-pibs                        ibm-pibs.txt
+       Boot Software) license
diff --git a/Licenses/bsd-2-clause.txt b/Licenses/bsd-2-clause.txt
new file mode 100644 (file)
index 0000000..af69764
--- /dev/null
@@ -0,0 +1,25 @@
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+1. Redistributions of source code must retain the above
+   copyright notice, this list of conditions and the following
+   disclaimer.
+2. Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following
+   disclaimer in the documentation and/or other materials
+   provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Licenses/bsd-3-clause.txt b/Licenses/bsd-3-clause.txt
new file mode 100644 (file)
index 0000000..aac5e2a
--- /dev/null
@@ -0,0 +1,24 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions, and the following disclaimer,
+   without modification.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The names of the above-listed copyright holders may not be used
+   to endorse or promote products derived from this software without
+   specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Licenses/ibm-pibs.txt b/Licenses/ibm-pibs.txt
new file mode 100644 (file)
index 0000000..4cd7523
--- /dev/null
@@ -0,0 +1,17 @@
+This source code has been made available to you by IBM on an AS-IS
+basis.  Anyone receiving this source is licensed under IBM
+copyrights to use it in any way he or she deems fit, including
+copying it, modifying it, compiling it, and redistributing it either
+with or without modifications.  No license under IBM patents or
+patent applications is to be implied by the copyright license.
+
+Any user of this software should understand that IBM cannot provide
+technical support for this software and will not be responsible for
+any consequences resulting from the use of this software.
+
+Any person who transfers this source code or any derivative work
+must include the IBM copyright notice, this paragraph, and the
+preceding two paragraphs in the transferred software.
+
+COPYRIGHT   I B M   CORPORATION 1995
+LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
index 9700ec9e8043c5d1d40e592150379face78c3034..86a5ce402eb46d11d28e2e90f868955bc6a98456 100644 (file)
@@ -184,7 +184,6 @@ Matthias Fuchs <matthias.fuchs@esd-electronics.com>
        APC405          PPC405GP
        AR405           PPC405GP
        ASH405          PPC405EP
-       CANBT           PPC405CR
        CPCI2DP         PPC405GP
        CPCI405         PPC405GP
        CPCI4052        PPC405GP
@@ -477,6 +476,10 @@ Ira W. Snyder <iws@ovro.caltech.edu>
 
        P2020COME       P2020
 
+York Sun <yorksun@freescale.com>
+
+       T4240EMU        T4240
+
 Timur Tabi <timur@freescale.com>
 
        MPC8349E-mITX   MPC8349
@@ -544,6 +547,10 @@ Detlev Zundel <dzu@denx.de>
 
        inka4x0         MPC5200
 
+Po Liu <po.liu@freescale.com>
+
+       C29XPCIE        C29X
+
 -------------------------------------------------------------------------
 
 Unknown / orphaned boards:
@@ -1091,6 +1098,11 @@ Sergey Yanovich <ynvich@gmail.com>
 
        lp8x4x          xscale/pxa
 
+Roger Meier <r.meier@siemens.com>
+       dxr2                    ARM ARMV7 (AM335x SoC)
+       pxm2                    ARM ARMV7 (AM335x SoC)
+       rut                     ARM ARMV7 (AM335x SoC)
+
 -------------------------------------------------------------------------
 
 Unknown / orphaned boards:
@@ -1367,7 +1379,7 @@ Dimitar Penev <dpn@switchfin.org>
 #      Board           CPU                                             #
 #########################################################################
 
-Macpaul Lin <macpaul@andestech.com>
+Andes <uboot@andestech.com>
 
        ADP-AG101       N1213 (AG101 SoC)
        ADP-AG101P      N1213 (AG101P XC5 FPGA)
index 488db8af947f6c31b3ffd789278973b6538757e3..5de84b6474ef406a6925b54f907bb907e894b4c9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -6,9 +6,9 @@
 #
 
 VERSION = 2013
-PATCHLEVEL = 07
+PATCHLEVEL = 10
 SUBLEVEL =
-EXTRAVERSION =
+EXTRAVERSION = -rc2
 ifneq "$(SUBLEVEL)" ""
 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 else
@@ -102,10 +102,11 @@ endif # ifneq ($(BUILD_DIR),)
 
 OBJTREE                := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
 SPLTREE                := $(OBJTREE)/spl
+TPLTREE                := $(OBJTREE)/tpl
 SRCTREE                := $(CURDIR)
 TOPDIR         := $(SRCTREE)
 LNDIR          := $(OBJTREE)
-export TOPDIR SRCTREE OBJTREE SPLTREE
+export TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE
 
 MKCONFIG       := $(SRCTREE)/mkconfig
 export MKCONFIG
@@ -397,6 +398,7 @@ ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
 ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
 ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
 ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
+ALL-$(CONFIG_TPL) += $(obj)tpl/u-boot-tpl.bin
 ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
 ifneq ($(CONFIG_SPL_TARGET),)
 ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET))
@@ -413,7 +415,7 @@ endif
 
 all:           $(ALL-y) $(SUBDIR_EXAMPLES)
 
-$(obj)u-boot.dtb:      $(obj)u-boot
+$(obj)u-boot.dtb:      checkdtc $(obj)u-boot
                $(MAKE) -C dts binary
                mv $(obj)dts/dt.dtb $@
 
@@ -475,13 +477,25 @@ $(obj)u-boot.sha1:        $(obj)u-boot.bin
 $(obj)u-boot.dis:      $(obj)u-boot
                $(OBJDUMP) -d $< > $@
 
+# $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate,
+# $(4) is pad-to
+SPL_PAD_APPEND = \
+               $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \
+               $(1) $(obj)$(3); \
+               cat $(obj)$(3) $(2) > $@; \
+               rm $(obj)$(3)
 
+ifdef CONFIG_TPL
+SPL_PAYLOAD := $(obj)tpl/u-boot-with-tpl.bin
+else
+SPL_PAYLOAD := $(obj)u-boot.bin
+endif
 
-$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
-               $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \
-                       -I binary -O binary $< $(obj)spl/u-boot-spl-pad.bin
-               cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@
-               rm $(obj)spl/u-boot-spl-pad.bin
+$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(SPL_PAYLOAD)
+               $(call SPL_PAD_APPEND,$<,$(SPL_PAYLOAD),spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
+
+$(obj)tpl/u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin
+               $(call SPL_PAD_APPEND,$<,$(obj)u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO))
 
 $(obj)u-boot-with-spl.imx: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
                $(MAKE) -C $(SRCTREE)/arch/arm/imx-common \
@@ -607,12 +621,17 @@ $(obj)u-boot-nand.bin:    nand_spl $(obj)u-boot.bin
 $(obj)spl/u-boot-spl.bin:      $(SUBDIR_TOOLS) depend
                $(MAKE) -C spl all
 
+$(obj)tpl/u-boot-tpl.bin:      $(SUBDIR_TOOLS) depend
+               $(MAKE) -C spl all CONFIG_TPL_BUILD=y
+
 updater:
                $(MAKE) -C tools/updater all
 
 # Explicitly make _depend in subdirs containing multiple targets to prevent
 # parallel sub-makes creating .depend files simultaneously.
 depend dep:    $(TIMESTAMP_FILE) $(VERSION_FILE) \
+               $(obj)include/spl-autoconf.mk \
+               $(obj)include/tpl-autoconf.mk \
                $(obj)include/autoconf.mk \
                $(obj)include/generated/generic-asm-offsets.h \
                $(obj)include/generated/asm-offsets.h
@@ -667,6 +686,12 @@ checkgcc4:
                false; \
        fi
 
+checkdtc:
+       @if test $(call dtc-version) -lt 0104; then \
+               echo '*** Your dtc is too old, please upgrade to dtc 1.4 or newer'; \
+               false; \
+       fi
+
 #
 # Auto-generate the autoconf.mk file (which is included by all makefiles)
 #
@@ -688,12 +713,34 @@ $(obj)include/autoconf.mk: $(obj)include/config.h
                sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
        mv $@.tmp $@
 
+# Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)
+$(obj)include/tpl-autoconf.mk: $(obj)include/config.h
+       @$(XECHO) Generating $@ ; \
+       set -e ; \
+       : Extract the config macros ; \
+       $(CPP) $(CFLAGS) -DCONFIG_TPL_BUILD  -DCONFIG_SPL_BUILD\
+                       -DDO_DEPS_ONLY -dM include/common.h | \
+       sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
+       mv $@.tmp $@
+
+$(obj)include/spl-autoconf.mk: $(obj)include/config.h
+       @$(XECHO) Generating $@ ; \
+       set -e ; \
+       : Extract the config macros ; \
+       $(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h | \
+       sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
+       mv $@.tmp $@
+
 $(obj)include/generated/generic-asm-offsets.h: $(obj)include/autoconf.mk.dep \
+       $(obj)include/spl-autoconf.mk \
+       $(obj)include/tpl-autoconf.mk \
        $(obj)lib/asm-offsets.s
        @$(XECHO) Generating $@
        tools/scripts/make-asm-offsets $(obj)lib/asm-offsets.s $@
 
 $(obj)lib/asm-offsets.s:       $(obj)include/autoconf.mk.dep \
+       $(obj)include/spl-autoconf.mk \
+       $(obj)include/tpl-autoconf.mk \
        $(src)lib/asm-offsets.c
        @mkdir -p $(obj)lib
        $(CC) -DDO_DEPS_ONLY \
@@ -701,11 +748,15 @@ $(obj)lib/asm-offsets.s:  $(obj)include/autoconf.mk.dep \
                -o $@ $(src)lib/asm-offsets.c -c -S
 
 $(obj)include/generated/asm-offsets.h: $(obj)include/autoconf.mk.dep \
+       $(obj)include/spl-autoconf.mk \
+       $(obj)include/tpl-autoconf.mk \
        $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
        @$(XECHO) Generating $@
        tools/scripts/make-asm-offsets $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s $@
 
-$(obj)$(CPUDIR)/$(SOC)/asm-offsets.s:  $(obj)include/autoconf.mk.dep
+$(obj)$(CPUDIR)/$(SOC)/asm-offsets.s:  $(obj)include/autoconf.mk.dep \
+       $(obj)include/spl-autoconf.mk \
+       $(obj)include/tpl-autoconf.mk
        @mkdir -p $(obj)$(CPUDIR)/$(SOC)
        if [ -f $(src)$(CPUDIR)/$(SOC)/asm-offsets.c ];then \
                $(CC) -DDO_DEPS_ONLY \
@@ -777,7 +828,9 @@ include/license.h: tools/bin2header COPYING
 unconfig:
        @rm -f $(obj)include/config.h $(obj)include/config.mk \
                $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
-               $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep
+               $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep \
+               $(obj)include/spl-autoconf.mk \
+               $(obj)include/tpl-autoconf.mk
 
 %_config::     unconfig
        @$(MKCONFIG) -A $(@:_config=)
@@ -863,6 +916,8 @@ clobber:    tidy
        @rm -f $(obj)nand_spl/{u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map}
        @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.map}
        @rm -f $(obj)spl/u-boot-spl.lds
+       @rm -f $(obj)tpl/{u-boot-tpl,u-boot-tpl.bin,u-boot-tpl.map}
+       @rm -f $(obj)tpl/u-boot-spl.lds
        @rm -f $(obj)MLO MLO.byteswap
        @rm -f $(obj)SPL
        @rm -f $(obj)tools/xway-swap-bytes
diff --git a/README b/README
index 78aa5a518031e47c917b85ca3ebb65cc9325d823..677c3dc252174f62dacc13bb93ab4aad702e63a6 100644 (file)
--- a/README
+++ b/README
@@ -406,13 +406,25 @@ The following options need to be configured:
                This is the value to write into CCSR offset 0x18600
                according to the A004510 workaround.
 
+               CONFIG_SYS_FSL_DSP_DDR_ADDR
+               This value denotes start offset of DDR memory which is
+               connected exclusively to the DSP cores.
+
                CONFIG_SYS_FSL_DSP_M2_RAM_ADDR
                This value denotes start offset of M2 memory
                which is directly connected to the DSP core.
 
+               CONFIG_SYS_FSL_DSP_M3_RAM_ADDR
+               This value denotes start offset of M3 memory which is directly
+               connected to the DSP core.
+
                CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT
                This value denotes start offset of DSP CCSR space.
 
+               CONFIG_SYS_FSL_DDR_EMU
+               Specify emulator support for DDR. Some DDR features such as
+               deskew training are not available.
+
 - Generic CPU options:
                CONFIG_SYS_BIG_ENDIAN, CONFIG_SYS_LITTLE_ENDIAN
 
@@ -3078,6 +3090,14 @@ FIT uImage format:
                Support for NAND boot using simple NAND drivers that
                expose the cmd_ctrl() interface.
 
+               CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
+               Set for the SPL on PPC mpc8xxx targets, support for
+               arch/powerpc/cpu/mpc8xxx/ddr/libddr.o in SPL binary.
+
+               CONFIG_SPL_COMMON_INIT_DDR
+               Set for common ddr init with serial presence detect in
+               SPL binary.
+
                CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT,
                CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE,
                CONFIG_SYS_NAND_BLOCK_SIZE, CONFIG_SYS_NAND_BAD_BLOCK_POS,
@@ -3147,6 +3167,17 @@ FIT uImage format:
                option to re-enable it. This will affect the output of the
                bootm command when booting a FIT image.
 
+- TPL framework
+               CONFIG_TPL
+               Enable building of TPL globally.
+
+               CONFIG_TPL_PAD_TO
+               Image offset to which the TPL should be padded before appending
+               the TPL payload. By default, this is defined as
+                CONFIG_SPL_MAX_SIZE, or 0 if CONFIG_SPL_MAX_SIZE is undefined.
+                CONFIG_SPL_PAD_TO must be either 0, meaning to append the SPL
+                payload without any padding, or >= CONFIG_SPL_MAX_SIZE.
+
 Modem Support:
 --------------
 
@@ -4184,6 +4215,11 @@ Low Level (hardware related) configuration options:
                that is executed before the actual U-Boot. E.g. when
                compiling a NAND SPL.
 
+- CONFIG_TPL_BUILD
+               Modifies the behaviour of start.S  when compiling a loader
+               that is executed after the SPL and before the actual U-Boot.
+               It is loaded by the SPL.
+
 - CONFIG_SYS_MPC85XX_NO_RESETVEC
                Only for 85xx systems. If this variable is specified, the section
                .resetvec is not kept and the section .bootpg is placed in the
@@ -4630,6 +4666,12 @@ List of environment variables (most likely not complete):
 
   npe_ucode    - set load address for the NPE microcode
 
+  silent_linux  - If set then linux will be told to boot silently, by
+                 changing the console to be empty. If "yes" it will be
+                 made silent. If "no" it will not be made silent. If
+                 unset, then it will be made silent if the U-Boot console
+                 is silent.
+
   tftpsrcport  - If this is set, the value is used for TFTP's
                  UDP source port.
 
diff --git a/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx23.cfg b/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx23.cfg
new file mode 100644 (file)
index 0000000..8118767
--- /dev/null
@@ -0,0 +1,6 @@
+SECTION 0x0 BOOTABLE
+ TAG LAST
+ LOAD     0x0        spl/u-boot-spl.bin
+ CALL     0x14       0x0
+ LOAD     0x40000100 u-boot.bin
+ CALL     0x40000100 0x0
diff --git a/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx28.cfg b/arch/arm/cpu/arm926ejs/mxs/mxsimage.mx28.cfg
new file mode 100644 (file)
index 0000000..ea772f0
--- /dev/null
@@ -0,0 +1,8 @@
+SECTION 0x0 BOOTABLE
+ TAG LAST
+ LOAD     0x0        spl/u-boot-spl.bin
+ LOAD IVT 0x8000     0x14
+ CALL HAB 0x8000     0x0
+ LOAD     0x40000100 u-boot.bin
+ LOAD IVT 0x8000     0x40000100
+ CALL HAB 0x8000     0x0
index e3b6cd95f9e20bcad6c9ef693608daff63375082..f3579590598332406be2cd9f7455d7a6dd8184ab 100644 (file)
@@ -36,7 +36,7 @@ static void mxs_power_clock2pll(void)
                        CLKCTRL_CLKSEQ_BYPASS_CPU);
 }
 
-static void mxs_power_clear_auto_restart(void)
+static void mxs_power_set_auto_restart(void)
 {
        struct mxs_rtc_regs *rtc_regs =
                (struct mxs_rtc_regs *)MXS_RTC_BASE;
@@ -49,10 +49,7 @@ static void mxs_power_clear_auto_restart(void)
        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.
-        */
+       /* Do nothing if flag already set */
        if (readl(&rtc_regs->hw_rtc_persistent0) & RTC_PERSISTENT0_AUTO_RESTART)
                return;
 
@@ -911,7 +908,7 @@ void mxs_power_init(void)
        mxs_ungate_power();
 
        mxs_power_clock2xtal();
-       mxs_power_clear_auto_restart();
+       mxs_power_set_auto_restart();
        mxs_power_set_linreg();
        mxs_power_setup_5v_detect();
 
index 4a3fca56a1a94409abd7bf4d2e2461af271fbf82..e55e1c660255a0e5c9034a5d7a9d4ea283a4cc4b 100644 (file)
@@ -144,6 +144,30 @@ void at91_macb_hw_init(void)
        /* Enable clock */
        at91_periph_clk_enable(ATMEL_ID_EMAC);
 }
+
+void at91_gmac_hw_init(void)
+{
+       at91_set_a_periph(AT91_PIO_PORTB, 0, 0);        /* GTX0 */
+       at91_set_a_periph(AT91_PIO_PORTB, 1, 0);        /* GTX1 */
+       at91_set_a_periph(AT91_PIO_PORTB, 2, 0);        /* GTX2 */
+       at91_set_a_periph(AT91_PIO_PORTB, 3, 0);        /* GTX3 */
+       at91_set_a_periph(AT91_PIO_PORTB, 4, 0);        /* GRX0 */
+       at91_set_a_periph(AT91_PIO_PORTB, 5, 0);        /* GRX1 */
+       at91_set_a_periph(AT91_PIO_PORTB, 6, 0);        /* GRX2 */
+       at91_set_a_periph(AT91_PIO_PORTB, 7, 0);        /* GRX3 */
+       at91_set_a_periph(AT91_PIO_PORTB, 8, 0);        /* GTXCK */
+       at91_set_a_periph(AT91_PIO_PORTB, 9, 0);        /* GTXEN */
+
+       at91_set_a_periph(AT91_PIO_PORTB, 11, 0);       /* GRXCK */
+       at91_set_a_periph(AT91_PIO_PORTB, 13, 0);       /* GRXER */
+
+       at91_set_a_periph(AT91_PIO_PORTB, 16, 0);       /* GMDC */
+       at91_set_a_periph(AT91_PIO_PORTB, 17, 0);       /* GMDIO */
+       at91_set_a_periph(AT91_PIO_PORTB, 18, 0);       /* G125CK */
+
+       /* Enable clock */
+       at91_periph_clk_enable(ATMEL_ID_GMAC);
+}
 #endif
 
 #ifdef CONFIG_LCD
index fbbb365cb600942e9a8d7ff095b135c48dfd7345..6bef2544564a6e2924ee11426432453f623e0baf 100644 (file)
@@ -85,7 +85,7 @@ void set_usboh3_clk(void)
                        MXC_CCM_CSCDR1_USBOH3_CLK_PODF(1));
 }
 
-void enable_usboh3_clk(unsigned char enable)
+void enable_usboh3_clk(bool enable)
 {
        unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF;
 
@@ -122,7 +122,7 @@ void set_usb_phy_clk(void)
 }
 
 #if defined(CONFIG_MX51)
-void enable_usb_phy1_clk(unsigned char enable)
+void enable_usb_phy1_clk(bool enable)
 {
        unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF;
 
@@ -131,12 +131,12 @@ void enable_usb_phy1_clk(unsigned char enable)
                        MXC_CCM_CCGR2_USB_PHY(cg));
 }
 
-void enable_usb_phy2_clk(unsigned char enable)
+void enable_usb_phy2_clk(bool enable)
 {
        /* i.MX51 has a single USB PHY clock, so do nothing here. */
 }
 #elif defined(CONFIG_MX53)
-void enable_usb_phy1_clk(unsigned char enable)
+void enable_usb_phy1_clk(bool enable)
 {
        unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF;
 
@@ -145,7 +145,7 @@ void enable_usb_phy1_clk(unsigned char enable)
                        MXC_CCM_CCGR4_USB_PHY1(cg));
 }
 
-void enable_usb_phy2_clk(unsigned char enable)
+void enable_usb_phy2_clk(bool enable)
 {
        unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF;
 
index c5e98582d06fa9dd1a144d9b7ebc44a01a873445..6d736174dbb09e38b50c4b9432c91dc94b6795e6 100644 (file)
@@ -11,10 +11,11 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(SOC).o
 
-COBJS  = soc.o clock.o
+COBJS-y        = soc.o clock.o
+COBJS-$(CONFIG_SECURE_BOOT)    += hab.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS-y))
 
 all:   $(obj).depend $(LIB)
 
diff --git a/arch/arm/cpu/armv7/mx6/hab.c b/arch/arm/cpu/armv7/mx6/hab.c
new file mode 100644 (file)
index 0000000..5187775
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2010-2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/hab.h>
+
+/* -------- start of HAB API updates ------------*/
+#define hab_rvt_report_event ((hab_rvt_report_event_t *)HAB_RVT_REPORT_EVENT)
+#define hab_rvt_report_status ((hab_rvt_report_status_t *)HAB_RVT_REPORT_STATUS)
+#define hab_rvt_authenticate_image \
+       ((hab_rvt_authenticate_image_t *)HAB_RVT_AUTHENTICATE_IMAGE)
+#define hab_rvt_entry ((hab_rvt_entry_t *)HAB_RVT_ENTRY)
+#define hab_rvt_exit ((hab_rvt_exit_t *)HAB_RVT_EXIT)
+#define hab_rvt_clock_init HAB_RVT_CLOCK_INIT
+
+bool is_hab_enabled(void)
+{
+       struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
+       struct fuse_bank *bank = &ocotp->bank[0];
+       struct fuse_bank0_regs *fuse =
+               (struct fuse_bank0_regs *)bank->fuse_regs;
+       uint32_t reg = readl(&fuse->cfg5);
+
+       return (reg & 0x2) == 0x2;
+}
+
+void display_event(uint8_t *event_data, size_t bytes)
+{
+       uint32_t i;
+
+       if (!(event_data && bytes > 0))
+               return;
+
+       for (i = 0; i < bytes; i++) {
+               if (i == 0)
+                       printf("\t0x%02x", event_data[i]);
+               else if ((i % 8) == 0)
+                       printf("\n\t0x%02x", event_data[i]);
+               else
+                       printf(" 0x%02x", event_data[i]);
+       }
+}
+
+int get_hab_status(void)
+{
+       uint32_t index = 0; /* Loop index */
+       uint8_t event_data[128]; /* Event data buffer */
+       size_t bytes = sizeof(event_data); /* Event size in bytes */
+       enum hab_config config = 0;
+       enum hab_state state = 0;
+
+       if (is_hab_enabled())
+               puts("\nSecure boot enabled\n");
+       else
+               puts("\nSecure boot disabled\n");
+
+       /* Check HAB status */
+       if (hab_rvt_report_status(&config, &state) != HAB_SUCCESS) {
+               printf("\nHAB Configuration: 0x%02x, HAB State: 0x%02x\n",
+                      config, state);
+
+               /* Display HAB Error events */
+               while (hab_rvt_report_event(HAB_FAILURE, index, event_data,
+                                       &bytes) == HAB_SUCCESS) {
+                       puts("\n");
+                       printf("--------- HAB Event %d -----------------\n",
+                              index + 1);
+                       puts("event data:\n");
+                       display_event(event_data, bytes);
+                       puts("\n");
+                       bytes = sizeof(event_data);
+                       index++;
+               }
+       }
+       /* Display message if no HAB events are found */
+       else {
+               printf("\nHAB Configuration: 0x%02x, HAB State: 0x%02x\n",
+                      config, state);
+               puts("No HAB Events Found!\n\n");
+       }
+       return 0;
+}
+
+int do_hab_status(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       if ((argc != 1)) {
+               cmd_usage(cmdtp);
+               return 1;
+       }
+
+       get_hab_status();
+
+       return 0;
+}
+
+U_BOOT_CMD(
+               hab_status, CONFIG_SYS_MAXARGS, 1, do_hab_status,
+               "display HAB status",
+               ""
+         );
index 8150bffb8ce60b5c1947f65e5554598b24316f6d..a3902962b5249c4ebf9ef66df991d42b69e007f8 100644 (file)
@@ -213,6 +213,34 @@ const struct boot_mode soc_boot_modes[] = {
 
 void s_init(void)
 {
+       struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
+       int is_6q = is_cpu_type(MXC_CPU_MX6Q);
+       u32 mask480;
+       u32 mask528;
+
+       /* Due to hardware limitation, on MX6Q we need to gate/ungate all PFDs
+        * to make sure PFD is working right, otherwise, PFDs may
+        * not output clock after reset, MX6DL and MX6SL have added 396M pfd
+        * workaround in ROM code, as bus clock need it
+        */
+
+       mask480 = ANATOP_PFD_CLKGATE_MASK(0) |
+               ANATOP_PFD_CLKGATE_MASK(1) |
+               ANATOP_PFD_CLKGATE_MASK(2) |
+               ANATOP_PFD_CLKGATE_MASK(3);
+       mask528 = ANATOP_PFD_CLKGATE_MASK(0) |
+               ANATOP_PFD_CLKGATE_MASK(1) |
+               ANATOP_PFD_CLKGATE_MASK(3);
+
+       /*
+        * Don't reset PFD2 on DL/S
+        */
+       if (is_6q)
+               mask528 |= ANATOP_PFD_CLKGATE_MASK(2);
+       writel(mask480, &anatop->pfd_480_set);
+       writel(mask528, &anatop->pfd_528_set);
+       writel(mask480, &anatop->pfd_480_clr);
+       writel(mask528, &anatop->pfd_528_clr);
 }
 
 #ifdef CONFIG_IMX_HDMI
index e903ed9ac492f6967475b8a9a2b39602eae33e90..9f989ff860e7f6e63acf9236fce81a7174c7bfcc 100644 (file)
@@ -183,8 +183,7 @@ static void dpll3_init_34xx(u32 sil_index, u32 clk_index)
                 * if running from flash, jump to small relocated code
                 * area in SRAM.
                 */
-               f_lock_pll = (void *) ((u32) &_end_vect - (u32) &_start +
-                               SRAM_VECT_CODE);
+               f_lock_pll = (void *) (SRAM_CLK_CODE);
 
                p0 = readl(&prcm_base->clken_pll);
                sr32(&p0, 0, 3, PLL_FAST_RELOCK_BYPASS);
@@ -401,8 +400,7 @@ static void dpll3_init_36xx(u32 sil_index, u32 clk_index)
                 * if running from flash, jump to small relocated code
                 * area in SRAM.
                 */
-               f_lock_pll = (void *) ((u32) &_end_vect - (u32) &_start +
-                               SRAM_VECT_CODE);
+               f_lock_pll = (void *) (SRAM_CLK_CODE);
 
                p0 = readl(&prcm_base->clken_pll);
                sr32(&p0, 0, 3, PLL_FAST_RELOCK_BYPASS);
index 98c3c03a0eb16e6f8fac2d23aa2246d4c5e13288..6f7261b7b8ead7c91d760d039ba0f33584e31544 100644 (file)
@@ -69,15 +69,13 @@ ENDPROC(do_omap3_emu_romcode_call)
  *************************************************************************/
 ENTRY(cpy_clk_code)
        /* Copy DPLL code into SRAM */
-       adr     r0, go_to_speed         /* get addr of clock setting code */
-       mov     r2, #384                /* r2 size to copy (div by 32 bytes) */
-       mov     r1, r1                  /* r1 <- dest address (passed in) */
-       add     r2, r2, r0              /* r2 <- source end address */
+       adr     r0, go_to_speed         /* copy from start of go_to_speed... */
+       adr     r2, lowlevel_init       /* ... up to start of low_level_init */
 next2:
        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     next2
+       blo     next2
        mov     pc, lr                  /* back to caller */
 ENDPROC(cpy_clk_code)
 
index 310df5a6e226cf12575b89ba5f9501cd8569d5a2..6a225c8cb268eb59f3651165af28bc6e26f5abfd 100644 (file)
@@ -50,6 +50,7 @@ static const struct dpll_params mpu_dpll_params_1400mhz[NUM_SYS_CLKS] = {
 /*
  * dpll locked at 1600 MHz - MPU clk at 800 MHz(OPP Turbo 4430)
  * OMAP4430 OPP_TURBO frequency
+ * OMAP4470 OPP_NOM frequency
  */
 static const struct dpll_params mpu_dpll_params_1600mhz[NUM_SYS_CLKS] = {
        {200, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
@@ -76,6 +77,7 @@ static const struct dpll_params mpu_dpll_params_1200mhz[NUM_SYS_CLKS] = {
 };
 
 /* OMAP4460 OPP_NOM frequency */
+/* OMAP4470 OPP_NOM (Low Power) frequency */
 static const struct dpll_params core_dpll_params_1600mhz[NUM_SYS_CLKS] = {
        {200, 2, 1, 5, 8, 4, 6, 5, -1, -1, -1, -1},     /* 12 MHz   */
        {800, 12, 1, 5, 8, 4, 6, 5, -1, -1, -1, -1},    /* 13 MHz   */
@@ -198,6 +200,20 @@ struct dplls omap4460_dplls = {
        .ddr = NULL
 };
 
+struct dplls omap4470_dplls = {
+       .mpu = mpu_dpll_params_1600mhz,
+       .core = core_dpll_params_1600mhz,
+       .per = per_dpll_params_1536mhz,
+       .iva = iva_dpll_params_1862mhz,
+#ifdef CONFIG_SYS_OMAP_ABE_SYSCK
+       .abe = abe_dpll_params_sysclk_196608khz,
+#else
+       .abe = &abe_dpll_params_32k_196608khz,
+#endif
+       .usb = usb_dpll_params_1920mhz,
+       .ddr = NULL
+};
+
 struct pmic_data twl6030_4430es1 = {
        .base_offset = PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV,
        .step = 12660, /* 12.66 mV represented in uV */
@@ -208,6 +224,7 @@ struct pmic_data twl6030_4430es1 = {
        .pmic_write     = omap_vc_bypass_send_value,
 };
 
+/* twl6030 struct is used for TWL6030 and TWL6032 PMIC */
 struct pmic_data twl6030 = {
        .base_offset = PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV,
        .step = 12660, /* 12.66 mV represented in uV */
@@ -271,6 +288,20 @@ struct vcores_data omap4460_volts = {
        .mm.pmic = &twl6030,
 };
 
+struct vcores_data omap4470_volts = {
+       .mpu.value = 1200,
+       .mpu.addr = SMPS_REG_ADDR_SMPS1,
+       .mpu.pmic = &twl6030,
+
+       .core.value = 1126,
+       .core.addr = SMPS_REG_ADDR_SMPS1,
+       .core.pmic = &twl6030,
+
+       .mm.value = 1137,
+       .mm.addr = SMPS_REG_ADDR_SMPS1,
+       .mm.pmic = &twl6030,
+};
+
 /*
  * Enable essential clock domains, modules and
  * do some additional special settings needed
@@ -476,6 +507,11 @@ void hw_data_init(void)
        *omap_vcores = &omap4460_volts;
        break;
 
+       case OMAP4470_ES1_0:
+       *dplls_data = &omap4470_dplls;
+       *omap_vcores = &omap4470_volts;
+       break;
+
        default:
                printf("\n INVALID OMAP REVISION ");
        }
index 4da0fc0ad56913190da90a4bf64ef8ed740bba24..b0598a0774d5a0ce6a085a244e782c16439418d3 100644 (file)
@@ -138,6 +138,9 @@ void init_omap_revision(void)
                break;
        case MIDR_CORTEX_A9_R2P10:
                switch (readl(CONTROL_ID_CODE)) {
+               case OMAP4470_CONTROL_ID_CODE_ES1_0:
+                       *omap_si_rev = OMAP4470_ES1_0;
+                       break;
                case OMAP4460_CONTROL_ID_CODE_ES1_1:
                        *omap_si_rev = OMAP4460_ES1_1;
                        break;
index d76dde719a1a00523d07f7879a10393ddc0071b3..67a79261f778c6afab3d0e3870eac1e18cff8411 100644 (file)
@@ -60,6 +60,20 @@ static const struct emif_regs emif_regs_elpida_380_mhz_1cs = {
        .emif_ddr_phy_ctlr_1            = 0x049ff418
 };
 
+const struct emif_regs emif_regs_elpida_400_mhz_1cs = {
+       .sdram_config_init              = 0x80800eb2,
+       .sdram_config                   = 0x80801ab2,
+       .ref_ctrl                       = 0x00000618,
+       .sdram_tim1                     = 0x10eb0662,
+       .sdram_tim2                     = 0x20370dd2,
+       .sdram_tim3                     = 0x00b1c33f,
+       .read_idle_ctrl                 = 0x000501ff,
+       .zq_config                      = 0x500b3215,
+       .temp_alert_config              = 0x58016893,
+       .emif_ddr_phy_ctlr_1_init       = 0x049ffff5,
+       .emif_ddr_phy_ctlr_1            = 0x049ff418
+};
+
 const struct emif_regs emif_regs_elpida_400_mhz_2cs = {
        .sdram_config_init              = 0x80000eb9,
        .sdram_config                   = 0x80001ab9,
@@ -107,8 +121,10 @@ static void emif_get_reg_dump_sdp(u32 emif_nr, const struct emif_regs **regs)
                *regs = &emif_regs_elpida_380_mhz_1cs;
        else if (omap4_rev == OMAP4430_ES2_0)
                *regs = &emif_regs_elpida_200_mhz_2cs;
-       else
+       else if (omap4_rev < OMAP4470_ES1_0)
                *regs = &emif_regs_elpida_400_mhz_2cs;
+       else
+               *regs = &emif_regs_elpida_400_mhz_1cs;
 }
 void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
        __attribute__((weak, alias("emif_get_reg_dump_sdp")));
@@ -138,20 +154,31 @@ static const struct lpddr2_device_details elpida_2G_S4_details = {
        .manufacturer   = LPDDR2_MANUFACTURER_ELPIDA
 };
 
+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
+};
+
 struct lpddr2_device_details *emif_get_device_details_sdp(u32 emif_nr, u8 cs,
                        struct lpddr2_device_details *lpddr2_dev_details)
 {
        u32 omap_rev = omap_revision();
 
        /* EMIF1 & EMIF2 have identical configuration */
-       if ((omap_rev == OMAP4430_ES1_0) && (cs == CS1)) {
-               /* Nothing connected on CS1 for ES1.0 */
+       if (((omap_rev == OMAP4430_ES1_0) || (omap_rev == OMAP4470_ES1_0))
+               && (cs == CS1)) {
+               /* Nothing connected on CS1 for 4430/4470 ES1.0 */
                return NULL;
-       } else {
-               /* In all other cases Elpida 2G device */
+       } else if (omap_rev < OMAP4470_ES1_0) {
+               /* In all other 4430/4460 cases Elpida 2G device */
                *lpddr2_dev_details = elpida_2G_S4_details;
-               return lpddr2_dev_details;
+       } else {
+               /* 4470: 4G device */
+               *lpddr2_dev_details = elpida_4G_S4_details;
        }
+       return lpddr2_dev_details;
 }
 
 struct lpddr2_device_details *emif_get_device_details(u32 emif_nr, u8 cs,
@@ -265,7 +292,7 @@ void emif_get_device_timings_sdp(u32 emif_nr,
        /* Identical devices on EMIF1 & EMIF2 */
        *cs0_device_timings = &elpida_2G_S4_timings;
 
-       if (omap_rev == OMAP4430_ES1_0)
+       if ((omap_rev == OMAP4430_ES1_0) || (omap_rev == OMAP4470_ES1_0))
                *cs1_device_timings = NULL;
        else
                *cs1_device_timings = &elpida_2G_S4_timings;
index 3b48ac9b2b275f9a6059a5f4e4c06bfedeb843ba..5024fc55e275d6f11e12830b3cdc5eea4b5704ef 100644 (file)
@@ -13,7 +13,7 @@ include $(TOPDIR)/config.mk
 LIB    =  $(obj)lib$(SOC).o
 
 SOBJS  := lowlevel_init.o
-COBJS-y        := misc.o timer.o
+COBJS-y        := misc.o timer.o reset_manager.o
 COBJS-$(CONFIG_SPL_BUILD) += spl.o
 
 COBJS  := $(COBJS-y)
index 66edb3c20fbba6d20c9efbae32a6446e8c21be6d..2f1c7160f1ff458bef09c2a3b7078a540d47b5e8 100644 (file)
@@ -6,36 +6,9 @@
 
 #include <common.h>
 #include <asm/io.h>
-#include <asm/arch/reset_manager.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static const struct socfpga_reset_manager *reset_manager_base =
-               (void *)SOCFPGA_RSTMGR_ADDRESS;
-
-/*
- * Write the reset manager register to cause reset
- */
-void reset_cpu(ulong addr)
-{
-       /* request a warm reset */
-       writel(RSTMGR_CTRL_SWWARMRSTREQ_LSB, &reset_manager_base->ctrl);
-       /*
-        * infinite loop here as watchdog will trigger and reset
-        * the processor
-        */
-       while (1)
-               ;
-}
-
-/*
- * Release peripherals from reset based on handoff
- */
-void reset_deassert_peripherals_handoff(void)
-{
-       writel(0, &reset_manager_base->per_mod_reset);
-}
-
 int dram_init(void)
 {
        gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE);
diff --git a/arch/arm/cpu/armv7/socfpga/reset_manager.c b/arch/arm/cpu/armv7/socfpga/reset_manager.c
new file mode 100644 (file)
index 0000000..e320c01
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ *  Copyright (C) 2013 Altera Corporation <www.altera.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/reset_manager.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static const struct socfpga_reset_manager *reset_manager_base =
+               (void *)SOCFPGA_RSTMGR_ADDRESS;
+
+/*
+ * Write the reset manager register to cause reset
+ */
+void reset_cpu(ulong addr)
+{
+       /* request a warm reset */
+       writel((1 << RSTMGR_CTRL_SWWARMRSTREQ_LSB),
+               &reset_manager_base->ctrl);
+       /*
+        * infinite loop here as watchdog will trigger and reset
+        * the processor
+        */
+       while (1)
+               ;
+}
+
+/*
+ * Release peripherals from reset based on handoff
+ */
+void reset_deassert_peripherals_handoff(void)
+{
+       writel(0, &reset_manager_base->per_mod_reset);
+}
diff --git a/arch/arm/cpu/armv7/tegra114/config.mk b/arch/arm/cpu/armv7/tegra114/config.mk
deleted file mode 100644 (file)
index cb1a19d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Copyright (c) 2010-2013, NVIDIA CORPORATION.  All rights reserved.
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms and conditions of the GNU General Public License,
-# version 2, as published by the Free Software Foundation.
-#
-# This program is distributed in the hope it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
-# more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-CONFIG_ARCH_DEVICE_TREE := tegra114
diff --git a/arch/arm/cpu/armv7/tegra20/config.mk b/arch/arm/cpu/armv7/tegra20/config.mk
deleted file mode 100644 (file)
index 3cac79b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# (C) Copyright 2010,2011
-# NVIDIA Corporation <www.nvidia.com>
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
-CONFIG_ARCH_DEVICE_TREE := tegra20
diff --git a/arch/arm/cpu/armv7/tegra30/config.mk b/arch/arm/cpu/armv7/tegra30/config.mk
deleted file mode 100644 (file)
index 719ca81..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Copyright (c) 2010-2012, NVIDIA CORPORATION.  All rights reserved.
-#
-# (C) Copyright 2002
-# Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms and conditions of the GNU General Public License,
-# version 2, as published by the Free Software Foundation.
-#
-# This program is distributed in the hope it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
-# more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-CONFIG_ARCH_DEVICE_TREE := tegra30
index e5494f748989fcf4a1820c210267ff448cab8bcd..de6b08157e9e1afe35411728d109b1840de1056c 100644 (file)
@@ -14,6 +14,7 @@ LIB   = $(obj)lib$(SOC).o
 
 COBJS-y        := timer.o
 COBJS-y        += cpu.o
+COBJS-y        += ddrc.o
 COBJS-y        += slcr.o
 
 COBJS  := $(COBJS-y)
diff --git a/arch/arm/cpu/armv7/zynq/ddrc.c b/arch/arm/cpu/armv7/zynq/ddrc.c
new file mode 100644 (file)
index 0000000..ba6a6ae
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2012 - 2013 Michal Simek <monstr@monstr.eu>
+ * Copyright (C) 2012 - 2013 Xilinx, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/hardware.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* Control regsiter bitfield definitions */
+#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_MASK                0xC
+#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_SHIFT       2
+#define ZYNQ_DDRC_CTRLREG_BUSWIDTH_16BIT       1
+
+/* ECC scrub regsiter definitions */
+#define ZYNQ_DDRC_ECC_SCRUBREG_ECC_MODE_MASK   0x7
+#define ZYNQ_DDRC_ECC_SCRUBREG_ECCMODE_SECDED  0x4
+
+void zynq_ddrc_init(void)
+{
+       u32 width, ecctype;
+
+       width = readl(&ddrc_base->ddrc_ctrl);
+       width = (width & ZYNQ_DDRC_CTRLREG_BUSWIDTH_MASK) >>
+                                       ZYNQ_DDRC_CTRLREG_BUSWIDTH_SHIFT;
+       ecctype = (readl(&ddrc_base->ecc_scrub) &
+               ZYNQ_DDRC_ECC_SCRUBREG_ECC_MODE_MASK);
+
+       /* ECC is enabled when memory is in 16bit mode and it is enabled */
+       if ((ecctype == ZYNQ_DDRC_ECC_SCRUBREG_ECCMODE_SECDED) &&
+           (width == ZYNQ_DDRC_CTRLREG_BUSWIDTH_16BIT)) {
+               puts("Memory: ECC enabled\n");
+               /*
+                * Clear the first 1MB because it is not initialized from
+                * first stage bootloader. To get ECC to work all memory has
+                * been initialized by writing any value.
+                */
+               memset(0, 0, 1 * 1024 * 1024);
+       } else {
+               puts("Memory: ECC disabled\n");
+       }
+
+       if (width == ZYNQ_DDRC_CTRLREG_BUSWIDTH_16BIT)
+               gd->ram_size /= 2;
+}
index e5fe9929827cd6117ec683d1986a804f998c9f29..717ec65aeee0132a6a07f49c774192ec18f4e4f4 100644 (file)
@@ -70,7 +70,7 @@ void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk)
                /* Configure GEM_RCLK_CTRL */
                writel(rclk, &slcr_base->gem0_rclk_ctrl);
        }
-
+       udelay(100000);
 out:
        zynq_slcr_lock();
 }
index 490aed2e0d89204329d05bca14741ebc23735342..23bf0306550ac9e209f8ffec9ac538a972ce8f17 100644 (file)
@@ -97,4 +97,6 @@ SECTIONS
        /DISCARD/ : { *(.plt*) }
        /DISCARD/ : { *(.interp*) }
        /DISCARD/ : { *(.gnu*) }
+       /DISCARD/ : { *(.ARM.exidx*) }
+       /DISCARD/ : { *(.gnu.linkonce.armexidx.*) }
 }
index 10b56e0db41e0411e046c275800da1bd9e796952..73e6db89984584850f988decb9b7dc9038065d35 100644 (file)
 #define PRM_RSTCTRL_RESET              0x01
 #define PRM_RSTST_WARM_RESET_MASK      0x232
 
+/*
+ * Watchdog:
+ * Using the prescaler, the OMAP watchdog could go for many
+ * months before firing.  These limits work without scaling,
+ * with the 60 second default assumed by most tools and docs.
+ */
+#define TIMER_MARGIN_MAX       (24 * 60 * 60)  /* 1 day */
+#define TIMER_MARGIN_DEFAULT   60      /* 60 secs */
+#define TIMER_MARGIN_MIN       1
+
+#define PTV                    0       /* prescale */
+#define GET_WLDR_VAL(secs)     (0xffffffff - ((secs) * (32768/(1<<PTV))) + 1)
+#define WDT_WWPS_PEND_WCLR     BIT(0)
+#define WDT_WWPS_PEND_WLDR     BIT(2)
+#define WDT_WWPS_PEND_WTGR     BIT(3)
+#define WDT_WWPS_PEND_WSPR     BIT(4)
+
+#define WDT_WCLR_PRE           BIT(5)
+#define WDT_WCLR_PTV_OFF       2
+
 #ifndef __KERNEL_STRICT_NAMES
 #ifndef __ASSEMBLY__
 struct gpmc_cs {
@@ -193,7 +213,8 @@ struct cm_perpll {
        unsigned int dcan1clkctrl;      /* offset 0xC4 */
        unsigned int resv6[2];
        unsigned int emiffwclkctrl;     /* offset 0xD0 */
-       unsigned int resv7[2];
+       unsigned int epwmss0clkctrl;    /* offset 0xD4 */
+       unsigned int epwmss2clkctrl;    /* offset 0xD8 */
        unsigned int l3instrclkctrl;    /* offset 0xDC */
        unsigned int l3clkctrl;         /* Offset 0xE0 */
        unsigned int resv8[4];
@@ -204,6 +225,7 @@ struct cm_perpll {
        unsigned int l4hsclkctrl;       /* offset 0x120 */
        unsigned int resv10[8];
        unsigned int cpswclkstctrl;     /* offset 0x144 */
+       unsigned int lcdcclkstctrl;     /* offset 0x148 */
 };
 #else
 /* Encapsulating core pll registers */
@@ -366,6 +388,8 @@ struct cm_perpll {
 struct cm_dpll {
        unsigned int resv1[2];
        unsigned int clktimer2clk;      /* offset 0x08 */
+       unsigned int resv2[10];
+       unsigned int clklcdcpixelclk;   /* offset 0x34 */
 };
 
 /* Control Module RTC registers */
@@ -486,6 +510,54 @@ struct ctrl_dev {
        unsigned int resv4[4];
        unsigned int miisel;            /* offset 0x50 */
 };
+
+/* gmii_sel register defines */
+#define GMII1_SEL_MII          0x0
+#define GMII1_SEL_RMII         0x1
+#define GMII1_SEL_RGMII                0x2
+#define GMII2_SEL_MII          0x0
+#define GMII2_SEL_RMII         0x4
+#define GMII2_SEL_RGMII                0x8
+#define RGMII1_IDMODE          BIT(4)
+#define RGMII2_IDMODE          BIT(5)
+#define RMII1_IO_CLK_EN                BIT(6)
+#define RMII2_IO_CLK_EN                BIT(7)
+
+#define MII_MODE_ENABLE                (GMII1_SEL_MII | GMII2_SEL_MII)
+#define RMII_MODE_ENABLE        (GMII1_SEL_RMII | GMII2_SEL_RMII)
+#define RGMII_MODE_ENABLE      (GMII1_SEL_RGMII | GMII2_SEL_RGMII)
+#define RGMII_INT_DELAY                (RGMII1_IDMODE | RGMII2_IDMODE)
+#define RMII_CHIPCKL_ENABLE     (RMII1_IO_CLK_EN | RMII2_IO_CLK_EN)
+
+/* PWMSS */
+struct pwmss_regs {
+       unsigned int idver;
+       unsigned int sysconfig;
+       unsigned int clkconfig;
+       unsigned int clkstatus;
+};
+#define ECAP_CLK_EN            BIT(0)
+#define ECAP_CLK_STOP_REQ      BIT(1)
+
+struct pwmss_ecap_regs {
+       unsigned int tsctr;
+       unsigned int ctrphs;
+       unsigned int cap1;
+       unsigned int cap2;
+       unsigned int cap3;
+       unsigned int cap4;
+       unsigned int resv1[4];
+       unsigned short ecctl1;
+       unsigned short ecctl2;
+};
+
+/* Capture Control register 2 */
+#define ECTRL2_SYNCOSEL_MASK   (0x03 << 6)
+#define ECTRL2_MDSL_ECAP       BIT(9)
+#define ECTRL2_CTRSTP_FREERUN  BIT(4)
+#define ECTRL2_PLSL_LOW                BIT(10)
+#define ECTRL2_SYNC_EN         BIT(5)
+
 #endif /* __ASSEMBLY__ */
 #endif /* __KERNEL_STRICT_NAMES */
 
index 2055b254948995da637dfe779d1ae39b50921237..ee5fce0da1caef5677d66d565c66d0b956beb61e 100644 (file)
@@ -68,4 +68,5 @@
 /* CPSW Config space */
 #define CPSW_BASE                      0x4A100000
 
+int clk_get(int clk);
 #endif /* __AM33XX_HARDWARE_H */
index 8973fd884f96ae0986f11d5ca16b39280a9f79ef..e4231c81ad907ade4c27c1ad8fea5b9377c90f60 100644 (file)
 #define USB0_OTG_BASE                  0x47401000
 #define USB1_OTG_BASE                  0x47401800
 
+/* LCD Controller */
+#define LCD_CNTL_BASE                  0x4830E000
+
+/* PWMSS */
+#define PWMSS0_BASE                    0x48300000
+#define AM33XX_ECAP0_BASE              0x48300100
+
 #endif /* __AM33XX_HARDWARE_AM33XX_H */
index 1f8431196f2d5972f8513f2191a9fdadd5305f7d..225072186dbe6ea9d735e83490b5b5aca98ef4b6 100644 (file)
@@ -18,7 +18,7 @@
 #ifdef CONFIG_AM33XX
 #define NON_SECURE_SRAM_START  0x402F0400
 #define NON_SECURE_SRAM_END    0x40310000
-#define SRAM_SCRATCH_SPACE_ADDR        0x4030C000
+#define SRAM_SCRATCH_SPACE_ADDR        0x4030B800
 #elif defined(CONFIG_TI81XX)
 #define NON_SECURE_SRAM_START  0x40300000
 #define NON_SECURE_SRAM_END    0x40320000
index d6597023c6e31b02b5e2bfcb099c8075f2965f39..9f54fddce51efe63473fbb403f51be20efffdc4e 100644 (file)
@@ -10,6 +10,7 @@
 #define AT91_COMMON_H
 
 void at91_can_hw_init(void);
+void at91_gmac_hw_init(void);
 void at91_macb_hw_init(void);
 void at91_mci_hw_init(void);
 void at91_serial0_hw_init(void);
index fcc6fdc21931f14039da99bb4f9f2689926a827d..a47103851e48594c1a19b64d4d1a1ef2303a1e89 100644 (file)
 #define ATMEL_PMC_UHP          AT91SAM926x_PMC_UHP
 #define ATMEL_ID_UHP           ATMEL_ID_UHPHS
 
+/*
+ * PMECC table in ROM
+ */
+#define ATMEL_PMECC_INDEX_OFFSET_512   0x8000
+#define ATMEL_PMECC_INDEX_OFFSET_1024  0x10000
+
 /*
  * at91sam9x5 specific prototypes
  */
index 49bd335102d3647c4158696bb1c24f1f505b0c1c..fefee5ed259e10fab04de25e5f53c66311b20fc9 100644 (file)
  */
 #define ATMEL_PMECC_INDEX_OFFSET_512   0x10000
 #define ATMEL_PMECC_INDEX_OFFSET_1024  0x18000
-#define ATMEL_PMECC_ALPHA_OFFSET_512   0x10000
-#define ATMEL_PMECC_ALPHA_OFFSET_1024  0x18000
 
 /*
  * SAMA5D3 specific prototypes
index c060894f14b371f3e5f9945e6a62b41696f7e5cc..6caa9b6ed8fdc0f3c2eab1a7f06b8e8d44ccf686 100644 (file)
@@ -17,7 +17,6 @@
 #define AT91_ASM_SMC_MODE0     (ATMEL_BASE_SMC + 0x60C)
 #else
 struct at91_cs {
-       u32     reserved[96];
        u32     setup;          /* 0x600 SMC Setup Register */
        u32     pulse;          /* 0x604 SMC Pulse Register */
        u32     cycle;          /* 0x608 SMC Cycle Register */
@@ -26,6 +25,7 @@ struct at91_cs {
 };
 
 struct at91_smc {
+       u32 reserved[384];
        struct at91_cs cs[4];
 };
 #endif /*  __ASSEMBLY__ */
index 8916d9d16bc005e590eca90a62f9074030f062a7..498a9ffc049aaa2b04c71c5243bff82e21b32664 100644 (file)
@@ -291,7 +291,7 @@ struct exynos_platform_mipi_dsim {
  */
 struct mipi_dsim_master_ops {
        int (*cmd_write)(struct mipi_dsim_device *dsim, unsigned int data_id,
-               unsigned int data0, unsigned int data1);
+               const unsigned char *data0, unsigned int data1);
        int (*cmd_read)(struct mipi_dsim_device *dsim, unsigned int data_id,
                unsigned int data0, unsigned int data1);
        int (*get_dsim_frame_done)(struct mipi_dsim_device *dsim);
index 406d150ae2ce7eebe8249d9f51ad9dab2adc057f..9ee79aede38a13c112f3af639a541806d5d123d9 100644 (file)
@@ -46,10 +46,10 @@ u32 imx_get_fecclk(void);
 unsigned int mxc_get_clock(enum mxc_clock clk);
 int mxc_set_clock(u32 ref, u32 freq, u32 clk_type);
 void set_usb_phy_clk(void);
-void enable_usb_phy1_clk(unsigned char enable);
-void enable_usb_phy2_clk(unsigned char enable);
+void enable_usb_phy1_clk(bool enable);
+void enable_usb_phy2_clk(bool enable);
 void set_usboh3_clk(void);
-void enable_usboh3_clk(unsigned char enable);
+void enable_usboh3_clk(bool enable);
 void mxc_set_sata_internal_clock(void);
 int enable_i2c_clk(unsigned char enable, unsigned i2c_num);
 void enable_nfc_clk(unsigned char enable);
diff --git a/arch/arm/include/asm/arch-mx6/hab.h b/arch/arm/include/asm/arch-mx6/hab.h
new file mode 100644 (file)
index 0000000..d724f20
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ *
+*/
+
+#ifndef __SECURE_MX6Q_H__
+#define __SECURE_MX6Q_H__
+
+#include <linux/types.h>
+
+/* -------- start of HAB API updates ------------*/
+/* The following are taken from HAB4 SIS */
+
+/* Status definitions */
+enum hab_status {
+       HAB_STS_ANY = 0x00,
+       HAB_FAILURE = 0x33,
+       HAB_WARNING = 0x69,
+       HAB_SUCCESS = 0xf0
+};
+
+/* Security Configuration definitions */
+enum hab_config {
+       HAB_CFG_RETURN = 0x33, /**< Field Return IC */
+       HAB_CFG_OPEN = 0xf0, /**< Non-secure IC */
+       HAB_CFG_CLOSED = 0xcc /**< Secure IC */
+};
+
+/* State definitions */
+enum hab_state {
+       HAB_STATE_INITIAL = 0x33, /**< Initialising state (transitory) */
+       HAB_STATE_CHECK = 0x55, /**< Check state (non-secure) */
+       HAB_STATE_NONSECURE = 0x66, /**< Non-secure state */
+       HAB_STATE_TRUSTED = 0x99, /**< Trusted state */
+       HAB_STATE_SECURE = 0xaa, /**< Secure state */
+       HAB_STATE_FAIL_SOFT = 0xcc, /**< Soft fail state */
+       HAB_STATE_FAIL_HARD = 0xff, /**< Hard fail state (terminal) */
+       HAB_STATE_NONE = 0xf0, /**< No security state machine */
+       HAB_STATE_MAX
+};
+
+/*Function prototype description*/
+typedef enum hab_status hab_rvt_report_event_t(enum hab_status, uint32_t,
+               uint8_t* , size_t*);
+typedef enum hab_status hab_rvt_report_status_t(enum hab_config *,
+               enum hab_state *);
+typedef enum hab_status hab_loader_callback_f_t(void**, size_t*, const void*);
+typedef enum hab_status hab_rvt_entry_t(void);
+typedef enum hab_status hab_rvt_exit_t(void);
+typedef void *hab_rvt_authenticate_image_t(uint8_t, ptrdiff_t,
+               void **, size_t *, hab_loader_callback_f_t);
+typedef void hapi_clock_init_t(void);
+
+#define HAB_RVT_REPORT_EVENT (*(uint32_t *)0x000000B4)
+#define HAB_RVT_REPORT_STATUS (*(uint32_t *)0x000000B8)
+#define HAB_RVT_AUTHENTICATE_IMAGE (*(uint32_t *)0x000000A4)
+#define HAB_RVT_ENTRY (*(uint32_t *)0x00000098)
+#define HAB_RVT_EXIT (*(uint32_t *)0x0000009C)
+#define HAB_RVT_CLOCK_INIT ((hapi_clock_init_t *)0x0000024D)
+
+#define HAB_CID_ROM 0 /**< ROM Caller ID */
+#define HAB_CID_UBOOT 1 /**< UBOOT Caller ID*/
+/* ----------- end of HAB API updates ------------*/
+
+#endif
index 5d6bccbc0c9b590cd2d0af38b0a1e8d63c6585c4..7ef7152678702a1318b6f7eee45143c8fe22f357 100644 (file)
@@ -456,7 +456,13 @@ struct fuse_bank0_regs {
        u32     uid_low;
        u32     rsvd1[3];
        u32     uid_high;
-       u32     rsvd2[0x17];
+       u32     rsvd2[3];
+       u32     rsvd3[4];
+       u32     rsvd4[4];
+       u32     rsvd5[4];
+       u32     cfg5;
+       u32     rsvd6[3];
+       u32     rsvd7[4];
 };
 
 struct fuse_bank4_regs {
@@ -629,29 +635,12 @@ struct anatop_regs {
        u32     digprog_sololite;       /* 0x280 */
 };
 
-#define ANATOP_PFD_480_PFD0_FRAC_SHIFT         0
-#define ANATOP_PFD_480_PFD0_FRAC_MASK          (0x3f<<ANATOP_PFD_480_PFD0_FRAC_SHIFT)
-#define ANATOP_PFD_480_PFD0_STABLE_SHIFT       6
-#define ANATOP_PFD_480_PFD0_STABLE_MASK                (1<<ANATOP_PFD_480_PFD0_STABLE_SHIFT)
-#define ANATOP_PFD_480_PFD0_CLKGATE_SHIFT      7
-#define ANATOP_PFD_480_PFD0_CLKGATE_MASK       (1<<ANATOP_PFD_480_PFD0_CLKGATE_SHIFT)
-#define ANATOP_PFD_480_PFD1_FRAC_SHIFT         8
-#define ANATOP_PFD_480_PFD1_FRAC_MASK          (0x3f<<ANATOP_PFD_480_PFD1_FRAC_SHIFT)
-#define ANATOP_PFD_480_PFD1_STABLE_SHIFT       14
-#define ANATOP_PFD_480_PFD1_STABLE_MASK                (1<<ANATOP_PFD_480_PFD1_STABLE_SHIFT)
-#define ANATOP_PFD_480_PFD1_CLKGATE_SHIFT      15
-#define ANATOP_PFD_480_PFD1_CLKGATE_MASK       (0x3f<<ANATOP_PFD_480_PFD1_CLKGATE_SHIFT)
-#define ANATOP_PFD_480_PFD2_FRAC_SHIFT         16
-#define ANATOP_PFD_480_PFD2_FRAC_MASK          (1<<ANATOP_PFD_480_PFD2_FRAC_SHIFT)
-#define ANATOP_PFD_480_PFD2_STABLE_SHIFT       22
-#define ANATOP_PFD_480_PFD2_STABLE_MASK        (1<<ANATOP_PFD_480_PFD2_STABLE_SHIFT)
-#define ANATOP_PFD_480_PFD2_CLKGATE_SHIFT      23
-#define ANATOP_PFD_480_PFD2_CLKGATE_MASK       (0x3f<<ANATOP_PFD_480_PFD2_CLKGATE_SHIFT)
-#define ANATOP_PFD_480_PFD3_FRAC_SHIFT         24
-#define ANATOP_PFD_480_PFD3_FRAC_MASK          (1<<ANATOP_PFD_480_PFD3_FRAC_SHIFT)
-#define ANATOP_PFD_480_PFD3_STABLE_SHIFT       30
-#define ANATOP_PFD_480_PFD3_STABLE_MASK                (1<<ANATOP_PFD_480_PFD3_STABLE_SHIFT)
-#define ANATOP_PFD_480_PFD3_CLKGATE_SHIFT      31
+#define ANATOP_PFD_FRAC_SHIFT(n)       ((n)*8)
+#define ANATOP_PFD_FRAC_MASK(n)        (0x3f<<ANATOP_PFD_FRAC_SHIFT(n))
+#define ANATOP_PFD_STABLE_SHIFT(n)     (6+((n)*8))
+#define ANATOP_PFD_STABLE_MASK(n)      (1<<ANATOP_PFD_STABLE_SHIFT(n))
+#define ANATOP_PFD_CLKGATE_SHIFT(n)    (7+((n)*8))
+#define ANATOP_PFD_CLKGATE_MASK(n)     (1<<ANATOP_PFD_CLKGATE_SHIFT(n))
 
 struct iomuxc_base_regs {
        u32     gpr[14];        /* 0x000 */
index bfdfd2911d05b10773ffcd53b93ae2de90899866..8c21364e71b7ca72cff54dd7344da533fe77cdc1 100644 (file)
 
 #define is_soc_rev(rev)        ((get_cpu_rev() & 0xFF) - rev)
 u32 get_cpu_rev(void);
+
+/* returns MXC_CPU_ value */
+#define cpu_type(rev) (((rev) >> 12)&0xff)
+
+/* use with MXC_CPU_ constants */
+#define is_cpu_type(cpu) (cpu_type(get_cpu_rev()) == cpu)
+
 const char *get_imx_type(u32 imxtype);
 unsigned imx_ddr_size(void);
 
diff --git a/arch/arm/include/asm/arch-mxs/regs-uartapp.h b/arch/arm/include/asm/arch-mxs/regs-uartapp.h
new file mode 100644 (file)
index 0000000..7ceb810
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Freescale MXS UARTAPP Register Definitions
+ *
+ * Copyright (C) 2013 Andreas Wass <andreas.wass@dalelven.com>
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __ARCH_ARM___MXS_UARTAPP_H
+#define __ARCH_ARM___MXS_UARTAPP_H
+
+#include <asm/imx-common/regs-common.h>
+
+#ifndef __ASSEMBLY__
+struct mxs_uartapp_regs {
+       mxs_reg_32(hw_uartapp_ctrl0)
+       mxs_reg_32(hw_uartapp_ctrl1)
+       mxs_reg_32(hw_uartapp_ctrl2)
+       mxs_reg_32(hw_uartapp_linectrl)
+       mxs_reg_32(hw_uartapp_linectrl2)
+       mxs_reg_32(hw_uartapp_intr)
+       mxs_reg_32(hw_uartapp_data)
+       mxs_reg_32(hw_uartapp_stat)
+       mxs_reg_32(hw_uartapp_debug)
+       mxs_reg_32(hw_uartapp_version)
+       mxs_reg_32(hw_uartapp_autobaud)
+};
+#endif
+
+#define UARTAPP_CTRL0_SFTRST_MASK                              (1 << 31)
+#define UARTAPP_CTRL0_CLKGATE_MASK                     (1 << 30)
+#define UARTAPP_CTRL0_RUN_MASK                         (1 << 29)
+#define UARTAPP_CTRL0_RX_SOURCE_MASK                   (1 << 28)
+#define UARTAPP_CTRL0_RXTO_ENABLE_MASK                 (1 << 27)
+#define UARTAPP_CTRL0_RXTIMEOUT_OFFSET                 16
+#define UARTAPP_CTRL0_RXTIMEOUT_MASK                   (0x7FF << 16)
+#define UARTAPP_CTRL0_XFER_COUNT_OFFSET                        0
+#define UARTAPP_CTRL0_XFER_COUNT_MASK                  0xFFFF
+
+#define UARTAPP_CTRL1_RUN_MASK                         (1 << 28)
+
+#define UARTAPP_CTRL1_XFER_COUNT_OFFSET                        0
+#define UARTAPP_CTRL1_XFER_COUNT_MASK                  0xFFFF
+
+#define UARTAPP_CTRL2_INVERT_RTS_MASK                  (1 << 31)
+#define UARTAPP_CTRL2_INVERT_CTS_MASK                  (1 << 30)
+#define UARTAPP_CTRL2_INVERT_TX_MASK                   (1 << 29)
+#define UARTAPP_CTRL2_INVERT_RX_MASK                   (1 << 28)
+#define UARTAPP_CTRL2_RTS_SEMAPHORE_MASK                       (1 << 27)
+#define UARTAPP_CTRL2_DMAONERR_MASK                    (1 << 26)
+#define UARTAPP_CTRL2_TXDMAE_MASK                              (1 << 25)
+#define UARTAPP_CTRL2_RXDMAE_MASK                              (1 << 24)
+#define UARTAPP_CTRL2_RXIFLSEL_OFFSET                  20
+#define UARTAPP_CTRL2_RXIFLSEL_MASK                    (0x7 << 20)
+
+#define UARTAPP_CTRL2_RXIFLSEL_NOT_EMPTY               (0x0 << 20)
+#define UARTAPP_CTRL2_RXIFLSEL_ONE_QUARTER             (0x1 << 20)
+#define UARTAPP_CTRL2_RXIFLSEL_ONE_HALF                (0x2 << 20)
+#define UARTAPP_CTRL2_RXIFLSEL_THREE_QUARTERS          (0x3 << 20)
+#define UARTAPP_CTRL2_RXIFLSEL_SEVEN_EIGHTHS           (0x4 << 20)
+#define UARTAPP_CTRL2_RXIFLSEL_INVALID5                (0x5 << 20)
+#define UARTAPP_CTRL2_RXIFLSEL_INVALID6                (0x6 << 20)
+#define UARTAPP_CTRL2_RXIFLSEL_INVALID7                (0x7 << 20)
+#define UARTAPP_CTRL2_TXIFLSEL_OFFSET                  16
+#define UARTAPP_CTRL2_TXIFLSEL_MASK                    (0x7 << 16)
+#define UARTAPP_CTRL2_TXIFLSEL_EMPTY                   (0x0 << 16)
+#define UARTAPP_CTRL2_TXIFLSEL_ONE_QUARTER             (0x1 << 16)
+#define UARTAPP_CTRL2_TXIFLSEL_ONE_HALF                (0x2 << 16)
+#define UARTAPP_CTRL2_TXIFLSEL_THREE_QUARTERS          (0x3 << 16)
+#define UARTAPP_CTRL2_TXIFLSEL_SEVEN_EIGHTHS           (0x4 << 16)
+#define UARTAPP_CTRL2_TXIFLSEL_INVALID5                (0x5 << 16)
+#define UARTAPP_CTRL2_TXIFLSEL_INVALID6                (0x6 << 16)
+#define UARTAPP_CTRL2_TXIFLSEL_INVALID7                (0x7 << 16)
+#define UARTAPP_CTRL2_CTSEN_MASK                               (1 << 15)
+#define UARTAPP_CTRL2_RTSEN_MASK                               (1 << 14)
+#define UARTAPP_CTRL2_OUT2_MASK                                (1 << 13)
+#define UARTAPP_CTRL2_OUT1_MASK                                (1 << 12)
+#define UARTAPP_CTRL2_RTS_MASK                         (1 << 11)
+#define UARTAPP_CTRL2_DTR_MASK                         (1 << 10)
+#define UARTAPP_CTRL2_RXE_MASK                         (1 << 9)
+#define UARTAPP_CTRL2_TXE_MASK                         (1 << 8)
+#define UARTAPP_CTRL2_LBE_MASK                         (1 << 7)
+#define UARTAPP_CTRL2_USE_LCR2_MASK                    (1 << 6)
+
+#define UARTAPP_CTRL2_SIRLP_MASK                               (1 << 2)
+#define UARTAPP_CTRL2_SIREN_MASK                               (1 << 1)
+#define UARTAPP_CTRL2_UARTEN_MASK                              0x01
+
+#define UARTAPP_LINECTRL_BAUD_DIVINT_OFFSET                    16
+#define UARTAPP_LINECTRL_BAUD_DIVINT_MASK                      (0xFFFF << 16)
+#define UARTAPP_LINECTRL_EXTRACT_BAUD_DIVINT_OFFSET            6
+
+#define UARTAPP_LINECTRL_BAUD_DIVFRAC_OFFSET           8
+#define UARTAPP_LINECTRL_BAUD_DIVFRAC_MASK             (0x3F << 8)
+#define UARTAPP_LINECTRL_EXTRACT_BAUD_DIVFRAC_MASK     0x3F
+
+#define UARTAPP_LINECTRL_SPS_MASK                              (1 << 7)
+#define UARTAPP_LINECTRL_WLEN_OFFSET                   5
+#define UARTAPP_LINECTRL_WLEN_MASK                     (0x03 << 5)
+#define UARTAPP_LINECTRL_WLEN_5BITS                    (0x00 << 5)
+#define UARTAPP_LINECTRL_WLEN_6BITS                    (0x01 << 5)
+#define UARTAPP_LINECTRL_WLEN_7BITS                    (0x02 << 5)
+#define UARTAPP_LINECTRL_WLEN_8BITS                    (0x03 << 5)
+
+#define UARTAPP_LINECTRL_FEN_MASK                              (1 << 4)
+#define UARTAPP_LINECTRL_STP2_MASK                     (1 << 3)
+#define UARTAPP_LINECTRL_EPS_MASK                              (1 << 2)
+#define UARTAPP_LINECTRL_PEN_MASK                              (1 << 1)
+#define UARTAPP_LINECTRL_BRK_MASK                              1
+
+#define UARTAPP_LINECTRL2_BAUD_DIVINT_OFFSET           16
+#define UARTAPP_LINECTRL2_BAUD_DIVINT_MASK             (0xFFFF << 16)
+#define UARTAPP_LINECTRL2_EXTRACT_BAUD_DIVINT_OFFSET   6
+
+#define UARTAPP_LINECTRL2_BAUD_DIVFRAC_OFFSET          8
+#define UARTAPP_LINECTRL2_BAUD_DIVFRAC_MASK            (0x3F << 8)
+#define UARTAPP_LINECTRL2_EXTRACT_BAUD_DIVFRAC_MASK    0x3F
+
+#define UARTAPP_LINECTRL2_SPS_MASK                     (1 << 7)
+#define UARTAPP_LINECTRL2_WLEN_OFFSET                  5
+#define UARTAPP_LINECTRL2_WLEN_MASK                    (0x03 << 5)
+#define UARTAPP_LINECTRL2_WLEN_5BITS                   (0x00 << 5)
+#define UARTAPP_LINECTRL2_WLEN_6BITS                   (0x01 << 5)
+#define UARTAPP_LINECTRL2_WLEN_7BITS                   (0x02 << 5)
+#define UARTAPP_LINECTRL2_WLEN_8BITS                   (0x03 << 5)
+
+#define UARTAPP_LINECTRL2_FEN_MASK                     (1 << 4)
+#define UARTAPP_LINECTRL2_STP2_MASK                    (1 << 3)
+#define UARTAPP_LINECTRL2_EPS_MASK                     (1 << 2)
+#define UARTAPP_LINECTRL2_PEN_MASK                     (1 << 1)
+
+#define UARTAPP_INTR_ABDIEN_MASK                               (1 << 27)
+#define UARTAPP_INTR_OEIEN_MASK                                (1 << 26)
+#define UARTAPP_INTR_BEIEN_MASK                                (1 << 25)
+#define UARTAPP_INTR_PEIEN_MASK                                (1 << 24)
+#define UARTAPP_INTR_FEIEN_MASK                                (1 << 23)
+#define UARTAPP_INTR_RTIEN_MASK                                (1 << 22)
+#define UARTAPP_INTR_TXIEN_MASK                                (1 << 21)
+#define UARTAPP_INTR_RXIEN_MASK                                (1 << 20)
+#define UARTAPP_INTR_DSRMIEN_MASK                              (1 << 19)
+#define UARTAPP_INTR_DCDMIEN_MASK                              (1 << 18)
+#define UARTAPP_INTR_CTSMIEN_MASK                              (1 << 17)
+#define UARTAPP_INTR_RIMIEN_MASK                               (1 << 16)
+
+#define UARTAPP_INTR_ABDIS_MASK                                (1 << 11)
+#define UARTAPP_INTR_OEIS_MASK                         (1 << 10)
+#define UARTAPP_INTR_BEIS_MASK                         (1 << 9)
+#define UARTAPP_INTR_PEIS_MASK                         (1 << 8)
+#define UARTAPP_INTR_FEIS_MASK                         (1 << 7)
+#define UARTAPP_INTR_RTIS_MASK                         (1 << 6)
+#define UARTAPP_INTR_TXIS_MASK                         (1 << 5)
+#define UARTAPP_INTR_RXIS_MASK                         (1 << 4)
+#define UARTAPP_INTR_DSRMIS_MASK                               (1 << 3)
+#define UARTAPP_INTR_DCDMIS_MASK                               (1 << 2)
+#define UARTAPP_INTR_CTSMIS_MASK                               (1 << 1)
+#define UARTAPP_INTR_RIMIS_MASK                                0x1
+
+#define UARTAPP_DATA_DATA_OFFSET                               0
+#define UARTAPP_DATA_DATA_MASK                         0xFFFFFFFF
+#define UARTAPP_STAT_PRESENT_MASK                              (1 << 31)
+#define UARTAPP_STAT_PRESENT_UNAVAILABLE               (0x0 << 31)
+#define UARTAPP_STAT_PRESENT_AVAILABLE                 (0x1 << 31)
+
+#define UARTAPP_STAT_HISPEED_MASK                              (1 << 30)
+#define UARTAPP_STAT_HISPEED_UNAVAILABLE               (0x0 << 30)
+#define UARTAPP_STAT_HISPEED_AVAILABLE                 (0x1 << 30)
+
+#define UARTAPP_STAT_BUSY_MASK                         (1 << 29)
+#define UARTAPP_STAT_CTS_MASK                          (1 << 28)
+#define UARTAPP_STAT_TXFE_MASK                         (1 << 27)
+#define UARTAPP_STAT_RXFF_MASK                         (1 << 26)
+#define UARTAPP_STAT_TXFF_MASK                         (1 << 25)
+#define UARTAPP_STAT_RXFE_MASK                         (1 << 24)
+#define UARTAPP_STAT_RXBYTE_INVALID_OFFSET                     20
+#define UARTAPP_STAT_RXBYTE_INVALID_MASK               (0xF << 20)
+
+#define UARTAPP_STAT_OERR_MASK                         (1 << 19)
+#define UARTAPP_STAT_BERR_MASK                         (1 << 18)
+#define UARTAPP_STAT_PERR_MASK                         (1 << 17)
+#define UARTAPP_STAT_FERR_MASK                         (1 << 16)
+#define UARTAPP_STAT_RXCOUNT_OFFSET                            0
+#define UARTAPP_STAT_RXCOUNT_MASK                              0xFFFF
+
+#define UARTAPP_DEBUG_RXIBAUD_DIV_OFFSET                       16
+#define UARTAPP_DEBUG_RXIBAUD_DIV_MASK                         (0xFFFF << 16)
+
+#define UARTAPP_DEBUG_RXFBAUD_DIV_OFFSET                       10
+#define UARTAPP_DEBUG_RXFBAUD_DIV_MASK                         (0x3F << 10)
+
+#define UARTAPP_DEBUG_TXDMARUN_MASK                    (1 << 5)
+#define UARTAPP_DEBUG_RXDMARUN_MASK                    (1 << 4)
+#define UARTAPP_DEBUG_TXCMDEND_MASK                    (1 << 3)
+#define UARTAPP_DEBUG_RXCMDEND_MASK                    (1 << 2)
+#define UARTAPP_DEBUG_TXDMARQ_MASK                     (1 << 1)
+#define UARTAPP_DEBUG_RXDMARQ_MASK                     0x01
+
+#define UARTAPP_VERSION_MAJOR_OFFSET                   24
+#define UARTAPP_VERSION_MAJOR_MASK                     (0xFF << 24)
+
+#define UARTAPP_VERSION_MINOR_OFFSET                   16
+#define UARTAPP_VERSION_MINOR_MASK                     (0xFF << 16)
+
+#define UARTAPP_VERSION_STEP_OFFSET                            0
+#define UARTAPP_VERSION_STEP_MASK                              0xFFFF
+
+#define UARTAPP_AUTOBAUD_REFCHAR1_OFFSET                       24
+#define UARTAPP_AUTOBAUD_REFCHAR1_MASK                         (0xFF << 24)
+
+#define UARTAPP_AUTOBAUD_REFCHAR0_OFFSET                       16
+#define UARTAPP_AUTOBAUD_REFCHAR0_MASK                         (0xFF << 16)
+
+#define UARTAPP_AUTOBAUD_UPDATE_TX_MASK                        (1 << 4)
+#define UARTAPP_AUTOBAUD_TWO_REF_CHARS_MASK            (1 << 3)
+#define UARTAPP_AUTOBAUD_START_WITH_RUNBIT_MASK                (1 << 2)
+#define UARTAPP_AUTOBAUD_START_BAUD_DETECT_MASK                (1 << 1)
+#define UARTAPP_AUTOBAUD_BAUD_DETECT_ENABLE_MASK               0x01
+#endif /* __ARCH_ARM___UARTAPP_H */
index 514839c778eabb0e24d4c989cae0a9a2231eb70a..be669c156f51b7c80085489e3dbd783243403fc7 100644 (file)
@@ -63,6 +63,4 @@ extern dpll_param *get_36x_core_dpll_param(void);
 extern dpll_param *get_36x_per_dpll_param(void);
 extern dpll_param *get_36x_per2_dpll_param(void);
 
-extern void *_end_vect, *_start;
-
 #endif
index d72f5e50ad6b89e6b3ea09ce34573e338c3a1359..f664c119905c59c393b64be03f7146945270762d 100644 (file)
@@ -2,20 +2,7 @@
  * 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
+ * SPDX-License-Identifier:    GPL-2.0
  *
  * This work is derived from the linux 2.6.27 kernel source
  * To fetch, use the kernel repository
  *
  * 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_OMAP3_H
 #define _GPIO_OMAP3_H
index b2e03d6e1e393e4de5d9fdf8f8bfdca0e6b0918e..f3a682a19715675b0c5ad9ef202df7145d7dcc3c 100644 (file)
 /* PRM_VC_VAL_BYPASS */
 #define PRM_VC_I2C_CHANNEL_FREQ_KHZ    400
 
-/* SMPS */
+/* PMIC */
 #define SMPS_I2C_SLAVE_ADDR    0x12
+/* TWL6030 SMPS */
 #define SMPS_REG_ADDR_VCORE1   0x55
 #define SMPS_REG_ADDR_VCORE2   0x5B
 #define SMPS_REG_ADDR_VCORE3   0x61
+/* TWL6032 SMPS */
+#define SMPS_REG_ADDR_SMPS1    0x55
+#define SMPS_REG_ADDR_SMPS2    0x5B
+#define SMPS_REG_ADDR_SMPS5    0x49
 
 #define PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV             607700
 #define PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV 709000
index fdf65edab8a6426b7e9512d44d14df9a1e999ec6..72ba1d71a2f84e7dd305d53f6376901759e9eb7b 100644 (file)
@@ -2,20 +2,7 @@
  * 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
+ * SPDX-License-Identifier:    GPL-2.0
  *
  * This work is derived from the linux 2.6.27 kernel source
  * To fetch, use the kernel repository
  *
  * 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_OMAP4_H
 #define _GPIO_OMAP4_H
index 3823a37f2ff00770dacdd419e85d7fefe160ee8f..9129c0dd7cb005c4ed0494b367c3956c0503266a 100644 (file)
@@ -41,6 +41,7 @@
 #define OMAP4_CONTROL_ID_CODE_ES2_3    0x6B95C02F
 #define OMAP4460_CONTROL_ID_CODE_ES1_0 0x0B94E02F
 #define OMAP4460_CONTROL_ID_CODE_ES1_1 0x2B94E02F
+#define OMAP4470_CONTROL_ID_CODE_ES1_0 0x0B97502F
 
 /* UART */
 #define UART1_BASE             (OMAP44XX_L4_PER_BASE + 0x6a000)
index 3adfc090fe963bef1549fc0f3f54ee5a1b09c187..9a2166ce4a3b40c5cfe1c4bfdb3e6e5df0285038 100644 (file)
 /* CM_L3INIT_USBPHY_CLKCTRL */
 #define USBPHY_CLKCTRL_OPTFCLKEN_PHY_48M_MASK  8
 
+/* CM_L3INIT_USB_HOST_HS_CLKCTRL */
+#define OPTFCLKEN_FUNC48M_CLK                  (1 << 15)
+#define OPTFCLKEN_HSIC480M_P2_CLK              (1 << 14)
+#define OPTFCLKEN_HSIC480M_P1_CLK              (1 << 13)
+#define OPTFCLKEN_HSIC60M_P2_CLK               (1 << 12)
+#define OPTFCLKEN_HSIC60M_P1_CLK               (1 << 11)
+#define OPTFCLKEN_UTMI_P3_CLK                  (1 << 10)
+#define OPTFCLKEN_UTMI_P2_CLK                  (1 << 9)
+#define OPTFCLKEN_UTMI_P1_CLK                  (1 << 8)
+#define OPTFCLKEN_HSIC480M_P3_CLK              (1 << 7)
+#define OPTFCLKEN_HSIC60M_P3_CLK               (1 << 6)
+
+/* CM_L3INIT_USB_TLL_HS_CLKCTRL */
+#define OPTFCLKEN_USB_CH0_CLK_ENABLE   (1 << 8)
+#define OPTFCLKEN_USB_CH1_CLK_ENABLE   (1 << 9)
+#define OPTFCLKEN_USB_CH2_CLK_ENABLE   (1 << 10)
+
 /* CM_MPU_MPU_CLKCTRL */
 #define MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_SHIFT 24
 #define MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK  (3 << 24)
diff --git a/arch/arm/include/asm/arch-omap5/ehci.h b/arch/arm/include/asm/arch-omap5/ehci.h
new file mode 100644 (file)
index 0000000..3921e4a
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com*
+ * Author: Govindraj R <govindraj.raja@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 _EHCI_H
+#define _EHCI_H
+
+#define OMAP_EHCI_BASE                         (OMAP54XX_L4_CORE_BASE + 0x64C00)
+#define OMAP_UHH_BASE                          (OMAP54XX_L4_CORE_BASE + 0x64000)
+#define OMAP_USBTLL_BASE                       (OMAP54XX_L4_CORE_BASE + 0x62000)
+
+/* TLL Register Set */
+#define OMAP_USBTLL_SYSCONFIG_SIDLEMODE                (1 << 3)
+#define OMAP_USBTLL_SYSCONFIG_ENAWAKEUP                (1 << 2)
+#define OMAP_USBTLL_SYSCONFIG_SOFTRESET                (1 << 1)
+#define OMAP_USBTLL_SYSCONFIG_CACTIVITY                (1 << 8)
+#define OMAP_USBTLL_SYSSTATUS_RESETDONE                1
+
+#define OMAP_UHH_SYSCONFIG_SOFTRESET           1
+#define OMAP_UHH_SYSSTATUS_EHCI_RESETDONE      (1 << 2)
+#define OMAP_UHH_SYSCONFIG_NOIDLE              (1 << 2)
+#define OMAP_UHH_SYSCONFIG_NOSTDBY             (1 << 4)
+
+#define OMAP_UHH_SYSCONFIG_VAL (OMAP_UHH_SYSCONFIG_NOIDLE | \
+                                       OMAP_UHH_SYSCONFIG_NOSTDBY)
+
+#endif /* _EHCI_H */
index 7c82f9036075117524b5221585bf7010bf272f32..9dd03c9fa6512b100938d8aec4bd446a936fa590 100644 (file)
@@ -2,20 +2,7 @@
  * 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
+ * SPDX-License-Identifier:    GPL-2.0
  *
  * This work is derived from the linux 2.6.27 kernel source
  * To fetch, use the kernel repository
  *
  * 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
index 597c692b97c1423fc4807ab600c457733c9e238d..e9a51d340381fbe94bd608e10776db3a2272c455 100644 (file)
@@ -153,6 +153,15 @@ struct s32ktimer {
 #define EFUSE_4 0x45145100
 #endif /* __ASSEMBLY__ */
 
+/*
+ * In all cases, the TRM defines the RAM Memory Map for the processor
+ * and indicates the area for the downloaded image.  We use all of that
+ * space for download and once up and running may use other parts of the
+ * map for our needs.  We set a scratch space that is at the end of the
+ * OMAP5 download area, but within the DRA7xx download area (as it is
+ * much larger) and do not, at this time, make use of the additional
+ * space.
+ */
 #ifdef CONFIG_DRA7XX
 #define NON_SECURE_SRAM_START  0x40300000
 #define NON_SECURE_SRAM_END    0x40380000      /* Not inclusive */
@@ -160,7 +169,7 @@ struct s32ktimer {
 #define NON_SECURE_SRAM_START  0x40300000
 #define NON_SECURE_SRAM_END    0x40320000      /* Not inclusive */
 #endif
-#define SRAM_SCRATCH_SPACE_ADDR        NON_SECURE_SRAM_START
+#define SRAM_SCRATCH_SPACE_ADDR        0x4031E000
 
 /* base address for indirect vectors (internal boot mode) */
 #define SRAM_ROM_VECT_BASE     0x4031F000
index 13d73577023d23c6f86e776026f1ac3067632950..3e9547682833c25cfd2e5c5c0c48f49c05a570ed 100644 (file)
@@ -11,16 +11,20 @@ void reset_cpu(ulong addr);
 void reset_deassert_peripherals_handoff(void);
 
 struct socfpga_reset_manager {
-       u32     padding1;
+       u32     status;
        u32     ctrl;
-       u32     padding2;
-       u32     padding3;
+       u32     counts;
+       u32     padding1;
        u32     mpu_mod_reset;
        u32     per_mod_reset;
        u32     per2_mod_reset;
        u32     brg_mod_reset;
 };
 
+#if defined(CONFIG_SOCFPGA_VIRTUAL_TARGET)
+#define RSTMGR_CTRL_SWWARMRSTREQ_LSB 2
+#else
 #define RSTMGR_CTRL_SWWARMRSTREQ_LSB 1
+#endif
 
 #endif /* _RESET_MANAGER_H_ */
index 25f0e3d9c759f666e7d87f6fc2e5bb2e6d34f7f6..cd69677729cbf81ad237e1ac64b8477fde37e1f3 100644 (file)
@@ -17,6 +17,9 @@
 #define ZYNQ_SDHCI_BASEADDR1           0xE0101000
 #define ZYNQ_I2C_BASEADDR0             0xE0004000
 #define ZYNQ_I2C_BASEADDR1             0xE0005000
+#define ZYNQ_SPI_BASEADDR0             0xE0006000
+#define ZYNQ_SPI_BASEADDR1             0xE0007000
+#define ZYNQ_DDRC_BASEADDR             0xF8006000
 
 /* Reflect slcr offsets */
 struct slcr_regs {
@@ -84,4 +87,11 @@ struct scu_regs {
 
 #define scu_base ((struct scu_regs *)ZYNQ_SCU_BASEADDR)
 
+struct ddrc_regs {
+       u32 ddrc_ctrl; /* 0x0 */
+       u32 reserved[60];
+       u32 ecc_scrub; /* 0xF4 */
+};
+#define ddrc_base ((struct ddrc_regs *)ZYNQ_DDRC_BASEADDR)
+
 #endif /* _ASM_ARCH_HARDWARE_H */
index 19a4eec6a973f23595c4112e8e013afacb9f0f54..110de9092213995dbee9a50c4cdca4810643c606 100644 (file)
@@ -14,6 +14,7 @@ extern void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk);
 extern void zynq_slcr_devcfg_disable(void);
 extern void zynq_slcr_devcfg_enable(void);
 extern u32 zynq_slcr_get_idcode(void);
+extern void zynq_ddrc_init(void);
 
 /* Driver extern functions */
 extern int zynq_sdhci_init(u32 regbase);
index 77e81701b847886f0b65012cd2affeccd1b7662d..ac83a539a82aca39d3ba48da3c4dbf8c8099b5d3 100644 (file)
@@ -42,6 +42,7 @@ enum usbhs_omap_port_mode {
 /* Values of UHH_REVISION - Note: these are not given in the TRM */
 #define OMAP_USBHS_REV1                                        0x00000010 /* OMAP3 */
 #define OMAP_USBHS_REV2                                        0x50700100 /* OMAP4 */
+#define OMAP_USBHS_REV2_1                              0x50700101 /* OMAP5 */
 
 /* UHH Register Set */
 #define OMAP_UHH_HOSTCONFIG_INCR4_BURST_EN             (1 << 2)
@@ -60,6 +61,7 @@ enum usbhs_omap_port_mode {
 #define OMAP_P2_MODE_CLEAR                             (3 << 18)
 #define OMAP_P2_MODE_TLL                               (1 << 18)
 #define OMAP_P2_MODE_HSIC                              (3 << 18)
+#define OMAP_P3_MODE_CLEAR                             (3 << 20)
 #define OMAP_P3_MODE_HSIC                              (3 << 20)
 
 /* EHCI Register Set */
index 5f516ef6e04186a6962ada6759ff1898002c4aee..d5c1f7f255a3c5f6eee70634d6dd747ac5639530 100644 (file)
@@ -161,4 +161,6 @@ void mxs_dma_init(void);
 int mxs_dma_init_channel(int chan);
 int mxs_dma_release(int chan);
 
+void mxs_dma_circ_start(int chan, struct mxs_dma_desc *pdesc);
+
 #endif /* __DMA_H__ */
index 66f416f99cd2047add335617baf2a253405d2c7d..5e2f027ba4de678aa6bddd0632a775f58afd8ae4 100644 (file)
@@ -622,6 +622,7 @@ static inline u8 is_omap54xx(void)
 #define OMAP4430_ES2_3 0x44300230
 #define OMAP4460_ES1_0 0x44600100
 #define OMAP4460_ES1_1 0x44600110
+#define OMAP4470_ES1_0 0x44700100
 
 /* omap5 */
 #define OMAP5430_SILICON_ID_INVALID    0
index 1ebfa8694f6a02644fff72e81df109c8de610d19..5d25d04c3bf68f45560aa120faf4182cefca8930 100644 (file)
@@ -2,20 +2,7 @@
  * 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
+ * SPDX-License-Identifier:    GPL-2.0
  *
  * This work is derived from the linux 2.6.27 kernel source
  * To fetch, use the kernel repository
  *
  * 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_H
 #define _GPIO_H
index f74a0b7c0e8b5e78768644b455aaca3cdbce8d6b..f9aff4d894ae95f2d69239e60127485cc5b1a1cc 100644 (file)
@@ -247,7 +247,7 @@ static struct {
 
 static void portmux_setup(unsigned short per)
 {
-       u16 y, offset, muxreg;
+       u16 y, offset, muxreg, mask;
        u16 function = P_FUNCT2MUX(per);
 
        for (y = 0; y < ARRAY_SIZE(port_mux_lut); y++) {
@@ -258,12 +258,13 @@ static void portmux_setup(unsigned short per)
                        offset = port_mux_lut[y].offset;
                        muxreg = bfin_read_PORT_MUX();
 
-                       if (offset != 1)
-                               muxreg &= ~(1 << offset);
+                       if (offset == 1)
+                               mask = 3;
                        else
-                               muxreg &= ~(3 << 1);
+                               mask = 1;
 
-                       muxreg |= (function << offset);
+                       muxreg &= ~(mask << offset);
+                       muxreg |= ((function & mask) << offset);
                        bfin_write_PORT_MUX(muxreg);
                }
        }
@@ -662,8 +663,8 @@ void special_gpio_free(unsigned gpio)
                return;
        }
 
-       reserve(special_gpio, gpio);
-       reserve(peri, gpio);
+       unreserve(special_gpio, gpio);
+       unreserve(peri, gpio);
        set_label(gpio, "free");
 }
 #endif
index 10223bdb791dfe7bd1ca55244f28577a16e6beeb..17d1f468dd3a53b0394d4beebbe52f000f41a811 100644 (file)
@@ -67,6 +67,7 @@ static int display_banner(void)
 static int init_baudrate(void)
 {
        gd->baudrate = getenv_ulong("baudrate", 10, CONFIG_BAUDRATE);
+       gd->bd->bi_baudrate = gd->baudrate;
        return 0;
 }
 
@@ -235,8 +236,6 @@ static int global_board_data_init(void)
        bd->bi_sclk = get_sclk();
        bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
        bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
-       bd->bi_baudrate = (gd->baudrate > 0)
-               ? simple_strtoul(gd->baudrate, NULL, 10) : CONFIG_BAUDRATE;
 
        return 0;
 }
index 6692f24a0be43f2b1d95ba060be8485ce9211cd5..fc545a9ee6fbd89495ac7d23765be831ffd5d471 100644 (file)
@@ -15,5 +15,3 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
 PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
 
 LDSCRIPT ?= $(SRCTREE)/$(CPUDIR)/u-boot.lds
-
-CONFIG_ARCH_DEVICE_TREE := microblaze
index 8267191fdec273af042d30f0917ce8e5be6a19a8..f7182f27e9d9d28b834afb76eb8ca5d4b5d5e107 100644 (file)
@@ -16,6 +16,7 @@
 #include <stdio_dev.h>
 #include <serial.h>
 #include <net.h>
+#include <spi.h>
 #include <linux/compiler.h>
 #include <asm/processor.h>
 #include <asm/microblaze_intc.h>
@@ -147,6 +148,10 @@ void board_init_f(ulong not_used)
        }
 #endif
 
+#ifdef CONFIG_SPI
+       spi_init();
+#endif
+
        /* relocate environment function pointers etc. */
        env_relocate();
 
index cd29734789449b2cd0a0a006a821af9cf897e0d1..3a891ba62727511706291cf292b0fb23b7ec2a02 100644 (file)
@@ -7,4 +7,7 @@
 #ifndef _ASM_CONFIG_H_
 #define _ASM_CONFIG_H_
 
+#define CONFIG_LMB
+#define CONFIG_SYS_BOOT_RAMDISK_HIGH
+
 #endif
index e9f82f711a5b462cfde61e3a67a95a8652e30071..f91406c06002cd31e064fc3d3ea5cc67132dafcd 100644 (file)
@@ -19,11 +19,7 @@ LGOBJS       := $(addprefix $(obj),$(GLSOBJS))
 SOBJS-y        +=
 
 COBJS-y        += board.o
-ifeq ($(CONFIG_QEMU_MIPS),y)
-COBJS-$(CONFIG_CMD_BOOTM) += bootm_qemu_mips.o
-else
 COBJS-$(CONFIG_CMD_BOOTM) += bootm.o
-endif
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
index ade9af47e3b3df60d4fd1f765cfaa8186bfa0824..66340ea47046319083cdfc0556b5dc292681b980 100644 (file)
@@ -17,23 +17,148 @@ DECLARE_GLOBAL_DATA_PTR;
 #define        LINUX_MAX_ENVS          256
 #define        LINUX_MAX_ARGS          256
 
+#if defined(CONFIG_QEMU_MALTA)
+#define mips_boot_qemu_malta   1
+#else
+#define mips_boot_qemu_malta   0
+#endif
+
 static int linux_argc;
 static char **linux_argv;
+static char *linux_argp;
 
 static char **linux_env;
 static char *linux_env_p;
 static int linux_env_idx;
 
-static void linux_params_init(ulong start, char *commandline);
-static void linux_env_set(char *env_name, char *env_val);
+static ulong arch_get_sp(void)
+{
+       ulong ret;
+
+       __asm__ __volatile__("move %0, $sp" : "=r"(ret) : );
+
+       return ret;
+}
+
+void arch_lmb_reserve(struct lmb *lmb)
+{
+       ulong sp;
+
+       sp = arch_get_sp();
+       debug("## Current stack ends at 0x%08lx\n", sp);
+
+       /* adjust sp by 4K to be safe */
+       sp -= 4096;
+       lmb_reserve(lmb, sp, CONFIG_SYS_SDRAM_BASE + gd->ram_size - sp);
+}
+
+static void linux_cmdline_init(void)
+{
+       linux_argc = 1;
+       linux_argv = (char **)UNCACHED_SDRAM(gd->bd->bi_boot_params);
+       linux_argv[0] = 0;
+       linux_argp = (char *)(linux_argv + LINUX_MAX_ARGS);
+}
+
+static void linux_cmdline_set(const char *value, size_t len)
+{
+       linux_argv[linux_argc] = linux_argp;
+       memcpy(linux_argp, value, len);
+       linux_argp[len] = 0;
+
+       linux_argp += len + 1;
+       linux_argc++;
+}
+
+static void linux_cmdline_dump(void)
+{
+       int i;
+
+       debug("## cmdline argv at 0x%p, argp at 0x%p\n",
+             linux_argv, linux_argp);
+
+       for (i = 1; i < linux_argc; i++)
+               debug("   arg %03d: %s\n", i, linux_argv[i]);
+}
+
+static void boot_cmdline_linux(bootm_headers_t *images)
+{
+       const char *bootargs, *next, *quote;
+
+       linux_cmdline_init();
+
+       bootargs = getenv("bootargs");
+       if (!bootargs)
+               return;
+
+       next = bootargs;
+
+       while (bootargs && *bootargs && linux_argc < LINUX_MAX_ARGS) {
+               quote = strchr(bootargs, '"');
+               next = strchr(bootargs, ' ');
+
+               while (next && quote && quote < next) {
+                       /*
+                        * we found a left quote before the next blank
+                        * now we have to find the matching right quote
+                        */
+                       next = strchr(quote + 1, '"');
+                       if (next) {
+                               quote = strchr(next + 1, '"');
+                               next = strchr(next + 1, ' ');
+                       }
+               }
+
+               if (!next)
+                       next = bootargs + strlen(bootargs);
+
+               linux_cmdline_set(bootargs, next - bootargs);
+
+               if (*next)
+                       next++;
+
+               bootargs = next;
+       }
+
+       linux_cmdline_dump();
+}
+
+static void linux_env_init(void)
+{
+       linux_env = (char **)(((ulong) linux_argp + 15) & ~15);
+       linux_env[0] = 0;
+       linux_env_p = (char *)(linux_env + LINUX_MAX_ENVS);
+       linux_env_idx = 0;
+}
+
+static void linux_env_set(const char *env_name, const char *env_val)
+{
+       if (linux_env_idx < LINUX_MAX_ENVS - 1) {
+               linux_env[linux_env_idx] = linux_env_p;
+
+               strcpy(linux_env_p, env_name);
+               linux_env_p += strlen(env_name);
+
+               if (mips_boot_qemu_malta) {
+                       linux_env_p++;
+                       linux_env[++linux_env_idx] = linux_env_p;
+               } else {
+                       *linux_env_p++ = '=';
+               }
+
+               strcpy(linux_env_p, env_val);
+               linux_env_p += strlen(env_val);
+
+               linux_env_p++;
+               linux_env[++linux_env_idx] = 0;
+       }
+}
 
 static void boot_prep_linux(bootm_headers_t *images)
 {
-       char *commandline = getenv("bootargs");
        char env_buf[12];
-       char *cp;
-
-       linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline);
+       const char *cp;
+       ulong rd_start, rd_size;
 
 #ifdef CONFIG_MEMSIZE_IN_BYTES
        sprintf(env_buf, "%lu", (ulong)gd->ram_size);
@@ -41,15 +166,20 @@ static void boot_prep_linux(bootm_headers_t *images)
 #else
        sprintf(env_buf, "%lu", (ulong)(gd->ram_size >> 20));
        debug("## Giving linux memsize in MB, %lu\n",
-               (ulong)(gd->ram_size >> 20));
+             (ulong)(gd->ram_size >> 20));
 #endif /* CONFIG_MEMSIZE_IN_BYTES */
 
+       rd_start = UNCACHED_SDRAM(images->initrd_start);
+       rd_size = images->initrd_end - images->initrd_start;
+
+       linux_env_init();
+
        linux_env_set("memsize", env_buf);
 
-       sprintf(env_buf, "0x%08X", (uint) UNCACHED_SDRAM(images->rd_start));
+       sprintf(env_buf, "0x%08lX", rd_start);
        linux_env_set("initrd_start", env_buf);
 
-       sprintf(env_buf, "0x%X", (uint) (images->rd_end - images->rd_start));
+       sprintf(env_buf, "0x%lX", rd_size);
        linux_env_set("initrd_size", env_buf);
 
        sprintf(env_buf, "0x%08X", (uint) (gd->bd->bi_flashstart));
@@ -65,33 +195,42 @@ static void boot_prep_linux(bootm_headers_t *images)
        cp = getenv("eth1addr");
        if (cp)
                linux_env_set("eth1addr", cp);
+
+       if (mips_boot_qemu_malta)
+               linux_env_set("modetty0", "38400n8r");
 }
 
 static void boot_jump_linux(bootm_headers_t *images)
 {
-       void (*theKernel) (int, char **, char **, int *);
-
-       /* find kernel entry point */
-       theKernel = (void (*)(int, char **, char **, int *))images->ep;
+       typedef void __noreturn (*kernel_entry_t)(int, ulong, ulong, ulong);
+       kernel_entry_t kernel = (kernel_entry_t) images->ep;
+       ulong linux_extra = 0;
 
-       debug("## Transferring control to Linux (at address %08lx) ...\n",
-               (ulong) theKernel);
+       debug("## Transferring control to Linux (at address %p) ...\n", kernel);
 
        bootstage_mark(BOOTSTAGE_ID_RUN_OS);
 
+       if (mips_boot_qemu_malta)
+               linux_extra = gd->ram_size;
+
        /* we assume that the kernel is in place */
        printf("\nStarting kernel ...\n\n");
 
-       theKernel(linux_argc, linux_argv, linux_env, 0);
+       kernel(linux_argc, (ulong)linux_argv, (ulong)linux_env, linux_extra);
 }
 
 int do_bootm_linux(int flag, int argc, char * const argv[],
                        bootm_headers_t *images)
 {
        /* No need for those on MIPS */
-       if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
+       if (flag & BOOTM_STATE_OS_BD_T)
                return -1;
 
+       if (flag & BOOTM_STATE_OS_CMDLINE) {
+               boot_cmdline_linux(images);
+               return 0;
+       }
+
        if (flag & BOOTM_STATE_OS_PREP) {
                boot_prep_linux(images);
                return 0;
@@ -102,76 +241,10 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
                return 0;
        }
 
+       boot_cmdline_linux(images);
        boot_prep_linux(images);
        boot_jump_linux(images);
 
        /* does not return */
        return 1;
 }
-
-static void linux_params_init(ulong start, char *line)
-{
-       char *next, *quote, *argp;
-
-       linux_argc = 1;
-       linux_argv = (char **) start;
-       linux_argv[0] = 0;
-       argp = (char *) (linux_argv + LINUX_MAX_ARGS);
-
-       next = line;
-
-       while (line && *line && linux_argc < LINUX_MAX_ARGS) {
-               quote = strchr(line, '"');
-               next = strchr(line, ' ');
-
-               while (next && quote && quote < next) {
-                       /* we found a left quote before the next blank
-                        * now we have to find the matching right quote
-                        */
-                       next = strchr(quote + 1, '"');
-                       if (next) {
-                               quote = strchr(next + 1, '"');
-                               next = strchr(next + 1, ' ');
-                       }
-               }
-
-               if (!next)
-                       next = line + strlen(line);
-
-               linux_argv[linux_argc] = argp;
-               memcpy(argp, line, next - line);
-               argp[next - line] = 0;
-
-               argp += next - line + 1;
-               linux_argc++;
-
-               if (*next)
-                       next++;
-
-               line = next;
-       }
-
-       linux_env = (char **) (((ulong) argp + 15) & ~15);
-       linux_env[0] = 0;
-       linux_env_p = (char *) (linux_env + LINUX_MAX_ENVS);
-       linux_env_idx = 0;
-}
-
-static void linux_env_set(char *env_name, char *env_val)
-{
-       if (linux_env_idx < LINUX_MAX_ENVS - 1) {
-               linux_env[linux_env_idx] = linux_env_p;
-
-               strcpy(linux_env_p, env_name);
-               linux_env_p += strlen(env_name);
-
-               strcpy(linux_env_p, "=");
-               linux_env_p += 1;
-
-               strcpy(linux_env_p, env_val);
-               linux_env_p += strlen(env_val);
-
-               linux_env_p++;
-               linux_env[++linux_env_idx] = 0;
-       }
-}
diff --git a/arch/mips/lib/bootm_qemu_mips.c b/arch/mips/lib/bootm_qemu_mips.c
deleted file mode 100644 (file)
index 910ab73..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * (C) Copyright 2008
- * Jean-Christophe PLAGNIOL-VILLARD <jcplagniol@jcrosoft.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <command.h>
-#include <image.h>
-#include <asm/byteorder.h>
-#include <asm/addrspace.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-int do_bootm_linux(int flag, int argc, char * const argv[],
-                       bootm_headers_t *images)
-{
-       void (*theKernel) (int, char **, char **, int *);
-       char *bootargs = getenv("bootargs");
-       char *start;
-       uint len;
-
-       /* find kernel entry point */
-       theKernel = (void (*)(int, char **, char **, int *))images->ep;
-
-       bootstage_mark(BOOTSTAGE_ID_RUN_OS);
-
-       debug("## Transferring control to Linux (at address %08lx) ...\n",
-               (ulong) theKernel);
-
-       gd->bd->bi_boot_params = gd->bd->bi_memstart + (16 << 20) - 256;
-       debug("%-12s= 0x%08lX\n", "boot_params", (ulong)gd->bd->bi_boot_params);
-
-       /* set Magic */
-       *(int32_t *)(gd->bd->bi_boot_params - 4) = 0x12345678;
-       /* set ram_size */
-       *(int32_t *)(gd->bd->bi_boot_params - 8) = gd->ram_size;
-
-       start = (char *)gd->bd->bi_boot_params;
-
-       len = strlen(bootargs);
-
-       strncpy(start, bootargs, len + 1);
-
-       start += len;
-
-       len = images->rd_end - images->rd_start;
-       if (len > 0) {
-               start += sprintf(start, " rd_start=0x%08X rd_size=0x%0X",
-               (uint) UNCACHED_SDRAM(images->rd_start),
-               (uint) len);
-       }
-
-       /* we assume that the kernel is in place */
-       printf("\nStarting kernel ...\n\n");
-
-       theKernel(0, NULL, NULL, 0);
-
-       /* does not return */
-       return 1;
-}
diff --git a/arch/nds32/include/asm/dma-mapping.h b/arch/nds32/include/asm/dma-mapping.h
new file mode 100644 (file)
index 0000000..25e5a1b
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2013 Andes Technology Corporation
+ * Ken Kuo, Andes Technology Corporation <ken_kuo@andestech.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+#ifndef __ASM_NDS_DMA_MAPPING_H
+#define __ASM_NDS_DMA_MAPPING_H
+
+enum dma_data_direction {
+       DMA_BIDIRECTIONAL       = 0,
+       DMA_TO_DEVICE           = 1,
+       DMA_FROM_DEVICE         = 2,
+};
+
+static void *dma_alloc_coherent(size_t len, unsigned long *handle)
+{
+       *handle = (unsigned long)memalign(ARCH_DMA_MINALIGN, len);
+       return (void *)*handle;
+}
+
+static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
+                                          enum dma_data_direction dir)
+{
+       return (unsigned long)vaddr;
+}
+
+static inline void dma_unmap_single(volatile void *vaddr, size_t len,
+                                   unsigned long paddr)
+{
+}
+
+#endif /* __ASM_NDS_DMA_MAPPING_H */
index ee69e495b72d788c1f53fe94e3a662dd21122e1d..eaa4e87070b7f95b3020dc69816a2a54eb8b6491 100644 (file)
@@ -45,12 +45,10 @@ int checkcpu (void)
                return -1;              /* no valid CPU revision info */
        }
 
-       printf (" at %s MHz:", strmhz (buf, clock));
+       printf(" at %s MHz: ", strmhz(buf, clock));
 
-       printf (" %u kB I-Cache", checkicache () >> 10);
-       printf (" %u kB D-Cache", checkdcache () >> 10);
-
-       puts ("\n");
+       print_size(checkicache(), " I-Cache ");
+       print_size(checkdcache(), " D-Cache\n");
 
        return 0;
 }
index 09970b0589f9c29c9f422d85b3b5640bf3ceb982..28c25e5febba59176db4ebba14a5360b6156032d 100644 (file)
@@ -299,6 +299,8 @@ static void mpc83xx_pcie_init_bus(int bus, struct pci_region *reg)
 
        printf("PCIE%d: ", bus);
 
+#define PCI_LTSSM      0x404 /* PCIe Link Training, Status State Machine */
+#define PCI_LTSSM_L0   0x16 /* L0 state */
        reg16 = in_le16(hose_cfg_base + PCI_LTSSM);
        if (reg16 >= PCI_LTSSM_L0)
                printf("link\n");
index 0d1e8f1f0adf3fb9bdb31b803ca0801c5abfee45..f70f0d747dee06b5b39489751be29b9b5107cb86 100644 (file)
@@ -46,6 +46,7 @@ COBJS-$(CONFIG_MPC8568) += ddr-gen2.o
 COBJS-$(CONFIG_MPC8544) += ddr-gen2.o
 
 # supports ddr1/2/3
+COBJS-$(CONFIG_PPC_C29X)       += ddr-gen3.o
 COBJS-$(CONFIG_MPC8572) += ddr-gen3.o
 COBJS-$(CONFIG_MPC8536) += ddr-gen3.o
 COBJS-$(CONFIG_MPC8569)        += ddr-gen3.o
@@ -100,6 +101,7 @@ COBJS-$(CONFIG_SYS_FSL_QORIQ_CHASSIS1) += fsl_corenet_serdes.o
 COBJS-$(CONFIG_SYS_FSL_QORIQ_CHASSIS2) += fsl_corenet2_serdes.o
 
 # SoC specific SERDES support
+COBJS-$(CONFIG_PPC_C29X)       += c29x_serdes.o
 COBJS-$(CONFIG_MPC8536) += mpc8536_serdes.o
 COBJS-$(CONFIG_MPC8544) += mpc8544_serdes.o
 COBJS-$(CONFIG_MPC8548) += mpc8548_serdes.o
index 53c6a7faf9215f1f216b5b85ffb1536b5a1a5688..39b8e3ecc2ccc99f99ce8587a0520bf192dd0cdb 100644 (file)
@@ -41,8 +41,8 @@ struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = {
 
 #ifdef CONFIG_SYS_SRIO
 struct srio_liodn_id_table srio_liodn_tbl[] = {
-       SET_SRIO_LIODN_1(1, 307),
-       SET_SRIO_LIODN_1(2, 387),
+       SET_SRIO_LIODN_BASE(1, 307),
+       SET_SRIO_LIODN_BASE(2, 387),
 };
 int srio_liodn_tbl_sz = ARRAY_SIZE(srio_liodn_tbl);
 #endif
@@ -112,10 +112,10 @@ int sec_liodn_tbl_sz = ARRAY_SIZE(sec_liodn_tbl);
 #ifdef CONFIG_SYS_DPAA_RMAN
 struct liodn_id_table rman_liodn_tbl[] = {
        /* Set RMan block 0-3 liodn offset */
-       SET_RMAN_LIODN(0, 678),
-       SET_RMAN_LIODN(1, 679),
-       SET_RMAN_LIODN(2, 680),
-       SET_RMAN_LIODN(3, 681),
+       SET_RMAN_LIODN(0, 6),
+       SET_RMAN_LIODN(1, 7),
+       SET_RMAN_LIODN(2, 8),
+       SET_RMAN_LIODN(3, 9),
 };
 int rman_liodn_tbl_sz = ARRAY_SIZE(rman_liodn_tbl);
 #endif
diff --git a/arch/powerpc/cpu/mpc85xx/c29x_serdes.c b/arch/powerpc/cpu/mpc85xx/c29x_serdes.c
new file mode 100644 (file)
index 0000000..51972cb
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <config.h>
+#include <common.h>
+#include <asm/io.h>
+#include <asm/immap_85xx.h>
+#include <asm/fsl_serdes.h>
+
+#define SRDS1_MAX_LANES                4
+
+static u32 serdes1_prtcl_map;
+
+struct serdes_config {
+       u32 protocol;
+       u8 lanes[SRDS1_MAX_LANES];
+};
+
+static const struct serdes_config serdes1_cfg_tbl[] = {
+       /* SerDes 1 */
+       {1, {PCIE1, PCIE1, PCIE1, PCIE1} },
+       {2, {PCIE1, PCIE1, PCIE1, PCIE1} },
+       {3, {PCIE1, PCIE1, NONE, NONE} },
+       {4, {PCIE1, PCIE1, NONE, NONE} },
+       {5, {PCIE1, NONE, NONE, NONE} },
+       {6, {PCIE1, NONE, NONE, NONE} },
+       {}
+};
+
+int is_serdes_configured(enum srds_prtcl device)
+{
+       return (1 << device) & serdes1_prtcl_map;
+}
+
+void fsl_serdes_init(void)
+{
+       ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
+       u32 pordevsr = in_be32(&gur->pordevsr);
+       u32 srds_cfg = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >>
+                               MPC85xx_PORDEVSR_IO_SEL_SHIFT;
+       const struct serdes_config *ptr;
+       int lane;
+
+       debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
+
+       if (srds_cfg > ARRAY_SIZE(serdes1_cfg_tbl)) {
+               printf("Invalid PORDEVSR[IO_SEL_SRDS] = %d\n", srds_cfg);
+               return;
+       }
+
+       ptr = &serdes1_cfg_tbl[srds_cfg];
+       if (!ptr->protocol)
+               return;
+
+       for (lane = 0; lane < SRDS1_MAX_LANES; lane++) {
+               enum srds_prtcl lane_prtcl = ptr->lanes[lane];
+               serdes1_prtcl_map |= (1 << lane_prtcl);
+       }
+}
index 5cd02ccde6de645dff0a587cb68b084d773e7d4f..eea264b15178f2d11436251ce81957cc74eff7a4 100644 (file)
@@ -244,6 +244,18 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #endif
 #ifdef CONFIG_SYS_FSL_ERRATUM_A006593
        puts("Work-around for Erratum A006593 enabled\n");
+#endif
+#ifdef CONFIG_SYS_FSL_ERRATUM_SEC_A003571
+       if (IS_SVR_REV(svr, 1, 0))
+               puts("Work-around for Erratum A003571 enabled\n");
+#endif
+#ifdef CONFIG_SYS_FSL_ERRATUM_A005812
+       puts("Work-around for Erratum A-005812 enabled\n");
+#endif
+#ifdef CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+       if ((SVR_SOC_VER(svr) == SVR_8548 && IS_SVR_REV(svr, 3, 1)) ||
+           (SVR_REV(svr) <= CONFIG_SYS_FSL_A004447_SVR_REV))
+               puts("Work-around for Erratum I2C-A004447 enabled\n");
 #endif
        return 0;
 }
index 91ac4ee617b6fc51e9e1b95358a5df5825e1700d..1a0196c7c421db4924c9531c55574b4b467696af 100644 (file)
@@ -44,10 +44,10 @@ int checkcpu (void)
        uint major, minor;
        struct cpu_type *cpu;
        char buf1[32], buf2[32];
-#if (defined(CONFIG_DDR_CLK_FREQ) || \
-       defined(CONFIG_FSL_CORENET)) && !defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2)
-       volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
-#endif /* CONFIG_FSL_CORENET */
+#if defined(CONFIG_DDR_CLK_FREQ) || defined(CONFIG_FSL_CORENET)
+       ccsr_gur_t __iomem *gur =
+               (void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+#endif
 
        /*
         * Cornet platforms use ddr sync bit in RCW to indicate sync vs async
@@ -135,81 +135,97 @@ int checkcpu (void)
                if (!(i & 3))
                        printf ("\n       ");
                printf("CPU%d:%-4s MHz, ", core,
-                       strmhz(buf1, sysinfo.freqProcessor[core]));
+                       strmhz(buf1, sysinfo.freq_processor[core]));
        }
-       printf("\n       CCB:%-4s MHz,\n", strmhz(buf1, sysinfo.freqSystemBus));
+       printf("\n       CCB:%-4s MHz,", strmhz(buf1, sysinfo.freq_systembus));
+       printf("\n");
 
 #ifdef CONFIG_FSL_CORENET
        if (ddr_sync == 1) {
                printf("       DDR:%-4s MHz (%s MT/s data rate) "
                        "(Synchronous), ",
-                       strmhz(buf1, sysinfo.freqDDRBus/2),
-                       strmhz(buf2, sysinfo.freqDDRBus));
+                       strmhz(buf1, sysinfo.freq_ddrbus/2),
+                       strmhz(buf2, sysinfo.freq_ddrbus));
        } else {
                printf("       DDR:%-4s MHz (%s MT/s data rate) "
                        "(Asynchronous), ",
-                       strmhz(buf1, sysinfo.freqDDRBus/2),
-                       strmhz(buf2, sysinfo.freqDDRBus));
+                       strmhz(buf1, sysinfo.freq_ddrbus/2),
+                       strmhz(buf2, sysinfo.freq_ddrbus));
        }
 #else
        switch (ddr_ratio) {
        case 0x0:
                printf("       DDR:%-4s MHz (%s MT/s data rate), ",
-                       strmhz(buf1, sysinfo.freqDDRBus/2),
-                       strmhz(buf2, sysinfo.freqDDRBus));
+                       strmhz(buf1, sysinfo.freq_ddrbus/2),
+                       strmhz(buf2, sysinfo.freq_ddrbus));
                break;
        case 0x7:
                printf("       DDR:%-4s MHz (%s MT/s data rate) "
                        "(Synchronous), ",
-                       strmhz(buf1, sysinfo.freqDDRBus/2),
-                       strmhz(buf2, sysinfo.freqDDRBus));
+                       strmhz(buf1, sysinfo.freq_ddrbus/2),
+                       strmhz(buf2, sysinfo.freq_ddrbus));
                break;
        default:
                printf("       DDR:%-4s MHz (%s MT/s data rate) "
                        "(Asynchronous), ",
-                       strmhz(buf1, sysinfo.freqDDRBus/2),
-                       strmhz(buf2, sysinfo.freqDDRBus));
+                       strmhz(buf1, sysinfo.freq_ddrbus/2),
+                       strmhz(buf2, sysinfo.freq_ddrbus));
                break;
        }
 #endif
 
 #if defined(CONFIG_FSL_LBC)
-       if (sysinfo.freqLocalBus > LCRR_CLKDIV) {
-               printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freqLocalBus));
+       if (sysinfo.freq_localbus > LCRR_CLKDIV) {
+               printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freq_localbus));
        } else {
                printf("LBC: unknown (LCRR[CLKDIV] = 0x%02lx)\n",
-                      sysinfo.freqLocalBus);
+                      sysinfo.freq_localbus);
        }
 #endif
 
 #if defined(CONFIG_FSL_IFC)
-       printf("IFC:%-4s MHz\n", strmhz(buf1, sysinfo.freqLocalBus));
+       printf("IFC:%-4s MHz\n", strmhz(buf1, sysinfo.freq_localbus));
 #endif
 
 #ifdef CONFIG_CPM2
-       printf("CPM:   %s MHz\n", strmhz(buf1, sysinfo.freqSystemBus));
+       printf("CPM:   %s MHz\n", strmhz(buf1, sysinfo.freq_systembus));
 #endif
 
 #ifdef CONFIG_QE
-       printf("       QE:%-4s MHz\n", strmhz(buf1, sysinfo.freqQE));
+       printf("       QE:%-4s MHz\n", strmhz(buf1, sysinfo.freq_qe));
 #endif
 
 #ifdef CONFIG_SYS_DPAA_FMAN
        for (i = 0; i < CONFIG_SYS_NUM_FMAN; i++) {
                printf("       FMAN%d: %s MHz\n", i + 1,
-                       strmhz(buf1, sysinfo.freqFMan[i]));
+                       strmhz(buf1, sysinfo.freq_fman[i]));
        }
 #endif
 
 #ifdef CONFIG_SYS_DPAA_QBMAN
-       printf("       QMAN:  %s MHz\n", strmhz(buf1, sysinfo.freqQMAN));
+       printf("       QMAN:  %s MHz\n", strmhz(buf1, sysinfo.freq_qman));
 #endif
 
 #ifdef CONFIG_SYS_DPAA_PME
-       printf("       PME:   %s MHz\n", strmhz(buf1, sysinfo.freqPME));
+       printf("       PME:   %s MHz\n", strmhz(buf1, sysinfo.freq_pme));
 #endif
 
-       puts("L1:    D-cache 32 kB enabled\n       I-cache 32 kB enabled\n");
+       puts("L1:    D-cache 32 KiB enabled\n       I-cache 32 KiB enabled\n");
+
+#ifdef CONFIG_FSL_CORENET
+       /* Display the RCW, so that no one gets confused as to what RCW
+        * we're actually using for this boot.
+        */
+       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");
+#endif
 
        return 0;
 }
index 25beda233eebe4208a708736ff13e18623fb51b8..6036333eaa72fba3ac3e3378d42abb06dce12d6e 100644 (file)
@@ -22,6 +22,7 @@
 #include <asm/fsl_law.h>
 #include <asm/fsl_serdes.h>
 #include <asm/fsl_srio.h>
+#include <fsl_usb.h>
 #include <hwconfig.h>
 #include <linux/compiler.h>
 #include "mp.h"
@@ -166,7 +167,8 @@ static void enable_cpc(void)
 
        }
 
-       printf("Corenet Platform Cache: %d KB enabled\n", size);
+       puts("Corenet Platform Cache: ");
+       print_size(size * 1024, " enabled\n");
 }
 
 static void invalidate_cpc(void)
@@ -355,7 +357,9 @@ int cpu_init_r(void)
        extern int spin_table_compat;
        const char *spin;
 #endif
-
+#ifdef CONFIG_SYS_FSL_ERRATUM_SEC_A003571
+       ccsr_sec_t __iomem *sec = (void *)CONFIG_SYS_FSL_SEC_ADDR;
+#endif
 #if defined(CONFIG_SYS_P4080_ERRATUM_CPU22) || \
        defined(CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011)
        /*
@@ -399,6 +403,14 @@ int cpu_init_r(void)
                sync();
        }
 #endif
+#ifdef CONFIG_SYS_FSL_ERRATUM_A005812
+       /*
+        * A-005812 workaround sets bit 32 of SPR 976 for SoCs running
+        * in write shadow mode. Checking DCWS before setting SPR 976.
+        */
+       if (mfspr(L1CSR2) & L1CSR2_DCWS)
+               mtspr(SPRN_HDBCR0, (mfspr(SPRN_HDBCR0) | 0x80000000));
+#endif
 
 #if defined(CONFIG_PPC_SPINTABLE_COMPATIBLE) && defined(CONFIG_MP)
        spin = getenv("spin_table_compat");
@@ -448,28 +460,28 @@ int cpu_init_r(void)
        case 0x1:
                if (ver == SVR_8540 || ver == SVR_8560   ||
                    ver == SVR_8541 || ver == SVR_8555) {
-                       puts("128 KB ");
-                       /* set L2E=1, L2I=1, & L2BLKSZ=1 (128 Kbyte) */
+                       puts("128 KiB ");
+                       /* set L2E=1, L2I=1, & L2BLKSZ=1 (128 KiBibyte) */
                        cache_ctl = 0xc4000000;
                } else {
-                       puts("256 KB ");
+                       puts("256 KiB ");
                        cache_ctl = 0xc0000000; /* set L2E=1, L2I=1, & L2SRAM=0 */
                }
                break;
        case 0x2:
                if (ver == SVR_8540 || ver == SVR_8560   ||
                    ver == SVR_8541 || ver == SVR_8555) {
-                       puts("256 KB ");
-                       /* set L2E=1, L2I=1, & L2BLKSZ=2 (256 Kbyte) */
+                       puts("256 KiB ");
+                       /* set L2E=1, L2I=1, & L2BLKSZ=2 (256 KiBibyte) */
                        cache_ctl = 0xc8000000;
                } else {
-                       puts ("512 KB ");
+                       puts("512 KiB ");
                        /* set L2E=1, L2I=1, & L2SRAM=0 */
                        cache_ctl = 0xc0000000;
                }
                break;
        case 0x3:
-               puts("1024 KB ");
+               puts("1024 KiB ");
                /* set L2E=1, L2I=1, & L2SRAM=0 */
                cache_ctl = 0xc0000000;
                break;
@@ -517,13 +529,14 @@ int cpu_init_r(void)
        if (CONFIG_SYS_INIT_L2CSR0 & L2CSR0_L2E) {
                while (!(mfspr(SPRN_L2CSR0) & L2CSR0_L2E))
                        ;
-               printf("%d KB enabled\n", (l2cfg0 & 0x3fff) * 64);
+               print_size((l2cfg0 & 0x3fff) * 64 * 1024, " enabled\n");
        }
 
 skip_l2:
 #elif defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2)
        if (l2cache->l2csr0 & L2CSR0_L2E)
-               printf("%d KB enabled\n", (l2cache->l2cfg0 & 0x3fff) * 64);
+               print_size((l2cache->l2cfg0 & 0x3fff) * 64 * 1024,
+                          " enabled\n");
 
        enable_cluster_l2();
 #else
@@ -532,8 +545,16 @@ skip_l2:
 
        enable_cpc();
 
+#ifndef CONFIG_SYS_FSL_NO_SERDES
        /* needs to be in ram since code uses global static vars */
        fsl_serdes_init();
+#endif
+
+#ifdef CONFIG_SYS_FSL_ERRATUM_SEC_A003571
+#define MCFGR_AXIPIPE 0x000000f0
+       if (IS_SVR_REV(svr, 1, 0))
+               clrbits_be32(&sec->mcfgr, MCFGR_AXIPIPE);
+#endif
 
 #ifdef CONFIG_SYS_FSL_ERRATUM_A005871
        if (IS_SVR_REV(svr, 1, 0)) {
@@ -595,7 +616,7 @@ skip_l2:
 
 #ifdef CONFIG_SYS_FSL_USB1_PHY_ENABLE
        {
-               ccsr_usb_phy_t *usb_phy1 =
+               struct ccsr_usb_phy __iomem *usb_phy1 =
                        (void *)CONFIG_SYS_MPC85xx_USB1_PHY_ADDR;
                out_be32(&usb_phy1->usb_enable_override,
                                CONFIG_SYS_FSL_USB_ENABLE_OVERRIDE);
@@ -603,7 +624,7 @@ skip_l2:
 #endif
 #ifdef CONFIG_SYS_FSL_USB2_PHY_ENABLE
        {
-               ccsr_usb_phy_t *usb_phy2 =
+               struct ccsr_usb_phy __iomem *usb_phy2 =
                        (void *)CONFIG_SYS_MPC85xx_USB2_PHY_ADDR;
                out_be32(&usb_phy2->usb_enable_override,
                                CONFIG_SYS_FSL_USB_ENABLE_OVERRIDE);
@@ -625,7 +646,7 @@ skip_l2:
 #endif
 
 #if defined(CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE)
-               ccsr_usb_phy_t *usb_phy =
+               struct ccsr_usb_phy __iomem *usb_phy =
                        (void *)CONFIG_SYS_MPC85xx_USB1_PHY_ADDR;
                setbits_be32(&usb_phy->pllprg[1],
                             CONFIG_SYS_FSL_USB_PLLPRG2_PHY2_CLK_EN |
index 8a86819fb52ab0010cd1975af4e36328fada5761..4dd8c0b5bf2735e4b0b6f1c9732438536160ae0d 100644 (file)
@@ -15,7 +15,7 @@
 #endif
 
 void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
-                            unsigned int ctrl_num)
+                            unsigned int ctrl_num, int step)
 {
        unsigned int i;
        volatile ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
index a7058625227bdcaa333731b8c5785b779c0299e2..542bc84acf941c44cf3ce8b7b7d2e1ee08d41967 100644 (file)
@@ -16,7 +16,7 @@
 #endif
 
 void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
-                            unsigned int ctrl_num)
+                            unsigned int ctrl_num, int step)
 {
        unsigned int i;
        ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
index c5b47200e08b017c95c58b78cb03664ece50cc33..1be51d3307954ad3dd12eebab4605a78d8f99887 100644 (file)
 #error Invalid setting for CONFIG_CHIP_SELECTS_PER_CTRL
 #endif
 
+
+/*
+ * regs has the to-be-set values for DDR controller registers
+ * ctrl_num is the DDR controller number
+ * step: 0 goes through the initialization in one pass
+ *       1 sets registers and returns before enabling controller
+ *       2 resumes from step 1 and continues to initialize
+ * Dividing the initialization to two steps to deassert DDR reset signal
+ * to comply with JEDEC specs for RDIMMs.
+ */
 void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
-                            unsigned int ctrl_num)
+                            unsigned int ctrl_num, int step)
 {
        unsigned int i, bus_width;
        volatile ccsr_ddr_t *ddr;
@@ -54,6 +64,9 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
                return;
        }
 
+       if (step == 2)
+               goto step2;
+
        if (regs->ddr_eor)
                out_be32(&ddr->eor, regs->ddr_eor);
 #ifdef CONFIG_SYS_FSL_ERRATUM_DDR111_DDR134
@@ -123,10 +136,17 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
        out_be32(&ddr->timing_cfg_5, regs->timing_cfg_5);
        out_be32(&ddr->ddr_zq_cntl, regs->ddr_zq_cntl);
        out_be32(&ddr->ddr_wrlvl_cntl, regs->ddr_wrlvl_cntl);
+#ifndef CONFIG_SYS_FSL_DDR_EMU
+       /*
+        * Skip these two registers if running on emulator
+        * because emulator doesn't have skew between bytes.
+        */
+
        if (regs->ddr_wrlvl_cntl_2)
                out_be32(&ddr->ddr_wrlvl_cntl_2, regs->ddr_wrlvl_cntl_2);
        if (regs->ddr_wrlvl_cntl_3)
                out_be32(&ddr->ddr_wrlvl_cntl_3, regs->ddr_wrlvl_cntl_3);
+#endif
 
        out_be32(&ddr->ddr_sr_cntr, regs->ddr_sr_cntr);
        out_be32(&ddr->ddr_sdram_rcw_1, regs->ddr_sdram_rcw_1);
@@ -150,6 +170,20 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
        out_be32(&ddr->debug[21], 0x24000000);
 #endif /* CONFIG_SYS_FSL_ERRATUM_DDR_A003474 */
 
+       /*
+        * For RDIMMs, JEDEC spec requires clocks to be stable before reset is
+        * deasserted. Clocks start when any chip select is enabled and clock
+        * control register is set. Because all DDR components are connected to
+        * one reset signal, this needs to be done in two steps. Step 1 is to
+        * get the clocks started. Step 2 resumes after reset signal is
+        * deasserted.
+        */
+       if (step == 1) {
+               udelay(200);
+               return;
+       }
+
+step2:
        /* Set, but do not enable the memory */
        temp_sdram_cfg = regs->ddr_sdram_cfg;
        temp_sdram_cfg &= ~(SDRAM_CFG_MEM_EN);
index cfaa2edcedb510cb9764fb3fe644373cfbeec14a..533d47ab438a86889ec0b0dbc0ccc54f2f1bf00c 100644 (file)
@@ -403,22 +403,22 @@ static void ft_fixup_dpaa_clks(void *blob)
        get_sys_info(&sysinfo);
 #ifdef CONFIG_SYS_DPAA_FMAN
        ft_fixup_clks(blob, "fsl,fman", CONFIG_SYS_FSL_FM1_OFFSET,
-                       sysinfo.freqFMan[0]);
+                       sysinfo.freq_fman[0]);
 
 #if (CONFIG_SYS_NUM_FMAN == 2)
        ft_fixup_clks(blob, "fsl,fman", CONFIG_SYS_FSL_FM2_OFFSET,
-                       sysinfo.freqFMan[1]);
+                       sysinfo.freq_fman[1]);
 #endif
 #endif
 
 #ifdef CONFIG_SYS_DPAA_QBMAN
        do_fixup_by_compat_u32(blob, "fsl,qman",
-                       "clock-frequency", sysinfo.freqQMAN, 1);
+                       "clock-frequency", sysinfo.freq_qman, 1);
 #endif
 
 #ifdef CONFIG_SYS_DPAA_PME
        do_fixup_by_compat_u32(blob, "fsl,pme",
-               "clock-frequency", sysinfo.freqPME, 1);
+               "clock-frequency", sysinfo.freq_pme, 1);
 #endif
 }
 #else
@@ -476,7 +476,7 @@ void fdt_fixup_fman_firmware(void *blob)
        if (!p)
                return;
 
-       fmanfw = (struct qe_firmware *) simple_strtoul(p, NULL, 0);
+       fmanfw = (struct qe_firmware *) simple_strtoul(p, NULL, 16);
        if (!fmanfw)
                return;
 
@@ -604,15 +604,19 @@ void ft_cpu_setup(void *blob, bd_t *bd)
 
        fdt_add_enet_stashing(blob);
 
+#ifndef CONFIG_FSL_TBCLK_EXTRA_DIV
+#define CONFIG_FSL_TBCLK_EXTRA_DIV 1
+#endif
        do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
-               "timebase-frequency", get_tbclk(), 1);
+               "timebase-frequency", get_tbclk() / CONFIG_FSL_TBCLK_EXTRA_DIV,
+               1);
        do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
                "bus-frequency", bd->bi_busfreq, 1);
        get_sys_info(&sysinfo);
        off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpu", 4);
        while (off != -FDT_ERR_NOTFOUND) {
                u32 *reg = (u32 *)fdt_getprop(blob, off, "reg", 0);
-               val = cpu_to_fdt32(sysinfo.freqProcessor[*reg]);
+               val = cpu_to_fdt32(sysinfo.freq_processor[*reg]);
                fdt_setprop(blob, off, "clock-frequency", &val, 4);
                off = fdt_node_offset_by_prop_value(blob, off, "device_type",
                                                        "cpu", 4);
index de6bd11a16529d39a0580eff7b080ed12dd3a2b5..39d9409d64bab1442908e3ec8de64fb054aa3b52 100644 (file)
 #include <asm/errno.h>
 #include "fsl_corenet2_serdes.h"
 
+#ifdef CONFIG_SYS_FSL_SRDS_1
 static u64 serdes1_prtcl_map;
+#endif
+#ifdef CONFIG_SYS_FSL_SRDS_2
 static u64 serdes2_prtcl_map;
+#endif
 #ifdef CONFIG_SYS_FSL_SRDS_3
 static u64 serdes3_prtcl_map;
 #endif
@@ -78,8 +82,12 @@ int is_serdes_configured(enum srds_prtcl device)
 {
        u64 ret = 0;
 
+#ifdef CONFIG_SYS_FSL_SRDS_1
        ret |= (1ULL << device) & serdes1_prtcl_map;
+#endif
+#ifdef CONFIG_SYS_FSL_SRDS_2
        ret |= (1ULL << device) & serdes2_prtcl_map;
+#endif
 #ifdef CONFIG_SYS_FSL_SRDS_3
        ret |= (1ULL << device) & serdes3_prtcl_map;
 #endif
@@ -97,14 +105,18 @@ int serdes_get_first_lane(u32 sd, enum srds_prtcl device)
        int i;
 
        switch (sd) {
+#ifdef CONFIG_SYS_FSL_SRDS_1
        case FSL_SRDS_1:
                cfg &= FSL_CORENET2_RCWSR4_SRDS1_PRTCL;
                cfg >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT;
                break;
+#endif
+#ifdef CONFIG_SYS_FSL_SRDS_2
        case FSL_SRDS_2:
                cfg &= FSL_CORENET2_RCWSR4_SRDS2_PRTCL;
                cfg >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT;
                break;
+#endif
 #ifdef CONFIG_SYS_FSL_SRDS_3
        case FSL_SRDS_3:
                cfg &= FSL_CORENET2_RCWSR4_SRDS3_PRTCL;
@@ -163,14 +175,18 @@ u64 serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift)
 void fsl_serdes_init(void)
 {
 
+#ifdef CONFIG_SYS_FSL_SRDS_1
        serdes1_prtcl_map = serdes_init(FSL_SRDS_1,
                CONFIG_SYS_FSL_CORENET_SERDES_ADDR,
                FSL_CORENET2_RCWSR4_SRDS1_PRTCL,
                FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT);
+#endif
+#ifdef CONFIG_SYS_FSL_SRDS_2
        serdes2_prtcl_map = serdes_init(FSL_SRDS_2,
                CONFIG_SYS_FSL_CORENET_SERDES_ADDR + FSL_SRDS_2 * 0x1000,
                FSL_CORENET2_RCWSR4_SRDS2_PRTCL,
                FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT);
+#endif
 #ifdef CONFIG_SYS_FSL_SRDS_3
        serdes3_prtcl_map = serdes_init(FSL_SRDS_3,
                CONFIG_SYS_FSL_CORENET_SERDES_ADDR + FSL_SRDS_3 * 0x1000,
index 6de572d5945b590023aecc7dbd08907707489889..d515b234a4914fb3d3eb1607732aada988693fbc 100644 (file)
@@ -9,5 +9,4 @@
 
 int is_serdes_prtcl_valid(int serdes, u32 prtcl);
 int serdes_lane_enabled(int lane);
-enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane);
 #endif /* __FSL_CORENET2_SERDES_H */
index 15bbbc15aa4ef27ae55e61ac24629880d0706804..c15e83b521e613df5d0637c11bb7615b71ae8836 100644 (file)
@@ -226,6 +226,21 @@ __secondary_start_page:
 2:
 #endif
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A005812
+       /*
+        * A-005812 workaround sets bit 32 of SPR 976 for SoCs running in
+        * write shadow mode. This code should run after other code setting
+        * DCWS.
+        */
+       mfspr   r3,L1CSR2
+       andis.  r3,r3,(L1CSR2_DCWS)@h
+       beq     1f
+       mfspr   r3, SPRN_HDBCR0
+       oris    r3, r3, 0x8000
+       mtspr   SPRN_HDBCR0, r3
+1:
+#endif
+
 #ifdef CONFIG_BACKSIDE_L2_CACHE
        /* skip L2 setup on P2040/P2040E as they have no L2 */
        mfspr   r3,SPRN_SVR
index f093960fe7e7139cfec9e164f8ff9a5b97a25aaa..07690f97b16a9ca9e2095233b65f60c4c23ff364 100644 (file)
@@ -20,7 +20,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 /* --------------------------------------------------------------- */
 
-void get_sys_info (sys_info_t * sysInfo)
+void get_sys_info(sys_info_t *sys_info)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
 #ifdef CONFIG_FSL_IFC
@@ -46,7 +46,7 @@ void get_sys_info (sys_info_t * sysInfo)
                [14] = 3,       /* CC4 PPL / 4 */
        };
 
-       const u8 core_cplx_PLL_div[16] = {
+       const u8 core_cplx_pll_div[16] = {
                [ 0] = 1,       /* CC1 PPL / 1 */
                [ 1] = 2,       /* CC1 PPL / 2 */
                [ 2] = 4,       /* CC1 PPL / 4 */
@@ -60,26 +60,26 @@ void get_sys_info (sys_info_t * sysInfo)
                [13] = 2,       /* CC4 PPL / 2 */
                [14] = 4,       /* CC4 PPL / 4 */
        };
-       uint i, freqCC_PLL[6], rcw_tmp;
+       uint i, freq_cc_pll[6], rcw_tmp;
        uint ratio[6];
        unsigned long sysclk = CONFIG_SYS_CLK_FREQ;
        uint mem_pll_rat;
 
-       sysInfo->freqSystemBus = sysclk;
+       sys_info->freq_systembus = sysclk;
 #ifdef CONFIG_DDR_CLK_FREQ
-       sysInfo->freqDDRBus = CONFIG_DDR_CLK_FREQ;
+       sys_info->freq_ddrbus = CONFIG_DDR_CLK_FREQ;
 #else
-       sysInfo->freqDDRBus = sysclk;
+       sys_info->freq_ddrbus = sysclk;
 #endif
 
-       sysInfo->freqSystemBus *= (in_be32(&gur->rcwsr[0]) >> 25) & 0x1f;
+       sys_info->freq_systembus *= (in_be32(&gur->rcwsr[0]) >> 25) & 0x1f;
        mem_pll_rat = (in_be32(&gur->rcwsr[0]) >>
                        FSL_CORENET_RCWSR0_MEM_PLL_RAT_SHIFT)
                        & FSL_CORENET_RCWSR0_MEM_PLL_RAT_MASK;
        if (mem_pll_rat > 2)
-               sysInfo->freqDDRBus *= mem_pll_rat;
+               sys_info->freq_ddrbus *= mem_pll_rat;
        else
-               sysInfo->freqDDRBus = sysInfo->freqSystemBus * mem_pll_rat;
+               sys_info->freq_ddrbus = sys_info->freq_systembus * mem_pll_rat;
 
        ratio[0] = (in_be32(&clk->pllc1gsr) >> 1) & 0x3f;
        ratio[1] = (in_be32(&clk->pllc2gsr) >> 1) & 0x3f;
@@ -89,9 +89,9 @@ void get_sys_info (sys_info_t * sysInfo)
        ratio[5] = (in_be32(&clk->pllc6gsr) >> 1) & 0x3f;
        for (i = 0; i < 6; i++) {
                if (ratio[i] > 4)
-                       freqCC_PLL[i] = sysclk * ratio[i];
+                       freq_cc_pll[i] = sysclk * ratio[i];
                else
-                       freqCC_PLL[i] = sysInfo->freqSystemBus * ratio[i];
+                       freq_cc_pll[i] = sys_info->freq_systembus * ratio[i];
        }
 #ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2
        /*
@@ -110,8 +110,8 @@ void get_sys_info (sys_info_t * sysInfo)
                        printf("Unsupported architecture configuration"
                                " in function %s\n", __func__);
                cplx_pll += (cluster / 2) * 3;
-               sysInfo->freqProcessor[cpu] =
-                        freqCC_PLL[cplx_pll] / core_cplx_PLL_div[c_pll_sel];
+               sys_info->freq_processor[cpu] =
+                        freq_cc_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel];
        }
 #ifdef CONFIG_PPC_B4860
 #define FM1_CLK_SEL    0xe0000000
@@ -127,63 +127,63 @@ void get_sys_info (sys_info_t * sysInfo)
 #ifdef CONFIG_SYS_DPAA_PME
        switch ((rcw_tmp & PME_CLK_SEL) >> PME_CLK_SHIFT) {
        case 1:
-               sysInfo->freqPME = freqCC_PLL[0];
+               sys_info->freq_pme = freq_cc_pll[0];
                break;
        case 2:
-               sysInfo->freqPME = freqCC_PLL[0] / 2;
+               sys_info->freq_pme = freq_cc_pll[0] / 2;
                break;
        case 3:
-               sysInfo->freqPME = freqCC_PLL[0] / 3;
+               sys_info->freq_pme = freq_cc_pll[0] / 3;
                break;
        case 4:
-               sysInfo->freqPME = freqCC_PLL[0] / 4;
+               sys_info->freq_pme = freq_cc_pll[0] / 4;
                break;
        case 6:
-               sysInfo->freqPME = freqCC_PLL[1] / 2;
+               sys_info->freq_pme = freq_cc_pll[1] / 2;
                break;
        case 7:
-               sysInfo->freqPME = freqCC_PLL[1] / 3;
+               sys_info->freq_pme = freq_cc_pll[1] / 3;
                break;
        default:
                printf("Error: Unknown PME clock select!\n");
        case 0:
-               sysInfo->freqPME = sysInfo->freqSystemBus / 2;
+               sys_info->freq_pme = sys_info->freq_systembus / 2;
                break;
 
        }
 #endif
 
 #ifdef CONFIG_SYS_DPAA_QBMAN
-       sysInfo->freqQMAN = sysInfo->freqSystemBus / 2;
+       sys_info->freq_qman = sys_info->freq_systembus / 2;
 #endif
 
 #ifdef CONFIG_SYS_DPAA_FMAN
        switch ((rcw_tmp & FM1_CLK_SEL) >> FM1_CLK_SHIFT) {
        case 1:
-               sysInfo->freqFMan[0] = freqCC_PLL[3];
+               sys_info->freq_fman[0] = freq_cc_pll[3];
                break;
        case 2:
-               sysInfo->freqFMan[0] = freqCC_PLL[3] / 2;
+               sys_info->freq_fman[0] = freq_cc_pll[3] / 2;
                break;
        case 3:
-               sysInfo->freqFMan[0] = freqCC_PLL[3] / 3;
+               sys_info->freq_fman[0] = freq_cc_pll[3] / 3;
                break;
        case 4:
-               sysInfo->freqFMan[0] = freqCC_PLL[3] / 4;
+               sys_info->freq_fman[0] = freq_cc_pll[3] / 4;
                break;
        case 5:
-               sysInfo->freqFMan[0] = sysInfo->freqSystemBus;
+               sys_info->freq_fman[0] = sys_info->freq_systembus;
                break;
        case 6:
-               sysInfo->freqFMan[0] = freqCC_PLL[4] / 2;
+               sys_info->freq_fman[0] = freq_cc_pll[4] / 2;
                break;
        case 7:
-               sysInfo->freqFMan[0] = freqCC_PLL[4] / 3;
+               sys_info->freq_fman[0] = freq_cc_pll[4] / 3;
                break;
        default:
                printf("Error: Unknown FMan1 clock select!\n");
        case 0:
-               sysInfo->freqFMan[0] = sysInfo->freqSystemBus / 2;
+               sys_info->freq_fman[0] = sys_info->freq_systembus / 2;
                break;
        }
 #if (CONFIG_SYS_NUM_FMAN) == 2
@@ -192,27 +192,27 @@ void get_sys_info (sys_info_t * sysInfo)
        rcw_tmp = in_be32(&gur->rcwsr[15]);
        switch ((rcw_tmp & FM2_CLK_SEL) >> FM2_CLK_SHIFT) {
        case 1:
-               sysInfo->freqFMan[1] = freqCC_PLL[4];
+               sys_info->freq_fman[1] = freq_cc_pll[4];
                break;
        case 2:
-               sysInfo->freqFMan[1] = freqCC_PLL[4] / 2;
+               sys_info->freq_fman[1] = freq_cc_pll[4] / 2;
                break;
        case 3:
-               sysInfo->freqFMan[1] = freqCC_PLL[4] / 3;
+               sys_info->freq_fman[1] = freq_cc_pll[4] / 3;
                break;
        case 4:
-               sysInfo->freqFMan[1] = freqCC_PLL[4] / 4;
+               sys_info->freq_fman[1] = freq_cc_pll[4] / 4;
                break;
        case 6:
-               sysInfo->freqFMan[1] = freqCC_PLL[3] / 2;
+               sys_info->freq_fman[1] = freq_cc_pll[3] / 2;
                break;
        case 7:
-               sysInfo->freqFMan[1] = freqCC_PLL[3] / 3;
+               sys_info->freq_fman[1] = freq_cc_pll[3] / 3;
                break;
        default:
                printf("Error: Unknown FMan2 clock select!\n");
        case 0:
-               sysInfo->freqFMan[1] = sysInfo->freqSystemBus / 2;
+               sys_info->freq_fman[1] = sys_info->freq_systembus / 2;
                break;
        }
 #endif /* CONFIG_SYS_NUM_FMAN == 2 */
@@ -225,8 +225,8 @@ void get_sys_info (sys_info_t * sysInfo)
                                & 0xf;
                u32 cplx_pll = core_cplx_PLL[c_pll_sel];
 
-               sysInfo->freqProcessor[cpu] =
-                        freqCC_PLL[cplx_pll] / core_cplx_PLL_div[c_pll_sel];
+               sys_info->freq_processor[cpu] =
+                        freq_cc_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel];
        }
 #define PME_CLK_SEL    0x80000000
 #define FM1_CLK_SEL    0x40000000
@@ -246,43 +246,43 @@ void get_sys_info (sys_info_t * sysInfo)
 #ifdef CONFIG_SYS_DPAA_PME
        if (rcw_tmp & PME_CLK_SEL) {
                if (rcw_tmp & HWA_ASYNC_DIV)
-                       sysInfo->freqPME = freqCC_PLL[HWA_CC_PLL] / 4;
+                       sys_info->freq_pme = freq_cc_pll[HWA_CC_PLL] / 4;
                else
-                       sysInfo->freqPME = freqCC_PLL[HWA_CC_PLL] / 2;
+                       sys_info->freq_pme = freq_cc_pll[HWA_CC_PLL] / 2;
        } else {
-               sysInfo->freqPME = sysInfo->freqSystemBus / 2;
+               sys_info->freq_pme = sys_info->freq_systembus / 2;
        }
 #endif
 
 #ifdef CONFIG_SYS_DPAA_FMAN
        if (rcw_tmp & FM1_CLK_SEL) {
                if (rcw_tmp & HWA_ASYNC_DIV)
-                       sysInfo->freqFMan[0] = freqCC_PLL[HWA_CC_PLL] / 4;
+                       sys_info->freq_fman[0] = freq_cc_pll[HWA_CC_PLL] / 4;
                else
-                       sysInfo->freqFMan[0] = freqCC_PLL[HWA_CC_PLL] / 2;
+                       sys_info->freq_fman[0] = freq_cc_pll[HWA_CC_PLL] / 2;
        } else {
-               sysInfo->freqFMan[0] = sysInfo->freqSystemBus / 2;
+               sys_info->freq_fman[0] = sys_info->freq_systembus / 2;
        }
 #if (CONFIG_SYS_NUM_FMAN) == 2
        if (rcw_tmp & FM2_CLK_SEL) {
                if (rcw_tmp & HWA_ASYNC_DIV)
-                       sysInfo->freqFMan[1] = freqCC_PLL[HWA_CC_PLL] / 4;
+                       sys_info->freq_fman[1] = freq_cc_pll[HWA_CC_PLL] / 4;
                else
-                       sysInfo->freqFMan[1] = freqCC_PLL[HWA_CC_PLL] / 2;
+                       sys_info->freq_fman[1] = freq_cc_pll[HWA_CC_PLL] / 2;
        } else {
-               sysInfo->freqFMan[1] = sysInfo->freqSystemBus / 2;
+               sys_info->freq_fman[1] = sys_info->freq_systembus / 2;
        }
 #endif
 #endif
 
 #ifdef CONFIG_SYS_DPAA_QBMAN
-       sysInfo->freqQMAN = sysInfo->freqSystemBus / 2;
+       sys_info->freq_qman = sys_info->freq_systembus / 2;
 #endif
 
 #endif /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */
 
 #else /* CONFIG_FSL_CORENET */
-       uint plat_ratio, e500_ratio, half_freqSystemBus;
+       uint plat_ratio, e500_ratio, half_freq_systembus;
        int i;
 #ifdef CONFIG_QE
        __maybe_unused u32 qe_ratio;
@@ -290,40 +290,40 @@ void get_sys_info (sys_info_t * sysInfo)
 
        plat_ratio = (gur->porpllsr) & 0x0000003e;
        plat_ratio >>= 1;
-       sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ;
+       sys_info->freq_systembus = plat_ratio * CONFIG_SYS_CLK_FREQ;
 
        /* Divide before multiply to avoid integer
         * overflow for processor speeds above 2GHz */
-       half_freqSystemBus = sysInfo->freqSystemBus/2;
+       half_freq_systembus = sys_info->freq_systembus/2;
        for (i = 0; i < cpu_numcores(); i++) {
                e500_ratio = ((gur->porpllsr) >> (i * 8 + 16)) & 0x3f;
-               sysInfo->freqProcessor[i] = e500_ratio * half_freqSystemBus;
+               sys_info->freq_processor[i] = e500_ratio * half_freq_systembus;
        }
 
-       /* Note: freqDDRBus is the MCLK frequency, not the data rate. */
-       sysInfo->freqDDRBus = sysInfo->freqSystemBus;
+       /* Note: freq_ddrbus is the MCLK frequency, not the data rate. */
+       sys_info->freq_ddrbus = sys_info->freq_systembus;
 
 #ifdef CONFIG_DDR_CLK_FREQ
        {
                u32 ddr_ratio = ((gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO)
                        >> MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;
                if (ddr_ratio != 0x7)
-                       sysInfo->freqDDRBus = ddr_ratio * CONFIG_DDR_CLK_FREQ;
+                       sys_info->freq_ddrbus = ddr_ratio * CONFIG_DDR_CLK_FREQ;
        }
 #endif
 
 #ifdef CONFIG_QE
 #if defined(CONFIG_P1012) || defined(CONFIG_P1021) || defined(CONFIG_P1025)
-       sysInfo->freqQE =  sysInfo->freqSystemBus;
+       sys_info->freq_qe =  sys_info->freq_systembus;
 #else
        qe_ratio = ((gur->porpllsr) & MPC85xx_PORPLLSR_QE_RATIO)
                        >> MPC85xx_PORPLLSR_QE_RATIO_SHIFT;
-       sysInfo->freqQE = qe_ratio * CONFIG_SYS_CLK_FREQ;
+       sys_info->freq_qe = qe_ratio * CONFIG_SYS_CLK_FREQ;
 #endif
 #endif
 
 #ifdef CONFIG_SYS_DPAA_FMAN
-               sysInfo->freqFMan[0] = sysInfo->freqSystemBus;
+               sys_info->freq_fman[0] = sys_info->freq_systembus;
 #endif
 
 #endif /* CONFIG_FSL_CORENET */
@@ -350,10 +350,10 @@ void get_sys_info (sys_info_t * sysInfo)
                 */
                lcrr_div *= 2;
 #endif
-               sysInfo->freqLocalBus = sysInfo->freqSystemBus / lcrr_div;
+               sys_info->freq_localbus = sys_info->freq_systembus / lcrr_div;
        } else {
                /* In case anyone cares what the unknown value is */
-               sysInfo->freqLocalBus = lcrr_div;
+               sys_info->freq_localbus = lcrr_div;
        }
 #endif
 
@@ -361,7 +361,7 @@ void get_sys_info (sys_info_t * sysInfo)
        ccr = in_be32(&ifc_regs->ifc_ccr);
        ccr = ((ccr & IFC_CCR_CLK_DIV_MASK) >> IFC_CCR_CLK_DIV_SHIFT) + 1;
 
-       sysInfo->freqLocalBus = sysInfo->freqSystemBus / ccr;
+       sys_info->freq_localbus = sys_info->freq_systembus / ccr;
 #endif
 }
 
@@ -382,13 +382,13 @@ int get_clocks (void)
        dfbrg = (sccr & SCCR_DFBRG_MSK) >> SCCR_DFBRG_SHIFT;
 #endif
        get_sys_info (&sys_info);
-       gd->cpu_clk = sys_info.freqProcessor[0];
-       gd->bus_clk = sys_info.freqSystemBus;
-       gd->mem_clk = sys_info.freqDDRBus;
-       gd->arch.lbc_clk = sys_info.freqLocalBus;
+       gd->cpu_clk = sys_info.freq_processor[0];
+       gd->bus_clk = sys_info.freq_systembus;
+       gd->mem_clk = sys_info.freq_ddrbus;
+       gd->arch.lbc_clk = sys_info.freq_localbus;
 
 #ifdef CONFIG_QE
-       gd->arch.qe_clk = sys_info.freqQE;
+       gd->arch.qe_clk = sys_info.freq_qe;
        gd->arch.brg_clk = gd->arch.qe_clk / 2;
 #endif
        /*
@@ -400,7 +400,7 @@ int get_clocks (void)
         */
 #if defined(CONFIG_MPC8540) || defined(CONFIG_MPC8541) || \
        defined(CONFIG_MPC8560) || defined(CONFIG_MPC8555)
-       gd->arch.i2c1_clk = sys_info.freqSystemBus;
+       gd->arch.i2c1_clk = sys_info.freq_systembus;
 #elif defined(CONFIG_MPC8544)
        /*
         * On the 8544, the I2C clock is the same as the SEC clock.  This can be
@@ -410,12 +410,12 @@ int get_clocks (void)
         * PORDEVSR2_SEC_CFG bit is 0 on all 85xx boards that are not an 8544.
         */
        if (gur->pordevsr2 & MPC85xx_PORDEVSR2_SEC_CFG)
-               gd->arch.i2c1_clk = sys_info.freqSystemBus / 3;
+               gd->arch.i2c1_clk = sys_info.freq_systembus / 3;
        else
-               gd->arch.i2c1_clk = sys_info.freqSystemBus / 2;
+               gd->arch.i2c1_clk = sys_info.freq_systembus / 2;
 #else
        /* Most 85xx SOCs use CCB/2, so this is the default behavior. */
-       gd->arch.i2c1_clk = sys_info.freqSystemBus / 2;
+       gd->arch.i2c1_clk = sys_info.freq_systembus / 2;
 #endif
        gd->arch.i2c2_clk = gd->arch.i2c1_clk;
 
@@ -429,7 +429,7 @@ int get_clocks (void)
 #endif /* defined(CONFIG_FSL_ESDHC) */
 
 #if defined(CONFIG_CPM2)
-       gd->arch.vco_out = 2*sys_info.freqSystemBus;
+       gd->arch.vco_out = 2*sys_info.freq_systembus;
        gd->arch.cpm_clk = gd->arch.vco_out / 2;
        gd->arch.scc_clk = gd->arch.vco_out / 4;
        gd->arch.brg_clk = gd->arch.vco_out / (1 << (2 * (dfbrg + 1)));
index cfc3a60d2f8f2e6b94f9ae49ba1ead56afa9ffb2..ad57a9cfa73453b8b80bd921392415edb2329389 100644 (file)
@@ -33,7 +33,8 @@
 #define MINIMAL_SPL
 #endif
 
-#if !defined(CONFIG_SPL) && !defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_SECURE_BOOT)
+#if !defined(CONFIG_SPL) && !defined(CONFIG_SYS_RAMBOOT) && \
+       !defined(CONFIG_SECURE_BOOT) && !defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
 #define NOR_BOOT
 #endif
 
index e173cb5f9572cf3346ce004993f30084695dd64d..54c1cfd2c10cf5fe2e413a9e2c55f8c009d88cde 100644 (file)
@@ -65,8 +65,8 @@ struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = {
 #endif
 
 struct srio_liodn_id_table srio_liodn_tbl[] = {
-       SET_SRIO_LIODN_1(1, 307),
-       SET_SRIO_LIODN_1(2, 387),
+       SET_SRIO_LIODN_BASE(1, 307),
+       SET_SRIO_LIODN_BASE(2, 387),
 };
 int srio_liodn_tbl_sz = ARRAY_SIZE(srio_liodn_tbl);
 
@@ -159,10 +159,10 @@ int sec_liodn_tbl_sz = ARRAY_SIZE(sec_liodn_tbl);
 #ifdef CONFIG_SYS_DPAA_RMAN
 struct liodn_id_table rman_liodn_tbl[] = {
        /* Set RMan block 0-3 liodn offset */
-       SET_RMAN_LIODN(0, 678),
-       SET_RMAN_LIODN(1, 679),
-       SET_RMAN_LIODN(2, 680),
-       SET_RMAN_LIODN(3, 681),
+       SET_RMAN_LIODN(0, 6),
+       SET_RMAN_LIODN(1, 7),
+       SET_RMAN_LIODN(2, 8),
+       SET_RMAN_LIODN(3, 9),
 };
 int rman_liodn_tbl_sz = ARRAY_SIZE(rman_liodn_tbl);
 #endif
index ed88602c3158301b73c2a2cc9f910bea1565fcc8..ff55e3c357c3371b9f078d3da40550b3710a7cd4 100644 (file)
@@ -106,25 +106,25 @@ static const struct serdes_config serdes2_cfg_tbl[] = {
                SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
                SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
        {38, {NONE, NONE, QSGMII_FM2_B, NONE,
-               NONE, NONE, QSGMII_FM1_A, NONE}},
+               NONE, NONE, QSGMII_FM2_A, NONE} },
        {40, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
                SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
-               NONE, NONE, QSGMII_FM1_A, NONE}},
+               NONE, NONE, QSGMII_FM2_A, NONE} },
        {46, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
                SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
-               NONE, NONE, QSGMII_FM1_A, NONE}},
+               NONE, NONE, QSGMII_FM2_A, NONE} },
        {48, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
                SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
-               NONE, NONE, QSGMII_FM1_A, NONE}},
+               NONE, NONE, QSGMII_FM2_A, NONE} },
        {50, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
                XAUI_FM2_MAC9, XAUI_FM2_MAC9,
-               NONE, NONE, QSGMII_FM1_A, NONE}},
+               NONE, NONE, QSGMII_FM2_A, NONE} },
        {52, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
                HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
-               NONE, NONE, QSGMII_FM1_A, NONE}},
+               NONE, NONE, QSGMII_FM2_A, NONE} },
        {54, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
                HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
-               NONE, NONE, QSGMII_FM1_A, NONE}},
+               NONE, NONE, QSGMII_FM2_A, NONE} },
        {56, {XFI_FM1_MAC9, XFI_FM1_MAC10,
                XFI_FM2_MAC10, XFI_FM2_MAC9,
                SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
index da3c345d6f787bf641fd38c91055f98f604efdc0..8748ecd1440d1ea53811d4a4e937c39428f9fc3c 100644 (file)
@@ -39,7 +39,8 @@ void init_tlbs(void)
        return ;
 }
 
-#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)
+#if !defined(CONFIG_NAND_SPL) && \
+       (!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL))
 void read_tlbcam_entry(int idx, u32 *valid, u32 *tsize, unsigned long *epn,
                       phys_addr_t *rpn)
 {
index 08188d75e5f12cf5a64f4f40aeae4066186311c6..85ec74ba94adbfeedef1e339d10f06a3ded6d034 100644 (file)
@@ -44,6 +44,11 @@ SECTIONS
        }
        _edata  =  .;
 
+       . = .;
+       __start___ex_table = .;
+       __ex_table : { *(__ex_table) }
+       __stop___ex_table = .;
+
        . = ALIGN(8);
        __init_begin = .;
        __init_end = .;
index d6b28dd077c5a2740905479fd5f72c546af11cc0..30518544dd65827e723d054785b1edcc8a3c0017 100644 (file)
@@ -72,21 +72,21 @@ checkcpu(void)
        get_sys_info(&sysinfo);
 
        puts("Clock Configuration:\n");
-       printf("       CPU:%-4s MHz, ", strmhz(buf1, sysinfo.freqProcessor));
-       printf("MPX:%-4s MHz\n", strmhz(buf1, sysinfo.freqSystemBus));
+       printf("       CPU:%-4s MHz, ", strmhz(buf1, sysinfo.freq_processor));
+       printf("MPX:%-4s MHz\n", strmhz(buf1, sysinfo.freq_systembus));
        printf("       DDR:%-4s MHz (%s MT/s data rate), ",
-               strmhz(buf1, sysinfo.freqSystemBus / 2),
-               strmhz(buf2, sysinfo.freqSystemBus));
+               strmhz(buf1, sysinfo.freq_systembus / 2),
+               strmhz(buf2, sysinfo.freq_systembus));
 
-       if (sysinfo.freqLocalBus > LCRR_CLKDIV) {
-               printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freqLocalBus));
+       if (sysinfo.freq_localbus > LCRR_CLKDIV) {
+               printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freq_localbus));
        } else {
                printf("LBC: unknown (LCRR[CLKDIV] = 0x%02lx)\n",
-                      sysinfo.freqLocalBus);
+                      sysinfo.freq_localbus);
        }
 
-       puts("L1:    D-cache 32 KB enabled\n");
-       puts("       I-cache 32 KB enabled\n");
+       puts("L1:    D-cache 32 KiB enabled\n");
+       puts("       I-cache 32 KiB enabled\n");
 
        puts("L2:    ");
        if (get_l2cr() & 0x80000000) {
@@ -95,7 +95,7 @@ checkcpu(void)
 #elif defined(CONFIG_MPC8641)
                puts("512");
 #endif
-               puts(" KB enabled\n");
+               puts(" KiB enabled\n");
        } else {
                puts("Disabled\n");
        }
@@ -131,7 +131,7 @@ get_tbclk(void)
        sys_info_t sys_info;
 
        get_sys_info(&sys_info);
-       return (sys_info.freqSystemBus + 3L) / 4L;
+       return (sys_info.freq_systembus + 3L) / 4L;
 }
 
 
index 92ba26dc8ea1708b5d9842b42ef2a36854360121..33a91f9f78e7ad0a497738ff8dac2302c8290de3 100644 (file)
@@ -15,7 +15,7 @@
 #endif
 
 void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
-                            unsigned int ctrl_num)
+                            unsigned int ctrl_num, int step)
 {
        unsigned int i;
        volatile ccsr_ddr_t *ddr;
index ea366ab9e4c18dd7163ad1e2a681a434e67c8823..854d02b5c49211ea526329202efd124978bb9bff 100644 (file)
@@ -19,7 +19,7 @@ DECLARE_GLOBAL_DATA_PTR;
 /* used in some defintiions of CONFIG_SYS_CLK_FREQ */
 extern unsigned long get_board_sys_clk(unsigned long dummy);
 
-void get_sys_info(sys_info_t *sysInfo)
+void get_sys_info(sys_info_t *sys_info)
 {
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
        volatile ccsr_gur_t *gur = &immap->im_gur;
@@ -31,7 +31,7 @@ void get_sys_info(sys_info_t *sysInfo)
 
        switch (plat_ratio) {
        case 0x0:
-               sysInfo->freqSystemBus = 16 * CONFIG_SYS_CLK_FREQ;
+               sys_info->freq_systembus = 16 * CONFIG_SYS_CLK_FREQ;
                break;
        case 0x02:
        case 0x03:
@@ -43,10 +43,10 @@ void get_sys_info(sys_info_t *sysInfo)
        case 0x0a:
        case 0x0c:
        case 0x10:
-               sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ;
+               sys_info->freq_systembus = plat_ratio * CONFIG_SYS_CLK_FREQ;
                break;
        default:
-               sysInfo->freqSystemBus = 0;
+               sys_info->freq_systembus = 0;
                break;
        }
 
@@ -55,25 +55,26 @@ void get_sys_info(sys_info_t *sysInfo)
 
        switch (e600_ratio) {
        case 0x10:
-               sysInfo->freqProcessor = 2 * sysInfo->freqSystemBus;
+               sys_info->freq_processor = 2 * sys_info->freq_systembus;
                break;
        case 0x19:
-               sysInfo->freqProcessor = 5 * sysInfo->freqSystemBus / 2;
+               sys_info->freq_processor = 5 * sys_info->freq_systembus / 2;
                break;
        case 0x20:
-               sysInfo->freqProcessor = 3 * sysInfo->freqSystemBus;
+               sys_info->freq_processor = 3 * sys_info->freq_systembus;
                break;
        case 0x39:
-               sysInfo->freqProcessor = 7 * sysInfo->freqSystemBus / 2;
+               sys_info->freq_processor = 7 * sys_info->freq_systembus / 2;
                break;
        case 0x28:
-               sysInfo->freqProcessor = 4 * sysInfo->freqSystemBus;
+               sys_info->freq_processor = 4 * sys_info->freq_systembus;
                break;
        case 0x1d:
-               sysInfo->freqProcessor = 9 * sysInfo->freqSystemBus / 2;
+               sys_info->freq_processor = 9 * sys_info->freq_systembus / 2;
                break;
        default:
-               sysInfo->freqProcessor = e600_ratio + sysInfo->freqSystemBus;
+               sys_info->freq_processor = e600_ratio +
+                                               sys_info->freq_systembus;
                break;
        }
 
@@ -84,10 +85,11 @@ void get_sys_info(sys_info_t *sysInfo)
        lcrr_div = in_be32(&immap->im_lbc.lcrr) & LCRR_CLKDIV;
 #endif
        if (lcrr_div == 2 || lcrr_div == 4 || lcrr_div == 8) {
-               sysInfo->freqLocalBus = sysInfo->freqSystemBus / (lcrr_div * 2);
+               sys_info->freq_localbus = sys_info->freq_systembus
+                                                       / (lcrr_div * 2);
        } else {
                /* In case anyone cares what the unknown value is */
-               sysInfo->freqLocalBus = lcrr_div;
+               sys_info->freq_localbus = lcrr_div;
        }
 }
 
@@ -102,9 +104,9 @@ int get_clocks(void)
        sys_info_t sys_info;
 
        get_sys_info(&sys_info);
-       gd->cpu_clk = sys_info.freqProcessor;
-       gd->bus_clk = sys_info.freqSystemBus;
-       gd->arch.lbc_clk = sys_info.freqLocalBus;
+       gd->cpu_clk = sys_info.freq_processor;
+       gd->bus_clk = sys_info.freq_systembus;
+       gd->arch.lbc_clk = sys_info.freq_localbus;
 
        /*
         * The base clock for I2C depends on the actual SOC.  Unfortunately,
@@ -114,9 +116,9 @@ int get_clocks(void)
         * AN2919.
         */
 #ifdef CONFIG_MPC8610
-       gd->arch.i2c1_clk = sys_info.freqSystemBus;
+       gd->arch.i2c1_clk = sys_info.freq_systembus;
 #else
-       gd->arch.i2c1_clk = sys_info.freqSystemBus / 2;
+       gd->arch.i2c1_clk = sys_info.freq_systembus / 2;
 #endif
        gd->arch.i2c2_clk = gd->arch.i2c1_clk;
 
@@ -138,7 +140,7 @@ ulong get_bus_freq(ulong dummy)
        sys_info_t sys_info;
 
        get_sys_info(&sys_info);
-       val = sys_info.freqSystemBus;
+       val = sys_info.freq_systembus;
 
        return val;
 }
index 1550045e6c79d3fcd1f1d77e52fa1b344eba8611..5c96b5fe16e7e6bd2d4e0d9b9190c5c31a13fd7a 100644 (file)
@@ -136,10 +136,8 @@ static int check_CPU (long clock, uint pvr, uint immr)
 #else
        printf (" at %s MHz: ", strmhz (buf, clock));
 #endif
-       printf ("%u kB I-Cache %u kB D-Cache",
-               checkicache () >> 10,
-               checkdcache () >> 10
-       );
+       print_size(checkicache(), " I-Cache ");
+       print_size(checkdcache(), " D-Cache");
 
        /* do we have a FEC (860T/P or 852/859/866/885)? */
 
@@ -204,10 +202,10 @@ static int check_CPU (long clock, uint pvr, uint immr)
                printf ("unknown MPC857 (0x%08x)", k);
 #endif
 
-       printf (" at %s MHz:", strmhz (buf, clock));
+       printf(" at %s MHz: ", strmhz(buf, clock));
 
-       printf (" %u kB I-Cache", checkicache () >> 10);
-       printf (" %u kB D-Cache", checkdcache () >> 10);
+       print_size(checkicache(), " I-Cache ");
+       print_size(checkdcache(), " D-Cache");
 
        /* lets check and see if we're running on a 862T (or P?) */
 
@@ -265,10 +263,10 @@ static int check_CPU (long clock, uint pvr, uint immr)
        if (suf)
                printf ("PPC823ZTnn%s", suf);
 
-       printf (" at %s MHz:", strmhz (buf, clock));
+       printf(" at %s MHz: ", strmhz(buf, clock));
 
-       printf (" %u kB I-Cache", checkicache () >> 10);
-       printf (" %u kB D-Cache", checkdcache () >> 10);
+       print_size(checkicache(), " I-Cache ");
+       print_size(checkdcache(), " D-Cache");
 
        /* lets check and see if we're running on a 860T (or P?) */
 
@@ -321,10 +319,10 @@ static int check_CPU (long clock, uint pvr, uint immr)
        default:
                printf ("unknown MPC850 (0x%08x)", k);
        }
-       printf (" at %s MHz:", strmhz (buf, clock));
+       printf(" at %s MHz: ", strmhz(buf, clock));
 
-       printf (" %u kB I-Cache", checkicache () >> 10);
-       printf (" %u kB D-Cache", checkdcache () >> 10);
+       print_size(checkicache(), " I-Cache ");
+       print_size(checkdcache(), " D-Cache");
 
        /* lets check and see if we're running on a 850T (or P?) */
 
index 02cd0debc2831cce3f330382148a76cfd4c381e3..fc351585bef8c989fe717205260fdea4febd24bd 100644 (file)
@@ -109,7 +109,6 @@ 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 */
@@ -1177,7 +1176,7 @@ static void *video_logo (void)
 #ifndef CONFIG_FADS            /* all normal boards */
        /* leave one blank line */
 
-       sprintf (info, "MPC823 CPU at %s MHz, %ld MB RAM, %ld MB Flash",
+       sprintf(info, "MPC823 CPU at %s MHz, %ld MiB RAM, %ld MiB Flash",
                strmhz(temp, gd->cpu_clk),
                gd->ram_size >> 20,
                gd->bd->bi_flashsize >> 20 );
@@ -1188,7 +1187,7 @@ static void *video_logo (void)
        video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y + VIDEO_FONT_HEIGHT,
                                          info);
 
-       sprintf (info, "2MB FLASH - 8MB DRAM - 4MB SRAM");
+       sprintf(info, "2MiB FLASH - 8MiB DRAM - 4MiB SRAM");
        video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y + VIDEO_FONT_HEIGHT * 2,
                                          info);
 #endif
index 7369582ef1cbd208c142ee50d624ad21f8414da8..c67be4ef297ddde488d70e64f018767341bc4602 100644 (file)
@@ -79,6 +79,9 @@ static struct cpu_type cpu_type_list[] = {
        CPU_TYPE_ENTRY(BSC9131, 9131, 1),
        CPU_TYPE_ENTRY(BSC9132, 9132, 2),
        CPU_TYPE_ENTRY(BSC9232, 9232, 2),
+       CPU_TYPE_ENTRY(C291, C291, 1),
+       CPU_TYPE_ENTRY(C292, C292, 1),
+       CPU_TYPE_ENTRY(C293, C293, 1),
 #elif defined(CONFIG_MPC86xx)
        CPU_TYPE_ENTRY(8610, 8610, 1),
        CPU_TYPE_ENTRY(8641, 8641, 2),
index ff5812df55fbb0b925f7b034e2119b24d2d35165..242eb47ac34dbf0cc6e08efc1c59ea0a658ddfe9 100644 (file)
@@ -364,7 +364,7 @@ static void set_timing_cfg_3(fsl_ddr_cfg_regs_t *ddr,
 
        ddr->timing_cfg_3 = (0
                | ((ext_pretoact & 0x1) << 28)
-               | ((ext_acttopre & 0x2) << 24)
+               | ((ext_acttopre & 0x3) << 24)
                | ((ext_acttorw & 0x1) << 22)
                | ((ext_refrec & 0x1F) << 16)
                | ((ext_caslat & 0x3) << 12)
@@ -681,6 +681,7 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,
        unsigned int odt_cfg = 0;       /* ODT configuration */
        unsigned int num_pr;            /* Number of posted refreshes */
        unsigned int slow = 0;          /* DDR will be run less than 1250 */
+       unsigned int x4_en = 0;         /* x4 DRAM enable */
        unsigned int obc_cfg;           /* On-The-Fly Burst Chop Cfg */
        unsigned int ap_en;             /* Address Parity Enable */
        unsigned int d_init;            /* DRAM data initialization */
@@ -725,6 +726,8 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,
                ap_en = 0;
        }
 
+       x4_en = popts->x4_en ? 1 : 0;
+
 #if defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
        /* Use the DDR controller to auto initialize memory. */
        d_init = popts->ECC_init_using_memctl;
@@ -747,6 +750,7 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,
                | ((odt_cfg & 0x3) << 21)
                | ((num_pr & 0xf) << 12)
                | ((slow & 1) << 11)
+               | (x4_en << 10)
                | (qd_en << 9)
                | (unq_mrs_en << 8)
                | ((obc_cfg & 0x1) << 6)
@@ -1585,8 +1589,8 @@ compute_fsl_memctl_config_regs(const memctl_options_t *popts,
                                | ((ea & 0xFFF) << 0)   /* ending address MSB */
                                );
                } else {
-                       debug("FSLDDR: setting bnds to 0 for inactive CS\n");
-                       ddr->cs[i].bnds = 0;
+                       /* setting bnds to 0xffffffff for inactive CS */
+                       ddr->cs[i].bnds = 0xffffffff;
                }
 
                debug("FSLDDR: cs[%d]_bnds = 0x%08x\n", i, ddr->cs[i].bnds);
@@ -1638,5 +1642,10 @@ compute_fsl_memctl_config_regs(const memctl_options_t *popts,
 
        set_ddr_sdram_rcw(ddr, popts, common_dimm);
 
+#ifdef CONFIG_SYS_FSL_DDR_EMU
+       /* disble DDR training for emulator */
+       ddr->debug[2] = 0x00000400;
+       ddr->debug[4] = 0xff800000;
+#endif
        return check_fsl_memctl_config_regs(ddr);
 }
index 4dd55fc4c3f923ea3bf942346cf41380edc1b8d6..c173a5a74bc036cfcddac70f8fed50fa3f29a6f9 100644 (file)
@@ -96,7 +96,7 @@ unsigned int check_fsl_memctl_config_regs(const fsl_ddr_cfg_regs_t *ddr);
 
 /* processor specific function */
 void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
-                                  unsigned int ctrl_num);
+                                  unsigned int ctrl_num, int step);
 
 /* board specific function */
 int fsl_ddr_get_dimm_params(dimm_params_t *pdimm,
index 3e7c269e4025ab09de22c4901b1bcdce71192390..b67158c0ffae8284e0863513d345d02d4f612116 100644 (file)
@@ -129,6 +129,7 @@ ddr_compute_dimm_parameters(const ddr3_spd_eeprom_t *spd,
                pdimm->ec_sdram_width = 0;
        pdimm->data_width = pdimm->primary_sdram_width
                          + pdimm->ec_sdram_width;
+       pdimm->device_width = 1 << ((spd->organization & 0x7) + 2);
 
        /* These are the types defined by the JEDEC DDR3 SPD spec */
        pdimm->mirrored_dimm = 0;
index 1ed6c77150d7323f583158cff4f35cc03183649d..260fce577f33617f9daac1892f27cbb80e4030a0 100644 (file)
@@ -205,6 +205,7 @@ static void fsl_ddr_dimm_parameters_edit(fsl_ddr_info_t *pinfo,
                DIMM_PARM(primary_sdram_width),
                DIMM_PARM(ec_sdram_width),
                DIMM_PARM(registered_dimm),
+               DIMM_PARM(device_width),
 
                DIMM_PARM(n_row_addr),
                DIMM_PARM(n_col_addr),
@@ -263,6 +264,7 @@ static void print_dimm_parameters(const dimm_params_t *pdimm)
                DIMM_PARM(primary_sdram_width),
                DIMM_PARM(ec_sdram_width),
                DIMM_PARM(registered_dimm),
+               DIMM_PARM(device_width),
 
                DIMM_PARM(n_row_addr),
                DIMM_PARM(n_col_addr),
@@ -443,6 +445,7 @@ static void fsl_ddr_options_edit(fsl_ddr_info_t *pinfo,
                CTRL_OPTIONS(twoT_en),
                CTRL_OPTIONS(threeT_en),
                CTRL_OPTIONS(ap_en),
+               CTRL_OPTIONS(x4_en),
                CTRL_OPTIONS(bstopre),
                CTRL_OPTIONS(wrlvl_override),
                CTRL_OPTIONS(wrlvl_sample),
@@ -687,6 +690,7 @@ static void print_memctl_options(const memctl_options_t *popts)
                CTRL_OPTIONS(threeT_en),
                CTRL_OPTIONS(registered_dimm_en),
                CTRL_OPTIONS(ap_en),
+               CTRL_OPTIONS(x4_en),
                CTRL_OPTIONS(bstopre),
                CTRL_OPTIONS(wrlvl_override),
                CTRL_OPTIONS(wrlvl_sample),
index e958e138dda6c613f747a2b806dc1d58476a83a8..56128a7b962ca062c0eab7e878dde4c4bada8041 100644 (file)
@@ -218,12 +218,16 @@ compute_lowest_common_dimm_parameters(const dimm_params_t *dimm_params,
                if (dimm_params[i].n_ranks) {
                        if (dimm_params[i].registered_dimm) {
                                temp1 = 1;
+#ifndef CONFIG_SPL_BUILD
                                printf("Detected RDIMM %s\n",
                                        dimm_params[i].mpart);
+#endif
                        } else {
                                temp2 = 1;
+#ifndef CONFIG_SPL_BUILD
                                printf("Detected UDIMM %s\n",
                                        dimm_params[i].mpart);
+#endif
                        }
                }
        }
index 7a8636de166ac4ca6e2c69eda2faa7fc2a65d6f2..842bf1989e3edcca59e879f5e03da6f3b4a96162 100644 (file)
@@ -25,10 +25,6 @@ void fsl_ddr_set_lawbar(
                unsigned int ctrl_num);
 void fsl_ddr_set_intl3r(const unsigned int granule_size);
 
-/* processor specific function */
-extern void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
-                                  unsigned int ctrl_num);
-
 #if defined(SPD_EEPROM_ADDRESS) || \
     defined(SPD_EEPROM_ADDRESS1) || defined(SPD_EEPROM_ADDRESS2) || \
     defined(SPD_EEPROM_ADDRESS3) || defined(SPD_EEPROM_ADDRESS4)
@@ -365,9 +361,11 @@ fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step,
 {
        unsigned int i, j;
        unsigned long long total_mem = 0;
+       int assert_reset;
 
        fsl_ddr_cfg_regs_t *ddr_reg = pinfo->fsl_ddr_config_reg;
        common_timing_params_t *timing_params = pinfo->common_timing_params;
+       assert_reset = board_need_mem_reset();
 
        /* data bus width capacity adjust shift amount */
        unsigned int dbw_capacity_adjust[CONFIG_NUM_DDR_CONTROLLERS];
@@ -462,7 +460,20 @@ fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step,
                                        timing_params[i].all_DIMMs_registered,
                                        &pinfo->memctl_opts[i],
                                        pinfo->dimm_params[i], i);
+                       /*
+                        * For RDIMMs, JEDEC spec requires clocks to be stable
+                        * before reset signal is deasserted. For the boards
+                        * using fixed parameters, this function should be
+                        * be called from board init file.
+                        */
+                       if (timing_params[i].all_DIMMs_registered)
+                               assert_reset = 1;
                }
+               if (assert_reset) {
+                       debug("Asserting mem reset\n");
+                       board_assert_mem_reset();
+               }
+
        case STEP_ASSIGN_ADDRESSES:
                /* STEP 5:  Assign addresses to chip selects */
                check_interleaving_options(pinfo);
@@ -504,7 +515,13 @@ fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step,
                                fsl_ddr_cfg_regs_t *reg = &ddr_reg[i];
                                if (reg->cs[j].config & 0x80000000) {
                                        unsigned int end;
-                                       end = reg->cs[j].bnds & 0xFFF;
+                                       /*
+                                        * 0xfffffff is a special value we put
+                                        * for unused bnds
+                                        */
+                                       if (reg->cs[j].bnds == 0xffffffff)
+                                               continue;
+                                       end = reg->cs[j].bnds & 0xffff;
                                        if (end > max_end) {
                                                max_end = end;
                                        }
@@ -531,6 +548,7 @@ phys_size_t fsl_ddr_sdram(void)
        unsigned int law_memctl = LAW_TRGT_IF_DDR_1;
        unsigned long long total_memory;
        fsl_ddr_info_t info;
+       int deassert_reset;
 
        /* Reset info structure. */
        memset(&info, 0, sizeof(fsl_ddr_info_t));
@@ -559,7 +577,21 @@ phys_size_t fsl_ddr_sdram(void)
                }
        }
 
-       /* Program configuration registers. */
+       /*
+        * Program configuration registers.
+        * JEDEC specs requires clocks to be stable before deasserting reset
+        * for RDIMMs. Clocks start after chip select is enabled and clock
+        * control register is set. During step 1, all controllers have their
+        * registers set but not enabled. Step 2 proceeds after deasserting
+        * reset through board FPGA or GPIO.
+        * For non-registered DIMMs, initialization can go through but it is
+        * also OK to follow the same flow.
+        */
+       deassert_reset = board_need_mem_reset();
+       for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) {
+               if (info.common_timing_params[i].all_DIMMs_registered)
+                       deassert_reset = 1;
+       }
        for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) {
                debug("Programming controller %u\n", i);
                if (info.common_timing_params[i].ndimms_present == 0) {
@@ -567,8 +599,22 @@ phys_size_t fsl_ddr_sdram(void)
                                        "skipping programming\n", i);
                        continue;
                }
-
-               fsl_ddr_set_memctl_regs(&(info.fsl_ddr_config_reg[i]), i);
+               /*
+                * The following call with step = 1 returns before enabling
+                * the controller. It has to finish with step = 2 later.
+                */
+               fsl_ddr_set_memctl_regs(&(info.fsl_ddr_config_reg[i]), i,
+                                       deassert_reset ? 1 : 0);
+       }
+       if (deassert_reset) {
+               /* Use board FPGA or GPIO to deassert reset signal */
+               debug("Deasserting mem reset\n");
+               board_deassert_mem_reset();
+               for (i = 0; i < CONFIG_NUM_DDR_CONTROLLERS; i++) {
+                       /* Call with step = 2 to continue initialization */
+                       fsl_ddr_set_memctl_regs(&(info.fsl_ddr_config_reg[i]),
+                                               i, 2);
+               }
        }
 
        /* program LAWs */
@@ -637,7 +683,8 @@ phys_size_t fsl_ddr_sdram(void)
 #if !defined(CONFIG_PHYS_64BIT)
        /* Check for 4G or more.  Bad. */
        if (total_memory >= (1ull << 32)) {
-               printf("Detected %lld MB of memory\n", total_memory >> 20);
+               puts("Detected ");
+               print_size(total_memory, " of memory\n");
                printf("       This U-Boot only supports < 4G of DDR\n");
                printf("       You could rebuild it with CONFIG_PHYS_64BIT\n");
                printf("       "); /* re-align to match init_func_ram print */
index 26369e09969a2856b76e0b6c66920907ffc9eb83..30cdca497e0d00dda44f665fde42cf14923e8fa0 100644 (file)
@@ -700,6 +700,8 @@ unsigned int populate_memctl_options(int all_DIMMs_registered,
        }
 #endif
 
+       popts->x4_en = (pdimm[0].device_width == 4) ? 1 : 0;
+
        /* Choose burst length. */
 #if defined(CONFIG_FSL_DDR3)
 #if defined(CONFIG_E500MC)
index 89966e0d2f79bca056eac532acc26b7f998e4367..eb7cbbce7e2f47c45bf503a66f48ee88cf426469 100644 (file)
@@ -121,11 +121,8 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
 {
        const char *modes[] = { "host", "peripheral", "otg" };
        const char *phys[] = { "ulpi", "utmi" };
-       const char *mode = NULL;
-       const char *phy_type = NULL;
        const char *dr_mode_type = NULL;
        const char *dr_phy_type = NULL;
-       char usb1_defined = 0;
        int usb_mode_off = -1;
        int usb_phy_off = -1;
        char str[5];
@@ -159,12 +156,6 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
                        dr_mode_type = modes[mode_idx];
                        dr_phy_type = phys[phy_idx];
 
-                       /* use usb_dr_mode and usb_phy_type if
-                          usb1_defined = 0; these variables are to
-                          be deprecated */
-                       if (!strcmp(str, "usb1"))
-                               usb1_defined = 1;
-
                        if (mode_idx < 0 && phy_idx < 0) {
                                printf("WARNING: invalid phy or mode\n");
                                return;
@@ -183,19 +174,6 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
                if (usb_phy_off < 0)
                        return;
        }
-
-       if (!usb1_defined) {
-               int usb_off = -1;
-               mode = getenv("usb_dr_mode");
-               phy_type = getenv("usb_phy_type");
-               if (mode || phy_type) {
-                       printf("WARNING: usb_dr_mode and usb_phy_type "
-                               "are to be deprecated soon. Use "
-                               "hwconfig to set these values instead!!\n");
-                       fdt_fixup_usb_mode_phy_type(blob, mode,
-                               phy_type, usb_off);
-               }
-       }
 }
 #endif /* defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB) */
 
index 89a561e0aca3b5ed87ca745799f649546d3d976e..a401083107794cc3dd218cf88e7edc58c7858063 100644 (file)
@@ -76,7 +76,8 @@ void disable_law(u8 idx)
        return;
 }
 
-#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)
+#if !defined(CONFIG_NAND_SPL) && \
+       (!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL))
 static int get_law_entry(u8 i, struct law_entry *e)
 {
        u32 lawar;
@@ -106,7 +107,8 @@ int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
        return idx;
 }
 
-#if !defined(CONFIG_NAND_SPL) && !defined(CONFIG_SPL_BUILD)
+#if !defined(CONFIG_NAND_SPL) && \
+       (!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL))
 int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
 {
        u32 idx;
index 2ca355b1347969cca6ac4b0bd355329c51dd1fc0..5584e0f3e8e99e748aae32236e7c13f6c1c7ef88 100644 (file)
@@ -1,26 +1,5 @@
-/*-----------------------------------------------------------------------------+
- *       This source code is dual-licensed.  You may use it under the terms of
- *       the GNU General Public license version 2, or under the license below.
- *
- *       This source code has been made available to you by IBM on an AS-IS
- *       basis.  Anyone receiving this source is licensed under IBM
- *       copyrights to use it in any way he or she deems fit, including
- *       copying it, modifying it, compiling it, and redistributing it either
- *       with or without modifications.  No license under IBM patents or
- *       patent applications is to be implied by the copyright license.
- *
- *       Any user of this software should understand that IBM cannot provide
- *       technical support for this software and will not be responsible for
- *       any consequences resulting from the use of this software.
- *
- *       Any person who transfers this source code or any derivative work
- *       must include the IBM copyright notice, this paragraph, and the
- *       preceding two paragraphs in the transferred software.
- *
- *       COPYRIGHT   I B M   CORPORATION 1995
- *       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *-----------------------------------------------------------------------------*/
-/*----------------------------------------------------------------------------+
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
  *
  *  File Name:   405gp_pci.c
  *
index 1ad19abff6db2138dea7287b6eeecb840418d601..50c28a0d39f07f682e9a005a101c3ac6ce1eb773 100644 (file)
@@ -5,30 +5,7 @@
  * (C) Copyright 2010
  * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-/*
- * This source code is dual-licensed.  You may use it under the terms of the
- * GNU General Public License version 2, or under the license below.
- *
- * This source code has been made available to you by IBM on an AS-IS
- * basis.  Anyone receiving this source is licensed under IBM
- * copyrights to use it in any way he or she deems fit, including
- * copying it, modifying it, compiling it, and redistributing it either
- * with or without modifications.  No license under IBM patents or
- * patent applications is to be implied by the copyright license.
- *
- * Any user of this software should understand that IBM cannot provide
- * technical support for this software and will not be responsible for
- * any consequences resulting from the use of this software.
- *
- * Any person who transfers this source code or any derivative work
- * must include the IBM copyright notice, this paragraph, and the
- * preceding two paragraphs in the transferred software.
- *
- * COPYRIGHT   I B M   CORPORATION 1995
- * LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
  */
 
 #include <common.h>
@@ -40,7 +17,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
+#if defined(CONFIG_405GP) || \
     defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
     defined(CONFIG_405EX) || defined(CONFIG_440)
 
@@ -91,7 +68,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #define UDIV_SUBTRACT  0
 #define UART0_SDR      SDR0_UART0
 #define UART1_SDR      SDR0_UART1
-#else /* CONFIG_405GP || CONFIG_405CR */
+#else /* CONFIG_405GP */
 #define CR0_MASK        0x00001fff
 #define CR0_EXTCLK_ENA  0x000000c0
 #define CR0_UDIV_POS    1
@@ -196,7 +173,7 @@ int get_serial_clock(void)
         * Let's handle this in some #ifdef's for the SoC's.
         */
 
-#if defined(CONFIG_405CR) || defined(CONFIG_405GP)
+#if defined(CONFIG_405GP)
        reg = mfdcr(CPC0_CR0) & ~CR0_MASK;
 #ifdef CONFIG_SYS_EXT_SERIAL_CLOCK
        clk = CONFIG_SYS_EXT_SERIAL_CLOCK;
@@ -223,7 +200,7 @@ int get_serial_clock(void)
 #else
        clk = CONFIG_SYS_BASE_BAUD * 16;
 #endif
-#endif /* CONFIG_405CR */
+#endif
 
 #if defined(CONFIG_405EP)
        {
@@ -288,4 +265,4 @@ int get_serial_clock(void)
 
        return clk;
 }
-#endif /* CONFIG_405GP || CONFIG_405CR */
+#endif /* CONFIG_405GP */
index fe050985e524c18720e0b9a8e216e6e45fd24299..d1fc7f3fc2ae789c7e1181b8cb68161c9c09e864 100644 (file)
@@ -320,25 +320,9 @@ int checkcpu (void)
                puts("405GP Rev. D");
                break;
 
-#ifdef CONFIG_405GP
-       case PVR_405GP_RE: /* 405GP rev E and 405CR rev C have same PVR */
+       case PVR_405GP_RE:
                puts("405GP Rev. E");
                break;
-#endif
-
-       case PVR_405CR_RA:
-               puts("405CR Rev. A");
-               break;
-
-       case PVR_405CR_RB:
-               puts("405CR Rev. B");
-               break;
-
-#ifdef CONFIG_405CR
-       case PVR_405CR_RC: /* 405GP rev E and 405CR rev C have same PVR */
-               puts("405CR Rev. C");
-               break;
-#endif
 
        case PVR_405GPR_RB:
                puts("405GPr Rev. B");
@@ -647,12 +631,12 @@ int checkcpu (void)
 #endif
 
 #if defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX)
-       printf ("       16 kB I-Cache 16 kB D-Cache");
+       printf("       16 KiB I-Cache 16 KiB D-Cache");
 #elif defined(CONFIG_440)
-       printf ("       32 kB I-Cache 32 kB D-Cache");
+       printf("       32 KiB I-Cache 32 KiB D-Cache");
 #else
-       printf ("       16 kB I-Cache %d kB D-Cache",
-               ((pvr | 0x00000001) == PVR_405GPR_RB) ? 16 : 8);
+       printf("       16 KiB I-Cache %d KiB D-Cache",
+              ((pvr | 0x00000001) == PVR_405GPR_RB) ? 16 : 8);
 #endif
 
 #endif /* !defined(CONFIG_405) */
index d53d882511fc68e817c1e6b463bfda1afc9973ac..d465dcda8b123ae563fadafcccaf77059815f54c 100644 (file)
@@ -326,7 +326,7 @@ cpu_init_f (void)
         * External Bus Controller (EBC) Setup
         */
 #if (defined(CONFIG_SYS_EBC_PB0AP) && defined(CONFIG_SYS_EBC_PB0CR))
-#if (defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
+#if (defined(CONFIG_405GP) || \
      defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
      defined(CONFIG_405EX) || defined(CONFIG_405))
        /*
index 297155fdafa064b955e53e9832de93bfb0cfb85b..e4a9db6767b674af41b7cb88652678aa59cd27f0 100644 (file)
@@ -1,25 +1,6 @@
-/*-----------------------------------------------------------------------------+
-  |   This source code is dual-licensed.  You may use it under the terms of the
-  |   GNU General Public License version 2, or under the license below.
-  |
-  |      This source code has been made available to you by IBM on an AS-IS
-  |      basis.  Anyone receiving this source is licensed under IBM
-  |      copyrights to use it in any way he or she deems fit, including
-  |      copying it, modifying it, compiling it, and redistributing it either
-  |      with or without modifications.  No license under IBM patents or
-  |      patent applications is to be implied by the copyright license.
-  |
-  |      Any user of this software should understand that IBM cannot provide
-  |      technical support for this software and will not be responsible for
-  |      any consequences resulting from the use of this software.
-  |
-  |      Any person who transfers this source code or any derivative work
-  |      must include the IBM copyright notice, this paragraph, and the
-  |      preceding two paragraphs in the transferred software.
-  |
-  |      COPYRIGHT   I B M   CORPORATION 1995
-  |      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-  +-----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*-----------------------------------------------------------------------------+
   |
   |  File Name:         miiphy.c
index 3345e7334750dd23603f1007b5010d4827a015de..7e077d5a9f28a5216219d79ab6adfc0dd5e69466 100644 (file)
@@ -21,7 +21,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
 
-#if defined(CONFIG_405GP) || defined(CONFIG_405CR)
+#if defined(CONFIG_405GP)
 
 void get_sys_info (PPC4xx_SYS_INFO * sysInfo)
 {
@@ -1184,7 +1184,7 @@ ulong get_bus_freq (ulong dummy)
 {
        ulong val;
 
-#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
+#if defined(CONFIG_405GP) || \
     defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
     defined(CONFIG_405EX) || defined(CONFIG_405) || \
     defined(CONFIG_440)
index 57ae1d38206288697e3aedc92ab0d5fcb332bd83..d9d8cbffaa7a1bcc3ca293b3e87197384c95405e 100644 (file)
@@ -6,46 +6,7 @@
  *  Copyright (c) 2008 Nuovation System Designs, LLC
  *    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
- */
-/*------------------------------------------------------------------------------+
- *   This source code is dual-licensed.  You may use it under the terms of the
- *   GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *-------------------------------------------------------------------------------
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
  */
 
 /*
@@ -833,7 +794,7 @@ _start:
 #endif /* CONFIG_440 */
 
 /*****************************************************************************/
-#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
+#if defined(CONFIG_405GP) || \
     defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
     defined(CONFIG_405EX) || defined(CONFIG_405)
        /*----------------------------------------------------------------------- */
@@ -1103,7 +1064,7 @@ _start:
 
 #endif /* CONFIG_NAND_SPL */
 
-#endif /* CONFIG_405GP || CONFIG_405CR || CONFIG_405 || CONFIG_405EP */
+#endif /* CONFIG_405GP || CONFIG_405 || CONFIG_405EP */
        /*----------------------------------------------------------------------- */
 
 
index 7ed93acdcff564ac5dd8d27c1c396ea3658041e0..15e44de41e66f997ed41f6520f882674f9238469 100644 (file)
@@ -67,6 +67,8 @@
 #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
 #define CONFIG_SYS_FSL_RMU
 #define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM       2
+#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+#define CONFIG_SYS_FSL_A004447_SVR_REV 0x00
 
 #elif defined(CONFIG_MPC8555)
 #define CONFIG_MAX_CPUS                        1
 #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
 #define CONFIG_SYS_FSL_ERRATUM_IFC_A002769
 #define CONFIG_SYS_FSL_ERRATUM_P1010_A003549
+#define CONFIG_SYS_FSL_ERRATUM_SEC_A003571
 #define CONFIG_SYS_FSL_ERRATUM_IFC_A003399
+#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+#define CONFIG_SYS_FSL_A004447_SVR_REV 0x10
 
 /* P1011 is single core version of P1020 */
 #elif defined(CONFIG_P1011)
 #define CONFIG_SYS_FM_MURAM_SIZE       0x10000
 #define CONFIG_SYS_FSL_PCIE_COMPAT     "fsl,qoriq-pcie-v2.2"
 #define CONFIG_SYS_CCSRBAR_DEFAULT     0xff600000
+#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+#define CONFIG_SYS_FSL_A004447_SVR_REV 0x11
 
 /* P1024 is lower end variant of P1020 */
 #elif defined(CONFIG_P1024)
 
 #elif defined(CONFIG_PPC_P2041) /* also supports P2040 */
 #define CONFIG_SYS_FSL_QORIQ_CHASSIS1
+#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MAX_CPUS                        4
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     2
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
 #define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 #define CONFIG_SYS_FSL_ERRATUM_A004849
+#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+#define CONFIG_SYS_FSL_A004447_SVR_REV 0x11
 
 #elif defined(CONFIG_PPC_P3041)
 #define CONFIG_SYS_FSL_QORIQ_CHASSIS1
+#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MAX_CPUS                        4
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     2
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
 #define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
 #define CONFIG_SYS_FSL_ERRATUM_A004849
+#define CONFIG_SYS_FSL_ERRATUM_A005812
+#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+#define CONFIG_SYS_FSL_A004447_SVR_REV 0x20
 
 #elif defined(CONFIG_PPC_P4080) /* also supports P4040 */
 #define CONFIG_SYS_FSL_QORIQ_CHASSIS1
+#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MAX_CPUS                        8
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     4
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_ERRATUM_A004849
 #define CONFIG_SYS_FSL_ERRATUM_A004580
 #define CONFIG_SYS_P4080_ERRATUM_PCIE_A003
+#define CONFIG_SYS_FSL_ERRATUM_A005812
+#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+#define CONFIG_SYS_FSL_A004447_SVR_REV 0x20
 
 #elif defined(CONFIG_PPC_P5020) /* also supports P5010 */
 #define CONFIG_SYS_PPC64               /* 64-bit core */
 #define CONFIG_SYS_FSL_QORIQ_CHASSIS1
+#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MAX_CPUS                        2
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     2
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV 0x10
 #define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xc0000000
 #define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034
+#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+#define CONFIG_SYS_FSL_A004447_SVR_REV 0x20
 
 #elif defined(CONFIG_PPC_P5040)
 #define CONFIG_SYS_PPC64
 #define CONFIG_SYS_FSL_QORIQ_CHASSIS1
+#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MAX_CPUS                        4
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     3
 #define CONFIG_SYS_FSL_NUM_LAWS                32
 #define CONFIG_SYS_FSL_ERRATUM_A004510
 #define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV 0x10
 #define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000
+#define CONFIG_SYS_FSL_ERRATUM_A005812
 
 #elif defined(CONFIG_BSC9131)
 #define CONFIG_MAX_CPUS                        1
 #define CONFIG_TSECV2
 #define CONFIG_SYS_FSL_SEC_COMPAT      4
 #define CONFIG_NUM_DDR_CONTROLLERS     2
+#define CONFIG_SYS_FSL_DSP_DDR_ADDR    0x40000000
+#define CONFIG_SYS_FSL_DSP_M2_RAM_ADDR 0xb0000000
+#define CONFIG_SYS_FSL_DSP_M3_RAM_ADDR 0xc0000000
+#define CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT     0xff600000
 #define CONFIG_SYS_FSL_IFC_BANK_COUNT  3
 #define CONFIG_SYS_CCSRBAR_DEFAULT     0xff700000
 #define CONFIG_NAND_FSL_IFC
 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111
 #define CONFIG_SYS_FSL_ESDHC_P1010_BROKEN_SDCLK
 #define CONFIG_SYS_FSL_PCIE_COMPAT     "fsl,qoriq-pcie-v2.2"
+#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+#define CONFIG_SYS_FSL_A004447_SVR_REV 0x11
 
 #elif defined(CONFIG_PPC_T4240) || defined(CONFIG_PPC_T4160)
 #define CONFIG_E6500
 #endif
 #define CONFIG_SYS_FSL_NUM_CC_PLLS     5
 #define CONFIG_SYS_FSL_NUM_LAWS                32
+#define CONFIG_SYS_FSL_SRDS_1
+#define CONFIG_SYS_FSL_SRDS_2
 #define CONFIG_SYS_FSL_SRDS_3
 #define CONFIG_SYS_FSL_SRDS_4
 #define CONFIG_SYS_FSL_SEC_COMPAT      4
 #define CONFIG_SYS_FSL_SRIO_MAX_PORTS  2
 #define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
 #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
+#define CONFIG_SYS_FSL_SRIO_LIODN
 #define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE
 #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
 #define CONFIG_SYS_FSL_ERRATUM_A004468
 #define CONFIG_SYS_FSL_QORIQ_CHASSIS2  /* Freescale Chassis generation 2 */
 #define CONFIG_SYS_FSL_QMAN_V3         /* QMAN version 3 */
 #define CONFIG_SYS_FSL_NUM_LAWS                32
+#define CONFIG_SYS_FSL_SRDS_1
+#define CONFIG_SYS_FSL_SRDS_2
 #define CONFIG_SYS_FSL_SEC_COMPAT      4
 #define CONFIG_SYS_NUM_FMAN            1
 #define CONFIG_SYS_FSL_DDR_VER         FSL_DDR_VER_4_7
 #define CONFIG_SYS_FSL_SRIO_MAX_PORTS  2
 #define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
 #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
+#define CONFIG_SYS_FSL_SRIO_LIODN
 #else
 #define CONFIG_MAX_CPUS                        2
 #define CONFIG_SYS_FSL_CORES_PER_CLUSTER 2
 #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
 #define CONFIG_SYS_CCSRBAR_DEFAULT     0xfe000000
 
+#elif defined(CONFIG_PPC_C29X)
+#define CONFIG_MAX_CPUS                        1
+#define CONFIG_FSL_SDHC_V2_3
+#define CONFIG_SYS_FSL_NUM_LAWS                12
+#define CONFIG_SYS_PPC_E500_DEBUG_TLB  3
+#define CONFIG_TSECV2_1
+#define CONFIG_SYS_FSL_SEC_COMPAT      6
+#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
+#define CONFIG_NUM_DDR_CONTROLLERS     1
+#define CONFIG_SYS_FSL_IFC_BANK_COUNT  8
+#define CONFIG_SYS_CCSRBAR_DEFAULT     0xff700000
+
 #else
 #error Processor type not defined for this platform
 #endif
index ffe4db8b8aa9283dcc7a2c85d6a883bdf07bbe90..bd312ad5c58c20f0233d007f9b98c8dd2bf5333b 100644 (file)
@@ -26,6 +26,7 @@ typedef struct dimm_params_s {
        unsigned int primary_sdram_width;
        unsigned int ec_sdram_width;
        unsigned int registered_dimm;
+       unsigned int device_width;      /* x4, x8, x16 components */
 
        /* SDRAM device parameters */
        unsigned int n_row_addr;
index 640d3297d6c89a36725eacd1413911e045d1456c..f4eec82d5d3df0d673a581149738066cb8a8faf4 100644 (file)
@@ -277,6 +277,7 @@ typedef struct memctl_options_s {
        unsigned int mirrored_dimm;
        unsigned int quad_rank_present;
        unsigned int ap_en;     /* address parity enable for RDIMM */
+       unsigned int x4_en;     /* enable x4 devices */
 
        /* Global Timing Parameters */
        unsigned int cas_latency_override;
@@ -330,9 +331,31 @@ extern phys_size_t fsl_ddr_sdram(void);
 extern phys_size_t fsl_ddr_sdram_size(void);
 extern int fsl_use_spd(void);
 extern void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
-                                       unsigned int ctrl_num);
+                                       unsigned int ctrl_num, int step);
 u32 fsl_ddr_get_intl3r(void);
 
+static void __board_assert_mem_reset(void)
+{
+}
+
+static void __board_deassert_mem_reset(void)
+{
+}
+
+void board_assert_mem_reset(void)
+       __attribute__((weak, alias("__board_assert_mem_reset")));
+
+void board_deassert_mem_reset(void)
+       __attribute__((weak, alias("__board_deassert_mem_reset")));
+
+static int __board_need_mem_reset(void)
+{
+       return 0;
+}
+
+int board_need_mem_reset(void)
+       __attribute__((weak, alias("__board_need_mem_reset")));
+
 /*
  * The 85xx boards have a common prototype for fixed_sdram so put the
  * declaration here.
index 4f71341327bae7f5f9da6ce635295f3ea232adf6..d6537fd63315f03b169a6ffea9a52323c9e3603e 100644 (file)
@@ -54,6 +54,7 @@ typedef struct fsl_i2c {
 #define I2C_CR_MTX     0x10
 #define I2C_CR_TXAK    0x08
 #define I2C_CR_RSTA    0x04
+#define I2C_CR_BIT6    0x02    /* required for workaround A004447 */
 #define I2C_CR_BCST    0x01
 
        u8 sr;          /* I2C status register */
index bea1636768d04ec12bba2d7f2a368c71a9d33618..37d3a2246166f1adf6b61a8b23550e0ce90d0844 100644 (file)
@@ -82,7 +82,7 @@ enum law_trgt_if {
 #ifndef CONFIG_MPC8641
        LAW_TRGT_IF_PCIE_1 = 0x02,
 #endif
-#if defined(CONFIG_BSC9131)
+#if defined(CONFIG_BSC9131) || defined(CONFIG_BSC9132)
        LAW_TRGT_IF_OCN_DSP = 0x03,
 #else
 #if !defined(CONFIG_MPC8572) && !defined(CONFIG_P2020)
@@ -92,9 +92,14 @@ enum law_trgt_if {
        LAW_TRGT_IF_LBC = 0x04,
        LAW_TRGT_IF_CCSR = 0x08,
        LAW_TRGT_IF_DSP_CCSR = 0x09,
+       LAW_TRGT_IF_PLATFORM_SRAM = 0x0a,
        LAW_TRGT_IF_DDR_INTRLV = 0x0b,
        LAW_TRGT_IF_RIO = 0x0c,
+#if defined(CONFIG_BSC9132)
+       LAW_TRGT_IF_CLASS_DSP = 0x0d,
+#else
        LAW_TRGT_IF_RIO_2 = 0x0d,
+#endif
        LAW_TRGT_IF_DPAA_SWP_SRAM = 0x0e,
        LAW_TRGT_IF_DDR = 0x0f,
        LAW_TRGT_IF_DDR_2 = 0x16,       /* 2nd controller */
index 3f543d9249154772e10aed27b95b4a0cd0d7889f..44bc88dcecd0ddd8cc20e1b8614888080050ce27 100644 (file)
@@ -29,6 +29,13 @@ struct srio_liodn_id_table {
                + CONFIG_SYS_MPC85xx_GUTS_OFFSET + CONFIG_SYS_CCSRBAR, \
        }
 
+#define SET_SRIO_LIODN_BASE(port, id_a) \
+       { .id = { id_a }, .num_ids = 1, .portid = port, \
+         .reg_offset[0] = offsetof(struct ccsr_rio, liodn) \
+               + (port - 1) * 0x200 \
+               + CONFIG_SYS_FSL_SRIO_ADDR, \
+       }
+
 struct liodn_id_table {
        const char * compat;
        u32 id[2];
index c740da37ce3b346e5d627af9560735fbcf5e5a7b..749411c1016234a0ac7420f3ffb994796f102d83 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007,2009-2011 Freescale Semiconductor, Inc.
+ * Copyright 2007,2009-2012 Freescale Semiconductor, Inc.
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #define PEX_IP_BLK_REV_2_2     0x02080202
 #define PEX_IP_BLK_REV_2_3     0x02080203
+#define PEX_IP_BLK_REV_3_0     0x02080300
+
+/* Freescale-specific PCI config registers */
+#define FSL_PCI_PBFR           0x44
+
+#ifdef CONFIG_SYS_FSL_PCI_VER_3_X
+/* Currently only the PCIe capability is used, so hardcode the offset.
+ * if more capabilities need to be justified, the capability link method
+ * should be applied here
+ */
+#define FSL_PCIE_CAP_ID                0x70
+#define PCI_DCR                0x78    /* PCIe Device Control Register */
+#define PCI_DSR                0x7a    /* PCIe Device Status Register */
+#define PCI_LSR                0x82    /* PCIe Link Status Register */
+#define PCI_LCR                0x80    /* PCIe Link Control Register */
+#else
+#define FSL_PCIE_CAP_ID                0x4c
+#define PCI_DCR                0x54    /* PCIe Device Control Register */
+#define PCI_DSR                0x56    /* PCIe Device Status Register */
+#define PCI_LSR                0x5e    /* PCIe Link Status Register */
+#define PCI_LCR                0x5c    /* PCIe Link Control Register */
+#endif
+
+#define FSL_PCIE_CFG_RDY       0x4b0
+#define FSL_PROG_IF_AGENT      0x1
+
+#define PCI_LTSSM      0x404   /* PCIe Link Training, Status State Machine */
+#define  PCI_LTSSM_L0  0x16    /* L0 state */
 
 int fsl_setup_hose(struct pci_controller *hose, unsigned long addr);
 int fsl_is_pci_agent(struct pci_controller *hose);
@@ -149,7 +177,10 @@ typedef struct ccsr_pci {
        u32     perr_cap3;      /* 0xe34 - PCIE Error Capture Register 3 */
        char    res23[200];
        u32     pdb_stat;       /* 0xf00 - PCIE Debug Status */
-       char    res24[252];
+       char    res24[16];
+       u32     pex_csr0;       /* 0xf14 - PEX Control/Status register 0*/
+       u32     pex_csr1;       /* 0xf18 - PEX Control/Status register 1*/
+       char    res25[228];
 } ccsr_fsl_pci_t;
 #define PCIE_CONFIG_PC 0x00020000
 #define PCIE_CONFIG_OB_CK      0x00002000
index 59189adb395f57cc4c25bbb81310268d80ad333c..1106d280583e065ba364989140a031bcec391877 100644 (file)
@@ -90,6 +90,7 @@ void fsl_serdes_init(void);
 #ifdef CONFIG_FSL_CORENET
 #ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2
 int serdes_get_first_lane(u32 sd, enum srds_prtcl device);
+enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane);
 #else
 int serdes_get_first_lane(enum srds_prtcl device);
 #endif
index 81b3322fe6dba842fb734461c1151e0eb19cfae9..3a10d778f1ba01d17271dad9ebb09aef82908fe4 100644 (file)
@@ -1544,6 +1544,18 @@ struct rio_pw {
 };
 #endif
 
+#ifdef CONFIG_SYS_FSL_SRIO_LIODN
+struct rio_liodn {
+       u32     plbr;
+       u8      res0[28];
+       u32     plaor;
+       u8      res1[12];
+       u32     pludr;
+       u32     plldr;
+       u8      res2[456];
+};
+#endif
+
 /* RapidIO Registers */
 struct ccsr_rio {
        struct rio_arch arch;
@@ -1566,6 +1578,10 @@ struct ccsr_rio {
        u8      res7[100];
        struct rio_pw   pw;
 #endif
+#ifdef CONFIG_SYS_FSL_SRIO_LIODN
+       u8      res5[8192];
+       struct rio_liodn liodn[CONFIG_SYS_FSL_SRIO_MAX_PORTS];
+#endif
 };
 #endif
 
@@ -2131,6 +2147,11 @@ typedef struct ccsr_gur {
 #ifdef CONFIG_MPC8536
 #define MPC85xx_PORPLLSR_DDR_RATIO     0x3e000000
 #define MPC85xx_PORPLLSR_DDR_RATIO_SHIFT       25
+#elif defined(CONFIG_PPC_C29X)
+#define MPC85xx_PORPLLSR_DDR_RATIO     0x00003f00
+#define MPC85xx_PORPLLSR_DDR_RATIO_SHIFT       (9 - ((gur->pordevsr2 \
+                                       & MPC85xx_PORDEVSR2_DDR_SPD_0) \
+                                       >> MPC85xx_PORDEVSR2_DDR_SPD_0_SHIFT))
 #else
 #if defined(CONFIG_BSC9131) || defined(CONFIG_BSC9132)
 #define MPC85xx_PORPLLSR_DDR_RATIO     0x00003f00
@@ -2178,6 +2199,9 @@ typedef struct ccsr_gur {
 #elif defined(CONFIG_BSC9132)
 #define MPC85xx_PORDEVSR_IO_SEL                0x00FE0000
 #define MPC85xx_PORDEVSR_IO_SEL_SHIFT  17
+#elif defined(CONFIG_PPC_C29X)
+#define MPC85xx_PORDEVSR_IO_SEL                0x00e00000
+#define MPC85xx_PORDEVSR_IO_SEL_SHIFT  21
 #else
 #define MPC85xx_PORDEVSR_IO_SEL                0x00780000
 #define MPC85xx_PORDEVSR_IO_SEL_SHIFT  19
@@ -2193,6 +2217,10 @@ typedef struct ccsr_gur {
 #define MPC85xx_PORDEVSR_RIO_DEV_ID    0x00000007
        u32     pordbgmsr;      /* POR debug mode status */
        u32     pordevsr2;      /* POR I/O device status 2 */
+#if defined(CONFIG_PPC_C29X)
+#define MPC85xx_PORDEVSR2_DDR_SPD_0    0x00000008
+#define MPC85xx_PORDEVSR2_DDR_SPD_0_SHIFT      3
+#endif
 /* The 8544 RM says this is bit 26, but it's really bit 24 */
 #define MPC85xx_PORDEVSR2_SEC_CFG      0x00000080
        u8      res1[8];
@@ -2338,6 +2366,11 @@ typedef struct ccsr_gur {
 #ifdef CONFIG_BSC9132
 #define MPC85xx_PMUXCR0_SIM_SEL_MASK   0x0003b000
 #define MPC85xx_PMUXCR0_SIM_SEL                0x00014000
+#endif
+#if defined(CONFIG_PPC_C29X)
+#define MPC85xx_PMUXCR_SPI_MASK                        0x00000300
+#define MPC85xx_PMUXCR_SPI                     0x00000000
+#define MPC85xx_PMUXCR_SPI_GPIO                        0x00000100
 #endif
        u32     pmuxcr2;        /* Alt. function signal multiplex control 2 */
 #if defined(CONFIG_P1010) || defined(CONFIG_P1014)
@@ -2526,7 +2559,9 @@ typedef struct serdes_corenet {
 #define SRDS_RSTCTL_RSTDONE    0x40000000
 #define SRDS_RSTCTL_RSTERR     0x20000000
 #define SRDS_RSTCTL_SWRST      0x10000000
-#define SRDS_RSTCTL_SDPD       0x00000020
+#define SRDS_RSTCTL_SDEN       0x00000020
+#define SRDS_RSTCTL_SDRST_B    0x00000040
+#define SRDS_RSTCTL_PLLRST_B   0x00000080
                u32     pllcr0; /* PLL Control Register 0 */
 #define SRDS_PLLCR0_POFF               0x80000000
 #define SRDS_PLLCR0_RFCK_SEL_MASK      0x70000000
@@ -2811,54 +2846,6 @@ typedef struct ccsr_pme {
        u8      res4[0x400];
 } ccsr_pme_t;
 
-#ifdef CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE
-struct ccsr_usb_port_ctrl {
-       u32     ctrl;
-       u32     drvvbuscfg;
-       u32     pwrfltcfg;
-       u32     sts;
-       u8      res_14[0xc];
-       u32     bistcfg;
-       u32     biststs;
-       u32     abistcfg;
-       u32     abiststs;
-       u8      res_30[0x10];
-       u32     xcvrprg;
-       u32     anaprg;
-       u32     anadrv;
-       u32     anasts;
-};
-
-typedef struct ccsr_usb_phy {
-       u32     id;
-       struct  ccsr_usb_port_ctrl port1;
-       u8      res_50[0xc];
-       u32     tvr;
-       u32     pllprg[4];
-       u8      res_70[0x4];
-       u32     anaccfg;
-       u32     dbg;
-       u8      res_7c[0x4];
-       struct  ccsr_usb_port_ctrl port2;
-       u8      res_dc[0x334];
-} ccsr_usb_phy_t;
-
-#define CONFIG_SYS_FSL_USB_CTRL_PHY_EN (1 << 0)
-#define CONFIG_SYS_FSL_USB_DRVVBUS_CR_EN (1 << 1)
-#define CONFIG_SYS_FSL_USB_PWRFLT_CR_EN (1 << 1)
-#define CONFIG_SYS_FSL_USB_PLLPRG2_PHY2_CLK_EN (1 << 0)
-#define CONFIG_SYS_FSL_USB_PLLPRG2_PHY1_CLK_EN (1 << 1)
-#define CONFIG_SYS_FSL_USB_PLLPRG2_MFI (5 << 16)
-#define CONFIG_SYS_FSL_USB_PLLPRG2_PLL_EN (1 << 21)
-#else
-typedef struct ccsr_usb_phy {
-       u8      res0[0x18];
-       u32     usb_enable_override;
-       u8      res[0xe4];
-} ccsr_usb_phy_t;
-#define CONFIG_SYS_FSL_USB_ENABLE_OVERRIDE 1
-#endif
-
 #ifdef CONFIG_SYS_FSL_RAID_ENGINE
 struct ccsr_raide {
        u8      res0[0x543];
@@ -3008,12 +2995,18 @@ struct ccsr_pman {
 #define CONFIG_SYS_MPC85xx_USB2_OFFSET         0x23000
 #ifdef CONFIG_TSECV2
 #define CONFIG_SYS_TSEC1_OFFSET                        0xB0000
+#elif defined(CONFIG_TSECV2_1)
+#define CONFIG_SYS_TSEC1_OFFSET                        0x10000
 #else
 #define CONFIG_SYS_TSEC1_OFFSET                        0x24000
 #endif
 #define CONFIG_SYS_MDIO1_OFFSET                        0x24000
 #define CONFIG_SYS_MPC85xx_ESDHC_OFFSET                0x2e000
+#if defined(CONFIG_PPC_C29X)
+#define CONFIG_SYS_FSL_SEC_OFFSET              0x80000
+#else
 #define CONFIG_SYS_FSL_SEC_OFFSET              0x30000
+#endif
 #define CONFIG_SYS_MPC85xx_SERDES2_OFFSET      0xE3100
 #define CONFIG_SYS_MPC85xx_SERDES1_OFFSET      0xE3000
 #define CONFIG_SYS_SNVS_OFFSET                 0xE6000
@@ -3031,6 +3024,12 @@ struct ccsr_pman {
 #define CONFIG_SYS_MPC85xx_GUTS_OFFSET         0xE0000
 #define CONFIG_SYS_FSL_SRIO_OFFSET             0xC0000
 
+#if defined(CONFIG_BSC9132)
+#define CONFIG_SYS_FSL_DSP_CCSR_DDR_OFFSET     0x10000
+#define CONFIG_SYS_FSL_DSP_CCSR_DDR_ADDR \
+       (CONFIG_SYS_FSL_DSP_CCSRBAR + CONFIG_SYS_FSL_DSP_CCSR_DDR_OFFSET)
+#endif
+
 #define CONFIG_SYS_FSL_CPC_ADDR        \
        (CONFIG_SYS_CCSRBAR + CONFIG_SYS_FSL_CPC_OFFSET)
 #define CONFIG_SYS_FSL_QMAN_ADDR \
index 892848aacf1155eabe5190ae1c8b4eaed9a30158..8bb342b9295f7be4da390723d8885f789fa93710 100644 (file)
@@ -1,25 +1,6 @@
-/*----------------------------------------------------------------------------+
-|   This source code is dual-licensed.  You may use it under the terms of the
-|   GNU General Public License version 2, or under the license below.
-|
-|      This source code has been made available to you by IBM on an AS-IS
-|      basis.  Anyone receiving this source is licensed under IBM
-|      copyrights to use it in any way he or she deems fit, including
-|      copying it, modifying it, compiling it, and redistributing it either
-|      with or without modifications.  No license under IBM patents or
-|      patent applications is to be implied by the copyright license.
-|
-|      Any user of this software should understand that IBM cannot provide
-|      technical support for this software and will not be responsible for
-|      any consequences resulting from the use of this software.
-|
-|      Any person who transfers this source code or any derivative work
-|      must include the IBM copyright notice, this paragraph, and the
-|      preceding two paragraphs in the transferred software.
-|
-|      COPYRIGHT   I B M   CORPORATION 1999
-|      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-+----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 
 #ifndef        __PPC405_H__
 #define __PPC405_H__
diff --git a/arch/powerpc/include/asm/ppc405cr.h b/arch/powerpc/include/asm/ppc405cr.h
deleted file mode 100644 (file)
index 0ea69bd..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * (C) Copyright 2010
- * Stefan Roese, DENX Software Engineering, sr@denx.de.
- *
- * SPDX-License-Identifier:    GPL-2.0+ 
- */
-
-#ifndef _PPC405CR_H_
-#define _PPC405CR_H_
-
-#define CONFIG_SDRAM_PPC4xx_IBM_SDRAM  /* IBM SDRAM controller */
-
-/* Memory mapped register */
-#define CONFIG_SYS_PERIPHERAL_BASE     0xef600000 /* Internal Peripherals */
-
-#define CONFIG_SYS_NS16550_COM1        (CONFIG_SYS_PERIPHERAL_BASE + 0x0300)
-#define CONFIG_SYS_NS16550_COM2        (CONFIG_SYS_PERIPHERAL_BASE + 0x0400)
-
-#define GPIO0_BASE             (CONFIG_SYS_PERIPHERAL_BASE + 0x0700)
-
-/* DCR's */
-#define DCP0_CFGADDR   0x0014          /* Decompression controller addr reg */
-#define DCP0_CFGDATA   0x0015          /* Decompression controller data reg */
-#define OCM0_ISCNTL    0x0019  /* OCM I-side control reg */
-#define OCM0_DSARC     0x001a  /* OCM D-side address compare */
-#define OCM0_DSCNTL    0x001b  /* OCM D-side control */
-#define CPC0_PLLMR     0x00b0          /* PLL mode  register */
-#define CPC0_CR0       0x00b1          /* chip control register 0 */
-#define CPC0_CR1       0x00b2          /* chip control register 1 */
-#define CPC0_PSR       0x00b4          /* chip pin strapping reg */
-#define CPC0_EIRR      0x00b6          /* ext interrupt routing reg */
-#define CPC0_SR                0x00b8          /* Power management status */
-#define CPC0_ER                0x00b9          /* Power management enable */
-#define CPC0_FR                0x00ba          /* Power management force */
-#define CPC0_ECR       0x00aa          /* edge conditioner register */
-
-#define PLLMR_FWD_DIV_MASK     0xE0000000      /* Forward Divisor */
-#define PLLMR_FWD_DIV_BYPASS   0xE0000000
-#define PLLMR_FWD_DIV_3                0xA0000000
-#define PLLMR_FWD_DIV_4                0x80000000
-#define PLLMR_FWD_DIV_6                0x40000000
-
-#define PLLMR_FB_DIV_MASK      0x1E000000      /* Feedback Divisor */
-#define PLLMR_FB_DIV_1         0x02000000
-#define PLLMR_FB_DIV_2         0x04000000
-#define PLLMR_FB_DIV_3         0x06000000
-#define PLLMR_FB_DIV_4         0x08000000
-
-#define PLLMR_TUNING_MASK      0x01F80000
-
-#define PLLMR_CPU_TO_PLB_MASK  0x00060000      /* CPU:PLB Frequency Divisor */
-#define PLLMR_CPU_PLB_DIV_1    0x00000000
-#define PLLMR_CPU_PLB_DIV_2    0x00020000
-#define PLLMR_CPU_PLB_DIV_3    0x00040000
-#define PLLMR_CPU_PLB_DIV_4    0x00060000
-
-#define PLLMR_OPB_TO_PLB_MASK  0x00018000      /* OPB:PLB Frequency Divisor */
-#define PLLMR_OPB_PLB_DIV_1    0x00000000
-#define PLLMR_OPB_PLB_DIV_2    0x00008000
-#define PLLMR_OPB_PLB_DIV_3    0x00010000
-#define PLLMR_OPB_PLB_DIV_4    0x00018000
-
-#define PLLMR_PCI_TO_PLB_MASK  0x00006000      /* PCI:PLB Frequency Divisor */
-#define PLLMR_PCI_PLB_DIV_1    0x00000000
-#define PLLMR_PCI_PLB_DIV_2    0x00002000
-#define PLLMR_PCI_PLB_DIV_3    0x00004000
-#define PLLMR_PCI_PLB_DIV_4    0x00006000
-
-#define PLLMR_EXB_TO_PLB_MASK  0x00001800      /* External Bus:PLB Divisor */
-#define PLLMR_EXB_PLB_DIV_2    0x00000000
-#define PLLMR_EXB_PLB_DIV_3    0x00000800
-#define PLLMR_EXB_PLB_DIV_4    0x00001000
-#define PLLMR_EXB_PLB_DIV_5    0x00001800
-
-/* definitions for PPC405GPr (new mode strapping) */
-#define PLLMR_FWDB_DIV_MASK    0x00000007      /* Forward Divisor B */
-
-#define PSR_PLL_FWD_MASK       0xC0000000
-#define PSR_PLL_FDBACK_MASK    0x30000000
-#define PSR_PLL_TUNING_MASK    0x0E000000
-#define PSR_PLB_CPU_MASK       0x01800000
-#define PSR_OPB_PLB_MASK       0x00600000
-#define PSR_PCI_PLB_MASK       0x00180000
-#define PSR_EB_PLB_MASK                0x00060000
-#define PSR_ROM_WIDTH_MASK     0x00018000
-#define PSR_ROM_LOC            0x00004000
-#define PSR_PCI_ASYNC_EN       0x00001000
-#define PSR_PERCLK_SYNC_MODE_EN 0x00000800     /* PPC405GPr only */
-#define PSR_PCI_ARBIT_EN       0x00000400
-#define PSR_NEW_MODE_EN                0x00000020      /* PPC405GPr only */
-
-#endif /* _PPC405CR_H_ */
index 411d441a206a28e0969cd673a59f7499c7d848e9..0f5bc8d1c79f41fa420be2b7539c75abc365cb50 100644 (file)
@@ -1,26 +1,3 @@
-/*----------------------------------------------------------------------------+
-|   This source code is dual-licensed.  You may use it under the terms of the
-|   GNU General Public License version 2, or under the license below.
-|
-|      This source code has been made available to you by IBM on an AS-IS
-|      basis.  Anyone receiving this source is licensed under IBM
-|      copyrights to use it in any way he or she deems fit, including
-|      copying it, modifying it, compiling it, and redistributing it either
-|      with or without modifications.  No license under IBM patents or
-|      patent applications is to be implied by the copyright license.
-|
-|      Any user of this software should understand that IBM cannot provide
-|      technical support for this software and will not be responsible for
-|      any consequences resulting from the use of this software.
-|
-|      Any person who transfers this source code or any derivative work
-|      must include the IBM copyright notice, this paragraph, and the
-|      preceding two paragraphs in the transferred software.
-|
-|      COPYRIGHT   I B M   CORPORATION 1999
-|      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-+----------------------------------------------------------------------------*/
-
 /*
  * (C) Copyright 2006
  * Sylvie Gohl,             AMCC/IBM, gohl.sylvie@fr.ibm.com
@@ -32,7 +9,7 @@
  * (C) Copyright 2010
  * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
- * SPDX-License-Identifier:    GPL-2.0+
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
  */
 
 #ifndef __PPC440_H__
index 9eb50ee84d506854bab7f486449c66bb2034ecfc..32062fd419fe06c251e73a231f67c6ba96ba73dc 100644 (file)
  * Within this group there is a slight variation concerning the bit field
  * position of the EMPL and EMPH fields:
  */
-#if defined(CONFIG_405CR) || defined(CONFIG_405GP) || \
+#if defined(CONFIG_405GP) || \
     defined(CONFIG_405EP) || \
     defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
 #define CONFIG_EBC_PPC4xx_IBM_VER1
-#if defined(CONFIG_405CR) || defined(CONFIG_405GP) || \
+#if defined(CONFIG_405GP) || \
     defined(CONFIG_405EP)
 #define EBC_CFG_EMPH_POS       8
 #define EBC_CFG_EMPL_POS       6
@@ -32,7 +32,7 @@
 /*
  * Define the max number of EBC banks (chip selects)
  */
-#if defined(CONFIG_405CR) || defined(CONFIG_405GP) || \
+#if defined(CONFIG_405GP) || \
     defined(CONFIG_405EZ) || \
     defined(CONFIG_440GP) || defined(CONFIG_440GX)
 #define EBC_NUM_BANKS  8
index a219fa97fa98745d062a1ac607f3113f0fcebae9..e6eb332220ef7edab7c9f3cc8d1c7c1e7b6b4fa7 100644 (file)
@@ -1,25 +1,6 @@
-/*----------------------------------------------------------------------------+
-|   This source code is dual-licensed.  You may use it under the terms of the
-|   GNU General Public License version 2, or under the license below.
-|
-|      This source code has been made available to you by IBM on an AS-IS
-|      basis.  Anyone receiving this source is licensed under IBM
-|      copyrights to use it in any way he or she deems fit, including
-|      copying it, modifying it, compiling it, and redistributing it either
-|      with or without modifications.  No license under IBM patents or
-|      patent applications is to be implied by the copyright license.
-|
-|      Any user of this software should understand that IBM cannot provide
-|      technical support for this software and will not be responsible for
-|      any consequences resulting from the use of this software.
-|
-|      Any person who transfers this source code or any derivative work
-|      must include the IBM copyright notice, this paragraph, and the
-|      preceding two paragraphs in the transferred software.
-|
-|      COPYRIGHT   I B M   CORPORATION 1999
-|      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-+----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*----------------------------------------------------------------------------+
 |
 |  File Name:  enetemac.h
index 71986856b15595e1f2a664adbfffc6ad485c79d8..d15290dc1a6ec24329ea1508920649296461bbe7 100644 (file)
@@ -1,26 +1,7 @@
 /* include/mal.h, openbios_walnut, walnut_bios 8/6/99 08:48:40 */
-/*----------------------------------------------------------------------------+
-|   This source code is dual-licensed.  You may use it under the terms of the
-|   GNU General Public License version 2, or under the license below.
-|
-|      This source code has been made available to you by IBM on an AS-IS
-|      basis.  Anyone receiving this source is licensed under IBM
-|      copyrights to use it in any way he or she deems fit, including
-|      copying it, modifying it, compiling it, and redistributing it either
-|      with or without modifications.  No license under IBM patents or
-|      patent applications is to be implied by the copyright license.
-|
-|      Any user of this software should understand that IBM cannot provide
-|      technical support for this software and will not be responsible for
-|      any consequences resulting from the use of this software.
-|
-|      Any person who transfers this source code or any derivative work
-|      must include the IBM copyright notice, this paragraph, and the
-|      preceding two paragraphs in the transferred software.
-|
-|      COPYRIGHT   I B M   CORPORATION 1999
-|      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-+----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*----------------------------------------------------------------------------+
 |
 |  File Name:  mal.h
index 9f2a08b8b3cd79630f8dc030f0e4e0142c208d2a..8d703c663402996644c38cb451142c878821356e 100644 (file)
@@ -1,25 +1,6 @@
-/*----------------------------------------------------------------------------+
-|       This source code is dual-licensed.  You may use it under the terms of
-|       the GNU General Public License version 2, or under the license below.
-|
-|       This source code has been made available to you by IBM on an AS-IS
-|       basis.  Anyone receiving this source is licensed under IBM
-|       copyrights to use it in any way he or she deems fit, including
-|       copying it, modifying it, compiling it, and redistributing it either
-|       with or without modifications.  No license under IBM patents or
-|       patent applications is to be implied by the copyright license.
-|
-|       Any user of this software should understand that IBM cannot provide
-|       technical support for this software and will not be responsible for
-|       any consequences resulting from the use of this software.
-|
-|       Any person who transfers this source code or any derivative work
-|       must include the IBM copyright notice, this paragraph, and the
-|       preceding two paragraphs in the transferred software.
-|
-|       COPYRIGHT   I B M   CORPORATION 1999
-|       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-+----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 
 #ifndef        __PPC4XX_H__
 #define __PPC4XX_H__
@@ -27,10 +8,6 @@
 /*
  * Include SoC specific headers
  */
-#if defined(CONFIG_405CR)
-#include <asm/ppc405cr.h>
-#endif
-
 #if defined(CONFIG_405EP)
 #include <asm/ppc405ep.h>
 #endif
index 56b22d840ad466adad4f9a9d83ed5b4e6b3524c5..c0fb51993e2899804d79ad3d73d6f9557573db6c 100644 (file)
 /* System-On-Chip Version Register (SVR) field extraction */
 
 #define SVR_VER(svr)   (((svr) >> 16) & 0xFFFF) /* Version field */
-#define SVR_REV(svr)   (((svr) >>  0) & 0xFFFF) /* Revision field */
+#define SVR_REV(svr)   (((svr) >>  0) & 0xFF)   /* Revision field */
 
 #define SVR_CID(svr)   (((svr) >> 28) & 0x0F)   /* Company or manufacturer ID */
 #define SVR_SOCOP(svr) (((svr) >> 22) & 0x3F)   /* SOC integration options */
 #define PVR_405GP_RC   0x40110082
 #define PVR_405GP_RD   0x401100C4
 #define PVR_405GP_RE   0x40110145  /* same as pc405cr rev c */
-#define PVR_405CR_RA   0x40110041
-#define PVR_405CR_RB   0x401100C5
-#define PVR_405CR_RC   0x40110145  /* same as pc405gp rev e */
 #define PVR_405EP_RA   0x51210950
 #define PVR_405GPR_RB  0x50910951
 #define PVR_405EZ_RA   0x41511460
 
 /* System Version Register (SVR) field extraction */
 
-#define SVR_VER(svr)   (((svr) >>  16) & 0xFFFF)       /* Version field */
-#define SVR_REV(svr)   (((svr) >>   0) & 0xFFFF)       /* Revison field */
-
 #define SVR_SUBVER(svr)        (((svr) >>  8) & 0xFF)  /* Process/MFG sub-version */
 
 #define SVR_FAM(svr)   (((svr) >> 20) & 0xFFF) /* Family field */
 #define SVR_T4240      0x824000
 #define SVR_T4120      0x824001
 #define SVR_T4160      0x824100
+#define SVR_C291       0x850000
+#define SVR_C292       0x850020
+#define SVR_C293       0x850030
 #define SVR_B4860      0X868000
 #define SVR_G4860      0x868001
 #define SVR_G4060      0x868003
index f17b146da3b3f896a2e498031a0ddc511ad9b160..5916f7ce99ec578e4e3bf92c8fd4cbe05a8ca99e 100644 (file)
@@ -67,7 +67,6 @@ typedef struct bd_info {
        unsigned int    bi_baudrate;    /* Console Baudrate */
 #if defined(CONFIG_405)   || \
     defined(CONFIG_405GP) || \
-    defined(CONFIG_405CR) || \
     defined(CONFIG_405EP) || \
     defined(CONFIG_405EZ) || \
     defined(CONFIG_405EX) || \
diff --git a/arch/x86/cpu/coreboot/config.mk b/arch/x86/cpu/coreboot/config.mk
deleted file mode 100644 (file)
index 0bbd2ff..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Copyright (c) 2012 The Chromium OS Authors.
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
-
-CONFIG_ARCH_DEVICE_TREE := coreboot
index b116d595550b89c005a8c311ea6cae22280584f8..0d91adc5e47b60b84c363f0516af7b64c8336634 100644 (file)
@@ -4,28 +4,7 @@
  * Copyright (C) 2008 Advanced Micro Devices, Inc.
  * Copyright (C) 2009 coresystems GmbH
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * SPDX-License-Identifier:    BSD-3-Clause
  */
 
 #include <common.h>
index 78d3a9d49ea06785871d99faf99e12cf5dad64b8..8e4a61de7d07cf73dba726f0de80794a2d9a0d89 100644 (file)
@@ -3,28 +3,7 @@
  *
  * Copyright (C) 2008 Advanced Micro Devices, Inc.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * SPDX-License-Identifier:    BSD-3-Clause
  */
 
 #ifndef _COREBOOT_SYSINFO_H
index ad34a8b0f144fba918fe367c49cb25f57605119b..0d02fe0592eed1775e251ad23838ab92319a4aca 100644 (file)
@@ -3,28 +3,7 @@
  *
  * Copyright (C) 2008 Advanced Micro Devices, Inc.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * SPDX-License-Identifier:    BSD-3-Clause
  */
 
 #ifndef _COREBOOT_TABLES_H
index ec67dd04b04653094c48101b4d787b88d5dfa421..6c187190b2304351f1d810aa909ab24eb2f25d74 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := adp-ag102.o
+COBJS-y        := adp-ag102.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS-y) $(SOBJS-y))
index a0fe832fb2471dc37d6ee447bdc2b98776640156..112c47b60dae3dd8f5cdebae49f68a51ee4971a1 100644 (file)
@@ -57,13 +57,13 @@ the following command:
 => fdt print
 
 5. Save fdt to NOR flash:
-=> erase fc060000 fc07ffff
-=> cp.b 1800000 fc060000 10000
+=> erase fc180000 fc07ffff
+=> cp.b 1800000 fc180000 10000
 
 All this can be integrated into an environment command:
-=> setenv upd_fdt 'tftp 1800000 a3m071/a3m071.dtb;run mtdargs addip2 addtty; \
-       fdt addr 1800000;fdt boardsetup;fdt chosen;erase fc060000 fc07ffff; \
-       cp.b 1800000 fc060000 10000'
+=> setenv upd_fdt 'tftp 1800000 a3m071/a3m071.dtb;run mtdargs addip addtty; \
+       fdt addr 1800000;fdt boardsetup;fdt chosen;erase fc180000 fc07ffff; \
+       cp.b 1800000 fc180000 10000'
 => saveenv
 
 After this, only "run upd_fdt" needs to get called to load, patch
diff --git a/board/atmel/at91sam9m10g45ek/config.mk b/board/atmel/at91sam9m10g45ek/config.mk
deleted file mode 100644 (file)
index 9d3c5ae..0000000
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SYS_TEXT_BASE = 0x73f00000
diff --git a/board/atmel/at91sam9x5ek/config.mk b/board/atmel/at91sam9x5ek/config.mk
deleted file mode 100644 (file)
index 6589a12..0000000
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SYS_TEXT_BASE = 0x26f00000
index 4a309ad17f575697e0b1b539d930ebacc7d314da..97caf64d4040fe33e0c00fca362bbdc09ddbac7b 100644 (file)
@@ -17,6 +17,7 @@
 #include <lcd.h>
 #include <atmel_lcdc.h>
 #include <atmel_mci.h>
+#include <micrel.h>
 #include <net.h>
 #include <netdev.h>
 
@@ -178,6 +179,8 @@ int board_init(void)
 #ifdef CONFIG_MACB
        if (has_emac())
                at91_macb_hw_init();
+       if (has_gmac())
+               at91_gmac_hw_init();
 #endif
 #ifdef CONFIG_LCD
        if (has_lcdc())
@@ -193,6 +196,21 @@ int dram_init(void)
        return 0;
 }
 
+int board_phy_config(struct phy_device *phydev)
+{
+       /* rx data delay */
+       ksz9021_phy_extended_write(phydev,
+                                  MII_KSZ9021_EXT_RGMII_RX_DATA_SKEW, 0x2222);
+       /* tx data delay */
+       ksz9021_phy_extended_write(phydev,
+                                  MII_KSZ9021_EXT_RGMII_TX_DATA_SKEW, 0x2222);
+       /* rx/tx clock delay */
+       ksz9021_phy_extended_write(phydev,
+                                  MII_KSZ9021_EXT_RGMII_CLOCK_SKEW, 0xf2f4);
+
+       return 0;
+}
+
 int board_eth_init(bd_t *bis)
 {
        int rc = 0;
@@ -200,6 +218,8 @@ int board_eth_init(bd_t *bis)
 #ifdef CONFIG_MACB
        if (has_emac())
                rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC, 0x00);
+       if (has_gmac())
+               rc = macb_eth_initialize(0, (void *)ATMEL_BASE_GMAC, 0x00);
 #endif
 
        return rc;
index 79ab44904e19a8ad293896c7fb2b3ef410b7ff3f..f664f6de6b398b03848fffa3344a4c6f6564eed5 100644 (file)
@@ -622,7 +622,6 @@ int board_video_skip(void)
 static void setup_display(void)
 {
        struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
-       struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
        struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
        int reg;
 
@@ -633,10 +632,6 @@ static void setup_display(void)
        reg |=  MXC_CCM_CCGR3_LDB_DI0_MASK;
        writel(reg, &mxc_ccm->CCGR3);
 
-       /* set PFD1_FRAC to 0x13 == 455 MHz (480*18)/0x13 */
-       writel(ANATOP_PFD_480_PFD1_FRAC_MASK, &anatop->pfd_480_clr);
-       writel(0x13<<ANATOP_PFD_480_PFD1_FRAC_SHIFT, &anatop->pfd_480_set);
-
        /* set LDB0, LDB1 clk select to 011/011 */
        reg = readl(&mxc_ccm->cs2cdr);
        reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK
@@ -666,7 +661,8 @@ static void setup_display(void)
        writel(reg, &iomux->gpr[2]);
 
        reg = readl(&iomux->gpr[3]);
-       reg = (reg & ~IOMUXC_GPR3_LVDS0_MUX_CTL_MASK)
+       reg = (reg & ~(IOMUXC_GPR3_LVDS0_MUX_CTL_MASK
+                       |IOMUXC_GPR3_HDMI_MUX_CTL_MASK))
            | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
               <<IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET);
        writel(reg, &iomux->gpr[3]);
index f720851aacbed7c6e1b3b23c1ab0708a44596067..0c05dd03dbe860f16425a80c0b6b6537e3a25833 100644 (file)
@@ -1,37 +1,7 @@
 #
 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
 #
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Alternatively, this software may be distributed under the terms of the
-# GNU General Public License ("GPL") version 2 as published by the Free
-# Software Foundation.
+# SPDX-License-Identifier:     GPL-2.0 BSD-3-Clause
 #
 
 HOSTCFLAGS_autoconf.mk.dep = -Wno-variadic-macros
index d0738cbf46cd9f2f1d5ce5fbdc492817305a50de..c95ee8a108937cf2d3eb2d4e294cff1586817421 100644 (file)
@@ -1,6 +1,6 @@
 /dts-v1/;
 
-/include/ ARCH_CPU_DTS
+/include/ "coreboot.dtsi"
 
 / {
         #address-cells = <1>;
index bbf0f75a4d7ea182539ea8ac766b8d8609c3e7e5..5e76d2ac5e8a3ecec1eb203cbbffb7b4759619bd 100644 (file)
@@ -7,8 +7,7 @@ Conga-QEVAl Evaluation Carrier board with qmx6 quad module.
 1. Boot source, boot from SD card
 ---------------------------------
 
-This version of u-boot works only on the SD card. By default, the
-Congatec board can boot only from the SPI-NOR.
+By default, the Congatec board can boot only from the SPI-NOR.
 But, with the u-boot version provided with the board you can write boot
 registers to force the board to reboot and boot from the SD slot. If
 "bmode" command is not available from your pre-installed u-boot, these
index 16621414887de223754df3b67b5b5de121086ac1..82f21b08b2aebe20e332ba22601b99ec9946fef5 100644 (file)
@@ -1,27 +1,6 @@
-/*------------------------------------------------------------------------------+ */
-/* */
-/*       This source code is dual-licensed.  You may use it under the terms */
-/*       of the GNU General Public License version 2, or under the license  */
-/*       below.                                                             */
-/*                                                                          */
-/*       This source code has been made available to you by IBM on an AS-IS */
-/*       basis.  Anyone receiving this source is licensed under IBM */
-/*       copyrights to use it in any way he or she deems fit, including */
-/*       copying it, modifying it, compiling it, and redistributing it either */
-/*       with or without modifications.  No license under IBM patents or */
-/*       patent applications is to be implied by the copyright license. */
-/* */
-/*       Any user of this software should understand that IBM cannot provide */
-/*       technical support for this software and will not be responsible for */
-/*       any consequences resulting from the use of this software. */
-/* */
-/*       Any person who transfers this source code or any derivative work */
-/*       must include the IBM copyright notice, this paragraph, and the */
-/*       preceding two paragraphs in the transferred software. */
-/* */
-/*       COPYRIGHT   I B M   CORPORATION 1995 */
-/*       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M */
-/*------------------------------------------------------------------------------- */
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 
 /*----------------------------------------------------------------------------- */
 /* Function:     ext_bus_cntlr_init */
index 82c6fdb965e235b5c2c995122857148649665356..b1283aa69a72b129151a1fb2ca08a5d8505f044e 100644 (file)
@@ -1,26 +1,6 @@
-/******************************************************************************
- *   This source code is dual-licensed.  You may use it under the terms of the
- *   GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *
- *****************************************************************************/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 #include <config.h>
 #include <asm/ppc4xx.h>
 
index e00b5f530cbdd9406270eaea9820255b5fcffe0f..f5805b79882a961963d77a202aafefaefc50dd37 100644 (file)
@@ -1,26 +1,6 @@
-/******************************************************************************
- *   This source code is dual-licensed.  You may use it under the terms of the
- *   GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *
- *****************************************************************************/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 #include <config.h>
 #include <asm/ppc4xx.h>
 
index c786997799004deeb82517aa318e5650fd082d67..c4444c7c7f549cd2cb1f24e8cc3619e3a0c24f00 100644 (file)
@@ -24,7 +24,7 @@
 #include <asm/io.h>
 #include <asm/arch/davinci_misc.h>
 #include <asm/gpio.h>
-#include <asm/arch/da8xx-fb.h>
+#include "../../../drivers/video/da8xx-fb.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -43,6 +43,30 @@ static const struct da8xx_panel lcd_panel = {
        .invert_pxl_clk = 0,
 };
 
+static const struct display_panel disp_panel = {
+       QVGA,
+       16,
+       16,
+       COLOR_ACTIVE,
+};
+
+static const struct lcd_ctrl_config lcd_cfg = {
+       &disp_panel,
+       .ac_bias                = 255,
+       .ac_bias_intrpt         = 0,
+       .dma_burst_sz           = 16,
+       .bpp                    = 16,
+       .fdd                    = 255,
+       .tft_alt_mode           = 0,
+       .stn_565_mode           = 0,
+       .mono_8bit_mode         = 0,
+       .invert_line_clock      = 1,
+       .invert_frm_clock       = 1,
+       .sync_edge              = 0,
+       .sync_ctrl              = 1,
+       .raster_order           = 0,
+};
+
 /* SPI0 pin muxer settings */
 static const struct pinmux_config spi1_pins[] = {
        { pinmux(5), 1, 1 },
@@ -259,7 +283,7 @@ int board_init(void)
        /* address of boot parameters */
        gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
 
-       da8xx_video_init(&lcd_panel, 16);
+       da8xx_video_init(&lcd_panel, &lcd_cfg, 16);
 
        return 0;
 }
diff --git a/board/esd/canbt/canbt.c b/board/esd/canbt/canbt.c
deleted file mode 100644 (file)
index 5884975..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * (C) Copyright 2001
- * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include "canbt.h"
-#include <asm/processor.h>
-#include <asm/io.h>
-#include <command.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/* ------------------------------------------------------------------------- */
-
-#if 0
-#define FPGA_DEBUG
-#endif
-
-/* fpga configuration data */
-const unsigned char fpgadata[] = {
-#include "fpgadata.c"
-};
-
-/*
- * include common fpga code (for esd boards)
- */
-#include "../common/fpga.c"
-
-
-int board_early_init_f (void)
-{
-       unsigned long CPC0_CR0Reg;
-       int index, len, i;
-       int status;
-
-       /*
-        * Setup GPIO pins
-        */
-       CPC0_CR0Reg = mfdcr (CPC0_CR0) & 0xf0001fff;
-       CPC0_CR0Reg |= 0x0070f000;
-       mtdcr (CPC0_CR0, CPC0_CR0Reg);
-
-#ifdef FPGA_DEBUG
-       /* set up serial port with default baudrate */
-       (void) get_clocks ();
-       gd->baudrate = CONFIG_BAUDRATE;
-       serial_init ();
-       console_init_f ();
-#endif
-
-       /*
-        * Boot onboard FPGA
-        */
-       status = fpga_boot ((unsigned char *) fpgadata, sizeof (fpgadata));
-       if (status != 0) {
-               /* booting FPGA failed */
-#ifndef FPGA_DEBUG
-               /* set up serial port with default baudrate */
-               (void) get_clocks ();
-               gd->baudrate = CONFIG_BAUDRATE;
-               serial_init ();
-               console_init_f ();
-#endif
-               printf ("\nFPGA: Booting failed ");
-               switch (status) {
-               case ERROR_FPGA_PRG_INIT_LOW:
-                       printf ("(Timeout: INIT not low after asserting PROGRAM*)\n ");
-                       break;
-               case ERROR_FPGA_PRG_INIT_HIGH:
-                       printf ("(Timeout: INIT not high after deasserting PROGRAM*)\n ");
-                       break;
-               case ERROR_FPGA_PRG_DONE:
-                       printf ("(Timeout: DONE not high after programming FPGA)\n ");
-                       break;
-               }
-
-               /* display infos on fpgaimage */
-               index = 15;
-               for (i = 0; i < 4; i++) {
-                       len = fpgadata[index];
-                       printf ("FPGA: %s\n", &(fpgadata[index + 1]));
-                       index += len + 3;
-               }
-               putc ('\n');
-               /* delayed reboot */
-               for (i = 20; i > 0; i--) {
-                       printf ("Rebooting in %2d seconds \r", i);
-                       for (index = 0; index < 1000; index++)
-                               udelay (1000);
-               }
-               putc ('\n');
-               do_reset (NULL, 0, 0, NULL);
-       }
-
-       /*
-        * Setup port pins for normal operation
-        */
-       out_be32 ((void *)GPIO0_ODR, 0x00000000);       /* no open drain pins */
-       out_be32 ((void *)GPIO0_TCR, 0x07038100);       /* setup for output */
-       out_be32 ((void *)GPIO0_OR, 0x07030100);        /* set output pins to high (default) */
-
-       /*
-        * IRQ 0-15  405GP internally generated; active high; level sensitive
-        * IRQ 16    405GP internally generated; active low; level sensitive
-        * IRQ 17-24 RESERVED
-        * IRQ 25 (EXT IRQ 0) CAN0; active low; level sensitive
-        * IRQ 26 (EXT IRQ 1) CAN1; active low; level sensitive
-        * IRQ 27 (EXT IRQ 2) PCI SLOT 0; active low; level sensitive
-        * IRQ 28 (EXT IRQ 3) PCI SLOT 1; active low; level sensitive
-        * IRQ 29 (EXT IRQ 4) PCI SLOT 2; active low; level sensitive
-        * IRQ 30 (EXT IRQ 5) PCI SLOT 3; active low; level sensitive
-        * IRQ 31 (EXT IRQ 6) COMPACT FLASH; active high; level sensitive
-        */
-       mtdcr (UIC0SR, 0xFFFFFFFF);     /* clear all ints */
-       mtdcr (UIC0ER, 0x00000000);     /* disable all ints */
-       mtdcr (UIC0CR, 0x00000000);     /* set all to be non-critical */
-       mtdcr (UIC0PR, 0xFFFFFF81);     /* set int polarities */
-       mtdcr (UIC0TR, 0x10000000);     /* set int trigger levels */
-       mtdcr (UIC0VCR, 0x00000001);    /* set vect base=0,INT0 highest priority */
-       mtdcr (UIC0SR, 0xFFFFFFFF);     /* clear all ints */
-
-       return 0;
-}
-
-
-/* ------------------------------------------------------------------------- */
-
-/*
- * Check Board Identity:
- */
-
-int checkboard (void)
-{
-       int index;
-       int len;
-       char str[64];
-       int i = getenv_f("serial#", str, sizeof (str));
-
-       puts ("Board: ");
-
-       if (!i || strncmp (str, "CANBT", 5)) {
-               puts ("### No HW ID - assuming CANBT\n");
-               return (0);
-       }
-
-       puts (str);
-
-       puts ("\nFPGA:  ");
-
-       /* display infos on fpgaimage */
-       index = 15;
-       for (i = 0; i < 4; i++) {
-               len = fpgadata[index];
-               printf ("%s ", &(fpgadata[index + 1]));
-               index += len + 3;
-       }
-
-       putc ('\n');
-
-       return 0;
-}
diff --git a/board/esd/canbt/canbt.h b/board/esd/canbt/canbt.h
deleted file mode 100644 (file)
index 75e7950..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * (C) Copyright 2000
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-/****************************************************************************
- * FLASH Memory Map as used by TQ Monitor:
- *
- *                          Start Address    Length
- * +-----------------------+ 0x4000_0000     Start of Flash -----------------
- * | MON8xx code           | 0x4000_0100     Reset Vector
- * +-----------------------+ 0x400?_????
- * | (unused)              |
- * +-----------------------+ 0x4001_FF00
- * | Ethernet Addresses    |                 0x78
- * +-----------------------+ 0x4001_FF78
- * | (Reserved for MON8xx) |                 0x44
- * +-----------------------+ 0x4001_FFBC
- * | Lock Address          |                 0x04
- * +-----------------------+ 0x4001_FFC0                     ^
- * | Hardware Information  |                 0x40            | MON8xx
- * +=======================+ 0x4002_0000 (sector border)    -----------------
- * | Autostart Header      |                                 | Applications
- * | ...                   |                                 v
- *
- *****************************************************************************/
diff --git a/board/esd/canbt/flash.c b/board/esd/canbt/flash.c
deleted file mode 100644 (file)
index 34bdc05..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * (C) Copyright 2001
- * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <asm/ppc4xx.h>
-#include <asm/processor.h>
-
-/*
- * include common flash code (for esd boards)
- */
-#include "../common/flash.c"
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-static ulong flash_get_size (vu_long *addr, flash_info_t *info);
-static void flash_get_offsets (ulong base, flash_info_t *info);
-
-/*-----------------------------------------------------------------------
- */
-
-unsigned long flash_init (void)
-{
-       unsigned long size_b0;
-       int i;
-       uint pbcr;
-       unsigned long base_b0;
-
-       /* Init: no FLASHes known */
-       for (i=0; i<CONFIG_SYS_MAX_FLASH_BANKS; ++i) {
-               flash_info[i].flash_id = FLASH_UNKNOWN;
-       }
-
-       /* Static FLASH Bank configuration here - FIXME XXX */
-
-       size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
-
-       if (flash_info[0].flash_id == FLASH_UNKNOWN) {
-               printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",
-                       size_b0, size_b0<<20);
-       }
-
-       /* Setup offsets */
-       flash_get_offsets (-size_b0, &flash_info[0]);
-
-       /* Re-do sizing to get full correct info */
-       mtdcr(EBC0_CFGADDR, PB0CR);
-       pbcr = mfdcr(EBC0_CFGDATA);
-       mtdcr(EBC0_CFGADDR, PB0CR);
-       base_b0 = -size_b0;
-       pbcr = (pbcr & 0x0001ffff) | base_b0 | (((size_b0/1024/1024)-1)<<17);
-       mtdcr(EBC0_CFGDATA, pbcr);
-       /*          printf("PB1CR = %x\n", pbcr); */
-
-       /* Monitor protection ON by default */
-       (void)flash_protect(FLAG_PROTECT_SET,
-                           -monitor_flash_len,
-                           0xffffffff,
-                           &flash_info[0]);
-
-       flash_info[0].size = size_b0;
-
-       return (size_b0);
-}
diff --git a/board/esd/canbt/fpgadata.c b/board/esd/canbt/fpgadata.c
deleted file mode 100644 (file)
index af401cd..0000000
+++ /dev/null
@@ -1,807 +0,0 @@
-0x00, 0x09, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0,
-0x0f, 0xf0, 0x00, 0x00, 0x01, 0x61, 0x00, 0x0c,
-0x69, 0x6f, 0x5f, 0x63, 0x68, 0x69, 0x70, 0x2e,
-0x6e, 0x63, 0x64, 0x00, 0x62, 0x00, 0x0b, 0x73,
-0x30, 0x35, 0x78, 0x6c, 0x76, 0x71, 0x31, 0x30,
-0x30, 0x00, 0x63, 0x00, 0x0b, 0x32, 0x30, 0x30,
-0x31, 0x2f, 0x31, 0x31, 0x2f, 0x32, 0x33, 0x00,
-0x64, 0x00, 0x09, 0x31, 0x33, 0x3a, 0x33, 0x34,
-0x3a, 0x34, 0x33, 0x00, 0x65, 0xe2, 0x01, 0x00,
-0x00, 0x18, 0xe6, 0xff, 0x30, 0xe8, 0x01, 0x01,
-0x01, 0x01, 0xe7, 0xe6, 0x04, 0x01, 0x0d, 0x04,
-0x07, 0x03, 0x05, 0x03, 0x05, 0x03, 0xe5, 0xe5,
-0x05, 0x09, 0x04, 0x06, 0x01, 0x07, 0x09, 0x01,
-0x07, 0x0b, 0x0f, 0x07, 0x03, 0x05, 0x03, 0x05,
-0x03, 0x11, 0x03, 0x0f, 0x09, 0x03, 0x05, 0x10,
-0xe5, 0xe6, 0x1a, 0x0a, 0x13, 0x29, 0x19, 0x05,
-0x09, 0x04, 0x04, 0x09, 0x09, 0x09, 0x0b, 0x04,
-0x04, 0x09, 0x09, 0x09, 0x0e, 0xe5, 0x01, 0x14,
-0x09, 0x09, 0x09, 0x03, 0x05, 0x0b, 0x03, 0x05,
-0x09, 0x09, 0x09, 0x09, 0x01, 0xe6, 0x7b, 0x01,
-0x01, 0x02, 0x75, 0xe8, 0x3e, 0x3b, 0x02, 0x34,
-0x0a, 0x09, 0x07, 0x09, 0x01, 0x11, 0x0a, 0xe5,
-0xe6, 0x5c, 0x1e, 0xe6, 0xe5, 0x0a, 0xe5, 0x50,
-0x1d, 0x0d, 0x31, 0x09, 0x14, 0x13, 0x07, 0x01,
-0x01, 0x2a, 0x08, 0x0b, 0x1e, 0x1c, 0x01, 0xe5,
-0x0f, 0x09, 0x09, 0xe5, 0x07, 0x09, 0xe6, 0x08,
-0x05, 0x03, 0x01, 0x07, 0x09, 0x09, 0x0d, 0xe8,
-0x0f, 0x09, 0xe5, 0x07, 0x09, 0x04, 0x05, 0x0a,
-0x01, 0x07, 0x01, 0x07, 0x09, 0x09, 0x0d, 0xe5,
-0xe6, 0x0c, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07,
-0xe5, 0x03, 0x03, 0xe5, 0x06, 0xe5, 0xe6, 0x03,
-0x03, 0xe5, 0x04, 0x02, 0xe5, 0x01, 0x05, 0xe5,
-0x07, 0xe5, 0x01, 0x07, 0x05, 0xe7, 0x0f, 0x09,
-0x09, 0x09, 0x10, 0x04, 0x05, 0x03, 0x03, 0x05,
-0x09, 0x09, 0x08, 0x08, 0x04, 0x01, 0x06, 0xe5,
-0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5,
-0x02, 0xe5, 0x04, 0xe5, 0x07, 0xe5, 0x07, 0xe5,
-0x07, 0xe5, 0x02, 0x04, 0xe5, 0x07, 0x02, 0x03,
-0x02, 0xe5, 0x0e, 0x09, 0x09, 0x09, 0x15, 0x09,
-0x09, 0x09, 0x09, 0x0e, 0xe6, 0xe5, 0x0c, 0x09,
-0x09, 0x09, 0x09, 0x04, 0x04, 0x01, 0x09, 0x06,
-0x02, 0x09, 0x09, 0x11, 0xe7, 0x0c, 0x02, 0x06,
-0x02, 0x04, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02,
-0x06, 0x02, 0x03, 0x02, 0x01, 0x02, 0x06, 0x02,
-0x01, 0x04, 0x02, 0x06, 0x02, 0x03, 0x02, 0x02,
-0x11, 0x03, 0x17, 0x03, 0x05, 0x12, 0x15, 0x02,
-0x23, 0x08, 0x16, 0x06, 0x0c, 0x05, 0x15, 0x07,
-0x01, 0x0a, 0x02, 0x0f, 0x01, 0x07, 0x02, 0xe5,
-0xe5, 0x08, 0x07, 0x02, 0x07, 0x02, 0x10, 0x03,
-0x11, 0x03, 0x2b, 0x05, 0xe6, 0x2b, 0x0a, 0x06,
-0x01, 0x01, 0x11, 0x0b, 0x0e, 0xe5, 0x08, 0xe6,
-0xe5, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x0b, 0x09,
-0x09, 0x01, 0x07, 0x09, 0x0e, 0x01, 0xe5, 0x0f,
-0x0d, 0x22, 0xe5, 0xe5, 0x27, 0x0e, 0xe6, 0x47,
-0x11, 0x17, 0x02, 0x04, 0x01, 0x01, 0x0d, 0x0d,
-0x1f, 0x04, 0x01, 0x24, 0x10, 0x03, 0x01, 0x2a,
-0x12, 0x0c, 0x06, 0xe5, 0x0a, 0x09, 0x11, 0xe5,
-0x01, 0x1c, 0x09, 0x17, 0x0b, 0x09, 0x09, 0x04,
-0x19, 0xe5, 0x0c, 0x01, 0x0d, 0x22, 0x0a, 0x01,
-0x0d, 0xe5, 0x04, 0x18, 0x01, 0xe5, 0x01, 0x05,
-0x04, 0x01, 0x02, 0xe5, 0x14, 0x10, 0x0b, 0x02,
-0x01, 0x02, 0x02, 0xe5, 0x19, 0x0d, 0xe5, 0xe5,
-0x0e, 0x09, 0x09, 0x02, 0x06, 0x09, 0x02, 0x03,
-0x04, 0x03, 0x05, 0x09, 0x15, 0x0c, 0x02, 0xe5,
-0x01, 0x0b, 0x04, 0x04, 0x09, 0x09, 0x02, 0x06,
-0x09, 0xe5, 0x01, 0x06, 0x05, 0x03, 0x06, 0x1e,
-0x02, 0x1c, 0x1d, 0x08, 0xe5, 0x05, 0x02, 0x06,
-0x02, 0x03, 0xe5, 0x1b, 0x03, 0x17, 0xe5, 0x08,
-0x02, 0x09, 0xe5, 0x09, 0x0f, 0xe5, 0x08, 0x07,
-0x09, 0x06, 0x0b, 0x02, 0x17, 0xe5, 0x09, 0x01,
-0x1f, 0x05, 0xe5, 0x02, 0x05, 0x03, 0x1f, 0xe5,
-0xe6, 0x0e, 0x09, 0x03, 0x05, 0x03, 0x05, 0x09,
-0x11, 0x01, 0x01, 0x04, 0x0c, 0x01, 0x0a, 0x0e,
-0x01, 0xe5, 0x0c, 0xe6, 0x06, 0xe6, 0x06, 0xe6,
-0x06, 0xe6, 0x02, 0x03, 0xe6, 0x03, 0x03, 0x02,
-0x09, 0x06, 0xe5, 0xe5, 0x25, 0x14, 0x1a, 0x12,
-0x05, 0x04, 0x02, 0x13, 0x16, 0xe7, 0xe5, 0x11,
-0xe5, 0x11, 0xe5, 0x06, 0xe5, 0x14, 0xe5, 0x11,
-0xe5, 0x03, 0xe5, 0x08, 0xe5, 0x06, 0x01, 0x02,
-0x02, 0x02, 0x01, 0x2c, 0xe5, 0x08, 0x01, 0x1d,
-0xe5, 0xe6, 0x01, 0x02, 0x01, 0x04, 0x09, 0x01,
-0x02, 0xe6, 0x03, 0x04, 0xe5, 0x02, 0x01, 0x02,
-0xe5, 0x02, 0x01, 0x07, 0x01, 0x07, 0x01, 0x07,
-0x01, 0x02, 0xe5, 0x04, 0x01, 0x07, 0x05, 0xe5,
-0x01, 0x01, 0x02, 0xe5, 0x07, 0xe5, 0x01, 0x01,
-0xe5, 0x09, 0xe5, 0xe5, 0xe7, 0x01, 0x0e, 0x08,
-0x03, 0xe5, 0x04, 0x02, 0x06, 0x02, 0xe5, 0x04,
-0x0d, 0xe5, 0x07, 0xe5, 0x08, 0xe5, 0x07, 0x05,
-0x07, 0x02, 0x01, 0x01, 0xe8, 0xe5, 0x10, 0x01,
-0x05, 0x0c, 0x10, 0xe5, 0x01, 0x06, 0xe5, 0x08,
-0x08, 0xe6, 0x01, 0x02, 0x05, 0xe5, 0x04, 0xe5,
-0x01, 0x06, 0xe5, 0x01, 0xe5, 0x01, 0x10, 0x02,
-0x05, 0xe5, 0x01, 0x06, 0x02, 0x06, 0x02, 0x05,
-0x03, 0x07, 0xe5, 0x01, 0x05, 0xe5, 0x01, 0x05,
-0x04, 0x03, 0x03, 0xe5, 0x04, 0x08, 0xe6, 0xe5,
-0xe6, 0x01, 0x0b, 0x05, 0x03, 0x09, 0x09, 0x09,
-0x06, 0x04, 0x05, 0x01, 0x01, 0x09, 0x05, 0x0a,
-0x01, 0x01, 0x02, 0x08, 0x02, 0xe5, 0xe6, 0x01,
-0x11, 0xe5, 0x31, 0x14, 0x10, 0x0a, 0x02, 0xe8,
-0x0c, 0x03, 0xe6, 0x02, 0x03, 0x05, 0x03, 0x05,
-0x03, 0x02, 0x02, 0x03, 0x02, 0x04, 0x03, 0x01,
-0x03, 0x03, 0x05, 0x0d, 0xe5, 0x06, 0x0b, 0x01,
-0x01, 0x11, 0x0c, 0x01, 0x04, 0x02, 0x01, 0x04,
-0x02, 0x09, 0x0b, 0x01, 0x07, 0x01, 0x07, 0x09,
-0x13, 0xe6, 0xe6, 0x0a, 0x02, 0x06, 0x02, 0x03,
-0x02, 0x02, 0x04, 0xe6, 0x01, 0x05, 0xe5, 0x01,
-0x03, 0x07, 0x03, 0x02, 0x02, 0x05, 0xe5, 0x01,
-0x03, 0x02, 0x02, 0x03, 0xe5, 0xe5, 0x01, 0x06,
-0x04, 0x01, 0x01, 0xe5, 0xe5, 0x01, 0x08, 0xe5,
-0x07, 0xe5, 0x07, 0xe5, 0x08, 0x08, 0xe5, 0x08,
-0x0a, 0xe5, 0x05, 0x09, 0x02, 0x09, 0x05, 0xe5,
-0x01, 0x07, 0xe5, 0xe6, 0x08, 0x05, 0x03, 0x05,
-0x03, 0x05, 0x05, 0x03, 0x03, 0x05, 0x03, 0x07,
-0x03, 0x05, 0x09, 0x03, 0x0a, 0x08, 0x0d, 0xe5,
-0x5e, 0x06, 0x07, 0x0b, 0xe8, 0x10, 0x01, 0x07,
-0x09, 0x01, 0x07, 0x01, 0x07, 0x0b, 0x09, 0x09,
-0x08, 0x03, 0x06, 0x0c, 0xe8, 0x09, 0x54, 0x01,
-0x0d, 0x02, 0x07, 0x01, 0x01, 0x15, 0xe5, 0x05,
-0xe7, 0x05, 0xe7, 0x07, 0xe5, 0x06, 0xe6, 0x08,
-0xe6, 0x05, 0xe7, 0x06, 0xe7, 0xe5, 0x02, 0xe7,
-0x05, 0xe7, 0x0a, 0x10, 0xe5, 0x07, 0x09, 0x33,
-0x06, 0x0b, 0x0f, 0xe7, 0x19, 0x05, 0x03, 0x02,
-0x02, 0x13, 0x0b, 0x09, 0x03, 0x05, 0x06, 0x02,
-0xe5, 0x07, 0x08, 0x02, 0xe5, 0x1b, 0xe6, 0x07,
-0xe5, 0x11, 0xe5, 0x01, 0x07, 0xe5, 0x06, 0xe6,
-0x07, 0xe5, 0xe5, 0xe5, 0x03, 0xe5, 0x02, 0x03,
-0xe6, 0x0a, 0xe5, 0x02, 0x0e, 0x09, 0xe5, 0xe6,
-0x04, 0xe8, 0x04, 0x09, 0xe5, 0xe6, 0x06, 0xe5,
-0xe6, 0x04, 0xe5, 0xe6, 0x04, 0xe5, 0xe7, 0xe6,
-0x01, 0x01, 0xe6, 0x03, 0xe8, 0x06, 0x01, 0x01,
-0x0e, 0x01, 0x03, 0x03, 0x01, 0x07, 0x01, 0x07,
-0x01, 0xe5, 0x05, 0x01, 0x09, 0x01, 0x07, 0x01,
-0x07, 0x01, 0x01, 0x08, 0x08, 0x01, 0x0a, 0xe9,
-0x10, 0x01, 0x01, 0x05, 0x01, 0xe5, 0x05, 0x01,
-0xe6, 0x04, 0x01, 0xe6, 0x04, 0x01, 0x01, 0x02,
-0x03, 0xe5, 0xe5, 0xe5, 0x03, 0xe5, 0xe5, 0x06,
-0x01, 0x02, 0x04, 0x01, 0x07, 0x01, 0xe5, 0x08,
-0x01, 0xe6, 0x0e, 0xe5, 0x02, 0x0e, 0xe5, 0x07,
-0xe5, 0x07, 0xe5, 0xe5, 0x0d, 0x09, 0xe5, 0x06,
-0x04, 0xe5, 0x05, 0x01, 0xe5, 0x0c, 0xe6, 0xe6,
-0x1e, 0x07, 0x15, 0x07, 0x09, 0xe5, 0x0d, 0xe5,
-0xe5, 0xe5, 0x01, 0x01, 0x09, 0x04, 0xe6, 0xe6,
-0x04, 0x02, 0x04, 0x01, 0x02, 0x09, 0x04, 0x01,
-0x02, 0x04, 0x01, 0x07, 0x01, 0x04, 0x02, 0x08,
-0x0b, 0x06, 0x0e, 0x10, 0xe5, 0xe6, 0x0b, 0x01,
-0x07, 0x01, 0x03, 0xe5, 0x01, 0x01, 0x07, 0x01,
-0x07, 0x01, 0x02, 0x05, 0x09, 0x17, 0x04, 0x03,
-0x03, 0x09, 0xe7, 0xe5, 0x0d, 0x01, 0x07, 0x01,
-0x07, 0x01, 0x04, 0x02, 0x01, 0x07, 0x01, 0x04,
-0x01, 0x0a, 0x07, 0x06, 0x01, 0x02, 0x0a, 0x13,
-0xe6, 0x0d, 0x03, 0x05, 0x09, 0x03, 0x05, 0x09,
-0x03, 0x03, 0x03, 0x02, 0x05, 0xe5, 0x02, 0x04,
-0xe5, 0x07, 0xe5, 0x01, 0x03, 0x02, 0x0d, 0x01,
-0x02, 0x0d, 0x02, 0x02, 0x03, 0x09, 0x02, 0x06,
-0x04, 0x04, 0x02, 0xe5, 0x04, 0x01, 0x05, 0x03,
-0x01, 0xe5, 0x05, 0x01, 0x07, 0x01, 0x08, 0x0c,
-0x06, 0x06, 0x02, 0x05, 0xe6, 0x06, 0xe6, 0x06,
-0xe5, 0x07, 0xe5, 0x07, 0xe5, 0xe5, 0x03, 0xe5,
-0x01, 0xe5, 0xe5, 0xe5, 0x06, 0x09, 0x01, 0xe5,
-0x17, 0x03, 0x01, 0xe6, 0x09, 0x02, 0xe5, 0x07,
-0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07,
-0x01, 0xe6, 0x07, 0x11, 0xe5, 0xe5, 0x09, 0x02,
-0x0e, 0x0b, 0x04, 0x01, 0x03, 0x03, 0x09, 0x01,
-0x07, 0x04, 0x04, 0x02, 0xe5, 0xe6, 0x03, 0x07,
-0x18, 0xe5, 0x13, 0xe5, 0xe6, 0x0c, 0xe5, 0x03,
-0x03, 0xe5, 0x07, 0xe5, 0x02, 0x04, 0xe5, 0x07,
-0xe5, 0x0a, 0x03, 0xe5, 0x01, 0x01, 0x07, 0x01,
-0xe5, 0x03, 0xe5, 0x09, 0x01, 0x0a, 0x02, 0x03,
-0xe5, 0x0c, 0xe6, 0x06, 0xe6, 0x01, 0x04, 0xe6,
-0x06, 0xe7, 0xe5, 0x03, 0xe6, 0x01, 0x05, 0x02,
-0x09, 0x05, 0x03, 0x07, 0x01, 0x02, 0x06, 0x0a,
-0x03, 0xe5, 0xe6, 0xe5, 0x06, 0x1c, 0x1a, 0xe5,
-0x02, 0x05, 0x0a, 0x12, 0x02, 0x0c, 0xe5, 0x01,
-0x01, 0x1b, 0xe5, 0x04, 0x03, 0x01, 0x06, 0xe5,
-0x10, 0xe5, 0x01, 0xe5, 0x03, 0xe5, 0x12, 0xe5,
-0x06, 0xe5, 0x07, 0x01, 0x03, 0xe9, 0xe5, 0x17,
-0xe5, 0x08, 0xe5, 0x06, 0xe5, 0x08, 0xe5, 0x09,
-0xe5, 0x17, 0x03, 0x01, 0x0e, 0x01, 0x01, 0x02,
-0x02, 0x01, 0x04, 0xe5, 0x02, 0x04, 0xe5, 0x02,
-0x09, 0x09, 0x09, 0x04, 0xe5, 0x04, 0x01, 0xe5,
-0x05, 0x01, 0xe5, 0x05, 0x01, 0x08, 0xe5, 0x01,
-0xe5, 0x05, 0xe5, 0x07, 0xe5, 0x01, 0x01, 0xe5,
-0x01, 0x1b, 0x09, 0xe5, 0x07, 0x14, 0xe5, 0x05,
-0x01, 0xe5, 0x04, 0x02, 0xe5, 0x01, 0x06, 0x0d,
-0x02, 0x01, 0xe5, 0x02, 0xe5, 0xe5, 0x06, 0x01,
-0x05, 0xe5, 0x01, 0x05, 0x02, 0x10, 0xe5, 0xe6,
-0x04, 0x01, 0x01, 0x06, 0x01, 0x02, 0x0f, 0xe5,
-0x01, 0xe5, 0x02, 0xe5, 0x01, 0x08, 0x01, 0x06,
-0xe5, 0xe7, 0x01, 0x06, 0x02, 0x05, 0x01, 0x01,
-0x05, 0x03, 0x07, 0x01, 0x05, 0x01, 0x01, 0x05,
-0x0d, 0x01, 0x0f, 0x04, 0x04, 0x08, 0x01, 0x02,
-0x04, 0xe6, 0x01, 0xe6, 0x01, 0x0b, 0x09, 0x06,
-0x02, 0x09, 0x09, 0x0b, 0x05, 0x03, 0x09, 0x0a,
-0x02, 0x06, 0x08, 0x02, 0x02, 0xe6, 0xe5, 0x12,
-0xe5, 0x11, 0xe5, 0x1d, 0xe6, 0x14, 0x04, 0xe6,
-0x01, 0x0f, 0x03, 0xe6, 0x07, 0x05, 0x03, 0x02,
-0x02, 0x03, 0x05, 0x03, 0xe5, 0x03, 0x03, 0x02,
-0x02, 0x03, 0x02, 0x04, 0x03, 0xe5, 0x03, 0x03,
-0x05, 0x03, 0x08, 0xe5, 0x01, 0x12, 0xe5, 0xe5,
-0xe5, 0x07, 0x01, 0x07, 0xe5, 0x07, 0x01, 0x04,
-0x16, 0x08, 0x02, 0xe5, 0x04, 0x02, 0x01, 0x07,
-0x01, 0x07, 0xe5, 0x07, 0x09, 0xe5, 0x01, 0xe5,
-0x09, 0xe5, 0x01, 0x06, 0x02, 0x03, 0x02, 0x02,
-0x06, 0x02, 0x06, 0x02, 0x03, 0x07, 0x06, 0x02,
-0x03, 0x05, 0x03, 0xe5, 0xe5, 0x01, 0x04, 0x01,
-0x02, 0x05, 0xe5, 0x05, 0x01, 0xe5, 0xe5, 0x0a,
-0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07, 0x09, 0xe5,
-0x08, 0x0a, 0xe5, 0x08, 0x09, 0x05, 0x03, 0x06,
-0x02, 0x07, 0xe8, 0x08, 0x05, 0x03, 0x05, 0x03,
-0x05, 0x09, 0x03, 0x05, 0x05, 0x05, 0x03, 0x05,
-0x03, 0x05, 0x04, 0x09, 0x0a, 0x08, 0xe5, 0xe6,
-0x5b, 0x07, 0x17, 0xe6, 0x01, 0x0e, 0x09, 0x09,
-0x01, 0x07, 0x09, 0x0b, 0x01, 0x07, 0x01, 0x07,
-0x05, 0x03, 0x04, 0xe5, 0x01, 0x0e, 0xe5, 0xe6,
-0x1c, 0x1c, 0xe5, 0x1e, 0x04, 0x09, 0x0e, 0x01,
-0xe6, 0x08, 0x0b, 0xe5, 0x05, 0x01, 0xe5, 0x05,
-0x01, 0xe5, 0x07, 0xe5, 0x05, 0x01, 0xe5, 0x07,
-0xe7, 0x05, 0xe7, 0x05, 0x01, 0xe6, 0x04, 0x01,
-0xe6, 0x04, 0xe7, 0x06, 0x02, 0xe5, 0xe5, 0x0d,
-0xe5, 0x07, 0x29, 0x09, 0x09, 0x08, 0x09, 0x0e,
-0x03, 0x20, 0x09, 0x13, 0x05, 0x05, 0x03, 0x05,
-0x09, 0x09, 0xe5, 0x07, 0x09, 0xe6, 0x19, 0x02,
-0x01, 0x07, 0x01, 0x11, 0x01, 0x02, 0x06, 0xe6,
-0x06, 0xe6, 0x03, 0x02, 0x01, 0x07, 0x01, 0x03,
-0x03, 0xe6, 0x07, 0xe5, 0xe6, 0x11, 0x09, 0xe8,
-0x04, 0x01, 0xe6, 0x04, 0x09, 0xe8, 0x06, 0xe5,
-0xe6, 0x04, 0xe5, 0xe6, 0x04, 0xe8, 0x04, 0xe9,
-0x04, 0x01, 0xe5, 0x06, 0x03, 0xe5, 0x0b, 0xe5,
-0xe5, 0x05, 0xe5, 0xe5, 0x05, 0xe5, 0xe5, 0x05,
-0xe5, 0xe5, 0x05, 0xe5, 0xe5, 0x07, 0xe5, 0xe5,
-0x05, 0xe5, 0xe6, 0x04, 0x02, 0x06, 0x02, 0x01,
-0x14, 0xe9, 0x05, 0x0a, 0x01, 0xe5, 0x05, 0x01,
-0xe5, 0x05, 0x01, 0xe6, 0x04, 0x01, 0x01, 0x05,
-0x01, 0xe6, 0x01, 0x04, 0x01, 0x01, 0x05, 0x01,
-0xe6, 0x01, 0x02, 0x01, 0x01, 0x05, 0x01, 0x01,
-0x05, 0x01, 0x02, 0x07, 0xe8, 0x02, 0x05, 0x04,
-0x07, 0x01, 0xe5, 0x07, 0x03, 0x02, 0x02, 0x09,
-0x04, 0x01, 0x04, 0x04, 0xe5, 0x02, 0xe6, 0x02,
-0x02, 0x02, 0x03, 0x02, 0xe5, 0x01, 0x1a, 0xe5,
-0x1a, 0x02, 0x06, 0x0a, 0x02, 0x16, 0x08, 0xe5,
-0x06, 0x04, 0x02, 0x02, 0x0d, 0xe5, 0xe5, 0x01,
-0xe6, 0x12, 0x04, 0x1b, 0x04, 0x05, 0x0a, 0x02,
-0x02, 0x07, 0x0b, 0x15, 0xe5, 0x01, 0xe5, 0x0b,
-0xe6, 0x03, 0x02, 0xe6, 0x03, 0x02, 0xe6, 0x03,
-0x02, 0xe7, 0x05, 0xe6, 0x02, 0x08, 0x09, 0x06,
-0xe6, 0x01, 0x02, 0x03, 0x09, 0xe5, 0x01, 0x09,
-0x04, 0x09, 0x03, 0x09, 0x09, 0x09, 0x09, 0x03,
-0x03, 0x01, 0xe5, 0x07, 0x0b, 0x19, 0x0c, 0xe7,
-0x08, 0x08, 0x06, 0xe6, 0x0c, 0x01, 0xe6, 0x04,
-0x0a, 0xe5, 0x05, 0xe5, 0x03, 0x02, 0x0a, 0x03,
-0x05, 0x03, 0x05, 0x09, 0x04, 0x10, 0x13, 0x06,
-0x02, 0x09, 0x02, 0x03, 0x04, 0x04, 0x04, 0x09,
-0x0f, 0x12, 0x02, 0x01, 0x04, 0x15, 0x02, 0x08,
-0x02, 0x04, 0x0e, 0x08, 0x05, 0x28, 0x04, 0x01,
-0x03, 0x19, 0x20, 0xe6, 0x08, 0x06, 0x10, 0x19,
-0x01, 0x06, 0x01, 0x1d, 0x15, 0x02, 0x0a, 0x08,
-0x06, 0x01, 0xe6, 0x06, 0x07, 0x0b, 0x02, 0xe7,
-0xe5, 0x05, 0x09, 0x01, 0x11, 0x04, 0xe5, 0x02,
-0x04, 0xe5, 0x04, 0x01, 0x08, 0x07, 0x08, 0xe5,
-0x05, 0x16, 0x01, 0x02, 0x19, 0x10, 0x01, 0x0a,
-0x08, 0x0d, 0x0a, 0x0b, 0x0a, 0x09, 0x01, 0x01,
-0x19, 0x0e, 0x07, 0x04, 0xe5, 0x1a, 0x28, 0x02,
-0x01, 0x26, 0xe5, 0x04, 0x11, 0x02, 0xe5, 0x01,
-0xe5, 0xe5, 0x08, 0x02, 0xe5, 0x07, 0xe5, 0x13,
-0x01, 0xe5, 0xe9, 0xe5, 0x1b, 0xe5, 0x12, 0xe5,
-0x03, 0x01, 0x02, 0x03, 0x01, 0xe5, 0x01, 0xe6,
-0x03, 0x01, 0xe5, 0x0c, 0x11, 0x01, 0x01, 0xe5,
-0xe5, 0xe5, 0x01, 0x01, 0x12, 0x01, 0x09, 0x02,
-0x01, 0xe5, 0xe5, 0xe7, 0x01, 0xe5, 0x03, 0x08,
-0x06, 0x01, 0xe5, 0x01, 0x01, 0x04, 0x03, 0x16,
-0x01, 0x02, 0x01, 0xe5, 0xe6, 0x01, 0x02, 0x11,
-0xe5, 0xe5, 0xe5, 0x06, 0x06, 0xe5, 0xe5, 0xe5,
-0x02, 0xe5, 0x05, 0x07, 0x0b, 0x07, 0x19, 0xe5,
-0x05, 0x02, 0xe6, 0xe6, 0xe5, 0x01, 0x03, 0x02,
-0x16, 0x09, 0x01, 0x01, 0x02, 0x02, 0x09, 0x09,
-0x01, 0x01, 0xe5, 0x03, 0x23, 0xe5, 0x01, 0xe5,
-0x01, 0x06, 0x02, 0x0e, 0x05, 0x03, 0x0c, 0x01,
-0x02, 0x01, 0x07, 0x03, 0x05, 0x01, 0x01, 0x05,
-0x03, 0x1d, 0xe5, 0x02, 0x01, 0x02, 0x14, 0x01,
-0x09, 0x07, 0x04, 0x01, 0x0e, 0x04, 0x04, 0x03,
-0xe5, 0xe5, 0xe6, 0x03, 0x19, 0x02, 0x02, 0x03,
-0x17, 0x01, 0x07, 0x09, 0x04, 0x01, 0xe5, 0x0c,
-0x09, 0x01, 0x04, 0x01, 0xe5, 0x25, 0x01, 0xe5,
-0x03, 0x03, 0x26, 0xe5, 0xe5, 0x05, 0x0c, 0x08,
-0x0a, 0xe5, 0x1b, 0x02, 0xe6, 0x09, 0x01, 0x22,
-0x02, 0x01, 0x13, 0x01, 0x04, 0x02, 0xe5, 0x11,
-0xe5, 0x12, 0xe5, 0xe6, 0x07, 0x05, 0x09, 0x09,
-0x09, 0x03, 0x05, 0x0b, 0x03, 0x05, 0x09, 0x09,
-0x09, 0x06, 0x06, 0x03, 0xe5, 0x29, 0x05, 0x03,
-0x05, 0x0f, 0x05, 0x20, 0x0b, 0xe5, 0x27, 0x09,
-0x14, 0x07, 0x2b, 0xe7, 0x15, 0x02, 0x16, 0x10,
-0x01, 0x04, 0x02, 0x09, 0x01, 0x07, 0x01, 0x18,
-0x03, 0x19, 0xe5, 0x0c, 0x02, 0x01, 0x01, 0x01,
-0x06, 0xe5, 0x03, 0x02, 0x01, 0xe5, 0x07, 0xe6,
-0x04, 0x01, 0xe5, 0x04, 0xe5, 0xe6, 0x16, 0x03,
-0xe5, 0x17, 0x22, 0x0b, 0x02, 0x2e, 0xe5, 0x01,
-0x15, 0xe5, 0x01, 0x03, 0xe5, 0xe5, 0x05, 0x02,
-0xe5, 0xe5, 0x04, 0xe5, 0x07, 0x0a, 0xe7, 0xe5,
-0x04, 0xe5, 0x06, 0xe6, 0x07, 0xe5, 0x07, 0xe5,
-0x06, 0x03, 0x04, 0x14, 0x03, 0x23, 0x01, 0x04,
-0x0c, 0x01, 0xe6, 0x04, 0x01, 0x1b, 0xe5, 0x18,
-0x06, 0x09, 0xe5, 0xe5, 0x0f, 0x02, 0x01, 0x06,
-0x09, 0xe5, 0xe5, 0x05, 0xe5, 0xe5, 0x18, 0x02,
-0x19, 0x04, 0xe6, 0x05, 0x01, 0xe5, 0x09, 0x0a,
-0x09, 0x09, 0x07, 0x01, 0x1b, 0x01, 0x01, 0x19,
-0x04, 0x08, 0xe5, 0x01, 0x04, 0x09, 0x01, 0x07,
-0x0b, 0x01, 0x05, 0x21, 0x01, 0x01, 0xe5, 0x0f,
-0x19, 0xe5, 0xe5, 0x11, 0x01, 0xe6, 0x04, 0x01,
-0xe5, 0xe5, 0x03, 0xe5, 0xe5, 0xe5, 0x1d, 0x01,
-0xe7, 0x05, 0x0a, 0x01, 0x02, 0x04, 0x01, 0x07,
-0x01, 0xe5, 0x02, 0x01, 0xe5, 0xe6, 0xe5, 0x03,
-0x01, 0x01, 0x02, 0x01, 0x02, 0x01, 0xe5, 0x01,
-0x03, 0x01, 0x07, 0x01, 0x01, 0x05, 0x01, 0x07,
-0x01, 0x0b, 0x01, 0xe5, 0x08, 0x20, 0x09, 0x02,
-0xe6, 0xe6, 0x05, 0x03, 0x0e, 0x0a, 0xe5, 0x01,
-0x16, 0xe7, 0x1d, 0x08, 0x07, 0x04, 0x01, 0x03,
-0x02, 0x05, 0x02, 0x06, 0x05, 0x0b, 0x07, 0x07,
-0x08, 0xe5, 0x01, 0xe5, 0x11, 0x16, 0x0f, 0xe5,
-0x03, 0xe5, 0xe5, 0x01, 0x04, 0x03, 0x04, 0x05,
-0x06, 0x19, 0xe6, 0xe7, 0x05, 0xe5, 0x05, 0x09,
-0x03, 0x09, 0x04, 0x02, 0x01, 0x02, 0x01, 0x10,
-0x02, 0x01, 0x04, 0x01, 0x03, 0x20, 0x02, 0xe6,
-0x10, 0x18, 0xe5, 0x03, 0x04, 0x01, 0x05, 0x01,
-0x09, 0x04, 0x14, 0x16, 0xe5, 0x01, 0xe5, 0x12,
-0x0b, 0x04, 0x07, 0x0e, 0x02, 0xe5, 0x02, 0x06,
-0x05, 0x26, 0xe6, 0xe7, 0x12, 0xe5, 0x04, 0x0f,
-0x03, 0x0b, 0x04, 0x0e, 0x0f, 0x03, 0x18, 0x01,
-0xe5, 0x1a, 0xe5, 0x10, 0x05, 0x0a, 0x11, 0x14,
-0x14, 0xe5, 0xe5, 0x16, 0xe6, 0x02, 0x02, 0xe7,
-0x02, 0x03, 0xe6, 0x06, 0xe6, 0xe6, 0x03, 0xe5,
-0x08, 0xe7, 0xe5, 0x29, 0x03, 0x02, 0x10, 0x06,
-0x03, 0x05, 0x03, 0x01, 0x02, 0x0a, 0x03, 0x02,
-0x07, 0xe5, 0x04, 0x0a, 0x20, 0x01, 0x01, 0xe5,
-0x14, 0x17, 0x02, 0xe5, 0x19, 0x01, 0xe5, 0xe5,
-0xe5, 0x02, 0x03, 0x06, 0x0d, 0x07, 0xe6, 0x01,
-0x2e, 0x03, 0x02, 0x01, 0x03, 0x02, 0x01, 0x0b,
-0xe5, 0x09, 0x01, 0x1f, 0x01, 0xe6, 0x12, 0x0c,
-0x0e, 0x17, 0x05, 0x0d, 0x09, 0x14, 0x02, 0xe5,
-0xe5, 0x01, 0x0b, 0xe5, 0xe6, 0x05, 0x02, 0xe5,
-0x10, 0xe5, 0x01, 0x0e, 0xe8, 0x05, 0xe5, 0xe6,
-0xe5, 0x01, 0xe5, 0x1d, 0x02, 0x01, 0xe5, 0x01,
-0x0e, 0x01, 0xe5, 0x04, 0x03, 0x01, 0x0c, 0x03,
-0xe5, 0x01, 0x0b, 0xe5, 0x01, 0x01, 0xe5, 0x05,
-0xe5, 0x03, 0x03, 0x1b, 0x01, 0x01, 0xe5, 0xe5,
-0xe5, 0x03, 0x15, 0x12, 0x07, 0x0b, 0x01, 0x04,
-0xe5, 0x03, 0x06, 0x1a, 0x01, 0x02, 0x01, 0xe5,
-0xe6, 0xe7, 0xe5, 0x16, 0x10, 0x01, 0x07, 0x05,
-0xe5, 0x03, 0x01, 0x04, 0xe5, 0xe5, 0x01, 0x06,
-0x1a, 0xe5, 0x04, 0x02, 0x01, 0x01, 0xe5, 0xe5,
-0x18, 0x09, 0x04, 0x04, 0x04, 0x04, 0x08, 0x0c,
-0x04, 0x23, 0xe6, 0xe7, 0xe5, 0x01, 0x25, 0x04,
-0x04, 0x03, 0x07, 0x03, 0x01, 0x02, 0x04, 0x04,
-0xe5, 0x02, 0x1d, 0xe5, 0xe6, 0x01, 0x02, 0x18,
-0x02, 0x06, 0x02, 0x02, 0x01, 0x04, 0x02, 0x06,
-0x01, 0x02, 0x01, 0x03, 0xe5, 0x08, 0xe7, 0x20,
-0x06, 0xe5, 0x1a, 0x01, 0xe5, 0x05, 0xe7, 0xe5,
-0x03, 0x01, 0xe7, 0x02, 0xe7, 0x03, 0x01, 0x04,
-0x02, 0x03, 0xe5, 0xe5, 0x01, 0x25, 0x01, 0xe5,
-0x04, 0x14, 0x01, 0xe5, 0xe6, 0x02, 0x01, 0x09,
-0x07, 0x01, 0x0c, 0x01, 0xe5, 0x02, 0x01, 0x02,
-0x25, 0x01, 0x02, 0x01, 0x18, 0xe5, 0x07, 0xe5,
-0x11, 0xe5, 0x13, 0xe5, 0x01, 0x27, 0x02, 0xe6,
-0x0d, 0x09, 0xe6, 0x06, 0xe6, 0x06, 0x09, 0xe5,
-0x04, 0x04, 0x09, 0xe5, 0x01, 0x05, 0x02, 0x01,
-0x01, 0x02, 0x09, 0x0d, 0xe9, 0x01, 0x19, 0x09,
-0x09, 0x09, 0xe5, 0x01, 0x11, 0x2a, 0x02, 0x39,
-0x01, 0x13, 0x2b, 0x02, 0x17, 0x01, 0xe7, 0x06,
-0x01, 0x09, 0x06, 0xe7, 0x02, 0x02, 0x01, 0x04,
-0x05, 0xe6, 0xe5, 0xe6, 0xe5, 0x08, 0x18, 0xe8,
-0x16, 0x01, 0xe6, 0x08, 0x09, 0x04, 0x02, 0xe6,
-0x01, 0x04, 0x01, 0xe5, 0x04, 0x02, 0xe6, 0x04,
-0x01, 0xe5, 0x05, 0x02, 0x17, 0xe8, 0x15, 0x04,
-0x0c, 0x0e, 0x09, 0x01, 0x04, 0x04, 0x01, 0x05,
-0x01, 0x06, 0x02, 0x18, 0xe6, 0xe5, 0x14, 0xe5,
-0x05, 0xe6, 0x06, 0xe6, 0x08, 0xe5, 0x01, 0xe5,
-0x02, 0xe5, 0x02, 0x01, 0x04, 0xe5, 0x02, 0x04,
-0xe5, 0xe5, 0xe5, 0x03, 0xe5, 0xe5, 0x06, 0xe5,
-0x07, 0xe5, 0x0a, 0x17, 0x01, 0xe5, 0x03, 0x09,
-0x01, 0x01, 0x09, 0xe5, 0x07, 0x01, 0xe6, 0x06,
-0xe5, 0x11, 0x18, 0xe5, 0x01, 0x17, 0x01, 0x03,
-0x02, 0x06, 0x02, 0xe5, 0xe5, 0x08, 0x06, 0x02,
-0x01, 0x06, 0x02, 0xe5, 0x04, 0x09, 0xe5, 0x19,
-0xe8, 0x19, 0x03, 0xe5, 0x07, 0xe5, 0xe5, 0xe5,
-0x08, 0xe5, 0x02, 0x03, 0x02, 0x04, 0x04, 0x04,
-0x09, 0x04, 0x17, 0xe9, 0x1b, 0xe5, 0x07, 0xe5,
-0x02, 0x01, 0x02, 0x06, 0x02, 0x06, 0x02, 0x03,
-0x04, 0x02, 0x07, 0x03, 0x02, 0x1a, 0xe9, 0x09,
-0x09, 0x09, 0x08, 0x05, 0xe5, 0x07, 0x0c, 0x05,
-0x02, 0x06, 0x24, 0x03, 0x0b, 0x05, 0x01, 0x06,
-0xe5, 0xe5, 0x06, 0xe6, 0xe5, 0x04, 0x01, 0xe5,
-0x05, 0x01, 0x04, 0x04, 0xe7, 0x01, 0x03, 0x01,
-0xe6, 0x04, 0x01, 0x07, 0x01, 0xe5, 0xe5, 0x03,
-0x01, 0x0a, 0xe8, 0x0e, 0xe5, 0x09, 0x07, 0xe5,
-0x05, 0x08, 0xe5, 0xe5, 0x02, 0x08, 0xe6, 0xe5,
-0xe6, 0xe6, 0x01, 0x04, 0xe5, 0x0c, 0x0a, 0x06,
-0x02, 0x01, 0xe7, 0x13, 0x07, 0xe5, 0x01, 0x01,
-0x06, 0x0c, 0xe5, 0x03, 0x03, 0x03, 0x05, 0x12,
-0x1a, 0x01, 0x02, 0x0d, 0x01, 0x03, 0x09, 0x02,
-0x04, 0x01, 0xe5, 0xe5, 0x08, 0x09, 0xe5, 0x05,
-0x03, 0x01, 0x07, 0x01, 0x0d, 0x0f, 0xe5, 0x03,
-0x03, 0x03, 0xe5, 0x18, 0x0e, 0x12, 0xe7, 0x06,
-0x01, 0x09, 0x03, 0x19, 0x05, 0x02, 0xe5, 0x06,
-0x09, 0x09, 0xe5, 0x07, 0x02, 0x01, 0x05, 0x01,
-0x0b, 0x01, 0x07, 0x03, 0x01, 0x03, 0x01, 0x0f,
-0x10, 0x02, 0xe5, 0xe8, 0x08, 0x01, 0x06, 0x12,
-0x06, 0x09, 0x03, 0xe5, 0x01, 0x03, 0x03, 0x03,
-0xe6, 0x08, 0x06, 0x10, 0x01, 0x07, 0xe5, 0xe8,
-0xe5, 0x0c, 0x0f, 0x0b, 0x02, 0xe5, 0x04, 0x04,
-0x03, 0xe5, 0x02, 0x03, 0x02, 0x02, 0x01, 0x04,
-0x06, 0x0b, 0x10, 0x01, 0xe5, 0xe5, 0x11, 0x01,
-0x06, 0x14, 0x08, 0x02, 0x01, 0xe5, 0x03, 0xe5,
-0xe5, 0x01, 0x02, 0x04, 0x02, 0x02, 0x01, 0x1f,
-0x03, 0xe5, 0x0a, 0x09, 0x09, 0xe7, 0x02, 0x0d,
-0xe6, 0x06, 0xe6, 0x03, 0x05, 0x04, 0x27, 0xe7,
-0xe5, 0xe5, 0x06, 0x1a, 0x03, 0x0e, 0x07, 0x01,
-0x0a, 0x23, 0x0b, 0xe7, 0xe6, 0x11, 0x02, 0x0a,
-0xe5, 0xe5, 0x01, 0x02, 0x01, 0x07, 0x03, 0xe5,
-0x05, 0x0d, 0x02, 0x02, 0x05, 0x1b, 0x02, 0x01,
-0x03, 0x0f, 0x09, 0xe5, 0x06, 0x05, 0xe5, 0xe7,
-0x01, 0x01, 0xe6, 0xe5, 0x04, 0xe7, 0x05, 0x02,
-0xe5, 0x06, 0xe5, 0x04, 0x1d, 0x02, 0x17, 0x0d,
-0x06, 0x02, 0x06, 0x16, 0x09, 0x24, 0x01, 0x01,
-0x11, 0xe5, 0x08, 0x01, 0x0d, 0xe5, 0x04, 0x02,
-0xe5, 0x0b, 0x08, 0x05, 0x02, 0xe6, 0x06, 0xe5,
-0x13, 0x01, 0xe6, 0xe5, 0x01, 0x01, 0x0e, 0xe5,
-0x08, 0xe5, 0xe6, 0x03, 0xe5, 0x0f, 0x15, 0x06,
-0xe6, 0x09, 0x11, 0x01, 0x01, 0x02, 0xe6, 0x03,
-0x15, 0x08, 0xe5, 0x09, 0x05, 0x06, 0x01, 0x04,
-0x11, 0x01, 0x02, 0x15, 0x01, 0x02, 0x01, 0xe5,
-0xe6, 0x01, 0x02, 0x17, 0x06, 0x03, 0x01, 0xe5,
-0x12, 0x1a, 0x18, 0xe5, 0x04, 0x03, 0xe5, 0xe6,
-0xe5, 0x18, 0x06, 0x02, 0x03, 0xe5, 0x08, 0x01,
-0x05, 0x03, 0x04, 0x01, 0x01, 0x06, 0x02, 0xe5,
-0xe6, 0x02, 0x01, 0x1a, 0xe5, 0xe5, 0xe5, 0x01,
-0x1e, 0x03, 0x02, 0xe6, 0x01, 0x01, 0x01, 0x02,
-0xe5, 0xe5, 0xe5, 0x06, 0x04, 0x04, 0x08, 0xe5,
-0xe6, 0x01, 0x02, 0x15, 0x02, 0xe5, 0x03, 0xe5,
-0x01, 0x18, 0x07, 0x04, 0x01, 0x0a, 0x01, 0x09,
-0x01, 0x02, 0x01, 0x01, 0x08, 0x01, 0x01, 0x0c,
-0x12, 0x02, 0xe8, 0x1b, 0xe6, 0x01, 0x03, 0xe5,
-0xe5, 0x0b, 0x01, 0x09, 0x04, 0x01, 0x01, 0xe5,
-0x08, 0x01, 0xe5, 0x22, 0x01, 0xe5, 0x07, 0x10,
-0x01, 0xe5, 0x01, 0x03, 0x01, 0x02, 0x07, 0x02,
-0x06, 0xe5, 0x08, 0xe5, 0x01, 0x06, 0xe5, 0x07,
-0x09, 0x02, 0x10, 0x04, 0x0a, 0x01, 0x0d, 0xe5,
-0x01, 0x05, 0xe5, 0x15, 0x0b, 0xe5, 0x04, 0x02,
-0xe5, 0x07, 0xe6, 0x1a, 0x01, 0xe8, 0x06, 0x05,
-0x09, 0xe6, 0xe5, 0x04, 0xe5, 0x02, 0x01, 0x02,
-0x02, 0x06, 0x02, 0xe5, 0x01, 0x04, 0x09, 0x09,
-0xe5, 0x02, 0x01, 0x02, 0x09, 0x0d, 0x01, 0x02,
-0x02, 0x19, 0x03, 0x04, 0xe5, 0x02, 0x09, 0x08,
-0xe5, 0x06, 0x09, 0x03, 0x09, 0x1f, 0x1f, 0x05,
-0x03, 0x09, 0x09, 0x13, 0x09, 0x1e, 0x01, 0x01,
-0x17, 0x01, 0xe5, 0xe5, 0x05, 0xe7, 0x02, 0x02,
-0x07, 0x01, 0x04, 0x09, 0x01, 0x01, 0xe5, 0x03,
-0x04, 0x02, 0x08, 0x07, 0x01, 0x0e, 0xe5, 0xe6,
-0x15, 0xe5, 0xe7, 0x01, 0x02, 0x02, 0xe5, 0x01,
-0x02, 0x01, 0xe5, 0x05, 0x01, 0xe5, 0x09, 0x01,
-0x05, 0x02, 0xe5, 0xe5, 0x01, 0xe5, 0xe6, 0x05,
-0x02, 0x06, 0x01, 0xe5, 0x0c, 0x01, 0x01, 0x08,
-0x0b, 0x02, 0x0b, 0xe5, 0x05, 0x01, 0x09, 0x04,
-0x06, 0x07, 0x09, 0x09, 0x09, 0x01, 0x10, 0x01,
-0x15, 0xe6, 0x04, 0xe8, 0x04, 0xe8, 0xe5, 0x04,
-0xe6, 0xe5, 0x03, 0xe5, 0x0a, 0x01, 0x07, 0x01,
-0x01, 0x05, 0x03, 0x05, 0xe6, 0xe5, 0x04, 0xe5,
-0x06, 0xe5, 0x01, 0x1a, 0x08, 0x09, 0xe5, 0x05,
-0x01, 0xe5, 0x09, 0x07, 0x01, 0x07, 0x0b, 0x1b,
-0xe5, 0x19, 0x02, 0x02, 0xe5, 0x05, 0x01, 0xe5,
-0xe5, 0x06, 0x01, 0xe5, 0x02, 0x01, 0x0b, 0xe5,
-0xe5, 0x05, 0xe5, 0xe5, 0x05, 0xe5, 0x19, 0x01,
-0x01, 0xe5, 0x15, 0x06, 0xe5, 0x02, 0x03, 0x01,
-0x01, 0x01, 0xe5, 0x07, 0x08, 0x02, 0x07, 0x09,
-0x09, 0x1b, 0xe7, 0x16, 0x04, 0xe5, 0xe7, 0x03,
-0x01, 0xe7, 0xe6, 0x05, 0x01, 0xe5, 0x02, 0x09,
-0x01, 0x02, 0x04, 0x04, 0x0b, 0x1a, 0x01, 0xe5,
-0x34, 0x01, 0x03, 0x04, 0x01, 0xe6, 0x01, 0xe5,
-0x03, 0xe5, 0x02, 0x01, 0x23, 0x01, 0x01, 0xe5,
-0x10, 0x01, 0x07, 0x01, 0xe5, 0x05, 0x01, 0x06,
-0xe5, 0xe6, 0x05, 0x01, 0x04, 0xe5, 0x02, 0x01,
-0x07, 0x01, 0x02, 0xe5, 0x02, 0x01, 0xe5, 0xe5,
-0x03, 0x01, 0xe6, 0x04, 0x01, 0x0a, 0x03, 0x16,
-0x02, 0xe5, 0x07, 0x06, 0x02, 0xe5, 0x04, 0x02,
-0xe5, 0x02, 0x08, 0x01, 0x03, 0x01, 0xe5, 0x08,
-0x02, 0x05, 0xe5, 0x01, 0x0a, 0x09, 0x01, 0x01,
-0xe5, 0x15, 0x01, 0x05, 0x0c, 0x09, 0xe5, 0xe5,
-0x01, 0x03, 0x06, 0x02, 0xe5, 0xe5, 0x02, 0xe5,
-0x01, 0x03, 0x01, 0x03, 0x08, 0x09, 0x06, 0xe5,
-0xe7, 0x04, 0x1d, 0x01, 0x07, 0x0a, 0xe5, 0x03,
-0xe5, 0x05, 0x03, 0x05, 0xe5, 0x01, 0x0c, 0x18,
-0xe9, 0x17, 0x05, 0x0a, 0x05, 0x09, 0x06, 0x06,
-0x04, 0x07, 0xe6, 0xe5, 0x0e, 0x0b, 0x05, 0xe5,
-0xe5, 0x15, 0xe5, 0x07, 0x0e, 0x01, 0x01, 0x0b,
-0x04, 0xe5, 0x02, 0x01, 0x05, 0xe6, 0xe5, 0x15,
-0x09, 0x02, 0x03, 0xe7, 0x17, 0x12, 0x0d, 0x03,
-0x0a, 0x09, 0x01, 0xe5, 0x02, 0x01, 0x1b, 0x01,
-0xe5, 0xe5, 0x11, 0x0d, 0x0a, 0xe6, 0x05, 0xe5,
-0x02, 0x05, 0xe5, 0x09, 0x01, 0x03, 0x06, 0x04,
-0x1b, 0x01, 0xe5, 0xe5, 0x1a, 0x0a, 0x0b, 0x01,
-0xe5, 0x05, 0x02, 0xe5, 0x04, 0xe6, 0x08, 0x09,
-0x14, 0x08, 0xe5, 0x01, 0x06, 0x11, 0x0c, 0x01,
-0x11, 0x04, 0xe5, 0x09, 0x05, 0x08, 0x1f, 0xe5,
-0xe7, 0x0a, 0x06, 0x03, 0x02, 0x06, 0x1e, 0x09,
-0x07, 0x0c, 0x04, 0x09, 0x0d, 0x02, 0xe5, 0x01,
-0x06, 0x09, 0x05, 0x03, 0x04, 0x06, 0x02, 0x10,
-0x06, 0x08, 0x03, 0x02, 0x01, 0x01, 0x07, 0x12,
-0x04, 0x04, 0x03, 0x18, 0x0d, 0x02, 0x0d, 0x04,
-0x05, 0x02, 0x03, 0x03, 0x05, 0x03, 0x05, 0x11,
-0x09, 0xe5, 0xe5, 0x1e, 0x05, 0x03, 0x01, 0x17,
-0x06, 0x09, 0x05, 0x02, 0xe5, 0x12, 0x07, 0x01,
-0x03, 0x06, 0x23, 0x06, 0x04, 0x0b, 0x10, 0x01,
-0x08, 0x11, 0x02, 0x02, 0xe5, 0xe6, 0x07, 0x07,
-0x14, 0x08, 0x06, 0x18, 0x09, 0x09, 0x09, 0x0e,
-0x02, 0xe6, 0x0a, 0x09, 0x09, 0x02, 0xe5, 0x1d,
-0xe5, 0x01, 0x01, 0x04, 0xe5, 0x24, 0xe6, 0xe9,
-0x01, 0x01, 0x08, 0x09, 0xe6, 0x06, 0xe6, 0xe5,
-0x1e, 0x02, 0x01, 0xe5, 0x2a, 0x01, 0x01, 0xe5,
-0xe5, 0x03, 0x08, 0x06, 0x01, 0x0a, 0x2c, 0xe5,
-0x26, 0x02, 0xe5, 0xe6, 0x01, 0x0a, 0x06, 0xe5,
-0x02, 0x04, 0x02, 0x01, 0x27, 0x06, 0xe5, 0x02,
-0x1c, 0x02, 0x01, 0xe6, 0xe6, 0x0c, 0x09, 0x01,
-0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0xe5, 0xe5,
-0x06, 0x01, 0x15, 0x01, 0xe5, 0xe5, 0xe5, 0x05,
-0x02, 0x19, 0xe6, 0xe7, 0x01, 0x0a, 0x03, 0x05,
-0x01, 0x02, 0x01, 0x01, 0xe5, 0xe5, 0xe5, 0x03,
-0xe5, 0xe5, 0xe5, 0x04, 0x01, 0x01, 0x16, 0x08,
-0x02, 0x01, 0x15, 0x02, 0x01, 0xe5, 0x02, 0xe5,
-0x03, 0xe5, 0x05, 0x0e, 0x04, 0x01, 0x03, 0xe6,
-0xe5, 0xe5, 0x06, 0x01, 0x15, 0x02, 0x0b, 0x1a,
-0x02, 0xe5, 0xe6, 0x05, 0x06, 0x0b, 0x07, 0x05,
-0xe5, 0x01, 0x01, 0x07, 0x01, 0x18, 0xe6, 0x07,
-0xe6, 0x18, 0x01, 0xe6, 0xe6, 0x12, 0x08, 0x0a,
-0x02, 0x25, 0x14, 0xe5, 0x0c, 0x02, 0x03, 0x02,
-0x0a, 0x09, 0x01, 0x11, 0xe5, 0x31, 0x09, 0xe5,
-0x12, 0x02, 0xe5, 0x09, 0x03, 0x05, 0xe5, 0x01,
-0x06, 0x02, 0x02, 0x06, 0x09, 0x0b, 0x09, 0x04,
-0x01, 0x02, 0x03, 0x05, 0x09, 0x0d, 0xe9, 0x01,
-0x12, 0x09, 0xe5, 0x2e, 0x03, 0x26, 0xe5, 0xe5,
-0x1e, 0x31, 0x2b, 0xe5, 0xe5, 0x0a, 0x01, 0x09,
-0x04, 0x02, 0x06, 0x1f, 0x07, 0x01, 0x0e, 0x1a,
-0x01, 0x0d, 0x01, 0xe5, 0x04, 0xe5, 0x01, 0xe5,
-0x07, 0x05, 0x03, 0x19, 0x06, 0x07, 0xe5, 0x04,
-0x02, 0xe5, 0x17, 0x02, 0x0c, 0x0c, 0x06, 0x3e,
-0x1a, 0x01, 0x01, 0x13, 0xe5, 0xe6, 0x04, 0xe6,
-0x06, 0xe6, 0x06, 0xe6, 0x08, 0xe5, 0x09, 0xe5,
-0x07, 0xe5, 0x07, 0xe6, 0x06, 0xe5, 0x07, 0xe5,
-0x06, 0x01, 0xe6, 0x13, 0x05, 0x04, 0x04, 0xe5,
-0x02, 0x01, 0x02, 0x03, 0xe5, 0x18, 0x0a, 0xe5,
-0x04, 0x1a, 0xe5, 0xe6, 0x15, 0x07, 0x01, 0x09,
-0xe5, 0x07, 0x18, 0x11, 0x1b, 0xe5, 0xe5, 0x12,
-0x01, 0xe5, 0x02, 0x02, 0x01, 0x07, 0xe6, 0xe5,
-0x01, 0x02, 0x01, 0x0c, 0x0c, 0x13, 0x18, 0x01,
-0xe6, 0x12, 0x06, 0x01, 0xe6, 0x04, 0x03, 0x02,
-0x02, 0x02, 0x1b, 0x02, 0x07, 0x08, 0x18, 0xe5,
-0x01, 0x0d, 0xe5, 0xe5, 0x05, 0x01, 0xe5, 0x02,
-0x02, 0x03, 0x0a, 0x02, 0x17, 0x02, 0x03, 0x05,
-0x0e, 0x11, 0x02, 0x01, 0x0a, 0x06, 0x01, 0xe5,
-0x01, 0x03, 0x01, 0x04, 0x02, 0x01, 0x07, 0x01,
-0x01, 0x05, 0x01, 0x02, 0x01, 0x04, 0x01, 0x01,
-0x05, 0x01, 0x07, 0x01, 0x02, 0x04, 0xe6, 0x06,
-0x01, 0x0b, 0x02, 0x09, 0x04, 0x0a, 0x09, 0xe5,
-0x01, 0x05, 0xe5, 0x13, 0xe5, 0x01, 0x03, 0xe5,
-0x01, 0x05, 0x05, 0x1e, 0x01, 0x01, 0xe5, 0xe5,
-0x01, 0x0b, 0x04, 0x05, 0x04, 0x01, 0x05, 0x03,
-0x12, 0xe5, 0xe5, 0x0b, 0x01, 0x06, 0x01, 0x1d,
-0x02, 0x01, 0x0b, 0x0d, 0x11, 0x0e, 0x04, 0x09,
-0x30, 0x03, 0xe5, 0x03, 0x02, 0x04, 0x01, 0x02,
-0x01, 0xe5, 0xe7, 0x04, 0x01, 0x01, 0x07, 0x01,
-0x0a, 0x0b, 0x08, 0x09, 0xe5, 0x05, 0x01, 0xe5,
-0x11, 0x05, 0x02, 0x02, 0x02, 0x09, 0x03, 0x04,
-0x0a, 0x0a, 0x02, 0x01, 0x07, 0x03, 0x11, 0x01,
-0x01, 0x05, 0x05, 0x0d, 0x06, 0x02, 0xe5, 0xe5,
-0xe6, 0x0b, 0x08, 0x06, 0xe8, 0xe5, 0x03, 0xe5,
-0xe5, 0xe5, 0x10, 0x04, 0x04, 0x01, 0x0a, 0xe5,
-0x01, 0x04, 0xe6, 0x16, 0x02, 0x01, 0x05, 0x0a,
-0x06, 0x02, 0x02, 0x04, 0x01, 0x15, 0x04, 0x05,
-0x04, 0x0a, 0x01, 0x21, 0x03, 0xe5, 0x05, 0x12,
-0x04, 0x07, 0x07, 0x10, 0x12, 0x27, 0xe8, 0x02,
-0x08, 0x0f, 0x16, 0x08, 0x02, 0x0a, 0x05, 0x03,
-0x07, 0x1c, 0xe6, 0xe6, 0xe5, 0x11, 0x1a, 0x01,
-0x02, 0x08, 0x01, 0x06, 0x1c, 0x16, 0xe5, 0xe6,
-0x08, 0xe5, 0x07, 0x0c, 0x02, 0xe5, 0x07, 0x09,
-0x10, 0x08, 0x05, 0xe5, 0x03, 0x01, 0x01, 0x17,
-0x01, 0xe7, 0x18, 0x08, 0xe5, 0x02, 0x05, 0x08,
-0xe5, 0x07, 0x16, 0x05, 0xe5, 0x01, 0x01, 0x18,
-0xe6, 0x18, 0x08, 0x08, 0xe5, 0x09, 0x17, 0x01,
-0x03, 0xe5, 0x08, 0x16, 0x03, 0x02, 0x03, 0x09,
-0x09, 0x13, 0x04, 0x20, 0xe5, 0x01, 0x02, 0x06,
-0x17, 0xe5, 0x01, 0x01, 0xe6, 0x0b, 0x0b, 0x02,
-0x0b, 0x01, 0xe7, 0x22, 0xe5, 0x02, 0x09, 0x14,
-0x01, 0x01, 0x03, 0xe5, 0x0c, 0x05, 0xe5, 0x0e,
-0x02, 0xe5, 0x04, 0x22, 0xe5, 0x03, 0x07, 0x0f,
-0xe5, 0x03, 0x01, 0x04, 0x01, 0xe5, 0xe5, 0x01,
-0x07, 0x19, 0xe5, 0x01, 0x01, 0xe5, 0x22, 0x04,
-0x04, 0xe5, 0xe5, 0x0e, 0xe5, 0x05, 0x02, 0x01,
-0x01, 0xe5, 0x0b, 0x12, 0xe5, 0x02, 0x05, 0x01,
-0x02, 0xe5, 0x01, 0x1e, 0x01, 0x02, 0x1f, 0xeb,
-0xe5, 0x09, 0x03, 0x09, 0x01, 0x01, 0xe6, 0x08,
-0x01, 0x04, 0x01, 0x20, 0x02, 0x06, 0x01, 0x01,
-0x01, 0x02, 0x0e, 0x05, 0xe6, 0x0b, 0x13, 0x09,
-0x01, 0x27, 0x01, 0x04, 0x04, 0x15, 0x04, 0xe7,
-0x0b, 0x13, 0x06, 0x01, 0xe5, 0xe5, 0xe5, 0x2b,
-0xe5, 0x02, 0x1a, 0xe6, 0x1c, 0x02, 0x05, 0xe5,
-0x07, 0xe5, 0x01, 0x06, 0x1c, 0x02, 0x01, 0xe5,
-0x05, 0x02, 0x0b, 0x04, 0xe5, 0x02, 0x0a, 0x13,
-0x06, 0x02, 0x01, 0x05, 0x01, 0x0b, 0x1d, 0x1d,
-0x01, 0xe7, 0x09, 0x03, 0x02, 0x06, 0x02, 0x02,
-0x03, 0x03, 0x05, 0xe5, 0xe5, 0xe7, 0x01, 0x0b,
-0x09, 0x04, 0x01, 0x02, 0x02, 0x01, 0xe6, 0x01,
-0x02, 0x06, 0x0d, 0x01, 0xe7, 0x15, 0x09, 0x05,
-0x03, 0x09, 0x1f, 0x09, 0x1b, 0xe8, 0x14, 0x09,
-0x08, 0x08, 0x20, 0x08, 0x1e, 0xe5, 0x01, 0x16,
-0xe5, 0xe5, 0x06, 0x01, 0x06, 0xe5, 0x07, 0x20,
-0x01, 0xe6, 0x04, 0x01, 0x19, 0x01, 0xe5, 0x01,
-0x14, 0x01, 0xe5, 0x05, 0x01, 0x01, 0x01, 0x06,
-0xe5, 0x07, 0x1c, 0x08, 0xe5, 0x01, 0x17, 0xe6,
-0xe6, 0x15, 0x01, 0x04, 0x40, 0x01, 0x18, 0xe8,
-0x14, 0xe5, 0x01, 0x05, 0xe5, 0x07, 0xe5, 0x07,
-0xe5, 0x07, 0xe5, 0x09, 0xe5, 0x07, 0xe6, 0x01,
-0x04, 0xe6, 0xe5, 0x04, 0xe5, 0x07, 0xe5, 0x06,
-0x02, 0xe5, 0x16, 0x01, 0x07, 0x01, 0x57, 0xe7,
-0x03, 0x12, 0x01, 0x07, 0x01, 0x13, 0x1f, 0x07,
-0x1c, 0xe6, 0x16, 0x01, 0x26, 0x14, 0x01, 0x07,
-0x1c, 0x01, 0x04, 0x12, 0x01, 0x07, 0x04, 0x09,
-0x26, 0x07, 0x15, 0x01, 0x04, 0xe6, 0x0c, 0x01,
-0xe5, 0x09, 0x05, 0xe5, 0xe5, 0x13, 0x1b, 0x06,
-0x02, 0x10, 0x04, 0x03, 0xe6, 0xe6, 0x02, 0xe5,
-0x06, 0x01, 0x02, 0x01, 0xe5, 0x05, 0x01, 0x04,
-0x02, 0xe6, 0x06, 0x01, 0x01, 0x05, 0x01, 0x04,
-0x04, 0x01, 0x02, 0x04, 0x01, 0x04, 0x02, 0x01,
-0x01, 0x02, 0x02, 0x01, 0x07, 0x01, 0x01, 0x04,
-0x05, 0xe6, 0x02, 0x12, 0x0e, 0x07, 0x03, 0x0c,
-0x08, 0x0c, 0x06, 0x1e, 0x01, 0xe7, 0x1d, 0x08,
-0x01, 0x0e, 0x24, 0x13, 0x06, 0xe5, 0xe5, 0xe5,
-0x14, 0x09, 0xe5, 0x07, 0xe5, 0x01, 0x01, 0x0a,
-0x02, 0x01, 0x05, 0x34, 0xe9, 0xe5, 0x01, 0x02,
-0x0e, 0x01, 0x07, 0x01, 0xe5, 0x05, 0xe7, 0x01,
-0xe5, 0x01, 0x0f, 0x0f, 0x09, 0x15, 0x07, 0xe5,
-0x16, 0x01, 0x0a, 0x03, 0x03, 0x06, 0x03, 0x02,
-0x04, 0x13, 0x03, 0x09, 0x03, 0x10, 0x02, 0x01,
-0xe5, 0xe6, 0x18, 0x06, 0x0b, 0xe6, 0x07, 0x06,
-0x06, 0x07, 0x0e, 0x1b, 0xe9, 0x0f, 0x05, 0x04,
-0x08, 0x06, 0xe5, 0x04, 0x05, 0x02, 0x03, 0x14,
-0x04, 0x03, 0x1b, 0x01, 0x02, 0x11, 0x0a, 0xe5,
-0x07, 0x06, 0x11, 0xe5, 0x39, 0x02, 0x0d, 0xe5,
-0x0b, 0x03, 0x0c, 0x10, 0x01, 0x39, 0x01, 0xe5,
-0xe5, 0x0c, 0x02, 0x05, 0x04, 0x10, 0x05, 0xe5,
-0x0a, 0x3a, 0xe5, 0xe6, 0x01, 0x16, 0x0d, 0x02,
-0x06, 0x05, 0xe5, 0x06, 0xe5, 0xe5, 0x0e, 0x25,
-0xe5, 0x01, 0xe5, 0x1b, 0x09, 0xe5, 0x04, 0x08,
-0xe5, 0x07, 0x02, 0x19, 0x11, 0x0b, 0x02, 0x17,
-0x15, 0x06, 0x02, 0x0a, 0x3a, 0xe7, 0x11, 0xe5,
-0x04, 0x0f, 0x4b, 0xe5, 0x02, 0xe6, 0x01, 0x01,
-0x0e, 0xe5, 0x05, 0x0f, 0xe6, 0x11, 0x34, 0x01,
-0x01, 0x03, 0xe5, 0x03, 0x05, 0x01, 0xe5, 0xe5,
-0x03, 0xe5, 0xe5, 0xe6, 0x0f, 0x01, 0x04, 0x01,
-0xe5, 0x01, 0x03, 0xe5, 0x02, 0x04, 0x28, 0xe5,
-0x03, 0x01, 0x03, 0x02, 0x02, 0x07, 0x02, 0x01,
-0x04, 0xe5, 0xe5, 0xe6, 0x0c, 0xe5, 0xe5, 0xe5,
-0x03, 0xe5, 0x02, 0x04, 0x32, 0xe5, 0x05, 0x02,
-0x01, 0x01, 0x0b, 0x01, 0x01, 0x02, 0x04, 0x21,
-0xe5, 0x01, 0xe5, 0xe5, 0x05, 0x02, 0x2d, 0xe7,
-0xe6, 0x01, 0x0a, 0x01, 0x02, 0x04, 0x13, 0x01,
-0x01, 0x01, 0x02, 0x05, 0x02, 0xe5, 0x05, 0x2e,
-0x02, 0x03, 0x01, 0xe6, 0x17, 0x11, 0x01, 0x07,
-0x07, 0x03, 0x35, 0x02, 0xe8, 0x11, 0x06, 0x11,
-0x01, 0x09, 0x03, 0xe5, 0x3d, 0x01, 0xe5, 0x11,
-0x09, 0x14, 0x02, 0x05, 0x3e, 0xe7, 0xe5, 0x1a,
-0xe5, 0x1e, 0x3d, 0xe5, 0x01, 0xe5, 0x0a, 0x02,
-0x09, 0x09, 0x09, 0x06, 0x02, 0x03, 0x02, 0x04,
-0x09, 0x09, 0x09, 0x09, 0x0d, 0xe9, 0x01, 0x08,
-0xe5, 0x04, 0x09, 0x14, 0x02, 0x05, 0x02, 0xe5,
-0x3a, 0xe5, 0xe6, 0x0a, 0x26, 0x08, 0x40, 0xe6,
-0x0c, 0x04, 0x04, 0x01, 0x02, 0x15, 0x0b, 0x04,
-0x36, 0xe8, 0x0e, 0x01, 0x02, 0x02, 0x01, 0xe6,
-0xe5, 0x0f, 0x0a, 0x09, 0xe5, 0x35, 0xe8, 0x08,
-0x02, 0x09, 0x01, 0x10, 0x07, 0x08, 0x07, 0x2e,
-0x08, 0xe7, 0x0e, 0x05, 0xe6, 0xe5, 0x04, 0xe5,
-0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x09, 0xe5,
-0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5,
-0x09, 0xe5, 0x0c, 0x09, 0x01, 0x14, 0x14, 0x36,
-0x02, 0xe5, 0x0e, 0x07, 0x16, 0x4d, 0x01, 0xe5,
-0x0b, 0x09, 0x01, 0x11, 0x0b, 0x01, 0x06, 0x02,
-0x36, 0xe5, 0xe6, 0x02, 0x0b, 0x02, 0x04, 0x04,
-0x0e, 0x02, 0x11, 0x39, 0xe5, 0x01, 0x2b, 0x15,
-0x01, 0xe5, 0x20, 0x12, 0xe5, 0xe7, 0x10, 0x01,
-0x02, 0x03, 0xe5, 0xe5, 0x06, 0x01, 0x02, 0x04,
-0x01, 0x07, 0x01, 0x05, 0x03, 0x01, 0x07, 0x01,
-0x07, 0x01, 0x07, 0x01, 0x07, 0x01, 0x0b, 0xe5,
-0xe5, 0x18, 0x12, 0x02, 0x09, 0x21, 0x01, 0x1c,
-0xe6, 0xe6, 0x13, 0x1c, 0x0b, 0x01, 0x13, 0x24,
-0xe5, 0x01, 0xe5, 0x18, 0x14, 0x10, 0x3b, 0x02,
-0x17, 0x01, 0x0e, 0x02, 0x01, 0x07, 0xe5, 0x09,
-0x01, 0x16, 0x1a, 0x05, 0x02, 0x17, 0x01, 0x13,
-0x0d, 0x03, 0x04, 0x03, 0x10, 0x1c, 0x02, 0x02,
-0xe6, 0x19, 0x09, 0x06, 0x05, 0x0f, 0x37, 0x01,
-0xe7, 0x25, 0x04, 0x01, 0x11, 0x08, 0x10, 0x1f,
-0x02, 0x01, 0x26, 0x08, 0x0f, 0x06, 0x33, 0x01,
-0x01, 0x0a, 0x10, 0x0f, 0x13, 0x07, 0x31, 0x02,
-0xe6, 0x11, 0x16, 0x01, 0x03, 0x0f, 0x3b, 0x02,
-0x14, 0x01, 0x16, 0xe5, 0x0c, 0x28, 0x13, 0x04,
-0xe5, 0x2b, 0x0a, 0x36, 0x0a, 0x01, 0x01, 0x2b,
-0xe5, 0x0d, 0x3e, 0xe8, 0xe5, 0x75, 0xe5, 0x03,
-0x02, 0x01, 0x28, 0x47, 0x01, 0x02, 0xe6, 0xe5,
-0x03, 0x23, 0x01, 0x4a, 0x04, 0xe5, 0x01, 0x02,
-0x74, 0x02, 0xe6, 0xe6, 0x04, 0x05, 0x21, 0x01,
-0x01, 0x01, 0x45, 0x01, 0xe6, 0x01, 0x08, 0x25,
-0x02, 0x3f, 0x02, 0x05, 0xe6, 0x72, 0x04, 0xe5,
-0xe5, 0xe5, 0x01, 0x2c, 0x4a, 0x03, 0xe6, 0x2d,
-0x43, 0x06, 0x01, 0xe5, 0x7a, 0xe8, 0x0d, 0x09,
-0x09, 0x09, 0x09, 0x0b, 0x09, 0x09, 0x09, 0x09,
-0x0d, 0x03, 0xe5, 0x01, 0x27, 0x4c, 0x06, 0x29,
-0x52, 0x01, 0x2d, 0xe5, 0x48, 0x03, 0x01, 0x16,
-0x03, 0x14, 0x4a, 0xe6, 0xe5, 0x2c, 0x03, 0x4a,
-0xe6, 0x03, 0x10, 0xe5, 0x07, 0xe5, 0x07, 0xe5,
-0x07, 0xe5, 0x07, 0xe5, 0x09, 0xe5, 0x07, 0xe5,
-0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x06, 0x02,
-0xe5, 0x16, 0x01, 0x13, 0x4c, 0x03, 0x17, 0x01,
-0x63, 0xe6, 0x15, 0x01, 0x13, 0x12, 0x39, 0x03,
-0x03, 0x13, 0x01, 0x16, 0x49, 0xe5, 0xe6, 0x2a,
-0x01, 0xe5, 0x49, 0x02, 0xe6, 0x10, 0x01, 0x01,
-0x05, 0x01, 0x02, 0x03, 0xe5, 0xe5, 0x02, 0x03,
-0x01, 0x01, 0x05, 0x01, 0x01, 0x02, 0x03, 0xe5,
-0xe5, 0x06, 0x01, 0x07, 0x01, 0x07, 0x01, 0x07,
-0x01, 0x0a, 0xe5, 0x01, 0x5b, 0x22, 0xe5, 0x09,
-0x34, 0x07, 0x09, 0x0b, 0x1a, 0x02, 0x01, 0x3f,
-0x3a, 0xe6, 0xe5, 0x16, 0x10, 0x17, 0x07, 0x2b,
-0x08, 0xe5, 0x19, 0x16, 0x09, 0x03, 0x3b, 0xe7,
-0x23, 0x1a, 0x04, 0xe5, 0x33, 0x01, 0xe6, 0x1b,
-0x22, 0x0a, 0x0d, 0x23, 0x01, 0x3f, 0x3c, 0xe6,
-0x20, 0xe6, 0x15, 0x04, 0x2a, 0x09, 0x06, 0xe5,
-0xe5, 0x23, 0x1a, 0xe5, 0x28, 0x0f, 0x02, 0xe5,
-0x38, 0x41, 0xe5, 0xe6, 0xe5, 0x24, 0x04, 0x1a,
-0x30, 0x01, 0xe5, 0xe5, 0x2c, 0x4c, 0xe5, 0x01,
-0xe6, 0x75, 0xe8, 0xe5, 0x01, 0x01, 0x70, 0x01,
-0x03, 0xe5, 0xe5, 0x03, 0x70, 0x04, 0xe5, 0x01,
-0x02, 0x74, 0x02, 0x01, 0xe6, 0x01, 0x78, 0x02,
-0x74, 0x02, 0x02, 0xe8, 0x13, 0x5f, 0x04, 0x03,
-0xe5, 0x13, 0xe5, 0x63, 0x01, 0xe6, 0x08, 0x02,
-0x08, 0x64, 0xe5, 0x01, 0x0a, 0xe5, 0x6e, 0xe5,
-0xe6, 0x0d, 0x09, 0x09, 0x09, 0x09, 0x0b, 0x09,
-0x09, 0x09, 0x09, 0x0d, 0xe9, 0x01, 0x74, 0x06,
-0x7a, 0x03, 0x01, 0x2b, 0x4d, 0xe5, 0xe5, 0x23,
-0x08, 0xe5, 0x47, 0x02, 0xe8, 0x2c, 0x4b, 0xe5,
-0x01, 0xe5, 0x12, 0x01, 0x07, 0xe6, 0x07, 0xe5,
-0x02, 0x03, 0x01, 0x09, 0xe5, 0x09, 0xe5, 0x07,
-0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x06,
-0x01, 0xe6, 0x0f, 0xe5, 0x02, 0x09, 0x01, 0x01,
-0xe5, 0x03, 0x03, 0x03, 0x01, 0x38, 0x0b, 0x01,
-0x01, 0x01, 0x13, 0x02, 0x09, 0xe5, 0xe6, 0x02,
-0x01, 0x02, 0x06, 0x37, 0x0d, 0x01, 0x01, 0x15,
-0x07, 0xe6, 0xe5, 0xe5, 0x04, 0x03, 0x05, 0x47,
-0xe5, 0xe5, 0x0f, 0x02, 0xe5, 0x07, 0xe5, 0x01,
-0x01, 0xe5, 0x01, 0xe5, 0x03, 0x03, 0xe5, 0x38,
-0x0e, 0x01, 0xe5, 0x2e, 0x33, 0x15, 0xe5, 0xe5,
-0xe5, 0x10, 0x01, 0x07, 0x01, 0x07, 0x01, 0xe5,
-0xe5, 0x03, 0x01, 0xe5, 0xe5, 0x02, 0xe5, 0xe6,
-0x07, 0x01, 0xe5, 0x05, 0x01, 0xe6, 0x04, 0xe7,
-0x05, 0x01, 0x07, 0x01, 0x0b, 0xe7, 0x3d, 0x15,
-0x21, 0x03, 0x03, 0xe5, 0x3e, 0x38, 0xe5, 0xe5,
-0xe5, 0x12, 0x02, 0x09, 0x1e, 0x07, 0x32, 0x03,
-0xe5, 0x19, 0x05, 0x01, 0x0a, 0x09, 0x06, 0x3a,
-0xe5, 0x01, 0x23, 0x03, 0x17, 0x3a, 0x03, 0xe5,
-0x1f, 0x1d, 0x16, 0xe5, 0x24, 0xe5, 0x1e, 0x09,
-0x12, 0x02, 0x15, 0x01, 0x23, 0xe7, 0x3e, 0x23,
-0x17, 0x01, 0xe5, 0x3e, 0x3c, 0xe6, 0x24, 0x19,
-0x3d, 0xe6, 0x1b, 0xe5, 0x04, 0x02, 0xe5, 0x08,
-0x38, 0x12, 0x33, 0x36, 0xe6, 0x0b, 0x01, 0xe5,
-0xe5, 0x6a, 0x10, 0xe6, 0x02, 0x0b, 0xe5, 0xe5,
-0x05, 0xe5, 0x07, 0xe5, 0x07, 0xe6, 0x06, 0xe5,
-0x07, 0xe7, 0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5,
-0x07, 0xe5, 0x0b, 0x03, 0xe5, 0x0f, 0x09, 0x09,
-0x09, 0x09, 0x04, 0x04, 0x01, 0x09, 0x09, 0x09,
-0x01, 0x07, 0x0d, 0xe5, 0xe6, 0x0e, 0x09, 0x03,
-0x05, 0x09, 0x09, 0x04, 0x06, 0x04, 0x04, 0x04,
-0x04, 0x04, 0x04, 0x09, 0x0e, 0x03, 0x26, 0x57,
-0x0f, 0x09, 0x09, 0x09, 0x09, 0x0b, 0x01, 0x07,
-0x09, 0x09, 0x02, 0x06, 0x0e, 0xe5, 0xe6, 0x0c,
-0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07,
-0xe5, 0x09, 0xe5, 0x07, 0xe5, 0x07, 0xe5, 0x07,
-0xe5, 0x07, 0xe5, 0x0e, 0x03, 0x03, 0x09, 0x09,
-0x09, 0x09, 0x09, 0x0b, 0x09, 0x09, 0x09, 0x09,
-0x12, 0xe6, 0x0d, 0xe5, 0xe5, 0x05, 0xe5, 0xe5,
-0x05, 0xe5, 0xe5, 0x05, 0xe5, 0xe5, 0x05, 0xe5,
-0xe5, 0x07, 0xe5, 0xe5, 0x05, 0xe5, 0xe5, 0x05,
-0xe5, 0xe5, 0x05, 0xe5, 0xe5, 0x05, 0xe5, 0xe5,
-0x0b, 0x03, 0x0e, 0x09, 0x09, 0x09, 0x09, 0x03,
-0x07, 0x09, 0x09, 0x09, 0x09, 0x0f, 0x02, 0xe5,
-0x79, 0xe5, 0x01, 0x0e, 0x09, 0x09, 0x09, 0x09,
-0x08, 0x02, 0x09, 0x09, 0x09, 0x09, 0x11, 0xe6,
-0x3e, 0x3b, 0x02, 0x10, 0x09, 0x09, 0x09, 0x09,
-0x0b, 0x09, 0x09, 0x09, 0x09, 0x10, 0xe5, 0x7d,
-0x3f, 0x3a, 0xe5, 0x01, 0x3f, 0x36, 0x04, 0x02,
-0x7a, 0x01, 0x01, 0x13, 0x3d, 0x28, 0x01, 0x01,
-0x3f, 0x33, 0x0a, 0x3f, 0x34, 0x08, 0xe5, 0x79,
-0x01, 0x01, 0x14, 0x09, 0x09, 0x09, 0x09, 0x0b,
-0x09, 0x09, 0x09, 0x09, 0x09, 0xe5, 0x01, 0x0f,
-0x09, 0x09, 0x09, 0x09, 0x07, 0x03, 0x09, 0x09,
-0x09, 0x08, 0xe5, 0x0d, 0x03, 0x3a, 0x04, 0x3a,
-0x02, 0xe5, 0x0c, 0x09, 0x03, 0x05, 0x09, 0x09,
-0x03, 0x07, 0x09, 0x09, 0x07, 0x01, 0x1b, 0x01,
-0xe5, 0x0a, 0x02, 0x07, 0x05, 0x03, 0x01, 0x03,
-0x03, 0x01, 0x03, 0x03, 0x09, 0x06, 0xe5, 0x02,
-0x04, 0x04, 0x04, 0x02, 0x06, 0xe5, 0x02, 0x02,
-0x06, 0x02, 0xe5, 0x02, 0x03, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff,
index 91b4063ed168f14c0aaff4ba4ce2255e4cb8502a..cbdcfe33c5c128514f8114bea8046a856efad949 100644 (file)
@@ -5,7 +5,7 @@
  * based on - Driver for MV64360X ethernet ports
  * Copyright (C) 2002 rabeeh@galileo.co.il
  *
- * SPDX-License-Identifier:    GPL-2.0+
+ * SPDX-License-Identifier:    GPL-2.0
  */
 
 /*
@@ -1025,21 +1025,6 @@ bool db64360_eth_start (struct eth_device *dev)
  * based on Linux code
  * arch/powerpc/galileo/EVB64360/mv64360_eth.c - Driver for MV64360X ethernet ports
  * Copyright (C) 2002 rabeeh@galileo.co.il
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
  */
 
 /********************************************************************************
index 5925bc6ec04dece992d1c709077d2128a9e799a5..38acca12bf397cfea773b360448df666f264deb5 100644 (file)
@@ -1,28 +1,6 @@
-/*------------------------------------------------------------------------------+ */
-/* */
-/*       This source code is dual-licensed.  You may use it under the terms */
-/*       of the GNU General Public License version 2, or under the license  */
-/*       below.                                                             */
-/*                                                                          */
-/*       This source code has been made available to you by IBM on an AS-IS */
-/*       basis.  Anyone receiving this source is licensed under IBM */
-/*       copyrights to use it in any way he or she deems fit, including */
-/*       copying it, modifying it, compiling it, and redistributing it either */
-/*       with or without modifications.  No license under IBM patents or */
-/*       patent applications is to be implied by the copyright license. */
-/* */
-/*       Any user of this software should understand that IBM cannot provide */
-/*       technical support for this software and will not be responsible for */
-/*       any consequences resulting from the use of this software. */
-/* */
-/*       Any person who transfers this source code or any derivative work */
-/*       must include the IBM copyright notice, this paragraph, and the */
-/*       preceding two paragraphs in the transferred software. */
-/* */
-/*       COPYRIGHT   I B M   CORPORATION 1995 */
-/*       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M */
-/*------------------------------------------------------------------------------- */
-
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*----------------------------------------------------------------------------- */
 /* Function:     ext_bus_cntlr_init */
 /* Description:  Initializes the External Bus Controller for the external */
index 86e44eae0bd973618b7d672256109087f9f6717d..f74651c5209c1ea84793397d72973cbd6c7689aa 100644 (file)
 
 #include "../common/qixis.h"
 #include "../common/vsc3316_3308.h"
+#include "../common/idt8t49n222a_serdes_clk.h"
 #include "b4860qds.h"
 #include "b4860qds_qixis.h"
 #include "b4860qds_crossbar_con.h"
 
 #define CLK_MUX_SEL_MASK       0x4
 #define ETH_PHY_CLK_OUT                0x4
+#define PLL_NUM                        2
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -35,8 +37,6 @@ int checkboard(void)
        char buf[64];
        u8 sw;
        struct cpu_type *cpu = gd->arch.cpu;
-       ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
-       unsigned int i;
        static const char *const freq[] = {"100", "125", "156.25", "161.13",
                                                "122.88", "122.88", "122.88"};
        int clock;
@@ -61,19 +61,6 @@ int checkboard(void)
        /* the timestamp string contains "\n" at the end */
        printf(" on %s", qixis_read_time(buf));
 
-       /* Display the RCW, so that no one gets confused as to what RCW
-        * we're actually using for this boot.
-        */
-       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");
-
        /*
         * Display the actual SERDES reference clocks as configured by the
         * dip switches on the board.  Note that the SWx registers could
@@ -252,6 +239,106 @@ int configure_vsc3316_3308(void)
        return 0;
 }
 
+int config_serdes1_refclks(void)
+{
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       serdes_corenet_t *srds_regs =
+               (void *)CONFIG_SYS_FSL_CORENET_SERDES_ADDR;
+       u32 serdes1_prtcl, lane;
+       unsigned int flag_sgmii_prtcl = 0;
+       int ret, i;
+
+       serdes1_prtcl = in_be32(&gur->rcwsr[4]) &
+                       FSL_CORENET2_RCWSR4_SRDS1_PRTCL;
+       if (!serdes1_prtcl) {
+               printf("SERDES1 is not enabled\n");
+               return -1;
+       }
+       serdes1_prtcl >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT;
+       debug("Using SERDES1 Protocol: 0x%x:\n", serdes1_prtcl);
+
+       /* Clear SRDS_RSTCTL_RST bit for both PLLs before changing refclks
+        */
+       for (i = 0; i < PLL_NUM; i++)
+               clrbits_be32(&srds_regs->bank[i].rstctl, SRDS_RSTCTL_RST);
+       /* Reconfigure IDT idt8t49n222a device for CPRI to work
+        * For this SerDes1's Refclk1 and refclk2 need to be set
+        * to 122.88MHz
+        */
+       switch (serdes1_prtcl) {
+       case 0x2A:
+       case 0x2C:
+       case 0x2D:
+       case 0x2E:
+               debug("Configuring idt8t49n222a for CPRI SerDes clks:"
+                       " for srds_prctl:%x\n", serdes1_prtcl);
+               ret = select_i2c_ch_pca(I2C_CH_IDT);
+               if (!ret) {
+                       ret = set_serdes_refclk(IDT_SERDES1_ADDRESS, 1,
+                                       SERDES_REFCLK_122_88,
+                                       SERDES_REFCLK_122_88, 0);
+                       if (ret) {
+                               printf("IDT8T49N222A configuration failed.\n");
+                               return ret;
+                       } else
+                               printf("IDT8T49N222A configured.\n");
+               } else {
+                       return ret;
+               }
+               select_i2c_ch_pca(I2C_CH_DEFAULT);
+
+               /* Change SerDes1's Refclk1 to 125MHz for on board
+                * SGMIIs to work
+                */
+               for (lane = 0; lane < SRDS_MAX_LANES; lane++) {
+                       enum srds_prtcl lane_prtcl = serdes_get_prtcl
+                                               (0, serdes1_prtcl, lane);
+                       switch (lane_prtcl) {
+                       case SGMII_FM1_DTSEC1:
+                       case SGMII_FM1_DTSEC2:
+                       case SGMII_FM1_DTSEC3:
+                       case SGMII_FM1_DTSEC4:
+                       case SGMII_FM1_DTSEC5:
+                       case SGMII_FM1_DTSEC6:
+                               flag_sgmii_prtcl++;
+                               break;
+                       default:
+                               break;
+                       }
+               }
+
+               if (flag_sgmii_prtcl)
+                       QIXIS_WRITE(brdcfg[4], QIXIS_SRDS1CLK_125);
+
+               /* Steps For SerDes PLLs reset and reconfiguration after
+                * changing SerDes's refclks
+                */
+               for (i = 0; i < PLL_NUM; i++) {
+                       debug("For PLL%d reset and reconfiguration after"
+                              " changing refclks\n", i+1);
+                       clrbits_be32(&srds_regs->bank[i].rstctl,
+                                       SRDS_RSTCTL_SDRST_B);
+                       udelay(10);
+                       clrbits_be32(&srds_regs->bank[i].rstctl,
+                               (SRDS_RSTCTL_SDEN | SRDS_RSTCTL_PLLRST_B));
+                       udelay(10);
+                       setbits_be32(&srds_regs->bank[i].rstctl,
+                                       SRDS_RSTCTL_RST);
+                       setbits_be32(&srds_regs->bank[i].rstctl,
+                               (SRDS_RSTCTL_SDEN | SRDS_RSTCTL_PLLRST_B
+                               | SRDS_RSTCTL_SDRST_B));
+               }
+               break;
+       default:
+               printf("WARNING:IDT8T49N222A configuration not"
+                       " supported for:%x SerDes1 Protocol.\n",
+                       serdes1_prtcl);
+               return -1;
+       }
+
+       return 0;
+}
+
 int board_early_init_r(void)
 {
        const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
@@ -277,6 +364,16 @@ int board_early_init_r(void)
 #ifdef CONFIG_SYS_DPAA_QBMAN
        setup_portals();
 #endif
+       /* SerDes1 refclks need to be set again, as default clks
+        * are not suitable for CPRI and onboard SGMIIs to work
+        * simultaneously.
+        * This function will set SerDes1's Refclk1 and refclk2
+        * as per SerDes1 protocols
+        */
+       if (config_serdes1_refclks())
+               printf("SerDes1 Refclks couldn't set properly.\n");
+       else
+               printf("SerDes1 Refclks have been set.\n");
 
        /* Configure VSC3316 and VSC3308 crossbar switches */
        if (configure_vsc3316_3308())
index 6e64745b0fa374c5bc88012eceb4f191fc195a8a..db0cf28fffbb882d68115bc048f450558c42f766 100644 (file)
 static const int8_t vsc16_tx_amc[8][2] = { {15, 3}, {0, 2}, {7, 4}, {9, 10},
                                {5, 11}, {4, 5}, {2, 6}, {12, 9} };
 
-static const int8_t vsc16_tx_sfp[8][2] = { {15, 7}, {0, 1}, {7, 8}, {9, 0},
+static int8_t vsc16_tx_sfp[8][2] = { {15, 7}, {0, 1}, {7, 8}, {9, 0},
                                {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1} };
 
-static const int8_t vsc16_tx_4sfp_sgmii_12_56[8][2] = { {15, 7}, {0, 1},
+static int8_t vsc16_tx_4sfp_sgmii_12_56[8][2] = { {15, 7}, {0, 1},
                                {7, 8}, {9, 0}, {2, 14}, {12, 15},
                                {-1, -1}, {-1, -1} };
 
@@ -25,7 +25,7 @@ static const int8_t vsc16_tx_4sfp_sgmii_34[8][2] = { {15, 7}, {0, 1},
                                {-1, -1}, {-1, -1} };
 
 #ifdef CONFIG_PPC_B4420
-static const int8_t vsc16_tx_sgmii_lane_cd[8][2] = { {5, 14}, {4, 15},
+static int8_t vsc16_tx_sgmii_lane_cd[8][2] = { {5, 14}, {4, 15},
                {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1} };
 #endif
 
@@ -35,10 +35,10 @@ static const int8_t vsc16_tx_aurora[8][2] = { {2, 13}, {12, 12}, {-1, -1},
 static const int8_t vsc16_rx_amc[8][2] = { {3, 15}, {2, 1}, {4, 8}, {10, 9},
                                {11, 11}, {5, 10}, {6, 3}, {9, 12} };
 
-static const int8_t vsc16_rx_sfp[8][2] = { {8, 15}, {0, 1}, {7, 8}, {1, 9},
+static int8_t vsc16_rx_sfp[8][2] = { {8, 15}, {0, 1}, {7, 8}, {1, 9},
                                {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1} };
 
-static const int8_t vsc16_rx_4sfp_sgmii_12_56[8][2] = { {8, 15}, {0, 1},
+static int8_t vsc16_rx_4sfp_sgmii_12_56[8][2] = { {8, 15}, {0, 1},
                                {7, 8}, {1, 9}, {14, 3}, {15, 12},
                                {-1, -1}, {-1, -1} };
 
@@ -47,7 +47,7 @@ static const int8_t vsc16_rx_4sfp_sgmii_34[8][2] = { {8, 15}, {0, 1},
                                {-1, -1}, {-1, -1} };
 
 #ifdef CONFIG_PPC_B4420
-static const int8_t vsc16_rx_sgmii_lane_cd[8][2] = { {14, 11}, {15, 10},
+static int8_t vsc16_rx_sgmii_lane_cd[8][2] = { {14, 11}, {15, 10},
                {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1} };
 #endif
 
index 19ca66e3d035a9122ac03c9e34e9cf62e26d9181..dc4ef80fc883f4ef85c57d2ca16499636d49b0ae 100644 (file)
@@ -201,8 +201,6 @@ int board_eth_init(bd_t *bis)
                debug("Setting phy addresses for FM1_DTSEC5: %x and"
                        "FM1_DTSEC6: %x\n", CONFIG_SYS_FM1_DTSEC5_PHY_ADDR,
                        CONFIG_SYS_FM1_DTSEC6_PHY_ADDR);
-               /* Fixing Serdes clock by programming FPGA register */
-               QIXIS_WRITE(brdcfg[4], QIXIS_SRDS1CLK_125);
                fm_info_set_phy_address(FM1_DTSEC5,
                                CONFIG_SYS_FM1_DTSEC5_PHY_ADDR);
                fm_info_set_phy_address(FM1_DTSEC6,
index a4161ad649aad4794eb9d04eb80696d983f7ec71..c82fe0aab33b33ab7d1ddd9dce55d69f52be5557 100644 (file)
@@ -87,7 +87,7 @@ phys_size_t fixed_sdram(void)
        }
 
        ddr_size = (phys_size_t) CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
-       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0);
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
 
        if (set_ddr_laws(CONFIG_SYS_DDR_SDRAM_BASE, ddr_size,
                                        LAW_TRGT_IF_DDR_1) < 0) {
index 457489416ab9597227ee5913aab7b5ca6e7eb9b0..a895e4e297cb86319cb7aba224386d5aca438cbe 100644 (file)
@@ -125,6 +125,27 @@ void board_config_serdes_mux(void)
        }
 }
 
+/* Configure DSP DDR controller */
+void dsp_ddr_configure(void)
+{
+       /*
+        *There are separate DDR-controllers for DSP and PowerPC side DDR.
+        *copy the ddr controller settings from PowerPC side DDR controller
+        *to the DSP DDR controller as connected DDR memories are similar.
+        */
+       ccsr_ddr_t __iomem *pa_ddr =
+                       (ccsr_ddr_t __iomem *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
+       ccsr_ddr_t temp_ddr;
+       ccsr_ddr_t __iomem *dsp_ddr =
+                       (ccsr_ddr_t __iomem *)CONFIG_SYS_FSL_DSP_CCSR_DDR_ADDR;
+
+       memcpy(&temp_ddr, pa_ddr, sizeof(ccsr_ddr_t));
+       temp_ddr.cs0_bnds = CONFIG_SYS_DDR1_CS0_BNDS;
+       temp_ddr.sdram_cfg &= ~SDRAM_CFG_MEM_EN;
+       memcpy(dsp_ddr, &temp_ddr, sizeof(ccsr_ddr_t));
+       dsp_ddr->sdram_cfg |= SDRAM_CFG_MEM_EN;
+}
+
 int board_early_init_r(void)
 {
 #ifndef CONFIG_SYS_NO_FLASH
@@ -153,6 +174,7 @@ int board_early_init_r(void)
                        0, flash_esel+1, BOOKE_PAGESZ_64M, 1);
 #endif
        board_config_serdes_mux();
+       dsp_ddr_configure();
        return 0;
 }
 
index 05bea8ad5248a96404e1c3d6ec9a126e485053e2..fdea19312926890f8c97d4b96f87aa47b484f1cb 100644 (file)
@@ -109,7 +109,7 @@ phys_size_t fixed_sdram(void)
                                        strmhz(buf, ddr_freq));
 
        ddr_size = (phys_size_t) CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
-       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0);
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
 
        if (set_ddr_laws(CONFIG_SYS_DDR_SDRAM_BASE, ddr_size,
                                        LAW_TRGT_IF_DDR_1) < 0) {
index fed2edf44a8f6d247f6fe176e34b525bff1361d8..e10de9adcf107779dd1719dfdd583e0dac93beef 100644 (file)
@@ -16,6 +16,14 @@ struct law_entry law_table[] = {
 #ifdef CONFIG_SYS_FPGA_BASE_PHYS
        SET_LAW(CONFIG_SYS_FPGA_BASE_PHYS, LAW_SIZE_128K, LAW_TRGT_IF_IFC),
 #endif
+       SET_LAW(CONFIG_SYS_FSL_DSP_CCSRBAR_PHYS, LAW_SIZE_1M,
+               LAW_TRGT_IF_DSP_CCSR),
+       SET_LAW(CONFIG_SYS_FSL_DSP_M2_RAM_ADDR, LAW_SIZE_32M,
+               LAW_TRGT_IF_OCN_DSP),
+       SET_LAW(CONFIG_SYS_FSL_DSP_M3_RAM_ADDR, LAW_SIZE_32K,
+               LAW_TRGT_IF_CLASS_DSP),
+       SET_LAW(CONFIG_SYS_FSL_DSP_DDR_ADDR, LAW_SIZE_1G,
+               LAW_TRGT_IF_CLASS_DSP)
 };
 
 int num_law_entries = ARRAY_SIZE(law_table);
index 6d823534166ace2b97eb3381b50ac454b8895260..02655e9bafd68275ffba14cb362341d4a5de22a5 100644 (file)
@@ -41,6 +41,11 @@ struct fsl_e_tlb_entry tlb_table[] = {
                        MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                        0, 1, BOOKE_PAGESZ_1M, 1),
 
+       /* CCSRBAR (DSP) */
+       SET_TLB_ENTRY(1, CONFIG_SYS_FSL_DSP_CCSRBAR,
+                     CONFIG_SYS_FSL_DSP_CCSRBAR_PHYS, MAS3_SW|MAS3_SR,
+                     MAS2_I|MAS2_G, 0, 2, BOOKE_PAGESZ_1M, 1),
+
 #ifndef CONFIG_SPL_BUILD
        SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE_PHYS,
                        MAS3_SX|MAS3_SR, MAS2_W|MAS2_G,
similarity index 57%
rename from board/esd/canbt/Makefile
rename to board/freescale/c29xpcie/Makefile
index e5caf2331ada52a51b58af002b7b60c6177931a1..ab8eb8f729fc93a853ef9eb050878895408ceacd 100644 (file)
@@ -1,24 +1,23 @@
 #
-# (C) Copyright 2000-2006
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+# Copyright 2013 Freescale Semiconductor, Inc.
 #
 # SPDX-License-Identifier:     GPL-2.0+
-#
 
 include $(TOPDIR)/config.mk
-ifneq ($(OBJTREE),$(SRCTREE))
-$(shell mkdir -p $(obj)../common)
-endif
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  = $(BOARD).o flash.o ../common/misc.o
+COBJS-y        += $(BOARD).o
+COBJS-y        += cpld.o
+COBJS-y        += ddr.o
+COBJS-y        += law.o
+COBJS-y        += tlb.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
-$(LIB):        $(OBJS) $(SOBJS)
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
        $(call cmd_link_o_target, $(OBJS))
 
 #########################################################################
diff --git a/board/freescale/c29xpcie/README b/board/freescale/c29xpcie/README
new file mode 100644 (file)
index 0000000..430f082
--- /dev/null
@@ -0,0 +1,100 @@
+Overview
+=========
+C29XPCIE board is a series of Freescale PCIe add-in cards to perform
+as public key crypto accelerator or secure key management module.
+It includes C293PCIE board, C293PCIE board and C291PCIE board.
+The Freescale C29x family is a high performance crypto co-processor.
+It combines a single e500v2 core with necessary SEC engines.
+(maximum core frequency 1000/1200 MHz).
+
+The C29xPCIE board features are as follows:
+Memory subsystem:
+       - 512Mbyte unbuffered DDR3 SDRAM discrete devices (32-bit bus)
+       - 64 Mbyte NOR flash single-chip memory
+       - 4 Gbyte NAND flash memory
+       - 1 Mbit AT24C1024 I2C EEPROM
+       - 16 Mbyte SPI memory
+
+Interfaces:
+       - 10/100/1000 BaseT Ethernet ports:
+               - eTSEC1, RGMII: one 10/100/1000 port
+               - eTSEC2, RGMII: one 10/100/1000 port
+       - DUART interface:
+               - DUART interface: supports two UARTs up to 115200 bps for
+                  console display
+
+Board connectors:
+       - Mini-ITX power supply connector
+       - JTAG/COP for debugging
+
+Physical Memory Map on C29xPCIE
+===============================
+Address Start   Address End   Memory type
+0x0_0000_0000 - 0x0_1fff_ffff   512MB DDR
+0xc_0000_0000 - 0xc_8fff_ffff   256MB PCIE memory
+0xf_ec00_0000 - 0xf_efff_ffff   64MB NOR flash
+0xf_ffb0_0000 - 0xf_ffb7_ffff   512KB SRAM
+0xf_ffc0_0000 - 0xf_ffc0_ffff   64KB PCIE IO
+0xf_ffdf_0000 - 0xf_ffdf_0fff   4KB CPLD
+0xf_ffe0_0000 - 0xf_ffef_ffff   1MB CCSR
+
+Serial Port Configuration on C29xPCIE
+=====================================
+Configure the serial port of the attached computer with the following values:
+       -Data rate: 115200 bps
+       -Number of data bits: 8
+       -Parity: None
+       -Number of Stop bits: 1
+       -Flow Control: Hardware/None
+
+Settings of DIP-switch
+======================
+  SW5[1:4]= 1111 and SW5[6]=0 for boot from 16bit NOR flash
+  SW5[1:4]= 0110 and SW5[6]=0 for boot from SPI flash
+Note: 1 stands for 'off', 0 stands for 'on'
+
+Build and program u-boot to NOR flash
+==================================
+1. Build u-boot.bin image example:
+       export ARCH=powerpc
+       export CROSS_COMPILE=/your_path/powerpc-linux-gnu-
+       make C293PCIE
+
+2. Program u-boot.bin into NOR flash
+       => tftp $loadaddr $uboot
+       => protect off eff80000 +$filesize
+       => erase eff80000 +$filesize
+       => cp.b $loadaddr eff80000 $filesize
+
+3. Check SW5[1:4]= 1111 and SW5[6]=0, then power on.
+
+Alternate NOR bank
+==================
+There are four banks in C29XPCIE board, example to change bank booting:
+1. Program u-boot.bin into alternate NOR bank
+       => tftp $loadaddr $uboot
+       => protect off e9f80000 +$filesize
+       => erase e9f80000 +$filesize
+       => cp.b $loadaddr e9f80000 $filesize
+
+2. Switch to alternate NOR bank
+       => cpld_cmd reset altbank [bank]
+       - [bank] bank value select 1-4
+       - bank 1 on the flash 0x0000000~0x0ffffff
+       - bank 2 on the flash 0x1000000~0x1ffffff
+       - bank 3 on the flash 0x2000000~0x2ffffff
+       - bank 4 on the flash 0x3000000~0x3ffffff
+       or set SW5[7]= ON/OFF and SW5[7]= ON/OFF, then power on again.
+
+Build and program u-boot to SPI flash
+==================================
+1. Build u-boot-spi.bin image
+       make C29xPCIE_SPIFLASH_config; make
+       Need the boot_format tool to generate u-boot-spi.bin from the u-boot.bin.
+
+2. Program u-boot-spi.bin into SPI flash
+       => tftp $loadaddr $uboot-spi
+       => sf erase 0 100000
+       => sf write $loadaddr 0 $filesize
+
+3. Check SW5[1:4]= 0110 and SW5[6]=0, then power on.
diff --git a/board/freescale/c29xpcie/c29xpcie.c b/board/freescale/c29xpcie/c29xpcie.c
new file mode 100644 (file)
index 0000000..48c4b30
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+#include <asm/cache.h>
+#include <asm/immap_85xx.h>
+#include <asm/io.h>
+#include <miiphy.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+#include <fsl_mdio.h>
+#include <tsec.h>
+#include <mmc.h>
+#include <netdev.h>
+#include <pci.h>
+#include <asm/fsl_ifc.h>
+#include <asm/fsl_pci.h>
+
+#include "cpld.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+       struct cpu_type *cpu = gd->arch.cpu;
+       struct cpld_data *cpld_data = (void *)(CONFIG_SYS_CPLD_BASE);
+
+       printf("Board: %sPCIe, ", cpu->name);
+       printf("CPLD Ver: 0x%02x\n", in_8(&cpld_data->cpldver));
+
+       return 0;
+}
+
+int board_early_init_f(void)
+{
+       struct fsl_ifc *ifc = (void *)CONFIG_SYS_IFC_ADDR;
+
+       /* Clock configuration to access CPLD using IFC(GPCM) */
+       setbits_be32(&ifc->ifc_gcr, 1 << IFC_GCR_TBCTL_TRN_TIME_SHIFT);
+
+       return 0;
+}
+
+int board_early_init_r(void)
+{
+       const unsigned long flashbase = CONFIG_SYS_FLASH_BASE;
+       const u8 flash_esel = find_tlb_idx((void *)flashbase, 1);
+
+       /*
+        * Remap Boot flash 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 */
+       disable_tlb(flash_esel);
+
+       set_tlb(1, flashbase, CONFIG_SYS_FLASH_BASE_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, flash_esel, BOOKE_PAGESZ_64M, 1);
+
+       return 0;
+}
+
+#ifdef CONFIG_PCI
+void pci_init_board(void)
+{
+       fsl_pcie_init_board(0);
+}
+#endif /* ifdef CONFIG_PCI */
+
+#ifdef CONFIG_TSEC_ENET
+int board_eth_init(bd_t *bis)
+{
+       struct fsl_pq_mdio_info mdio_info;
+       struct tsec_info_struct tsec_info[2];
+       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
+       if (!num) {
+               printf("No TSECs initialized\n");
+               return 0;
+       }
+
+       /* Register 1G MDIO bus */
+       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 fdt_del_sec(void *blob, int offset)
+{
+       int nodeoff = 0;
+
+       while ((nodeoff = fdt_node_offset_by_compat_reg(blob, "fsl,sec-v6.0",
+                       CONFIG_SYS_CCSRBAR_PHYS + CONFIG_SYS_FSL_SEC_OFFSET
+                       + offset * 0x20000)) >= 0) {
+               fdt_del_node(blob, nodeoff);
+               offset++;
+       }
+}
+
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       phys_addr_t base;
+       phys_size_t size;
+       struct cpu_type *cpu;
+
+       cpu = gd->arch.cpu;
+
+       ft_cpu_setup(blob, bd);
+
+       base = getenv_bootm_low();
+       size = getenv_bootm_size();
+
+#if defined(CONFIG_PCI)
+       FT_FSL_PCI_SETUP;
+#endif
+
+       fdt_fixup_memory(blob, (u64)base, (u64)size);
+       if (cpu->soc_ver == SVR_C291)
+               fdt_del_sec(blob, 1);
+       else if (cpu->soc_ver == SVR_C292)
+               fdt_del_sec(blob, 2);
+}
+#endif
diff --git a/board/freescale/c29xpcie/cpld.c b/board/freescale/c29xpcie/cpld.c
new file mode 100644 (file)
index 0000000..5cbccff
--- /dev/null
@@ -0,0 +1,131 @@
+/**
+ * Copyright 2013 Freescale Semiconductor
+ * Author: Mingkai Hu <Mingkai.hu@freescale.com>
+ *         Po Liu <Po.Liu@freescale.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * This file provides support for the board-specific CPLD used on some Freescale
+ * reference boards.
+ *
+ * The following macros need to be defined:
+ *
+ * CONFIG_SYS_CPLD_BASE - The virtual address of the base of the
+ * CPLD register map
+ *
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/io.h>
+
+#include "cpld.h"
+/**
+ * Set the boot bank to the alternate bank
+ */
+void cpld_set_altbank(u8 banksel)
+{
+       struct cpld_data *cpld_data = (void *)(CONFIG_SYS_CPLD_BASE);
+       u8 reg11;
+
+       reg11 = in_8(&cpld_data->flhcsr);
+
+       switch (banksel) {
+       case 1:
+               out_8(&cpld_data->flhcsr, (reg11 & CPLD_BANKSEL_MASK)
+                       | CPLD_BANKSEL_EN | CPLD_SELECT_BANK1);
+               break;
+       case 2:
+               out_8(&cpld_data->flhcsr, (reg11 & CPLD_BANKSEL_MASK)
+                       | CPLD_BANKSEL_EN | CPLD_SELECT_BANK2);
+               break;
+       case 3:
+               out_8(&cpld_data->flhcsr, (reg11 & CPLD_BANKSEL_MASK)
+                       | CPLD_BANKSEL_EN | CPLD_SELECT_BANK3);
+               break;
+       case 4:
+               out_8(&cpld_data->flhcsr, (reg11 & CPLD_BANKSEL_MASK)
+                       | CPLD_BANKSEL_EN | CPLD_SELECT_BANK4);
+               break;
+       default:
+               printf("Invalid value! [1-4]\n");
+               return;
+       }
+
+       udelay(100);
+       do_reset(NULL, 0, 0, NULL);
+}
+
+/**
+ * Set the boot bank to the default bank
+ */
+void cpld_set_defbank(void)
+{
+       cpld_set_altbank(4);
+}
+
+#ifdef DEBUG
+static void cpld_dump_regs(void)
+{
+       struct cpld_data *cpld_data = (void *)(CONFIG_SYS_CPLD_BASE);
+
+       printf("chipid1         = 0x%02x\n", in_8(&cpld_data->chipid1));
+       printf("chipid2         = 0x%02x\n", in_8(&cpld_data->chipid2));
+       printf("hwver           = 0x%02x\n", in_8(&cpld_data->hwver));
+       printf("cpldver         = 0x%02x\n", in_8(&cpld_data->cpldver));
+       printf("rstcon          = 0x%02x\n", in_8(&cpld_data->rstcon));
+       printf("flhcsr          = 0x%02x\n", in_8(&cpld_data->flhcsr));
+       printf("wdcsr           = 0x%02x\n", in_8(&cpld_data->wdcsr));
+       printf("wdkick          = 0x%02x\n", in_8(&cpld_data->wdkick));
+       printf("fancsr          = 0x%02x\n", in_8(&cpld_data->fancsr));
+       printf("ledcsr          = 0x%02x\n", in_8(&cpld_data->ledcsr));
+       printf("misc            = 0x%02x\n", in_8(&cpld_data->misccsr));
+       printf("bootor          = 0x%02x\n", in_8(&cpld_data->bootor));
+       printf("bootcfg1        = 0x%02x\n", in_8(&cpld_data->bootcfg1));
+       printf("bootcfg2        = 0x%02x\n", in_8(&cpld_data->bootcfg2));
+       printf("bootcfg3        = 0x%02x\n", in_8(&cpld_data->bootcfg3));
+       printf("bootcfg4        = 0x%02x\n", in_8(&cpld_data->bootcfg4));
+       putc('\n');
+}
+#endif
+
+int cpld_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       int rc = 0;
+       unsigned char value;
+
+       if (argc <= 1)
+               return cmd_usage(cmdtp);
+
+       if (strcmp(argv[1], "reset") == 0) {
+               if (!strcmp(argv[2], "altbank") && argv[3]) {
+                       value = (u8)simple_strtoul(argv[3], NULL, 16);
+                       cpld_set_altbank(value);
+               } else if (!argv[2])
+                       cpld_set_defbank();
+               else
+                       cmd_usage(cmdtp);
+#ifdef DEBUG
+       } else if (strcmp(argv[1], "dump") == 0) {
+               cpld_dump_regs();
+#endif
+       } else
+               rc = cmd_usage(cmdtp);
+
+       return rc;
+}
+
+U_BOOT_CMD(
+       cpld_cmd, CONFIG_SYS_MAXARGS, 1, cpld_cmd,
+       "Reset the board using the CPLD sequencer",
+       "reset - hard reset to default bank 4\n"
+       "cpld_cmd reset altbank [bank]- reset to alternate bank\n"
+       "       - [bank] bank value select 1-4\n"
+       "       - bank 1 on the flash 0x0000000~0x0ffffff\n"
+       "       - bank 2 on the flash 0x1000000~0x1ffffff\n"
+       "       - bank 3 on the flash 0x2000000~0x2ffffff\n"
+       "       - bank 4 on the flash 0x3000000~0x3ffffff\n"
+#ifdef DEBUG
+       "cpld_cmd dump - display the CPLD registers\n"
+#endif
+       );
diff --git a/board/freescale/c29xpcie/cpld.h b/board/freescale/c29xpcie/cpld.h
new file mode 100644 (file)
index 0000000..20862a3
--- /dev/null
@@ -0,0 +1,40 @@
+/**
+ * Copyright 2013 Freescale Semiconductor
+ * Author: Mingkai Hu <Mingkai.Hu@freescale.com>
+ *         Po Liu <Po.Liu@freescale.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * This file provides support for the ngPIXIS, a board-specific FPGA used on
+ * some Freescale reference boards.
+ */
+
+/*
+ * CPLD register set. Feel free to add board-specific #ifdefs where necessary.
+ */
+struct cpld_data {
+       u8 chipid1;     /* 0x0 - CPLD Chip ID1 Register */
+       u8 chipid2;     /* 0x1 - CPLD Chip ID2 Register */
+       u8 hwver;       /* 0x2 - Hardware Version Register */
+       u8 cpldver;     /* 0x3 - Software Version Register */
+       u8 res[12];
+       u8 rstcon;      /* 0x10 - Reset control register */
+       u8 flhcsr;      /* 0x11 - Flash control and status Register */
+       u8 wdcsr;       /* 0x12 - Watchdog control and status Register */
+       u8 wdkick;      /* 0x13 - Watchdog kick Register */
+       u8 fancsr;      /* 0x14 - Fan control and status Register */
+       u8 ledcsr;      /* 0x15 - LED control and status Register */
+       u8 misccsr;     /* 0x16 - Misc control and status Register */
+       u8 bootor;      /* 0x17 - Boot configure override Register */
+       u8 bootcfg1;    /* 0x18 - Boot configure 1 Register */
+       u8 bootcfg2;    /* 0x19 - Boot configure 2 Register */
+       u8 bootcfg3;    /* 0x1a - Boot configure 3 Register */
+       u8 bootcfg4;    /* 0x1b - Boot configure 4 Register */
+};
+
+#define CPLD_BANKSEL_EN                0x02
+#define CPLD_BANKSEL_MASK      0x3f
+#define CPLD_SELECT_BANK1      0xc0
+#define CPLD_SELECT_BANK2      0x80
+#define CPLD_SELECT_BANK3      0x40
+#define CPLD_SELECT_BANK4      0x00
diff --git a/board/freescale/c29xpcie/ddr.c b/board/freescale/c29xpcie/ddr.c
new file mode 100644 (file)
index 0000000..b017cfd
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/fsl_ddr_dimm_params.h>
+
+/*
+ * Micron MT41J128M16HA-15E
+ * */
+dimm_params_t ddr_raw_timing = {
+       .n_ranks = 1,
+       .rank_density = 536870912u,
+       .capacity = 536870912u,
+       .primary_sdram_width = 32,
+       .ec_sdram_width = 8,
+       .registered_dimm = 0,
+       .mirrored_dimm = 0,
+       .n_row_addr = 14,
+       .n_col_addr = 10,
+       .n_banks_per_sdram_device = 8,
+       .edc_config = 2,
+       .burst_lengths_bitmask = 0x0c,
+
+       .tCKmin_X_ps = 1650,
+       .caslat_X = 0x7e << 4,  /* 5,6,7,8,9,10 */
+       .tAA_ps = 14050,
+       .tWR_ps = 15000,
+       .tRCD_ps = 13500,
+       .tRRD_ps = 75000,
+       .tRP_ps = 13500,
+       .tRAS_ps = 40000,
+       .tRC_ps = 49500,
+       .tRFC_ps = 160000,
+       .tWTR_ps = 75000,
+       .tRTP_ps = 75000,
+       .refresh_rate_ps = 7800000,
+       .tFAW_ps = 30000,
+};
+
+int fsl_ddr_get_dimm_params(dimm_params_t *pdimm,
+               unsigned int controller_number,
+               unsigned int dimm_number)
+{
+       const char dimm_model[] = "Fixed DDR on board";
+
+       if ((controller_number == 0) && (dimm_number == 0)) {
+               memcpy(pdimm, &ddr_raw_timing, sizeof(dimm_params_t));
+               memset(pdimm->mpart, 0, sizeof(pdimm->mpart));
+               memcpy(pdimm->mpart, dimm_model, sizeof(dimm_model) - 1);
+       }
+
+       return 0;
+}
+
+void fsl_ddr_board_options(memctl_options_t *popts,
+                               dimm_params_t *pdimm,
+                               unsigned int ctrl_num)
+{
+       int i;
+       popts->clk_adjust = 2;
+       popts->cpo_override = 0x1f;
+       popts->write_data_delay = 4;
+       popts->half_strength_driver_enable = 1;
+       popts->bstopre = 0x3cf;
+       popts->quad_rank_present = 1;
+       popts->rtt_override = 1;
+       popts->rtt_override_value = 1;
+       popts->dynamic_power = 1;
+       /* Write leveling override */
+       popts->wrlvl_en = 1;
+       popts->wrlvl_override = 1;
+       popts->wrlvl_sample = 0xf;
+       popts->wrlvl_start = 0x4;
+       popts->trwt_override = 1;
+       popts->trwt = 0;
+
+       for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
+               popts->cs_local_opts[i].odt_rd_cfg = FSL_DDR_ODT_NEVER;
+               popts->cs_local_opts[i].odt_wr_cfg = FSL_DDR_ODT_CS;
+       }
+}
diff --git a/board/freescale/c29xpcie/law.c b/board/freescale/c29xpcie/law.c
new file mode 100644 (file)
index 0000000..cd8fc21
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+struct law_entry law_table[] = {
+       SET_LAW(CONFIG_SYS_FLASH_BASE_PHYS, LAW_SIZE_64M, LAW_TRGT_IF_IFC),
+       SET_LAW(CONFIG_SYS_CPLD_BASE_PHYS, LAW_SIZE_4K, LAW_TRGT_IF_IFC),
+       SET_LAW(CONFIG_SYS_NAND_BASE_PHYS, LAW_SIZE_16K, LAW_TRGT_IF_IFC),
+       SET_LAW(CONFIG_SYS_PLATFORM_SRAM_BASE_PHYS, LAW_SIZE_512K,
+                                       LAW_TRGT_IF_PLATFORM_SRAM),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/c29xpcie/tlb.c b/board/freescale/c29xpcie/tlb.c
new file mode 100644 (file)
index 0000000..ddd1ef8
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#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,
+                       MAS3_SX|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 + 4 * 1024,
+                       MAS3_SX|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 + 8 * 1024,
+                       MAS3_SX|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 + 12 * 1024,
+                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                       0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /* TLB 1 */
+       SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 0, BOOKE_PAGESZ_1M, 1),
+
+       SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE_PHYS,
+                       MAS3_SX|MAS3_SR, MAS2_W|MAS2_G,
+                       0, 1, BOOKE_PAGESZ_64M, 1),
+
+#ifdef CONFIG_PCI
+       SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT, CONFIG_SYS_PCIE1_MEM_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 2, BOOKE_PAGESZ_256M, 1),
+
+       SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_IO_VIRT, CONFIG_SYS_PCIE1_IO_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 3, BOOKE_PAGESZ_256K, 1),
+#endif
+
+       SET_TLB_ENTRY(1, CONFIG_SYS_CPLD_BASE, CONFIG_SYS_CPLD_BASE_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 4, BOOKE_PAGESZ_4K, 1),
+
+       SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 5, BOOKE_PAGESZ_16K, 1),
+
+       SET_TLB_ENTRY(1, CONFIG_SYS_PLATFORM_SRAM_BASE,
+                       CONFIG_SYS_PLATFORM_SRAM_BASE_PHYS,
+                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                       0, 6, BOOKE_PAGESZ_256K, 1),
+       SET_TLB_ENTRY(1, CONFIG_SYS_PLATFORM_SRAM_BASE + 0x40000,
+                       CONFIG_SYS_PLATFORM_SRAM_BASE_PHYS + 0x40000,
+                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                       0, 7, BOOKE_PAGESZ_256K, 1),
+
+#ifdef CONFIG_SYS_RAMBOOT
+       SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE,
+                       CONFIG_SYS_DDR_SDRAM_BASE,
+                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                       0, 8, BOOKE_PAGESZ_256M, 1),
+       SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000,
+                       CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000,
+                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                       0, 9, BOOKE_PAGESZ_256M, 1),
+#endif
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index d451f6ff010a9b2855280f10d7021a16f47bc0db..f9550c48ceba642e6db2707615d962ffad80158c 100644 (file)
@@ -45,15 +45,14 @@ COBJS-$(CONFIG_MPC8555CDS)  += cds_pci_ft.o
 
 COBJS-$(CONFIG_MPC8536DS)      += ics307_clk.o
 COBJS-$(CONFIG_MPC8572DS)      += ics307_clk.o
-ifndef CONFIG_SPL_BUILD
 COBJS-$(CONFIG_P1022DS)                += ics307_clk.o
-endif
 COBJS-$(CONFIG_P2020DS)                += ics307_clk.o
 COBJS-$(CONFIG_P3041DS)                += ics307_clk.o
 COBJS-$(CONFIG_P4080DS)                += ics307_clk.o
 COBJS-$(CONFIG_P5020DS)                += ics307_clk.o
 COBJS-$(CONFIG_P5040DS)                += ics307_clk.o
 COBJS-$(CONFIG_VSC_CROSSBAR)    += vsc3316_3308.o
+COBJS-$(CONFIG_IDT8T49N222A)   += idt8t49n222a_serdes_clk.o
 
 # deal with common files for P-series corenet based devices
 SUBLIB-$(CONFIG_P2041RDB)      += p_corenet/libp_corenet.o
diff --git a/board/freescale/common/idt8t49n222a_serdes_clk.c b/board/freescale/common/idt8t49n222a_serdes_clk.c
new file mode 100644 (file)
index 0000000..d347162
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ * Author: Shaveta Leekha <shaveta@freescale.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include "idt8t49n222a_serdes_clk.h"
+
+#define DEVICE_ID_REG          0x00
+
+static int check_pll_status(u8 idt_addr)
+{
+       u8 val = 0;
+       int ret;
+
+       ret = i2c_read(idt_addr, 0x17, 1, &val, 1);
+       if (ret < 0) {
+               printf("IDT:0x%x could not read status register from device.\n",
+                       idt_addr);
+               return ret;
+       }
+
+       if (val & 0x04) {
+               debug("idt8t49n222a PLL is LOCKED: %x\n", val);
+       } else {
+               printf("idt8t49n222a PLL is not LOCKED: %x\n", val);
+               return -1;
+       }
+
+       return 0;
+}
+
+int set_serdes_refclk(u8 idt_addr, u8 serdes_num,
+                       enum serdes_refclk refclk1,
+                       enum serdes_refclk refclk2, u8 feedback)
+{
+       u8 dev_id = 0;
+       int i, ret;
+
+       debug("IDT:Configuring idt8t49n222a device at I2C address: 0x%2x\n",
+               idt_addr);
+
+       ret = i2c_read(idt_addr, DEVICE_ID_REG, 1, &dev_id, 1);
+       if (ret < 0) {
+               debug("IDT:0x%x could not read DEV_ID from device.\n",
+                       idt_addr);
+               return ret;
+       }
+
+       if ((dev_id != 0x00) && (dev_id != 0x24) && (dev_id != 0x2a)) {
+               debug("IDT: device at address 0x%x is not idt8t49n222a.\n",
+                       idt_addr);
+       }
+
+       if (serdes_num != 1 && serdes_num != 2) {
+               debug("serdes_num should be 1 for SerDes1 and"
+                       " 2 for SerDes2.\n");
+               return -1;
+       }
+
+       if ((refclk1 == SERDES_REFCLK_122_88 && refclk2 != SERDES_REFCLK_122_88)
+               || (refclk1 != SERDES_REFCLK_122_88
+                       && refclk2 == SERDES_REFCLK_122_88)) {
+               debug("Only one refclk at 122.88MHz is not supported."
+                       " Please set both refclk1 & refclk2 to 122.88MHz"
+                       " or both not to 122.88MHz.\n");
+               return -1;
+       }
+
+       if (refclk1 != SERDES_REFCLK_100 && refclk1 != SERDES_REFCLK_122_88
+                                       && refclk1 != SERDES_REFCLK_125
+                                       && refclk1 != SERDES_REFCLK_156_25) {
+               debug("refclk1 should be 100MHZ, 122.88MHz, 125MHz"
+                       " or 156.25MHz.\n");
+               return -1;
+       }
+
+       if (refclk2 != SERDES_REFCLK_100 && refclk2 != SERDES_REFCLK_122_88
+                                       && refclk2 != SERDES_REFCLK_125
+                                       && refclk2 != SERDES_REFCLK_156_25) {
+               debug("refclk2 should be 100MHZ, 122.88MHz, 125MHz"
+                       " or 156.25MHz.\n");
+               return -1;
+       }
+
+       if (feedback != 0 && feedback != 1) {
+               debug("valid values for feedback are 0(default) or 1.\n");
+               return -1;
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 122.88MHz  Refclk2 = 122.88MHz
+        */
+       if (refclk1 == SERDES_REFCLK_122_88 &&
+                       refclk2 == SERDES_REFCLK_122_88) {
+               printf("Setting refclk1:122.88 and refclk2:122.88\n");
+               for (i = 0; i < NUM_IDT_REGS; i++)
+                       i2c_reg_write(idt_addr, idt_conf_122_88[i][0],
+                                               idt_conf_122_88[i][1]);
+
+               if (feedback) {
+                       for (i = 0; i < NUM_IDT_REGS_FEEDBACK; i++)
+                               i2c_reg_write(idt_addr,
+                                       idt_conf_122_88_feedback[i][0],
+                                       idt_conf_122_88_feedback[i][1]);
+               }
+       }
+
+       if (refclk1 != SERDES_REFCLK_122_88 &&
+                       refclk2 != SERDES_REFCLK_122_88) {
+               for (i = 0; i < NUM_IDT_REGS; i++)
+                       i2c_reg_write(idt_addr, idt_conf_not_122_88[i][0],
+                                               idt_conf_not_122_88[i][1]);
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 100MHz  Refclk2 = 125MHz
+        */
+       if (refclk1 == SERDES_REFCLK_100 && refclk2 == SERDES_REFCLK_125) {
+               printf("Setting refclk1:100 and refclk2:125\n");
+               i2c_reg_write(idt_addr, 0x11, 0x10);
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 125MHz  Refclk2 = 125MHz
+        */
+       if (refclk1 == SERDES_REFCLK_125 && refclk2 == SERDES_REFCLK_125) {
+               printf("Setting refclk1:125 and refclk2:125\n");
+               i2c_reg_write(idt_addr, 0x10, 0x10);
+               i2c_reg_write(idt_addr, 0x11, 0x10);
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 125MHz  Refclk2 = 100MHz
+        */
+       if (refclk1 == SERDES_REFCLK_125 && refclk2 == SERDES_REFCLK_100) {
+               printf("Setting refclk1:125 and refclk2:100\n");
+               i2c_reg_write(idt_addr, 0x10, 0x10);
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 156.25MHz  Refclk2 = 156.25MHz
+        */
+       if (refclk1 == SERDES_REFCLK_156_25 &&
+                       refclk2 == SERDES_REFCLK_156_25) {
+               printf("Setting refclk1:156.25 and refclk2:156.25\n");
+               for (i = 0; i < NUM_IDT_REGS_156_25; i++)
+                       i2c_reg_write(idt_addr, idt_conf_156_25[i][0],
+                                               idt_conf_156_25[i][1]);
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 100MHz  Refclk2 = 156.25MHz
+        */
+       if (refclk1 == SERDES_REFCLK_100 &&
+                       refclk2 == SERDES_REFCLK_156_25) {
+               printf("Setting refclk1:100 and refclk2:156.25\n");
+               for (i = 0; i < NUM_IDT_REGS_156_25; i++)
+                       i2c_reg_write(idt_addr, idt_conf_100_156_25[i][0],
+                                               idt_conf_100_156_25[i][1]);
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 125MHz  Refclk2 = 156.25MHz
+        */
+       if (refclk1 == SERDES_REFCLK_125 &&
+                       refclk2 == SERDES_REFCLK_156_25) {
+               printf("Setting refclk1:125 and refclk2:156.25\n");
+               for (i = 0; i < NUM_IDT_REGS_156_25; i++)
+                       i2c_reg_write(idt_addr, idt_conf_125_156_25[i][0],
+                                               idt_conf_125_156_25[i][1]);
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 156.25MHz  Refclk2 = 100MHz
+        */
+       if (refclk1 == SERDES_REFCLK_156_25 &&
+                       refclk2 == SERDES_REFCLK_100) {
+               printf("Setting refclk1:156.25 and refclk2:100\n");
+               for (i = 0; i < NUM_IDT_REGS_156_25; i++)
+                       i2c_reg_write(idt_addr, idt_conf_156_25_100[i][0],
+                                               idt_conf_156_25_100[i][1]);
+       }
+
+       /* Configuring IDT for output refclks as
+        * Refclk1 = 156.25MHz  Refclk2 = 125MHz
+        */
+       if (refclk1 == SERDES_REFCLK_156_25 &&
+                       refclk2 == SERDES_REFCLK_125) {
+               printf("Setting refclk1:156.25 and refclk2:125\n");
+               for (i = 0; i < NUM_IDT_REGS_156_25; i++)
+                       i2c_reg_write(idt_addr, idt_conf_156_25_125[i][0],
+                                               idt_conf_156_25_125[i][1]);
+       }
+
+       /* waiting for maximum of 1 second if PLL doesn'r get locked
+        * initially. then check the status again.
+        */
+       if (check_pll_status(idt_addr)) {
+               mdelay(1000);
+               if (check_pll_status(idt_addr))
+                       return -1;
+       }
+
+       return 0;
+}
diff --git a/board/freescale/common/idt8t49n222a_serdes_clk.h b/board/freescale/common/idt8t49n222a_serdes_clk.h
new file mode 100644 (file)
index 0000000..787bdd9
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ * Author: Shaveta Leekha <shaveta@freescale.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __IDT8T49N222A_SERDES_CLK_H_
+#define __IDT8T49N222A_SERDES_CLK_H_   1
+
+#include <common.h>
+#include <i2c.h>
+#include "qixis.h"
+#include "../b4860qds/b4860qds_qixis.h"
+#include <errno.h>
+
+#define NUM_IDT_REGS           23
+#define NUM_IDT_REGS_FEEDBACK  12
+#define NUM_IDT_REGS_156_25    11
+
+/* CLK */
+enum serdes_refclk {
+       SERDES_REFCLK_100,      /* refclk 100Mhz */
+       SERDES_REFCLK_122_88,   /* refclk 122.88Mhz */
+       SERDES_REFCLK_125,      /* refclk 125Mhz */
+       SERDES_REFCLK_156_25,   /* refclk 156.25Mhz */
+       SERDES_REFCLK_NONE = -1,
+};
+
+/* configuration values for IDT registers for Output Refclks:
+ * Refclk1 = 122.88MHz Refclk2 = 122.88MHz
+ */
+static const u8 idt_conf_122_88[23][2] = { {0x00, 0x3C}, {0x01, 0x00},
+               {0x02, 0x9F}, {0x03, 0x00}, {0x04, 0x0B}, {0x05, 0x00},
+               {0x06, 0x00}, {0x07, 0x00}, {0x08, 0x7D}, {0x09, 0x00},
+               {0x0A, 0x08}, {0x0B, 0x00}, {0x0C, 0xDC}, {0x0D, 0x00},
+               {0x0E, 0x00}, {0x0F, 0x00}, {0x10, 0x12}, {0x11, 0x12},
+               {0x12, 0xB9}, {0x13, 0xBC}, {0x14, 0x40}, {0x15, 0x08},
+               {0x16, 0xA0} };
+
+
+/* configuration values for IDT registers for Output Refclks:
+ * Refclk1 not equal to 122.88MHz Refclk2 not equal to 122.88MHz
+ */
+static const u8 idt_conf_not_122_88[23][2] = { {0x00, 0x00}, {0x01, 0x00},
+               {0x02, 0x00}, {0x03, 0x00}, {0x04, 0x0A}, {0x05, 0x00},
+               {0x06, 0x00}, {0x07, 0x00}, {0x08, 0x7D}, {0x09, 0x00},
+               {0x0A, 0x08}, {0x0B, 0x00}, {0x0C, 0xDC}, {0x0D, 0x00},
+               {0x0E, 0x00}, {0x0F, 0x00}, {0x10, 0x14}, {0x11, 0x14},
+               {0x12, 0x35}, {0x13, 0xBC}, {0x14, 0x40}, {0x15, 0x08},
+               {0x16, 0xA0} };
+
+/* Reconfiguration values for some of IDT registers for
+ * Output Refclks:
+ * Refclk1 = 122.88MHz Refclk2 = 122.88MHz
+ * and with feedback as 1
+ */
+static const u8 idt_conf_122_88_feedback[12][2] = { {0x00, 0x50}, {0x02, 0xD7},
+               {0x04, 0x89}, {0x06, 0xC3}, {0x08, 0xC0}, {0x0A, 0x07},
+               {0x0C, 0x80}, {0x10, 0x10}, {0x11, 0x10}, {0x12, 0x1B},
+               {0x14, 0x00}, {0x15, 0xE8} };
+
+/* configuration values for IDT registers for Output Refclks:
+ * Refclk1 : 156.25MHz Refclk2 : 156.25MHz
+ */
+static const u8 idt_conf_156_25[11][2] = { {0x04, 0x19}, {0x06, 0x03},
+               {0x08, 0xC0}, {0x0A, 0x07}, {0x0C, 0xA1}, {0x0E, 0x20},
+               {0x10, 0x10}, {0x11, 0x10}, {0x12, 0xB5}, {0x13, 0x3C},
+               {0x15, 0xE8} };
+
+/* configuration values for IDT registers for Output Refclks:
+ * Refclk1 : 100MHz Refclk2 : 156.25MHz
+ */
+static const u8 idt_conf_100_156_25[11][2] = { {0x04, 0x19}, {0x06, 0x03},
+               {0x08, 0xC0}, {0x0A, 0x07}, {0x0C, 0xA1}, {0x0E, 0x20},
+               {0x10, 0x19}, {0x11, 0x10}, {0x12, 0xB5}, {0x13, 0x3C},
+               {0x15, 0xE8} };
+
+/* configuration values for IDT registers for Output Refclks:
+ * Refclk1 : 125MHz Refclk2 : 156.25MHz
+ */
+static const u8 idt_conf_125_156_25[11][2] = { {0x04, 0x19}, {0x06, 0x03},
+               {0x08, 0xC0}, {0x0A, 0x07}, {0x0C, 0xA1}, {0x0E, 0x20},
+               {0x10, 0x14}, {0x11, 0x10}, {0x12, 0xB5}, {0x13, 0x3C},
+               {0x15, 0xE8} };
+
+/* configuration values for IDT registers for Output Refclks:
+ * Refclk1 : 156.25MHz Refclk2 : 100MHz
+ */
+static const u8 idt_conf_156_25_100[11][2] = { {0x04, 0x19}, {0x06, 0x03},
+               {0x08, 0xC0}, {0x0A, 0x07}, {0x0C, 0xA1}, {0x0E, 0x20},
+               {0x10, 0x10}, {0x11, 0x19}, {0x12, 0xB5}, {0x13, 0x3C},
+               {0x15, 0xE8} };
+
+/* configuration values for IDT registers for Output Refclks:
+ * Refclk1 : 156.25MHz Refclk2 : 125MHz
+ */
+static const u8 idt_conf_156_25_125[11][2] = { {0x04, 0x19}, {0x06, 0x03},
+               {0x08, 0xC0}, {0x0A, 0x07}, {0x0C, 0xA1}, {0x0E, 0x20},
+               {0x10, 0x10}, {0x11, 0x14}, {0x12, 0xB5}, {0x13, 0x3C},
+               {0x15, 0xE8} };
+
+int set_serdes_refclk(u8 idt_addr, u8 serdes_num,
+                       enum serdes_refclk refclk1,
+                       enum serdes_refclk refclk2, u8 feedback);
+
+#endif /*__IDT8T49N222A_SERDES_CLK_H_ */
index 40ce6b082d1d6b77f108d91fe865361101accfcd..a49e3006d9d7897358cfa4d6d7baecf401df99e5 100644 (file)
@@ -107,6 +107,26 @@ const char *byte_to_binary_mask(u8 val, u8 mask, char *buf)
        return buf;
 }
 
+#ifdef QIXIS_RST_FORCE_MEM
+void board_assert_mem_reset(void)
+{
+       u8 rst;
+
+       rst = QIXIS_READ(rst_frc[0]);
+       if (!(rst & QIXIS_RST_FORCE_MEM))
+               QIXIS_WRITE(rst_frc[0], rst | QIXIS_RST_FORCE_MEM);
+}
+
+void board_deassert_mem_reset(void)
+{
+       u8 rst;
+
+       rst = QIXIS_READ(rst_frc[0]);
+       if (rst & QIXIS_RST_FORCE_MEM)
+               QIXIS_WRITE(rst_frc[0], rst & ~QIXIS_RST_FORCE_MEM);
+}
+#endif
+
 void qixis_reset(void)
 {
        QIXIS_WRITE(rst_ctl, QIXIS_RST_CTL_RESET);
index 8a3dc33b66c748ccc85665c087368be2362ab452..97a25e838ed414080c7140baba7e6e4ebcf63b0d 100644 (file)
@@ -31,7 +31,7 @@ int vsc_if_enable(unsigned int vsc_addr)
        return i2c_write(vsc_addr, INTERFACE_MODE_REG, 1, &data, 1);
 }
 
-int vsc3316_config(unsigned int vsc_addr, const int8_t con_arr[][2],
+int vsc3316_config(unsigned int vsc_addr, int8_t con_arr[][2],
                unsigned int num_con)
 {
        unsigned int i;
index 4003fcdb23d82f2e112c4641fcfe44ddbed2cd7a..2a491877792fdeef574a66929da6f692f9cccb7c 100644 (file)
@@ -12,7 +12,7 @@
 #include <errno.h>
 
 int vsc_if_enable(unsigned int vsc_addr);
-int vsc3316_config(unsigned int vsc_addr, const int8_t con_arr[][2],
+int vsc3316_config(unsigned int vsc_addr, int8_t con_arr[][2],
                unsigned int num_con);
 int vsc3308_config(unsigned int vsc_addr, const int8_t con_arr[][2],
                unsigned int num_con);
index fffb0c817a3261a46b5e5bc29c84a31aea337715..60e2100af3089144759b42f6ed66d82bc15ae96c 100644 (file)
@@ -27,8 +27,10 @@ int checkboard (void)
 {
        u8 sw;
        struct cpu_type *cpu = gd->arch.cpu;
-       ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
+#if defined(CONFIG_P3041DS) || defined(CONFIG_P5020DS) || \
+       defined(CONFIG_P5040DS)
        unsigned int i;
+#endif
        static const char * const freq[] = {"100", "125", "156.25", "212.5" };
 
        printf("Board: %sDS, ", cpu->name);
@@ -47,19 +49,6 @@ int checkboard (void)
        else
                printf("invalid setting of SW%u\n", PIXIS_LBMAP_SWITCH);
 
-       /* Display the RCW, so that no one gets confused as to what RCW
-        * we're actually using for this boot.
-        */
-       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");
-
        /* Display the actual SERDES reference clocks as configured by the
         * dip switches on the board.  Note that the SWx registers could
         * technically be set to force the reference clocks to match the
index da284cde9556aa330acf85adcdf544e6614919fe..517e87ff4c256a766503ddb630f10dc309c80ada 100644 (file)
@@ -56,14 +56,14 @@ phys_size_t fixed_sdram(void)
 
        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);
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
 
 #if (CONFIG_NUM_DDR_CONTROLLERS == 2)
        memcpy(&ddr_cfg_regs,
                fixed_ddr_parm_1[i].ddr_settings,
                sizeof(ddr_cfg_regs));
        ddr_cfg_regs.ddr_cdr1 = DDR_CDR1_DHC_EN;
-       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 1);
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 1, 0);
 #endif
 
        /*
index 7a84cd295a2d5ea3c6bf69193c02aba1e8508ffd..2fb40374283cdb07bc132cadc78a45bd49e865bb 100644 (file)
@@ -68,7 +68,7 @@ local_bus_init(void)
 
        get_sys_info(&sysinfo);
        clkdiv = lbc->lcrr & LCRR_CLKDIV;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
+       lbc_hz = sysinfo.freq_systembus / 1000000 / clkdiv;
 
        if (lbc_hz < 66) {
                lbc->lcrr = CONFIG_SYS_LBC_LCRR | LCRR_DBYP;    /* DLL Bypass */
index 3d2dabd1169a52087d644796a48ddb26288c2514..1e21a664c1f424af2e15a7c788a3063271ed53f8 100644 (file)
@@ -250,7 +250,7 @@ local_bus_init(void)
 
        get_sys_info(&sysinfo);
        clkdiv = lbc->lcrr & LCRR_CLKDIV;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
+       lbc_hz = sysinfo.freq_systembus / 1000000 / clkdiv;
 
        if (lbc_hz < 66) {
                lbc->lcrr |= LCRR_DBYP; /* DLL Bypass */
index d4e7abebd43449dc68a1aa6c690e94acc0d9c439..ee9269504cb3c558a63479e0b671138865e61385 100644 (file)
@@ -248,7 +248,7 @@ local_bus_init(void)
 
        get_sys_info(&sysinfo);
        clkdiv = lbc->lcrr & LCRR_CLKDIV;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
+       lbc_hz = sysinfo.freq_systembus / 1000000 / clkdiv;
 
        if (lbc_hz < 66) {
                lbc->lcrr |= LCRR_DBYP; /* DLL Bypass */
index a45a5583c9362ad3739bdd771f337ee458417a11..162636ef8c0bbdeb98b6183c6b62e6f9cd00727b 100644 (file)
@@ -273,7 +273,7 @@ local_bus_init(void)
 
        get_sys_info(&sysinfo);
        clkdiv = lbc->lcrr & LCRR_CLKDIV;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
+       lbc_hz = sysinfo.freq_systembus / 1000000 / clkdiv;
 
        if (lbc_hz < 66) {
                lbc->lcrr = CONFIG_SYS_LBC_LCRR | LCRR_DBYP;    /* DLL Bypass */
index aa8badab48e9fce35d1c66f11291670916230753..681f052e41c238c309d0e65a73e2272b0cdc5bcb 100644 (file)
@@ -139,7 +139,7 @@ phys_size_t fixed_sdram(void)
        }
 
        ddr_size = (phys_size_t) CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
-       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0);
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
 
        if (set_ddr_laws(CONFIG_SYS_DDR_SDRAM_BASE, ddr_size,
                                        LAW_TRGT_IF_DDR_1) < 0) {
index 73289f3656d93702e2bf2389813f1bc4c3f92bcd..d0e712eb303112fadc49e5182b28867d336ab244 100644 (file)
@@ -26,7 +26,7 @@ void sdram_init(void)
 
        ddr_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO;
        ddr_ratio = ddr_ratio >> MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;
-       ddr_freq_mhz = (CONFIG_SYS_CLK_FREQ * ddr_ratio) / 0x1000000;
+       ddr_freq_mhz = (CONFIG_SYS_CLK_FREQ * ddr_ratio) / 1000000;
 
        /* mask off E bit */
        u32 svr = SVR_SOC_VER(mfspr(SPRN_SVR));
index cfc05f71243c1979d986f7355d4f4d46542e1409..3bc4f4325f0593eeb07f3fa6a017f91794f55629 100644 (file)
@@ -21,6 +21,9 @@ ifdef MINIMAL
 COBJS-y        += spl_minimal.o tlb.o law.o
 
 else
+ifdef CONFIG_SPL_BUILD
+COBJS-y += spl.o
+endif
 COBJS-y        += $(BOARD).o
 COBJS-y        += ddr.o
 COBJS-y        += law.o
diff --git a/board/freescale/p1022ds/spl.c b/board/freescale/p1022ds/spl.c
new file mode 100644 (file)
index 0000000..b9dbf81
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <ns16550.h>
+#include <malloc.h>
+#include <mmc.h>
+#include <nand.h>
+#include <i2c.h>
+#include "../common/ngpixis.h"
+#include <fsl_esdhc.h>
+#include <spi_flash.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static const u32 sysclk_tbl[] = {
+       66666000, 7499900, 83332500, 8999900,
+       99999000, 11111000, 12499800, 13333200
+};
+
+ulong get_effective_memsize(void)
+{
+       return CONFIG_SYS_L2_SIZE;
+}
+
+void board_init_f(ulong bootflag)
+{
+       int px_spd;
+       u32 plat_ratio, sys_clk, bus_clk;
+       ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
+
+       console_init_f();
+
+       /* Set pmuxcr to allow both i2c1 and i2c2 */
+       setbits_be32(&gur->pmuxcr, in_be32(&gur->pmuxcr) | 0x1000);
+       setbits_be32(&gur->pmuxcr,
+                    in_be32(&gur->pmuxcr) | MPC85xx_PMUXCR_SD_DATA);
+
+#ifdef CONFIG_SPL_SPI_BOOT
+       /* Enable the SPI */
+       clrsetbits_8(&pixis->brdcfg0, PIXIS_ELBC_SPI_MASK, PIXIS_SPI);
+#endif
+
+       /* Read back the register to synchronize the write. */
+       in_be32(&gur->pmuxcr);
+
+       /* initialize selected port with appropriate baud rate */
+       px_spd = in_8((unsigned char *)(PIXIS_BASE + PIXIS_SPD));
+       sys_clk = sysclk_tbl[px_spd & PIXIS_SPD_SYSCLK_MASK];
+       plat_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_PLAT_RATIO;
+       bus_clk = sys_clk * plat_ratio / 2;
+
+       NS16550_init((NS16550_t)CONFIG_SYS_NS16550_COM1,
+                    bus_clk / 16 / CONFIG_BAUDRATE);
+#ifdef CONFIG_SPL_MMC_BOOT
+       puts("\nSD boot...\n");
+#elif defined(CONFIG_SPL_SPI_BOOT)
+       puts("\nSPI Flash boot...\n");
+#endif
+
+       /* copy code to RAM and jump to it - this should not return */
+       /* NOTE - code has to be copied out of NAND buffer before
+        * other blocks can be read.
+        */
+       relocate_code(CONFIG_SPL_RELOC_STACK, 0, CONFIG_SPL_RELOC_TEXT_BASE);
+}
+
+void board_init_r(gd_t *gd, ulong dest_addr)
+{
+       /* Pointer is writable since we allocated a register for it */
+       gd = (gd_t *)CONFIG_SPL_GD_ADDR;
+       bd_t *bd;
+
+       memset(gd, 0, sizeof(gd_t));
+       bd = (bd_t *)(CONFIG_SPL_GD_ADDR + sizeof(gd_t));
+       memset(bd, 0, sizeof(bd_t));
+       gd->bd = bd;
+       bd->bi_memstart = CONFIG_SYS_INIT_L2_ADDR;
+       bd->bi_memsize = CONFIG_SYS_L2_SIZE;
+
+       probecpu();
+       get_clocks();
+       mem_malloc_init(CONFIG_SPL_RELOC_MALLOC_ADDR,
+                       CONFIG_SPL_RELOC_MALLOC_SIZE);
+#ifndef CONFIG_SPL_NAND_BOOT
+       env_init();
+#endif
+#ifdef CONFIG_SPL_MMC_BOOT
+       mmc_initialize(bd);
+#endif
+       /* relocate environment function pointers etc. */
+#ifdef CONFIG_SPL_NAND_BOOT
+       nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
+                           (uchar *)CONFIG_ENV_ADDR);
+
+       gd->env_addr  = (ulong)(CONFIG_ENV_ADDR);
+       gd->env_valid = 1;
+#else
+       env_relocate();
+#endif
+
+       i2c_init(CONFIG_SYS_FSL_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+
+       gd->ram_size = initdram(0);
+#ifdef CONFIG_SPL_NAND_BOOT
+       puts("Tertiary program loader running in sram...");
+#else
+       puts("Second program loader running in sram...\n");
+#endif
+
+#ifdef CONFIG_SPL_MMC_BOOT
+       mmc_boot();
+#elif defined(CONFIG_SPL_SPI_BOOT)
+       spi_boot();
+#elif defined(CONFIG_SPL_NAND_BOOT)
+       nand_boot();
+#endif
+}
index d150d95a2f0bc9bce9ef17399f5b5b720a15d8d7..8b343968437be445424cc94d06d71f7c20e9f115 100644 (file)
 #include <asm/fsl_ddr_sdram.h>
 
 
-/*
- * Fixed sdram init -- doesn't use serial presence detect.
- */
-void sdram_init(void)
-{
-       volatile ccsr_ddr_t *ddr = (ccsr_ddr_t *)CONFIG_SYS_MPC8xxx_DDR_ADDR;
-
-       __raw_writel(CONFIG_SYS_DDR_CS0_BNDS, &ddr->cs0_bnds);
-       __raw_writel(CONFIG_SYS_DDR_CS0_CONFIG, &ddr->cs0_config);
-#if CONFIG_CHIP_SELECTS_PER_CTRL > 1
-       __raw_writel(CONFIG_SYS_DDR_CS1_BNDS, &ddr->cs1_bnds);
-       __raw_writel(CONFIG_SYS_DDR_CS1_CONFIG, &ddr->cs1_config);
-#endif
-       __raw_writel(CONFIG_SYS_DDR_TIMING_3, &ddr->timing_cfg_3);
-       __raw_writel(CONFIG_SYS_DDR_TIMING_0, &ddr->timing_cfg_0);
-       __raw_writel(CONFIG_SYS_DDR_TIMING_1, &ddr->timing_cfg_1);
-       __raw_writel(CONFIG_SYS_DDR_TIMING_2, &ddr->timing_cfg_2);
-
-       __raw_writel(CONFIG_SYS_DDR_CONTROL_2, &ddr->sdram_cfg_2);
-       __raw_writel(CONFIG_SYS_DDR_MODE_1, &ddr->sdram_mode);
-       __raw_writel(CONFIG_SYS_DDR_MODE_2, &ddr->sdram_mode_2);
-
-       __raw_writel(CONFIG_SYS_DDR_INTERVAL, &ddr->sdram_interval);
-       __raw_writel(CONFIG_SYS_DDR_DATA_INIT, &ddr->sdram_data_init);
-       __raw_writel(CONFIG_SYS_DDR_CLK_CTRL, &ddr->sdram_clk_cntl);
-
-       __raw_writel(CONFIG_SYS_DDR_TIMING_4, &ddr->timing_cfg_4);
-       __raw_writel(CONFIG_SYS_DDR_TIMING_5, &ddr->timing_cfg_5);
-       __raw_writel(CONFIG_SYS_DDR_ZQ_CONTROL, &ddr->ddr_zq_cntl);
-       __raw_writel(CONFIG_SYS_DDR_WRLVL_CONTROL, &ddr->ddr_wrlvl_cntl);
-
-       /* Set, but do not enable the memory */
-       __raw_writel(CONFIG_SYS_DDR_CONTROL & ~SDRAM_CFG_MEM_EN,
-                       &ddr->sdram_cfg);
-
-       in_be32(&ddr->sdram_cfg);
-       udelay(500);
-
-       /* Let the controller go */
-       out_be32(&ddr->sdram_cfg, in_be32(&ddr->sdram_cfg) | SDRAM_CFG_MEM_EN);
-       in_be32(&ddr->sdram_cfg);
-
-       set_next_law(0, CONFIG_SYS_SDRAM_SIZE_LAW, LAW_TRGT_IF_DDR_1);
-}
-
 const static u32 sysclk_tbl[] = {
        66666000, 7499900, 83332500, 8999900,
        99999000, 11111000, 12499800, 13333200
@@ -68,6 +23,10 @@ void board_init_f(ulong bootflag)
        u32 plat_ratio, sys_clk, bus_clk;
        ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
 
+#if defined(CONFIG_SYS_NAND_BR_PRELIM) && defined(CONFIG_SYS_NAND_OR_PRELIM)
+       set_lbc_br(0, CONFIG_SYS_NAND_BR_PRELIM);
+       set_lbc_or(0, CONFIG_SYS_NAND_OR_PRELIM);
+#endif
        /* for FPGA */
        set_lbc_br(2, CONFIG_SYS_BR2_PRELIM);
        set_lbc_or(2, CONFIG_SYS_OR2_PRELIM);
@@ -83,9 +42,6 @@ void board_init_f(ulong bootflag)
 
        puts("\nNAND boot... ");
 
-       /* Initialize the DDR3 */
-       sdram_init();
-
        /* copy code to RAM and jump to it - this should not return */
        /* NOTE - code has to be copied out of NAND buffer before
         * other blocks can be read.
@@ -96,6 +52,7 @@ void board_init_f(ulong bootflag)
 
 void board_init_r(gd_t *gd, ulong dest_addr)
 {
+       puts("\nSecond program loader running in sram...");
        nand_boot();
 }
 
index 2eef6adbfa86717107571d319ab1a58705f1cb82..e7ae2e25b224acf62009cc39760c2b4e36ea5f30 100644 (file)
@@ -71,25 +71,32 @@ struct fsl_e_tlb_entry tlb_table[] = {
                      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                      0, 7, BOOKE_PAGESZ_4K, 1),
 
-#if defined(CONFIG_SYS_RAMBOOT) || defined(CONFIG_SPL)
+#if defined(CONFIG_SYS_RAMBOOT) || \
+       (defined(CONFIG_SPL) && !defined(CONFIG_SPL_COMMON_INIT_DDR))
        /* **** - eSDHC/eSPI/NAND boot */
        SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,
-                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
-                       0, 8, BOOKE_PAGESZ_1G, 1),
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 8, BOOKE_PAGESZ_1G, 1),
        /* **** - eSDHC/eSPI/NAND boot - second 1GB of memory */
        SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000,
-                       CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000,
-                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
-                       0, 9, BOOKE_PAGESZ_1G, 1),
+                     CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 9, BOOKE_PAGESZ_1G, 1),
 #endif
 
 #ifdef CONFIG_SYS_NAND_BASE
        /* *I*G - NAND */
        SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS,
-                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
-                       0, 10, BOOKE_PAGESZ_16K, 1),
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 10, BOOKE_PAGESZ_16K, 1),
 #endif
 
+#ifdef CONFIG_SYS_INIT_L2_ADDR
+       /* *I*G - L2SRAM */
+       SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L2_ADDR, CONFIG_SYS_INIT_L2_ADDR_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_G,
+                     0, 11, BOOKE_PAGESZ_256K, 1)
+#endif
 };
 
 int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 0038077fcc3d54cb84bce49ddd9e5d7ab26a9ea7..5bee22e638044a282f69b44030560cb7e6ef1afe 100644 (file)
@@ -220,7 +220,7 @@ phys_size_t fixed_sdram (void)
                ddr_cfg_regs.cs[0].bnds = 0x0000001F;
        }
 
-       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0);
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
 
        set_ddr_laws(0, ddr_size, LAW_TRGT_IF_DDR_1);
        return ddr_size;
index 44377317dd0b47e3ee374fbfa4b87c17ee5fb944..f4cc43fbfac130dcc4d58d9817980d23b5678210 100644 (file)
@@ -3,6 +3,7 @@ Overview
 P1_P2_RDB_PC represents a set of boards including
     P1020MSBG-PC
     P1020RDB-PC
+    P1020RDB-PD
     P1020UTM-PC
     P1021RDB-PC
     P1024RDB
index 9355536b35d072a3a84f045db39fa5cf25045b7a..c0b72e035e924a9e295165b6d92c9e4a48ee5fa4 100644 (file)
@@ -80,7 +80,7 @@ dimm_params_t ddr_raw_timing = {
        .refresh_rate_ps = 7800000,
        .tFAW_ps = 30000,
 };
-#elif defined(CONFIG_P1020MBG)
+#elif (defined(CONFIG_P1020MBG) || defined(CONFIG_P1020RDB_PD))
 /* Micron MT41J512M8_187E */
 dimm_params_t ddr_raw_timing = {
        .n_ranks = 2,
@@ -111,7 +111,7 @@ dimm_params_t ddr_raw_timing = {
        .refresh_rate_ps = 7800000,
        .tFAW_ps = 37500,
 };
-#elif defined(CONFIG_P1020RDB)
+#elif defined(CONFIG_P1020RDB_PC)
 /*
  * Samsung K4B2G0846C-HCF8
  * The following timing are for "downshift"
@@ -247,11 +247,11 @@ phys_size_t fixed_sdram(void)
 
        get_sys_info(&sysinfo);
        printf("Configuring DDR for %s MT/s data rate\n",
-                       strmhz(buf, sysinfo.freqDDRBus));
+                       strmhz(buf, sysinfo.freq_ddrbus));
 
        ddr_size = CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
 
-       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0);
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
 
        if (set_ddr_laws(CONFIG_SYS_DDR_SDRAM_BASE,
                                ddr_size, LAW_TRGT_IF_DDR_1) < 0) {
index 93896dc7194f158e9e5b85adbfc662d57df018c3..d4561c7643d6130a86beafeb8a9a885ba299adfa 100644 (file)
@@ -94,7 +94,7 @@ struct fsl_e_tlb_entry tlb_table[] = {
                        MAS3_SX|MAS3_SW|MAS3_SR, 0,
                        0, 8, BOOKE_PAGESZ_1G, 1),
 
-#ifdef CONFIG_P1020MBG
+#if defined(CONFIG_P1020MBG) || defined(CONFIG_P1020RDB_PD)
        /* 2G DDR on P1020MBG, map the second 1G */
        SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000,
                        CONFIG_SYS_DDR_SDRAM_BASE + 0x40000000,
diff --git a/board/freescale/p1_twr/Makefile b/board/freescale/p1_twr/Makefile
new file mode 100644 (file)
index 0000000..915b9bc
--- /dev/null
@@ -0,0 +1,35 @@
+#
+# Copyright 2013 Freescale Semiconductor, Inc.
+#
+# SPDX-License-Identifier:     GPL-2.0+
+
+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) $(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/p1_twr/ddr.c b/board/freescale/p1_twr/ddr.c
new file mode 100644 (file)
index 0000000..67f69d7
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+#include <asm/immap_85xx.h>
+#include <asm/processor.h>
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/fsl_ddr_dimm_params.h>
+#include <asm/io.h>
+#include <asm/fsl_law.h>
+
+/* Fixed sdram init -- doesn't use serial presence detect. */
+phys_size_t fixed_sdram(void)
+{
+       sys_info_t sysinfo;
+       char buf[32];
+       size_t ddr_size;
+       fsl_ddr_cfg_regs_t ddr_cfg_regs = {
+               .cs[0].bnds = CONFIG_SYS_DDR_CS0_BNDS,
+               .cs[0].config = CONFIG_SYS_DDR_CS0_CONFIG,
+               .cs[0].config_2 = CONFIG_SYS_DDR_CS0_CONFIG_2,
+#if CONFIG_CHIP_SELECTS_PER_CTRL > 1
+               .cs[1].bnds = CONFIG_SYS_DDR_CS1_BNDS,
+               .cs[1].config = CONFIG_SYS_DDR_CS1_CONFIG,
+               .cs[1].config_2 = CONFIG_SYS_DDR_CS1_CONFIG_2,
+#endif
+               .timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3,
+               .timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0,
+               .timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1,
+               .timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2,
+               .ddr_sdram_cfg = CONFIG_SYS_DDR_CONTROL,
+               .ddr_sdram_cfg_2 = CONFIG_SYS_DDR_CONTROL_2,
+               .ddr_sdram_mode = CONFIG_SYS_DDR_MODE_1,
+               .ddr_sdram_mode_2 = CONFIG_SYS_DDR_MODE_2,
+               .ddr_sdram_md_cntl = CONFIG_SYS_DDR_MODE_CONTROL,
+               .ddr_sdram_interval = CONFIG_SYS_DDR_INTERVAL,
+               .ddr_data_init = CONFIG_SYS_DDR_DATA_INIT,
+               .ddr_sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL,
+               .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_CONTROL,
+               .ddr_wrlvl_cntl = CONFIG_SYS_DDR_WRLVL_CONTROL,
+               .ddr_sr_cntr = CONFIG_SYS_DDR_SR_CNTR,
+               .ddr_sdram_rcw_1 = CONFIG_SYS_DDR_RCW_1,
+               .ddr_sdram_rcw_2 = CONFIG_SYS_DDR_RCW_2
+       };
+
+       get_sys_info(&sysinfo);
+       printf("Configuring DDR for %s MT/s data rate\n",
+                       strmhz(buf, sysinfo.freq_ddrbus));
+
+       ddr_size = CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
+
+       fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
+
+       if (set_ddr_laws(CONFIG_SYS_DDR_SDRAM_BASE,
+                               ddr_size, LAW_TRGT_IF_DDR_1) < 0) {
+               printf("ERROR setting Local Access Windows for DDR\n");
+               return 0;
+       };
+
+       return ddr_size;
+}
diff --git a/board/freescale/p1_twr/law.c b/board/freescale/p1_twr/law.c
new file mode 100644 (file)
index 0000000..e79d8a4
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+struct law_entry law_table[] = {
+       SET_LAW(CONFIG_SYS_FLASH_BASE_PHYS, LAW_SIZE_64M, LAW_TRGT_IF_LBC),
+       SET_LAW(CONFIG_SYS_SSD_BASE_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_LBC)
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/p1_twr/p1_twr.c b/board/freescale/p1_twr/p1_twr.c
new file mode 100644 (file)
index 0000000..ea8db6f
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <command.h>
+#include <hwconfig.h>
+#include <pci.h>
+#include <i2c.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+#include <asm/cache.h>
+#include <asm/immap_85xx.h>
+#include <asm/fsl_pci.h>
+#include <asm/fsl_ddr_sdram.h>
+#include <asm/io.h>
+#include <asm/fsl_law.h>
+#include <asm/fsl_lbc.h>
+#include <asm/mp.h>
+#include <miiphy.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+#include <fsl_mdio.h>
+#include <tsec.h>
+#include <ioports.h>
+#include <asm/fsl_serdes.h>
+#include <netdev.h>
+
+#define SYSCLK_64      64000000
+#define SYSCLK_66      66666666
+
+unsigned long get_board_sys_clk(ulong dummy)
+{
+       ccsr_gur_t *gur = (void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       par_io_t *par_io = (par_io_t *) &(gur->qe_par_io);
+       unsigned int cpdat_val = 0;
+
+       /* Set-up up pin muxing based on board switch settings */
+       cpdat_val = par_io[1].cpdat;
+
+       /* Check switch setting for SYSCLK select (PB3)  */
+       if (cpdat_val & 0x10000000)
+               return SYSCLK_64;
+       else
+               return SYSCLK_66;
+
+       return 0;
+}
+
+#ifdef CONFIG_QE
+
+#define PCA_IOPORT_I2C_ADDR            0x23
+#define PCA_IOPORT_OUTPUT_CMD          0x2
+#define PCA_IOPORT_CFG_CMD             0x6
+
+const qe_iop_conf_t qe_iop_conf_tab[] = {
+
+#ifdef CONFIG_TWR_P1025
+       /* GPIO */
+       {1,  0, 1, 0, 0},
+       {1,  18, 1, 0, 0},
+
+       /* GPIO for switch options */
+       {1,  2, 2, 0, 0}, /* PROFIBUS_MODE_SEL */
+       {1,  3, 2, 0, 0}, /* SYS_CLK_SELECT */
+       {1,  29, 2, 0, 0}, /* LOCALBUS_QE_MUXSEL */
+       {1,  30, 2, 0, 0}, /* ETH_TDM_SEL */
+
+       /* QE_MUX_MDC */
+       {1,  19, 1, 0, 1}, /* QE_MUX_MDC */
+
+       /* QE_MUX_MDIO */
+       {1,  20, 3, 0, 1}, /* QE_MUX_MDIO */
+
+       /* UCC_1_MII */
+       {0, 23, 2, 0, 2}, /* CLK12 */
+       {0, 24, 2, 0, 1}, /* CLK9 */
+       {0,  7, 1, 0, 2}, /* ENET1_TXD0_SER1_TXD0 */
+       {0,  9, 1, 0, 2}, /* ENET1_TXD1_SER1_TXD1 */
+       {0, 11, 1, 0, 2}, /* ENET1_TXD2_SER1_TXD2 */
+       {0, 12, 1, 0, 2}, /* ENET1_TXD3_SER1_TXD3 */
+       {0,  6, 2, 0, 2}, /* ENET1_RXD0_SER1_RXD0 */
+       {0, 10, 2, 0, 2}, /* ENET1_RXD1_SER1_RXD1 */
+       {0, 14, 2, 0, 2}, /* ENET1_RXD2_SER1_RXD2 */
+       {0, 15, 2, 0, 2}, /* ENET1_RXD3_SER1_RXD3 */
+       {0,  5, 1, 0, 2}, /* ENET1_TX_EN_SER1_RTS_B */
+       {0, 13, 1, 0, 2}, /* ENET1_TX_ER */
+       {0,  4, 2, 0, 2}, /* ENET1_RX_DV_SER1_CTS_B */
+       {0,  8, 2, 0, 2}, /* ENET1_RX_ER_SER1_CD_B */
+       {0, 17, 2, 0, 2}, /* ENET1_CRS */
+       {0, 16, 2, 0, 2}, /* ENET1_COL */
+
+       /* UCC_5_RMII */
+       {1, 11, 2, 0, 1}, /* CLK13 */
+       {1, 7,  1, 0, 2}, /* ENET5_TXD0_SER5_TXD0 */
+       {1, 10, 1, 0, 2}, /* ENET5_TXD1_SER5_TXD1 */
+       {1, 6, 2, 0, 2}, /* ENET5_RXD0_SER5_RXD0 */
+       {1, 9, 2, 0, 2}, /* ENET5_RXD1_SER5_RXD1 */
+       {1, 5, 1, 0, 2}, /* ENET5_TX_EN_SER5_RTS_B */
+       {1, 4, 2, 0, 2}, /* ENET5_RX_DV_SER5_CTS_B */
+       {1, 8, 2, 0, 2}, /* ENET5_RX_ER_SER5_CD_B */
+
+       /* TDMA - clock option is configured in OS based on board setting */
+       {1, 23, 2, 0, 2}, /* TDMA_TXD */
+       {1, 25, 2, 0, 2}, /* TDMA_RXD */
+       {1, 26, 1, 0, 2}, /* TDMA_SYNC */
+#endif
+
+       {0,  0, 0, 0, QE_IOP_TAB_END} /* END of table */
+};
+#endif
+
+int board_early_init_f(void)
+{
+       ccsr_gur_t *gur = (void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+
+       setbits_be32(&gur->pmuxcr,
+                       (MPC85xx_PMUXCR_SDHC_CD | MPC85xx_PMUXCR_SDHC_WP));
+
+       /* SDHC_DAT[4:7] not exposed to pins (use as SPI) */
+       clrbits_be32(&gur->pmuxcr, MPC85xx_PMUXCR_SD_DATA);
+
+       return 0;
+}
+
+int checkboard(void)
+{
+       ccsr_gur_t *gur = (void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       u8 boot_status;
+
+       printf("Board: %s\n", CONFIG_BOARDNAME);
+
+       boot_status = ((gur->porbmsr) >> MPC85xx_PORBMSR_ROMLOC_SHIFT) & 0xf;
+       puts("rom_loc: ");
+       if (boot_status == PORBMSR_ROMLOC_NOR)
+               puts("nor flash");
+       else if (boot_status == PORBMSR_ROMLOC_SDHC)
+               puts("sd");
+       else
+               puts("unknown");
+       puts("\n");
+
+       return 0;
+}
+
+#ifdef CONFIG_PCI
+void pci_init_board(void)
+{
+       fsl_pcie_init_board(0);
+}
+#endif
+
+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 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 */
+       disable_tlb(flash_esel);
+
+       set_tlb(1, flashbase, CONFIG_SYS_FLASH_BASE_PHYS, /* tlb, epn, rpn */
+               MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,           /* perms, wimge */
+               0, flash_esel, BOOKE_PAGESZ_64M, 1);/* ts, esel, tsize, iprot */
+       return 0;
+}
+
+int board_eth_init(bd_t *bis)
+{
+       struct fsl_pq_mdio_info mdio_info;
+       struct tsec_info_struct tsec_info[4];
+       ccsr_gur_t *gur __attribute__((unused)) =
+               (void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       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);
+       if (is_serdes_configured(SGMII_TSEC2)) {
+               printf("eTSEC2 is in sgmii mode.\n");
+               tsec_info[num].flags |= TSEC_SGMII;
+       }
+       num++;
+#endif
+#ifdef CONFIG_TSEC3
+       SET_STD_TSEC_INFO(tsec_info[num], 3);
+       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);
+
+#if defined(CONFIG_UEC_ETH)
+       /* QE0 and QE3 need to be exposed for UCC1
+        * and UCC5 Eth mode (in PMUXCR register).
+        * Currently QE/LBC muxed pins assumed to be
+        * LBC for U-Boot and PMUXCR updated by OS if required */
+
+       uec_standard_init(bis);
+#endif
+
+       return pci_eth_init(bis);
+}
+
+#if defined(CONFIG_QE)
+static void fdt_board_fixup_qe_pins(void *blob)
+{
+       int node;
+
+       if (!hwconfig("qe")) {
+               /* For QE and eLBC pins multiplexing,
+                * When don't use QE function, remove
+                * qe node from dt blob.
+                */
+               node = fdt_path_offset(blob, "/qe");
+               if (node >= 0)
+                       fdt_del_node(blob, node);
+       } else {
+               /* For TWR Peripheral Modules - TWR-SER2
+                * board only can support Signal Port MII,
+                * so delete one UEC node when use MII port.
+                */
+               if (hwconfig("mii"))
+                       node = fdt_path_offset(blob, "/qe/ucc@2400");
+               else
+                       node = fdt_path_offset(blob, "/qe/ucc@2000");
+               if (node >= 0)
+                       fdt_del_node(blob, node);
+       }
+
+       return;
+}
+#endif
+
+#ifdef 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();
+
+       fdt_fixup_memory(blob, (u64)base, (u64)size);
+
+       FT_FSL_PCI_SETUP;
+
+#ifdef CONFIG_QE
+       do_fixup_by_compat(blob, "fsl,qe", "status", "okay",
+                       sizeof("okay"), 0);
+#endif
+#if defined(CONFIG_TWR_P1025)
+       fdt_board_fixup_qe_pins(blob);
+#endif
+       fdt_fixup_dr_usb(blob, bd);
+}
+#endif
diff --git a/board/freescale/p1_twr/tlb.c b/board/freescale/p1_twr/tlb.c
new file mode 100644 (file)
index 0000000..308335c
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#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_SX|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_SX|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_SX|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_SX|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,
+                       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),
+
+#ifndef CONFIG_SPL_BUILD
+       /* W**G* - Flash, localbus */
+       /* This will be changed to *I*G* after relocation to RAM. */
+       SET_TLB_ENTRY(1, CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE_PHYS,
+                       MAS3_SX|MAS3_SR, MAS2_W|MAS2_G,
+                       0, 2, BOOKE_PAGESZ_64M, 1),
+
+       /* W**G* - Flash, localbus */
+       /* This will be changed to *I*G* after relocation to RAM. */
+       SET_TLB_ENTRY(1, CONFIG_SYS_SSD_BASE, CONFIG_SYS_SSD_BASE_PHYS,
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 5, BOOKE_PAGESZ_1M, 1),
+
+#ifdef CONFIG_PCI
+       /* *I*G* - PCI memory 1.5G */
+       SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_MEM_VIRT, CONFIG_SYS_PCIE1_MEM_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 3, BOOKE_PAGESZ_1G, 1),
+
+       /* *I*G* - PCI I/O effective: 192K  */
+       SET_TLB_ENTRY(1, CONFIG_SYS_PCIE1_IO_VIRT, CONFIG_SYS_PCIE1_IO_PHYS,
+                       MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       0, 4, BOOKE_PAGESZ_256K, 1),
+#endif
+
+#endif
+
+#ifdef CONFIG_SYS_RAMBOOT
+       /* *I*G - eSDHC boot */
+       SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,
+                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                       0, 8, BOOKE_PAGESZ_1G, 1),
+#endif
+
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 08d10bc9c832f0e5b60532ed18e6c0b310a24484..60694a6723d1cb7c79edf4b6c6ff8747de91a361 100644 (file)
@@ -28,7 +28,6 @@ int checkboard(void)
 {
        u8 sw;
        struct cpu_type *cpu = gd->arch.cpu;
-       ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
        unsigned int i;
 
        printf("Board: %sRDB, ", cpu->name);
@@ -38,20 +37,6 @@ int checkboard(void)
        sw = CPLD_READ(fbank_sel);
        printf("vBank: %d\n", sw & 0x1);
 
-       /*
-        * Display the RCW, so that no one gets confused as to what RCW
-        * we're actually using for this boot.
-        */
-       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");
-
        /*
         * Display the actual SERDES reference clocks as configured by the
         * dip switches on the board.  Note that the SWx registers could
index 85df06690633fa783cc1eb1b5243c0c893f49b80..a2167b377bbb94207289ed0e3fad89630ed82495 100644 (file)
@@ -8,7 +8,8 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS-y        += $(BOARD).o
+COBJS-$(CONFIG_T4240QDS) += t4240qds.o
+COBJS-$(CONFIG_T4240EMU) += t4240emu.o
 COBJS-y        += ddr.o
 COBJS-$(CONFIG_T4240QDS)+= eth.o
 COBJS-$(CONFIG_PCI)    += pci.o
index 058d62511f5979fef8c9fc72502af540b79aed33..26ac2a54d253ab0434d1f1f3c20755cba056bcb4 100644 (file)
 #include <asm/fsl_ddr_sdram.h>
 #include <asm/fsl_ddr_dimm_params.h>
 #include <asm/fsl_law.h>
+#include "ddr.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
-struct board_specific_parameters {
-       u32 n_ranks;
-       u32 datarate_mhz_high;
-       u32 rank_gb;
-       u32 clk_adjust;
-       u32 wrlvl_start;
-       u32 wrlvl_ctl_2;
-       u32 wrlvl_ctl_3;
-       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_parameters udimm0[] = {
-       /*
-        * memory controller 0
-        *   num|  hi| rank|  clk| wrlvl |   wrlvl   |  wrlvl | cpo  |wrdata|2T
-        * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |      |delay |
-        */
-       {2,  1350, 4, 4,     8, 0x0809090b, 0x0c0c0d0a,   0xff,    2,  0},
-       {2,  1350, 0, 5,     7, 0x0709090b, 0x0c0c0d09,   0xff,    2,  0},
-       {2,  1666, 4, 4,     8, 0x080a0a0d, 0x0d10100b,   0xff,    2,  0},
-       {2,  1666, 0, 5,     7, 0x080a0a0c, 0x0d0d0e0a,   0xff,    2,  0},
-       {2,  1900, 0, 4,     8, 0x090a0b0e, 0x0f11120c,   0xff,    2,  0},
-       {2,  2140, 0, 4,     8, 0x090a0b0e, 0x0f11120c,   0xff,    2,  0},
-       {1,  1350, 0, 5,     8, 0x0809090b, 0x0c0c0d0a,   0xff,    2,  0},
-       {1,  1700, 0, 5,     8, 0x080a0a0c, 0x0c0d0e0a,   0xff,    2,  0},
-       {1,  1900, 0, 4,     8, 0x080a0a0c, 0x0e0e0f0a,   0xff,    2,  0},
-       {1,  2140, 0, 4,     8, 0x090a0b0c, 0x0e0f100b,   0xff,    2,  0},
-       {}
-};
-
-/*
- * The three slots have slightly different timing. The center values are good
- * for all slots. We use identical speed tables for them. In future use, if
- * DIMMs require separated tables, make more entries as needed.
- */
-static const struct board_specific_parameters *udimms[] = {
-       udimm0,
-};
-
-static const struct board_specific_parameters rdimm0[] = {
-       /*
-        * memory controller 0
-        *   num|  hi| rank|  clk| wrlvl |   wrlvl   |  wrlvl | cpo  |wrdata|2T
-        * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |      |delay |
-        */
-       {4,  1350, 0, 5,     9, 0x08070605, 0x07080805,   0xff,    2,  0},
-       {4,  1666, 0, 5,     8, 0x08070605, 0x07080805,   0xff,    2,  0},
-       {4,  2140, 0, 5,     8, 0x08070605, 0x07081805,   0xff,    2,  0},
-       {2,  1350, 0, 5,     7, 0x0809090b, 0x0c0c0d09,   0xff,    2,  0},
-       {2,  1666, 0, 5,     8, 0x080a0a0c, 0x0c0d0e0a,   0xff,    2,  0},
-       {2,  2140, 0, 5,     8, 0x090a0b0c, 0x0e0f100b,   0xff,    2,  0},
-       {1,  1350, 0, 5,     8, 0x0809090b, 0x0c0c0d0a,   0xff,    2,  0},
-       {1,  1700, 0, 5,     8, 0x080a0a0c, 0x0c0d0e0a,   0xff,    2,  0},
-       {1,  1900, 0, 4,     8, 0x080a0a0c, 0x0e0e0f0a,   0xff,    2,  0},
-       {1,  2140, 0, 4,     8, 0x090a0b0c, 0x0e0f100b,   0xff,    2,  0},
-       {}
-};
-
-/*
- * The three slots have slightly different timing. See comments above.
- */
-static const struct board_specific_parameters *rdimms[] = {
-       rdimm0,
-};
-
 void fsl_ddr_board_options(memctl_options_t *popts,
                                dimm_params_t *pdimm,
                                unsigned int ctrl_num)
diff --git a/board/freescale/t4qds/ddr.h b/board/freescale/t4qds/ddr.h
new file mode 100644 (file)
index 0000000..d0a0951
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __DDR_H__
+#define __DDR_H__
+struct board_specific_parameters {
+       u32 n_ranks;
+       u32 datarate_mhz_high;
+       u32 rank_gb;
+       u32 clk_adjust;
+       u32 wrlvl_start;
+       u32 wrlvl_ctl_2;
+       u32 wrlvl_ctl_3;
+       u32 cpo;
+       u32 write_data_delay;
+       u32 force_2T;
+};
+
+/*
+ * These tables contain 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.
+ */
+
+#ifdef CONFIG_T4240QDS
+static const struct board_specific_parameters udimm0[] = {
+       /*
+        * memory controller 0
+        *   num|  hi| rank|  clk| wrlvl |   wrlvl   |  wrlvl | cpo  |wrdata|2T
+        * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |      |delay |
+        */
+       {2,  1350, 4, 4,     8, 0x0809090b, 0x0c0c0d0a,   0xff,    2,  0},
+       {2,  1350, 0, 5,     7, 0x0709090b, 0x0c0c0d09,   0xff,    2,  0},
+       {2,  1666, 4, 4,     8, 0x080a0a0d, 0x0d10100b,   0xff,    2,  0},
+       {2,  1666, 0, 5,     7, 0x080a0a0c, 0x0d0d0e0a,   0xff,    2,  0},
+       {2,  1900, 0, 4,     8, 0x090a0b0e, 0x0f11120c,   0xff,    2,  0},
+       {2,  2140, 0, 4,     8, 0x090a0b0e, 0x0f11120c,   0xff,    2,  0},
+       {1,  1350, 0, 5,     8, 0x0809090b, 0x0c0c0d0a,   0xff,    2,  0},
+       {1,  1700, 0, 5,     8, 0x080a0a0c, 0x0c0d0e0a,   0xff,    2,  0},
+       {1,  1900, 0, 4,     8, 0x080a0a0c, 0x0e0e0f0a,   0xff,    2,  0},
+       {1,  2140, 0, 4,     8, 0x090a0b0c, 0x0e0f100b,   0xff,    2,  0},
+       {}
+};
+
+static const struct board_specific_parameters rdimm0[] = {
+       /*
+        * memory controller 0
+        *   num|  hi| rank|  clk| wrlvl |   wrlvl   |  wrlvl | cpo  |wrdata|2T
+        * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |      |delay |
+        */
+       {4,  1350, 0, 5,     9, 0x08070605, 0x06070806,   0xff,    2,  0},
+       {4,  1666, 0, 5,    11, 0x0a080706, 0x07090906,   0xff,    2,  0},
+       {4,  2140, 0, 5,    12, 0x0b090807, 0x080a0b07,   0xff,    2,  0},
+       {2,  1350, 0, 5,     9, 0x08070605, 0x06070806,   0xff,    2,  0},
+       {2,  1666, 0, 5,    11, 0x0a090806, 0x08090a06,   0xff,    2,  0},
+       {2,  2140, 0, 5,    12, 0x0b090807, 0x080a0b07,   0xff,    2,  0},
+       {1,  1350, 0, 5,     9, 0x08070605, 0x06070806,   0xff,    2,  0},
+       {1,  1666, 0, 5,    11, 0x0a090806, 0x08090a06,   0xff,    2,  0},
+       {1,  2140, 0, 4,    12, 0x0b090807, 0x080a0b07,   0xff,    2,  0},
+       {}
+};
+
+#else  /* CONFIG_T4240EMU */
+static const struct board_specific_parameters udimm0[] = {
+       /*
+        * memory controller 0
+        *   num|  hi| rank|  clk| wrlvl |   wrlvl   |  wrlvl | cpo  |wrdata|2T
+        * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |      |delay |
+        */
+       {2,  2140, 0, 4,     8, 0x0, 0x0,   0xff,    2,  0},
+       {1,  2140, 0, 4,     8, 0x0, 0x0,   0xff,    2,  0},
+       {}
+};
+
+static const struct board_specific_parameters rdimm0[] = {
+       /*
+        * memory controller 0
+        *   num|  hi| rank|  clk| wrlvl |   wrlvl   |  wrlvl | cpo  |wrdata|2T
+        * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |      |delay |
+        */
+       {4,  2140, 0, 5,     8, 0x0, 0x0,   0xff,    2,  0},
+       {2,  2140, 0, 5,     8, 0x0, 0x0,   0xff,    2,  0},
+       {1,  2140, 0, 4,     8, 0x0, 0x0,   0xff,    2,  0},
+       {}
+};
+#endif /* CONFIG_T4240EMU */
+
+/*
+ * The three slots have slightly different timing. The center values are good
+ * for all slots. We use identical speed tables for them. In future use, if
+ * DIMMs require separated tables, make more entries as needed.
+ */
+static const struct board_specific_parameters *udimms[] = {
+       udimm0,
+};
+
+/*
+ * The three slots have slightly different timing. See comments above.
+ */
+static const struct board_specific_parameters *rdimms[] = {
+       rdimm0,
+};
+
+
+#endif
index c771e17952c888b01c6963c90fdc56f8737063b5..b5f488bcba46c6d6de8b70db79cd3afd354ba5b9 100644 (file)
@@ -172,7 +172,10 @@ static int t4240qds_mdio_init(char *realbusname, u8 muxval)
 void board_ft_fman_fixup_port(void *blob, char * prop, phys_addr_t pa,
                                enum fm_port port, int offset)
 {
-       if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_SGMII) {
+       int interface = fm_info_get_enet_if(port);
+
+       if (interface == PHY_INTERFACE_MODE_SGMII ||
+           interface == PHY_INTERFACE_MODE_QSGMII) {
                switch (port) {
                case FM1_DTSEC1:
                        if (qsgmiiphy_fix[port])
@@ -272,6 +275,7 @@ void fdt_fixup_board_enet(void *fdt)
        for (i = FM1_DTSEC1; i < NUM_FM_PORTS; i++) {
                switch (fm_info_get_enet_if(i)) {
                case PHY_INTERFACE_MODE_SGMII:
+               case PHY_INTERFACE_MODE_QSGMII:
                        switch (mdio_mux[i]) {
                        case EMI1_SLOT1:
                                fdt_status_okay_by_alias(fdt, "emi1_slot1");
@@ -393,7 +397,7 @@ static void initialize_qsgmiiphy_fix(void)
 int board_eth_init(bd_t *bis)
 {
 #if defined(CONFIG_FMAN_ENET)
-       int i, idx, lane, slot;
+       int i, idx, lane, slot, interface;
        struct memac_mdio_info dtsec_mdio_info;
        struct memac_mdio_info tgec_mdio_info;
        ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
@@ -470,9 +474,9 @@ int board_eth_init(bd_t *bis)
                fm_info_set_phy_address(FM1_DTSEC6, slot_qsgmii_phyaddr[1][1]);
                if ((srds_prtcl_s2 != 56) && (srds_prtcl_s2 != 57)) {
                        fm_info_set_phy_address(FM1_DTSEC9,
-                                               slot_qsgmii_phyaddr[1][3]);
-                       fm_info_set_phy_address(FM1_DTSEC10,
                                                slot_qsgmii_phyaddr[1][2]);
+                       fm_info_set_phy_address(FM1_DTSEC10,
+                                               slot_qsgmii_phyaddr[1][3]);
                }
                break;
        case 40:
@@ -482,9 +486,9 @@ int board_eth_init(bd_t *bis)
                fm_info_set_phy_address(FM1_DTSEC6, slot_qsgmii_phyaddr[1][1]);
                if ((srds_prtcl_s2 != 56) && (srds_prtcl_s2 != 57)) {
                        fm_info_set_phy_address(FM1_DTSEC10,
-                                               slot_qsgmii_phyaddr[1][3]);
-                       fm_info_set_phy_address(FM1_DTSEC9,
                                                slot_qsgmii_phyaddr[1][2]);
+                       fm_info_set_phy_address(FM1_DTSEC9,
+                                               slot_qsgmii_phyaddr[1][3]);
                }
                fm_info_set_phy_address(FM1_DTSEC1, slot_qsgmii_phyaddr[2][0]);
                fm_info_set_phy_address(FM1_DTSEC2, slot_qsgmii_phyaddr[2][1]);
@@ -498,15 +502,31 @@ int board_eth_init(bd_t *bis)
 
        for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) {
                idx = i - FM1_DTSEC1;
-               switch (fm_info_get_enet_if(i)) {
+               interface = fm_info_get_enet_if(i);
+               switch (interface) {
                case PHY_INTERFACE_MODE_SGMII:
-                       lane = serdes_get_first_lane(FSL_SRDS_1,
+               case PHY_INTERFACE_MODE_QSGMII:
+                       if (interface == PHY_INTERFACE_MODE_QSGMII) {
+                               if (idx <= 3)
+                                       lane = serdes_get_first_lane(FSL_SRDS_1,
+                                                       QSGMII_FM1_A);
+                               else
+                                       lane = serdes_get_first_lane(FSL_SRDS_1,
+                                                       QSGMII_FM1_B);
+                               if (lane < 0)
+                                       break;
+                               slot = lane_to_slot_fsm1[lane];
+                               debug("FM1@DTSEC%u expects QSGMII in slot %u\n",
+                                     idx + 1, slot);
+                       } else {
+                               lane = serdes_get_first_lane(FSL_SRDS_1,
                                                SGMII_FM1_DTSEC1 + idx);
-                       if (lane < 0)
-                               break;
-                       slot = lane_to_slot_fsm1[lane];
-                       debug("FM1@DTSEC%u expects SGMII in slot %u\n",
-                               idx + 1, slot);
+                               if (lane < 0)
+                                       break;
+                               slot = lane_to_slot_fsm1[lane];
+                               debug("FM1@DTSEC%u expects SGMII in slot %u\n",
+                                     idx + 1, slot);
+                       }
                        if (QIXIS_READ(present2) & (1 << (slot - 1)))
                                fm_disable_port(i);
                        switch (slot) {
@@ -600,8 +620,8 @@ int board_eth_init(bd_t *bis)
                fm_info_set_phy_address(FM2_DTSEC4, slot_qsgmii_phyaddr[4][3]);
                fm_info_set_phy_address(FM2_DTSEC5, slot_qsgmii_phyaddr[3][0]);
                fm_info_set_phy_address(FM2_DTSEC6, slot_qsgmii_phyaddr[3][1]);
-               fm_info_set_phy_address(FM2_DTSEC9, slot_qsgmii_phyaddr[3][3]);
-               fm_info_set_phy_address(FM2_DTSEC10, slot_qsgmii_phyaddr[3][2]);
+               fm_info_set_phy_address(FM2_DTSEC9, slot_qsgmii_phyaddr[3][2]);
+               fm_info_set_phy_address(FM2_DTSEC10, slot_qsgmii_phyaddr[3][3]);
                break;
        case 40:
        case 46:
@@ -641,15 +661,31 @@ int board_eth_init(bd_t *bis)
 
        for (i = FM2_DTSEC1; i < FM2_DTSEC1 + CONFIG_SYS_NUM_FM2_DTSEC; i++) {
                idx = i - FM2_DTSEC1;
-               switch (fm_info_get_enet_if(i)) {
+               interface = fm_info_get_enet_if(i);
+               switch (interface) {
                case PHY_INTERFACE_MODE_SGMII:
-                       lane = serdes_get_first_lane(FSL_SRDS_2,
+               case PHY_INTERFACE_MODE_QSGMII:
+                       if (interface == PHY_INTERFACE_MODE_QSGMII) {
+                               if (idx <= 3)
+                                       lane = serdes_get_first_lane(FSL_SRDS_2,
+                                                       QSGMII_FM2_A);
+                               else
+                                       lane = serdes_get_first_lane(FSL_SRDS_2,
+                                                       QSGMII_FM2_B);
+                               if (lane < 0)
+                                       break;
+                               slot = lane_to_slot_fsm2[lane];
+                               debug("FM2@DTSEC%u expects QSGMII in slot %u\n",
+                                     idx + 1, slot);
+                       } else {
+                               lane = serdes_get_first_lane(FSL_SRDS_2,
                                                SGMII_FM2_DTSEC1 + idx);
-                       if (lane < 0)
-                               break;
-                       slot = lane_to_slot_fsm2[lane];
-                       debug("FM2@DTSEC%u expects SGMII in slot %u\n",
-                               idx + 1, slot);
+                               if (lane < 0)
+                                       break;
+                               slot = lane_to_slot_fsm2[lane];
+                               debug("FM2@DTSEC%u expects SGMII in slot %u\n",
+                                     idx + 1, slot);
+                       }
                        if (QIXIS_READ(present2) & (1 << (slot - 1)))
                                fm_disable_port(i);
                        switch (slot) {
index 63549df2aa1ab155df4f79528b4f7dd8c87de7af..367783bfe4311c7a58665a1788510eeebbbb9cbf 100644 (file)
@@ -19,7 +19,9 @@ struct law_entry law_table[] = {
 #ifdef CONFIG_SYS_QMAN_MEM_PHYS
        SET_LAW(CONFIG_SYS_QMAN_MEM_PHYS, LAW_SIZE_32M, LAW_TRGT_IF_QMAN),
 #endif
+#ifdef QIXIS_BASE_PHYS
        SET_LAW(QIXIS_BASE_PHYS, LAW_SIZE_4K, LAW_TRGT_IF_IFC),
+#endif
 #ifdef CONFIG_SYS_DCSRBAR_PHYS
        /* Limit DCSR to 32M to access NPC Trace Buffer */
        SET_LAW(CONFIG_SYS_DCSRBAR_PHYS, LAW_SIZE_32M, LAW_TRGT_IF_DCSR),
diff --git a/board/freescale/t4qds/t4240emu.c b/board/freescale/t4qds/t4240emu.c
new file mode 100644 (file)
index 0000000..7a61036
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <command.h>
+#include <i2c.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>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+       struct cpu_type *cpu = gd->arch.cpu;
+
+       printf("Board: %sEMU\n", cpu->name);
+
+       return 0;
+}
+
+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 */
+       disable_tlb(flash_esel);
+
+       set_tlb(1, flashbase, CONFIG_SYS_FLASH_BASE_PHYS,
+               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
+
+       return 0;
+}
+
+int misc_init_r(void)
+{
+       return 0;
+}
+
+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);
+
+       fdt_fixup_liodn(blob);
+       fdt_fixup_dr_usb(blob, bd);
+}
similarity index 88%
rename from board/freescale/t4qds/t4qds.c
rename to board/freescale/t4qds/t4240qds.c
index aa6a217f39dd52440feff393d06590ad3a3e4473..0c1a4fbd9ff7b4f6a44656f740290a8e15f23f15 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static const int8_t vsc3316_fsm1_tx[8][2] = { {0, 0}, {1, 1}, {6, 6}, {7, 7},
+static int8_t vsc3316_fsm1_tx[8][2] = { {0, 0}, {1, 1}, {6, 6}, {7, 7},
                                {8, 8}, {9, 9}, {14, 14}, {15, 15} };
 
-static const int8_t vsc3316_fsm2_tx[8][2] = { {2, 2}, {3, 3}, {4, 4}, {5, 5},
+static int8_t vsc3316_fsm2_tx[8][2] = { {2, 2}, {3, 3}, {4, 4}, {5, 5},
                                {10, 10}, {11, 11}, {12, 12}, {13, 13} };
 
-static const int8_t vsc3316_fsm1_rx[8][2] = { {2, 12}, {3, 13}, {4, 5}, {5, 4},
+static int8_t vsc3316_fsm1_rx[8][2] = { {2, 12}, {3, 13}, {4, 5}, {5, 4},
                                {10, 11}, {11, 10}, {12, 2}, {13, 3} };
 
-static const int8_t vsc3316_fsm2_rx[8][2] = { {0, 15}, {1, 14}, {6, 7}, {7, 6},
+static int8_t vsc3316_fsm2_rx[8][2] = { {0, 15}, {1, 14}, {6, 7}, {7, 6},
                                {8, 9}, {9, 8}, {14, 1}, {15, 0} };
 
 int checkboard(void)
@@ -43,12 +43,11 @@ int checkboard(void)
        char buf[64];
        u8 sw;
        struct cpu_type *cpu = gd->arch.cpu;
-       ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
        unsigned int i;
 
        printf("Board: %sQDS, ", cpu->name);
        printf("Sys ID: 0x%02x, Sys Ver: 0x%02x, ",
-               QIXIS_READ(id), QIXIS_READ(arch));
+              QIXIS_READ(id), QIXIS_READ(arch));
 
        sw = QIXIS_READ(brdcfg[0]);
        sw = (sw & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
@@ -63,24 +62,11 @@ int checkboard(void)
                printf("invalid setting of SW%u\n", QIXIS_LBMAP_SWITCH);
 
        printf("FPGA: v%d (%s), build %d",
-               (int)QIXIS_READ(scver), qixis_read_tag(buf),
-               (int)qixis_read_minor());
+              (int)QIXIS_READ(scver), qixis_read_tag(buf),
+              (int)qixis_read_minor());
        /* the timestamp string contains "\n" at the end */
        printf(" on %s", qixis_read_time(buf));
 
-       /* Display the RCW, so that no one gets confused as to what RCW
-        * we're actually using for this boot.
-        */
-       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");
-
        /*
         * Display the actual SERDES reference clocks as configured by the
         * dip switches on the board.  Note that the SWx registers could
@@ -92,7 +78,7 @@ int checkboard(void)
        puts("SERDES Reference Clocks: ");
        sw = QIXIS_READ(brdcfg[2]);
        for (i = 0; i < MAX_SERDES; i++) {
-               static const char *freq[] = {
+               static const char * const freq[] = {
                        "100", "125", "156.25", "161.1328125"};
                unsigned int clock = (sw >> (6 - 2 * i)) & 3;
 
@@ -367,25 +353,60 @@ int config_frontside_crossbar_vsc3316(void)
        srds_prtcl_s1 = in_be32(&gur->rcwsr[4]) &
                        FSL_CORENET2_RCWSR4_SRDS1_PRTCL;
        srds_prtcl_s1 >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT;
-       if (srds_prtcl_s1) {
+       switch (srds_prtcl_s1) {
+       case 38:
+               /* swap first lane and third lane on slot1 */
+               vsc3316_fsm1_tx[0][1] = 14;
+               vsc3316_fsm1_tx[6][1] = 0;
+               vsc3316_fsm1_rx[1][1] = 2;
+               vsc3316_fsm1_rx[6][1] = 13;
+       case 40:
+       case 46:
+       case 48:
+               /* swap first lane and third lane on slot2 */
+               vsc3316_fsm1_tx[2][1] = 8;
+               vsc3316_fsm1_tx[4][1] = 6;
+               vsc3316_fsm1_rx[2][1] = 10;
+               vsc3316_fsm1_rx[5][1] = 5;
+       default:
                ret = vsc3316_config(VSC3316_FSM_TX_ADDR, vsc3316_fsm1_tx, 8);
                if (ret)
                        return ret;
                ret = vsc3316_config(VSC3316_FSM_RX_ADDR, vsc3316_fsm1_rx, 8);
                if (ret)
                        return ret;
+               break;
        }
 
        srds_prtcl_s2 = in_be32(&gur->rcwsr[4]) &
                                FSL_CORENET2_RCWSR4_SRDS2_PRTCL;
        srds_prtcl_s2 >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT;
-       if (srds_prtcl_s2) {
+       switch (srds_prtcl_s2) {
+       case 38:
+               /* swap first lane and third lane on slot3 */
+               vsc3316_fsm2_tx[2][1] = 11;
+               vsc3316_fsm2_tx[5][1] = 4;
+               vsc3316_fsm2_rx[2][1] = 9;
+               vsc3316_fsm2_rx[4][1] = 7;
+       case 40:
+       case 46:
+       case 48:
+       case 50:
+       case 52:
+       case 54:
+               /* swap first lane and third lane on slot4 */
+               vsc3316_fsm2_tx[6][1] = 3;
+               vsc3316_fsm2_tx[1][1] = 12;
+               vsc3316_fsm2_rx[0][1] = 1;
+               vsc3316_fsm2_rx[6][1] = 15;
+       default:
                ret = vsc3316_config(VSC3316_FSM_TX_ADDR, vsc3316_fsm2_tx, 8);
                if (ret)
                        return ret;
                ret = vsc3316_config(VSC3316_FSM_RX_ADDR, vsc3316_fsm2_rx, 8);
                if (ret)
                        return ret;
+               break;
        }
 
        return 0;
@@ -430,7 +451,7 @@ int config_backside_crossbar_mux(void)
                break;
        default:
                printf("WARNING: unsupported for SerDes3 Protocol %d\n",
-                               srds_prtcl_s3);
+                      srds_prtcl_s3);
                return -1;
        }
 
@@ -470,7 +491,7 @@ int config_backside_crossbar_mux(void)
                break;
        default:
                printf("WARNING: unsupported for SerDes4 Protocol %d\n",
-                               srds_prtcl_s4);
+                      srds_prtcl_s4);
                return -1;
        }
 
@@ -495,8 +516,8 @@ int board_early_init_r(void)
        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);
+               MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+               0, flash_esel, BOOKE_PAGESZ_256M, 1);
 
        set_liodns();
 #ifdef CONFIG_SYS_DPAA_QBMAN
@@ -634,9 +655,8 @@ int misc_init_r(void)
                u32 pllcr0 = srds_regs->bank[i].pllcr0;
                u32 expected = pllcr0 & SRDS_PLLCR0_RFCK_SEL_MASK;
                if (expected != actual[i]) {
-                       printf("Warning: SERDES%u expects reference clock"
-                              " %sMHz, but actual is %sMHz\n", i + 1,
-                              serdes_clock_to_string(expected),
+                       printf("Warning: SERDES%u expects reference clock %sMHz, but actual is %sMHz\n",
+                              i + 1, serdes_clock_to_string(expected),
                               serdes_clock_to_string(actual[i]));
                }
        }
@@ -795,42 +815,44 @@ void qixis_dump_switch(void)
        }
 
        sw[0] = dutcfg[0];
-       sw[1] = (dutcfg[1] << 0x07)             | \
-               ((dutcfg[12] & 0xC0) >> 1)      | \
-               ((dutcfg[11] & 0xE0) >> 3)      | \
-               ((dutcfg[6] & 0x80) >> 6)       | \
+       sw[1] = (dutcfg[1] << 0x07)             |
+               ((dutcfg[12] & 0xC0) >> 1)      |
+               ((dutcfg[11] & 0xE0) >> 3)      |
+               ((dutcfg[6] & 0x80) >> 6)       |
                ((dutcfg[1] & 0x80) >> 7);
-       sw[2] = ((brdcfg[1] & 0x0f) << 4)       | \
-               ((brdcfg[1] & 0x30) >> 2)       | \
-               ((brdcfg[1] & 0x40) >> 5)       | \
+       sw[2] = ((brdcfg[1] & 0x0f) << 4)       |
+               ((brdcfg[1] & 0x30) >> 2)       |
+               ((brdcfg[1] & 0x40) >> 5)       |
                ((brdcfg[1] & 0x80) >> 7);
        sw[3] = brdcfg[2];
-       sw[4] = ((dutcfg[2] & 0x01) << 7)       | \
-               ((dutcfg[2] & 0x06) << 4)       | \
-               ((~QIXIS_READ(present)) & 0x10) | \
-               ((brdcfg[3] & 0x80) >> 4)       | \
-               ((brdcfg[3] & 0x01) << 2)       | \
-               ((brdcfg[6] == 0x62) ? 3 :      \
-               ((brdcfg[6] == 0x5a) ? 2 :      \
+       sw[4] = ((dutcfg[2] & 0x01) << 7)       |
+               ((dutcfg[2] & 0x06) << 4)       |
+               ((~QIXIS_READ(present)) & 0x10) |
+               ((brdcfg[3] & 0x80) >> 4)       |
+               ((brdcfg[3] & 0x01) << 2)       |
+               ((brdcfg[6] == 0x62) ? 3 :
+               ((brdcfg[6] == 0x5a) ? 2 :
                ((brdcfg[6] == 0x5e) ? 1 : 0)));
-       sw[5] = ((brdcfg[0] & 0x0f) << 4)       | \
-               ((QIXIS_READ(rst_ctl) & 0x30) >> 2) | \
+       sw[5] = ((brdcfg[0] & 0x0f) << 4)       |
+               ((QIXIS_READ(rst_ctl) & 0x30) >> 2) |
                ((brdcfg[0] & 0x40) >> 5);
        sw[6] = (brdcfg[11] & 0x20)             |
                ((brdcfg[5] & 0x02) << 3);
-       sw[7] = (((~QIXIS_READ(rst_ctl)) & 0x40) << 1) | \
+       sw[7] = (((~QIXIS_READ(rst_ctl)) & 0x40) << 1) |
                ((brdcfg[5] & 0x10) << 2);
-       sw[8] = ((brdcfg[12] & 0x08) << 4)      | \
+       sw[8] = ((brdcfg[12] & 0x08) << 4)      |
                ((brdcfg[12] & 0x03) << 5);
 
        puts("DIP switch (reverse-engineering)\n");
        for (i = 0; i < 9; i++) {
                printf("SW%d         = 0b%s (0x%02x)\n",
-                       i + 1, byte_to_binary_mask(sw[i], mask[i], buf), sw[i]);
+                      i + 1, byte_to_binary_mask(sw[i], mask[i], buf), sw[i]);
        }
 }
 
-static int do_vdd_adjust(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_vdd_adjust(cmd_tbl_t *cmdtp,
+                        int flag, int argc,
+                        char * const argv[])
 {
        ulong override;
 
index b27356a5f7fa46ac32e00e0326799043097f81be..b701e7520938d0d98321ece92f7836af1d98fc3a 100644 (file)
@@ -120,9 +120,11 @@ struct fsl_e_tlb_entry tlb_table[] = {
                        MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                        0, 16, BOOKE_PAGESZ_64K, 1),
 #endif
+#ifdef QIXIS_BASE_PHYS
        SET_TLB_ENTRY(1, QIXIS_BASE, QIXIS_BASE_PHYS,
                      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                      0, 17, BOOKE_PAGESZ_4K, 1),
+#endif
 #ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
        /*
         * SRIO_PCIE_BOOT-SLAVE. 1M space from 0xffe00000 for
index f0df2e39e6a9159c5a2641d66cd40ccc9dc2cd66..426dc05c7d3cea53fda73193e25a3a2e40007aa2 100644 (file)
 #define REFLECTION_TESTPATTERN 0xdede
 #define REFLECTION_TESTPATTERN_INV (~REFLECTION_TESTPATTERN & 0xffff)
 
+#ifdef CONFIG_SYS_FPGA_NO_RFL_HI
+#define REFLECTION_TESTREG reflection_low
+#else
+#define REFLECTION_TESTREG reflection_high
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 int get_fpga_state(unsigned dev)
@@ -90,23 +96,17 @@ int board_early_init_r(void)
        gd405ep_set_fpga_reset(0);
 
        for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) {
-               struct ihs_fpga *fpga =
-                       (struct ihs_fpga *)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);
+                       u16 val;
+
+                       FPGA_SET_REG(k, reflection_low, REFLECTION_TESTPATTERN);
 
-                       if (in_le16(reflection_target) ==
-                               REFLECTION_TESTPATTERN_INV)
+                       FPGA_GET_REG(k, REFLECTION_TESTREG, &val);
+                       if (val == REFLECTION_TESTPATTERN_INV)
                                break;
 
                        udelay(100000);
index 48d878643bf275c9b95c7d9de1d9700b42953369..35dfbbc577aa9c6864017a2831257baf36192fa3 100644 (file)
@@ -55,6 +55,8 @@ enum {
        RAM_DDR2_64 = 2,
 };
 
+struct ihs_fpga *fpga_ptr[] = CONFIG_SYS_FPGA_PTR;
+
 int misc_init_r(void)
 {
        /* startup fans */
@@ -79,10 +81,9 @@ static unsigned int get_mc2_present(void)
 
 static void print_fpga_info(unsigned dev)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *) 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);
+       u16 versions;
+       u16 fpga_version;
+       u16 fpga_features;
        unsigned unit_type;
        unsigned hardware_version;
        unsigned feature_rs232;
@@ -96,6 +97,10 @@ static void print_fpga_info(unsigned dev)
 
        printf("FPGA%d: ", dev);
 
+       FPGA_GET_REG(dev, versions, &versions);
+       FPGA_GET_REG(dev, fpga_version, &fpga_version);
+       FPGA_GET_REG(dev, fpga_features, &fpga_features);
+
        hardware_version = versions & 0x000f;
 
        if (fpga_state
@@ -247,8 +252,9 @@ int checkboard(void)
 
 int last_stage_init(void)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
-       u16 versions = in_le16(&fpga->versions);
+       u16 versions;
+
+       FPGA_GET_REG(0, versions, &versions);
 
        print_fpga_info(0);
        if (get_mc2_present())
index eee9ba0aaa15c8b809a84f30c17892c5fe97d471..03d796cdb89b1b09eb9662328ea862341629d3a9 100644 (file)
@@ -37,6 +37,8 @@ enum {
        HWVER_122 = 3,
 };
 
+struct ihs_fpga *fpga_ptr[] = CONFIG_SYS_FPGA_PTR;
+
 int misc_init_r(void)
 {
        /* startup fans */
@@ -101,15 +103,18 @@ int checkboard(void)
 
 static void print_fpga_info(void)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
-       u16 versions = in_le16(&fpga->versions);
-       u16 fpga_version = in_le16(&fpga->fpga_version);
-       u16 fpga_features = in_le16(&fpga->fpga_features);
+       u16 versions;
+       u16 fpga_version;
+       u16 fpga_features;
        unsigned unit_type;
        unsigned hardware_version;
        unsigned feature_channels;
        unsigned feature_expansion;
 
+       FPGA_GET_REG(0, versions, &versions);
+       FPGA_GET_REG(0, fpga_version, &fpga_version);
+       FPGA_GET_REG(0, fpga_features, &fpga_features);
+
        unit_type = (versions & 0xf000) >> 12;
        hardware_version = versions & 0x000f;
        feature_channels = fpga_features & 0x007f;
@@ -163,7 +168,6 @@ static void print_fpga_info(void)
  */
 int last_stage_init(void)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
        unsigned int k;
 
        print_fpga_info();
@@ -175,7 +179,7 @@ int last_stage_init(void)
                configure_gbit_phy(k);
 
        /* take fpga serdes blocks out of reset */
-       out_le16(&fpga->quad_serdes_reset, 0);
+       FPGA_SET_REG(0, quad_serdes_reset, 0);
 
        return 0;
 }
index c728bc7b73accde0d68827e80dccbe4d6280b724..7a98e41d0aacc2c444030924a5c6a7856184d37f 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <common.h>
 #include <command.h>
+#include <errno.h>
 #include <asm/processor.h>
 #include <asm/io.h>
 #include <asm/ppc4xx-gpio.h>
 #include <gdsys_fpga.h>
 
 #include "../common/osd.h"
+#include "../common/mclink.h"
+
+#include <i2c.h>
+#include <pca953x.h>
+#include <pca9698.h>
+
+#include <miiphy.h>
+
+DECLARE_GLOBAL_DATA_PTR;
 
 #define LATCH0_BASE (CONFIG_SYS_LATCH_BASE)
 #define LATCH1_BASE (CONFIG_SYS_LATCH_BASE + 0x100)
 #define LATCH2_BASE (CONFIG_SYS_LATCH_BASE + 0x200)
 
+#define MAX_MUX_CHANNELS 2
+
 enum {
        UNITTYPE_MAIN_SERVER = 0,
        UNITTYPE_MAIN_USER = 1,
@@ -31,11 +43,22 @@ enum {
        HWVER_100 = 0,
        HWVER_104 = 1,
        HWVER_110 = 2,
+       HWVER_120 = 3,
+       HWVER_200 = 4,
+       HWVER_210 = 5,
+       HWVER_220 = 6,
+       HWVER_230 = 7,
+};
+
+enum {
+       FPGA_HWVER_200 = 0,
+       FPGA_HWVER_210 = 1,
 };
 
 enum {
        COMPRESSION_NONE = 0,
-       COMPRESSION_TYPE1_DELTA,
+       COMPRESSION_TYPE1_DELTA = 1,
+       COMPRESSION_TYPE1_TYPE2_DELTA = 3,
 };
 
 enum {
@@ -51,8 +74,75 @@ enum {
 
 enum {
        RAM_DDR2_32 = 0,
+       RAM_DDR3_32 = 1,
 };
 
+enum {
+       CARRIER_SPEED_1G = 0,
+       CARRIER_SPEED_2_5G = 1,
+};
+
+enum {
+       MCFPGA_DONE = 1 << 0,
+       MCFPGA_INIT_N = 1 << 1,
+       MCFPGA_PROGRAM_N = 1 << 2,
+       MCFPGA_UPDATE_ENABLE_N = 1 << 3,
+       MCFPGA_RESET_N = 1 << 4,
+};
+
+enum {
+       GPIO_MDC = 1 << 14,
+       GPIO_MDIO = 1 << 15,
+};
+
+unsigned int mclink_fpgacount;
+struct ihs_fpga *fpga_ptr[] = CONFIG_SYS_FPGA_PTR;
+
+static int setup_88e1518(const char *bus, unsigned char addr);
+
+int fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data)
+{
+       int res;
+
+       switch (fpga) {
+       case 0:
+               out_le16(reg, data);
+               break;
+       default:
+               res = mclink_send(fpga - 1, regoff, data);
+               if (res < 0) {
+                       printf("mclink_send reg %02lx data %04x returned %d\n",
+                              regoff, data, res);
+                       return res;
+               }
+               break;
+       }
+
+       return 0;
+}
+
+int fpga_get_reg(u32 fpga, u16 *reg, off_t regoff, u16 *data)
+{
+       int res;
+
+       switch (fpga) {
+       case 0:
+               *data = in_le16(reg);
+               break;
+       default:
+               if (fpga > mclink_fpgacount)
+                       return -EINVAL;
+               res = mclink_receive(fpga - 1, regoff, data);
+               if (res < 0) {
+                       printf("mclink_receive reg %02lx returned %d\n",
+                              regoff, res);
+                       return res;
+               }
+       }
+
+       return 0;
+}
+
 /*
  * Check Board Identity:
  */
@@ -74,12 +164,11 @@ int checkboard(void)
        return 0;
 }
 
-static void print_fpga_info(void)
+static void print_fpga_info(unsigned int fpga, bool rgmii2_present)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
-       u16 versions = in_le16(&fpga->versions);
-       u16 fpga_version = in_le16(&fpga->fpga_version);
-       u16 fpga_features = in_le16(&fpga->fpga_features);
+       u16 versions;
+       u16 fpga_version;
+       u16 fpga_features;
        unsigned unit_type;
        unsigned hardware_version;
        unsigned feature_compression;
@@ -87,19 +176,29 @@ static void print_fpga_info(void)
        unsigned feature_audio;
        unsigned feature_sysclock;
        unsigned feature_ramconfig;
+       unsigned feature_carrier_speed;
        unsigned feature_carriers;
        unsigned feature_video_channels;
 
+       int legacy = get_fpga_state(0) & FPGA_STATE_PLATFORM;
+
+       FPGA_GET_REG(0, versions, &versions);
+       FPGA_GET_REG(0, fpga_version, &fpga_version);
+       FPGA_GET_REG(0, fpga_features, &fpga_features);
+
        unit_type = (versions & 0xf000) >> 12;
-       hardware_version = versions & 0x000f;
        feature_compression = (fpga_features & 0xe000) >> 13;
        feature_osd = fpga_features & (1<<11);
        feature_audio = (fpga_features & 0x0600) >> 9;
        feature_sysclock = (fpga_features & 0x0180) >> 7;
        feature_ramconfig = (fpga_features & 0x0060) >> 5;
+       feature_carrier_speed = fpga_features & (1<<4);
        feature_carriers = (fpga_features & 0x000c) >> 2;
        feature_video_channels = fpga_features & 0x0003;
 
+       if (legacy)
+               printf("legacy ");
+
        switch (unit_type) {
        case UNITTYPE_MAIN_USER:
                printf("Mainchannel");
@@ -114,27 +213,78 @@ static void print_fpga_info(void)
                break;
        }
 
-       switch (hardware_version) {
-       case HWVER_100:
-               printf(" HW-Ver 1.00\n");
-               break;
-
-       case HWVER_104:
-               printf(" HW-Ver 1.04\n");
-               break;
-
-       case HWVER_110:
-               printf(" HW-Ver 1.10\n");
-               break;
+       if (unit_type == UNITTYPE_MAIN_USER) {
+               if (legacy)
+                       hardware_version =
+                               (in_le16((void *)LATCH2_BASE)>>8) & 0x0f;
+               else
+                       hardware_version =
+                                 (!!pca9698_get_value(0x20, 24) << 0)
+                               | (!!pca9698_get_value(0x20, 25) << 1)
+                               | (!!pca9698_get_value(0x20, 26) << 2)
+                               | (!!pca9698_get_value(0x20, 27) << 3);
+               switch (hardware_version) {
+               case HWVER_100:
+                       printf(" HW-Ver 1.00,");
+                       break;
+
+               case HWVER_104:
+                       printf(" HW-Ver 1.04,");
+                       break;
+
+               case HWVER_110:
+                       printf(" HW-Ver 1.10,");
+                       break;
+
+               case HWVER_120:
+                       printf(" HW-Ver 1.20-1.21,");
+                       break;
+
+               case HWVER_200:
+                       printf(" HW-Ver 2.00,");
+                       break;
+
+               case HWVER_210:
+                       printf(" HW-Ver 2.10,");
+                       break;
+
+               case HWVER_220:
+                       printf(" HW-Ver 2.20,");
+                       break;
+
+               case HWVER_230:
+                       printf(" HW-Ver 2.30,");
+                       break;
+
+               default:
+                       printf(" HW-Ver %d(not supported),",
+                              hardware_version);
+                       break;
+               }
+               if (rgmii2_present)
+                       printf(" RGMII2,");
+       }
 
-       default:
-               printf(" HW-Ver %d(not supported)\n",
-                      hardware_version);
-               break;
+       if (unit_type == UNITTYPE_VIDEO_USER) {
+               hardware_version = versions & 0x000f;
+               switch (hardware_version) {
+               case FPGA_HWVER_200:
+                       printf(" HW-Ver 2.00,");
+                       break;
+
+               case FPGA_HWVER_210:
+                       printf(" HW-Ver 2.10,");
+                       break;
+
+               default:
+                       printf(" HW-Ver %d(not supported),",
+                              hardware_version);
+                       break;
+               }
        }
 
-       printf("       FPGA V %d.%02d, features:",
-               fpga_version / 100, fpga_version % 100);
+       printf(" FPGA V %d.%02d\n       features:",
+              fpga_version / 100, fpga_version % 100);
 
 
        switch (feature_compression) {
@@ -146,6 +296,10 @@ static void print_fpga_info(void)
                printf(" type1-deltacompression");
                break;
 
+       case COMPRESSION_TYPE1_TYPE2_DELTA:
+               printf(" type1-deltacompression, type2-inlinecompression");
+               break;
+
        default:
                printf(" compression %d(not supported)", feature_compression);
                break;
@@ -192,53 +346,145 @@ static void print_fpga_info(void)
                printf(", RAM 32 bit DDR2");
                break;
 
+       case RAM_DDR3_32:
+               printf(", RAM 32 bit DDR3");
+               break;
+
        default:
                printf(", RAM %d(not supported)", feature_ramconfig);
                break;
        }
 
-       printf(", %d carrier(s)", feature_carriers);
+       printf(", %d carrier(s) %s", feature_carriers,
+              feature_carrier_speed ? "2.5Gbit/s" : "1Gbit/s");
 
        printf(", %d video channel(s)\n", feature_video_channels);
 }
 
 int last_stage_init(void)
 {
-       print_fpga_info();
+       int slaves;
+       unsigned int k;
+       unsigned int mux_ch;
+       unsigned char mclink_controllers[] = { 0x24, 0x25, 0x26 };
+       int legacy = get_fpga_state(0) & FPGA_STATE_PLATFORM;
+       u16 fpga_features;
+       int feature_carrier_speed = fpga_features & (1<<4);
+       bool ch0_rgmii2_present = false;
+
+       FPGA_GET_REG(0, fpga_features, &fpga_features);
+
+       if (!legacy)
+               ch0_rgmii2_present = !pca9698_get_value(0x20, 30);
+
+       print_fpga_info(0, ch0_rgmii2_present);
+       osd_probe(0);
+
+       /* wait for FPGA done */
+       for (k = 0; k < ARRAY_SIZE(mclink_controllers); ++k) {
+               unsigned int ctr = 0;
+
+               if (i2c_probe(mclink_controllers[k]))
+                       continue;
+
+               while (!(pca953x_get_val(mclink_controllers[k])
+                      & MCFPGA_DONE)) {
+                       udelay(100000);
+                       if (ctr++ > 5) {
+                               printf("no done for mclink_controller %d\n", k);
+                               break;
+                       }
+               }
+       }
+
+       if (!legacy && (feature_carrier_speed == CARRIER_SPEED_1G)) {
+               miiphy_register(bb_miiphy_buses[0].name, bb_miiphy_read,
+                               bb_miiphy_write);
+               for (mux_ch = 0; mux_ch < MAX_MUX_CHANNELS; ++mux_ch) {
+                       if ((mux_ch == 1) && !ch0_rgmii2_present)
+                               continue;
+
+                       setup_88e1518(bb_miiphy_buses[0].name, mux_ch);
+               }
+       }
+
+       /* wait for slave-PLLs to be up and running */
+       udelay(500000);
+
+       mclink_fpgacount = CONFIG_SYS_MCLINK_MAX;
+       slaves = mclink_probe();
+       mclink_fpgacount = 0;
+
+       if (slaves <= 0)
+               return 0;
+
+       mclink_fpgacount = slaves;
+
+       for (k = 1; k <= slaves; ++k) {
+               FPGA_GET_REG(k, fpga_features, &fpga_features);
+               feature_carrier_speed = fpga_features & (1<<4);
+
+               print_fpga_info(k, false);
+               osd_probe(k);
+               if (feature_carrier_speed == CARRIER_SPEED_1G) {
+                       miiphy_register(bb_miiphy_buses[k].name,
+                                       bb_miiphy_read, bb_miiphy_write);
+                       setup_88e1518(bb_miiphy_buses[k].name, 0);
+               }
+       }
 
-       return osd_probe(0);
+       return 0;
 }
 
 /*
  * provide access to fpga gpios (for I2C bitbang)
+ * (these may look all too simple but make iocon.h much more readable)
  */
-void fpga_gpio_set(int pin)
+void fpga_gpio_set(unsigned int bus, int pin)
 {
-       out_le16((void *)(CONFIG_SYS_FPGA0_BASE + 0x18), pin);
+       FPGA_SET_REG(bus, gpio.set, pin);
 }
 
-void fpga_gpio_clear(int pin)
+void fpga_gpio_clear(unsigned int bus, int pin)
 {
-       out_le16((void *)(CONFIG_SYS_FPGA0_BASE + 0x16), pin);
+       FPGA_SET_REG(bus, gpio.clear, pin);
 }
 
-int fpga_gpio_get(int pin)
+int fpga_gpio_get(unsigned int bus, int pin)
 {
-       return in_le16((void *)(CONFIG_SYS_FPGA0_BASE + 0x14)) & pin;
+       u16 val;
+
+       FPGA_GET_REG(bus, gpio.read, &val);
+
+       return val & pin;
 }
 
 void gd405ep_init(void)
 {
+       unsigned int k;
+
+       if (i2c_probe(0x20)) { /* i2c_probe returns 0 on success */
+               for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k)
+                       gd->arch.fpga_state[k] |= FPGA_STATE_PLATFORM;
+       } else {
+               pca9698_direction_output(0x20, 4, 1);
+       }
 }
 
 void gd405ep_set_fpga_reset(unsigned state)
 {
-       if (state) {
-               out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_RESET);
-               out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_RESET);
+       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 {
-               out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_BOOT);
-               out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_BOOT);
+               pca9698_set_value(0x20, 4, state ? 0 : 1);
        }
 }
 
@@ -253,5 +499,333 @@ void gd405ep_setup_hw(void)
 
 int gd405ep_get_fpga_done(unsigned fpga)
 {
-       return in_le16((void *)LATCH2_BASE) & CONFIG_SYS_FPGA_DONE(fpga);
+       int legacy = get_fpga_state(0) & FPGA_STATE_PLATFORM;
+
+       if (legacy)
+               return in_le16((void *)LATCH2_BASE)
+                      & CONFIG_SYS_FPGA_DONE(fpga);
+       else
+               return pca9698_get_value(0x20, 20);
+}
+
+/*
+ * FPGA MII bitbang implementation
+ */
+
+struct fpga_mii {
+       unsigned fpga;
+       int mdio;
+} fpga_mii[] = {
+       { 0, 1},
+       { 1, 1},
+       { 2, 1},
+       { 3, 1},
+};
+
+static int mii_dummy_init(struct bb_miiphy_bus *bus)
+{
+       return 0;
+}
+
+static int mii_mdio_active(struct bb_miiphy_bus *bus)
+{
+       struct fpga_mii *fpga_mii = bus->priv;
+
+       if (fpga_mii->mdio)
+               FPGA_SET_REG(fpga_mii->fpga, gpio.set, GPIO_MDIO);
+       else
+               FPGA_SET_REG(fpga_mii->fpga, gpio.clear, GPIO_MDIO);
+
+       return 0;
+}
+
+static int mii_mdio_tristate(struct bb_miiphy_bus *bus)
+{
+       struct fpga_mii *fpga_mii = bus->priv;
+
+       FPGA_SET_REG(fpga_mii->fpga, gpio.set, GPIO_MDIO);
+
+       return 0;
+}
+
+static int mii_set_mdio(struct bb_miiphy_bus *bus, int v)
+{
+       struct fpga_mii *fpga_mii = bus->priv;
+
+       if (v)
+               FPGA_SET_REG(fpga_mii->fpga, gpio.set, GPIO_MDIO);
+       else
+               FPGA_SET_REG(fpga_mii->fpga, gpio.clear, GPIO_MDIO);
+
+       fpga_mii->mdio = v;
+
+       return 0;
+}
+
+static int mii_get_mdio(struct bb_miiphy_bus *bus, int *v)
+{
+       u16 gpio;
+       struct fpga_mii *fpga_mii = bus->priv;
+
+       FPGA_GET_REG(fpga_mii->fpga, gpio.read, &gpio);
+
+       *v = ((gpio & GPIO_MDIO) != 0);
+
+       return 0;
+}
+
+static int mii_set_mdc(struct bb_miiphy_bus *bus, int v)
+{
+       struct fpga_mii *fpga_mii = bus->priv;
+
+       if (v)
+               FPGA_SET_REG(fpga_mii->fpga, gpio.set, GPIO_MDC);
+       else
+               FPGA_SET_REG(fpga_mii->fpga, gpio.clear, GPIO_MDC);
+
+       return 0;
+}
+
+static int mii_delay(struct bb_miiphy_bus *bus)
+{
+       udelay(1);
+
+       return 0;
+}
+
+struct bb_miiphy_bus bb_miiphy_buses[] = {
+       {
+               .name = "board0",
+               .init = mii_dummy_init,
+               .mdio_active = mii_mdio_active,
+               .mdio_tristate = mii_mdio_tristate,
+               .set_mdio = mii_set_mdio,
+               .get_mdio = mii_get_mdio,
+               .set_mdc = mii_set_mdc,
+               .delay = mii_delay,
+               .priv = &fpga_mii[0],
+       },
+       {
+               .name = "board1",
+               .init = mii_dummy_init,
+               .mdio_active = mii_mdio_active,
+               .mdio_tristate = mii_mdio_tristate,
+               .set_mdio = mii_set_mdio,
+               .get_mdio = mii_get_mdio,
+               .set_mdc = mii_set_mdc,
+               .delay = mii_delay,
+               .priv = &fpga_mii[1],
+       },
+       {
+               .name = "board2",
+               .init = mii_dummy_init,
+               .mdio_active = mii_mdio_active,
+               .mdio_tristate = mii_mdio_tristate,
+               .set_mdio = mii_set_mdio,
+               .get_mdio = mii_get_mdio,
+               .set_mdc = mii_set_mdc,
+               .delay = mii_delay,
+               .priv = &fpga_mii[2],
+       },
+       {
+               .name = "board3",
+               .init = mii_dummy_init,
+               .mdio_active = mii_mdio_active,
+               .mdio_tristate = mii_mdio_tristate,
+               .set_mdio = mii_set_mdio,
+               .get_mdio = mii_get_mdio,
+               .set_mdc = mii_set_mdc,
+               .delay = mii_delay,
+               .priv = &fpga_mii[3],
+       },
+};
+
+int bb_miiphy_buses_num = sizeof(bb_miiphy_buses) /
+                         sizeof(bb_miiphy_buses[0]);
+
+enum {
+       MIICMD_SET,
+       MIICMD_MODIFY,
+       MIICMD_VERIFY_VALUE,
+       MIICMD_WAIT_FOR_VALUE,
+};
+
+struct mii_setupcmd {
+       u8 token;
+       u8 reg;
+       u16 data;
+       u16 mask;
+       u32 timeout;
+};
+
+/*
+ * verify we are talking to a 88e1518
+ */
+struct mii_setupcmd verify_88e1518[] = {
+       { MIICMD_SET, 22, 0x0000 },
+       { MIICMD_VERIFY_VALUE, 2, 0x0141, 0xffff },
+       { MIICMD_VERIFY_VALUE, 3, 0x0dd0, 0xfff0 },
+};
+
+/*
+ * workaround for erratum mentioned in 88E1518 release notes
+ */
+struct mii_setupcmd fixup_88e1518[] = {
+       { MIICMD_SET, 22, 0x00ff },
+       { MIICMD_SET, 17, 0x214b },
+       { MIICMD_SET, 16, 0x2144 },
+       { MIICMD_SET, 17, 0x0c28 },
+       { MIICMD_SET, 16, 0x2146 },
+       { MIICMD_SET, 17, 0xb233 },
+       { MIICMD_SET, 16, 0x214d },
+       { MIICMD_SET, 17, 0xcc0c },
+       { MIICMD_SET, 16, 0x2159 },
+       { MIICMD_SET, 22, 0x00fb },
+       { MIICMD_SET,  7, 0xc00d },
+       { MIICMD_SET, 22, 0x0000 },
+};
+
+/*
+ * default initialization:
+ * - set RGMII receive timing to "receive clock transition when data stable"
+ * - set RGMII transmit timing to "transmit clock internally delayed"
+ * - set RGMII output impedance target to 78,8 Ohm
+ * - run output impedance calibration
+ * - set autonegotiation advertise to 1000FD only
+ */
+struct mii_setupcmd default_88e1518[] = {
+       { MIICMD_SET, 22, 0x0002 },
+       { MIICMD_MODIFY, 21, 0x0030, 0x0030 },
+       { MIICMD_MODIFY, 25, 0x0000, 0x0003 },
+       { MIICMD_MODIFY, 24, 0x8000, 0x8000 },
+       { MIICMD_WAIT_FOR_VALUE, 24, 0x4000, 0x4000, 2000 },
+       { MIICMD_SET, 22, 0x0000 },
+       { MIICMD_MODIFY, 4, 0x0000, 0x01e0 },
+       { MIICMD_MODIFY, 9, 0x0200, 0x0300 },
+};
+
+/*
+ * turn off CLK125 for PHY daughterboard
+ */
+struct mii_setupcmd ch1fix_88e1518[] = {
+       { MIICMD_SET, 22, 0x0002 },
+       { MIICMD_MODIFY, 16, 0x0006, 0x0006 },
+       { MIICMD_SET, 22, 0x0000 },
+};
+
+/*
+ * perform copper software reset
+ */
+struct mii_setupcmd swreset_88e1518[] = {
+       { MIICMD_SET, 22, 0x0000 },
+       { MIICMD_MODIFY, 0, 0x8000, 0x8000 },
+       { MIICMD_WAIT_FOR_VALUE, 0, 0x0000, 0x8000, 2000 },
+};
+
+static int process_setupcmd(const char *bus, unsigned char addr,
+                           struct mii_setupcmd *setupcmd)
+{
+       int res;
+       u8 reg = setupcmd->reg;
+       u16 data = setupcmd->data;
+       u16 mask = setupcmd->mask;
+       u32 timeout = setupcmd->timeout;
+       u16 orig_data;
+       unsigned long start;
+
+       debug("mii %s:%u reg %2u ", bus, addr, reg);
+
+       switch (setupcmd->token) {
+       case MIICMD_MODIFY:
+               res = miiphy_read(bus, addr, reg, &orig_data);
+               if (res)
+                       break;
+               debug("is %04x. (value %04x mask %04x) ", orig_data, data,
+                     mask);
+               data = (orig_data & ~mask) | (data & mask);
+       case MIICMD_SET:
+               debug("=> %04x\n", data);
+               res = miiphy_write(bus, addr, reg, data);
+               break;
+       case MIICMD_VERIFY_VALUE:
+               res = miiphy_read(bus, addr, reg, &orig_data);
+               if (res)
+                       break;
+               if ((orig_data & mask) != (data & mask))
+                       res = -1;
+               debug("(value %04x mask %04x) == %04x? %s\n", data, mask,
+                     orig_data, res ? "FAIL" : "PASS");
+               break;
+       case MIICMD_WAIT_FOR_VALUE:
+               res = -1;
+               start = get_timer(0);
+               while ((res != 0) && (get_timer(start) < timeout)) {
+                       res = miiphy_read(bus, addr, reg, &orig_data);
+                       if (res)
+                               continue;
+                       if ((orig_data & mask) != (data & mask))
+                               res = -1;
+               }
+               debug("(value %04x mask %04x) == %04x? %s after %lu ms\n", data,
+                     mask, orig_data, res ? "FAIL" : "PASS",
+                     get_timer(start));
+               break;
+       default:
+               res = -1;
+               break;
+       }
+
+       return res;
+}
+
+static int process_setup(const char *bus, unsigned char addr,
+                           struct mii_setupcmd *setupcmd, unsigned int count)
+{
+       int res = 0;
+       unsigned int k;
+
+       for (k = 0; k < count; ++k) {
+               res = process_setupcmd(bus, addr, &setupcmd[k]);
+               if (res) {
+                       printf("mii cmd %u on bus %s addr %u failed, aborting setup",
+                              setupcmd[k].token, bus, addr);
+                       break;
+               }
+       }
+
+       return res;
+}
+
+static int setup_88e1518(const char *bus, unsigned char addr)
+{
+       int res;
+
+       res = process_setup(bus, addr,
+                           verify_88e1518, ARRAY_SIZE(verify_88e1518));
+       if (res)
+               return res;
+
+       res = process_setup(bus, addr,
+                           fixup_88e1518, ARRAY_SIZE(fixup_88e1518));
+       if (res)
+               return res;
+
+       res = process_setup(bus, addr,
+                           default_88e1518, ARRAY_SIZE(default_88e1518));
+       if (res)
+               return res;
+
+       if (addr) {
+               res = process_setup(bus, addr,
+                                   ch1fix_88e1518, ARRAY_SIZE(ch1fix_88e1518));
+               if (res)
+                       return res;
+       }
+
+       res = process_setup(bus, addr,
+                           swreset_88e1518, ARRAY_SIZE(swreset_88e1518));
+       if (res)
+               return res;
+
+       return 0;
 }
index bca78032f8158114b3bd2888dc9acac7a9a8cfc6..ff0edb2547967944523599d103ea2f8eb1b5250a 100644 (file)
@@ -28,6 +28,8 @@ enum {
        HWVER_300 = 3,
 };
 
+struct ihs_fpga *fpga_ptr[] = CONFIG_SYS_FPGA_PTR;
+
 int misc_init_r(void)
 {
        /* startup fans */
@@ -54,10 +56,9 @@ int checkboard(void)
 
 static void print_fpga_info(void)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
-       u16 versions = in_le16(&fpga->versions);
-       u16 fpga_version = in_le16(&fpga->fpga_version);
-       u16 fpga_features = in_le16(&fpga->fpga_features);
+       u16 versions;
+       u16 fpga_version;
+       u16 fpga_features;
        int fpga_state = get_fpga_state(0);
        unsigned unit_type;
        unsigned hardware_version;
@@ -74,6 +75,10 @@ static void print_fpga_info(void)
                return;
        }
 
+       FPGA_GET_REG(0, versions, &versions);
+       FPGA_GET_REG(0, fpga_version, &fpga_version);
+       FPGA_GET_REG(0, fpga_features, &fpga_features);
+
        unit_type = (versions & 0xf000) >> 12;
        hardware_version = versions & 0x000f;
        feature_channels = fpga_features & 0x007f;
index 32e24c08cb9ce8340f589ab21d1772ef61bea087..c1a583ffbe09fcbb80e0af44401b4e9931814e80 100644 (file)
 #define REFLECTION_TESTPATTERN 0xdede
 #define REFLECTION_TESTPATTERN_INV (~REFLECTION_TESTPATTERN & 0xffff)
 
+#ifdef CONFIG_SYS_FPGA_NO_RFL_HI
+#define REFLECTION_TESTREG reflection_low
+#else
+#define REFLECTION_TESTREG reflection_high
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 int get_fpga_state(unsigned dev)
@@ -220,23 +226,17 @@ int board_early_init_r(void)
        gd405ex_set_fpga_reset(0);
 
        for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) {
-               struct ihs_fpga *fpga =
-                       (struct ihs_fpga *)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);
+                       u16 val;
+
+                       FPGA_SET_REG(k, reflection_low, REFLECTION_TESTPATTERN);
 
-                       if (in_le16(reflection_target) ==
-                               REFLECTION_TESTPATTERN_INV)
+                       FPGA_GET_REG(k, REFLECTION_TESTREG, &val);
+                       if (val == REFLECTION_TESTPATTERN_INV)
                                break;
 
                        udelay(100000);
index fa8961a35177a78cd9de65b4596166a5554862bd..2f8e306261815acd00e51137c31d2034acf34b4b 100644 (file)
@@ -51,6 +51,8 @@ enum {
        HWVER_110 = 1,
 };
 
+struct ihs_fpga *fpga_ptr[] = CONFIG_SYS_FPGA_PTR;
+
 static inline void blank_string(int size)
 {
        int i;
@@ -84,10 +86,9 @@ int misc_init_r(void)
 
 static void print_fpga_info(unsigned dev)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *) 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);
+       u16 versions;
+       u16 fpga_version;
+       u16 fpga_features;
        int fpga_state = get_fpga_state(dev);
 
        unsigned unit_type;
@@ -95,6 +96,10 @@ static void print_fpga_info(unsigned dev)
        unsigned feature_channels;
        unsigned feature_expansion;
 
+       FPGA_GET_REG(dev, versions, &versions);
+       FPGA_GET_REG(dev, fpga_version, &fpga_version);
+       FPGA_GET_REG(dev, fpga_features, &fpga_features);
+
        printf("FPGA%d: ", dev);
        if (fpga_state & FPGA_STATE_PLATFORM)
                printf("(legacy) ");
@@ -226,8 +231,6 @@ int last_stage_init(void)
 {
        unsigned int k;
        unsigned int fpga;
-       struct ihs_fpga *fpga0 = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
-       struct ihs_fpga *fpga1 = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(1);
        int failed = 0;
        char str_phys[] = "Setup PHYs -";
        char str_serdes[] = "Start SERDES blocks";
@@ -265,17 +268,16 @@ int last_stage_init(void)
        /* 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);
+       FPGA_SET_REG(0, quad_serdes_reset, 0);
+       FPGA_SET_REG(1, 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);
+                       FPGA_SET_REG(fpga, ch[k].config_int, 0);
        }
        blank_string(strlen(str_channels));
 
@@ -283,16 +285,16 @@ int last_stage_init(void)
        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);
+                       u16 status;
+                       FPGA_GET_REG(k, ch[k].status_int, &status);
                        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);
+                       FPGA_SET_REG(fpga, ch[k].status_int, 0);
                }
        }
        blank_string(strlen(str_locks));
@@ -300,14 +302,14 @@ int last_stage_init(void)
        /* verify hicb_status */
        puts(str_hicb);
        for (fpga = 0; fpga < 2; ++fpga) {
-               u16 *ch0_hicb_status_int = &(fpga ? fpga1 : fpga0)->ch0_hicb_status_int;
                for (k = 0; k < 32; ++k) {
-                       u16 status = in_le16(ch0_hicb_status_int + 4*k);
+                       u16 status;
+                       FPGA_GET_REG(k, hicb_ch[k].status_int, &status);
                        if (status)
                                printf("fpga %d hicb %d: hicb status %04x\n",
                                        fpga, k, status);
                        /* reset events */
-                       out_le16(ch0_hicb_status_int + 4*k, status);
+                       FPGA_SET_REG(fpga, hicb_ch[k].status_int, 0);
                }
        }
        blank_string(strlen(str_hicb));
index 43e6a4cdefbd99981fcb420f627a4016313bb841..216ad964af1e3794e5c684ea3ed0febf07bfab8a 100644 (file)
@@ -13,9 +13,11 @@ endif
 
 LIB    = $(obj)lib$(VENDOR).o
 
+COBJS-$(CONFIG_SYS_FPGA_COMMON) += fpga.o
+
 COBJS-$(CONFIG_IO) += miiphybb.o
 COBJS-$(CONFIG_IO64) += miiphybb.o
-COBJS-$(CONFIG_IOCON) += osd.o
+COBJS-$(CONFIG_IOCON) += osd.o mclink.o
 COBJS-$(CONFIG_DLVISION_10G) += osd.o
 COBJS-$(CONFIG_CONTROLCENTERD) += dp501.o
 
index 9aa4e3f4bdc8e4ac0e9465d5565234dc7281c4fd..52f3ea167f1b1f4afd582be8ec356ee9f65f583c 100644 (file)
@@ -2,23 +2,7 @@
  * (C) Copyright 2012
  * Dirk Eibach,  Guntermann & Drunck GmbH, dirk.eibach@gdsys.cc
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /* Parade Technologies Inc. DP501 DisplayPort DVI/HDMI Transmitter */
diff --git a/board/gdsys/common/fpga.c b/board/gdsys/common/fpga.c
new file mode 100644 (file)
index 0000000..e10c105
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * (C) Copyright 2013
+ * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.de
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <gdsys_fpga.h>
+
+#include <asm/io.h>
+
+int fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data)
+{
+       out_le16(reg, data);
+
+       return 0;
+}
+
+int fpga_get_reg(u32 fpga, u16 *reg, off_t regoff, u16 *data)
+{
+       *data = in_le16(reg);
+
+       return 0;
+}
diff --git a/board/gdsys/common/mclink.c b/board/gdsys/common/mclink.c
new file mode 100644 (file)
index 0000000..9f230c9
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * (C) Copyright 2012
+ * Dirk Eibach,  Guntermann & Drunck GmbH, dirk.eibach@gdsys.cc
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <errno.h>
+
+#include <gdsys_fpga.h>
+
+enum {
+       MCINT_SLAVE_LINK_CHANGED_EV = 1 << 7,
+       MCINT_TX_ERROR_EV = 1 << 9,
+       MCINT_TX_BUFFER_FREE = 1 << 10,
+       MCINT_TX_PACKET_TRANSMITTED_EV = 1 << 11,
+       MCINT_RX_ERROR_EV = 1 << 13,
+       MCINT_RX_CONTENT_AVAILABLE = 1 << 14,
+       MCINT_RX_PACKET_RECEIVED_EV = 1 << 15,
+};
+
+int mclink_probe(void)
+{
+       unsigned int k;
+       int slaves = 0;
+
+       for (k = 0; k < CONFIG_SYS_MCLINK_MAX; ++k) {
+               int timeout = 0;
+               unsigned int ctr = 0;
+               u16 mc_status;
+
+               FPGA_GET_REG(k, mc_status, &mc_status);
+
+               if (!(mc_status & (1 << 15)))
+                       break;
+
+               FPGA_SET_REG(k, mc_control, 0x8000);
+
+               FPGA_GET_REG(k, mc_status, &mc_status);
+               while (!(mc_status & (1 << 14))) {
+                       udelay(100);
+                       if (ctr++ > 500) {
+                               timeout = 1;
+                               break;
+                       }
+                       FPGA_GET_REG(k, mc_status, &mc_status);
+               }
+               if (timeout)
+                       break;
+
+               printf("waited %d us for mclink %d to come up\n", ctr * 100, k);
+
+               slaves++;
+       }
+
+       return slaves;
+}
+
+int mclink_send(u8 slave, u16 addr, u16 data)
+{
+       unsigned int ctr = 0;
+       u16 int_status;
+       u16 rx_cmd_status;
+       u16 rx_cmd;
+
+       /* reset interrupt status */
+       FPGA_GET_REG(0, mc_int, &int_status);
+       FPGA_SET_REG(0, mc_int, int_status);
+
+       /* send */
+       FPGA_SET_REG(0, mc_tx_address, addr);
+       FPGA_SET_REG(0, mc_tx_data, data);
+       FPGA_SET_REG(0, mc_tx_cmd, (slave & 0x03) << 14);
+       FPGA_SET_REG(0, mc_control, 0x8001);
+
+       /* wait for reply */
+       FPGA_GET_REG(0, mc_int, &int_status);
+       while (!(int_status & MCINT_RX_PACKET_RECEIVED_EV)) {
+               udelay(100);
+               if (ctr++ > 3)
+                       return -ETIMEDOUT;
+               FPGA_GET_REG(0, mc_int, &int_status);
+       }
+
+       FPGA_GET_REG(0, mc_rx_cmd_status, &rx_cmd_status);
+       rx_cmd = (rx_cmd_status >> 12) & 0x03;
+       if (rx_cmd != 0)
+               printf("mclink_send: received cmd %d, expected %d\n", rx_cmd,
+                      0);
+
+       return 0;
+}
+
+int mclink_receive(u8 slave, u16 addr, u16 *data)
+{
+       u16 rx_cmd_status;
+       u16 rx_cmd;
+       u16 int_status;
+       unsigned int ctr = 0;
+
+       /* send read request */
+       FPGA_SET_REG(0, mc_tx_address, addr);
+       FPGA_SET_REG(0, mc_tx_cmd,
+                    ((slave & 0x03) << 14) | (1 << 12) | (1 << 0));
+       FPGA_SET_REG(0, mc_control, 0x8001);
+
+
+       /* wait for reply */
+       FPGA_GET_REG(0, mc_int, &int_status);
+       while (!(int_status & MCINT_RX_CONTENT_AVAILABLE)) {
+               udelay(100);
+               if (ctr++ > 3)
+                       return -ETIMEDOUT;
+               FPGA_GET_REG(0, mc_int, &int_status);
+       }
+
+       /* check reply */
+       FPGA_GET_REG(0, mc_rx_cmd_status, &rx_cmd_status);
+       if ((rx_cmd_status >> 14) != slave) {
+               printf("mclink_receive: reply from slave %d, expected %d\n",
+                      rx_cmd_status >> 14, slave);
+               return -EINVAL;
+       }
+
+       rx_cmd = (rx_cmd_status >> 12) & 0x03;
+       if (rx_cmd != 1) {
+               printf("mclink_send: received cmd %d, expected %d\n",
+                      rx_cmd, 1);
+               return -EIO;
+       }
+
+       FPGA_GET_REG(0, mc_rx_data, data);
+
+       return 0;
+}
diff --git a/board/gdsys/common/mclink.h b/board/gdsys/common/mclink.h
new file mode 100644 (file)
index 0000000..febd46a
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * (C) Copyright 2012
+ * Dirk Eibach,  Guntermann & Drunck GmbH, dirk.eibach@gdsys.cc
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef _MCLINK_H_
+#define _MCLINK_H_
+
+int mclink_probe(void);
+int mclink_send(u8 slave, u16 addr, u16 data);
+int mclink_receive(u8 slave, u16 addr, u16 *data);
+
+#endif
index 45cea5eaaf350153866008cab1bf9b3addd372e4..c49cd9a619e152da94a354ae94afafe7e1298855 100644 (file)
@@ -7,7 +7,7 @@
 
 #include <common.h>
 #include <i2c.h>
-#include <asm/io.h>
+#include <malloc.h>
 
 #include <gdsys_fpga.h>
 
 
 #define PIXCLK_640_480_60 25180000
 
-#define BASE_WIDTH 32
-#define BASE_HEIGHT 16
-#define BUFSIZE (BASE_WIDTH * BASE_HEIGHT)
-
 enum {
        CH7301_CM = 0x1c,               /* Clock Mode Register */
        CH7301_IC = 0x1d,               /* Input Clock Register */
@@ -51,37 +47,55 @@ enum {
        CH7301_DSP = 0x56,              /* DVI Sync polarity Register */
 };
 
+unsigned int base_width;
+unsigned int base_height;
+size_t bufsize;
+u16 *buf;
+
+unsigned int max_osd_screen = CONFIG_SYS_OSD_SCREENS - 1;
+
+#ifdef CONFIG_SYS_CH7301
+int ch7301_i2c[] = CONFIG_SYS_CH7301_I2C;
+#endif
+
 #if defined(CONFIG_SYS_ICS8N3QV01) || defined(CONFIG_SYS_SIL1178)
 static void fpga_iic_write(unsigned screen, u8 slave, u8 reg, u8 data)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(screen);
-       struct ihs_i2c *i2c = &fpga->i2c;
+       u16 val;
 
-       while (in_le16(&fpga->extended_interrupt) & (1 << 12))
-               ;
-       out_le16(&i2c->write_mailbox_ext, reg | (data << 8));
-       out_le16(&i2c->write_mailbox, 0xc400 | (slave << 1));
+       do {
+               FPGA_GET_REG(screen, extended_interrupt, &val);
+       } while (val & (1 << 12));
+
+       FPGA_SET_REG(screen, i2c.write_mailbox_ext, reg | (data << 8));
+       FPGA_SET_REG(screen, i2c.write_mailbox, 0xc400 | (slave << 1));
 }
 
 static u8 fpga_iic_read(unsigned screen, u8 slave, u8 reg)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(screen);
-       struct ihs_i2c *i2c = &fpga->i2c;
        unsigned int ctr = 0;
+       u16 val;
+
+       do {
+               FPGA_GET_REG(screen, extended_interrupt, &val);
+       } while (val & (1 << 12));
 
-       while (in_le16(&fpga->extended_interrupt) & (1 << 12))
-               ;
-       out_le16(&fpga->extended_interrupt, 1 << 14);
-       out_le16(&i2c->write_mailbox_ext, reg);
-       out_le16(&i2c->write_mailbox, 0xc000 | (slave << 1));
-       while (!(in_le16(&fpga->extended_interrupt) & (1 << 14))) {
+       FPGA_SET_REG(screen, extended_interrupt, 1 << 14);
+       FPGA_SET_REG(screen, i2c.write_mailbox_ext, reg);
+       FPGA_SET_REG(screen, i2c.write_mailbox, 0xc000 | (slave << 1));
+
+       FPGA_GET_REG(screen, extended_interrupt, &val);
+       while (!(val & (1 << 14))) {
                udelay(100000);
                if (ctr++ > 5) {
                        printf("iic receive timeout\n");
                        break;
                }
+               FPGA_GET_REG(screen, extended_interrupt, &val);
        }
-       return in_le16(&i2c->read_mailbox_ext) >> 8;
+
+       FPGA_GET_REG(screen, i2c.read_mailbox_ext, &val);
+       return val >> 8;
 }
 #endif
 
@@ -113,7 +127,6 @@ static void mpc92469ac_calc_parameters(unsigned int fout,
 
 static void mpc92469ac_set(unsigned screen, unsigned int fout)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(screen);
        unsigned int n;
        unsigned int m;
        unsigned int bitval = 0;
@@ -134,7 +147,7 @@ static void mpc92469ac_set(unsigned screen, unsigned int fout)
                break;
        }
 
-       out_le16(&fpga->mpc3w_control, (bitval << 9) | m);
+       FPGA_SET_REG(screen, mpc3w_control, (bitval << 9) | m);
 }
 #endif
 
@@ -249,14 +262,12 @@ static void ics8n3qv01_set(unsigned screen, unsigned int fout)
 static int osd_write_videomem(unsigned screen, unsigned offset,
        u16 *data, size_t charcount)
 {
-       struct ihs_fpga *fpga =
-               (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(screen);
        unsigned int k;
 
        for (k = 0; k < charcount; ++k) {
-               if (offset + k >= BUFSIZE)
+               if (offset + k >= bufsize)
                        return -1;
-               out_le16(&fpga->videomem + offset + k, data[k]);
+               FPGA_SET_REG(screen, videomem[offset + k], data[k]);
        }
 
        return charcount;
@@ -266,14 +277,13 @@ static int osd_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        unsigned screen;
 
-       for (screen = 0; screen < CONFIG_SYS_OSD_SCREENS; ++screen) {
+       for (screen = 0; screen <= max_osd_screen; ++screen) {
                unsigned x;
                unsigned y;
                unsigned charcount;
                unsigned len;
                u8 color;
                unsigned int k;
-               u16 buf[BUFSIZE];
                char *text;
                int res;
 
@@ -287,12 +297,12 @@ static int osd_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                color = simple_strtoul(argv[3], NULL, 16);
                text = argv[4];
                charcount = strlen(text);
-               len = (charcount > BUFSIZE) ? BUFSIZE : charcount;
+               len = (charcount > bufsize) ? bufsize : charcount;
 
                for (k = 0; k < len; ++k)
                        buf[k] = (text[k] << 8) | color;
 
-               res = osd_write_videomem(screen, y * BASE_WIDTH + x, buf, len);
+               res = osd_write_videomem(screen, y * base_width + x, buf, len);
                if (res < 0)
                        return res;
        }
@@ -302,24 +312,32 @@ static int osd_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 int osd_probe(unsigned screen)
 {
-       struct ihs_fpga *fpga = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(screen);
-       struct ihs_osd *osd = &fpga->osd;
-       u16 version = in_le16(&osd->version);
-       u16 features = in_le16(&osd->features);
-       unsigned width;
-       unsigned height;
+       u16 version;
+       u16 features;
        u8 value;
+#ifdef CONFIG_SYS_CH7301
+       int old_bus = i2c_get_bus_num();
+#endif
 
-       width = ((features & 0x3f00) >> 8) + 1;
-       height = (features & 0x001f) + 1;
+       FPGA_GET_REG(0, osd.version, &version);
+       FPGA_GET_REG(0, osd.features, &features);
+
+       base_width = ((features & 0x3f00) >> 8) + 1;
+       base_height = (features & 0x001f) + 1;
+       bufsize = base_width * base_height;
+       buf = malloc(sizeof(u16) * bufsize);
+       if (!buf)
+               return -1;
 
        printf("OSD%d:  Digital-OSD version %01d.%02d, %d" "x%d characters\n",
-               screen, version/100, version%100, width, height);
+               screen, version/100, version%100, base_width, base_height);
 
 #ifdef CONFIG_SYS_CH7301
+       i2c_set_bus_num(ch7301_i2c[screen]);
        value = i2c_reg_read(CH7301_I2C_ADDR, CH7301_DID);
        if (value != 0x17) {
                printf("       Probing CH7301 failed, DID %02x\n", value);
+               i2c_set_bus_num(old_bus);
                return -1;
        }
        i2c_reg_write(CH7301_I2C_ADDR, CH7301_TPCP, 0x08);
@@ -327,6 +345,7 @@ int osd_probe(unsigned screen)
        i2c_reg_write(CH7301_I2C_ADDR, CH7301_TPF, 0x60);
        i2c_reg_write(CH7301_I2C_ADDR, CH7301_DC, 0x09);
        i2c_reg_write(CH7301_I2C_ADDR, CH7301_PM, 0xc0);
+       i2c_set_bus_num(old_bus);
 #endif
 
 #ifdef CONFIG_SYS_MPC92469AC
@@ -356,12 +375,15 @@ int osd_probe(unsigned screen)
        fpga_iic_write(screen, SIL1178_MASTER_I2C_ADDRESS, 0x08, 0x37);
 #endif
 
-       out_le16(&fpga->videocontrol, 0x0002);
-       out_le16(&osd->control, 0x0049);
+       FPGA_SET_REG(screen, videocontrol, 0x0002);
+       FPGA_SET_REG(screen, osd.control, 0x0049);
+
+       FPGA_SET_REG(screen, osd.xy_size, ((32 - 1) << 8) | (16 - 1));
+       FPGA_SET_REG(screen, osd.x_pos, 0x007f);
+       FPGA_SET_REG(screen, osd.y_pos, 0x005f);
 
-       out_le16(&osd->xy_size, ((32 - 1) << 8) | (16 - 1));
-       out_le16(&osd->x_pos, 0x007f);
-       out_le16(&osd->y_pos, 0x005f);
+       if (screen > max_osd_screen)
+               max_osd_screen = screen;
 
        return 0;
 }
@@ -370,11 +392,11 @@ int osd_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        unsigned screen;
 
-       for (screen = 0; screen < CONFIG_SYS_OSD_SCREENS; ++screen) {
+       for (screen = 0; screen <= max_osd_screen; ++screen) {
                unsigned x;
                unsigned y;
                unsigned k;
-               u16 buffer[BASE_WIDTH];
+               u16 buffer[base_width];
                char *rp;
                u16 *wp = buffer;
                unsigned count = (argc > 4) ?
@@ -399,13 +421,13 @@ int osd_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
                        rp += 4;
                        wp++;
-                       if (wp - buffer > BASE_WIDTH)
+                       if (wp - buffer > base_width)
                                break;
                }
 
                for (k = 0; k < count; ++k) {
                        unsigned offset =
-                               y * BASE_WIDTH + x + k * (wp - buffer);
+                               y * base_width + x + k * (wp - buffer);
                        osd_write_videomem(screen, offset, buffer,
                                wp - buffer);
                }
index a24c22b1ad44fe737e222e745036ced8ff8bf3bb..9e91f68eb0b3282c801593bb060b59e3e3236e5a 100644 (file)
@@ -27,9 +27,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-/* MII mode defines */
-#define RMII_MODE_ENABLE       0x4D
-
 static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
 
 #ifdef CONFIG_SPL_BUILD
@@ -158,7 +155,8 @@ int board_eth_init(bd_t *bis)
                        eth_setenv_enetaddr("ethaddr", mac_addr);
        }
 
-       writel(RMII_MODE_ENABLE, &cdev->miisel);
+       writel((GMII1_SEL_RMII | RMII1_IO_CLK_EN),
+              &cdev->miisel);
 
        rv = cpsw_register(&cpsw_data);
        if (rv < 0)
index bccc7e09927cd945b8bcd0053b08a528904644c6..7b918b558d0fa565f6645487b262ff86398794db 100644 (file)
@@ -1,28 +1,6 @@
-/*------------------------------------------------------------------------+ */
-/* */
-/*       This source code is dual-licensed.  You may use it under the terms */
-/*       of the GNU General Public License version 2, or under the license  */
-/*       below.                                                             */
-/*                                                                          */
-/*       This source code has been made available to you by IBM on an AS-IS */
-/*       basis.  Anyone receiving this source is licensed under IBM */
-/*       copyrights to use it in any way he or she deems fit, including */
-/*       copying it, modifying it, compiling it, and redistributing it either */
-/*       with or without modifications.  No license under IBM patents or */
-/*       patent applications is to be implied by the copyright license. */
-/* */
-/*       Any user of this software should understand that IBM cannot provide */
-/*       technical support for this software and will not be responsible for */
-/*       any consequences resulting from the use of this software. */
-/* */
-/*       Any person who transfers this source code or any derivative work */
-/*       must include the IBM copyright notice, this paragraph, and the */
-/*       preceding two paragraphs in the transferred software. */
-/* */
-/*       COPYRIGHT   I B M   CORPORATION 1995 */
-/*       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M */
-/*------------------------------------------------------------------------- */
-
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*------------------------------------------------------------------------- */
 /* Function:     ext_bus_cntlr_init */
 /* Description:  Initializes the External Bus Controller for the external */
index f9bb6ab2bc63238b7989e026b1a08139d80abae4..6ab263a4d9d4e9532247a360178a3fa2473725e1 100644 (file)
@@ -1,25 +1,6 @@
-/*-----------------------------------------------------------------------------+
-|       This source code is dual-licensed.  You may use it under the terms of
-|       the GNU General Public License version 2, or under the license below.
-|
-|       This source code has been made available to you by IBM on an AS-IS
-|       basis.  Anyone receiving this source is licensed under IBM
-|       copyrights to use it in any way he or she deems fit, including
-|       copying it, modifying it, compiling it, and redistributing it either
-|       with or without modifications.  No license under IBM patents or
-|       patent applications is to be implied by the copyright license.
-|
-|       Any user of this software should understand that IBM cannot provide
-|       technical support for this software and will not be responsible for
-|       any consequences resulting from the use of this software.
-|
-|       Any person who transfers this source code or any derivative work
-|       must include the IBM copyright notice, this paragraph, and the
-|       preceding two paragraphs in the transferred software.
-|
-|       COPYRIGHT   I B M   CORPORATION 1995
-|       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-+-----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*
  * Adapted for PIP405 03.07.01
  * Denis Peter, MPL AG Switzerland, d.peter@mpl.ch
index 39a1d6829acd70898bad33eb2ea06b25333e3f11..bf886c05c0b9419c4799225585c6f748c2d76af7 100644 (file)
@@ -1,26 +1,6 @@
-/*------------------------------------------------------------------------------+
- *      This source code is dual-licensed.  You may use it under the terms of
- *      the GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *-------------------------------------------------------------------------------*/
-
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*-----------------------------------------------------------------------------
  * Function:     ext_bus_cntlr_init
  * Description:  Initializes the External Bus Controller for the external
index b77517fd5a80b2c4adc3a5ac8a5f2588be36c695..9ed27990a1acaf0fad4ffc36c3534f8a974722bc 100644 (file)
@@ -1,26 +1,6 @@
-/*------------------------------------------------------------------------------+
- *      This source code is dual-licensed.  You may use it under the terms of
- *      the GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *-------------------------------------------------------------------------------*/
-
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*-----------------------------------------------------------------------------
  * Function:     ext_bus_cntlr_init
  * Description:  Initializes the External Bus Controller for the external
index f53c5bbd4b50f4e42781fabb13ac74f62e9902e4..e40b0bd44df890887a38e12e3f0685fde66a8f05 100644 (file)
@@ -31,8 +31,6 @@
 DECLARE_GLOBAL_DATA_PTR;
 
 /* MII mode defines */
-#define MII_MODE_ENABLE                0x0
-#define RGMII_MODE_ENABLE      0xA
 #define RMII_RGMII2_MODE_ENABLE        0x49
 
 static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
index 4fce987540d150f0fa9b56f181deb6a6c89a5194..084858defa39e1da3cbdc853397fa77688edfae7 100644 (file)
 /* Handle multiple I2C buses instances */
 int get_multi_scl_pin(void)
 {
-       unsigned int bus = I2C_GET_BUS();
+       unsigned int bus = i2c_get_bus_num();
 
        switch (bus) {
-       case I2C_0: /* I2C_0 definition - compatibility layer */
-       case I2C_5:
+       case I2C_0:
                return CONFIG_SOFT_I2C_I2C5_SCL;
-       case I2C_9:
+       case I2C_1:
                return CONFIG_SOFT_I2C_I2C9_SCL;
        default:
                printf("I2C_%d not supported!\n", bus);
@@ -28,13 +27,12 @@ int get_multi_scl_pin(void)
 
 int get_multi_sda_pin(void)
 {
-       unsigned int bus = I2C_GET_BUS();
+       unsigned int bus = i2c_get_bus_num();
 
        switch (bus) {
-       case I2C_0: /* I2C_0 definition - compatibility layer */
-       case I2C_5:
+       case I2C_0:
                return CONFIG_SOFT_I2C_I2C5_SDA;
-       case I2C_9:
+       case I2C_1:
                return CONFIG_SOFT_I2C_I2C9_SDA;
        default:
                printf("I2C_%d not supported!\n", bus);
index 80ffe3047ab88a3666dfc394d552db6b8e678023..1e94c7f82c5010a5efbb4985fdc0dc223db9ca91 100644 (file)
@@ -10,7 +10,7 @@
 */
 
 /dts-v1/;
-/include/ ARCH_CPU_DTS
+/include/ "exynos5250.dtsi"
 
 / {
        model = "SAMSUNG SMDK5250 board based on EXYNOS5250";
index dca3386cf2835c869b45d0fedb0b7a9c26952411..7832e4edda0b756e224ab223e43652dadc48eafe 100644 (file)
@@ -10,7 +10,7 @@
 */
 
 /dts-v1/;
-/include/ ARCH_CPU_DTS
+/include/ "exynos5250.dtsi"
 
 / {
        model = "Google Snow";
index 4ddff04f41d62824830119e5f33eb610e3ba4408..366f648d32004037c204040226899934e8fc05dc 100644 (file)
@@ -32,7 +32,11 @@ int power_init_board(void)
 {
        int ret;
 
-       ret = pmic_init(I2C_5);
+       /*
+        * For PMIC the I2C bus is named as I2C5, but it is connected
+        * to logical I2C adapter 0
+        */
+       ret = pmic_init(I2C_0);
        if (ret)
                return ret;
 
index c8698f30df8ca3992d18133dd7f60fb581146829..7f61d17abb282a749c3c36caa4a9b964d8bb72c9 100644 (file)
@@ -61,10 +61,10 @@ void i2c_init_board(void)
        struct exynos4_gpio_part2 *gpio2 =
                (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
 
-       /* I2C_5 -> PMIC */
+       /* I2C_5 -> PMIC -> Adapter 0 */
        s5p_gpio_direction_output(&gpio1->b, 7, 1);
        s5p_gpio_direction_output(&gpio1->b, 6, 1);
-       /* I2C_9 -> FG */
+       /* I2C_9 -> FG -> Adapter 1 */
        s5p_gpio_direction_output(&gpio2->y4, 0, 1);
        s5p_gpio_direction_output(&gpio2->y4, 1, 1);
 }
@@ -282,10 +282,17 @@ int power_init_board(void)
        struct power_battery *pb;
        struct pmic *p_fg, *p_chrg, *p_muic, *p_bat;
 
-       ret = pmic_init(I2C_5);
+       /*
+        * For PMIC/MUIC the I2C bus is named as I2C5, but it is connected
+        * to logical I2C adapter 0
+        *
+        * The FUEL_GAUGE is marked as I2C9 on the schematic, but connected
+        * to logical I2C adapter 1
+        */
+       ret = pmic_init(I2C_0);
        ret |= pmic_init_max8997();
-       ret |= power_fg_init(I2C_9);
-       ret |= power_muic_init(I2C_5);
+       ret |= power_fg_init(I2C_1);
+       ret |= power_muic_init(I2C_0);
        ret |= power_bat_init(0);
        if (ret)
                return ret;
index 2e1dba6a48d6eba0e311cd9da5d8857e9806430d..54d0e1e0e3b22721795ae77d6403a415dfca2bae 100644 (file)
@@ -45,6 +45,10 @@ int power_init_board(void)
 {
        int ret;
 
+       /*
+        * For PMIC the I2C bus is named as I2C5, but it is connected
+        * to logical I2C adapter 0
+        */
        ret = pmic_init(I2C_5);
        if (ret)
                return ret;
index dee8710316023523d7b8055fc492d1df66f23ad7..837851838d6b93dae8f882f490ce17bff8d758ed 100644 (file)
@@ -65,8 +65,8 @@ local_bus_init(void)
 
        get_sys_info(&sysinfo);
 
-       lbc_mhz = sysinfo.freqLocalBus / 1000000;
-       clkdiv = sysinfo.freqSystemBus / sysinfo.freqLocalBus;
+       lbc_mhz = sysinfo.freq_localbus / 1000000;
+       clkdiv = sysinfo.freq_systembus / sysinfo.freq_localbus;
 
        debug("LCRR=0x%x, CD=%d, MHz=%d\n", lcrr, clkdiv, lbc_mhz);
 
index 635236835a5787b4d38e95aa43f44e2cf420114f..9921f8fc4f12ba1e17c5260894517f7303af823a 100644 (file)
@@ -1,31 +1,6 @@
-/*------------------------------------------------------------------------------+
- *
- *      This souce code has been made available to you by EuroDesign
- *      (www.eurodsn.de). It's based on the original IBM source code, so
- *      this follows:
- *
- *   This source code is dual-licensed.  You may use it under the terms of the
- *   GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *------------------------------------------------------------------------------- */
-
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 #include <config.h>
 #include <asm/ppc4xx.h>
 
index 77498b6e1df77ec2941bded43d5da3c833f1a827..5596d27133087108e426e8f688fda9232ab671d9 100644 (file)
@@ -2,28 +2,7 @@
  * Copyright (C) 2002 ETC s.r.o.
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the ETC s.r.o. nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    BSD-3-Clause
  *
  * Written by Marcel Telka <marcel@telka.sk>, 2002.
  *
diff --git a/board/siemens/common/board.c b/board/siemens/common/board.c
new file mode 100644 (file)
index 0000000..6279c32
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * Common board functions for siemens AM335X based boards
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * U-Boot file:/board/ti/am335x/board.c
+ * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <spl.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/omap.h>
+#include <asm/arch/ddr_defs.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/mmc_host_def.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/io.h>
+#include <asm/emif.h>
+#include <asm/gpio.h>
+#include <i2c.h>
+#include <miiphy.h>
+#include <cpsw.h>
+#include <watchdog.h>
+#include "../common/factoryset.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_SPL_BUILD
+void set_uart_mux_conf(void)
+{
+       enable_uart0_pin_mux();
+}
+
+void set_mux_conf_regs(void)
+{
+       /* Initalize the board header */
+       enable_i2c0_pin_mux();
+       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+       if (read_eeprom() < 0)
+               puts("Could not get board ID.\n");
+
+       enable_board_pin_mux();
+}
+
+void sdram_init(void)
+{
+       spl_siemens_board_init();
+       board_init_ddr();
+
+       return;
+}
+#endif /* #ifdef CONFIG_SPL_BUILD */
+
+#ifndef CONFIG_SPL_BUILD
+/*
+ * Basic board specific setup.  Pinmux has been handled already.
+ */
+int board_init(void)
+{
+#if defined(CONFIG_HW_WATCHDOG)
+       hw_watchdog_init();
+#endif /* defined(CONFIG_HW_WATCHDOG) */
+       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+       if (read_eeprom() < 0)
+               puts("Could not get board ID.\n");
+
+       gd->bd->bi_arch_number = CONFIG_MACH_TYPE;
+       gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
+
+#ifdef CONFIG_FACTORYSET
+       factoryset_read_eeprom(CONFIG_SYS_I2C_EEPROM_ADDR);
+#endif
+       gpmc_init();
+
+#ifdef CONFIG_VIDEO
+       board_video_init();
+#endif
+
+       return 0;
+}
+#endif /* #ifndef CONFIG_SPL_BUILD */
+
+#define OSC    (V_OSCK/1000000)
+const struct dpll_params dpll_ddr = {
+               DDR_PLL_FREQ, OSC-1, 1, -1, -1, -1, -1};
+
+const struct dpll_params *get_dpll_ddr_params(void)
+{
+       return &dpll_ddr;
+}
+
+#ifdef CONFIG_BOARD_LATE_INIT
+int board_late_init(void)
+{
+       omap_nand_switch_ecc(1, 8);
+
+       return 0;
+}
+#endif
+
+#ifndef CONFIG_SPL_BUILD
+#if defined(BOARD_DFU_BUTTON_GPIO)
+/*
+ * This command returns the status of the user button on
+ * Input - none
+ * Returns -   1 if button is held down
+ *             0 if button is not held down
+ */
+static int
+do_userbutton(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       int button = 0;
+       int gpio;
+
+       gpio = BOARD_DFU_BUTTON_GPIO;
+       gpio_request(gpio, "DFU");
+       gpio_direction_input(gpio);
+       if (gpio_get_value(gpio))
+               button = 1;
+       else
+               button = 0;
+
+       gpio_free(gpio);
+       if (!button) {
+               /* LED0 - RED=1: GPIO2_0 2*32 = 64 */
+               gpio_request(BOARD_DFU_BUTTON_LED, "");
+               gpio_direction_output(BOARD_DFU_BUTTON_LED, 1);
+               gpio_set_value(BOARD_DFU_BUTTON_LED, 1);
+       }
+
+       return button;
+}
+
+U_BOOT_CMD(
+       dfubutton, CONFIG_SYS_MAXARGS, 1, do_userbutton,
+       "Return the status of the DFU button",
+       ""
+);
+#endif
+
+static int
+do_usertestwdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       printf("\n\n\n Go into infinite loop\n\n\n");
+       while (1)
+               ;
+       return 0;
+};
+
+U_BOOT_CMD(
+       testwdt, CONFIG_SYS_MAXARGS, 1, do_usertestwdt,
+       "Sends U-Boot into infinite loop",
+       ""
+);
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+void enable_caches(void)
+{
+       printf("Enable d-cache\n");
+       /* Enable D-cache. I-cache is already enabled in start.S */
+       dcache_enable();
+}
+#endif /* CONFIG_SYS_DCACHE_OFF */
+#endif /* !CONFIG_SPL_BUILD */
diff --git a/board/siemens/common/factoryset.c b/board/siemens/common/factoryset.c
new file mode 100644 (file)
index 0000000..eda9141
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+ *
+ * Read FactorySet information from EEPROM into global structure.
+ * (C) Copyright 2013 Siemens Schweiz AG
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#if !defined(CONFIG_SPL_BUILD)
+
+#include <common.h>
+#include <i2c.h>
+#include <asm/io.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/unaligned.h>
+#include <net.h>
+#include <usbdescriptors.h>
+#include "factoryset.h"
+
+#define EEPR_PG_SZ             0x80
+#define EEPROM_FATORYSET_OFFSET        0x400
+#define OFF_PG            EEPROM_FATORYSET_OFFSET/EEPR_PG_SZ
+
+/* Global variable that contains necessary information from FactorySet */
+struct factorysetcontainer factory_dat;
+
+#define fact_get_char(i) *((char *)&eeprom_buf[i])
+
+static int fact_match(unsigned char *eeprom_buf, uchar *s1, int i2)
+{
+       if (s1 == NULL)
+               return -1;
+
+       while (*s1 == fact_get_char(i2++))
+               if (*s1++ == '=')
+                       return i2;
+
+       if (*s1 == '\0' && fact_get_char(i2-1) == '=')
+               return i2;
+
+       return -1;
+}
+
+static int get_factory_val(unsigned char *eeprom_buf, int size, uchar *name,
+                       uchar *buf, int len)
+{
+       int i, nxt = 0;
+
+       for (i = 0; fact_get_char(i) != '\0'; i = nxt + 1) {
+               int val, n;
+
+               for (nxt = i; fact_get_char(nxt) != '\0'; ++nxt) {
+                       if (nxt >= size)
+                               return -1;
+               }
+
+               val = fact_match(eeprom_buf, (uchar *)name, i);
+               if (val < 0)
+                       continue;
+
+               /* found; copy out */
+               for (n = 0; n < len; ++n, ++buf) {
+                       *buf = fact_get_char(val++);
+                       if (*buf == '\0')
+                               return n;
+               }
+
+               if (n)
+                       *--buf = '\0';
+
+               printf("env_buf [%d bytes] too small for value of \"%s\"\n",
+                      len, name);
+
+               return n;
+       }
+       return -1;
+}
+
+static
+int get_factory_record_val(unsigned char *eeprom_buf, int size,        uchar *record,
+       uchar *name, uchar *buf, int len)
+{
+       int ret = -1;
+       int i, nxt = 0;
+       int c;
+       unsigned char end = 0xff;
+
+       for (i = 0; fact_get_char(i) != end; i = nxt) {
+               nxt = i + 1;
+               if (fact_get_char(i) == '>') {
+                       int pos;
+                       int endpos;
+                       int z;
+
+                       c = strncmp((char *)&eeprom_buf[i + 1], (char *)record,
+                                   strlen((char *)record));
+                       if (c == 0) {
+                               /* record found */
+                               pos = i + strlen((char *)record) + 2;
+                               nxt = pos;
+                               /* search for "<" */
+                               c = -1;
+                               for (z = pos; fact_get_char(z) != end; z++) {
+                                       if ((fact_get_char(z) == '<')  ||
+                                           (fact_get_char(z) == '>')) {
+                                               endpos = z;
+                                               nxt = endpos;
+                                               c = 0;
+                                               break;
+                                       }
+                               }
+                       }
+                       if (c == 0) {
+                               /* end found -> call get_factory_val */
+                               eeprom_buf[endpos] = end;
+                               ret = get_factory_val(&eeprom_buf[pos],
+                                       size - pos, name, buf, len);
+                               /* fix buffer */
+                               eeprom_buf[endpos] = '<';
+                               debug("%s: %s.%s = %s\n",
+                                     __func__, record, name, buf);
+                               return ret;
+                       }
+               }
+       }
+       return ret;
+}
+
+int factoryset_read_eeprom(int i2c_addr)
+{
+       int i, pages = 0, size = 0;
+       unsigned char eeprom_buf[0x3c00], hdr[4], buf[MAX_STRING_LENGTH];
+       unsigned char *cp, *cp1;
+
+#if defined(CONFIG_DFU_FUNCTION)
+       factory_dat.usb_vendor_id = CONFIG_G_DNL_VENDOR_NUM;
+       factory_dat.usb_product_id = CONFIG_G_DNL_PRODUCT_NUM;
+#endif
+       if (i2c_probe(i2c_addr))
+               goto err;
+
+       if (i2c_read(i2c_addr, EEPROM_FATORYSET_OFFSET, 2, hdr, sizeof(hdr)))
+               goto err;
+
+       if ((hdr[0] != 0x99) || (hdr[1] != 0x80)) {
+               printf("FactorySet is not right in eeprom.\n");
+               return 1;
+       }
+
+       /* get FactorySet size */
+       size = (hdr[2] << 8) + hdr[3] + sizeof(hdr);
+       if (size > 0x3bfa)
+               size = 0x3bfa;
+
+       pages = size / EEPR_PG_SZ;
+
+       /*
+        * read the eeprom using i2c
+        * I can not read entire eeprom in once, so separate into several
+        * times. Furthermore, fetch eeprom take longer time, so we fetch
+        * data after every time we got a record from eeprom
+        */
+       debug("Read eeprom page :\n");
+       for (i = 0; i < pages; i++)
+               if (i2c_read(i2c_addr, (OFF_PG + i) * EEPR_PG_SZ, 2,
+                            eeprom_buf + (i * EEPR_PG_SZ), EEPR_PG_SZ))
+                       goto err;
+
+       if (size % EEPR_PG_SZ)
+               if (i2c_read(i2c_addr, (OFF_PG + pages) * EEPR_PG_SZ, 2,
+                            eeprom_buf + (pages * EEPR_PG_SZ),
+                            (size % EEPR_PG_SZ)))
+                       goto err;
+
+       /* we do below just for eeprom align */
+       for (i = 0; i < size; i++)
+               if (eeprom_buf[i] == '\n')
+                       eeprom_buf[i] = 0;
+
+       /* skip header */
+       size -= sizeof(hdr);
+       cp = (uchar *)eeprom_buf + sizeof(hdr);
+
+       /* get mac address */
+       get_factory_record_val(cp, size, (uchar *)"ETH1", (uchar *)"mac",
+                              buf, MAX_STRING_LENGTH);
+       cp1 = buf;
+       for (i = 0; i < 6; i++) {
+               factory_dat.mac[i] = simple_strtoul((char *)cp1, NULL, 16);
+               cp1 += 3;
+       }
+
+#if defined(CONFIG_DFU_FUNCTION)
+       /* read vid and pid for dfu mode */
+       if (0 <= get_factory_record_val(cp, size, (uchar *)"USBD1",
+                                       (uchar *)"vid", buf,
+                                       MAX_STRING_LENGTH)) {
+               factory_dat.usb_vendor_id = simple_strtoul((char *)buf,
+                                                          NULL, 16);
+       }
+
+       if (0 <= get_factory_record_val(cp, size, (uchar *)"USBD1",
+                                       (uchar *)"pid", buf,
+                                       MAX_STRING_LENGTH)) {
+               factory_dat.usb_product_id = simple_strtoul((char *)buf,
+                                                           NULL, 16);
+       }
+       printf("DFU USB: VID = 0x%4x, PID = 0x%4x\n", factory_dat.usb_vendor_id,
+              factory_dat.usb_product_id);
+#endif
+       if (0 <= get_factory_record_val(cp, size, (uchar *)"DEV",
+                                       (uchar *)"id", buf,
+                                       MAX_STRING_LENGTH)) {
+               if (strncmp((const char *)buf, "PXM50", 5) == 0)
+                       factory_dat.pxm50 = 1;
+               else
+                       factory_dat.pxm50 = 0;
+       }
+       debug("PXM50: %d\n", factory_dat.pxm50);
+#if defined(CONFIG_VIDEO)
+       if (0 <= get_factory_record_val(cp, size, (uchar *)"DISP1",
+                                       (uchar *)"name", factory_dat.disp_name,
+                                       MAX_STRING_LENGTH)) {
+               debug("display name: %s\n", factory_dat.disp_name);
+       }
+
+#endif
+       return 0;
+
+err:
+       printf("Could not read the EEPROM; something fundamentally wrong on the I2C bus.\n");
+       return 1;
+}
+
+static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
+
+static int factoryset_mac_setenv(void)
+{
+       uint8_t mac_addr[6];
+
+       debug("FactorySet: Set mac address\n");
+       if (is_valid_ether_addr(factory_dat.mac)) {
+               memcpy(mac_addr, factory_dat.mac, 6);
+       } else {
+               uint32_t mac_hi, mac_lo;
+
+               debug("Warning: FactorySet: <ethaddr> not set. Fallback to E-fuse\n");
+               mac_lo = readl(&cdev->macid0l);
+               mac_hi = readl(&cdev->macid0h);
+
+               mac_addr[0] = mac_hi & 0xFF;
+               mac_addr[1] = (mac_hi & 0xFF00) >> 8;
+               mac_addr[2] = (mac_hi & 0xFF0000) >> 16;
+               mac_addr[3] = (mac_hi & 0xFF000000) >> 24;
+               mac_addr[4] = mac_lo & 0xFF;
+               mac_addr[5] = (mac_lo & 0xFF00) >> 8;
+               if (!is_valid_ether_addr(mac_addr)) {
+                       printf("Warning: ethaddr not set by FactorySet or E-fuse. Set <ethaddr> variable to overcome this.\n");
+                       return -1;
+               }
+       }
+
+       eth_setenv_enetaddr("ethaddr", mac_addr);
+       return 0;
+}
+
+int factoryset_setenv(void)
+{
+       int ret = 0;
+
+       if (factoryset_mac_setenv() < 0)
+               ret = -1;
+
+       return ret;
+}
+
+int g_dnl_bind_fixup(struct usb_device_descriptor *dev)
+{
+       put_unaligned(factory_dat.usb_vendor_id, &dev->idVendor);
+       put_unaligned(factory_dat.usb_product_id, &dev->idProduct);
+       return 0;
+}
+#endif /* defined(CONFIG_SPL_BUILD) */
diff --git a/board/siemens/common/factoryset.h b/board/siemens/common/factoryset.h
new file mode 100644 (file)
index 0000000..445f384
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Common board functions for siemens AM335X based boards
+ * (C) Copyright 2013 Siemens Schweiz AG
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __FACTORYSET_H
+#define __FACTORYSET_H
+
+#define MAX_STRING_LENGTH      32
+
+struct factorysetcontainer {
+       uchar mac[6];
+       int usb_vendor_id;
+       int usb_product_id;
+       int pxm50;
+#if defined(CONFIG_VIDEO)
+       unsigned char disp_name[MAX_STRING_LENGTH];
+#endif
+};
+
+int factoryset_read_eeprom(int i2c_addr);
+int factoryset_setenv(void);
+extern struct factorysetcontainer factory_dat;
+
+#endif /* __FACTORYSET_H */
diff --git a/board/siemens/dxr2/Makefile b/board/siemens/dxr2/Makefile
new file mode 100644 (file)
index 0000000..a09b467
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Makefile
+#
+# (C) Copyright 2013 Siemens Schweiz AG
+# (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+#
+# Based on:
+# u-boot:/board/ti/am335x/Makefile
+# Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+#
+# SPDX-License-Identifier:     GPL-2.0+
+#
+
+include $(TOPDIR)/config.mk
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif
+
+LIB    = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS  := mux.o
+endif
+
+COBJS  += board.o
+ifndef CONFIG_SPL_BUILD
+COBJS += ../common/factoryset.o
+endif
+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 $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/siemens/dxr2/board.c b/board/siemens/dxr2/board.c
new file mode 100644 (file)
index 0000000..af9d84f
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+ * Board functions for TI AM335X based dxr2 board
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ *
+ * Board functions for TI AM335X based boards
+ * u-boot:/board/ti/am335x/board.c
+ *
+ * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <spl.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/omap.h>
+#include <asm/arch/ddr_defs.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/mmc_host_def.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/io.h>
+#include <asm/emif.h>
+#include <asm/gpio.h>
+#include <i2c.h>
+#include <miiphy.h>
+#include <cpsw.h>
+#include <watchdog.h>
+#include "board.h"
+#include "../common/factoryset.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_SPL_BUILD
+static struct dxr2_baseboard_id __attribute__((section(".data"))) settings;
+
+const struct ddr3_data ddr3_default = {
+       0x33524444, 0x56312e33, 0x0100, 0x0001, 0x003A, 0x008A, 0x010B,
+       0x00C4, 0x0888A39B, 0x26247FDA, 0x501F821F, 0x0006, 0x61C04AB2,
+       0x00000618,
+};
+
+static void set_default_ddr3_timings(void)
+{
+       printf("Set default DDR3 settings\n");
+       settings.ddr3 = ddr3_default;
+}
+
+static void print_ddr3_timings(void)
+{
+       printf("\n\nDDR3 Timing parameters:\n");
+       printf("Diff     Eeprom  Default\n");
+       PRINTARGS(magic);
+       PRINTARGS(version);
+       PRINTARGS(ddr3_sratio);
+       PRINTARGS(iclkout);
+
+       PRINTARGS(dt0rdsratio0);
+       PRINTARGS(dt0wdsratio0);
+       PRINTARGS(dt0fwsratio0);
+       PRINTARGS(dt0wrsratio0);
+
+       PRINTARGS(sdram_tim1);
+       PRINTARGS(sdram_tim2);
+       PRINTARGS(sdram_tim3);
+
+       PRINTARGS(emif_ddr_phy_ctlr_1);
+
+       PRINTARGS(sdram_config);
+       PRINTARGS(ref_ctrl);
+}
+
+static void print_chip_data(void)
+{
+       printf("\n");
+       printf("Device: '%s'\n", settings.chip.sdevname);
+       printf("HW version: '%s'\n", settings.chip.shwver);
+}
+#endif /* CONFIG_SPL_BUILD */
+
+/*
+ * Read header information from EEPROM into global structure.
+ */
+static int read_eeprom(void)
+{
+       /* Check if baseboard eeprom is available */
+       if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) {
+               printf("Could not probe the EEPROM; something fundamentally wrong on the I2C bus.\n");
+               return 1;
+       }
+
+#ifdef CONFIG_SPL_BUILD
+       /* Read Siemens eeprom data (DDR3) */
+       if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, EEPROM_ADDR_DDR3, 2,
+                    (uchar *)&settings.ddr3, sizeof(struct ddr3_data))) {
+               printf("Could not read the EEPROM; something fundamentally wrong on the I2C bus.\nUse default DDR3 timings\n");
+               set_default_ddr3_timings();
+       }
+       /* Read Siemens eeprom data (CHIP) */
+       if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, EEPROM_ADDR_CHIP, 2,
+                    (uchar *)&settings.chip, sizeof(settings.chip)))
+               printf("Could not read chip settings\n");
+
+       if (ddr3_default.magic == settings.ddr3.magic &&
+           ddr3_default.version == settings.ddr3.version) {
+               printf("Using DDR3 settings from EEPROM\n");
+       } else {
+               if (ddr3_default.magic != settings.ddr3.magic)
+                       printf("Error: No valid DDR3 data in eeprom.\n");
+               if (ddr3_default.version != settings.ddr3.version)
+                       printf("Error: DDR3 data version does not match.\n");
+
+               printf("Using default settings\n");
+               set_default_ddr3_timings();
+       }
+
+       if (MAGIC_CHIP == settings.chip.magic) {
+               printf("Valid chip data in eeprom\n");
+               print_chip_data();
+       } else {
+               printf("Error: No chip data in eeprom\n");
+       }
+
+       print_ddr3_timings();
+#endif
+       return 0;
+}
+
+#ifdef CONFIG_SPL_BUILD
+static void board_init_ddr(void)
+{
+struct emif_regs dxr2_ddr3_emif_reg_data = {
+       .zq_config = 0x50074BE4,
+};
+
+struct ddr_data dxr2_ddr3_data = {
+       .datadldiff0 = PHY_DLL_LOCK_DIFF,
+};
+
+struct cmd_control dxr2_ddr3_cmd_ctrl_data = {
+       .cmd0dldiff = 0,
+       .cmd1dldiff = 0,
+       .cmd2dldiff = 0,
+};
+       /* pass values from eeprom */
+       dxr2_ddr3_emif_reg_data.sdram_tim1 = settings.ddr3.sdram_tim1;
+       dxr2_ddr3_emif_reg_data.sdram_tim2 = settings.ddr3.sdram_tim2;
+       dxr2_ddr3_emif_reg_data.sdram_tim3 = settings.ddr3.sdram_tim3;
+       dxr2_ddr3_emif_reg_data.emif_ddr_phy_ctlr_1 =
+               settings.ddr3.emif_ddr_phy_ctlr_1;
+       dxr2_ddr3_emif_reg_data.sdram_config = settings.ddr3.sdram_config;
+       dxr2_ddr3_emif_reg_data.ref_ctrl = settings.ddr3.ref_ctrl;
+
+       dxr2_ddr3_data.datardsratio0 = settings.ddr3.dt0rdsratio0;
+       dxr2_ddr3_data.datawdsratio0 = settings.ddr3.dt0wdsratio0;
+       dxr2_ddr3_data.datafwsratio0 = settings.ddr3.dt0fwsratio0;
+       dxr2_ddr3_data.datawrsratio0 = settings.ddr3.dt0wrsratio0;
+
+       dxr2_ddr3_cmd_ctrl_data.cmd0csratio = settings.ddr3.ddr3_sratio;
+       dxr2_ddr3_cmd_ctrl_data.cmd0iclkout = settings.ddr3.iclkout;
+       dxr2_ddr3_cmd_ctrl_data.cmd1csratio = settings.ddr3.ddr3_sratio;
+       dxr2_ddr3_cmd_ctrl_data.cmd1iclkout = settings.ddr3.iclkout;
+       dxr2_ddr3_cmd_ctrl_data.cmd2csratio = settings.ddr3.ddr3_sratio;
+       dxr2_ddr3_cmd_ctrl_data.cmd2iclkout = settings.ddr3.iclkout;
+
+       config_ddr(DDR_PLL_FREQ, DXR2_IOCTRL_VAL, &dxr2_ddr3_data,
+                  &dxr2_ddr3_cmd_ctrl_data, &dxr2_ddr3_emif_reg_data, 0);
+}
+
+static void spl_siemens_board_init(void)
+{
+       return;
+}
+#endif /* if def CONFIG_SPL_BUILD */
+
+#if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \
+       (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD))
+static void cpsw_control(int enabled)
+{
+       /* VTP can be added here */
+
+       return;
+}
+
+static struct cpsw_slave_data cpsw_slaves[] = {
+       {
+               .slave_reg_ofs  = 0x208,
+               .sliver_reg_ofs = 0xd80,
+               .phy_id         = 0,
+               .phy_if         = PHY_INTERFACE_MODE_MII,
+       },
+};
+
+static struct cpsw_platform_data cpsw_data = {
+       .mdio_base              = CPSW_MDIO_BASE,
+       .cpsw_base              = CPSW_BASE,
+       .mdio_div               = 0xff,
+       .channels               = 4,
+       .cpdma_reg_ofs          = 0x800,
+       .slaves                 = 1,
+       .slave_data             = cpsw_slaves,
+       .ale_reg_ofs            = 0xd00,
+       .ale_entries            = 1024,
+       .host_port_reg_ofs      = 0x108,
+       .hw_stats_reg_ofs       = 0x900,
+       .bd_ram_ofs             = 0x2000,
+       .mac_control            = (1 << 5),
+       .control                = cpsw_control,
+       .host_port_num          = 0,
+       .version                = CPSW_CTRL_VERSION_2,
+};
+
+#if defined(CONFIG_DRIVER_TI_CPSW) || \
+       (defined(CONFIG_USB_ETHER) && defined(CONFIG_MUSB_GADGET))
+int board_eth_init(bd_t *bis)
+{
+       struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
+       int n = 0;
+       int rv;
+
+       factoryset_setenv();
+
+       /* Set rgmii mode and enable rmii clock to be sourced from chip */
+       writel((RMII_MODE_ENABLE | RMII_CHIPCKL_ENABLE), &cdev->miisel);
+
+       rv = cpsw_register(&cpsw_data);
+       if (rv < 0)
+               printf("Error %d registering CPSW switch\n", rv);
+       else
+               n += rv;
+       return n;
+}
+#endif /* #if defined(CONFIG_DRIVER_TI_CPSW) */
+#endif /* #if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) */
+
+#include "../common/board.c"
diff --git a/board/siemens/dxr2/board.h b/board/siemens/dxr2/board.h
new file mode 100644 (file)
index 0000000..2be78fb
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * board.h
+ *
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * TI AM335x boards information header
+ * u-boot:/board/ti/am335x/board.h
+ *
+ * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+#define PARGS3(x)      settings.ddr3.x-ddr3_default.x, \
+                       settings.ddr3.x, ddr3_default.x
+#define PRINTARGS(y)   printf("%x, %8x, %8x : "#y"\n", PARGS3(y))
+#define MAGIC_CHIP     0x50494843
+
+/* Automatic generated definition */
+/* Wed, 19 Jun 2013 10:57:48 +0200 */
+/* From file: draco/ddr3-data-micron.txt */
+struct ddr3_data {
+       unsigned int magic;                     /* 0x33524444 */
+       unsigned int version;                   /* 0x56312e33 */
+       unsigned short int ddr3_sratio;         /* 0x0100 */
+       unsigned short int iclkout;             /* 0x0001 */
+       unsigned short int dt0rdsratio0;        /* 0x003A */
+       unsigned short int dt0wdsratio0;        /* 0x008A */
+       unsigned short int dt0fwsratio0;        /* 0x010B */
+       unsigned short int dt0wrsratio0;        /* 0x00C4 */
+       unsigned int sdram_tim1;                /* 0x0888A39B */
+       unsigned int sdram_tim2;                /* 0x26247FDA */
+       unsigned int sdram_tim3;                /* 0x501F821F */
+       unsigned short int emif_ddr_phy_ctlr_1; /* 0x0006 */
+       unsigned int sdram_config;              /* 0x61C04AB2 */
+       unsigned int ref_ctrl;                  /* 0x00000618 */
+};
+
+struct chip_data {
+       unsigned int  magic;
+       char sdevname[16];
+       char shwver[7];
+};
+
+struct dxr2_baseboard_id {
+       struct ddr3_data ddr3;
+       struct chip_data chip;
+};
+
+/*
+ * We have three pin mux functions that must exist.  We must be able to enable
+ * uart0, for initial output and i2c0 to read the main EEPROM.  We then have a
+ * main pinmux function that can be overridden to enable all other pinmux that
+ * is required on the board.
+ */
+void enable_uart0_pin_mux(void);
+void enable_uart1_pin_mux(void);
+void enable_uart2_pin_mux(void);
+void enable_uart3_pin_mux(void);
+void enable_uart4_pin_mux(void);
+void enable_uart5_pin_mux(void);
+void enable_i2c0_pin_mux(void);
+void enable_board_pin_mux(void);
+#endif
diff --git a/board/siemens/dxr2/mux.c b/board/siemens/dxr2/mux.c
new file mode 100644 (file)
index 0000000..bc80b79
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * pinmux setup for siemens dxr2 board
+ *
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * u-boot:/board/ti/am335x/mux.c
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/mux.h>
+#include <asm/io.h>
+#include <i2c.h>
+#include "board.h"
+
+static struct module_pin_mux uart0_pin_mux[] = {
+       {OFFSET(uart0_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)},  /* UART0_RXD */
+       {OFFSET(uart0_txd), (MODE(0) | PULLUDEN)},              /* UART0_TXD */
+       {-1},
+};
+
+static struct module_pin_mux uart3_pin_mux[] = {
+       {OFFSET(spi0_cs1), (MODE(1) | PULLUP_EN | RXACTIVE)},   /* UART3_RXD */
+       {OFFSET(ecap0_in_pwm0_out), (MODE(1) | PULLUDEN)},      /* UART3_TXD */
+       {-1},
+};
+
+static struct module_pin_mux i2c0_pin_mux[] = {
+       {OFFSET(i2c0_sda), (MODE(0) | RXACTIVE |
+                       PULLUDEN | SLEWCTRL)}, /* I2C_DATA */
+       {OFFSET(i2c0_scl), (MODE(0) | RXACTIVE |
+                       PULLUDEN | SLEWCTRL)}, /* I2C_SCLK */
+       {-1},
+};
+
+static struct module_pin_mux nand_pin_mux[] = {
+       {OFFSET(gpmc_ad0), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD0 */
+       {OFFSET(gpmc_ad1), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD1 */
+       {OFFSET(gpmc_ad2), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD2 */
+       {OFFSET(gpmc_ad3), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD3 */
+       {OFFSET(gpmc_ad4), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD4 */
+       {OFFSET(gpmc_ad5), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD5 */
+       {OFFSET(gpmc_ad6), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD6 */
+       {OFFSET(gpmc_ad7), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD7 */
+       {OFFSET(gpmc_wait0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* NAND WAIT */
+       {OFFSET(gpmc_wpn), (MODE(7) | PULLUP_EN | RXACTIVE)},   /* NAND_WPN */
+       {OFFSET(gpmc_csn0), (MODE(0) | PULLUDEN)},      /* NAND_CS0 */
+       {OFFSET(gpmc_advn_ale), (MODE(0) | PULLUDEN)}, /* NAND_ADV_ALE */
+       {OFFSET(gpmc_oen_ren), (MODE(0) | PULLUDEN)},   /* NAND_OE */
+       {OFFSET(gpmc_wen), (MODE(0) | PULLUDEN)},       /* NAND_WEN */
+       {OFFSET(gpmc_be0n_cle), (MODE(0) | PULLUDEN)},  /* NAND_BE_CLE */
+       {-1},
+};
+
+static struct module_pin_mux gpios_pin_mux[] = {
+       /* DFU button GPIO0_27*/
+       {OFFSET(gpmc_ad11), (MODE(7) | PULLUDEN | RXACTIVE)},
+       {OFFSET(gpmc_csn3), MODE(7) },                  /* LED0 GPIO2_0 */
+       {OFFSET(emu0), MODE(7)},                        /* LED1 GPIO3_7 */
+       {-1},
+};
+
+static struct module_pin_mux ethernet_pin_mux[] = {
+       {OFFSET(mii1_col), (MODE(3) | RXACTIVE)},
+       {OFFSET(mii1_crs), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_rxerr), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_txen), (MODE(1))},
+       {OFFSET(mii1_rxdv), (MODE(3) | RXACTIVE)},
+       {OFFSET(mii1_txd3), (MODE(7) | RXACTIVE)},
+       {OFFSET(mii1_txd2), (MODE(7) | RXACTIVE)},
+       {OFFSET(mii1_txd1), (MODE(1))},
+       {OFFSET(mii1_txd0), (MODE(1))},
+       {OFFSET(mii1_txclk), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_rxclk), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_rxd3), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_rxd2), (MODE(1))},
+       {OFFSET(mii1_rxd1), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_rxd0), (MODE(1) | RXACTIVE)},
+       {OFFSET(rmii1_refclk), (MODE(0) | RXACTIVE)},
+       {OFFSET(mdio_data), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mdio_clk), (MODE(0) | PULLUP_EN)},
+       {-1},
+};
+
+void enable_uart0_pin_mux(void)
+{
+       configure_module_pin_mux(uart0_pin_mux);
+}
+
+void enable_uart3_pin_mux(void)
+{
+       configure_module_pin_mux(uart3_pin_mux);
+}
+
+void enable_i2c0_pin_mux(void)
+{
+       configure_module_pin_mux(i2c0_pin_mux);
+}
+
+void enable_board_pin_mux(void)
+{
+       enable_uart3_pin_mux();
+       configure_module_pin_mux(nand_pin_mux);
+       configure_module_pin_mux(ethernet_pin_mux);
+       configure_module_pin_mux(gpios_pin_mux);
+}
diff --git a/board/siemens/pxm2/Makefile b/board/siemens/pxm2/Makefile
new file mode 100644 (file)
index 0000000..a09b467
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Makefile
+#
+# (C) Copyright 2013 Siemens Schweiz AG
+# (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+#
+# Based on:
+# u-boot:/board/ti/am335x/Makefile
+# Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+#
+# SPDX-License-Identifier:     GPL-2.0+
+#
+
+include $(TOPDIR)/config.mk
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif
+
+LIB    = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS  := mux.o
+endif
+
+COBJS  += board.o
+ifndef CONFIG_SPL_BUILD
+COBJS += ../common/factoryset.o
+endif
+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 $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/siemens/pxm2/board.c b/board/siemens/pxm2/board.c
new file mode 100644 (file)
index 0000000..2c1841f
--- /dev/null
@@ -0,0 +1,429 @@
+/*
+ * Board functions for TI AM335X based pxm2 board
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * u-boot:/board/ti/am335x/board.c
+ *
+ * Board functions for TI AM335X based boards
+ *
+ * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <spl.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/omap.h>
+#include <asm/arch/ddr_defs.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/mmc_host_def.h>
+#include <asm/arch/sys_proto.h>
+#include "../../../drivers/video/da8xx-fb.h"
+#include <asm/io.h>
+#include <asm/emif.h>
+#include <asm/gpio.h>
+#include <i2c.h>
+#include <miiphy.h>
+#include <cpsw.h>
+#include <watchdog.h>
+#include "board.h"
+#include "../common/factoryset.h"
+#include "pmic.h"
+#include <nand.h>
+#include <bmp_layout.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_SPL_BUILD
+static void board_init_ddr(void)
+{
+struct emif_regs pxm2_ddr3_emif_reg_data = {
+       .sdram_config = 0x41805332,
+       .sdram_tim1 = 0x666b3c9,
+       .sdram_tim2 = 0x243631ca,
+       .sdram_tim3 = 0x33f,
+       .emif_ddr_phy_ctlr_1 = 0x100005,
+       .zq_config = 0,
+       .ref_ctrl = 0x81a,
+};
+
+struct ddr_data pxm2_ddr3_data = {
+       .datardsratio0 = 0x81204812,
+       .datawdsratio0 = 0,
+       .datafwsratio0 = 0x8020080,
+       .datawrsratio0 = 0x4010040,
+       .datauserank0delay = 1,
+       .datadldiff0 = PHY_DLL_LOCK_DIFF,
+};
+
+struct cmd_control pxm2_ddr3_cmd_ctrl_data = {
+       .cmd0csratio = 0x80,
+       .cmd0dldiff = 0,
+       .cmd0iclkout = 0,
+       .cmd1csratio = 0x80,
+       .cmd1dldiff = 0,
+       .cmd1iclkout = 0,
+       .cmd2csratio = 0x80,
+       .cmd2dldiff = 0,
+       .cmd2iclkout = 0,
+};
+
+       config_ddr(DDR_PLL_FREQ, DXR2_IOCTRL_VAL, &pxm2_ddr3_data,
+                  &pxm2_ddr3_cmd_ctrl_data, &pxm2_ddr3_emif_reg_data, 0);
+}
+
+/*
+ * voltage switching for MPU frequency switching.
+ * @module = mpu - 0, core - 1
+ * @vddx_op_vol_sel = vdd voltage to set
+ */
+
+#define MPU    0
+#define CORE   1
+
+int voltage_update(unsigned int module, unsigned char vddx_op_vol_sel)
+{
+       uchar buf[4];
+       unsigned int reg_offset;
+
+       if (module == MPU)
+               reg_offset = PMIC_VDD1_OP_REG;
+       else
+               reg_offset = PMIC_VDD2_OP_REG;
+
+       /* Select VDDx OP   */
+       if (i2c_read(PMIC_CTRL_I2C_ADDR, reg_offset, 1, buf, 1))
+               return 1;
+
+       buf[0] &= ~PMIC_OP_REG_CMD_MASK;
+
+       if (i2c_write(PMIC_CTRL_I2C_ADDR, reg_offset, 1, buf, 1))
+               return 1;
+
+       /* Configure VDDx OP  Voltage */
+       if (i2c_read(PMIC_CTRL_I2C_ADDR, reg_offset, 1, buf, 1))
+               return 1;
+
+       buf[0] &= ~PMIC_OP_REG_SEL_MASK;
+       buf[0] |= vddx_op_vol_sel;
+
+       if (i2c_write(PMIC_CTRL_I2C_ADDR, reg_offset, 1, buf, 1))
+               return 1;
+
+       if (i2c_read(PMIC_CTRL_I2C_ADDR, reg_offset, 1, buf, 1))
+               return 1;
+
+       if ((buf[0] & PMIC_OP_REG_SEL_MASK) != vddx_op_vol_sel)
+               return 1;
+
+       return 0;
+}
+
+#define OSC     (V_OSCK/1000000)
+
+const struct dpll_params dpll_mpu_pxm2 = {
+               720, OSC-1, 1, -1, -1, -1, -1};
+
+void spl_siemens_board_init(void)
+{
+       uchar buf[4];
+       /*
+        * pxm2 PMIC code.  All boards currently want an MPU voltage
+        * of 1.2625V and CORE voltage of 1.1375V to operate at
+        * 720MHz.
+        */
+       if (i2c_probe(PMIC_CTRL_I2C_ADDR))
+               return;
+
+       /* VDD1/2 voltage selection register access by control i/f */
+       if (i2c_read(PMIC_CTRL_I2C_ADDR, PMIC_DEVCTRL_REG, 1, buf, 1))
+               return;
+
+       buf[0] |= PMIC_DEVCTRL_REG_SR_CTL_I2C_SEL_CTL_I2C;
+
+       if (i2c_write(PMIC_CTRL_I2C_ADDR, PMIC_DEVCTRL_REG, 1, buf, 1))
+               return;
+
+       /* Frequency switching for OPP 120 */
+       if (voltage_update(MPU, PMIC_OP_REG_SEL_1_2_6) ||
+           voltage_update(CORE, PMIC_OP_REG_SEL_1_1_3)) {
+               printf("voltage update failed\n");
+       }
+}
+#endif /* if def CONFIG_SPL_BUILD */
+
+int read_eeprom(void)
+{
+       /* nothing ToDo here for this board */
+
+       return 0;
+}
+
+#if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \
+       (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD))
+static void cpsw_control(int enabled)
+{
+       /* VTP can be added here */
+
+       return;
+}
+
+static struct cpsw_slave_data cpsw_slaves[] = {
+       {
+               .slave_reg_ofs  = 0x208,
+               .sliver_reg_ofs = 0xd80,
+               .phy_id         = 0,
+               .phy_if         = PHY_INTERFACE_MODE_RMII,
+       },
+       {
+               .slave_reg_ofs  = 0x308,
+               .sliver_reg_ofs = 0xdc0,
+               .phy_id         = 1,
+               .phy_if         = PHY_INTERFACE_MODE_RMII,
+       },
+};
+
+static struct cpsw_platform_data cpsw_data = {
+       .mdio_base              = CPSW_MDIO_BASE,
+       .cpsw_base              = CPSW_BASE,
+       .mdio_div               = 0xff,
+       .channels               = 4,
+       .cpdma_reg_ofs          = 0x800,
+       .slaves                 = 1,
+       .slave_data             = cpsw_slaves,
+       .ale_reg_ofs            = 0xd00,
+       .ale_entries            = 1024,
+       .host_port_reg_ofs      = 0x108,
+       .hw_stats_reg_ofs       = 0x900,
+       .bd_ram_ofs             = 0x2000,
+       .mac_control            = (1 << 5),
+       .control                = cpsw_control,
+       .host_port_num          = 0,
+       .version                = CPSW_CTRL_VERSION_2,
+};
+#endif /* #if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) */
+
+#if defined(CONFIG_DRIVER_TI_CPSW) || \
+       (defined(CONFIG_USB_ETHER) && defined(CONFIG_MUSB_GADGET))
+int board_eth_init(bd_t *bis)
+{
+       int n = 0;
+#if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \
+       (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD))
+       struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
+#ifdef CONFIG_FACTORYSET
+       int rv;
+       if (!is_valid_ether_addr(factory_dat.mac))
+               printf("Error: no valid mac address\n");
+       else
+               eth_setenv_enetaddr("ethaddr", factory_dat.mac);
+#endif /* #ifdef CONFIG_FACTORYSET */
+
+       /* Set rgmii mode and enable rmii clock to be sourced from chip */
+       writel(RGMII_MODE_ENABLE , &cdev->miisel);
+
+       rv = cpsw_register(&cpsw_data);
+       if (rv < 0)
+               printf("Error %d registering CPSW switch\n", rv);
+       else
+               n += rv;
+#endif
+       return n;
+}
+#endif /* #if defined(CONFIG_DRIVER_TI_CPSW) */
+
+#if defined(CONFIG_VIDEO) && !defined(CONFIG_SPL_BUILD)
+static struct da8xx_panel lcd_panels[] = {
+       /* AUO G156XW01 V1 */
+       [0] = {
+               .name = "AUO_G156XW01_V1",
+               .width = 1376,
+               .height = 768,
+               .hfp = 14,
+               .hbp = 64,
+               .hsw = 56,
+               .vfp = 1,
+               .vbp = 28,
+               .vsw = 3,
+               .pxl_clk = 60000000,
+               .invert_pxl_clk = 0,
+       },
+       /* AUO B101EVN06 V0 */
+       [1] = {
+               .name = "AUO_B101EVN06_V0",
+               .width = 1280,
+               .height = 800,
+               .hfp = 52,
+               .hbp = 84,
+               .hsw = 36,
+               .vfp = 3,
+               .vbp = 14,
+               .vsw = 6,
+               .pxl_clk = 60000000,
+               .invert_pxl_clk = 0,
+       },
+       /*
+        * Settings from factoryset
+        * stored in EEPROM
+        */
+       [2] = {
+               .name = "factoryset",
+               .width = 0,
+               .height = 0,
+               .hfp = 0,
+               .hbp = 0,
+               .hsw = 0,
+               .vfp = 0,
+               .vbp = 0,
+               .vsw = 0,
+               .pxl_clk = 60000000,
+               .invert_pxl_clk = 0,
+       },
+};
+
+static const struct display_panel disp_panel = {
+       WVGA,
+       32,
+       16,
+       COLOR_ACTIVE,
+};
+
+static const struct lcd_ctrl_config lcd_cfg = {
+       &disp_panel,
+       .ac_bias                = 255,
+       .ac_bias_intrpt         = 0,
+       .dma_burst_sz           = 16,
+       .bpp                    = 32,
+       .fdd                    = 0x80,
+       .tft_alt_mode           = 0,
+       .stn_565_mode           = 0,
+       .mono_8bit_mode         = 0,
+       .invert_line_clock      = 1,
+       .invert_frm_clock       = 1,
+       .sync_edge              = 0,
+       .sync_ctrl              = 1,
+       .raster_order           = 0,
+};
+
+static int set_gpio(int gpio, int state)
+{
+       gpio_request(gpio, "temp");
+       gpio_direction_output(gpio, state);
+       gpio_set_value(gpio, state);
+       gpio_free(gpio);
+       return 0;
+}
+
+static int enable_backlight(void)
+{
+       set_gpio(BOARD_LCD_POWER, 1);
+       set_gpio(BOARD_BACK_LIGHT, 1);
+       set_gpio(BOARD_TOUCH_POWER, 1);
+       return 0;
+}
+
+static int enable_pwm(void)
+{
+       struct pwmss_regs *pwmss = (struct pwmss_regs *)PWMSS0_BASE;
+       struct pwmss_ecap_regs *ecap;
+       int ticks = PWM_TICKS;
+       int duty = PWM_DUTY;
+
+       ecap = (struct pwmss_ecap_regs *)AM33XX_ECAP0_BASE;
+       /* enable clock */
+       setbits_le32(&pwmss->clkconfig, ECAP_CLK_EN);
+       /* TimeStam Counter register */
+       writel(0xdb9, &ecap->tsctr);
+       /* config period */
+       writel(ticks - 1, &ecap->cap3);
+       writel(ticks - 1, &ecap->cap1);
+       setbits_le16(&ecap->ecctl2,
+                    (ECTRL2_MDSL_ECAP | ECTRL2_SYNCOSEL_MASK | 0xd0));
+       /* config duty */
+       writel(duty, &ecap->cap2);
+       writel(duty, &ecap->cap4);
+       /* start */
+       setbits_le16(&ecap->ecctl2, ECTRL2_CTRSTP_FREERUN);
+       return 0;
+}
+
+static struct dpll_regs dpll_lcd_regs = {
+       .cm_clkmode_dpll = CM_WKUP + 0x98,
+       .cm_idlest_dpll = CM_WKUP + 0x48,
+       .cm_clksel_dpll = CM_WKUP + 0x54,
+};
+
+/* no console on this board */
+int board_cfb_skip(void)
+{
+       return 1;
+}
+
+#define PLL_GET_M(v) ((v >> 8) & 0x7ff)
+#define PLL_GET_N(v) (v & 0x7f)
+
+static int get_clk(struct dpll_regs *dpll_regs)
+{
+       unsigned int val;
+       unsigned int m, n;
+       int f = 0;
+
+       val = readl(dpll_regs->cm_clksel_dpll);
+       m = PLL_GET_M(val);
+       n = PLL_GET_N(val);
+       f = (m * V_OSCK) / n;
+
+       return f;
+};
+
+int clk_get(int clk)
+{
+       return get_clk(&dpll_lcd_regs);
+};
+
+static int conf_disp_pll(int m, int n)
+{
+       struct cm_perpll *cmper = (struct cm_perpll *)CM_PER;
+       struct cm_dpll *cmdpll = (struct cm_dpll *)CM_DPLL;
+       struct dpll_params dpll_lcd = {m, n, -1, -1, -1, -1, -1};
+
+       u32 *const clk_domains[] = {
+               &cmper->lcdclkctrl,
+               0
+       };
+       u32 *const clk_modules_explicit_en[] = {
+               &cmper->lcdclkctrl,
+               &cmper->lcdcclkstctrl,
+               &cmper->epwmss0clkctrl,
+               0
+       };
+       do_enable_clocks(clk_domains, clk_modules_explicit_en, 1);
+       writel(0x0, &cmdpll->clklcdcpixelclk);
+
+       do_setup_dpll(&dpll_lcd_regs, &dpll_lcd);
+
+       return 0;
+}
+
+static int board_video_init(void)
+{
+       /* set 300 MHz */
+       conf_disp_pll(25, 2);
+       if (factory_dat.pxm50)
+               da8xx_video_init(&lcd_panels[0], &lcd_cfg, lcd_cfg.bpp);
+       else
+               da8xx_video_init(&lcd_panels[1], &lcd_cfg, lcd_cfg.bpp);
+
+       enable_pwm();
+       enable_backlight();
+
+       return 0;
+}
+#endif
+#include "../common/board.c"
diff --git a/board/siemens/pxm2/board.h b/board/siemens/pxm2/board.h
new file mode 100644 (file)
index 0000000..0362612
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * board.h
+ *
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * TI AM335x boards information header
+ * u-boot:/board/ti/am335x/board.h
+ *
+ * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+void enable_uart0_pin_mux(void);
+void enable_i2c0_pin_mux(void);
+void enable_board_pin_mux(void);
+#endif
diff --git a/board/siemens/pxm2/mux.c b/board/siemens/pxm2/mux.c
new file mode 100644 (file)
index 0000000..c64b0d2
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+ * pinmux setup for siemens pxm2 board
+ *
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * u-boot:/board/ti/am335x/mux.c
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/mux.h>
+#include <asm/io.h>
+#include <i2c.h>
+#include "board.h"
+
+static struct module_pin_mux uart0_pin_mux[] = {
+       {OFFSET(uart0_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)},  /* UART0_RXD */
+       {OFFSET(uart0_txd), (MODE(0) | PULLUDEN)},              /* UART0_TXD */
+       {OFFSET(nnmi), (MODE(0) | PULLUP_EN | RXACTIVE)},       /* UART0_TXD */
+       {-1},
+};
+
+#ifdef CONFIG_NAND
+static struct module_pin_mux nand_pin_mux[] = {
+       {OFFSET(gpmc_ad0), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD0 */
+       {OFFSET(gpmc_ad1), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD1 */
+       {OFFSET(gpmc_ad2), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD2 */
+       {OFFSET(gpmc_ad3), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD3 */
+       {OFFSET(gpmc_ad4), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD4 */
+       {OFFSET(gpmc_ad5), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD5 */
+       {OFFSET(gpmc_ad6), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD6 */
+       {OFFSET(gpmc_ad7), (MODE(0) | PULLUP_EN | RXACTIVE)},   /* NAND AD7 */
+       {OFFSET(gpmc_wait0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* NAND WAIT */
+       {OFFSET(gpmc_wpn), (MODE(7) | PULLUP_EN | RXACTIVE)},   /* NAND_WPN */
+       {OFFSET(gpmc_csn0), (MODE(0) | PULLUDEN)},      /* NAND_CS0 */
+       {OFFSET(gpmc_advn_ale), (MODE(0) | PULLUDEN)},  /* NAND_ADV_ALE */
+       {OFFSET(gpmc_oen_ren), (MODE(0) | PULLUDEN)},   /* NAND_OE */
+       {OFFSET(gpmc_wen), (MODE(0) | PULLUDEN)},       /* NAND_WEN */
+       {OFFSET(gpmc_be0n_cle), (MODE(0) | PULLUDEN)},  /* NAND_BE_CLE */
+       {OFFSET(gpmc_a11), MODE(7) | RXACTIVE | PULLUP_EN}, /* RGMII2_RD0 */
+       {OFFSET(mcasp0_ahclkx), MODE(7) | PULLUDEN},    /* MCASP0_AHCLKX */
+       {-1},
+};
+#endif
+
+static struct module_pin_mux i2c0_pin_mux[] = {
+       {OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDEN | SLEWCTRL)},
+       {OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDEN | SLEWCTRL)},
+       {-1},
+};
+
+static struct module_pin_mux i2c1_pin_mux[] = {
+       {OFFSET(spi0_d1), (MODE(2) | RXACTIVE | PULLUDEN | SLEWCTRL)},
+       {OFFSET(spi0_cs0), (MODE(2) | RXACTIVE | PULLUDEN | SLEWCTRL)},
+       {-1},
+};
+
+#ifndef CONFIG_NO_ETH
+static struct module_pin_mux rgmii1_pin_mux[] = {
+       {OFFSET(mii1_txen), MODE(2)},                   /* RGMII1_TCTL */
+       {OFFSET(mii1_rxdv), MODE(2) | RXACTIVE},        /* RGMII1_RCTL */
+       {OFFSET(mii1_txd3), MODE(2)},                   /* RGMII1_TD3 */
+       {OFFSET(mii1_txd2), MODE(2)},                   /* RGMII1_TD2 */
+       {OFFSET(mii1_txd1), MODE(2)},                   /* RGMII1_TD1 */
+       {OFFSET(mii1_txd0), MODE(2)},                   /* RGMII1_TD0 */
+       {OFFSET(mii1_txclk), MODE(2)},                  /* RGMII1_TCLK */
+       {OFFSET(mii1_rxclk), MODE(2) | RXACTIVE},       /* RGMII1_RCLK */
+       {OFFSET(mii1_rxd3), MODE(2) | RXACTIVE},        /* RGMII1_RD3 */
+       {OFFSET(mii1_rxd2), MODE(2) | RXACTIVE},        /* RGMII1_RD2 */
+       {OFFSET(mii1_rxd1), MODE(2) | RXACTIVE},        /* RGMII1_RD1 */
+       {OFFSET(mii1_rxd0), MODE(2) | RXACTIVE},        /* RGMII1_RD0 */
+       {OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN}, /* MDIO_DATA */
+       {OFFSET(mdio_clk), MODE(0) | PULLUP_EN},        /* MDIO_CLK */
+       {-1},
+};
+
+static struct module_pin_mux rgmii2_pin_mux[] = {
+       {OFFSET(gpmc_a0), MODE(2)},                     /* RGMII2_TCTL */
+       {OFFSET(gpmc_a1), MODE(2) | RXACTIVE},          /* RGMII2_RCTL */
+       {OFFSET(gpmc_a2), MODE(2)},                     /* RGMII2_TD3 */
+       {OFFSET(gpmc_a3), MODE(2)},                     /* RGMII2_TD2 */
+       {OFFSET(gpmc_a4), MODE(2)},                     /* RGMII2_TD1 */
+       {OFFSET(gpmc_a5), MODE(2)},                     /* RGMII2_TD0 */
+       {OFFSET(gpmc_a6), MODE(7)},                     /* RGMII2_TCLK */
+       {OFFSET(gpmc_a7), MODE(2) | RXACTIVE},          /* RGMII2_RCLK */
+       {OFFSET(gpmc_a8), MODE(2) | RXACTIVE},          /* RGMII2_RD3 */
+       {OFFSET(gpmc_a9), MODE(7)},                     /* RGMII2_RD2 */
+       {OFFSET(gpmc_a10), MODE(2) | RXACTIVE},         /* RGMII2_RD1 */
+       {OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN}, /* MDIO_DATA */
+       {OFFSET(mdio_clk), MODE(0) | PULLUP_EN},        /* MDIO_CLK */
+       {-1},
+};
+#endif
+
+#ifdef CONFIG_MMC
+static struct module_pin_mux mmc0_pin_mux[] = {
+       {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)},  /* MMC0_DAT3 */
+       {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)},  /* MMC0_DAT2 */
+       {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)},  /* MMC0_DAT1 */
+       {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)},  /* MMC0_DAT0 */
+       {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)},   /* MMC0_CLK */
+       {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)},   /* MMC0_CMD */
+       {OFFSET(mcasp0_aclkr), (MODE(4) | RXACTIVE)},           /* MMC0_WP */
+       {OFFSET(spi0_cs1), (MODE(5) | RXACTIVE | PULLUDEN)},    /* MMC0_CD */
+       {-1},
+};
+#endif
+
+static struct module_pin_mux lcdc_pin_mux[] = {
+       {OFFSET(lcd_data0), (MODE(0) | PULLUDDIS)},     /* LCD_DAT0 */
+       {OFFSET(lcd_data1), (MODE(0) | PULLUDDIS)},     /* LCD_DAT1 */
+       {OFFSET(lcd_data2), (MODE(0) | PULLUDDIS)},     /* LCD_DAT2 */
+       {OFFSET(lcd_data3), (MODE(0) | PULLUDDIS)},     /* LCD_DAT3 */
+       {OFFSET(lcd_data4), (MODE(0) | PULLUDDIS)},     /* LCD_DAT4 */
+       {OFFSET(lcd_data5), (MODE(0) | PULLUDDIS)},     /* LCD_DAT5 */
+       {OFFSET(lcd_data6), (MODE(0) | PULLUDDIS)},     /* LCD_DAT6 */
+       {OFFSET(lcd_data7), (MODE(0) | PULLUDDIS)},     /* LCD_DAT7 */
+       {OFFSET(lcd_data8), (MODE(0) | PULLUDDIS)},     /* LCD_DAT8 */
+       {OFFSET(lcd_data9), (MODE(0) | PULLUDDIS)},     /* LCD_DAT9 */
+       {OFFSET(lcd_data10), (MODE(0) | PULLUDDIS)},    /* LCD_DAT10 */
+       {OFFSET(lcd_data11), (MODE(0) | PULLUDDIS)},    /* LCD_DAT11 */
+       {OFFSET(lcd_data12), (MODE(0) | PULLUDDIS)},    /* LCD_DAT12 */
+       {OFFSET(lcd_data13), (MODE(0) | PULLUDDIS)},    /* LCD_DAT13 */
+       {OFFSET(lcd_data14), (MODE(0) | PULLUDDIS)},    /* LCD_DAT14 */
+       {OFFSET(lcd_data15), (MODE(0) | PULLUDDIS)},    /* LCD_DAT15 */
+       {OFFSET(gpmc_ad8), (MODE(1))},                  /* LCD_DAT16 */
+       {OFFSET(gpmc_ad9), (MODE(1))},          /* LCD_DAT17 */
+       {OFFSET(gpmc_ad10), (MODE(1))},         /* LCD_DAT18 */
+       {OFFSET(gpmc_ad11), (MODE(1))},         /* LCD_DAT19 */
+       {OFFSET(gpmc_ad12), (MODE(1))},         /* LCD_DAT20 */
+       {OFFSET(gpmc_ad13), (MODE(1))},         /* LCD_DAT21 */
+       {OFFSET(gpmc_ad14), (MODE(1))},         /* LCD_DAT22 */
+       {OFFSET(gpmc_ad15), (MODE(1))},         /* LCD_DAT23 */
+       {OFFSET(lcd_vsync), (MODE(0))},         /* LCD_VSYNC */
+       {OFFSET(lcd_hsync), (MODE(0))},         /* LCD_HSYNC */
+       {OFFSET(lcd_pclk), (MODE(0))},          /* LCD_PCLK */
+       {OFFSET(lcd_ac_bias_en), (MODE(0))},    /* LCD_AC_BIAS_EN */
+       {-1},
+};
+
+static struct module_pin_mux ecap0_pin_mux[] = {
+       {OFFSET(ecap0_in_pwm0_out), (MODE(0))},
+       {-1},
+};
+
+static struct module_pin_mux gpio_pin_mux[] = {
+       {OFFSET(mcasp0_fsx), MODE(7)}, /* GPIO3_15 LCD power*/
+       {OFFSET(mcasp0_axr0), MODE(7)}, /* GPIO3_16 Backlight */
+       {OFFSET(gpmc_a9), MODE(7)}, /* GPIO1_25 Touch power */
+       {-1},
+};
+void enable_i2c0_pin_mux(void)
+{
+       configure_module_pin_mux(i2c0_pin_mux);
+}
+
+void enable_uart0_pin_mux(void)
+{
+       configure_module_pin_mux(uart0_pin_mux);
+}
+
+void enable_board_pin_mux(void)
+{
+       configure_module_pin_mux(uart0_pin_mux);
+       configure_module_pin_mux(i2c1_pin_mux);
+#ifdef CONFIG_NAND
+       configure_module_pin_mux(nand_pin_mux);
+#endif
+#ifndef CONFIG_NO_ETH
+       configure_module_pin_mux(rgmii1_pin_mux);
+       configure_module_pin_mux(rgmii2_pin_mux);
+#endif
+#ifdef CONFIG_MMC
+       configure_module_pin_mux(mmc0_pin_mux);
+#endif
+       configure_module_pin_mux(lcdc_pin_mux);
+       configure_module_pin_mux(gpio_pin_mux);
+       configure_module_pin_mux(ecap0_pin_mux);
+}
diff --git a/board/siemens/pxm2/pmic.h b/board/siemens/pxm2/pmic.h
new file mode 100644 (file)
index 0000000..c6347e5
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+#ifndef PMIC_H
+#define PMIC_H
+
+/*
+ * The PMIC on this board is a TPS65910.
+ */
+
+#define PMIC_SR_I2C_ADDR               0x12
+#define PMIC_CTRL_I2C_ADDR             0x2D
+/* PMIC Register offsets */
+#define PMIC_VDD1_REG                  0x21
+#define PMIC_VDD1_OP_REG               0x22
+#define PMIC_VDD2_REG                  0x24
+#define PMIC_VDD2_OP_REG               0x25
+#define PMIC_DEVCTRL_REG               0x3f
+
+/* VDD2 & VDD1 control register (VDD2_REG & VDD1_REG) */
+#define PMIC_VGAIN_SEL_MASK            (0x3 << 6)
+#define PMIC_ILMAX_MASK                        (0x1 << 5)
+#define PMIC_TSTEP_MASK                        (0x7 << 2)
+#define PMIC_ST_MASK                   (0x3)
+
+#define PMIC_REG_VGAIN_SEL_X1          (0x0 << 6)
+#define PMIC_REG_VGAIN_SEL_X1_0                (0x1 << 6)
+#define PMIC_REG_VGAIN_SEL_X3          (0x2 << 6)
+#define PMIC_REG_VGAIN_SEL_X4          (0x3 << 6)
+
+#define PMIC_REG_ILMAX_1_0_A           (0x0 << 5)
+#define PMIC_REG_ILMAX_1_5_A           (0x1 << 5)
+
+#define PMIC_REG_TSTEP_                        (0x0 << 2)
+#define PMIC_REG_TSTEP_12_5            (0x1 << 2)
+#define PMIC_REG_TSTEP_9_4             (0x2 << 2)
+#define PMIC_REG_TSTEP_7_5             (0x3 << 2)
+#define PMIC_REG_TSTEP_6_25            (0x4 << 2)
+#define PMIC_REG_TSTEP_4_7             (0x5 << 2)
+#define PMIC_REG_TSTEP_3_12            (0x6 << 2)
+#define PMIC_REG_TSTEP_2_5             (0x7 << 2)
+
+#define PMIC_REG_ST_OFF                        (0x0)
+#define PMIC_REG_ST_ON_HI_POW          (0x1)
+#define PMIC_REG_ST_OFF_1              (0x2)
+#define PMIC_REG_ST_ON_LOW_POW         (0x3)
+
+
+/* VDD2 & VDD1 voltage selection register. (VDD2_OP_REG & VDD1_OP_REG) */
+#define PMIC_OP_REG_SEL                                (0x7F)
+
+#define PMIC_OP_REG_CMD_MASK                   (0x1 << 7)
+#define PMIC_OP_REG_CMD_OP                     (0x0 << 7)
+#define PMIC_OP_REG_CMD_SR                     (0x1 << 7)
+
+#define PMIC_OP_REG_SEL_MASK                   (0x7F)
+#define PMIC_OP_REG_SEL_1_1_3                  (0x2E)  /* 1.1375 V */
+#define PMIC_OP_REG_SEL_1_2_6                  (0x38)  /* 1.2625 V */
+
+/* Device control register . (DEVCTRL_REG) */
+#define PMIC_DEVCTRL_REG_SR_CTL_I2C_MASK       (0x1 << 4)
+#define PMIC_DEVCTRL_REG_SR_CTL_I2C_SEL_SR_I2C (0x0 << 4)
+#define PMIC_DEVCTRL_REG_SR_CTL_I2C_SEL_CTL_I2C        (0x1 << 4)
+
+#endif
diff --git a/board/siemens/rut/Makefile b/board/siemens/rut/Makefile
new file mode 100644 (file)
index 0000000..a09b467
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Makefile
+#
+# (C) Copyright 2013 Siemens Schweiz AG
+# (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+#
+# Based on:
+# u-boot:/board/ti/am335x/Makefile
+# Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+#
+# SPDX-License-Identifier:     GPL-2.0+
+#
+
+include $(TOPDIR)/config.mk
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif
+
+LIB    = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS  := mux.o
+endif
+
+COBJS  += board.o
+ifndef CONFIG_SPL_BUILD
+COBJS += ../common/factoryset.o
+endif
+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 $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/siemens/rut/board.c b/board/siemens/rut/board.c
new file mode 100644 (file)
index 0000000..f2b0476
--- /dev/null
@@ -0,0 +1,432 @@
+/*
+ * Board functions for TI AM335X based rut board
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * u-boot:/board/ti/am335x/board.c
+ *
+ * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <spi.h>
+#include <spl.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/omap.h>
+#include <asm/arch/ddr_defs.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/mmc_host_def.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/io.h>
+#include <asm/emif.h>
+#include <asm/gpio.h>
+#include <i2c.h>
+#include <miiphy.h>
+#include <cpsw.h>
+#include <video.h>
+#include <watchdog.h>
+#include "board.h"
+#include "../common/factoryset.h"
+#include "../../../drivers/video/da8xx-fb.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Read header information from EEPROM into global structure.
+ */
+static int read_eeprom(void)
+{
+       return 0;
+}
+
+#ifdef CONFIG_SPL_BUILD
+static void board_init_ddr(void)
+{
+struct emif_regs rut_ddr3_emif_reg_data = {
+       .sdram_config = 0x61C04AB2,
+       .sdram_tim1 = 0x0888A39B,
+       .sdram_tim2 = 0x26337FDA,
+       .sdram_tim3 = 0x501F830F,
+       .emif_ddr_phy_ctlr_1 = 0x6,
+       .zq_config = 0x50074BE4,
+       .ref_ctrl = 0x93B,
+};
+
+struct ddr_data rut_ddr3_data = {
+       .datardsratio0 = 0x3b,
+       .datawdsratio0 = 0x85,
+       .datafwsratio0 = 0x100,
+       .datawrsratio0 = 0xc1,
+       .datauserank0delay = 1,
+       .datadldiff0 = PHY_DLL_LOCK_DIFF,
+};
+
+struct cmd_control rut_ddr3_cmd_ctrl_data = {
+       .cmd0csratio = 0x40,
+       .cmd0dldiff = 0,
+       .cmd0iclkout = 1,
+       .cmd1csratio = 0x40,
+       .cmd1dldiff = 0,
+       .cmd1iclkout = 1,
+       .cmd2csratio = 0x40,
+       .cmd2dldiff = 0,
+       .cmd2iclkout = 1,
+};
+
+       config_ddr(DDR_PLL_FREQ, RUT_IOCTRL_VAL, &rut_ddr3_data,
+                  &rut_ddr3_cmd_ctrl_data, &rut_ddr3_emif_reg_data, 0);
+}
+
+static void spl_siemens_board_init(void)
+{
+       return;
+}
+#endif /* if def CONFIG_SPL_BUILD */
+
+#if defined(CONFIG_DRIVER_TI_CPSW)
+static void cpsw_control(int enabled)
+{
+       /* VTP can be added here */
+
+       return;
+}
+
+static struct cpsw_slave_data cpsw_slaves[] = {
+       {
+               .slave_reg_ofs  = 0x208,
+               .sliver_reg_ofs = 0xd80,
+               .phy_id         = 1,
+               .phy_if         = PHY_INTERFACE_MODE_RMII,
+       },
+       {
+               .slave_reg_ofs  = 0x308,
+               .sliver_reg_ofs = 0xdc0,
+               .phy_id         = 0,
+               .phy_if         = PHY_INTERFACE_MODE_RMII,
+       },
+};
+
+static struct cpsw_platform_data cpsw_data = {
+       .mdio_base              = CPSW_MDIO_BASE,
+       .cpsw_base              = CPSW_BASE,
+       .mdio_div               = 0xff,
+       .channels               = 8,
+       .cpdma_reg_ofs          = 0x800,
+       .slaves                 = 1,
+       .slave_data             = cpsw_slaves,
+       .ale_reg_ofs            = 0xd00,
+       .ale_entries            = 1024,
+       .host_port_reg_ofs      = 0x108,
+       .hw_stats_reg_ofs       = 0x900,
+       .bd_ram_ofs             = 0x2000,
+       .mac_control            = (1 << 5),
+       .control                = cpsw_control,
+       .host_port_num          = 0,
+       .version                = CPSW_CTRL_VERSION_2,
+};
+
+#if defined(CONFIG_DRIVER_TI_CPSW) || \
+       (defined(CONFIG_USB_ETHER) && defined(CONFIG_MUSB_GADGET))
+int board_eth_init(bd_t *bis)
+{
+       struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
+       int n = 0;
+       int rv;
+
+#ifndef CONFIG_SPL_BUILD
+       factoryset_setenv();
+#endif
+
+       /* Set rgmii mode and enable rmii clock to be sourced from chip */
+       writel((RMII_MODE_ENABLE | RMII_CHIPCKL_ENABLE), &cdev->miisel);
+
+       rv = cpsw_register(&cpsw_data);
+       if (rv < 0)
+               printf("Error %d registering CPSW switch\n", rv);
+       else
+               n += rv;
+       return n;
+}
+#endif /* #if defined(CONFIG_DRIVER_TI_CPSW) */
+#endif /* #if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) */
+
+#if defined(CONFIG_HW_WATCHDOG)
+static bool hw_watchdog_init_done;
+static int  hw_watchdog_trigger_level;
+
+void hw_watchdog_reset(void)
+{
+       if (!hw_watchdog_init_done)
+               return;
+
+       hw_watchdog_trigger_level = hw_watchdog_trigger_level ? 0 : 1;
+       gpio_set_value(WATCHDOG_TRIGGER_GPIO, hw_watchdog_trigger_level);
+}
+
+void hw_watchdog_init(void)
+{
+       gpio_request(WATCHDOG_TRIGGER_GPIO, "watchdog_trigger");
+       gpio_direction_output(WATCHDOG_TRIGGER_GPIO, hw_watchdog_trigger_level);
+
+       hw_watchdog_reset();
+
+       hw_watchdog_init_done = 1;
+}
+#endif /* defined(CONFIG_HW_WATCHDOG) */
+
+#if defined(CONFIG_VIDEO) && !defined(CONFIG_SPL_BUILD)
+static struct da8xx_panel lcd_panels[] = {
+       /* FORMIKE, 4.3", 480x800, KWH043MC17-F01 */
+       [0] = {
+               .name   = "KWH043MC17-F01",
+               .width  = 480,
+               .height = 800,
+               .hfp = 50,              /* no spec, "don't care" values */
+               .hbp = 50,
+               .hsw = 50,
+               .vfp = 50,
+               .vbp = 50,
+               .vsw = 50,
+               .pxl_clk = 35910000,    /* tCYCD=20ns, max 50MHz, 60fps */
+               .invert_pxl_clk = 1,
+       },
+       /* FORMIKE, 4.3", 480x800, KWH043ST20-F01 */
+       [1] = {
+               .name   = "KWH043ST20-F01",
+               .width  = 480,
+               .height = 800,
+               .hfp = 50,              /* no spec, "don't care" values */
+               .hbp = 50,
+               .hsw = 50,
+               .vfp = 50,
+               .vbp = 50,
+               .vsw = 50,
+               .pxl_clk = 35910000,    /* tCYCD=20ns, max 50MHz, 60fps */
+               .invert_pxl_clk = 1,
+       },
+       /* Multi-Inno, 4.3", 480x800, MI0430VT-1 */
+       [2] = {
+               .name   = "MI0430VT-1",
+               .width  = 480,
+               .height = 800,
+               .hfp = 50,              /* no spec, "don't care" values */
+               .hbp = 50,
+               .hsw = 50,
+               .vfp = 50,
+               .vbp = 50,
+               .vsw = 50,
+               .pxl_clk = 35910000,    /* tCYCD=20ns, max 50MHz, 60fps */
+               .invert_pxl_clk = 1,
+       },
+};
+
+static const struct display_panel disp_panels[] = {
+       [0] = {
+               WVGA,
+               16,     /* RGB 888 */
+               16,
+               COLOR_ACTIVE,
+       },
+       [1] = {
+               WVGA,
+               16,     /* RGB 888 */
+               16,
+               COLOR_ACTIVE,
+       },
+       [2] = {
+               WVGA,
+               24,     /* RGB 888 */
+               16,
+               COLOR_ACTIVE,
+       },
+};
+
+static const struct lcd_ctrl_config lcd_cfgs[] = {
+       [0] = {
+               &disp_panels[0],
+               .ac_bias                = 255,
+               .ac_bias_intrpt         = 0,
+               .dma_burst_sz           = 16,
+               .bpp                    = 16,
+               .fdd                    = 0x80,
+               .tft_alt_mode           = 0,
+               .stn_565_mode           = 0,
+               .mono_8bit_mode         = 0,
+               .invert_line_clock      = 1,
+               .invert_frm_clock       = 1,
+               .sync_edge              = 0,
+               .sync_ctrl              = 1,
+               .raster_order           = 0,
+       },
+       [1] = {
+               &disp_panels[1],
+               .ac_bias                = 255,
+               .ac_bias_intrpt         = 0,
+               .dma_burst_sz           = 16,
+               .bpp                    = 16,
+               .fdd                    = 0x80,
+               .tft_alt_mode           = 0,
+               .stn_565_mode           = 0,
+               .mono_8bit_mode         = 0,
+               .invert_line_clock      = 1,
+               .invert_frm_clock       = 1,
+               .sync_edge              = 0,
+               .sync_ctrl              = 1,
+               .raster_order           = 0,
+       },
+       [2] = {
+               &disp_panels[2],
+               .ac_bias                = 255,
+               .ac_bias_intrpt         = 0,
+               .dma_burst_sz           = 16,
+               .bpp                    = 24,
+               .fdd                    = 0x80,
+               .tft_alt_mode           = 0,
+               .stn_565_mode           = 0,
+               .mono_8bit_mode         = 0,
+               .invert_line_clock      = 1,
+               .invert_frm_clock       = 1,
+               .sync_edge              = 0,
+               .sync_ctrl              = 1,
+               .raster_order           = 0,
+       },
+
+};
+
+/* no console on this board */
+int board_cfb_skip(void)
+{
+       return 1;
+}
+
+#define PLL_GET_M(v) ((v >> 8) & 0x7ff)
+#define PLL_GET_N(v) (v & 0x7f)
+
+static struct dpll_regs dpll_lcd_regs = {
+       .cm_clkmode_dpll = CM_WKUP + 0x98,
+       .cm_idlest_dpll = CM_WKUP + 0x48,
+       .cm_clksel_dpll = CM_WKUP + 0x54,
+};
+
+static int get_clk(struct dpll_regs *dpll_regs)
+{
+       unsigned int val;
+       unsigned int m, n;
+       int f = 0;
+
+       val = readl(dpll_regs->cm_clksel_dpll);
+       m = PLL_GET_M(val);
+       n = PLL_GET_N(val);
+       f = (m * V_OSCK) / n;
+
+       return f;
+};
+
+
+
+int clk_get(int clk)
+{
+       return get_clk(&dpll_lcd_regs);
+};
+
+static int conf_disp_pll(int m, int n)
+{
+       struct cm_perpll *cmper = (struct cm_perpll *)CM_PER;
+       struct cm_dpll *cmdpll = (struct cm_dpll *)CM_DPLL;
+       struct dpll_params dpll_lcd = {m, n, -1, -1, -1, -1, -1};
+#if defined(DISPL_PLL_SPREAD_SPECTRUM)
+       struct cm_wkuppll *cmwkup = (struct cm_wkuppll *)CM_WKUP;
+#endif
+
+       u32 *const clk_domains[] = {
+               &cmper->lcdclkctrl,
+               0
+       };
+       u32 *const clk_modules_explicit_en[] = {
+               &cmper->lcdclkctrl,
+               &cmper->lcdcclkstctrl,
+               &cmper->spi1clkctrl,
+               0
+       };
+       do_enable_clocks(clk_domains, clk_modules_explicit_en, 1);
+       /* 0x44e0_0500 write lcdc pixel clock mux Linux hat hier 0 */
+       writel(0x0, &cmdpll->clklcdcpixelclk);
+
+       do_setup_dpll(&dpll_lcd_regs, &dpll_lcd);
+
+#if defined(DISPL_PLL_SPREAD_SPECTRUM)
+       writel(0x64, &cmwkup->resv6[3]); /* 0x50 */
+       writel(0x800, &cmwkup->resv6[2]); /* 0x4c */
+       writel(readl(&cmwkup->clkmoddplldisp) | (1 << 12),
+              &cmwkup->clkmoddplldisp); /* 0x98 */
+#endif
+       return 0;
+}
+
+static int set_gpio(int gpio, int state)
+{
+       gpio_request(gpio, "temp");
+       gpio_direction_output(gpio, state);
+       gpio_set_value(gpio, state);
+       gpio_free(gpio);
+       return 0;
+}
+
+static int enable_lcd(void)
+{
+       unsigned char buf[1];
+
+       set_gpio(BOARD_LCD_RESET, 1);
+
+       /* spi lcd init */
+       kwh043st20_f01_spi_startup(1, 0, 5000000, SPI_MODE_3);
+
+       /* backlight on */
+       buf[0] = 0xf;
+       i2c_write(0x24, 0x7, 1, buf, 1);
+       buf[0] = 0x3f;
+       i2c_write(0x24, 0x8, 1, buf, 1);
+       return 0;
+}
+
+int arch_early_init_r(void)
+{
+       enable_lcd();
+       return 0;
+}
+
+static int board_video_init(void)
+{
+       int i;
+       int anzdisp = ARRAY_SIZE(lcd_panels);
+       int display = 1;
+
+       for (i = 0; i < anzdisp; i++) {
+               if (strncmp((const char *)factory_dat.disp_name,
+                           lcd_panels[i].name,
+                   strlen((const char *)factory_dat.disp_name)) == 0) {
+                       printf("DISPLAY: %s\n", factory_dat.disp_name);
+                       break;
+               }
+       }
+       if (i == anzdisp) {
+               i = 1;
+               printf("%s: %s not found, using default %s\n", __func__,
+                      factory_dat.disp_name, lcd_panels[i].name);
+       }
+       conf_disp_pll(25, 2);
+       da8xx_video_init(&lcd_panels[display], &lcd_cfgs[display],
+                        lcd_cfgs[display].bpp);
+
+       return 0;
+}
+
+
+#endif /* ifdef CONFIG_VIDEO */
+#include "../common/board.c"
diff --git a/board/siemens/rut/board.h b/board/siemens/rut/board.h
new file mode 100644 (file)
index 0000000..0362612
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * board.h
+ *
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * TI AM335x boards information header
+ * u-boot:/board/ti/am335x/board.h
+ *
+ * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+void enable_uart0_pin_mux(void);
+void enable_i2c0_pin_mux(void);
+void enable_board_pin_mux(void);
+#endif
diff --git a/board/siemens/rut/mux.c b/board/siemens/rut/mux.c
new file mode 100644 (file)
index 0000000..1eced01
--- /dev/null
@@ -0,0 +1,347 @@
+/*
+ * pinmux setup for siemens rut board
+ *
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * u-boot:/board/ti/am335x/mux.c
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/mux.h>
+#include <asm/io.h>
+#include <i2c.h>
+
+static struct module_pin_mux uart0_pin_mux[] = {
+       {OFFSET(uart0_rxd), (MODE(0) | PULLUDDIS | RXACTIVE)},  /* UART0_RXD */
+       {OFFSET(uart0_txd), (MODE(0) | PULLUDDIS)},             /* UART0_TXD */
+       {-1},
+};
+
+static struct module_pin_mux ddr_pin_mux[] = {
+       {OFFSET(ddr_resetn), (MODE(0))},
+       {OFFSET(ddr_csn0), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_ck), (MODE(0))},
+       {OFFSET(ddr_nck), (MODE(0))},
+       {OFFSET(ddr_casn), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_rasn), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_wen), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_ba0), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_ba1), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_ba2), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a0), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a1), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a2), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a3), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a4), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a5), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a6), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a7), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a8), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a9), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a10), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a11), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a12), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a13), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a14), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_a15), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_odt), (MODE(0))},
+       {OFFSET(ddr_d0), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d1), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d2), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d3), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d4), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d5), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d6), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d7), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d8), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d9), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d10), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d11), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d12), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d13), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d14), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_d15), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_dqm0), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_dqm1), (MODE(0) | PULLUP_EN)},
+       {OFFSET(ddr_dqs0), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_dqsn0), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(ddr_dqs1), (MODE(0) | RXACTIVE)},
+       {OFFSET(ddr_dqsn1), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(ddr_vref), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ddr_vtp), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {-1},
+};
+
+static struct module_pin_mux lcd_pin_mux[] = {
+       {OFFSET(gpmc_ad8), (MODE(1))},
+       {OFFSET(gpmc_ad9), (MODE(1))},
+       {OFFSET(gpmc_ad10), (MODE(1))},
+       {OFFSET(gpmc_ad11), (MODE(1))},
+       {OFFSET(gpmc_ad12), (MODE(1))},
+       {OFFSET(gpmc_ad13), (MODE(1))},
+       {OFFSET(gpmc_ad14), (MODE(1))},
+       {OFFSET(gpmc_ad15), (MODE(1))},
+       {OFFSET(lcd_data0), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data1), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data2), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data3), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data4), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data5), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data6), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data7), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data8), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data9), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data10), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data11), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data12), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data13), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data14), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_data15), (MODE(0) | PULLUDDIS)},
+       {OFFSET(lcd_vsync), (MODE(0))},
+       {OFFSET(lcd_hsync), (MODE(0))},
+       {OFFSET(lcd_pclk), (MODE(0))},
+       {OFFSET(lcd_ac_bias_en), (MODE(0))},
+       {-1},
+};
+
+static struct module_pin_mux mmc0_pin_mux[] = {
+       {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {-1},
+};
+
+static struct module_pin_mux mii_pin_mux[] = {
+       {OFFSET(mii1_crs), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_rxerr), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_txen), (MODE(1))},
+       {OFFSET(mii1_txd1), (MODE(1))},
+       {OFFSET(mii1_txd0), (MODE(1))},
+       {OFFSET(mii1_rxd1), (MODE(1) | RXACTIVE)},
+       {OFFSET(mii1_rxd0), (MODE(1) | RXACTIVE)},
+       {OFFSET(rmii1_refclk), (MODE(0) | RXACTIVE)},
+       {OFFSET(mdio_data), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mdio_clk), (MODE(0) | PULLUP_EN)},
+       {-1},
+};
+
+static struct module_pin_mux gpio_pin_mux[] = {
+       {OFFSET(mii1_col), (MODE(7) | RXACTIVE)},
+       {OFFSET(uart1_ctsn), (MODE(7) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(uart1_rtsn), (MODE(7) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(uart1_rxd), (MODE(7) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(uart1_txd), (MODE(7) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(mii1_rxdv), (MODE(7) | RXACTIVE)},
+       {OFFSET(mii1_txd3), (MODE(7) | RXACTIVE)},
+       {OFFSET(mii1_txd2), (MODE(7) | RXACTIVE)},
+       {OFFSET(mii1_txclk), (MODE(7) | RXACTIVE)},
+       {OFFSET(mii1_rxclk), (MODE(7) | RXACTIVE)},
+       {OFFSET(mii1_rxd3), (MODE(7) | RXACTIVE)},
+       {OFFSET(mii1_rxd2), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a0), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a1), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a4), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a5), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a6), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a7), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a8), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a9), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a10), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_a11), (MODE(7) | RXACTIVE)},
+       {OFFSET(gpmc_wpn), (MODE(7) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(gpmc_be1n), (MODE(7) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(gpmc_csn1), (MODE(7) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(gpmc_csn2), (MODE(7) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(gpmc_csn3), (MODE(7) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mcasp0_aclkr), (MODE(7) | RXACTIVE)},
+       {OFFSET(mcasp0_fsr), (MODE(7))},
+       {OFFSET(mcasp0_axr1), (MODE(7) | RXACTIVE)},
+       {OFFSET(mcasp0_ahclkx), (MODE(7) | RXACTIVE)},
+       {OFFSET(xdma_event_intr0), (MODE(7) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(xdma_event_intr1), (MODE(7) | RXACTIVE | PULLUDDIS)},
+       {-1},
+};
+
+static struct module_pin_mux i2c0_pin_mux[] = {
+       {OFFSET(i2c0_sda), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(i2c0_scl), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {-1},
+};
+
+static struct module_pin_mux i2c1_pin_mux[] = {
+       {OFFSET(uart0_ctsn), (MODE(3) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(uart0_rtsn), (MODE(3) | RXACTIVE | PULLUDDIS)},
+       {-1},
+};
+
+static struct module_pin_mux usb0_pin_mux[] = {
+       {OFFSET(usb0_dm), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb0_dp), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb0_ce), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb0_id), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb0_vbus), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb0_drvvbus), (MODE(0))},
+       {-1},
+};
+
+static struct module_pin_mux usb1_pin_mux[] = {
+       {OFFSET(usb1_dm), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb1_dp), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb1_ce), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb1_id), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb1_vbus), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(usb1_drvvbus), (MODE(0))},
+       {-1},
+};
+
+static struct module_pin_mux spi0_pin_mux[] = {
+       {OFFSET(spi0_sclk), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(spi0_d0), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(spi0_d1), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(spi0_cs0), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(spi0_cs1), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {-1},
+};
+
+static struct module_pin_mux spi1_pin_mux[] = {
+       {OFFSET(mcasp0_aclkx), (MODE(3) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mcasp0_fsx), (MODE(3) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mcasp0_axr0), (MODE(3) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(mcasp0_ahclkr), (MODE(3) | RXACTIVE | PULLUP_EN)},
+       {-1},
+};
+
+static struct module_pin_mux jtag_pin_mux[] = {
+       {OFFSET(tms), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(tdi), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(tdo), (MODE(0) | PULLUP_EN)},
+       {OFFSET(tck), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(ntrst), (MODE(0) | RXACTIVE)},
+       {-1},
+};
+
+static struct module_pin_mux nand_pin_mux[] = {
+       {OFFSET(gpmc_ad0), (MODE(0) | RXACTIVE)},
+       {OFFSET(gpmc_ad1), (MODE(0) | RXACTIVE)},
+       {OFFSET(gpmc_ad2), (MODE(0) | RXACTIVE)},
+       {OFFSET(gpmc_ad3), (MODE(0) | RXACTIVE)},
+       {OFFSET(gpmc_ad4), (MODE(0) | RXACTIVE)},
+       {OFFSET(gpmc_ad5), (MODE(0) | RXACTIVE)},
+       {OFFSET(gpmc_ad6), (MODE(0) | RXACTIVE)},
+       {OFFSET(gpmc_ad7), (MODE(0) | RXACTIVE)},
+       {OFFSET(gpmc_advn_ale), (MODE(0) | PULLUP_EN)},
+       {OFFSET(gpmc_be0n_cle), (MODE(0) | PULLUP_EN)},
+       {OFFSET(gpmc_csn0), (MODE(0) | PULLUP_EN)},
+       {OFFSET(gpmc_oen_ren), (MODE(0) | PULLUP_EN)},
+       {OFFSET(gpmc_wen), (MODE(0) | PULLUP_EN)},
+       {-1},
+};
+
+static struct module_pin_mux ainx_pin_mux[] = {
+       {OFFSET(ain7), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ain6), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ain5), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ain4), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ain3), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ain2), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ain1), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ain0), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {-1},
+};
+
+static struct module_pin_mux rtc_pin_mux[] = {
+       {OFFSET(osc1_in), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(osc1_out), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(rtc_porz), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(enz_kaldo_1p8v), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {-1},
+};
+
+static struct module_pin_mux gpmc_pin_mux[] = {
+       {OFFSET(gpmc_wait0), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(gpmc_clk), (MODE(0) | RXACTIVE)},
+       {-1},
+};
+
+static struct module_pin_mux pmic_pin_mux[] = {
+       {OFFSET(pmic_power_en), (MODE(0) | PULLUP_EN)},
+       {-1},
+};
+
+static struct module_pin_mux osc_pin_mux[] = {
+       {OFFSET(osc0_in), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(osc0_out), (MODE(0) | PULLUP_EN)},
+       {-1},
+};
+
+static struct module_pin_mux pwm_pin_mux[] = {
+       {OFFSET(ecap0_in_pwm0_out), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(gpmc_a2), (MODE(6))},
+       {OFFSET(gpmc_a3), (MODE(6))},
+       {-1},
+};
+
+static struct module_pin_mux emu_pin_mux[] = {
+       {OFFSET(emu0), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {OFFSET(emu1), (MODE(0) | RXACTIVE | PULLUP_EN)},
+       {-1},
+};
+
+static struct module_pin_mux vref_pin_mux[] = {
+       {OFFSET(vrefp), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(vrefn), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {-1},
+};
+
+static struct module_pin_mux misc_pin_mux[] = {
+       {OFFSET(porz), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(nnmi), (MODE(0) | RXACTIVE | PULLUDDIS)},
+       {OFFSET(ext_wakeup), (MODE(0) | RXACTIVE)},
+       {-1},
+};
+
+void enable_uart0_pin_mux(void)
+{
+       configure_module_pin_mux(uart0_pin_mux);
+}
+
+void enable_i2c0_pin_mux(void)
+{
+       configure_module_pin_mux(i2c0_pin_mux);
+}
+
+void enable_board_pin_mux(void)
+{
+       configure_module_pin_mux(ddr_pin_mux);
+       configure_module_pin_mux(lcd_pin_mux);
+       configure_module_pin_mux(mmc0_pin_mux);
+       configure_module_pin_mux(mii_pin_mux);
+       configure_module_pin_mux(gpio_pin_mux);
+       configure_module_pin_mux(i2c1_pin_mux);
+       configure_module_pin_mux(usb0_pin_mux);
+       configure_module_pin_mux(usb1_pin_mux);
+       configure_module_pin_mux(spi0_pin_mux);
+       configure_module_pin_mux(spi1_pin_mux);
+       configure_module_pin_mux(jtag_pin_mux);
+       configure_module_pin_mux(nand_pin_mux);
+       configure_module_pin_mux(ainx_pin_mux);
+       configure_module_pin_mux(rtc_pin_mux);
+       configure_module_pin_mux(gpmc_pin_mux);
+       configure_module_pin_mux(pmic_pin_mux);
+       configure_module_pin_mux(osc_pin_mux);
+       configure_module_pin_mux(pwm_pin_mux);
+       configure_module_pin_mux(emu_pin_mux);
+       configure_module_pin_mux(vref_pin_mux);
+       configure_module_pin_mux(misc_pin_mux);
+}
index 97fd0e4bd10ca7d68919251b4655906242312acf..2caefbbe5844a217b4380160b00044c60b609826 100644 (file)
@@ -143,7 +143,7 @@ void local_bus_init (void)
 
        get_sys_info (&sysinfo);
        clkdiv = lbc->lcrr & LCRR_CLKDIV;
-       lbc_mhz = sysinfo.freqSystemBus / 1000000 / clkdiv;
+       lbc_mhz = sysinfo.freq_systembus / 1000000 / clkdiv;
 
        /* Disable PLL bypass for Local Bus Clock >= 66 MHz */
        if (lbc_mhz >= 66)
index 67b524673a106a1ebb08526f96f4afaff880f9dd..2a30ab89817df5881aca0a75241df847715f2a92 100644 (file)
@@ -13,7 +13,33 @@ documented in TI's reference designs:
 - AM335x EVM SK
 - Beaglebone White
 - Beaglebone Black
-'
+
+Customization
+=============
+
+Given that all of the above boards are reference platforms (and the
+Beaglebone platforms are OSHA), it is likely that this platform code and
+configuration will be used as the basis of a custom platform.  It is
+worth noting that aside from things such as NAND or MMC only being
+required if a custom platform makes use of these blocks, the following
+are required, depending on design:
+
+- GPIO is only required if DDR3 power is controlled in a way similar to
+  EVM SK
+- SPI is only required for SPI flash, or exposing the SPI bus.
+
+The following blocks are required:
+- I2C, to talk with the PMIC and ensure that we do not run afoul of
+  errata 1.0.24.
+
+When removing options as part of customization,
+CONFIG_EXTRA_ENV_SETTINGS will need additional care to update for your
+needs and to remove no longer relevant options as in some cases we
+define additional text blocks (such as for NAND or DFU strings).  Also
+note that all of the SPL options are grouped together, rather than with
+the IP blocks, so both areas will need their choices updated to reflect
+the custom design.
+
 NAND
 ====
 
index 04c37e2db6b3ad177fd43a082c772e33e298ac28..cc0442612ffe237fbde2255c330a31d80205ba37 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-/* MII mode defines */
-#define MII_MODE_ENABLE                0x0
-#define RGMII_MODE_ENABLE      0x3A
-
 /* GPIO that controls power to DDR on EVM-SK */
 #define GPIO_DDR_VTT_EN                7
 
@@ -460,7 +456,7 @@ int board_eth_init(bd_t *bis)
                cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =
                                PHY_INTERFACE_MODE_MII;
        } else {
-               writel(RGMII_MODE_ENABLE, &cdev->miisel);
+               writel((RGMII_MODE_ENABLE | RGMII_INT_DELAY), &cdev->miisel);
                cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =
                                PHY_INTERFACE_MODE_RGMII;
        }
index 2c00648470fe5728d3ef1b24aca6e7f457df3dd4..47063309e5698020864e641d4bf1b6eeb071e4b3 100644 (file)
 
 #include "mux_data.h"
 
+#ifdef CONFIG_USB_EHCI
+#include <usb.h>
+#include <asm/gpio.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/ehci.h>
+#include <asm/ehci-omap.h>
+
+#define DIE_ID_REG_BASE     (OMAP54XX_L4_CORE_BASE + 0x2000)
+#define DIE_ID_REG_OFFSET      0x200
+
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 const struct omap_sysinfo sysinfo = {
-       "Board: OMAP543EVM\n"
+       "Board: OMAP5432 uEVM\n"
 };
 
 /**
@@ -109,3 +121,85 @@ int board_mmc_init(bd_t *bis)
        return 0;
 }
 #endif
+
+#ifdef CONFIG_USB_EHCI
+static struct omap_usbhs_board_data usbhs_bdata = {
+       .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
+       .port_mode[1] = OMAP_EHCI_PORT_MODE_HSIC,
+       .port_mode[2] = OMAP_EHCI_PORT_MODE_HSIC,
+};
+
+static void enable_host_clocks(void)
+{
+       int hs_clk_ctrl_val = (OPTFCLKEN_HSIC60M_P3_CLK |
+                               OPTFCLKEN_HSIC480M_P3_CLK |
+                               OPTFCLKEN_HSIC60M_P2_CLK |
+                               OPTFCLKEN_HSIC480M_P2_CLK |
+                               OPTFCLKEN_UTMI_P3_CLK | OPTFCLKEN_UTMI_P2_CLK);
+
+       /* Enable port 2 and 3 clocks*/
+       setbits_le32((*prcm)->cm_l3init_hsusbhost_clkctrl, hs_clk_ctrl_val);
+
+       /* Enable port 2 and 3 usb host ports tll clocks*/
+       setbits_le32((*prcm)->cm_l3init_hsusbtll_clkctrl,
+                       (OPTFCLKEN_USB_CH1_CLK_ENABLE | OPTFCLKEN_USB_CH2_CLK_ENABLE));
+}
+
+int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
+{
+       int ret;
+       int auxclk;
+       int reg;
+       uint8_t device_mac[6];
+
+       enable_host_clocks();
+
+       if (!getenv("usbethaddr")) {
+               reg = DIE_ID_REG_BASE + DIE_ID_REG_OFFSET;
+
+               /*
+                * create a fake MAC address from the processor ID code.
+                * first byte is 0x02 to signify locally administered.
+                */
+               device_mac[0] = 0x02;
+               device_mac[1] = readl(reg + 0x10) & 0xff;
+               device_mac[2] = readl(reg + 0xC) & 0xff;
+               device_mac[3] = readl(reg + 0x8) & 0xff;
+               device_mac[4] = readl(reg) & 0xff;
+               device_mac[5] = (readl(reg) >> 8) & 0xff;
+
+               eth_setenv_enetaddr("usbethaddr", device_mac);
+       }
+
+       auxclk = readl((*prcm)->scrm_auxclk1);
+       /* Request auxilary clock */
+       auxclk |= AUXCLK_ENABLE_MASK;
+       writel(auxclk, (*prcm)->scrm_auxclk1);
+
+       ret = omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor);
+       if (ret < 0) {
+               puts("Failed to initialize ehci\n");
+               return ret;
+       }
+
+       return 0;
+}
+
+int ehci_hcd_stop(void)
+{
+       int ret;
+
+       ret = omap_ehci_hcd_stop();
+       return ret;
+}
+
+void usb_hub_reset_devices(int port)
+{
+       /* The LAN9730 needs to be reset after the port power has been set. */
+       if (port == 3) {
+               gpio_direction_output(CONFIG_OMAP_EHCI_PHY3_RESET_GPIO, 0);
+               udelay(10);
+               gpio_direction_output(CONFIG_OMAP_EHCI_PHY3_RESET_GPIO, 1);
+       }
+}
+#endif
index 612c13e4792f2b617df27155ed7cc7f5effad0a5..31ce363b63f14354f3859337426cdae1f427731f 100644 (file)
@@ -42,7 +42,8 @@ const struct pad_conf_entry core_padconf_array_essential[] = {
        {USBD0_SS_RX, (IEN | M0)},      /*  USBD0_SS_RX */
        {I2C5_SCL, (IEN | M0)}, /* I2C5_SCL */
        {I2C5_SDA, (IEN | M0)}, /* I2C5_SDA */
-
+       {HSI2_ACWAKE, (PTU | M6)},    /*  HSI2_ACWAKE */
+       {HSI2_CAFLAG, (PTU | M6)},    /*  HSI2_CAFLAG */
 };
 
 const struct pad_conf_entry wkup_padconf_array_essential[] = {
@@ -50,6 +51,7 @@ const struct pad_conf_entry wkup_padconf_array_essential[] = {
        {SR_PMIC_SCL, (PTU | IEN | M0)}, /* SR_PMIC_SCL */
        {SR_PMIC_SDA, (PTU | IEN | M0)}, /* SR_PMIC_SDA */
        {SYS_32K, (IEN | M0)}, /*  SYS_32K     */
+       {FREF_CLK1_OUT, (PTD | IEN | M0)},    /*  FREF_CLK1_OUT  */
 
 };
 
index 25daaa9ffb140eadf925ab8981ef7aed1bdb363a..79270a9e94e2e2e6a1e85b29d2b6c84ff228dd9a 100644 (file)
@@ -28,7 +28,6 @@ int board_init(void)
 {
        gpmc_init();
 
-       gd->bd->bi_arch_number = MACH_TYPE_OMAP_4430SDP;
        gd->bd->bi_boot_params = (0x80000000 + 0x100); /* boot param addr */
 
        return 0;
@@ -66,7 +65,8 @@ void set_muxconf_regs_essential(void)
                   sizeof(wkup_padconf_array_essential) /
                   sizeof(struct pad_conf_entry));
 
-       if (omap_revision() >= OMAP4460_ES1_0)
+       if ((omap_revision() >= OMAP4460_ES1_0) &&
+                       (omap_revision() < OMAP4470_ES1_0))
                do_set_mux((*ctrl)->control_padconf_wkup_base,
                                 wkup_padconf_array_essential_4460,
                                 sizeof(wkup_padconf_array_essential_4460) /
index b3aadcace32430165d0d44ea304ecf1a1449f4c4..490411e6ee9b5b2aab06edfaa4b3657500b664de 100644 (file)
@@ -1,26 +1,6 @@
-/******************************************************************************
- *   This source code is dual-licensed.  You may use it under the terms of the
- *   GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *
- *****************************************************************************/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 #include <config.h>
 #include <asm/ppc4xx.h>
 
index 0daa189103da337859898d331ed73b0e2a4f6103..c128fcb53dbb6734af04c713f1ea6f1632f69544 100644 (file)
@@ -210,7 +210,7 @@ void fsl_ddr_board_options(memctl_options_t *popts,
        unsigned int datarate;
 
        get_sys_info(&sysinfo);
-       datarate = sysinfo.freqDDRBus / 1000 / 1000;
+       datarate = sysinfo.freq_ddrbus / 1000 / 1000;
 
        for (i = 0; i < ARRAY_SIZE(bopts_ctrl[ctrl_num]); i++) {
                if ((bopts[i].datarate_mhz_low <= datarate) &&
diff --git a/board/xilinx/dts/microblaze.dts b/board/xilinx/dts/microblaze.dts
deleted file mode 100644 (file)
index bf984b0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/include/ BOARD_DTS
index 4bb140e29ec0cb5f72c512db0dc8d74e7c3d2e3a..f7f1c59ac5455fd44f53ccfb98de1344ce084ac3 100644 (file)
@@ -20,6 +20,7 @@ Xilinx_desc fpga010 = XILINX_XC7Z010_DESC(0x10);
 Xilinx_desc fpga020 = XILINX_XC7Z020_DESC(0x20);
 Xilinx_desc fpga030 = XILINX_XC7Z030_DESC(0x30);
 Xilinx_desc fpga045 = XILINX_XC7Z045_DESC(0x45);
+Xilinx_desc fpga100 = XILINX_XC7Z100_DESC(0x100);
 #endif
 
 int board_init(void)
@@ -42,6 +43,9 @@ int board_init(void)
        case XILINX_ZYNQ_7045:
                fpga = fpga045;
                break;
+       case XILINX_ZYNQ_7100:
+               fpga = fpga100;
+               break;
        }
 #endif
 
@@ -61,6 +65,23 @@ int board_eth_init(bd_t *bis)
 {
        u32 ret = 0;
 
+#ifdef CONFIG_XILINX_AXIEMAC
+       ret |= xilinx_axiemac_initialize(bis, XILINX_AXIEMAC_BASEADDR,
+                                               XILINX_AXIDMA_BASEADDR);
+#endif
+#ifdef CONFIG_XILINX_EMACLITE
+       u32 txpp = 0;
+       u32 rxpp = 0;
+# ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
+       txpp = 1;
+# endif
+# ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG
+       rxpp = 1;
+# endif
+       ret |= xilinx_emaclite_initialize(bis, XILINX_EMACLITE_BASEADDR,
+                       txpp, rxpp);
+#endif
+
 #if defined(CONFIG_ZYNQ_GEM)
 # if defined(CONFIG_ZYNQ_GEM0)
        ret |= zynq_gem_initialize(bis, ZYNQ_GEM_BASEADDR0,
@@ -96,5 +117,7 @@ int dram_init(void)
 {
        gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
 
+       zynq_ddrc_init();
+
        return 0;
 }
index 598561be2921be18ff95fd5b9a0f89a9c8ae51d2..b4297e568d78672ac315de109dd95d0388e76a36 100644 (file)
@@ -204,6 +204,7 @@ mx23evk                      arm         arm926ejs   mx23evk             freesca
 m28evk                       arm         arm926ejs   m28evk              denx           mxs            m28evk
 mx28evk                      arm         arm926ejs   mx28evk             freescale      mxs            mx28evk:ENV_IS_IN_MMC
 mx28evk_nand                 arm         arm926ejs   mx28evk             freescale      mxs            mx28evk:ENV_IS_IN_NAND
+mx28evk_auart_console        arm         arm926ejs   mx28evk             freescale      mxs            mx28evk:MXS_AUART,MXS_AUART_BASE=MXS_UARTAPP3_BASE,ENV_IS_IN_MMC
 sc_sps_1                     arm         arm926ejs   sc_sps_1            schulercontrol mxs
 nhk8815                      arm         arm926ejs   nhk8815             st             nomadik
 nhk8815_onenand              arm         arm926ejs   nhk8815             st             nomadik       nhk8815:BOOT_ONENAND
@@ -254,6 +255,9 @@ am335x_evm_uart5             arm         armv7       am335x              ti
 am335x_evm_usbspl            arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL1,CONS_INDEX=1,NAND,SPL_USBETH_SUPPORT
 am335x_boneblack             arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL1,CONS_INDEX=1,EMMC_BOOT
 am43xx_evm                   arm         armv7       am43xx              ti             am33xx      am43xx_evm:SERIAL1,CONS_INDEX=1
+dxr2                         arm         armv7       dxr2                siemens        am33xx
+pxm2                         arm         armv7       pxm2                siemens        am33xx
+rut                          arm         armv7       rut                 siemens        am33xx
 ti814x_evm                   arm         armv7       ti814x              ti             am33xx
 ti816x_evm                   arm         armv7       ti816x              ti             am33xx
 pcm051                       arm         armv7       pcm051              phytec         am33xx      pcm051
@@ -782,6 +786,8 @@ MPC8569MDS_NAND              powerpc     mpc85xx     mpc8569mds          freesca
 MPC8572DS                    powerpc     mpc85xx     mpc8572ds           freescale      -           MPC8572DS
 MPC8572DS_36BIT              powerpc     mpc85xx     mpc8572ds           freescale      -           MPC8572DS:36BIT
 MPC8572DS_NAND               powerpc     mpc85xx     mpc8572ds           freescale      -           MPC8572DS:NAND
+C29XPCIE                     powerpc     mpc85xx     c29xpcie            freescale      -           C29XPCIE:C29XPCIE,36BIT
+C29XPCIE_SPIFLASH            powerpc     mpc85xx     c29xpcie            freescale      -           C29XPCIE:C29XPCIE,36BIT,SPIFLASH
 P1010RDB_36BIT_NAND          powerpc     mpc85xx     p1010rdb            freescale      -           P1010RDB:P1010RDB,36BIT,NAND
 P1010RDB_36BIT_NAND_SECBOOT  powerpc     mpc85xx     p1010rdb            freescale      -           P1010RDB:P1010RDB,36BIT,NAND_SECBOOT,SECURE_BOOT
 P1010RDB_36BIT_NOR           powerpc     mpc85xx     p1010rdb            freescale      -           P1010RDB:P1010RDB,36BIT
@@ -812,16 +818,20 @@ P1020RDB_36BIT               powerpc     mpc85xx     p1_p2_rdb           freesca
 P1020RDB_36BIT_SDCARD        powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,36BIT,SDCARD
 P1020RDB_36BIT_SPIFLASH      powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,36BIT,SPIFLASH
 P1020RDB_NAND                powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,NAND
-P1020RDB-PC                  powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB
-P1020RDB-PC_36BIT            powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,36BIT
-P1020RDB-PC_36BIT_NAND       powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,36BIT,NAND
-P1020RDB-PC_36BIT_SDCARD     powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,36BIT,SDCARD
-P1020RDB-PC_36BIT_SPIFLASH   powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,36BIT,SPIFLASH
-P1020RDB-PC_NAND             powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,NAND
-P1020RDB-PC_SDCARD           powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,SDCARD
-P1020RDB-PC_SPIFLASH         powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB,SPIFLASH
+P1020RDB-PC                  powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC
+P1020RDB-PC_36BIT            powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,36BIT
+P1020RDB-PC_36BIT_NAND       powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,36BIT,NAND
+P1020RDB-PC_36BIT_SDCARD     powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,36BIT,SDCARD
+P1020RDB-PC_36BIT_SPIFLASH   powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,36BIT,SPIFLASH
+P1020RDB-PC_NAND             powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,NAND
+P1020RDB-PC_SDCARD           powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,SDCARD
+P1020RDB-PC_SPIFLASH         powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PC,SPIFLASH
 P1020RDB_SDCARD              powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,SDCARD
 P1020RDB_SPIFLASH            powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P1020RDB,SPIFLASH
+P1020RDB-PD                  powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PD
+P1020RDB-PD_NAND             powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PD,NAND
+P1020RDB-PD_SDCARD           powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PD,SDCARD
+P1020RDB-PD_SPIFLASH         powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020RDB_PD,SPIFLASH
 P1020UTM-PC                  powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020UTM
 P1020UTM-PC_36BIT            powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020UTM,36BIT
 P1020UTM-PC_36BIT_SDCARD     powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1020UTM,36BIT,SDCARD
@@ -855,6 +865,7 @@ P1025RDB_36BIT               powerpc     mpc85xx     p1_p2_rdb_pc        freesca
 P1025RDB_NAND                powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1025RDB,NAND
 P1025RDB_SDCARD              powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1025RDB,SDCARD
 P1025RDB_SPIFLASH            powerpc     mpc85xx     p1_p2_rdb_pc        freescale      -           p1_p2_rdb_pc:P1025RDB,SPIFLASH
+TWR-P1025                    powerpc     mpc85xx     p1_twr              freescale      -           p1_twr:TWR_P1025
 P2010RDB                     powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P2010RDB
 P2010RDB_36BIT               powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P2010RDB,36BIT
 P2010RDB_36BIT_SDCARD        powerpc     mpc85xx     p1_p2_rdb           freescale      -           P1_P2_RDB:P2010RDB,36BIT,SDCARD
@@ -931,6 +942,7 @@ stxgp3                       powerpc     mpc85xx     stxgp3              stx
 stxssa                       powerpc     mpc85xx     stxssa              stx            -           stxssa
 stxssa_4M                    powerpc     mpc85xx     stxssa              stx            -           stxssa:STXSSA_4M
 T4240QDS                     powerpc     mpc85xx     t4qds               freescale      -           T4240QDS:PPC_T4240
+T4240EMU                     powerpc     mpc85xx     t4qds               freescale      -           T4240EMU:PPC_T4240
 T4240QDS_SDCARD              powerpc     mpc85xx     t4qds               freescale     -           T4240QDS:PPC_T4240,RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
 T4240QDS_SPIFLASH            powerpc     mpc85xx     t4qds               freescale     -           T4240QDS:PPC_T4240,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
 T4240QDS_SRIO_PCIE_BOOT             powerpc     mpc85xx     t4qds               freescale      -           T4240QDS:PPC_T4240,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF80000
@@ -1115,7 +1127,6 @@ PPChameleonEVB_ME_33         powerpc     ppc4xx      PPChameleonEVB      dave
 APC405                       powerpc     ppc4xx      apc405              esd
 AR405                        powerpc     ppc4xx      ar405               esd
 ASH405                       powerpc     ppc4xx      ash405              esd
-CANBT                        powerpc     ppc4xx      canbt               esd
 CMS700                       powerpc     ppc4xx      cms700              esd
 CPCI2DP                      powerpc     ppc4xx      cpci2dp             esd
 CPCI405                      powerpc     ppc4xx      cpci405             esd
index 87ba82e204b8353eef0c05b1f25b43820d889e32..288690bca5f46ae68e2e099b36fa746f676ebc71 100644 (file)
@@ -92,6 +92,7 @@ COBJS-$(CONFIG_CMD_FLASH) += cmd_flash.o
 ifdef CONFIG_FPGA
 COBJS-$(CONFIG_CMD_FPGA) += cmd_fpga.o
 endif
+COBJS-$(CONFIG_CMD_FPGAD) += cmd_fpgad.o
 COBJS-$(CONFIG_CMD_FS_GENERIC) += cmd_fs.o
 COBJS-$(CONFIG_CMD_FUSE) += cmd_fuse.o
 COBJS-$(CONFIG_CMD_GETTIME) += cmd_gettime.o
index af884b8a6a656954a06d8cf2859243ccd5d064f1..713de1464c38b123d44515a8328923f522242d88 100644 (file)
@@ -92,7 +92,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        print_num("immr_base",          bd->bi_immr_base);
 #endif
        print_num("bootflags",          bd->bi_bootflags);
-#if    defined(CONFIG_405CR) || defined(CONFIG_405EP) || \
+#if    defined(CONFIG_405EP) || \
        defined(CONFIG_405GP) || \
        defined(CONFIG_440EP) || defined(CONFIG_440EPX) || \
        defined(CONFIG_440GR) || defined(CONFIG_440GRX) || \
@@ -106,7 +106,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        defined(CONFIG_440SPE) || defined(CONFIG_XILINX_405)
        print_mhz("pci_busfreq",        bd->bi_pci_busfreq);
 #endif
-#else  /* ! CONFIG_405GP, CONFIG_405CR, CONFIG_405EP, CONFIG_XILINX_405, CONFIG_440EP CONFIG_440GR */
+#else  /* ! CONFIG_405GP, CONFIG_405EP, CONFIG_XILINX_405, CONFIG_440EP CONFIG_440GR */
 #if defined(CONFIG_CPM2)
        print_mhz("vco",                bd->bi_vco);
        print_mhz("sccfreq",            bd->bi_sccfreq);
@@ -117,7 +117,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        print_mhz("cpmfreq",            bd->bi_cpmfreq);
 #endif
        print_mhz("busfreq",            bd->bi_busfreq);
-#endif /* CONFIG_405GP, CONFIG_405CR, CONFIG_405EP, CONFIG_XILINX_405, CONFIG_440EP CONFIG_440GR */
+#endif /* CONFIG_405GP, CONFIG_405EP, CONFIG_XILINX_405, CONFIG_440EP CONFIG_440GR */
 
 #ifdef CONFIG_ENABLE_36BIT_PHYS
 #ifdef CONFIG_PHYS_64BIT
index 046e22ff48f57efd4e9957d311b64377c2e048dd..1685c14a5261eba30d21ea29c9eb87a65fbe50e5 100644 (file)
@@ -636,7 +636,7 @@ static int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc,
                        goto err;
                else if (ret == BOOTM_ERR_OVERLAP)
                        ret = 0;
-#ifdef CONFIG_SILENT_CONSOLE
+#if defined(CONFIG_SILENT_CONSOLE) && !defined(CONFIG_SILENT_U_BOOT_ONLY)
                if (images->os.os == IH_OS_LINUX)
                        fixup_silent_linux();
 #endif
@@ -1384,9 +1384,19 @@ static void fixup_silent_linux(void)
        char *buf;
        const char *env_val;
        char *cmdline = getenv("bootargs");
+       int want_silent;
 
-       /* Only fix cmdline when requested */
-       if (!(gd->flags & GD_FLG_SILENT))
+       /*
+        * Only fix cmdline when requested. The environment variable can be:
+        *
+        *      no - we never fixup
+        *      yes - we always fixup
+        *      unset - we rely on the console silent flag
+        */
+       want_silent = getenv_yesno("silent_linux");
+       if (want_silent == 0)
+               return;
+       else if (want_silent == -1 && !(gd->flags & GD_FLG_SILENT))
                return;
 
        debug("before silent fix-up: %s\n", cmdline);
index db066acc364b5989b1e7333dbac1c26106f5d32e..793c42212369a85d11047d7315e0f386e77c0e05 100644 (file)
@@ -19,8 +19,8 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        const char *str_env;
        char *s = "dfu";
+       int ret, i = 0;
        char *env_bkp;
-       int ret;
 
        if (argc < 3)
                return CMD_RET_USAGE;
@@ -49,6 +49,15 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
        g_dnl_register(s);
        while (1) {
+               if (dfu_reset())
+                       /*
+                        * This extra number of usb_gadget_handle_interrupts()
+                        * calls is necessary to assure correct transmission
+                        * completion with dfu-util
+                        */
+                       if (++i == 10)
+                               goto exit;
+
                if (ctrlc())
                        goto exit;
 
@@ -60,6 +69,9 @@ done:
        dfu_free_entities();
        free(env_bkp);
 
+       if (dfu_reset())
+               run_command("reset", 0);
+
        return CMD_RET_SUCCESS;
 }
 
diff --git a/common/cmd_fpgad.c b/common/cmd_fpgad.c
new file mode 100644 (file)
index 0000000..1b25ed8
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * (C) Copyright 2013
+ * Dirk Eibach,  Guntermann & Drunck GmbH, dirk.eibach@gdsys.cc
+ *
+ * based on cmd_mem.c
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <command.h>
+
+#include <gdsys_fpga.h>
+
+static uint    dp_last_fpga;
+static uint    dp_last_addr;
+static uint    dp_last_length = 0x40;
+
+/*
+ * FPGA Memory Display
+ *
+ * Syntax:
+ *     fpgad {fpga} {addr} {len}
+ */
+#define DISP_LINE_LEN  16
+int do_fpga_md(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       unsigned int k;
+       unsigned int fpga;
+       ulong   addr, length;
+       int rc = 0;
+       u16     linebuf[DISP_LINE_LEN/sizeof(u16)];
+
+       /*
+        * We use the last specified parameters, unless new ones are
+        * entered.
+        */
+       fpga = dp_last_fpga;
+       addr = dp_last_addr;
+       length = dp_last_length;
+
+       if (argc < 3)
+               return CMD_RET_USAGE;
+
+       if ((flag & CMD_FLAG_REPEAT) == 0) {
+               /*
+                * FPGA is specified since argc > 2
+                */
+               fpga = simple_strtoul(argv[1], NULL, 16);
+
+               /*
+                * Address is specified since argc > 2
+                */
+               addr = simple_strtoul(argv[2], NULL, 16);
+
+               /*
+                * If another parameter, it is the length to display.
+                * Length is the number of objects, not number of bytes.
+                */
+               if (argc > 3)
+                       length = simple_strtoul(argv[3], NULL, 16);
+       }
+
+       /* Print the lines. */
+       for (k = 0; k < DISP_LINE_LEN / sizeof(u16); ++k)
+               fpga_get_reg(fpga, (u16 *)fpga_ptr[fpga] + k, k * sizeof(u16),
+                            &linebuf[k]);
+       print_buffer(addr, (void *)linebuf, sizeof(u16),
+                    length, DISP_LINE_LEN / sizeof(u16));
+       addr += sizeof(u16)*length;
+
+       dp_last_fpga = fpga;
+       dp_last_addr = addr;
+       dp_last_length = length;
+       return rc;
+}
+
+U_BOOT_CMD(
+       fpgad,  4,      1,      do_fpga_md,
+       "fpga register display",
+       "fpga address [# of objects]"
+);
index 29f5181baf8238aefa01c1df923d5e0dd5530b8e..ebce7d4c3c05162a675bb4a01fdec15dd287e172 100644 (file)
@@ -1438,10 +1438,12 @@ int do_i2c_bus_num(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                printf("Current bus is %d\n", i2c_get_bus_num());
        else {
                bus_no = simple_strtoul(argv[1], NULL, 10);
+#if defined(CONFIG_SYS_I2C)
                if (bus_no >= CONFIG_SYS_NUM_I2C_BUSES) {
                        printf("Invalid bus %d\n", bus_no);
                        return -1;
                }
+#endif
                printf("Setting bus to %d\n", bus_no);
                ret = i2c_set_bus_num(bus_no);
                if (ret)
index 74481cbf6f2f6cff8faa1a87837f43206bd4423c..727fd1c66407f2f253a59beff3cf1ab6d6c51f7c 100644 (file)
@@ -6,30 +6,7 @@
  *              Joe Hershberger, National Instruments, joe.hershberger@ni.com
  * All rights reserved.
  *
- * The "inih" library is distributed under the following license, which is
- * derived from and very similar to the 3-clause BSD license:
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Brush Technology nor the names of its contributors
- *       may be used to endorse or promote products derived from this software
- *       without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY BRUSH TECHNOLOGY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL BRUSH TECHNOLOGY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    BSD-3-Clause
  *
  * Go to the project home page for more info:
  * http://code.google.com/p/inih/
index 0ce949683e257a4488ac6f9e6e9c69f7ed0f56f6..f6e522cbb3482bf48eeae51cfe0d2e1467404de3 100644 (file)
@@ -18,7 +18,7 @@
 DECLARE_GLOBAL_DATA_PTR;
 
 #if defined(CONFIG_CMD_LOADB)
-static ulong load_serial_ymodem(ulong offset);
+static ulong load_serial_ymodem(ulong offset, int mode);
 #endif
 
 #if defined(CONFIG_CMD_LOADS)
@@ -462,7 +462,15 @@ static int do_load_serial_bin(cmd_tbl_t *cmdtp, int flag, int argc,
                        offset,
                        load_baudrate);
 
-               addr = load_serial_ymodem(offset);
+               addr = load_serial_ymodem(offset, xyzModem_ymodem);
+
+       } else if (strcmp(argv[0],"loadx")==0) {
+               printf("## Ready for binary (xmodem) download "
+                       "to 0x%08lX at %d bps...\n",
+                       offset,
+                       load_baudrate);
+
+               addr = load_serial_ymodem(offset, xyzModem_xmodem);
 
        } else {
 
@@ -942,7 +950,7 @@ static int getcxmodem(void) {
                return (getc());
        return -1;
 }
-static ulong load_serial_ymodem(ulong offset)
+static ulong load_serial_ymodem(ulong offset, int mode)
 {
        int size;
        int err;
@@ -953,7 +961,7 @@ static ulong load_serial_ymodem(ulong offset)
        ulong addr = 0;
 
        size = 0;
-       info.mode = xyzModem_ymodem;
+       info.mode = mode;
        res = xyzModem_stream_open(&info, &err);
        if (!res) {
 
@@ -1055,6 +1063,14 @@ U_BOOT_CMD(
        " with offset 'off' and baudrate 'baud'"
 );
 
+U_BOOT_CMD(
+       loadx, 3, 0,    do_load_serial_bin,
+       "load binary file over serial line (xmodem mode)",
+       "[ off ] [ baud ]\n"
+       "    - load binary file over serial line"
+       " with offset 'off' and baudrate 'baud'"
+);
+
 U_BOOT_CMD(
        loady, 3, 0,    do_load_serial_bin,
        "load binary file over serial line (ymodem mode)",
index 886212aa078a25c0da64a93ee8562b1ad3a8b9eb..04ab0f19be05d911541567e09b12279984715a2a 100644 (file)
@@ -42,6 +42,7 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
        int i;
        u_char *datbuf, *oobbuf, *p;
        static loff_t last;
+       int ret = 0;
 
        if (repeat)
                off = last + nand->writesize;
@@ -49,11 +50,17 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
        last = off;
 
        datbuf = memalign(ARCH_DMA_MINALIGN, nand->writesize);
-       oobbuf = memalign(ARCH_DMA_MINALIGN, nand->oobsize);
-       if (!datbuf || !oobbuf) {
+       if (!datbuf) {
                puts("No memory for page buffer\n");
                return 1;
        }
+
+       oobbuf = memalign(ARCH_DMA_MINALIGN, nand->oobsize);
+       if (!oobbuf) {
+               puts("No memory for page buffer\n");
+               ret = 1;
+               goto free_dat;
+       }
        off &= ~(nand->writesize - 1);
        loff_t addr = (loff_t) off;
        struct mtd_oob_ops ops;
@@ -66,23 +73,25 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
        i = mtd_read_oob(nand, addr, &ops);
        if (i < 0) {
                printf("Error (%d) reading page %08lx\n", i, off);
-               free(datbuf);
-               free(oobbuf);
-               return 1;
+               ret = 1;
+               goto free_all;
        }
        printf("Page %08lx dump:\n", off);
-       i = nand->writesize >> 4;
-       p = datbuf;
 
-       while (i--) {
-               if (!only_oob)
+       if (!only_oob) {
+               i = nand->writesize >> 4;
+               p = datbuf;
+
+               while (i--) {
                        printf("\t%02x %02x %02x %02x %02x %02x %02x %02x"
                               "  %02x %02x %02x %02x %02x %02x %02x %02x\n",
                               p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
                               p[8], p[9], p[10], p[11], p[12], p[13], p[14],
                               p[15]);
-               p += 16;
+                       p += 16;
+               }
        }
+
        puts("OOB:\n");
        i = nand->oobsize >> 3;
        p = oobbuf;
@@ -91,10 +100,13 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
                       p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
                p += 8;
        }
-       free(datbuf);
+
+free_all:
        free(oobbuf);
+free_dat:
+       free(datbuf);
 
-       return 0;
+       return ret;
 }
 
 /* ------------------------------------------------------------------------- */
@@ -604,11 +616,11 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                                        opts.scrub = 1;
                                else {
                                        puts("scrub aborted\n");
-                                       return -1;
+                                       return 1;
                                }
                        } else {
                                puts("scrub aborted\n");
-                               return -1;
+                               return 1;
                        }
                }
                ret = nand_erase_opts(nand, &opts);
index 19b0dc9f433c9cc5dc7357aadda3d3c00dc87f9b..4af0f0af26bcfa3afbc63708fb019a89cc99d274 100644 (file)
@@ -151,16 +151,17 @@ static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,
                size_t len, const char *buf, char *cmp_buf, size_t *skipped)
 {
        debug("offset=%#x, sector_size=%#x, len=%#zx\n",
-               offset, flash->sector_size, len);
+             offset, flash->sector_size, len);
        if (spi_flash_read(flash, offset, len, cmp_buf))
                return "read";
        if (memcmp(cmp_buf, buf, len) == 0) {
                debug("Skip region %x size %zx: no change\n",
-                       offset, len);
+                     offset, len);
                *skipped += len;
                return NULL;
        }
-       if (spi_flash_erase(flash, offset, len))
+       /* Erase the entire sector */
+       if (spi_flash_erase(flash, offset, flash->sector_size))
                return "erase";
        if (spi_flash_write(flash, offset, len, buf))
                return "write";
@@ -200,7 +201,7 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,
                        todo = min(end - buf, flash->sector_size);
                        if (get_timer(last_update) > 100) {
                                printf("   \rUpdating, %zu%% %lu B/s",
-                                       100 - (end - buf) / scale,
+                                      100 - (end - buf) / scale,
                                        bytes_per_second(buf - start_buf,
                                                         start_time));
                                last_update = get_timer(0);
@@ -220,9 +221,9 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,
 
        delta = get_timer(start_time);
        printf("%zu bytes written, %zu bytes skipped", len - skipped,
-               skipped);
+              skipped);
        printf(" in %ld.%lds, speed %ld B/s\n",
-               delta / 1000, delta % 1000, bytes_per_second(len, start_time));
+              delta / 1000, delta % 1000, bytes_per_second(len, start_time));
 
        return 0;
 }
@@ -252,7 +253,7 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
        /* Consistency checking */
        if (offset + len > flash->size) {
                printf("ERROR: attempting %s past flash size (%#x)\n",
-                       argv[0], flash->size);
+                      argv[0], flash->size);
                return 1;
        }
 
@@ -262,9 +263,9 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
                return 1;
        }
 
-       if (strcmp(argv[0], "update") == 0)
+       if (strcmp(argv[0], "update") == 0) {
                ret = spi_flash_update(flash, offset, len, buf);
-       else if (strncmp(argv[0], "read", 4) == 0 ||
+       else if (strncmp(argv[0], "read", 4) == 0 ||
                        strncmp(argv[0], "write", 5) == 0) {
                int read;
 
@@ -275,7 +276,7 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
                        ret = spi_flash_write(flash, offset, len, buf);
 
                printf("SF: %zu bytes @ %#x %s: %s\n", (size_t)len, (u32)offset,
-                       read ? "Read" : "Written", ret ? "ERROR" : "OK");
+                      read ? "Read" : "Written", ret ? "ERROR" : "OK");
        }
 
        unmap_physmem(buf, len);
@@ -304,13 +305,13 @@ static int do_spi_flash_erase(int argc, char * const argv[])
        /* Consistency checking */
        if (offset + len > flash->size) {
                printf("ERROR: attempting %s past flash size (%#x)\n",
-                       argv[0], flash->size);
+                      argv[0], flash->size);
                return 1;
        }
 
        ret = spi_flash_erase(flash, offset, len);
        printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)len, (u32)offset,
-                       ret ? "ERROR" : "OK");
+              ret ? "ERROR" : "OK");
 
        return ret == 0 ? 0 : 1;
 }
@@ -470,7 +471,8 @@ static int do_spi_flash_test(int argc, char * const argv[])
 }
 #endif /* CONFIG_CMD_SF_TEST */
 
-static int do_spi_flash(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_spi_flash(cmd_tbl_t *cmdtp, int flag, int argc,
+                       char * const argv[])
 {
        const char *cmd;
        int ret;
@@ -526,7 +528,7 @@ U_BOOT_CMD(
        "SPI flash sub-system",
        "probe [[bus:]cs] [hz] [mode]   - init flash device on given SPI bus\n"
        "                                 and chip select\n"
-       "sf read addr offset len        - read `len' bytes starting at\n"
+       "sf read addr offset len        - read `len' bytes starting at\n"
        "                                 `offset' to memory at `addr'\n"
        "sf write addr offset len       - write `len' bytes from memory\n"
        "                                 at `addr' to flash at `offset'\n"
index f387f9ab91f6897acb24b1e55c204279f6e26657..1ac337730c3ec0d1f467e951497cfa1c5be16c6b 100644 (file)
@@ -140,7 +140,6 @@ int set_default_vars(int nvars, char * const vars[])
                                H_NOCLEAR | H_INTERACTIVE, nvars, vars);
 }
 
-#ifndef CONFIG_SPL_BUILD
 /*
  * Check if CRC is valid and (if yes) import the environment.
  * Note that "buf" may or may not be aligned.
@@ -172,7 +171,6 @@ int env_import(const char *buf, int check)
 
        return 0;
 }
-#endif
 
 void env_relocate(void)
 {
index 9a6b8a6fb2d43454369e472838054f770e59f6df..75309621b03bc743554835ebc4f5b7058b5cc258 100644 (file)
@@ -152,72 +152,57 @@ int writeenv(size_t offset, u_char *buf)
        return 0;
 }
 
-#ifdef CONFIG_ENV_OFFSET_REDUND
-static unsigned char env_flags;
+struct env_location {
+       const char *name;
+       const nand_erase_options_t erase_opts;
+};
 
-int saveenv(void)
+static int erase_and_write_env(const struct env_location *location,
+               u_char *env_new)
 {
-       env_t   env_new;
-       ssize_t len;
-       char    *res;
-       int     ret = 0;
-       nand_erase_options_t nand_erase_options;
+       int ret = 0;
 
-       memset(&nand_erase_options, 0, sizeof(nand_erase_options));
-       nand_erase_options.length = CONFIG_ENV_RANGE;
-
-       if (CONFIG_ENV_RANGE < CONFIG_ENV_SIZE)
-               return 1;
-
-       res = (char *)&env_new.data;
-       len = hexport_r(&env_htab, '\0', 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 */
-
-       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);
-       } else {
-               puts("Erasing NAND...\n");
-               nand_erase_options.offset = CONFIG_ENV_OFFSET;
-               if (nand_erase_opts(&nand_info[0], &nand_erase_options))
-                       return 1;
-
-               puts("Writing to NAND... ");
-               ret = writeenv(CONFIG_ENV_OFFSET, (u_char *)&env_new);
-       }
-       if (ret) {
-               puts("FAILED!\n");
+       printf("Erasing %s...\n", location->name);
+       if (nand_erase_opts(&nand_info[0], &location->erase_opts))
                return 1;
-       }
-
-       puts("done\n");
 
-       gd->env_valid = gd->env_valid == 2 ? 1 : 2;
+       printf("Writing to %s... ", location->name);
+       ret = writeenv(location->erase_opts.offset, env_new);
+       puts(ret ? "FAILED!\n" : "OK\n");
 
        return ret;
 }
-#else /* ! CONFIG_ENV_OFFSET_REDUND */
+
+#ifdef CONFIG_ENV_OFFSET_REDUND
+static unsigned char env_flags;
+#endif
+
 int saveenv(void)
 {
        int     ret = 0;
        ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
        ssize_t len;
        char    *res;
-       nand_erase_options_t nand_erase_options;
+       int     env_idx = 0;
+       static const struct env_location location[] = {
+               {
+                       .name = "NAND",
+                       .erase_opts = {
+                               .length = CONFIG_ENV_RANGE,
+                               .offset = CONFIG_ENV_OFFSET,
+                       },
+               },
+#ifdef CONFIG_ENV_OFFSET_REDUND
+               {
+                       .name = "redundant NAND",
+                       .erase_opts = {
+                               .length = CONFIG_ENV_RANGE,
+                               .offset = CONFIG_ENV_OFFSET_REDUND,
+                       },
+               },
+#endif
+       };
 
-       memset(&nand_erase_options, 0, sizeof(nand_erase_options));
-       nand_erase_options.length = CONFIG_ENV_RANGE;
-       nand_erase_options.offset = CONFIG_ENV_OFFSET;
 
        if (CONFIG_ENV_RANGE < CONFIG_ENV_SIZE)
                return 1;
@@ -228,22 +213,29 @@ int saveenv(void)
                error("Cannot export environment: errno = %d\n", errno);
                return 1;
        }
-       env_new->crc = crc32(0, env_new->data, ENV_SIZE);
-
-       puts("Erasing Nand...\n");
-       if (nand_erase_opts(&nand_info[0], &nand_erase_options))
-               return 1;
+       env_new->crc   = crc32(0, env_new->data, ENV_SIZE);
+#ifdef CONFIG_ENV_OFFSET_REDUND
+       env_new->flags = ++env_flags; /* increase the serial */
+       env_idx = (gd->env_valid == 1);
+#endif
 
-       puts("Writing to Nand... ");
-       if (writeenv(CONFIG_ENV_OFFSET, (u_char *)env_new)) {
-               puts("FAILED!\n");
-               return 1;
+       ret = erase_and_write_env(&location[env_idx], (u_char *)env_new);
+#ifdef CONFIG_ENV_OFFSET_REDUND
+       if (!ret) {
+               /* preset other copy for next write */
+               gd->env_valid = gd->env_valid == 2 ? 1 : 2;
+               return ret;
        }
 
-       puts("done\n");
+       env_idx = (env_idx + 1) & 1;
+       ret = erase_and_write_env(&location[env_idx], (u_char *)env_new);
+       if (!ret)
+               printf("Warning: primary env write failed,"
+                               " redundancy is lost!\n");
+#endif
+
        return ret;
 }
-#endif /* CONFIG_ENV_OFFSET_REDUND */
 #endif /* CMD_SAVEENV */
 
 int readenv(size_t offset, u_char *buf)
index e3e1897ccb95cf1501e353dc846a938b84dc4939..9f806fb090f54964566bc5bd4fef89068d0a4222 100644 (file)
@@ -7,7 +7,7 @@
  *
  * (C) Copyright 2008 Atmel Corporation
  *
- * SPDX-License-Identifier:    GPL-2.0+ 
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 #include <common.h>
 #include <environment.h>
index 683c1a511d8f4882e6f16119d92569ffb6a36801..199b4ed16a1e0c36e6f98f943a9b2812a4a7dfc3 100644 (file)
@@ -343,6 +343,17 @@ void fit_image_print(const void *fit, int image_noffset, const char *p)
        else
                printf("%s\n", desc);
 
+       if (IMAGE_ENABLE_TIMESTAMP) {
+               time_t timestamp;
+
+               ret = fit_get_timestamp(fit, 0, &timestamp);
+               printf("%s  Created:      ", p);
+               if (ret)
+                       printf("unavailable\n");
+               else
+                       genimg_print_time(timestamp);
+       }
+
        fit_image_get_type(fit, image_noffset, &type);
        printf("%s  Type:         %s\n", p, genimg_get_type_name(type));
 
index 56a5a626e6a937678af53b5905b654243885be02..2c88091e6de1be3f02d29304eedf5368368482dd 100644 (file)
@@ -135,6 +135,7 @@ static const table_entry_t uimage_type[] = {
        {       IH_TYPE_SCRIPT,     "script",     "Script",             },
        {       IH_TYPE_STANDALONE, "standalone", "Standalone Program", },
        {       IH_TYPE_UBLIMAGE,   "ublimage",   "Davinci UBL image",},
+       {       IH_TYPE_MXSIMAGE,   "mxsimage",   "Freescale MXS Boot Image",},
        {       -1,                 "",           "",                   },
 };
 
index 8d5c63c29ef924166576d9d3793379429acfe0e4..990650c7ef3f388c3db6c5bb7fbae2d059355fce 100644 (file)
@@ -51,7 +51,6 @@
 /* ** FONT DATA                                                                */
 /************************************************************************/
 #include <video_font.h>                /* Get font data, width and height      */
-#include <video_font_data.h>
 
 /************************************************************************/
 /* ** LOGO DATA                                                                */
index d6b0e01075913547efafbf690d539112f106c9c5..da31457d5f06d6ab192ffedf1ed82974d688459c 100644 (file)
@@ -85,8 +85,9 @@ void spl_parse_image_header(const struct image_header *header)
                }
                spl_image.os = image_get_os(header);
                spl_image.name = image_get_name(header);
-               debug("spl: payload image: %s load addr: 0x%x size: %d\n",
-                       spl_image.name, spl_image.load_addr, spl_image.size);
+               debug("spl: payload image: %.*s load addr: 0x%x size: %d\n",
+                       sizeof(spl_image.name), spl_image.name,
+                       spl_image.load_addr, spl_image.size);
        } else {
                /* Signature not found - assume u-boot.bin */
                debug("mkimage signature not found - ih_magic = %x\n",
index 721e9a144495a4c37a62d70e457da5d9a6b544f7..844f98c1844bf046b597e981cf7f860c521ee767 100644 (file)
@@ -196,9 +196,6 @@ int stdio_init (void)
        /* Initialize the list */
        INIT_LIST_HEAD(&(devs.list));
 
-#ifdef CONFIG_ARM_DCC
-       drv_arm_dcc_init ();
-#endif
 #ifdef CONFIG_SYS_I2C
        i2c_init_all();
 #else
index f740e5ec219cbe42a8d7375ed582b277a2ebc50b..c97f522beddd1745056c6f97fe3bdf01ed8fea94 100644 (file)
@@ -323,6 +323,7 @@ static int usb_set_maxpacket(struct usb_device *dev)
 /*******************************************************************************
  * Parse the config, located in buffer, and fills the dev->config structure.
  * Note that all little/big endian swapping are done automatically.
+ * (wTotalLength has already been swapped and sanitized when it was read.)
  */
 static int usb_parse_config(struct usb_device *dev,
                        unsigned char *buffer, int cfgno)
@@ -343,24 +344,43 @@ static int usb_parse_config(struct usb_device *dev,
                        head->bDescriptorType);
                return -1;
        }
-       memcpy(&dev->config, buffer, buffer[0]);
-       le16_to_cpus(&(dev->config.desc.wTotalLength));
+       if (head->bLength != USB_DT_CONFIG_SIZE) {
+               printf("ERROR: Invalid USB CFG length (%d)\n", head->bLength);
+               return -1;
+       }
+       memcpy(&dev->config, head, USB_DT_CONFIG_SIZE);
        dev->config.no_of_if = 0;
 
        index = dev->config.desc.bLength;
        /* Ok the first entry must be a configuration entry,
         * now process the others */
        head = (struct usb_descriptor_header *) &buffer[index];
-       while (index + 1 < dev->config.desc.wTotalLength) {
+       while (index + 1 < dev->config.desc.wTotalLength && head->bLength) {
                switch (head->bDescriptorType) {
                case USB_DT_INTERFACE:
+                       if (head->bLength != USB_DT_INTERFACE_SIZE) {
+                               printf("ERROR: Invalid USB IF length (%d)\n",
+                                       head->bLength);
+                               break;
+                       }
+                       if (index + USB_DT_INTERFACE_SIZE >
+                           dev->config.desc.wTotalLength) {
+                               puts("USB IF descriptor overflowed buffer!\n");
+                               break;
+                       }
                        if (((struct usb_interface_descriptor *) \
-                            &buffer[index])->bInterfaceNumber != curr_if_num) {
+                            head)->bInterfaceNumber != curr_if_num) {
                                /* this is a new interface, copy new desc */
                                ifno = dev->config.no_of_if;
+                               if (ifno >= USB_MAXINTERFACES) {
+                                       puts("Too many USB interfaces!\n");
+                                       /* try to go on with what we have */
+                                       return 1;
+                               }
                                if_desc = &dev->config.if_desc[ifno];
                                dev->config.no_of_if++;
-                               memcpy(if_desc, &buffer[index], buffer[index]);
+                               memcpy(if_desc, head,
+                                       USB_DT_INTERFACE_SIZE);
                                if_desc->no_of_ep = 0;
                                if_desc->num_altsetting = 1;
                                curr_if_num =
@@ -374,12 +394,31 @@ static int usb_parse_config(struct usb_device *dev,
                        }
                        break;
                case USB_DT_ENDPOINT:
+                       if (head->bLength != USB_DT_ENDPOINT_SIZE) {
+                               printf("ERROR: Invalid USB EP length (%d)\n",
+                                       head->bLength);
+                               break;
+                       }
+                       if (index + USB_DT_ENDPOINT_SIZE >
+                           dev->config.desc.wTotalLength) {
+                               puts("USB EP descriptor overflowed buffer!\n");
+                               break;
+                       }
+                       if (ifno < 0) {
+                               puts("Endpoint descriptor out of order!\n");
+                               break;
+                       }
                        epno = dev->config.if_desc[ifno].no_of_ep;
                        if_desc = &dev->config.if_desc[ifno];
+                       if (epno > USB_MAXENDPOINTS) {
+                               printf("Interface %d has too many endpoints!\n",
+                                       if_desc->desc.bInterfaceNumber);
+                               return 1;
+                       }
                        /* found an endpoint */
                        if_desc->no_of_ep++;
-                       memcpy(&if_desc->ep_desc[epno],
-                               &buffer[index], buffer[index]);
+                       memcpy(&if_desc->ep_desc[epno], head,
+                               USB_DT_ENDPOINT_SIZE);
                        ep_wMaxPacketSize = get_unaligned(&dev->config.\
                                                        if_desc[ifno].\
                                                        ep_desc[epno].\
@@ -392,9 +431,23 @@ static int usb_parse_config(struct usb_device *dev,
                        debug("if %d, ep %d\n", ifno, epno);
                        break;
                case USB_DT_SS_ENDPOINT_COMP:
+                       if (head->bLength != USB_DT_SS_EP_COMP_SIZE) {
+                               printf("ERROR: Invalid USB EPC length (%d)\n",
+                                       head->bLength);
+                               break;
+                       }
+                       if (index + USB_DT_SS_EP_COMP_SIZE >
+                           dev->config.desc.wTotalLength) {
+                               puts("USB EPC descriptor overflowed buffer!\n");
+                               break;
+                       }
+                       if (ifno < 0 || epno < 0) {
+                               puts("EPC descriptor out of order!\n");
+                               break;
+                       }
                        if_desc = &dev->config.if_desc[ifno];
-                       memcpy(&if_desc->ss_ep_comp_desc[epno],
-                               &buffer[index], buffer[index]);
+                       memcpy(&if_desc->ss_ep_comp_desc[epno], head,
+                               USB_DT_SS_EP_COMP_SIZE);
                        break;
                default:
                        if (head->bLength == 0)
@@ -473,7 +526,7 @@ int usb_get_configuration_no(struct usb_device *dev,
                             unsigned char *buffer, int cfgno)
 {
        int result;
-       unsigned int tmp;
+       unsigned int length;
        struct usb_config_descriptor *config;
 
        config = (struct usb_config_descriptor *)&buffer[0];
@@ -487,16 +540,18 @@ int usb_get_configuration_no(struct usb_device *dev,
                                "(expected %i, got %i)\n", 9, result);
                return -1;
        }
-       tmp = le16_to_cpu(config->wTotalLength);
+       length = le16_to_cpu(config->wTotalLength);
 
-       if (tmp > USB_BUFSIZ) {
-               printf("usb_get_configuration_no: failed to get " \
-                      "descriptor - too long: %d\n", tmp);
+       if (length > USB_BUFSIZ) {
+               printf("%s: failed to get descriptor - too long: %d\n",
+                       __func__, length);
                return -1;
        }
 
-       result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, tmp);
-       debug("get_conf_no %d Result %d, wLength %d\n", cfgno, result, tmp);
+       result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, length);
+       debug("get_conf_no %d Result %d, wLength %d\n", cfgno, result, length);
+       config->wTotalLength = length; /* validated, with CPU byte order */
+
        return result;
 }
 
index 754d436ad4ec69380033dde2725c9ba5032e3595..ffac0e743cef38f2c98cb7a8c58d40acd5097516 100644 (file)
 static struct usb_hub_device hub_dev[USB_MAX_HUB];
 static int usb_hub_index;
 
+__weak void usb_hub_reset_devices(int port)
+{
+       return;
+}
 
 static int usb_get_hub_descriptor(struct usb_device *dev, void *data, int size)
 {
@@ -110,7 +114,7 @@ static void usb_hub_power_on(struct usb_hub_device *hub)
                ret = usb_get_port_status(dev, i + 1, portsts);
                if (ret < 0) {
                        debug("port %d: get_port_status failed\n", i + 1);
-                       return;
+                       continue;
                }
 
                /*
@@ -125,7 +129,7 @@ static void usb_hub_power_on(struct usb_hub_device *hub)
                portstatus = le16_to_cpu(portsts->wPortStatus);
                if (portstatus & (USB_PORT_STAT_POWER << 1)) {
                        debug("port %d: Port power change failed\n", i + 1);
-                       return;
+                       continue;
                }
        }
 
@@ -302,7 +306,7 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
 
 static int usb_hub_configure(struct usb_device *dev)
 {
-       int i;
+       int i, length;
        ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, USB_BUFSIZ);
        unsigned char *bitmap;
        short hubCharacteristics;
@@ -323,20 +327,14 @@ static int usb_hub_configure(struct usb_device *dev)
        }
        descriptor = (struct usb_hub_descriptor *)buffer;
 
-       /* silence compiler warning if USB_BUFSIZ is > 256 [= sizeof(char)] */
-       i = descriptor->bLength;
-       if (i > USB_BUFSIZ) {
-               debug("usb_hub_configure: failed to get hub " \
-                     "descriptor - too long: %d\n", descriptor->bLength);
-               return -1;
-       }
+       length = min(descriptor->bLength, sizeof(struct usb_hub_descriptor));
 
-       if (usb_get_hub_descriptor(dev, buffer, descriptor->bLength) < 0) {
+       if (usb_get_hub_descriptor(dev, buffer, length) < 0) {
                debug("usb_hub_configure: failed to get hub " \
                      "descriptor 2nd giving up %lX\n", dev->status);
                return -1;
        }
-       memcpy((unsigned char *)&hub->desc, buffer, descriptor->bLength);
+       memcpy((unsigned char *)&hub->desc, buffer, length);
        /* adjust 16bit values */
        put_unaligned(le16_to_cpu(get_unaligned(
                        &descriptor->wHubCharacteristics)),
@@ -426,6 +424,14 @@ static int usb_hub_configure(struct usb_device *dev)
              "" : "no ");
        usb_hub_power_on(hub);
 
+       /*
+        * Reset any devices that may be in a bad state when applying
+        * the power.  This is a __weak function.  Resetting of the devices
+        * should occur in the board file of the device.
+        */
+       for (i = 0; i < dev->maxchild; i++)
+               usb_hub_reset_devices(i + 1);
+
        for (i = 0; i < dev->maxchild; i++) {
                ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
                unsigned short portstatus, portchange;
index 2ca3767ecfa113e8ee36fabdf2261ee807e80f3a..1ad67caf13c554c6fd0eb34945f41b3a20f736bc 100644 (file)
@@ -104,6 +104,11 @@ struct usb_kbd_pdata {
        uint8_t         flags;
 };
 
+extern int __maybe_unused net_busy_flag;
+
+/* The period of time between two calls of usb_kbd_testc(). */
+static unsigned long __maybe_unused kbd_testc_tms;
+
 /* Generic keyboard event polling. */
 void usb_kbd_generic_poll(void)
 {
@@ -349,6 +354,16 @@ static int usb_kbd_testc(void)
        struct usb_device *usb_kbd_dev;
        struct usb_kbd_pdata *data;
 
+#ifdef CONFIG_CMD_NET
+       /*
+        * If net_busy_flag is 1, NET transfer is running,
+        * then we check key-pressed every second (first check may be
+        * less than 1 second) to improve TFTP booting performance.
+        */
+       if (net_busy_flag && (get_timer(kbd_testc_tms) < CONFIG_SYS_HZ))
+               return 0;
+       kbd_testc_tms = get_timer(0);
+#endif
        dev = stdio_get_by_name(DEVNAME);
        usb_kbd_dev = (struct usb_device *)dev->priv;
        data = usb_kbd_dev->privptr;
index 499eed134868d1494e2f40fa6a46719d45eda71f..39b20baf0857755ce86a4f96c44ff2165f1a1978 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -13,6 +13,12 @@ SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
 
 export SHELL
 
+ifeq ($(CONFIG_TPL_BUILD),y)
+SPL_BIN := u-boot-tpl
+else
+SPL_BIN := u-boot-spl
+endif
+
 ifeq ($(CURDIR),$(SRCTREE))
 dir :=
 else
@@ -22,7 +28,11 @@ endif
 ifneq ($(OBJTREE),$(SRCTREE))
 # Create object files for SPL in a separate directory
 ifeq ($(CONFIG_SPL_BUILD),y)
+ifeq ($(CONFIG_TPL_BUILD),y)
+obj := $(if $(dir),$(TPLTREE)/$(dir)/,$(TPLTREE)/)
+else
 obj := $(if $(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
+endif
 else
 obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)
 endif
@@ -32,8 +42,12 @@ $(shell mkdir -p $(obj))
 else
 # Create object files for SPL in a separate directory
 ifeq ($(CONFIG_SPL_BUILD),y)
+ifeq ($(CONFIG_TPL_BUILD),y)
+obj := $(if $(dir),$(TPLTREE)/$(dir)/,$(TPLTREE)/)
+else
 obj := $(if $(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
 
+endif
 $(shell mkdir -p $(obj))
 else
 obj :=
@@ -119,6 +133,7 @@ endif
 # Usage gcc-ver := $(call cc-version)
 cc-version = $(shell $(SHELL) $(SRCTREE)/tools/gcc-version.sh $(CC))
 binutils-version = $(shell $(SHELL) $(SRCTREE)/tools/binutils-version.sh $(AS))
+dtc-version = $(shell $(SHELL) $(SRCTREE)/tools/dtc-version.sh $(DTC))
 
 #
 # Include the make variables (CC, etc...)
@@ -144,7 +159,18 @@ CHECK      = sparse
 #########################################################################
 
 # Load generated board configuration
+ifeq ($(CONFIG_TPL_BUILD),y)
+# Include TPL autoconf
+sinclude $(OBJTREE)/include/tpl-autoconf.mk
+else
+ifeq ($(CONFIG_SPL_BUILD),y)
+# Include SPL autoconf
+sinclude $(OBJTREE)/include/spl-autoconf.mk
+else
+# Include normal autoconf
 sinclude $(OBJTREE)/include/autoconf.mk
+endif
+endif
 sinclude $(OBJTREE)/include/config.mk
 
 # Some architecture config.mk files need to know what CPUDIR is set to,
@@ -194,6 +220,15 @@ LDFLAGS_FINAL += --gc-sections
 endif
 
 # TODO(sjg@chromium.org): Is this correct on Mac OS?
+
+# MXSImage needs LibSSL
+ifneq ($(CONFIG_MX23)$(CONFIG_MX28),)
+HOSTLIBS       += -lssl -lcrypto
+# Add CONFIG_MXS into host CFLAGS, so we can check whether or not register
+# the mxsimage support within tools/mxsimage.c .
+HOSTCFLAGS     += -DCONFIG_MXS
+endif
+
 ifdef CONFIG_FIT_SIGNATURE
 HOSTLIBS       += -lssl -lcrypto
 
@@ -214,12 +249,19 @@ ifneq ($(CONFIG_SPL_PAD_TO),)
 CPPFLAGS += -DCONFIG_SPL_PAD_TO=$(CONFIG_SPL_PAD_TO)
 endif
 
+ifneq ($(CONFIG_TPL_PAD_TO),)
+CPPFLAGS += -DCONFIG_TPL_PAD_TO=$(CONFIG_TPL_PAD_TO)
+endif
+
 ifneq ($(CONFIG_UBOOT_PAD_TO),)
 CPPFLAGS += -DCONFIG_UBOOT_PAD_TO=$(CONFIG_UBOOT_PAD_TO)
 endif
 
 ifeq ($(CONFIG_SPL_BUILD),y)
 CPPFLAGS += -DCONFIG_SPL_BUILD
+ifeq ($(CONFIG_TPL_BUILD),y)
+CPPFLAGS += -DCONFIG_TPL_BUILD
+endif
 endif
 
 # Does this architecture support generic board init?
@@ -291,9 +333,9 @@ ifneq ($(CONFIG_SYS_TEXT_BASE),)
 LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
 endif
 
-LDFLAGS_u-boot-spl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL)
+LDFLAGS_$(SPL_BIN) += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL)
 ifneq ($(CONFIG_SPL_TEXT_BASE),)
-LDFLAGS_u-boot-spl += -Ttext $(CONFIG_SPL_TEXT_BASE)
+LDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE)
 endif
 
 # Linus' kernel sanity checking tool
index ac9a2137c8b5569be1da310f032757faaf89c85d..312a6a612e694716e751dcca4bc3454c7c38ff2e 100644 (file)
@@ -67,7 +67,7 @@ CONFIG_SPL_POST_MEM_SUPPORT (post/drivers/memory.o)
 CONFIG_SPL_NAND_LOAD (drivers/mtd/nand/nand_spl_load.o)
 CONFIG_SPL_SPI_LOAD (drivers/mtd/spi/spi_spl_load.o)
 CONFIG_SPL_RAM_DEVICE (common/spl/spl.c)
-
+CONFIG_SPL_WATCHDOG_SUPPORT (drivers/watchdog/libwatchdog.o)
 
 Normally CPU is assumed to be the same between the SPL and normal
 u-boot build.  However it is possible to specify a different CPU for
diff --git a/doc/README.TPL b/doc/README.TPL
new file mode 100644 (file)
index 0000000..1df03b9
--- /dev/null
@@ -0,0 +1,45 @@
+Generic TPL framework
+=====================
+
+Overview
+--------
+
+TPL---Third Program Loader.
+
+Due to the SPL on some boards(powerpc mpc85xx) has a size limit and cannot
+be compatible with all the external device(e.g. DDR). So add a tertiary
+program loader (TPL) to enable a loader stub loaded by the code from the
+SPL. It loads the final uboot image into DDR, then jump to it to begin
+execution. Now, only the powerpc mpc85xx has this requirement and will
+implemente it.
+
+Keep consistent with SPL, with this framework almost all source files for a
+board can be reused. No code duplication or symlinking is necessary anymore.
+
+How it works
+------------
+
+There has been a directory TOPDIR/spl which contains only a Makefile. The
+Makefile is shared by SPL and TPL.
+
+The object files are built separately for SPL/TPL and placed in the
+directory spl/tpl. The final binaries which are generated are
+u-boot-{spl|tpl}, u-boot-{spl|tpl}.bin and u-boot-{spl|tpl}.map.
+
+During the TPL build a variable named CONFIG_TPL_BUILD is exported in the
+make environment and also appended to CPPFLAGS with -DCONFIG_TPL_BUILD.
+
+The SPL options are shared by SPL and TPL, the board config file should
+determine which SPL options to choose based on whether CONFIG_TPL_BUILD
+is set. Source files can be compiled for TPL with options choosed in the
+board config file.
+
+For example:
+
+spl/Makefile:
+LIBS-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/libcommon.o
+
+CONFIG_SPL_LIBCOMMON_SUPPORT is defined in board config file:
+#ifdef CONFIG_TPL_BUILD
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#endif
index b483744ea5987b84aa1c05c608cac13967aa625e..41f3bd786084a46a4321c946e040ac1d4038b757 100644 (file)
@@ -19,17 +19,6 @@ To use PMECC in this driver, the user needs to set:
           It can be 2, 4, 8, 12 or 24.
        2. The PMECC sector size: CONFIG_PMECC_SECTOR_SIZE.
           It only can be 512 or 1024.
-       3. The PMECC index lookup table's offsets in ROM code: CONFIG_PMECC_INDEX_TABLE_OFFSET.
-          In the chip datasheet section "Boot Stragegies", you can find
-          two Galois Field Table in the ROM code. One table is for 512-bytes
-          sector. Another is for 1024-byte sector. Each Galois Field includes
-          two sub-table: indext table & alpha table.
-          In the beginning of each Galois Field Table is the index table,
-          Alpha table is in the following.
-          So the index table's offset is same as the Galois Field Table.
-
-          Please set CONFIG_PMECC_INDEX_TABLE_OFFSET correctly according the
-          Galois Field Table's offset base on the sector size you used.
 
 Take AT91SAM9X5EK as an example, the board definition file likes:
 
@@ -38,7 +27,4 @@ Take AT91SAM9X5EK as an example, the board definition file likes:
 #define CONFIG_ATMEL_NAND_HW_PMECC     1
 #define CONFIG_PMECC_CAP               2
 #define CONFIG_PMECC_SECTOR_SIZE       512
-#define CONFIG_PMECC_INDEX_TABLE_OFFSET        0x8000
 
-NOTE: If you use 1024 as the sector size, then need set 0x10000 as the
- CONFIG_PMECC_INDEX_TABLE_OFFSET
index 4b290609fcb26efcffe5082b7f897fd2337ee366..86bae6816d8a34714da246bfcfae7561d8e25055 100644 (file)
@@ -119,8 +119,7 @@ file into
        board/<vendor>/dts/<name>.dts
 
 This should include your CPU or SOC's device tree file, placed in
-arch/<arch>/dts, and then make any adjustments required. The name of this
-is CONFIG_ARCH_DEVICE_TREE.dts.
+arch/<arch>/dts, and then make any adjustments required.
 
 If CONFIG_OF_EMBED is defined, then it will be picked up and built into
 the U-Boot image (including u-boot.bin).
index 802eb90f1de6b352dc383f69cdc234b0b64cccd9..dcda2005af93439ca42e85c5b7ffb1ccd4233586 100644 (file)
@@ -15,9 +15,6 @@ Booting from NOR flash does not require to use this image type.
 For more details refer Chapter 2 - System Boot and section 2.14
 (flash header description) of the processor's manual.
 
-This implementation does not use at the moment the secure boot feature
-of the processor. The image is generated disabling all security fields.
-
 Command syntax:
 --------------
 ./tools/mkimage -l <mx u-boot_file>
@@ -86,6 +83,33 @@ Configuration command line syntax:
                                Example:
                                BOOT_FROM spi
 
+       CSF                     value
+
+                               Total size of CSF (Command Sequence File)
+                               used for Secure Boot/ High Assurance Boot
+                               (HAB).
+
+                               Using this command will populate the IVT
+                               (Initial Vector Table) CSF pointer and adjust
+                               the length fields only. The CSF itself needs
+                               to be generated with Freescale tools and
+                               'manually' appended to the u-boot.imx file.
+
+                               The CSF is then simply concatenated
+                               to the u-boot image, making a signed bootloader,
+                               that the processor can verify
+                               if the fuses for the keys are burned.
+
+                               Further infos how to configure the SOC to verify
+                               the bootloader can be found in the "High
+                               Assurance Boot Version Application Programming
+                               Interface Reference Manual" as part of the
+                               Freescale Code Signing Tool, available on the
+                               manufacturer's website.
+
+                               Example:
+                               CSF 0x2000
+
        DATA                    type address value
 
                                type: word=4, halfword=2, byte=1
diff --git a/doc/README.mpc85xx-sd-spi-boot b/doc/README.mpc85xx-sd-spi-boot
new file mode 100644 (file)
index 0000000..d5043cc
--- /dev/null
@@ -0,0 +1,81 @@
+----------------------------------------
+Booting from On-Chip ROM (eSDHC or eSPI)
+----------------------------------------
+
+boot_format is a tool to write SD bootable images to a filesystem and build
+SD/SPI images to a binary file for writing later.
+
+When booting from an SD card/MMC, boot_format puts the configuration file and
+the RAM-based U-Boot image on the card.
+When booting from an EEPROM, boot_format generates a binary image that is used
+to boot from this EEPROM.
+
+Where to get boot_format:
+========================
+
+you can browse it online at:
+http://git.freescale.com/git/cgit.cgi/ppc/sdk/boot-format.git/
+
+Building
+========
+
+Run the following to build this project
+
+       $ make
+
+Execution
+=========
+
+boot_format runs under a regular Linux machine and requires a super user mode
+to run. Execute boot_format as follows.
+
+For building SD images by writing directly to a file system on SD media:
+
+       $ boot_format $config u-boot.bin -sd $device
+
+Where $config is the included config.dat file for your platform and $device
+is the target block device for the SD media on your computer.
+
+For build binary images directly a local file:
+
+       $ boot_format $config u-boot.bin -spi $file
+
+Where $file is the target file. Also keep in mind the u-boot.bin file needs
+to be the u-boot built for your particular platform and target media.
+
+Example: To generate a u-boot.bin for a P1022DS booting from SD, run the
+following in the u-boot repository:
+
+       $ make P1022DS_SDCARD
+
+Configuration Files
+===================
+
+Below are the configuration files to be used with a particular platform. Keep
+in mind that some of these config files are tied to the platforms DDR speed.
+Please see the SoC reference manual for more documentation.
+
+P1022DS                config_sram_p1022ds.dat
+P2020DS                config_sram_p2020ds.dat
+P2010DS                config_sram_p2020ds.dat
+P1020RDB       config_ddr2_1g_p1020rdb_533M.dat
+P1020RDB       config_ddr2_1g_p1020rdb_667M.dat
+P2020RDB       config_ddr2_1g_p2020rdb_800M.dat
+P2020RDB       config_ddr2_1g_p2020rdb_667M.dat
+P2020RDB       config_ddr3_1gb_64bit_p2020rdb_pc.dat
+P2010RDB       config_ddr3_1gb_64bit_p2020rdb_pc.dat
+P1020RDB       config_ddr3_1gb_p1_p2_rdb_pc_800M.dat
+P1011RDB       config_ddr3_1gb_p1_p2_rdb_pc_800M.dat
+P1010RDB       config_ddr3_1gb_p1010rdb_800M.dat
+P1014RDB       config_ddr3_1gb_p1014rdb_800M.dat
+P1021RDB       config_ddr3_1gb_p1_p2_rdb_pc_800M.dat
+P1012RDB       config_ddr3_1gb_p1_p2_rdb_pc_800M.dat
+P1022DS                config_ddr3_2gb_p1022ds.dat
+P1013DS                config_ddr3_2gb_p1022ds.dat
+P1024RDB       config_ddr3_1gb_p1_p2_rdb_pc_667M.dat
+P1013RDB       config_ddr3_1gb_p1_p2_rdb_pc_667M.dat
+P1025RDB       config_ddr3_1gb_p1_p2_rdb_pc_667M.dat
+P1016RDB       config_ddr3_1gb_p1_p2_rdb_pc_667M.dat
+P1020UTM       config_ddr3_1gb_p1_p2_rdb_pc_800M.dat
+P1020MBG       config_ddr3_1gb_p1_p2_rdb_pc_800M.dat
+MPC8536DS      config_ddr2_512m_mpc8536ds_667M.dat
diff --git a/doc/README.mxc_hab b/doc/README.mxc_hab
new file mode 100644 (file)
index 0000000..97f8b7d
--- /dev/null
@@ -0,0 +1,48 @@
+High Assurance Boot (HAB) for i.MX6 CPUs
+
+To authenticate U-Boot only by the CPU there is no code required in
+U-Boot itself. However, the U-Boot image to be programmed into the
+boot media needs to be properly constructed, i.e. it must contain a
+proper Command Sequence File (CSF).
+
+The Initial Vector Table contains a pointer to the CSF. Please see
+doc/README.imximage for how to prepare u-boot.imx.
+
+The CSF itself is being generated by Freescale HAB tools.
+
+mkimage will output additional information about "HAB Blocks"
+which can be used in the Freescale tooling to authenticate U-Boot
+(entries in the CSF file).
+
+Image Type:   Freescale IMX Boot Image
+Image Ver:    2 (i.MX53/6 compatible)
+Data Size:    327680 Bytes = 320.00 kB = 0.31 MB
+Load Address: 177ff420
+Entry Point:  17800000
+HAB Blocks:   177ff400 00000000 0004dc00
+              ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
+               |       |          |
+               |       |          -------- (1)
+               |       |
+               |       ------------------- (2)
+               |
+               --------------------------- (3)
+
+(1)    Size of area in file u-boot.imx to sign
+       This area should include the IVT, the Boot Data the DCD
+       and U-Boot itself.
+(2)    Start of area in u-boot.imx to sign
+(3)    Start of area in RAM to authenticate
+
+CONFIG_SECURE_BOOT currently enables only an additional command
+'hab_status' in U-Boot to retrieve the HAB status and events. This
+can be useful while developing and testing HAB.
+
+Commands to generate a signed U-Boot using Freescale HAB tools:
+cst --o U-Boot_CSF.bin < U-Boot.CSF
+objcopy -I binary -O binary --pad-to 0x2000 --gap-fill=0x00 \
+       U-Boot_CSF.bin U-Boot_CSF_pad.bin
+cat u-boot.imx U-Boot_CSF_pad.bin > u-boot-signed.imx
+
+NOTE: U-Boot_CSF.bin needs to be padded to the value specified in
+the imximage.cfg file.
diff --git a/doc/README.mxsimage b/doc/README.mxsimage
new file mode 100644 (file)
index 0000000..88a2caf
--- /dev/null
@@ -0,0 +1,165 @@
+Freescale i.MX233/i.MX28 SB image generator via mkimage
+=======================================================
+
+This tool allows user to produce SB BootStream encrypted with a zero key.
+Such a BootStream is then bootable on i.MX23/i.MX28.
+
+Usage -- producing image:
+=========================
+The mxsimage tool is targeted to be a simple replacement for the elftosb2 .
+To generate an image, write an image configuration file and run:
+
+ mkimage -A arm -O u-boot -T mxsimage -n <path to configuration file> \
+         <output bootstream file>
+
+The output bootstream file is usually using the .sb file extension. Note
+that the example configuration files for producing bootable BootStream with
+the U-Boot bootloader can be found under arch/arm/boot/cpu/arm926ejs/mxs/
+directory. See the following files:
+
+ mxsimage.mx23.cfg -- This is an example configuration for i.MX23
+ mxsimage.mx28.cfg -- This is an example configuration for i.MX28
+
+Each configuration file uses very simple instruction semantics and a few
+additional rules have to be followed so that a useful image can be produced.
+These semantics and rules will be outlined now.
+
+- Each line of the configuration file contains exactly one instruction.
+- Every numeric value must be encoded in hexadecimal and in format 0xabcdef12 .
+- The configuration file is a concatenation of blocks called "sections" and
+  optionally "DCD blocks" (see below).
+  - Each "section" is started by the "SECTION" instruction.
+  - The "SECTION" instruction has the following semantics:
+
+      SECTION u32_section_number [BOOTABLE]
+      - u32_section_number :: User-selected ID of the section
+      - BOOTABLE           :: Sets the section as bootable
+
+  - A bootable section is one from which the BootROM starts executing
+    subsequent instructions or code. Exactly one section must be selected
+    as bootable, usually the one containing the instructions and data to
+    load the bootloader.
+
+  - A "SECTION" must be immediatelly followed by a "TAG" instruction.
+  - The "TAG" instruction has the following semantics:
+
+      TAG [LAST]
+      - LAST               :: Flag denoting the last section in the file
+
+  - After a "TAG" unstruction, any of the following instructions may follow
+    in any order and any quantity:
+
+      NOOP
+      - This instruction does nothing
+
+      LOAD     u32_address string_filename
+      - Instructs the BootROM to load file pointed by "string_filename" onto
+        address "u32_address".
+
+      LOAD IVT u32_address u32_IVT_entry_point
+      - Crafts and loads IVT onto address "u32_address" with the entry point
+        of u32_IVT_entry_point.
+      - i.MX28-specific instruction!
+
+      LOAD DCD u32_address u32_DCD_block_ID
+      - Loads the DCD block with ID "u32_DCD_block_ID" onto address
+        "u32_address" and executes the contents of this DCD block
+      - i.MX28-specific instruction!
+
+      FILL u32_address u32_pattern u32_length
+      - Starts to write memory from addres "u32_address" with a pattern
+        specified by "u32_pattern". Writes exactly "u32_length" bytes of the
+       pattern.
+
+      JUMP [HAB] u32_address [u32_r0_arg]
+      - Jumps onto memory address specified by "u32_address" by setting this
+        address in PT. The BootROM will pass the "u32_r0_arg" value in ARM
+       register "r0" to the executed code if this option is specified.
+       Otherwise, ARM register "r0" will default to value 0x00000000. The
+       optional "HAB" flag is i.MX28-specific flag turning on the HAB boot.
+
+      CALL [HAB] u32_address [u32_r0_arg]
+      - See JUMP instruction above, as the operation is exactly the same with
+        one difference. The CALL instruction does allow returning into the
+       BootROM from the executed code. U-Boot makes use of this in it's SPL
+       code.
+
+      MODE string_mode
+      - Restart the CPU and start booting from device specified by the
+       "string_mode" argument. The "string_mode" differs for each CPU
+       and can be:
+         i.MX23, string_mode = USB/I2C/SPI1_FLASH/SPI2_FLASH/NAND_BCH
+                               JTAG/SPI3_EEPROM/SD_SSP0/SD_SSP1
+         i.MX28, string_mode = USB/I2C/SPI2_FLASH/SPI3_FLASH/NAND_BCH
+                               JTAG/SPI2_EEPROM/SD_SSP0/SD_SSP1
+
+  - An optional "DCD" blocks can be added at the begining of the configuration
+    file. Note that the DCD is only supported on i.MX28.
+    - The DCD blocks must be inserted before the first "section" in the
+      configuration file.
+    - The DCD block has the following semantics:
+
+        DCD u32_DCD_block_ID
+       - u32_DCD_block_ID      :: The ID number of the DCD block, must match
+                                  the ID number used by "LOAD DCD" instruction.
+
+    - The DCD block must be followed by one of the following instructions. All
+      of the instructions operate either on 1, 2 or 4 bytes. This is selected by
+      the 'n' suffix of the instruction:
+
+       WRITE.n u32_address u32_value
+       - Write the "u32_value" to the "u32_address" address.
+
+       ORR.n u32_address u32_value
+       - Read the "u32_address", perform a bitwise-OR with the "u32_value" and
+         write the result back to "u32_address".
+
+       ANDC.n u32_address u32_value
+       - Read the "u32_address", perform a bitwise-AND with the complement of
+         "u32_value" and write the result back to "u32_address".
+
+       EQZ.n u32_address u32_count
+       - Read the "u32_address" at most "u32_count" times and test if the value
+         read is zero. If it is, break the loop earlier.
+
+       NEZ.n u32_address u32_count
+       - Read the "u32_address" at most "u32_count" times and test if the value
+         read is non-zero. If it is, break the loop earlier.
+
+       EQ.n u32_address u32_mask
+       - Read the "u32_address" in a loop and test if the result masked with
+         "u32_mask" equals the "u32_mask". If the values are equal, break the
+         reading loop.
+
+       NEQ.n u32_address u32_mask
+       - Read the "u32_address" in a loop and test if the result masked with
+         "u32_mask" does not equal the "u32_mask". If the values are not equal,
+         break the reading loop.
+
+       NOOP
+       - This instruction does nothing.
+
+- If the verbose output from the BootROM is enabled, the BootROM will produce a
+  letter on the Debug UART for each instruction it started processing. Here is a
+  mapping between the above instructions and the BootROM verbose output:
+
+   H -- SB Image header loaded
+   T -- TAG instruction
+   N -- NOOP instruction
+   L -- LOAD instruction
+   F -- FILL instruction
+   J -- JUMP instruction
+   C -- CALL instruction
+   M -- MODE instruction
+
+Usage -- verifying image:
+=========================
+
+The mxsimage can also verify and dump contents of an image. Use the following
+syntax to verify and dump contents of an image:
+
+ mkimage -l <input bootstream file>
+
+This will output all the information from the SB image header and all the
+instructions contained in the SB image. It will also check if the various
+checksums in the SB image are correct.
index a0f1fa30f881c26665f4e6cc1cd20d8cdef2dd7d..87b1dfecd1c60ce2d778bb365f82b83c54056a0a 100644 (file)
@@ -11,9 +11,10 @@ easily if here is something they might want to dig for...
 
 Board            Arch        CPU            Commit      Removed     Last known maintainer/contact
 =================================================================================================
-Alaska8220       powerpc     mpc8220        -           -
-Yukon8220        powerpc     mpc8220        -           -
-sorcery          powerpc     mpc8220        -           -
+CANBT            powerpc     405CR          -           -           Matthias Fuchs <matthias.fuchs@esd.eu>
+Alaska8220       powerpc     mpc8220        d6ed322     2013-05-11
+Yukon8220        powerpc     mpc8220        d6ed322     2013-05-11
+sorcery          powerpc     mpc8220        d6ed322     2013-05-11
 smdk6400         arm         arm1176        52587f1    2013-04-12  Zhong Hongbo <bocui107@gmail.com>
 ns9750dev        arm         arm926ejs      4cfc611    2013-02-28  Markus Pietrek <mpietrek@fsforth.de>
 AMX860           powerpc     mpc860         1b0757e     2012-10-28  Wolfgang Denk <wd@denx.de>
index b8870ecf7309bba6215bb0ecff0e2e8b79a8f17b..d73d5103919662e8a8c044be35922e4bed33dec4 100644 (file)
 #include <linux/list.h>
 #include <linux/compiler.h>
 
+static bool dfu_reset_request;
 static LIST_HEAD(dfu_list);
 static int dfu_alt_num;
 
+bool dfu_reset(void)
+{
+       return dfu_reset_request;
+}
+
+void dfu_trigger_reset()
+{
+       dfu_reset_request = true;
+}
+
 static int dfu_find_alt_num(const char *s)
 {
        int i = 0;
index 2a01cc11b80546a39162e5b7c8485cdef72791d0..0ec12cff264fe8ad88117f8fe8748851cf0d4e85 100644 (file)
@@ -136,11 +136,43 @@ static int dfu_read_medium_nand(struct dfu_entity *dfu, u64 offset, void *buf,
        return ret;
 }
 
+static int dfu_flush_medium_nand(struct dfu_entity *dfu)
+{
+       int ret = 0;
+
+       /* in case of ubi partition, erase rest of the partition */
+       if (dfu->data.nand.ubi) {
+               nand_info_t *nand;
+               nand_erase_options_t opts;
+
+               if (nand_curr_device < 0 ||
+                   nand_curr_device >= CONFIG_SYS_MAX_NAND_DEVICE ||
+                   !nand_info[nand_curr_device].name) {
+                       printf("%s: invalid nand device\n", __func__);
+                       return -1;
+               }
+
+               nand = &nand_info[nand_curr_device];
+
+               memset(&opts, 0, sizeof(opts));
+               opts.offset = dfu->data.nand.start + dfu->offset +
+                               dfu->bad_skip;
+               opts.length = dfu->data.nand.start +
+                               dfu->data.nand.size - opts.offset;
+               ret = nand_erase_opts(nand, &opts);
+               if (ret != 0)
+                       printf("Failure erase: %d\n", ret);
+       }
+
+       return ret;
+}
+
 int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s)
 {
        char *st;
        int ret, dev, part;
 
+       dfu->data.nand.ubi = 0;
        dfu->dev_type = DFU_DEV_NAND;
        st = strsep(&s, " ");
        if (!strcmp(st, "raw")) {
@@ -148,7 +180,7 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s)
                dfu->data.nand.start = simple_strtoul(s, &s, 16);
                s++;
                dfu->data.nand.size = simple_strtoul(s, &s, 16);
-       } else if (!strcmp(st, "part")) {
+       } else if ((!strcmp(st, "part")) || (!strcmp(st, "partubi"))) {
                char mtd_id[32];
                struct mtd_device *mtd_dev;
                u8 part_num;
@@ -173,7 +205,8 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s)
 
                dfu->data.nand.start = pi->offset;
                dfu->data.nand.size = pi->size;
-
+               if (!strcmp(st, "partubi"))
+                       dfu->data.nand.ubi = 1;
        } else {
                printf("%s: Memory layout (%s) not supported!\n", __func__, st);
                return -1;
@@ -181,6 +214,7 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s)
 
        dfu->read_medium = dfu_read_medium_nand;
        dfu->write_medium = dfu_write_medium_nand;
+       dfu->flush_medium = dfu_flush_medium_nand;
 
        /* initial state */
        dfu->inited = 0;
index 96d4c9bb19960c943fa0666768e30212d996f139..22defcd7d9223be898b18cdc8ae1236a38272671 100644 (file)
@@ -544,6 +544,28 @@ int mxs_dma_go(int chan)
        return ret;
 }
 
+/*
+ * Execute a continuously running circular DMA descriptor.
+ * NOTE: This is not intended for general use, but rather
+ *      for the LCD driver in Smart-LCD mode. It allows
+ *      continuous triggering of the RUN bit there.
+ */
+void mxs_dma_circ_start(int chan, struct mxs_dma_desc *pdesc)
+{
+       struct mxs_apbh_regs *apbh_regs =
+               (struct mxs_apbh_regs *)MXS_APBH_BASE;
+
+       mxs_dma_flush_desc(pdesc);
+
+       mxs_dma_enable_irq(chan, 1);
+
+       writel(mxs_dma_cmd_address(pdesc),
+               &apbh_regs->ch[chan].hw_apbh_ch_nxtcmdar);
+       writel(1, &apbh_regs->ch[chan].hw_apbh_ch_sema);
+       writel(1 << (chan + APBH_CTRL0_CLKGATE_CHANNEL_OFFSET),
+               &apbh_regs->hw_apbh_ctrl0_clr);
+}
+
 /*
  * Initialize the DMA hardware
  */
index 8cc16fd2c2db3da9c77dabbd1e2ad89cd9bb36eb..14363c9a5b883b93f8316d74479434c432e21cdd 100644 (file)
@@ -23,6 +23,7 @@
 #define DEVCFG_STATUS_DMA_CMD_Q_E      0x40000000
 #define DEVCFG_STATUS_DMA_DONE_CNT_MASK        0x30000000
 #define DEVCFG_STATUS_PCFG_INIT                0x00000010
+#define DEVCFG_MCTRL_PCAP_LPBK         0x00000010
 #define DEVCFG_MCTRL_RFIFO_FLUSH       0x00000002
 #define DEVCFG_MCTRL_WFIFO_FLUSH       0x00000001
 
@@ -31,7 +32,7 @@
 #endif
 
 #ifndef CONFIG_SYS_FPGA_PROG_TIME
-#define CONFIG_SYS_FPGA_PROG_TIME CONFIG_SYS_HZ        /* 1 s */
+#define CONFIG_SYS_FPGA_PROG_TIME      (CONFIG_SYS_HZ * 4) /* 4 s */
 #endif
 
 int zynq_info(Xilinx_desc *desc)
@@ -200,6 +201,9 @@ int zynq_load(Xilinx_desc *desc, const void *buf, size_t bsize)
                swap = SWAP_DONE;
        }
 
+       /* Clear loopback bit */
+       clrbits_le32(&devcfg_base->mctrl, DEVCFG_MCTRL_PCAP_LPBK);
+
        if (!partialbit) {
                zynq_slcr_devcfg_disable();
 
index 7a034eba1222880db32f038ecf77881ae48292d9..051073cee3b5d47a2caeb4a9e600e3ed616aa866 100644 (file)
@@ -352,8 +352,8 @@ void special_gpio_free(unsigned gpio)
                return;
        }
 
-       reserve(special_gpio, gpio);
-       reserve(peri, gpio);
+       unreserve(special_gpio, gpio);
+       unreserve(peri, gpio);
        set_label(gpio, "free");
 }
 #endif
index 23229148d997201d5575dd2cfa889b6cbc34c2e9..af0978675ea84c77399a4a3e7229a8dc8f4f3f83 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Memory Setup stuff - taken from blob memsetup.S
+ * Copyright (C) 2013 Bo Shen <voice.shen@atmel.com>
  *
  * Copyright (C) 2009 Jens Scharsig (js_at_ng@scharsoft.de)
  *
@@ -8,16 +8,6 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
-/*
- * WARNING:
- *
- * As the code is right now, it expects all PIO ports A,B,C,...
- * to be evenly spaced in the memory map:
- * ATMEL_BASE_PIOA + port * sizeof at91pio_t
- * This might not necessaryly be true in future Atmel SoCs.
- * This code should be fixed to use a pointer array to the ports.
- */
-
 #include <config.h>
 #include <common.h>
 #include <asm/io.h>
 #include <asm/arch/hardware.h>
 #include <asm/arch/at91_pio.h>
 
+static struct at91_port *at91_pio_get_port(unsigned port)
+{
+       switch (port) {
+       case AT91_PIO_PORTA:
+               return (struct at91_port *)ATMEL_BASE_PIOA;
+       case AT91_PIO_PORTB:
+               return (struct at91_port *)ATMEL_BASE_PIOB;
+       case AT91_PIO_PORTC:
+               return (struct at91_port *)ATMEL_BASE_PIOC;
+#if (ATMEL_PIO_PORTS > 3)
+       case AT91_PIO_PORTD:
+               return (struct at91_port *)ATMEL_BASE_PIOD;
+#if (ATMEL_PIO_PORTS > 4)
+       case AT91_PIO_PORTE:
+               return (struct at91_port *)ATMEL_BASE_PIOE;
+#endif
+#endif
+       default:
+               return NULL;
+       }
+}
+
 int at91_set_pio_pullup(unsigned port, unsigned pin, int use_pullup)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
                if (use_pullup)
-                       writel(1 << pin, &pio->port[port].puer);
+                       writel(1 << pin, &at91_port->puer);
                else
-                       writel(1 << pin, &pio->port[port].pudr);
-               writel(mask, &pio->port[port].per);
+                       writel(1 << pin, &at91_port->pudr);
+               writel(mask, &at91_port->per);
        }
+
        return 0;
 }
 
@@ -46,15 +59,16 @@ int at91_set_pio_pullup(unsigned port, unsigned pin, int use_pullup)
  */
 int at91_set_pio_periph(unsigned port, unsigned pin, int use_pullup)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               writel(mask, &pio->port[port].idr);
+               writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
-               writel(mask, &pio->port[port].per);
+               writel(mask, &at91_port->per);
        }
+
        return 0;
 }
 
@@ -63,23 +77,24 @@ int at91_set_pio_periph(unsigned port, unsigned pin, int use_pullup)
  */
 int at91_set_a_periph(unsigned port, unsigned pin, int use_pullup)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               writel(mask, &pio->port[port].idr);
+               writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
 #if defined(CPU_HAS_PIO3)
-               writel(readl(&pio->port[port].abcdsr1) & ~mask,
-                       &pio->port[port].abcdsr1);
-               writel(readl(&pio->port[port].abcdsr2) & ~mask,
-                       &pio->port[port].abcdsr2);
+               writel(readl(&at91_port->abcdsr1) & ~mask,
+                      &at91_port->abcdsr1);
+               writel(readl(&at91_port->abcdsr2) & ~mask,
+                      &at91_port->abcdsr2);
 #else
-               writel(mask, &pio->port[port].asr);
+               writel(mask, &at91_port->asr);
 #endif
-               writel(mask, &pio->port[port].pdr);
+               writel(mask, &at91_port->pdr);
        }
+
        return 0;
 }
 
@@ -88,23 +103,24 @@ int at91_set_a_periph(unsigned port, unsigned pin, int use_pullup)
  */
 int at91_set_b_periph(unsigned port, unsigned pin, int use_pullup)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               writel(mask, &pio->port[port].idr);
+               writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
 #if defined(CPU_HAS_PIO3)
-               writel(readl(&pio->port[port].abcdsr1) | mask,
-                       &pio->port[port].abcdsr1);
-               writel(readl(&pio->port[port].abcdsr2) & ~mask,
-                       &pio->port[port].abcdsr2);
+               writel(readl(&at91_port->abcdsr1) | mask,
+                      &at91_port->abcdsr1);
+               writel(readl(&at91_port->abcdsr2) & ~mask,
+                      &at91_port->abcdsr2);
 #else
-               writel(mask, &pio->port[port].bsr);
+               writel(mask, &at91_port->bsr);
 #endif
-               writel(mask, &pio->port[port].pdr);
+               writel(mask, &at91_port->pdr);
        }
+
        return 0;
 }
 
@@ -114,19 +130,20 @@ int at91_set_b_periph(unsigned port, unsigned pin, int use_pullup)
  */
 int at91_set_c_periph(unsigned port, unsigned pin, int use_pullup)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               writel(mask, &pio->port[port].idr);
+               writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
-               writel(readl(&pio->port[port].abcdsr1) & ~mask,
-                       &pio->port[port].abcdsr1);
-               writel(readl(&pio->port[port].abcdsr2) | mask,
-                       &pio->port[port].abcdsr2);
-               writel(mask, &pio->port[port].pdr);
+               writel(readl(&at91_port->abcdsr1) & ~mask,
+                      &at91_port->abcdsr1);
+               writel(readl(&at91_port->abcdsr2) | mask,
+                      &at91_port->abcdsr2);
+               writel(mask, &at91_port->pdr);
        }
+
        return 0;
 }
 
@@ -135,19 +152,20 @@ int at91_set_c_periph(unsigned port, unsigned pin, int use_pullup)
  */
 int at91_set_d_periph(unsigned port, unsigned pin, int use_pullup)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               writel(mask, &pio->port[port].idr);
+               writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
-               writel(readl(&pio->port[port].abcdsr1) | mask,
-                       &pio->port[port].abcdsr1);
-               writel(readl(&pio->port[port].abcdsr2) | mask,
-                       &pio->port[port].abcdsr2);
-               writel(mask, &pio->port[port].pdr);
+               writel(readl(&at91_port->abcdsr1) | mask,
+                      &at91_port->abcdsr1);
+               writel(readl(&at91_port->abcdsr2) | mask,
+                      &at91_port->abcdsr2);
+               writel(mask, &at91_port->pdr);
        }
+
        return 0;
 }
 #endif
@@ -158,16 +176,17 @@ int at91_set_d_periph(unsigned port, unsigned pin, int use_pullup)
  */
 int at91_set_pio_input(unsigned port, u32 pin, int use_pullup)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               writel(mask, &pio->port[port].idr);
+               writel(mask, &at91_port->idr);
                at91_set_pio_pullup(port, pin, use_pullup);
-               writel(mask, &pio->port[port].odr);
-               writel(mask, &pio->port[port].per);
+               writel(mask, &at91_port->odr);
+               writel(mask, &at91_port->per);
        }
+
        return 0;
 }
 
@@ -177,20 +196,21 @@ int at91_set_pio_input(unsigned port, u32 pin, int use_pullup)
  */
 int at91_set_pio_output(unsigned port, u32 pin, int value)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
        if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
                mask = 1 << pin;
-               writel(mask, &pio->port[port].idr);
-               writel(mask, &pio->port[port].pudr);
+               writel(mask, &at91_port->idr);
+               writel(mask, &at91_port->pudr);
                if (value)
-                       writel(mask, &pio->port[port].sodr);
+                       writel(mask, &at91_port->sodr);
                else
-                       writel(mask, &pio->port[port].codr);
-               writel(mask, &pio->port[port].oer);
-               writel(mask, &pio->port[port].per);
+                       writel(mask, &at91_port->codr);
+               writel(mask, &at91_port->oer);
+               writel(mask, &at91_port->per);
        }
+
        return 0;
 }
 
@@ -199,20 +219,21 @@ int at91_set_pio_output(unsigned port, u32 pin, int value)
  */
 int at91_set_pio_deglitch(unsigned port, unsigned pin, int is_on)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
                if (is_on) {
 #if defined(CPU_HAS_PIO3)
-                       writel(mask, &pio->port[port].ifscdr);
+                       writel(mask, &at91_port->ifscdr);
 #endif
-                       writel(mask, &pio->port[port].ifer);
+                       writel(mask, &at91_port->ifer);
                } else {
-                       writel(mask, &pio->port[port].ifdr);
+                       writel(mask, &at91_port->ifdr);
                }
        }
+
        return 0;
 }
 
@@ -222,19 +243,20 @@ int at91_set_pio_deglitch(unsigned port, unsigned pin, int is_on)
  */
 int at91_set_pio_debounce(unsigned port, unsigned pin, int is_on, int div)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
                if (is_on) {
-                       writel(mask, &pio->port[port].ifscer);
-                       writel(div & PIO_SCDR_DIV, &pio->port[port].scdr);
-                       writel(mask, &pio->port[port].ifer);
+                       writel(mask, &at91_port->ifscer);
+                       writel(div & PIO_SCDR_DIV, &at91_port->scdr);
+                       writel(mask, &at91_port->ifer);
                } else {
-                       writel(mask, &pio->port[port].ifdr);
+                       writel(mask, &at91_port->ifdr);
                }
        }
+
        return 0;
 }
 
@@ -244,17 +266,18 @@ int at91_set_pio_debounce(unsigned port, unsigned pin, int is_on, int div)
  */
 int at91_set_pio_pulldown(unsigned port, unsigned pin, int is_on)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               writel(mask, &pio->port[port].pudr);
+               writel(mask, &at91_port->pudr);
                if (is_on)
-                       writel(mask, &pio->port[port].ppder);
+                       writel(mask, &at91_port->ppder);
                else
-                       writel(mask, &pio->port[port].ppddr);
+                       writel(mask, &at91_port->ppddr);
        }
+
        return 0;
 }
 
@@ -263,14 +286,15 @@ int at91_set_pio_pulldown(unsigned port, unsigned pin, int is_on)
  */
 int at91_set_pio_disable_schmitt_trig(unsigned port, unsigned pin)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               writel(readl(&pio->port[port].schmitt) | mask,
-                       &pio->port[port].schmitt);
+               writel(readl(&at91_port->schmitt) | mask,
+                      &at91_port->schmitt);
        }
+
        return 0;
 }
 #endif
@@ -281,16 +305,17 @@ int at91_set_pio_disable_schmitt_trig(unsigned port, unsigned pin)
  */
 int at91_set_pio_multi_drive(unsigned port, unsigned pin, int is_on)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
                if (is_on)
-                       writel(mask, &pio->port[port].mder);
+                       writel(mask, &at91_port->mder);
                else
-                       writel(mask, &pio->port[port].mddr);
+                       writel(mask, &at91_port->mddr);
        }
+
        return 0;
 }
 
@@ -299,16 +324,17 @@ int at91_set_pio_multi_drive(unsigned port, unsigned pin, int is_on)
  */
 int at91_set_pio_value(unsigned port, unsigned pin, int value)
 {
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
                if (value)
-                       writel(mask, &pio->port[port].sodr);
+                       writel(mask, &at91_port->sodr);
                else
-                       writel(mask, &pio->port[port].codr);
+                       writel(mask, &at91_port->codr);
        }
+
        return 0;
 }
 
@@ -317,13 +343,56 @@ int at91_set_pio_value(unsigned port, unsigned pin, int value)
  */
 int at91_get_pio_value(unsigned port, unsigned pin)
 {
-       u32             pdsr = 0;
-       at91_pio_t      *pio = (at91_pio_t *) ATMEL_BASE_PIOA;
-       u32             mask;
+       struct at91_port *at91_port = at91_pio_get_port(port);
+       u32 pdsr = 0, mask;
 
-       if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {
+       if (at91_port && (pin < 32)) {
                mask = 1 << pin;
-               pdsr = readl(&pio->port[port].pdsr) & mask;
+               pdsr = readl(&at91_port->pdsr) & mask;
        }
+
        return pdsr != 0;
 }
+
+/* Common GPIO API */
+
+#define at91_gpio_to_port(gpio)                (gpio / 32)
+#define at91_gpio_to_pin(gpio)         (gpio % 32)
+
+int gpio_request(unsigned gpio, const char *label)
+{
+       return 0;
+}
+
+int gpio_free(unsigned gpio)
+{
+       return 0;
+}
+
+int gpio_direction_input(unsigned gpio)
+{
+       at91_set_pio_input(at91_gpio_to_port(gpio),
+                          at91_gpio_to_pin(gpio), 0);
+       return 0;
+}
+
+int gpio_direction_output(unsigned gpio, int value)
+{
+       at91_set_pio_output(at91_gpio_to_port(gpio),
+                           at91_gpio_to_pin(gpio), value);
+       return 0;
+}
+
+int gpio_get_value(unsigned gpio)
+{
+       return at91_get_pio_value(at91_gpio_to_port(gpio),
+                                 at91_gpio_to_pin(gpio));
+}
+
+int gpio_set_value(unsigned gpio, int value)
+{
+       at91_set_pio_value(at91_gpio_to_port(gpio),
+                          at91_gpio_to_pin(gpio), value);
+
+       return 0;
+}
index f16e9ae4d2b3765533fd937e813cc60488fae528..13dcf798730f4313e6767dc8078b05a454e6adb2 100644 (file)
@@ -2,20 +2,7 @@
  * 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
+ * SPDX-License-Identifier:    GPL-2.0
  *
  * This work is derived from the linux 2.6.27 kernel source
  * To fetch, use the kernel repository
  *
  * 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.
  */
 #include <common.h>
 #include <asm/gpio.h>
index be1374592151b415c428182340a463c3c48492e0..7371cd4a87fdd7b7a64afbb39ed4fd80e402d6cc 100644 (file)
@@ -47,9 +47,6 @@ struct pca953x_chip_ngpio {
 static struct pca953x_chip_ngpio pca953x_chip_ngpios[] =
     CONFIG_SYS_I2C_PCA953X_WIDTH;
 
-#define NUM_CHIP_GPIOS (sizeof(pca953x_chip_ngpios) / \
-                       sizeof(struct pca953x_chip_ngpio))
-
 /*
  * Determine the number of GPIO pins supported. If we don't know we assume
  * 8 pins.
@@ -58,7 +55,7 @@ static int pca953x_ngpio(uint8_t chip)
 {
        int i;
 
-       for (i = 0; i < NUM_CHIP_GPIOS; i++)
+       for (i = 0; i < ARRAY_SIZE(pca953x_chip_ngpios); i++)
                if (pca953x_chip_ngpios[i].chip == chip)
                        return pca953x_chip_ngpios[i].ngpio;
 
index 38455e1c664ba0dcaaa6511f2afc65b5301e2180..291ad946dba19a8b358b4be6fe3c12be018d73a1 100644 (file)
@@ -206,9 +206,58 @@ static unsigned int get_i2c_clock(int bus)
                return gd->arch.i2c1_clk;       /* I2C1 clock */
 }
 
+static int fsl_i2c_fixup(const struct fsl_i2c *dev)
+{
+       const unsigned long long timeout = usec2ticks(CONFIG_I2C_MBB_TIMEOUT);
+       unsigned long long timeval = 0;
+       int ret = -1;
+       unsigned int flags = 0;
+
+#ifdef CONFIG_SYS_FSL_ERRATUM_I2C_A004447
+       unsigned int svr = get_svr();
+       if ((SVR_SOC_VER(svr) == SVR_8548 && IS_SVR_REV(svr, 3, 1)) ||
+           (SVR_REV(svr) <= CONFIG_SYS_FSL_A004447_SVR_REV))
+               flags = I2C_CR_BIT6;
+#endif
+
+       writeb(I2C_CR_MEN | I2C_CR_MSTA, &dev->cr);
+
+       timeval = get_ticks();
+       while (!(readb(&dev->sr) & I2C_SR_MBB)) {
+               if ((get_ticks() - timeval) > timeout)
+                       goto err;
+       }
+
+       if (readb(&dev->sr) & I2C_SR_MAL) {
+               /* SDA is stuck low */
+               writeb(0, &dev->cr);
+               udelay(100);
+               writeb(I2C_CR_MSTA | flags, &dev->cr);
+               writeb(I2C_CR_MEN | I2C_CR_MSTA | flags, &dev->cr);
+       }
+
+       readb(&dev->dr);
+
+       timeval = get_ticks();
+       while (!(readb(&dev->sr) & I2C_SR_MIF)) {
+               if ((get_ticks() - timeval) > timeout)
+                       goto err;
+       }
+       ret = 0;
+
+err:
+       writeb(I2C_CR_MEN | flags, &dev->cr);
+       writeb(0, &dev->sr);
+       udelay(100);
+
+       return ret;
+}
+
 static void fsl_i2c_init(struct i2c_adapter *adap, int speed, int slaveadd)
 {
        const struct fsl_i2c *dev;
+       const unsigned long long timeout = usec2ticks(CONFIG_I2C_MBB_TIMEOUT);
+       unsigned long long timeval;
 
 #ifdef CONFIG_SYS_I2C_INIT_BOARD
        /* Call board specific i2c bus reset routine before accessing the
@@ -226,6 +275,18 @@ static void fsl_i2c_init(struct i2c_adapter *adap, int speed, int slaveadd)
        writeb(0x0, &dev->sr);          /* clear status register */
        writeb(I2C_CR_MEN, &dev->cr);   /* start I2C controller */
 
+       timeval = get_ticks();
+       while (readb(&dev->sr) & I2C_SR_MBB) {
+               if ((get_ticks() - timeval) < timeout)
+                       continue;
+
+               if (fsl_i2c_fixup(dev))
+                       debug("i2c_init: BUS#%d failed to init\n",
+                             adap->hwadapnr);
+
+               break;
+       }
+
 #ifdef CONFIG_SYS_I2C_BOARD_LATE_INIT
        /* Call board specific i2c bus reset routine AFTER the bus has been
         * initialized. Use either this callpoint or i2c_init_board;
@@ -394,8 +455,10 @@ fsl_i2c_write(struct i2c_adapter *adap, u8 dev, uint addr, int alen,
        int i = -1; /* signal error */
        u8 *a = (u8*)&addr;
 
-       if (i2c_wait4bus(adap) >= 0 &&
-           i2c_write_addr(adap, dev, I2C_WRITE_BIT, 0) != 0 &&
+       if (i2c_wait4bus(adap) < 0)
+               return -1;
+
+       if (i2c_write_addr(adap, dev, I2C_WRITE_BIT, 0) != 0 &&
            __i2c_write(adap, &a[4 - alen], alen) == alen) {
                i = __i2c_write(adap, data, length);
        }
index a2baec0ace2054b7a6e4870a08435b5818675e81..396fea89af545bb2eba8a1827a21f423e717d40b 100644 (file)
@@ -105,11 +105,11 @@ DECLARE_GLOBAL_DATA_PTR;
 # endif
 #endif
 
-#if !defined(CONFIG_SYS_SOFT_I2C_SPEED)
-#define CONFIG_SYS_SOFT_I2C_SPEED CONFIG_SYS_I2C_SPEED
+#if !defined(CONFIG_SYS_I2C_SOFT_SPEED)
+#define CONFIG_SYS_I2C_SOFT_SPEED CONFIG_SYS_I2C_SPEED
 #endif
-#if !defined(CONFIG_SYS_SOFT_I2C_SLAVE)
-#define CONFIG_SYS_SOFT_I2C_SLAVE CONFIG_SYS_I2C_SLAVE
+#if !defined(CONFIG_SYS_I2C_SOFT_SLAVE)
+#define CONFIG_SYS_I2C_SOFT_SLAVE CONFIG_SYS_I2C_SLAVE
 #endif
 
 /*-----------------------------------------------------------------------
index 9ac3969a07cfe1d71df571b978e815ff95abbf03..9847cf126bf26104c268c54ddead0f22033b881d 100644 (file)
@@ -453,6 +453,10 @@ void i2c_init_board(void)
 
 static void tegra_i2c_init(struct i2c_adapter *adap, int speed, int slaveaddr)
 {
+       /* No i2c support prior to relocation */
+       if (!(gd->flags & GD_FLG_RELOC))
+               return;
+
        /* This will override the speed selected in the fdt for that port */
        debug("i2c_init(speed=%u, slaveaddr=0x%x)\n", speed, slaveaddr);
        i2c_set_bus_speed(speed);
index 49e5cb9c2a494de55d097ba85d880348dd5a8bb8..bedf833f70dfac17344af3195cfb33582c96ab34 100644 (file)
@@ -32,6 +32,9 @@ COBJS-$(CONFIG_TEGRA_MMC) += tegra_mmc.o
 COBJS-$(CONFIG_DWMMC) += dw_mmc.o
 COBJS-$(CONFIG_EXYNOS_DWMMC) += exynos_dw_mmc.o
 COBJS-$(CONFIG_ZYNQ_SDHCI) += zynq_sdhci.o
+ifdef CONFIG_SPL_BUILD
+COBJS-$(CONFIG_SPL_MMC_BOOT) += fsl_esdhc_spl.o
+endif
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/mmc/fsl_esdhc_spl.c b/drivers/mmc/fsl_esdhc_spl.c
new file mode 100644 (file)
index 0000000..65c52a2
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <mmc.h>
+#include <malloc.h>
+
+/*
+ * The environment variables are written to just after the u-boot image
+ * on SDCard, so we must read the MBR to get the start address and code
+ * length of the u-boot image, then calculate the address of the env.
+ */
+#define ESDHC_BOOT_IMAGE_SIZE  0x48
+#define ESDHC_BOOT_IMAGE_ADDR  0x50
+#define MBRDBR_BOOT_SIG_55     0x1fe
+#define MBRDBR_BOOT_SIG_AA     0x1ff
+#define CONFIG_CFG_DATA_SECTOR 0
+
+/*
+ * The main entry for mmc booting. It's necessary that SDRAM is already
+ * configured and available since this code loads the main U-Boot image
+ * from mmc into SDRAM and starts it from there.
+ */
+
+void __noreturn mmc_boot(void)
+{
+       __attribute__((noreturn)) void (*uboot)(void);
+       uint blk_start, blk_cnt, err;
+       u32 blklen;
+       uchar *tmp_buf;
+       uchar val;
+       uint i, byte_num;
+       u32 offset, code_len;
+       struct mmc *mmc;
+
+       mmc = find_mmc_device(0);
+       if (!mmc) {
+               puts("spl: mmc device not found!!\n");
+               hang();
+       }
+
+       blklen = mmc->read_bl_len;
+       tmp_buf = malloc(blklen);
+       if (!tmp_buf) {
+               puts("spl: malloc memory failed!!\n");
+               hang();
+       }
+       memset(tmp_buf, 0, blklen);
+
+       /*
+       * Read source addr from sd card
+       */
+       err = mmc->block_dev.block_read(0, CONFIG_CFG_DATA_SECTOR, 1, tmp_buf);
+       if (err != 1) {
+               puts("spl: mmc read failed!!\n");
+               free(tmp_buf);
+               hang();
+       }
+
+       val = *(tmp_buf + MBRDBR_BOOT_SIG_55);
+       if (0x55 != val) {
+               puts("spl: mmc signature is not valid!!\n");
+               free(tmp_buf);
+               hang();
+       }
+       val = *(tmp_buf + MBRDBR_BOOT_SIG_AA);
+       if (0xAA != val) {
+               puts("spl: mmc signature is not valid!!\n");
+               free(tmp_buf);
+               hang();
+       }
+
+       byte_num = 4;
+       offset = 0;
+       for (i = 0; i < byte_num; i++) {
+               val = *(tmp_buf + ESDHC_BOOT_IMAGE_ADDR + i);
+               offset = (offset << 8) + val;
+       }
+       offset += CONFIG_SYS_MMC_U_BOOT_OFFS;
+       /* Get the code size from offset 0x48 */
+       byte_num = 4;
+       code_len = 0;
+       for (i = 0; i < byte_num; i++) {
+               val = *(tmp_buf + ESDHC_BOOT_IMAGE_SIZE + i);
+               code_len = (code_len << 8) + val;
+       }
+       code_len -= CONFIG_SYS_MMC_U_BOOT_OFFS;
+       /*
+       * Load U-Boot image from mmc into RAM
+       */
+       blk_start = ALIGN(offset, mmc->read_bl_len) / mmc->read_bl_len;
+       blk_cnt = ALIGN(code_len, mmc->read_bl_len) / mmc->read_bl_len;
+       err = mmc->block_dev.block_read(0, blk_start, blk_cnt,
+                                       (uchar *)CONFIG_SYS_MMC_U_BOOT_DST);
+       if (err != blk_cnt) {
+               puts("spl: mmc read failed!!\n");
+               free(tmp_buf);
+               hang();
+       }
+
+       /*
+       * Clean d-cache and invalidate i-cache, to
+       * make sure that no stale data is executed.
+       */
+       flush_cache(CONFIG_SYS_MMC_U_BOOT_DST, CONFIG_SYS_MMC_U_BOOT_SIZE);
+
+       /*
+       * Jump to U-Boot image
+       */
+       uboot = (void *)CONFIG_SYS_MMC_U_BOOT_START;
+       (*uboot)();
+}
index 4da8db9bed2d1ef0e4f4d4b3460d8689eeeeb9e8..55026759ede4d41cbb26e2096a965e87e9b812b6 100644 (file)
@@ -1483,7 +1483,9 @@ int mmc_initialize(bd_t *bis)
        if (board_mmc_init(bis) < 0)
                cpu_mmc_init(bis);
 
+#ifndef CONFIG_SPL_BUILD
        print_mmc_devices(',');
+#endif
 
        do_preinit();
        return 0;
index e5a5d7532c9a918f0d08634fa09d1603b3e4eec8..245f9d0c6724a6ac865ac663effb55cfe5d5bfec 100644 (file)
@@ -410,7 +410,8 @@ int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int), int (*cd)(int))
        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;
+                        MMC_MODE_HS_52MHz | MMC_MODE_HS |
+                        MMC_MODE_HC;
 
        /*
         * SSPCLK = 480 * 18 / 29 / 1 = 297.731 MHz
index a37663eeb471b19761691636ac7dcf3eb6732c2c..a389cd101c2f55e62ca8ab90efaf395234d98713 100644 (file)
@@ -1803,7 +1803,7 @@ static int flash_detect_legacy(phys_addr_t base, int banknum)
                                        break;
                                else
                                        unmap_physmem((void *)info->start[0],
-                                                     MAP_NOCACHE);
+                                                     info->portwidth);
                        }
                }
 
index e27e0b7050b002f5dbe1aab888f2c9060164f4c4..366dee667062d192b63af1f40556d61f77a8d460 100644 (file)
@@ -23,6 +23,7 @@ COBJS-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o
 COBJS-$(CONFIG_SPL_NAND_LOAD) += nand_spl_load.o
 COBJS-$(CONFIG_SPL_NAND_ECC) += nand_ecc.o
 COBJS-$(CONFIG_SPL_NAND_BASE) += nand_base.o
+COBJS-$(CONFIG_SPL_NAND_INIT) += nand.o
 
 else # not spl
 
index f844990e381782803c99f350f60c52c8bd0b6368..da83f06e4734d186eb3661f8938bcad039e871a2 100644 (file)
@@ -16,6 +16,7 @@
 #include <asm/arch/gpio.h>
 #include <asm/arch/at91_pio.h>
 
+#include <malloc.h>
 #include <nand.h>
 #include <watchdog.h>
 
@@ -50,13 +51,13 @@ struct atmel_nand_host {
        void __iomem    *pmecc_index_of;
 
        /* data for pmecc computation */
-       int16_t pmecc_smu[(CONFIG_PMECC_CAP + 2) * (2 * CONFIG_PMECC_CAP + 1)];
-       int16_t pmecc_partial_syn[2 * CONFIG_PMECC_CAP + 1];
-       int16_t pmecc_si[2 * CONFIG_PMECC_CAP + 1];
-       int16_t pmecc_lmu[CONFIG_PMECC_CAP + 1]; /* polynomal order */
-       int     pmecc_mu[CONFIG_PMECC_CAP + 1];
-       int     pmecc_dmu[CONFIG_PMECC_CAP + 1];
-       int     pmecc_delta[CONFIG_PMECC_CAP + 1];
+       int16_t *pmecc_smu;
+       int16_t *pmecc_partial_syn;
+       int16_t *pmecc_si;
+       int16_t *pmecc_lmu; /* polynomal order */
+       int     *pmecc_mu;
+       int     *pmecc_dmu;
+       int     *pmecc_delta;
 };
 
 static struct atmel_nand_host pmecc_host;
@@ -109,6 +110,48 @@ static void __iomem *pmecc_get_alpha_to(struct atmel_nand_host *host)
                        table_size * sizeof(int16_t);
 }
 
+static void pmecc_data_free(struct atmel_nand_host *host)
+{
+       free(host->pmecc_partial_syn);
+       free(host->pmecc_si);
+       free(host->pmecc_lmu);
+       free(host->pmecc_smu);
+       free(host->pmecc_mu);
+       free(host->pmecc_dmu);
+       free(host->pmecc_delta);
+}
+
+static int pmecc_data_alloc(struct atmel_nand_host *host)
+{
+       const int cap = host->pmecc_corr_cap;
+       int size;
+
+       size = (2 * cap + 1) * sizeof(int16_t);
+       host->pmecc_partial_syn = malloc(size);
+       host->pmecc_si = malloc(size);
+       host->pmecc_lmu = malloc((cap + 1) * sizeof(int16_t));
+       host->pmecc_smu = malloc((cap + 2) * size);
+
+       size = (cap + 1) * sizeof(int);
+       host->pmecc_mu = malloc(size);
+       host->pmecc_dmu = malloc(size);
+       host->pmecc_delta = malloc(size);
+
+       if (host->pmecc_partial_syn &&
+                       host->pmecc_si &&
+                       host->pmecc_lmu &&
+                       host->pmecc_smu &&
+                       host->pmecc_mu &&
+                       host->pmecc_dmu &&
+                       host->pmecc_delta)
+               return 0;
+
+       /* error happened */
+       pmecc_data_free(host);
+       return -ENOMEM;
+
+}
+
 static void pmecc_gen_syndrome(struct mtd_info *mtd, int sector)
 {
        struct nand_chip *nand_chip = mtd->priv;
@@ -622,6 +665,99 @@ static void atmel_pmecc_core_init(struct mtd_info *mtd)
        pmecc_writel(host->pmecc, ctrl, PMECC_CTRL_ENABLE);
 }
 
+#ifdef CONFIG_SYS_NAND_ONFI_DETECTION
+/*
+ * get_onfi_ecc_param - Get ECC requirement from ONFI parameters
+ * @ecc_bits: store the ONFI ECC correct bits capbility
+ * @sector_size: in how many bytes that ONFI require to correct @ecc_bits
+ *
+ * Returns -1 if ONFI parameters is not supported. In this case @ecc_bits,
+ * @sector_size are initialize to 0.
+ * Return 0 if success to get the ECC requirement.
+ */
+static int get_onfi_ecc_param(struct nand_chip *chip,
+               int *ecc_bits, int *sector_size)
+{
+       *ecc_bits = *sector_size = 0;
+
+       if (chip->onfi_params.ecc_bits == 0xff)
+               /* TODO: the sector_size and ecc_bits need to be find in
+                * extended ecc parameter, currently we don't support it.
+                */
+               return -1;
+
+       *ecc_bits = chip->onfi_params.ecc_bits;
+
+       /* The default sector size (ecc codeword size) is 512 */
+       *sector_size = 512;
+
+       return 0;
+}
+
+/*
+ * pmecc_choose_ecc - Get ecc requirement from ONFI parameters. If
+ *                    pmecc_corr_cap or pmecc_sector_size is 0, then set it as
+ *                    ONFI ECC parameters.
+ * @host: point to an atmel_nand_host structure.
+ *        if host->pmecc_corr_cap is 0 then set it as the ONFI ecc_bits.
+ *        if host->pmecc_sector_size is 0 then set it as the ONFI sector_size.
+ * @chip: point to an nand_chip structure.
+ * @cap: store the ONFI ECC correct bits capbility
+ * @sector_size: in how many bytes that ONFI require to correct @ecc_bits
+ *
+ * Return 0 if success. otherwise return the error code.
+ */
+static int pmecc_choose_ecc(struct atmel_nand_host *host,
+               struct nand_chip *chip,
+               int *cap, int *sector_size)
+{
+       /* Get ECC requirement from ONFI parameters */
+       *cap = *sector_size = 0;
+       if (chip->onfi_version) {
+               if (!get_onfi_ecc_param(chip, cap, sector_size)) {
+                       MTDDEBUG(MTD_DEBUG_LEVEL1, "ONFI params, minimum required ECC: %d bits in %d bytes\n",
+                               *cap, *sector_size);
+               } else {
+                       dev_info(host->dev, "NAND chip ECC reqirement is in Extended ONFI parameter, we don't support yet.\n");
+               }
+       } else {
+               dev_info(host->dev, "NAND chip is not ONFI compliant, assume ecc_bits is 2 in 512 bytes");
+       }
+       if (*cap == 0 && *sector_size == 0) {
+               /* Non-ONFI compliant or use extended ONFI parameters */
+               *cap = 2;
+               *sector_size = 512;
+       }
+
+       /* If head file doesn't specify then use the one in ONFI parameters */
+       if (host->pmecc_corr_cap == 0) {
+               /* use the most fitable ecc bits (the near bigger one ) */
+               if (*cap <= 2)
+                       host->pmecc_corr_cap = 2;
+               else if (*cap <= 4)
+                       host->pmecc_corr_cap = 4;
+               else if (*cap <= 8)
+                       host->pmecc_corr_cap = 8;
+               else if (*cap <= 12)
+                       host->pmecc_corr_cap = 12;
+               else if (*cap <= 24)
+                       host->pmecc_corr_cap = 24;
+               else
+                       return -EINVAL;
+       }
+       if (host->pmecc_sector_size == 0) {
+               /* use the most fitable sector size (the near smaller one ) */
+               if (*sector_size >= 1024)
+                       host->pmecc_sector_size = 1024;
+               else if (*sector_size >= 512)
+                       host->pmecc_sector_size = 512;
+               else
+                       return -EINVAL;
+       }
+       return 0;
+}
+#endif
+
 static int atmel_pmecc_nand_init_params(struct nand_chip *nand,
                struct mtd_info *mtd)
 {
@@ -635,9 +771,45 @@ static int atmel_pmecc_nand_init_params(struct nand_chip *nand,
        nand->ecc.correct = NULL;
        nand->ecc.hwctl = NULL;
 
-       cap = host->pmecc_corr_cap = CONFIG_PMECC_CAP;
-       sector_size = host->pmecc_sector_size = CONFIG_PMECC_SECTOR_SIZE;
-       host->pmecc_index_table_offset = CONFIG_PMECC_INDEX_TABLE_OFFSET;
+#ifdef CONFIG_SYS_NAND_ONFI_DETECTION
+       host->pmecc_corr_cap = host->pmecc_sector_size = 0;
+
+#ifdef CONFIG_PMECC_CAP
+       host->pmecc_corr_cap = CONFIG_PMECC_CAP;
+#endif
+#ifdef CONFIG_PMECC_SECTOR_SIZE
+       host->pmecc_sector_size = CONFIG_PMECC_SECTOR_SIZE;
+#endif
+       /* Get ECC requirement of ONFI parameters. And if CONFIG_PMECC_CAP or
+        * CONFIG_PMECC_SECTOR_SIZE not defined, then use ecc_bits, sector_size
+        * from ONFI.
+        */
+       if (pmecc_choose_ecc(host, nand, &cap, &sector_size)) {
+               dev_err(host->dev, "The NAND flash's ECC requirement(ecc_bits: %d, sector_size: %d) are not support!",
+                               cap, sector_size);
+               return -EINVAL;
+       }
+
+       if (cap > host->pmecc_corr_cap)
+               dev_info(host->dev, "WARNING: Using different ecc correct bits(%d bit) from Nand ONFI ECC reqirement (%d bit).\n",
+                               host->pmecc_corr_cap, cap);
+       if (sector_size < host->pmecc_sector_size)
+               dev_info(host->dev, "WARNING: Using different ecc correct sector size (%d bytes) from Nand ONFI ECC reqirement (%d bytes).\n",
+                               host->pmecc_sector_size, sector_size);
+#else  /* CONFIG_SYS_NAND_ONFI_DETECTION */
+       host->pmecc_corr_cap = CONFIG_PMECC_CAP;
+       host->pmecc_sector_size = CONFIG_PMECC_SECTOR_SIZE;
+#endif
+
+       cap = host->pmecc_corr_cap;
+       sector_size = host->pmecc_sector_size;
+
+       /* TODO: need check whether cap & sector_size is validate */
+
+       if (host->pmecc_sector_size == 512)
+               host->pmecc_index_table_offset = ATMEL_PMECC_INDEX_OFFSET_512;
+       else
+               host->pmecc_index_table_offset = ATMEL_PMECC_INDEX_OFFSET_1024;
 
        MTDDEBUG(MTD_DEBUG_LEVEL1,
                "Initialize PMECC params, cap: %d, sector: %d\n",
@@ -655,7 +827,8 @@ static int atmel_pmecc_nand_init_params(struct nand_chip *nand,
        switch (mtd->writesize) {
        case 2048:
        case 4096:
-               host->pmecc_degree = PMECC_GF_DIMENSION_13;
+               host->pmecc_degree = (sector_size == 512) ?
+                       PMECC_GF_DIMENSION_13 : PMECC_GF_DIMENSION_14;
                host->pmecc_cw_len = (1 << host->pmecc_degree) - 1;
                host->pmecc_sector_number = mtd->writesize / sector_size;
                host->pmecc_bytes_per_sector = pmecc_get_ecc_bytes(
@@ -691,6 +864,12 @@ static int atmel_pmecc_nand_init_params(struct nand_chip *nand,
                return 0;
        }
 
+       /* Allocate data for PMECC computation */
+       if (pmecc_data_alloc(host)) {
+               dev_err(host->dev, "Cannot allocate memory for PMECC computation!\n");
+               return -ENOMEM;
+       }
+
        nand->ecc.read_page = atmel_nand_pmecc_read_page;
        nand->ecc.write_page = atmel_nand_pmecc_write_page;
        nand->ecc.strength = cap;
index 7e5599ac634b4dd784efc38da4be4da3976418c3..a7476b49bb0e5688d2b84fccb10f7cf6f14cac7a 100644 (file)
@@ -34,7 +34,11 @@ static void nand_wait(void)
        }
 }
 
+#ifdef CONFIG_TPL_BUILD
+int nand_spl_load_image(uint32_t offs, unsigned int uboot_size, void *vdst)
+#else
 static int nand_load_image(uint32_t offs, unsigned int uboot_size, void *vdst)
+#endif
 {
        fsl_lbc_t *regs = LBC_BASE_ADDR;
        uchar *buf = (uchar *)CONFIG_SYS_NAND_BASE;
@@ -113,6 +117,15 @@ static int nand_load_image(uint32_t offs, unsigned int uboot_size, void *vdst)
        return 0;
 }
 
+/*
+ * Defines a static function nand_load_image() here, because non-static makes
+ * the code too large for certain SPLs(minimal SPL, maximum size <= 4Kbytes)
+ */
+#ifndef CONFIG_TPL_BUILD
+#define nand_spl_load_image(offs, uboot_size, vdst) \
+       nand_load_image(offs, uboot_size, vdst)
+#endif
+
 /*
  * The main entry for NAND booting. It's necessary that SDRAM is already
  * configured and available since this code loads the main U-Boot image
@@ -124,17 +137,17 @@ void nand_boot(void)
        /*
         * Load U-Boot image from NAND into RAM
         */
-       nand_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
-                       CONFIG_SYS_NAND_U_BOOT_SIZE,
-                       (void *)CONFIG_SYS_NAND_U_BOOT_DST);
+       nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
+                           CONFIG_SYS_NAND_U_BOOT_SIZE,
+                           (void *)CONFIG_SYS_NAND_U_BOOT_DST);
 
 #ifdef CONFIG_NAND_ENV_DST
-       nand_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
-                       (void *)CONFIG_NAND_ENV_DST);
+       nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
+                           (void *)CONFIG_NAND_ENV_DST);
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
-       nand_load_image(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE,
-                       (void *)CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE);
+       nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE,
+                           (void *)CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE);
 #endif
 #endif
 
index 1e0210a9a416a7513149466a443bc990115da24b..d149a6dae67f4d89b1bbe72b4a4d18a951564c8d 100644 (file)
@@ -51,7 +51,6 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
        struct jffs2_unknown_node cleanmarker;
        erase_info_t erase;
        unsigned long erase_length, erased_length; /* in blocks */
-       int bbtest = 1;
        int result;
        int percent_complete = -1;
        const char *mtd_device = meminfo->name;
@@ -102,7 +101,7 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
                        puts("Size of erase exceeds limit\n");
                        return -EFBIG;
                }
-               if (!opts->scrub && bbtest) {
+               if (!opts->scrub) {
                        int ret = mtd_block_isbad(meminfo, erase.addr);
                        if (ret > 0) {
                                if (!opts->quiet)
index e537fcf54c879e32bf61494a97e5a301e67e4715..191138ad188edaca986b3c8feda9233b8b6c7c3f 100644 (file)
@@ -11,6 +11,7 @@ LIB   := $(obj)libspi_flash.o
 
 ifdef CONFIG_SPL_BUILD
 COBJS-$(CONFIG_SPL_SPI_LOAD)   += spi_spl_load.o
+COBJS-$(CONFIG_SPL_SPI_BOOT)   += fsl_espi_spl.o
 endif
 
 COBJS-$(CONFIG_SPI_FLASH)      += spi_flash.o
index 6a92c4b774b41ff85dbb834ccc206e12b8a7017d..f34df43f58bfa76daee274cd931ff5b649415686 100644 (file)
@@ -252,7 +252,7 @@ static int dataflash_write_p2(struct spi_flash *flash,
        }
 
        debug("SF: AT45: Successfully programmed %zu bytes @ 0x%x\n",
-                       len, offset);
+             len, offset);
        ret = 0;
 
 out:
@@ -325,7 +325,7 @@ static int dataflash_write_at45(struct spi_flash *flash,
        }
 
        debug("SF: AT45: Successfully programmed %zu bytes @ 0x%x\n",
-                       len, offset);
+             len, offset);
        ret = 0;
 
 out:
@@ -387,7 +387,7 @@ static int dataflash_erase_p2(struct spi_flash *flash, u32 offset, size_t len)
        }
 
        debug("SF: AT45: Successfully erased %zu bytes @ 0x%x\n",
-                       len, offset);
+             len, offset);
        ret = 0;
 
 out:
@@ -450,7 +450,7 @@ static int dataflash_erase_at45(struct spi_flash *flash, u32 offset, size_t len)
        }
 
        debug("SF: AT45: Successfully erased %zu bytes @ 0x%x\n",
-                       len, offset);
+             len, offset);
        ret = 0;
 
 out:
@@ -476,7 +476,7 @@ struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode)
 
        if (i == ARRAY_SIZE(atmel_spi_flash_table)) {
                debug("SF: Unsupported DataFlash ID %02x\n",
-                               idcode[1]);
+                     idcode[1]);
                return NULL;
        }
 
index b16e7ab098ea36b7d1146ad7028fe3ec910e2e85..25cfc1252c406e1a73c5e82a1885eefc038c2d1e 100644 (file)
@@ -54,8 +54,7 @@ struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode)
 
        flash->page_size = 256;
        flash->sector_size = 256 * 16 * 16;
-       flash->size = 256 * 16
-           * params->nr_sectors;
+       flash->size = 256 * 16 * params->nr_sectors;
 
        return flash;
 }
diff --git a/drivers/mtd/spi/fsl_espi_spl.c b/drivers/mtd/spi/fsl_espi_spl.c
new file mode 100644 (file)
index 0000000..6263d8c
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <spi_flash.h>
+#include <malloc.h>
+
+#define ESPI_BOOT_IMAGE_SIZE   0x48
+#define ESPI_BOOT_IMAGE_ADDR   0x50
+#define CONFIG_CFG_DATA_SECTOR 0
+
+/*
+ * The main entry for SPI booting. It's necessary that SDRAM is already
+ * configured and available since this code loads the main U-Boot image
+ * from SPI into SDRAM and starts it from there.
+ */
+void spi_boot(void)
+{
+       void (*uboot)(void) __noreturn;
+       u32 offset, code_len;
+       unsigned char *buf = NULL;
+       struct spi_flash *flash;
+
+       flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
+                       CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
+       if (flash == NULL) {
+               puts("\nspi_flash_probe failed");
+               hang();
+       }
+
+       /*
+       * Load U-Boot image from SPI flash into RAM
+       */
+       buf = malloc(flash->page_size);
+       if (buf == NULL) {
+               puts("\nmalloc failed");
+               hang();
+       }
+       memset(buf, 0, flash->page_size);
+
+       spi_flash_read(flash, CONFIG_CFG_DATA_SECTOR,
+                      flash->page_size, (void *)buf);
+       offset = *(u32 *)(buf + ESPI_BOOT_IMAGE_ADDR);
+       /* Skip spl code */
+       offset += CONFIG_SYS_SPI_FLASH_U_BOOT_OFFS;
+       /* Get the code size from offset 0x48 */
+       code_len = *(u32 *)(buf + ESPI_BOOT_IMAGE_SIZE);
+       /* Skip spl code */
+       code_len = code_len - CONFIG_SPL_MAX_SIZE;
+       /* copy code to DDR */
+       spi_flash_read(flash, offset, code_len,
+                      (void *)CONFIG_SYS_SPI_FLASH_U_BOOT_DST);
+       /*
+       * Jump to U-Boot image
+       */
+       flush_cache(CONFIG_SYS_SPI_FLASH_U_BOOT_DST, code_len);
+       uboot = (void *)CONFIG_SYS_SPI_FLASH_U_BOOT_START;
+       (*uboot)();
+}
index 950c7770a961250f9f97fef66f3b49bee4e9dfff..b42581a70f80a48e9590608835dcce33dbf92518 100644 (file)
@@ -45,7 +45,7 @@ struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode)
 
        if (i == ARRAY_SIZE(gigadevice_spi_flash_table)) {
                debug("SF: Unsupported Gigadevice ID %02x%02x\n",
-                               idcode[1], idcode[2]);
+                     idcode[1], idcode[2]);
                return NULL;
        }
 
index f67ddd696b57916f3d0cf62a6c8b1626da037f0c..38f9d69169b2ea4baa60b9f9839557e16855aad6 100644 (file)
@@ -230,7 +230,8 @@ struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode)
                /* JEDEC conformant RAMTRON id */
                for (i = 0; i < ARRAY_SIZE(ramtron_spi_fram_table); i++) {
                        params = &ramtron_spi_fram_table[i];
-                       if (idcode[1] == params->id1 && idcode[2] == params->id2)
+                       if (idcode[1] == params->id1 &&
+                           idcode[2] == params->id2)
                                goto found;
                }
                break;
@@ -251,7 +252,8 @@ struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode)
                /* now find the device */
                for (i = 0; i < ARRAY_SIZE(ramtron_spi_fram_table); i++) {
                        params = &ramtron_spi_fram_table[i];
-                       if (!strcmp(params->name, CONFIG_SPI_FRAM_RAMTRON_NON_JEDEC))
+                       if (!strcmp(params->name,
+                                   CONFIG_SPI_FRAM_RAMTRON_NON_JEDEC))
                                goto found;
                }
                debug("SF: Unsupported non-JEDEC RAMTRON device "
@@ -264,7 +266,7 @@ struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode)
 
        /* arriving here means no method has found a device we can handle */
        debug("SF/ramtron: unsupported device id0=%02x id1=%02x id2=%02x\n",
-               idcode[0], idcode[1], idcode[2]);
+             idcode[0], idcode[1], idcode[2]);
        return NULL;
 
 found:
index 47a48976b9649cdc473f3b152a740dcb44135fe3..fa7ac8c9322fd20ef39ef786b0fffd1ae9192b1b 100644 (file)
@@ -6,7 +6,7 @@
  * TsiChung Liew (Tsi-Chung.Liew@freescale.com),
  * and  Jason McMullan (mcmullan@netapp.com)
  *
- * SPDX-License-Identifier:    GPL-2.0+ 
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
@@ -122,7 +122,8 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode)
        }
 
        if (i == ARRAY_SIZE(spansion_spi_flash_table)) {
-               debug("SF: Unsupported SPANSION ID %04x %04x\n", jedec, ext_jedec);
+               debug("SF: Unsupported SPANSION ID %04x %04x\n",
+                     jedec, ext_jedec);
                return NULL;
        }
 
index 6a6fe37e0eea92e27817f47ca6c79c618325612c..5d5055ff38698c1a88ca4279be16b64333e873ab 100644 (file)
@@ -40,12 +40,13 @@ static int spi_flash_read_write(struct spi_slave *spi,
        ret = spi_xfer(spi, cmd_len * 8, cmd, NULL, flags);
        if (ret) {
                debug("SF: Failed to send command (%zu bytes): %d\n",
-                               cmd_len, ret);
+                     cmd_len, ret);
        } else if (data_len != 0) {
-               ret = spi_xfer(spi, data_len * 8, data_out, data_in, SPI_XFER_END);
+               ret = spi_xfer(spi, data_len * 8, data_out, data_in,
+                                       SPI_XFER_END);
                if (ret)
                        debug("SF: Failed to transfer %zu bytes of data: %d\n",
-                                       data_len, ret);
+                             data_len, ret);
        }
 
        return ret;
@@ -86,7 +87,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout)
        ret = spi_xfer(spi, 8, &cmd, NULL, SPI_XFER_BEGIN);
        if (ret) {
                debug("SF: fail to read %s status register\n",
-                       cmd == CMD_READ_STATUS ? "read" : "flag");
+                     cmd == CMD_READ_STATUS ? "read" : "flag");
                return ret;
        }
 
@@ -144,7 +145,7 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd,
        ret = spi_flash_cmd_wait_ready(flash, timeout);
        if (ret < 0) {
                debug("SF: write %s timed out\n",
-                       timeout == SPI_FLASH_PROG_TIMEOUT ?
+                     timeout == SPI_FLASH_PROG_TIMEOUT ?
                        "program" : "page erase");
                return ret;
        }
@@ -554,12 +555,14 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs,
                goto err_manufacturer_probe;
        }
 #endif
+#ifndef CONFIG_SPL_BUILD
        printf("SF: Detected %s with page size ", flash->name);
        print_size(flash->sector_size, ", total ");
        print_size(flash->size, "");
        if (flash->memory_map)
                printf(", mapped at %p", flash->memory_map);
        puts("\n");
+#endif
 #ifndef CONFIG_SPI_FLASH_BAR
        if (flash->size > SPI_FLASH_16MB_BOUN) {
                puts("SF: Warning - Only lower 16MiB accessible,");
index 7c799ca482ca6617ad29fe05ddd52b927f0a5e68..29355307f3689c0b61f2c6432a0033c4504a8c0f 100644 (file)
@@ -39,7 +39,7 @@ void spl_spi_load_image(void)
 
        /* Load u-boot, mkimage header is 64 bytes. */
        spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS, 0x40,
-                       (void *) header);
+                      (void *)header);
        spl_parse_image_header(header);
        spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS,
                       spl_image.size, (void *)spl_image.load_addr);
index 95f5490c350ac0f85287b518f1b2427286c30ee3..256867c84481f1238de91a907b829369020efe43 100644 (file)
@@ -19,7 +19,7 @@
 #include "spi_flash_internal.h"
 
 #define CMD_SST_BP             0x02    /* Byte Program */
-#define CMD_SST_AAI_WP         0xAD    /* Auto Address Increment Word Program */
+#define CMD_SST_AAI_WP         0xAD    /* Auto Address Incr Word Program */
 
 #define SST_SR_WIP             (1 << 0)        /* Write-in-Progress */
 #define SST_SR_WEL             (1 << 1)        /* Write enable */
@@ -50,47 +50,61 @@ static const struct sst_spi_flash_params sst_spi_flash_table[] = {
                .flags = SST_FEAT_WP,
                .nr_sectors = 128,
                .name = "SST25VF040B",
-       },{
+       },
+       {
                .idcode1 = 0x8e,
                .flags = SST_FEAT_WP,
                .nr_sectors = 256,
                .name = "SST25VF080B",
-       },{
+       },
+       {
                .idcode1 = 0x41,
                .flags = SST_FEAT_WP,
                .nr_sectors = 512,
                .name = "SST25VF016B",
-       },{
+       },
+       {
                .idcode1 = 0x4a,
                .flags = SST_FEAT_WP,
                .nr_sectors = 1024,
                .name = "SST25VF032B",
-       },{
+       },
+       {
                .idcode1 = 0x4b,
                .flags = SST_FEAT_MBP,
                .nr_sectors = 2048,
                .name = "SST25VF064C",
-       },{
+       },
+       {
                .idcode1 = 0x01,
                .flags = SST_FEAT_WP,
                .nr_sectors = 16,
                .name = "SST25WF512",
-       },{
+       },
+       {
                .idcode1 = 0x02,
                .flags = SST_FEAT_WP,
                .nr_sectors = 32,
                .name = "SST25WF010",
-       },{
+       },
+       {
                .idcode1 = 0x03,
                .flags = SST_FEAT_WP,
                .nr_sectors = 64,
                .name = "SST25WF020",
-       },{
+       },
+       {
                .idcode1 = 0x04,
                .flags = SST_FEAT_WP,
                .nr_sectors = 128,
                .name = "SST25WF040",
        },
+       {
+               .idcode1 = 0x05,
+               .flags = SST_FEAT_WP,
+               .nr_sectors = 256,
+               .name = "SST25WF080",
+       },
 };
 
 static int
@@ -105,7 +119,7 @@ sst_byte_write(struct spi_flash *flash, u32 offset, const void *buf)
        };
 
        debug("BP[%02x]: 0x%p => cmd = { 0x%02x 0x%06x }\n",
-               spi_w8r8(flash->spi, CMD_READ_STATUS), buf, cmd[0], offset);
+             spi_w8r8(flash->spi, CMD_READ_STATUS), buf, cmd[0], offset);
 
        ret = spi_flash_cmd_write_enable(flash);
        if (ret)
@@ -152,11 +166,11 @@ sst_write_wp(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
 
        for (; actual < len - 1; actual += 2) {
                debug("WP[%02x]: 0x%p => cmd = { 0x%02x 0x%06x }\n",
-                    spi_w8r8(flash->spi, CMD_READ_STATUS), buf + actual, cmd[0],
-                    offset);
+                     spi_w8r8(flash->spi, CMD_READ_STATUS), buf + actual,
+                     cmd[0], offset);
 
                ret = spi_flash_cmd_write(flash->spi, cmd, cmd_len,
-                                         buf + actual, 2);
+                                       buf + actual, 2);
                if (ret) {
                        debug("SF: sst word program failed\n");
                        break;
index 0ca00f158c620646194f0c8254dae67d6af2685e..c5fa64e376cb235a075039eb4bb6f002c1b99d62 100644 (file)
@@ -8,7 +8,7 @@
  * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
  * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
  *
- * SPDX-License-Identifier:    GPL-2.0+ 
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
@@ -18,7 +18,7 @@
 #include "spi_flash_internal.h"
 
 /* M25Pxx-specific commands */
-#define CMD_M25PXX_RES         0xab    /* Release from DP, and Read Signature */
+#define CMD_M25PXX_RES 0xab    /* Release from DP, and Read Signature */
 
 struct stmicro_spi_flash_params {
        u16 id;
@@ -150,7 +150,7 @@ static const struct stmicro_spi_flash_params stmicro_spi_flash_table[] = {
        },
 };
 
-struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode)
+struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 *idcode)
 {
        const struct stmicro_spi_flash_params *params;
        struct spi_flash *flash;
@@ -166,17 +166,17 @@ struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode)
                        idcode[0] = 0x20;
                        idcode[1] = 0x20;
                        idcode[2] = idcode[3] + 1;
-               } else
+               } else {
                        return NULL;
+               }
        }
 
        id = ((idcode[1] << 8) | idcode[2]);
 
        for (i = 0; i < ARRAY_SIZE(stmicro_spi_flash_table); i++) {
                params = &stmicro_spi_flash_table[i];
-               if (params->id == id) {
+               if (params->id == id)
                        break;
-               }
        }
 
        if (i == ARRAY_SIZE(stmicro_spi_flash_table)) {
index c399bf14d1f6ec52c719ec26e55c83ea2d0ea3d4..b31911a4055b14cc984f7b314a96c94c9219894a 100644 (file)
@@ -123,7 +123,7 @@ struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)
 
        if (i == ARRAY_SIZE(winbond_spi_flash_table)) {
                debug("SF: Unsupported Winbond ID %02x%02x\n",
-                               idcode[1], idcode[2]);
+                     idcode[1], idcode[2]);
                return NULL;
        }
 
index 7c6e362f0ea3ead4dede1c212702b229f9086f4b..c98867dc4aa39b9fc0144973f4c2096151ee7146 100644 (file)
@@ -1,25 +1,6 @@
-/*-----------------------------------------------------------------------------+
- *   This source code is dual-licensed.  You may use it under the terms of the
- *   GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *-----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*-----------------------------------------------------------------------------+
  *
  *  File Name: enetemac.c
index f5017682d496c0f4cf004ca9893ad509515c4f2e..7f0cfe594024f07c1ad7e898da39aba7eeee3dbf 100644 (file)
@@ -157,7 +157,7 @@ static void ax88180_mac_reset (struct eth_device *dev)
        OUTW (dev, MISC_RESET_MAC, MISC);
        tmpval = INW (dev, MISC);
 
-       for (i = 0; i < (sizeof (program_seq) / sizeof (program_seq[0])); i++)
+       for (i = 0; i < ARRAY_SIZE(program_seq); i++)
                OUTW (dev, program_seq[i].value, program_seq[i].offset);
 }
 
index e14a3598ca3e91465cafd2d613a84d807ca1ffd1..690e5724b4e57418c50a17306d8b340857ec15a0 100644 (file)
@@ -980,6 +980,8 @@ static int fec_probe(bd_t *bd, int dev_id, uint32_t base_addr,
        if (fec_get_hwaddr(edev, dev_id, ethaddr) == 0) {
                debug("got MAC%d address from fuse: %pM\n", dev_id, ethaddr);
                memcpy(edev->enetaddr, ethaddr, 6);
+               if (!getenv("ethaddr"))
+                       eth_setenv_enetaddr("ethaddr", ethaddr);
        }
        return ret;
 err3:
index 422c2c691ed31216ae60c2e2b0768bc251ce464a..cb099cd84962fa7ba09da632683c1fd8622466ff 100644 (file)
@@ -341,7 +341,9 @@ static int fm_eth_startup(struct fm_eth *fm_eth)
        mac->init_mac(mac);
 
        /* For some reason we need to set SPEED_100 */
-       if ((fm_eth->enet_if == PHY_INTERFACE_MODE_SGMII) && mac->set_if_mode)
+       if (((fm_eth->enet_if == PHY_INTERFACE_MODE_SGMII) ||
+            (fm_eth->enet_if == PHY_INTERFACE_MODE_QSGMII)) &&
+             mac->set_if_mode)
                mac->set_if_mode(mac, fm_eth->enet_if, SPEED_100);
 
        /* init bmi rx port, IM mode and disable */
index 4bc8f35a1cbf3a6387bc6579766d0ff4def8b692..bca20b3330361690e1aed72d7386b5a6ae3b24a5 100644 (file)
@@ -396,6 +396,8 @@ int fm_init_common(int index, struct ccsr_fman *reg)
        }
 #elif defined(CONFIG_SYS_QE_FMAN_FW_IN_REMOTE)
        void *addr = (void *)CONFIG_SYS_QE_FMAN_FW_ADDR;
+#else
+       void *addr = NULL;
 #endif
 
        /* Upload the Fman microcode if it's present */
index 144e109fd0336ec3a812ee53592afe94c2c9472a..592a67f2a58536ef2712b37150a739888e97f587 100644 (file)
@@ -90,6 +90,7 @@ static void memac_set_interface_mode(struct fsl_enet_mac *mac,
                if_mode |= (IF_MODE_GMII | IF_MODE_RM);
                break;
        case PHY_INTERFACE_MODE_SGMII:
+       case PHY_INTERFACE_MODE_QSGMII:
                if_mode &= ~IF_MODE_MASK;
                if_mode |= (IF_MODE_GMII);
                break;
index 10c141fa2634b0d266c6278d63966b1fc629ac29..6253f22f75de8b938c7aeb25db8e0ae958aae49a 100644 (file)
@@ -114,7 +114,45 @@ phy_interface_t fman_port_enet_if(enum fm_port port)
                        return PHY_INTERFACE_MODE_SGMII;
                break;
        default:
-               return PHY_INTERFACE_MODE_NONE;
+               break;
+       }
+
+       /* handle QSGMII */
+       switch (port) {
+       case FM1_DTSEC1:
+       case FM1_DTSEC2:
+       case FM1_DTSEC3:
+       case FM1_DTSEC4:
+               /* check lane G on SerDes1 */
+               if (is_serdes_configured(QSGMII_FM1_A))
+                       return PHY_INTERFACE_MODE_QSGMII;
+               break;
+       case FM1_DTSEC5:
+       case FM1_DTSEC6:
+       case FM1_DTSEC9:
+       case FM1_DTSEC10:
+               /* check lane C on SerDes1 */
+               if (is_serdes_configured(QSGMII_FM1_B))
+                       return PHY_INTERFACE_MODE_QSGMII;
+               break;
+       case FM2_DTSEC1:
+       case FM2_DTSEC2:
+       case FM2_DTSEC3:
+       case FM2_DTSEC4:
+               /* check lane G on SerDes2 */
+               if (is_serdes_configured(QSGMII_FM2_A))
+                       return PHY_INTERFACE_MODE_QSGMII;
+               break;
+       case FM2_DTSEC5:
+       case FM2_DTSEC6:
+       case FM2_DTSEC9:
+       case FM2_DTSEC10:
+               /* check lane C on SerDes2 */
+               if (is_serdes_configured(QSGMII_FM2_B))
+                       return PHY_INTERFACE_MODE_QSGMII;
+               break;
+       default:
+               break;
        }
 
        return PHY_INTERFACE_MODE_NONE;
index 1ad952d3a9a89ffb3e0a1a03337ac055099d711d..6391f9b32fb297de6ddc43cf7eb8fa041cf219db 100644 (file)
@@ -504,7 +504,7 @@ int mcdmafec_initialize(bd_t * bis)
        u32 tmp = CONFIG_SYS_INTSRAM + 0x2000;
 #endif
 
-       for (i = 0; i < sizeof(fec_info) / sizeof(fec_info[0]); i++) {
+       for (i = 0; i < ARRAY_SIZE(fec_info); i++) {
 
                dev =
                    (struct eth_device *)memalign(CONFIG_SYS_CACHELINE_SIZE,
index e911dd31ec7692025462a57e5d08e9d0f630c7aa..8eee272cf1442145df4c308956d3c9ac8df0c09c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Faraday 10/100Mbps Ethernet Controller
  *
- * (C) Copyright 2010 Faraday Technology
+ * (C) Copyright 2013 Faraday Technology
  * Dante Su <dantesu@faraday-tech.com>
  *
  * SPDX-License-Identifier:    GPL-2.0+
@@ -54,11 +54,11 @@ struct ftmac110_chip {
        uint32_t lnkup;
        uint32_t phy_addr;
 
-       struct ftmac110_rxd *rxd;
+       struct ftmac110_desc *rxd;
        ulong                rxd_dma;
        uint32_t             rxd_idx;
 
-       struct ftmac110_txd *txd;
+       struct ftmac110_desc *txd;
        ulong                txd_dma;
        uint32_t             txd_idx;
 };
@@ -69,7 +69,7 @@ static uint16_t mdio_read(struct eth_device *dev,
        uint8_t phyaddr, uint8_t phyreg)
 {
        struct ftmac110_chip *chip = dev->priv;
-       struct ftmac110_regs __iomem *regs = chip->regs;
+       struct ftmac110_regs *regs = chip->regs;
        uint32_t tmp, ts;
        uint16_t ret = 0xffff;
 
@@ -98,7 +98,7 @@ static void mdio_write(struct eth_device *dev,
        uint8_t phyaddr, uint8_t phyreg, uint16_t phydata)
 {
        struct ftmac110_chip *chip = dev->priv;
-       struct ftmac110_regs __iomem *regs = chip->regs;
+       struct ftmac110_regs *regs = chip->regs;
        uint32_t tmp, ts;
 
        tmp = PHYCR_WRITE
@@ -195,7 +195,7 @@ static int ftmac110_reset(struct eth_device *dev)
        uint8_t *a;
        uint32_t i, maccr;
        struct ftmac110_chip *chip = dev->priv;
-       struct ftmac110_regs __iomem *regs = chip->regs;
+       struct ftmac110_regs *regs = chip->regs;
 
        /* 1. MAC reset */
        writel(MACCR_RESET, &regs->maccr);
@@ -212,14 +212,15 @@ static int ftmac110_reset(struct eth_device *dev)
        /* 1-1. Init tx ring */
        for (i = 0; i < CFG_TXDES_NUM; ++i) {
                /* owned by SW */
-               chip->txd[i].ct[0] = 0;
+               chip->txd[i].ctrl &= cpu_to_le64(FTMAC110_TXD_CLRMASK);
        }
        chip->txd_idx = 0;
 
        /* 1-2. Init rx ring */
        for (i = 0; i < CFG_RXDES_NUM; ++i) {
                /* owned by HW */
-               chip->rxd[i].ct[0] = cpu_to_le32(FTMAC110_RXCT0_OWNER);
+               chip->rxd[i].ctrl &= cpu_to_le64(FTMAC110_RXD_CLRMASK);
+               chip->rxd[i].ctrl |= cpu_to_le64(FTMAC110_RXD_OWNER);
        }
        chip->rxd_idx = 0;
 
@@ -268,7 +269,7 @@ static int ftmac110_probe(struct eth_device *dev, bd_t *bis)
 static void ftmac110_halt(struct eth_device *dev)
 {
        struct ftmac110_chip *chip = dev->priv;
-       struct ftmac110_regs __iomem *regs = chip->regs;
+       struct ftmac110_regs *regs = chip->regs;
 
        writel(0, &regs->imr);
        writel(0, &regs->maccr);
@@ -279,8 +280,9 @@ static void ftmac110_halt(struct eth_device *dev)
 static int ftmac110_send(struct eth_device *dev, void *pkt, int len)
 {
        struct ftmac110_chip *chip = dev->priv;
-       struct ftmac110_regs __iomem *regs = chip->regs;
-       struct ftmac110_txd *des;
+       struct ftmac110_regs *regs = chip->regs;
+       struct ftmac110_desc *txd;
+       uint64_t ctrl;
 
        if (!chip->lnkup)
                return 0;
@@ -292,24 +294,26 @@ static int ftmac110_send(struct eth_device *dev, void *pkt, int len)
 
        len = max(60, len);
 
-       des = &chip->txd[chip->txd_idx];
-       if (le32_to_cpu(des->ct[0]) & FTMAC110_TXCT0_OWNER) {
+       txd = &chip->txd[chip->txd_idx];
+       ctrl = le64_to_cpu(txd->ctrl);
+       if (ctrl & FTMAC110_TXD_OWNER) {
                /* kick-off Tx DMA */
                writel(0xffffffff, &regs->txpd);
                printf("ftmac110: out of txd\n");
                return 0;
        }
 
-       memcpy(des->vbuf, (void *)pkt, len);
-       dma_map_single(des->vbuf, len, DMA_TO_DEVICE);
+       memcpy(txd->vbuf, (void *)pkt, len);
+       dma_map_single(txd->vbuf, len, DMA_TO_DEVICE);
 
-       /* update len, fts and lts */
-       des->ct[1] &= cpu_to_le32(FTMAC110_TXCT1_END);
-       des->ct[1] |= cpu_to_le32(FTMAC110_TXCT1_LEN(len)
-               | FTMAC110_TXCT1_FTS | FTMAC110_TXCT1_LTS);
-
-       /* set owner bit and clear others */
-       des->ct[0] = cpu_to_le32(FTMAC110_TXCT0_OWNER);
+       /* clear control bits */
+       ctrl &= FTMAC110_TXD_CLRMASK;
+       /* set len, fts and lts */
+       ctrl |= FTMAC110_TXD_LEN(len) | FTMAC110_TXD_FTS | FTMAC110_TXD_LTS;
+       /* set owner bit */
+       ctrl |= FTMAC110_TXD_OWNER;
+       /* write back to descriptor */
+       txd->ctrl = cpu_to_le64(ctrl);
 
        /* kick-off Tx DMA */
        writel(0xffffffff, &regs->txpd);
@@ -322,23 +326,24 @@ static int ftmac110_send(struct eth_device *dev, void *pkt, int len)
 static int ftmac110_recv(struct eth_device *dev)
 {
        struct ftmac110_chip *chip = dev->priv;
-       struct ftmac110_rxd *des;
-       uint32_t ct0, len, rlen = 0;
+       struct ftmac110_desc *rxd;
+       uint32_t len, rlen = 0;
+       uint64_t ctrl;
        uint8_t *buf;
 
        if (!chip->lnkup)
                return 0;
 
        do {
-               des = &chip->rxd[chip->rxd_idx];
-               ct0 = le32_to_cpu(des->ct[0]);
-               if (ct0 & FTMAC110_RXCT0_OWNER)
+               rxd = &chip->rxd[chip->rxd_idx];
+               ctrl = le64_to_cpu(rxd->ctrl);
+               if (ctrl & FTMAC110_RXD_OWNER)
                        break;
 
-               len = FTMAC110_RXCT0_LEN(ct0);
-               buf = des->vbuf;
+               len = (uint32_t)FTMAC110_RXD_LEN(ctrl);
+               buf = rxd->vbuf;
 
-               if (ct0 & FTMAC110_RXCT0_ERRMASK) {
+               if (ctrl & FTMAC110_RXD_ERRMASK) {
                        printf("ftmac110: rx error\n");
                } else {
                        dma_map_single(buf, len, DMA_FROM_DEVICE);
@@ -347,7 +352,9 @@ static int ftmac110_recv(struct eth_device *dev)
                }
 
                /* owned by hardware */
-               des->ct[0] = cpu_to_le32(FTMAC110_RXCT0_OWNER);
+               ctrl &= FTMAC110_RXD_CLRMASK;
+               ctrl |= FTMAC110_RXD_OWNER;
+               rxd->ctrl |= cpu_to_le64(ctrl);
 
                chip->rxd_idx = (chip->rxd_idx + 1) % CFG_RXDES_NUM;
        } while (0);
@@ -422,42 +429,43 @@ int ftmac110_initialize(bd_t *bis)
 
        /* allocate tx descriptors (it must be 16 bytes aligned) */
        chip->txd = dma_alloc_coherent(
-               sizeof(struct ftmac110_txd) * CFG_TXDES_NUM, &chip->txd_dma);
+               sizeof(struct ftmac110_desc) * CFG_TXDES_NUM, &chip->txd_dma);
        if (!chip->txd)
                panic("ftmac110: out of memory 3\n");
        memset(chip->txd, 0,
-              sizeof(struct ftmac110_txd) * CFG_TXDES_NUM);
+              sizeof(struct ftmac110_desc) * CFG_TXDES_NUM);
        for (i = 0; i < CFG_TXDES_NUM; ++i) {
                void *va = memalign(ARCH_DMA_MINALIGN, CFG_XBUF_SIZE);
+
                if (!va)
                        panic("ftmac110: out of memory 4\n");
-               chip->txd[i].vbuf  = va;
-               chip->txd[i].buf   = cpu_to_le32(virt_to_phys(va));
-               chip->txd[i].ct[1] = 0;
-               chip->txd[i].ct[0] = 0; /* owned by SW */
+               chip->txd[i].vbuf = va;
+               chip->txd[i].pbuf = cpu_to_le32(virt_to_phys(va));
+               chip->txd[i].ctrl = 0;  /* owned by SW */
        }
-       chip->txd[i - 1].ct[1] |= cpu_to_le32(FTMAC110_TXCT1_END);
+       chip->txd[i - 1].ctrl |= cpu_to_le64(FTMAC110_TXD_END);
        chip->txd_idx = 0;
 
        /* allocate rx descriptors (it must be 16 bytes aligned) */
        chip->rxd = dma_alloc_coherent(
-               sizeof(struct ftmac110_rxd) * CFG_RXDES_NUM, &chip->rxd_dma);
+               sizeof(struct ftmac110_desc) * CFG_RXDES_NUM, &chip->rxd_dma);
        if (!chip->rxd)
                panic("ftmac110: out of memory 4\n");
        memset((void *)chip->rxd, 0,
-              sizeof(struct ftmac110_rxd) * CFG_RXDES_NUM);
+              sizeof(struct ftmac110_desc) * CFG_RXDES_NUM);
        for (i = 0; i < CFG_RXDES_NUM; ++i) {
                void *va = memalign(ARCH_DMA_MINALIGN, CFG_XBUF_SIZE + 2);
+
                if (!va)
                        panic("ftmac110: out of memory 5\n");
                /* it needs to be exactly 2 bytes aligned */
                va = ((uint8_t *)va + 2);
-               chip->rxd[i].vbuf  = va;
-               chip->rxd[i].buf   = cpu_to_le32(virt_to_phys(va));
-               chip->rxd[i].ct[1] = cpu_to_le32(CFG_XBUF_SIZE);
-               chip->rxd[i].ct[0] = cpu_to_le32(FTMAC110_RXCT0_OWNER);
+               chip->rxd[i].vbuf = va;
+               chip->rxd[i].pbuf = cpu_to_le32(virt_to_phys(va));
+               chip->rxd[i].ctrl = cpu_to_le64(FTMAC110_RXD_OWNER
+                       | FTMAC110_RXD_BUFSZ(CFG_XBUF_SIZE));
        }
-       chip->rxd[i - 1].ct[1] |= cpu_to_le32(FTMAC110_RXCT1_END);
+       chip->rxd[i - 1].ctrl |= cpu_to_le64(FTMAC110_RXD_END);
        chip->rxd_idx = 0;
 
        eth_register(dev);
index 19e4248bd3859fc6204cf336207b7f0ec82e59ee..2772ae7b703e0e583fa3da81cd4c4b6ce6bc5e50 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Faraday 10/100Mbps Ethernet Controller
  *
- * (C) Copyright 2010 Faraday Technology
+ * (C) Copyright 2013 Faraday Technology
  * Dante Su <dantesu@faraday-tech.com>
  *
  * SPDX-License-Identifier:    GPL-2.0+
@@ -135,42 +135,42 @@ struct ftmac110_regs {
 /*
  * descriptor structure
  */
-struct ftmac110_rxd {
-       uint32_t ct[2];
-       uint32_t buf;
-       void    *vbuf; /* reserved */
+struct ftmac110_desc {
+       uint64_t ctrl;
+       uint32_t pbuf;
+       void    *vbuf;
 };
 
-#define FTMAC110_RXCT0_OWNER       BIT_MASK(31) /* owner: 1=HW, 0=SW */
-#define FTMAC110_RXCT0_FRS         BIT_MASK(29) /* first pkt desc */
-#define FTMAC110_RXCT0_LRS         BIT_MASK(28) /* last pkt desc */
-#define FTMAC110_RXCT0_ODDNB       BIT_MASK(22) /* odd nibble */
-#define FTMAC110_RXCT0_RUNT        BIT_MASK(21) /* runt pkt */
-#define FTMAC110_RXCT0_FTL         BIT_MASK(20) /* frame too long */
-#define FTMAC110_RXCT0_CRC         BIT_MASK(19) /* pkt crc error */
-#define FTMAC110_RXCT0_ERR         BIT_MASK(18) /* bus error */
-#define FTMAC110_RXCT0_ERRMASK     (0x1f << 18) /* all errors */
-#define FTMAC110_RXCT0_BCST        BIT_MASK(17) /* Bcst pkt */
-#define FTMAC110_RXCT0_MCST        BIT_MASK(16) /* Mcst pkt */
-#define FTMAC110_RXCT0_LEN(x)      ((x) & 0x7ff)
-
-#define FTMAC110_RXCT1_END         BIT_MASK(31)
-#define FTMAC110_RXCT1_BUFSZ(x)    ((x) & 0x7ff)
-
-struct ftmac110_txd {
-       uint32_t ct[2];
-       uint32_t buf;
-       void    *vbuf; /* reserved */
-};
-
-#define FTMAC110_TXCT0_OWNER       BIT_MASK(31) /* owner: 1=HW, 0=SW */
-#define FTMAC110_TXCT0_COL         0x00000003   /* collision */
-
-#define FTMAC110_TXCT1_END         BIT_MASK(31) /* end of ring */
-#define FTMAC110_TXCT1_TXIC        BIT_MASK(30) /* tx done interrupt */
-#define FTMAC110_TXCT1_TX2FIC      BIT_MASK(29) /* tx fifo interrupt */
-#define FTMAC110_TXCT1_FTS         BIT_MASK(28) /* first pkt desc */
-#define FTMAC110_TXCT1_LTS         BIT_MASK(27) /* last pkt desc */
-#define FTMAC110_TXCT1_LEN(x)      ((x) & 0x7ff)
+#define FTMAC110_RXD_END        ((uint64_t)1 << 63)
+#define FTMAC110_RXD_BUFSZ(x)   (((uint64_t)(x) & 0x7ff) << 32)
+
+#define FTMAC110_RXD_OWNER      ((uint64_t)1 << 31) /* owner: 1=HW, 0=SW */
+#define FTMAC110_RXD_FRS        ((uint64_t)1 << 29) /* first pkt desc */
+#define FTMAC110_RXD_LRS        ((uint64_t)1 << 28) /* last pkt desc */
+#define FTMAC110_RXD_ODDNB      ((uint64_t)1 << 22) /* odd nibble */
+#define FTMAC110_RXD_RUNT       ((uint64_t)1 << 21) /* runt pkt */
+#define FTMAC110_RXD_FTL        ((uint64_t)1 << 20) /* frame too long */
+#define FTMAC110_RXD_CRC        ((uint64_t)1 << 19) /* pkt crc error */
+#define FTMAC110_RXD_ERR        ((uint64_t)1 << 18) /* bus error */
+#define FTMAC110_RXD_ERRMASK    ((uint64_t)0x1f << 18)
+#define FTMAC110_RXD_BCST       ((uint64_t)1 << 17) /* Bcst pkt */
+#define FTMAC110_RXD_MCST       ((uint64_t)1 << 16) /* Mcst pkt */
+#define FTMAC110_RXD_LEN(x)     ((uint64_t)((x) & 0x7ff))
+
+#define FTMAC110_RXD_CLRMASK   \
+       (FTMAC110_RXD_END | FTMAC110_RXD_BUFSZ(0x7ff))
+
+#define FTMAC110_TXD_END    ((uint64_t)1 << 63) /* end of ring */
+#define FTMAC110_TXD_TXIC   ((uint64_t)1 << 62) /* tx done interrupt */
+#define FTMAC110_TXD_TX2FIC ((uint64_t)1 << 61) /* tx fifo interrupt */
+#define FTMAC110_TXD_FTS    ((uint64_t)1 << 60) /* first pkt desc */
+#define FTMAC110_TXD_LTS    ((uint64_t)1 << 59) /* last pkt desc */
+#define FTMAC110_TXD_LEN(x) ((uint64_t)((x) & 0x7ff) << 32)
+
+#define FTMAC110_TXD_OWNER  ((uint64_t)1 << 31)        /* owner: 1=HW, 0=SW */
+#define FTMAC110_TXD_COL    ((uint64_t)3)              /* collision */
+
+#define FTMAC110_TXD_CLRMASK    \
+       (FTMAC110_TXD_END)
 
 #endif  /* FTMAC110_H */
index 2bf00685337fb7e1df4c1729e2049e5133703b83..229658abc8eaedd5ca3d502b8677e942f960928c 100644 (file)
@@ -766,7 +766,7 @@ static int lan91c96_detect_chip(struct eth_device *dev)
        SMC_SELECT_BANK(dev, 3);
        chip_id = (SMC_inw(dev, 0xA) & LAN91C96_REV_CHIPID) >> 4;
        SMC_SELECT_BANK(dev, 0);
-       for (r = 0; r < sizeof(supported_chips) / sizeof(struct id_type); r++)
+       for (r = 0; r < ARRAY_SIZE(supported_chips); r++)
                if (chip_id == supported_chips[r].id)
                        return r;
        return 0;
index 1f7cc322e0533b87d2da41f574e849244f4f8d73..bf3983a00c67a5ce8b51292955f1a24064691dd9 100644 (file)
@@ -36,6 +36,7 @@
 #include <asm/io.h>
 #include <asm/dma-mapping.h>
 #include <asm/arch/clk.h>
+#include <asm-generic/errno.h>
 
 #include "macb.h"
 
@@ -397,9 +398,14 @@ static int macb_phy_init(struct macb_device *macb)
        }
 
 #ifdef CONFIG_PHYLIB
-       phydev->bus = macb->bus;
-       phydev->dev = netdev;
-       phydev->addr = macb->phy_addr;
+       /* need to consider other phy interface mode */
+       phydev = phy_connect(macb->bus, macb->phy_addr, netdev,
+                            PHY_INTERFACE_MODE_RGMII);
+       if (!phydev) {
+               printf("phy_connect failed\n");
+               return -ENODEV;
+       }
+
        phy_config(phydev);
 #endif
 
index 6b537d505ecb2bd8e293de1c2bc915dd919038a5..7c4b210b00111070b4b037cb944a4e1481969bd1 100644 (file)
@@ -543,7 +543,7 @@ int mcffec_initialize(bd_t * bis)
        u32 tmp = CONFIG_SYS_INIT_RAM_ADDR + 0x1000;
 #endif
 
-       for (i = 0; i < sizeof(fec_info) / sizeof(fec_info[0]); i++) {
+       for (i = 0; i < ARRAY_SIZE(fec_info); i++) {
 
                dev =
                    (struct eth_device *)memalign(CONFIG_SYS_CACHELINE_SIZE,
index 2f2269d5311e459d8734ef088590a4cf4d1f8d8f..17a780c854d8fbb8f6f393bd50083d37a92fa7d9 100644 (file)
@@ -170,7 +170,7 @@ int mii_discover_phy(struct eth_device *dev)
                        printf("PHY @ 0x%x pass %d\n", phyno, pass);
 #endif
 
-                       for (i = 0; (i < (sizeof(phyinfo) / sizeof(phy_info_t)))
+                       for (i = 0; (i < ARRAY_SIZE(phyinfo))
                                && (phyinfo[i].phyid != 0); i++) {
                                if (phyinfo[i].phyid == phytype) {
 #ifdef ET_DEBUG
index 39391580feda2e7c86b504f62787d28c8fa2a9cd..e6cd3e9ba07e23fb6f3e1893afd0cc9f828e1648 100644 (file)
@@ -228,7 +228,7 @@ int get_prom(u8* mac_addr, u8* base_addr)
 
        mdelay (10);
 
-       for (i = 0; i < sizeof (program_seq) / sizeof (program_seq[0]); i++)
+       for (i = 0; i < ARRAY_SIZE(program_seq); i++)
                n2k_outb (program_seq[i].value, program_seq[i].offset);
 
        PRINTK ("PROM:");
index 7185558955cf6c46a5c69bc8d8e6d2e1c4c0ce7c..05a9e053ff00c5234d38c55319012c4efcaf93cb 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index b93a8c8a31e5e548609784881cf1fcc8a1570821..8249737b0c2c2c80d0e587a964ae8cbd19a3d133 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 44328473e63cd75128c57147614b6633ce8b3981..dbe32e133c2d2103da4a11cfc8e864aed4ebe28a 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 6df3307e5dc8d8f3608d3cdc5b4908633bfcf3a5..c0b82d99b7f51fca63e390f6a1f70ea9baa2bd71 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 5540b33ae8a90b6a53aaf546246a4252bc9fea0f..65113448d27b7a732a4dd0efde1d28d8b78a0fdc 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index d282aa6725b850608e5b324698bc93a53deec64e..bfe606f507b326634309b95e73783e251e34ed9a 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index d46c47c2ef23fcf5e3838f23d3792560fd47da77..023cf50248707fb99330c4c5e3b646b5834199be 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 1facb89fd8587d668469b8f9a4e6c8d0b52fb085..c265d942e01dfe5da29e40d30e185ae80921a0b5 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 8b3c1d9a807916d09b33e228c771df7e23fb1edd..3d3050d5ce43e850d83e3a45cea690ae0be5140d 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 529063d1ffac957d1e3a76ede3110ecfad2ca90a..5b3be0b6c1dc21f982ca93cd58019f7d8ef68b4f 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index c5b680a74278ac2e3bf1c24452ac8428431be067..1f7624016afc7ac47bcae9cdff0812db956d12a4 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
@@ -144,7 +120,7 @@ void ixEthDBFeatureCapabilityScan(void)
 
                 /* find the traffic class definition index compatible with the current NPE A functionality ID */
                 for (trafficClassDefinitionIndex = 0 ;
-                    trafficClassDefinitionIndex < sizeof (ixEthDBTrafficClassDefinitions) / sizeof (ixEthDBTrafficClassDefinitions[0]);
+                    trafficClassDefinitionIndex < ARRAY_SIZE(ixEthDBTrafficClassDefinitions);
                     trafficClassDefinitionIndex++)
                 {
                     if (ixEthDBTrafficClassDefinitions[trafficClassDefinitionIndex][IX_ETH_DB_NPE_A_FUNCTIONALITY_ID_INDEX] == npeAImageId.functionalityId)
@@ -155,7 +131,7 @@ void ixEthDBFeatureCapabilityScan(void)
                 }
 
                 /* select the default case if we went over the array boundary */
-                if (trafficClassDefinitionIndex == sizeof (ixEthDBTrafficClassDefinitions) / sizeof (ixEthDBTrafficClassDefinitions[0]))
+                if (trafficClassDefinitionIndex == ARRAY_SIZE(ixEthDBTrafficClassDefinitions))
                 {
                     trafficClassDefinitionIndex = 0; /* the first record is the default case */
                 }
index 6fb5ab6acd1f844723229e3c5a4ef6ec01cce4a2..c0ae5624ff58a0805c745091e9e16d79cf709b6d 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index f1b18e6b48273f88c26b8158459643680efa17ce..9493a5b48bcbbe4d8211018ae51dc8c9e6815940 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 840674152f2cfe086dfa17f99740c6431d2676a0..1080d112de52e1193f962c904cb57cccbaa3d4df 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 133cbef8d640370b2a388a49b49532823dd6f723..78fce4bd9247593c2ccc0d78cb8eebf174682f70 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index d47ffec8b5a750410d290ebd56121915e00dc51b..30e1f61ab99bb0500fc5b648bb8601753b0784db 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 813e4ee6b5a9c073881af2a525fa7da289a95463..92af331a540e3c0c0048f2046d861512075862a3 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 912e60861341fa3db1869af7b9456341d6d9e676..d74f1215fdce60640925ca5f5426500f76dcce51 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 75fdebe483cf8c9d39cf9dc56bc4f0f87b4a31c6..4fd28da080d10c9b2a8af379d83ab11fe02449fb 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 029f7ac93c9fd4412c48611b97c111c23def1a5a..e12be0d884ab330d574c94d7b1667de9da224b24 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 24acc246b79ca642983d1f878785903dc7749d25..40d4470befbb23134d54b667d32fe2350daa4c47 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 522a30b1ddb6fb7c3c87930617f769d65edaae3c..483e348934c8c57225b4ded5886fd965267d600f 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 0a6043f3640567c2cce37cc88b17ae966a12fb20..44edd47f2f5742c12fb41353ebe2d32c1f8f3bb8 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index f8b439d9da5cdd47ff62bb1677eb11752984ae4e..27f3548ce0b075f5d5e8d94508932be577f81797 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index b6728e4a4469de82746970c35e79c3a22abc1d2a..0b6807d9d7dc92053543ff0f83f5000b0f68a013 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index bfeac877901f7f4fd5da249e04bb49703162f211..0e5c428323a91b8e06e8d2f8cdfb87999e509408 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 048448388216d687f16d30cc59cccb16f63ec3e8..52f73d7ad8bceb6017ffe45515f98c97401faee0 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index aaffeeb0ccb4401ca42e660bb8430c13ca6e41b7..8d94dfac3d3a744940b5b4f5b8884fea468862dd 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 18cac5020886a4c8e7c40e3f1c1f78cd17b729a0..db50d22d1be4e9ed767dc3e5bfbaf0bc6964d569 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 2870ff7da540131cff571eb96ab2026b0f5f7eaf..5adabd82fc4d00652a3ed1d59139c0f142cbdeef 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 092d480c652e6736cee4b798f3091b1dd5ebce6a..eaa9a21ad738c7972cccb1c23d2bcbd24d24fc47 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 57c8be30e51ded9e273443c72a82eccad0670116..273c3733f373f5060de055c04e7f77ad5a0dde5f 100644 (file)
  * @par
  * Copyright 2001-2005, Intel Corporation.
  * All rights reserved.
- * 
- * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
+ *
  * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 27bc9b730c9de92ff95bfc14c0f801644547e509..8b7038870a5c9c03982a823b84b395bf3773da43 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 8e083a63bfcb2ccc687ac9ae2cfe91b3ad863f9b..c539d090715eb6c4abbff031d24f6f6c938572ee 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index d37f9f93064f29c9e86f791b5f19c15ee8e1a3b0..082f677e62ea645b86a59d126f239cd964e36ee3 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index fa8db477afc6f1ce6477d870630b4b17e1e8eb51..f70ba05d9e1828b64535776624a2f26b5d0eaede 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 34df92bf79f63c6a5bab9156f321851e54d5e306..bf3acdc10c24b1c6f8b424cdf3585da18f9d9fd7 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
@@ -66,8 +42,7 @@ ixOsalMemMapFind (UINT32 requestedAddress,
 {
     UINT32 mapIndex;
 
-    UINT32 numMapElements =
-        sizeof (ixOsalGlobalMemoryMap) / sizeof (IxOsalMemoryMap);
+    UINT32 numMapElements = ARRAY_SIZE(ixOsalGlobalMemoryMap);
 
     for (mapIndex = 0; mapIndex < numMapElements; mapIndex++)
     {
index 3db1a70da996ab444b01ac11bcbc1830368b60f0..72d22e5882c5935d0019c0817352ab96730f9b3f 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 45a5c68b16e8fdfe21105fcffbb4f23c80550ab7..5fe368bdafdc932f100f1420d0ba7339cd2bc04b 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 672bec1189f61a9dc93200832848b0397d21791f..33de7f6e42008d66816d2f9575fd25de51e47cf5 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index e18c6c4c1e99f44ae0f5f7b908232c11dfc6ec98..a9aa36804b429e79bca289542cf838728b44013d 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index e6a4967fcdc52c0f97318c1b2b3e8b42e79aea54..b3caae19b10db89121fdcd9f125d079226f64942 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 738651322c8a6adcfa2aa07ab4251bb24d2625ad..69138ccded9b81495fb3cda76f1b01f566988ff1 100644 (file)
  * @par
  * Copyright 2001-2005, Intel Corporation.
  * All rights reserved.
- * 
- * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
+ *
  * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 25a3e8539e376344b18c1efd52f93042e1b69553..2baeaafeb1d32b8b20dcb0bfcbc7bf1e71c7e883 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 61ca96c977f4b22b99074c5e05db3ff835d39998..14687e61afb9692404fa4a679b3c39ba6183c1bf 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 8885736246d2860f6fe4ca57ba02a1e832eebcc8..13ee0f4f1184f01ff7657f051b71d21b43c725bf 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 26ec327a8e8cffabfb1270134fe6d5612eeb5501..b64bb2dd9099368d211089ad6c3eb8cee904a7dd 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index eae8b3f2731718d8906df9dbc713ce7ff7f1dafd..8be0cafc44fd4dc42413eefbee8a1d98483ba6f4 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 73c3be29abab93d41879dfdebf42baef4d2b37d4..7d74771c285893f549cb3311497b474f447a1aa4 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  *
index 8624c3328e377fb48f992d4a26bbbde88e19255b..6c8d12f3947a66330b301107dccc3c471a4faa17 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index ae7b2434c337c14202907c2b44ab4ca0a1ca6f16..291b66215155ab82b514343d3a68e710ba6a8d11 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 7b8734563a3a4874ccab9f34384b3947bf1f509f..1a696b0e66e9f6a889ce628b8f3303521bca423d 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index fcf523fca4a79660cff09f76a105f3e7a8b49a89..805b8c9bd655383bbfc1803d7c8bee0ba5179f57 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 45c7527de9d63acc909965fc0cc73c88aa296634..a62e72cc1b825720ac9097aaf10b9127dc6499e5 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index ff706c451de895c1ce978c933d048882ce3d3290..cc7e01066706a627513c24248e85789246d0397f 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  *
index 8b8e6b256c41378e7bcbd203f37b6bb1a90de3da..dce43d9a1978a494aef3995d00df9e4a297bc89e 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 93e9d98e76d6075f3a830ff9d8905d5fee9dfc41..4eafab25857e468d4eb8cd27ee0bd26c6d98e702 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 568d4a0fa4ff5ed366cbbfd42a94b7f5adc31077..aff30f00afff927d3d958c5121e7d3541603abe4 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index e5fd16e2fb1769debc4d3b0e0097e71b2bac20a8..65661a0dd5d3e4c06ec9b8fbf074735a47820436 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index eda3e303be0e78d7598189797765e2c279cb7d36..1348f4e3c8572f692578f468840631183f16f801 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index dfdfe1ae57d7b92295ba53a6f19a8eb52050f35f..9c4a6a4ec441a6e97f13eef75cd9307adaa6d232 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  *
index 1d8b24fdf66a5bf3eeab7a1a7f7c3376a980507f..91ab441b26e0fe74e8e8137eff113b82b57d569a 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 1d6b0bb20dee24c1bc45e65b300eb4b122b86402..b3576236ff4cb73f5cc36e53fbf4e8ca76fcf21c 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index ff18160c1fd13f27596b2faffb37352cc207962c..5907fd59e25f46bb05ac4fa3c87c6b63d369355e 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index c3acbdddef735f57b26460d0050075b82e0e2d12..9f5e4678329dd27b7575ad95f402570b20bc8aeb 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
@@ -106,7 +82,7 @@ static const IxEthDBPortDefinition ixEthDBPortDefinitions[] =
  * @def IX_ETH_DB_NUMBER_OF_PORTS
  * @brief number of supported ports 
  */
-#define IX_ETH_DB_NUMBER_OF_PORTS (sizeof (ixEthDBPortDefinitions) / sizeof (ixEthDBPortDefinitions[0]))
+#define IX_ETH_DB_NUMBER_OF_PORTS ARRAY_SIZE(ixEthDBPortDefinitions)
 
 /**
  * @def IX_ETH_DB_UNKNOWN_PORT
index 6d34889452d559b113cd02a0f9b53f3a57b48c4f..6276930dc7448240219fa46b4cc06c93622be298 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index d173d120823b89addb3d37e140df18b67e804ca6..ddc10a5789078e89b1e67a9230875c5f7fed8f66 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 93d3b790b2bac564768ef0ad3c6dbce22a990937..8d7de3d4ce2d7d1771fd405cf9ee0cc38d3ead54 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 104b65c1f0418c31a23d4ab852631e9b58b472f3..0c48a6971a93b8a16d693659b245eb481b063912 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 21bdedc5a76f217d01ab12015293cb3c67f168f4..20bfa76c363c39fb97f0e1b4a2de2ba8e45dcd70 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 1662a001396f1b250b0efdf1cf44f6150cef1f10..987b00b5620b5738021ba2c086f907a6816fcffc 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 52d5716f72dc9429aab9ad02148a91226d016f7a..da71c420238198493e626bc83f5607c78dedc42e 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 92c6b24b46eb58d24c4e7b9045e4baf957cd9b53..033154046fcbdb7192a3275245c62c8f2add0251 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 90669c27e78c71748fcccc66abf5c257f4ff0ea9..e145b4365f9039aca565b60e7dfa53c15d2dcb6f 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index f514c2e7d949fbbba37182dec1e167b2c81d199d..f87ee4b840d724fa42e02e5c18db1a77424a6f89 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 622f879a41de71c04640c4ed3a42d97b9acd8662..34dd3a441c4a9fa1ccc94674c8a3a0711077e9a8 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index e32906a63a7f14511cfab2258bfdbae4eff933ee..771fe74203d4982a9e78f8549fc1586cf0e3e2f4 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index f6821266774516bde47e917e4cb61b1182c37f66..f6c2e46de39122dbd565b2d37ec75f5364fd101d 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 876a438cec6a4bee07f7ae8ba693f3a798d149a3..bb1f4abdf9516817f536313d1c8db5ce9b8768ff 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index e25e532b1664bc6f591ae96f4c24c6e88bad992d..989db2c57e0788f21551d8fa5bf3275da091b43e 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 20ee38b0628ca26a99869913ee213b944009cc59..3a2bf9fa48ddd49a48cd9ebb8e96f8147846ca4b 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 8c8b9ab7f03dd9c64e638fbed2c762553fa63896..ca47f7f1080708d941f6b7e1f176a0d362cca8a3 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 68f34ef3573f5848a38b6f12d80ddc3375be6335..51ee9e289b48237028a0353d855a265831026b13 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 6416bedcbcfb0b0d00e16935b35ffddc858d6c7b..7b2afa0a3c25e039e2b51bece4984e915cd393b9 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 977cc94a7f2f949032325598945c591ed85026bc..0f060cc60412221a75d2743a347b9e66ba210435 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 40cd496c943592b840ea14db13afd6027670fa4b..b094fd99cbb81329f11ac3ff3ec8d3c84b77a598 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index dea8cafa259fca741e3cb54cb41897c02791a029..faf6638380e5e83cd347caaa541a8eaf52c43009 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 893d8030a101b449e8b46782b5c56cb4fd039aaa..01dcd7ad4fa05a1eb23ff86789925f1e4166ed24 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index a297a97d8bfd9a7f5a1eeb4d8aa4ed47c32ce91e..68341dca2f963e98efbece3f8b59b0bee0176439 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  *
index b7de712bc51f33a547f604ab5c1a41276e785a79..8b2ee964a2a5734aa3f9fa21f84a183a54513abe 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 4a983c79116559c520234d11f24bd3ce8dc5395d..1e39be2782fd1c7bb07067439b1c85cf0d62c507 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  * This module contains the implementation of the OS Services buffer pool
index 2c8592fe80e179e26591711e8bb1b1f1a2366aa2..2632cef75195d394c573bc33732535f3c740a600 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 218e140934bd2bec6bff4637c065c9a2b11e10a0..7b573a455509917db75569cdf53a8f93541da3d2 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 62e8a790b932995ee08fa05bdf93a7b3a2735890..d3b88500e49b34a10e9d793661cf0d1ef8a94578 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index d662cd3eeec289f85b3754467632e0bfa0d095d2..c5a6f685504ba14009179a919132c6c2a9293b89 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 0d6cd8ccefd6e54484626d9a534cb3f72a0482f1..383e30af567d4f8248b1132f12ee1dce0665bd95 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 58e994106579bfeed64b0ad2b165786902210c62..896db14ac6f159958ce5a7a62adf81fe1a40d1d3 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 4ce37c3f67216d185eb9810b3b597bb0ea77ca8a..8af108126b311d0db99068d8bcf208e16f910dc6 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 28c44af3273407ef6c2bb162cbe6f0f6db361da6..ac2631c9daa9769fcd03c71cd70b3122adb96a75 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 04a4f515aa9e6deb8ad52ea02710fe0996f3ef43..ac26bb6bf56aff45248ff8611702407948aa8cba 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index ea9f30731abc1bc81e233386b4d723609b4d745e..8e4a6fb5116be2a009a8e765e1cb733215f9ddca 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index be1e27255d1ccfc1352bfa1504fab94753f81991..cf50a7a64bc34af42dc86ea6a9e1df5ae291d19b 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 4cf80d31eb7a33d5bc057581e8f476e903a5c1a3..46df29d3d26cfddc136fc86dc3b0f88cfc021fc4 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index fe570e641752066a7e8c6c1042cc4b00f3bb3eb7..d9e20c0a55bdb81357ec8f075c3f6f26818af3b1 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 3881a3b6dac73001eb347e489b4a55ab8c3e2bf8..9b6cc72d9faa9187f7932fae5dc431625133e608 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 0ccff84aeedcc2b056861c787725e1a3915f6b5d..761779d885dad985c55a59a75cbc374d718b12be 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 634b494aece40478084b828a02b4086690ac44a4..c9deb544ce6fbcaeefc88580c06e367b4c69d5d6 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 497ed047101841c3416d8c4a69af10b742079d74..1f9e373cc7db4b20a16eae69b46146ca61ace922 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
  * @par
  * Copyright 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 
  *      The Regents of the University of California. All rights reserved.
- *
- * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
  * @par
  * -- End of Copyright Notice --
  */
index 684b52edb4b6cf276db8e50d47814e0f40a8cab0..376c4980cfc155fbedd477784ed0e7d9d3e4b575 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index d56e796393b355a56b1647558db3620d29bcc160..81449f19b349c1bb8ac7ea0256d3f7e2d7be226d 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 3b1c7394745e5121cf1fc92e3716755fe6d5d231..01de2c5e52962e53e54afef3a6ca8ab98d7f67a5 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index ea6d64d0006a410f41f18cc056307eab3d3d1365..7cb9c18c996e87bdaf6b5875c9c98314bef19e41 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 9e7fb87be5b4614087753c152d4c635914fdb04a..be7472a2ea300d50344017c3bd46d157671347a4 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index f89402620cb3462a72563489c6ef2216e1fc9f91..a1f4d21c1ba5e6bbf59711a5e2db7b33ea4d4372 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 8e46586ea0f515cf3f229c1d2f1662da272439f0..53b961673f577d2796e5f4c06bf61f0afcd05e54 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 44a94fb30fe93fa7dd6f994378e71fdd72bbd93c..104c733e3b84f9e47d2385407c464ba9f5d2d6c8 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 47ce3a2d80d69250a8d2ff87233ac6f27e80e800..e037823102e6c175dc0c1676a90843b5e2c3b5fe 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 06e71debfb2507987173b598eb006e073c3aaee2..aefa70f0b75e928325393124bba982254fe16c6c 100644 (file)
  * All rights reserved.
  *
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
@@ -91,12 +67,6 @@ typedef volatile UINT32 VUINT32;
  */
 typedef volatile INT32 VINT32;
 
-
-#ifndef NUMELEMS
-#define NUMELEMS(x) (sizeof(x) / sizeof((x)[0]))
-#endif
-
-
 /**
  * @ingroup IxOsalTypes
  *
index f2a73db8b97fdc49dcc9352e6bfe2b0c6f6b20cc..ec34df6f718eb27914f1e701fc9f4615fa9ce6b8 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 62fe1714f191b902a63ac23e3bb26747b8b11c41..4d44838cb1569d4a017e623366bd9ba56ae5a29d 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 7e4527a0556cf1492618beac820ccdd19c95f1d7..2781ec851c3aa0a33e08ae5f4d3440dbfe475002 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 03d7e0709220a3e6d1f8aae8c9cfcc21414c0441..23a45413bc008b96076e112cf5faf6cc4b8e90ec 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index b63c4a9ef88a5a454b882ddb7c3403a44b85c091..1b9cfd2e389e4c0027f33d76c9725e2f9b2ede91 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 0183596af54f741fd0e8f60bb3757ef4af6afa5d..1c5d674ffa11d32a8e97f62a4bed0670caad4e4f 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 71a3f8588e94fc3412e3d1287e9d1961b87ba201..b68a3f1327defce0752fae8cd741824d0f340b09 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 6b685b8a2859d916872775135db95e1901dc805f..941236a38e92b2d0aa4a6c76f3b48d6deeb1c139 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 8612670a17487b17518fa0bc7e58fdf55c0f17fc..363622fba61ba55d2e81e362ada968fc5a3aacd3 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index c9dae1ef0492b8da569eb6f0a3f384a034ffd41b..5480214e9f17d03ee56f381ab5ef336e8203f45d 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index b65d621e3bc1a986616f4ba96037ab71e3354436..28b924723f51cb51a759e3a6161fcd75b6e9a9b4 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 61d911b9add215c8c1ada45e2a1153a00054345c..b4a9def274eb8b37930567a0e276bc630cb70508 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 52c4c1cfa365d2ae98d508515461028ba5b910bb..f8bcffe8bdcaeb8f03348c35be257817feecb4db 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 669dd3ef286f559c0b09c8aa96cf70f69ac6193c..a865b933a32a4a206cb5d11251d1b4df41fc7314 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index c4c5a2d26776ec16730a30f0254aa7b080c97f2a..f936a50bb383453c2c5ad097bba73af1de11631b 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index 03a44441c510e5c89c7fa8369fdd3ae7bf3e4c61..ff23b22fe781ce95b2b7e2dca1a84a69819d2839 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
 */
index 27796ede842e2512337f202c615cdbc0c5f33e60..1769dcda45b2c352fbcec952fb014e0c5e6f89f8 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  */
index d32ace20b5ebe2bfbf0d3811f9cccb51ec9c2eb0..4c599996cf9fbf863ed669d21d54c19d87fd9de4 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  * = PRODUCT
index 53f5942f9790999c66686a1778299e9ae105801c..b4cf7602ae67fd426ff5577714170e3dc8de2a89 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  * = PRODUCT
index 8575096722ffc28f1adc9011a11fd9505a9b2682..e14d561c28157ad1fc679ea7c03b51447901f1c9 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  * = PRODUCT
index b59f7d08732c86744c47927b69ecfb410acc38ed..eaa2629b8d08117a0ac6bb4b36af9548f416b527 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  * = PRODUCT
index f7bb029d66fb02fe265b8faec1e855d07a35690f..0006b227c648ab66c3ad5537ebb536bc0fc42e64 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  * = PRODUCT
index fc7b1e993a9dbdf3a8454edefcd0fc55b1959fee..6945506049e6c8fca9bd3e4fcf6d4a6cc56d003a 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  * = PRODUCT
index 4387b2a0525fa027b41cb2972db9b9c476530819..def891b8620321950ad5f641522404b3465eaadc 100644 (file)
  * All rights reserved.
  * 
  * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * @par
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
+ * SPDX-License-Identifier:    BSD-3-Clause
  * @par
  * -- End of Copyright Notice --
  * = PRODUCT
index a04779ab463e085e0dc2e427aeab6c299bec878f..07fcb60e9d1e8a5f8412983e0cf6e85090e968c9 100644 (file)
@@ -1,25 +1,6 @@
-/*-----------------------------------------------------------------------------+
-  |   This source code is dual-licensed.  You may use it under the terms of the
-  |   GNU General Public License version 2, or under the license below.
-  |
-  |      This source code has been made available to you by IBM on an AS-IS
-  |      basis.  Anyone receiving this source is licensed under IBM
-  |      copyrights to use it in any way he or she deems fit, including
-  |      copying it, modifying it, compiling it, and redistributing it either
-  |      with or without modifications.  No license under IBM patents or
-  |      patent applications is to be implied by the copyright license.
-  |
-  |      Any user of this software should understand that IBM cannot provide
-  |      technical support for this software and will not be responsible for
-  |      any consequences resulting from the use of this software.
-  |
-  |      Any person who transfers this source code or any derivative work
-  |      must include the IBM copyright notice, this paragraph, and the
-  |      preceding two paragraphs in the transferred software.
-  |
-  |      COPYRIGHT   I B M   CORPORATION 1995
-  |      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-  +-----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ */
 /*-----------------------------------------------------------------------------+
   |
   |  File Name:         miiphy.c
index 606a103ce642c92fd5e45a38fda61bd46c622b95..ddbbc35e27e4e6e95ad9ce5ea084d6c42db2362c 100644 (file)
 
 #define PHY_AUTONEGOTIATE_TIMEOUT 5000
 
-/* RTL8211B PHY Status Register */
-#define MIIM_RTL8211B_PHY_STATUS       0x11
-#define MIIM_RTL8211B_PHYSTAT_SPEED    0xc000
-#define MIIM_RTL8211B_PHYSTAT_GBIT     0x8000
-#define MIIM_RTL8211B_PHYSTAT_100      0x4000
-#define MIIM_RTL8211B_PHYSTAT_DUPLEX   0x2000
-#define MIIM_RTL8211B_PHYSTAT_SPDDONE  0x0800
-#define MIIM_RTL8211B_PHYSTAT_LINK     0x0400
-
-
-/* RealTek RTL8211B */
-static int rtl8211b_config(struct phy_device *phydev)
+/* RTL8211x PHY Status Register */
+#define MIIM_RTL8211x_PHY_STATUS       0x11
+#define MIIM_RTL8211x_PHYSTAT_SPEED    0xc000
+#define MIIM_RTL8211x_PHYSTAT_GBIT     0x8000
+#define MIIM_RTL8211x_PHYSTAT_100      0x4000
+#define MIIM_RTL8211x_PHYSTAT_DUPLEX   0x2000
+#define MIIM_RTL8211x_PHYSTAT_SPDDONE  0x0800
+#define MIIM_RTL8211x_PHYSTAT_LINK     0x0400
+
+
+/* RealTek RTL8211x */
+static int rtl8211x_config(struct phy_device *phydev)
 {
        phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);
 
@@ -32,20 +32,20 @@ static int rtl8211b_config(struct phy_device *phydev)
        return 0;
 }
 
-static int rtl8211b_parse_status(struct phy_device *phydev)
+static int rtl8211x_parse_status(struct phy_device *phydev)
 {
        unsigned int speed;
        unsigned int mii_reg;
 
-       mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_RTL8211B_PHY_STATUS);
+       mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_RTL8211x_PHY_STATUS);
 
-       if (!(mii_reg & MIIM_RTL8211B_PHYSTAT_SPDDONE)) {
+       if (!(mii_reg & MIIM_RTL8211x_PHYSTAT_SPDDONE)) {
                int i = 0;
 
                /* in case of timeout ->link is cleared */
                phydev->link = 1;
                puts("Waiting for PHY realtime link");
-               while (!(mii_reg & MIIM_RTL8211B_PHYSTAT_SPDDONE)) {
+               while (!(mii_reg & MIIM_RTL8211x_PHYSTAT_SPDDONE)) {
                        /* Timeout reached ? */
                        if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
                                puts(" TIMEOUT !\n");
@@ -57,29 +57,29 @@ static int rtl8211b_parse_status(struct phy_device *phydev)
                                putc('.');
                        udelay(1000);   /* 1 ms */
                        mii_reg = phy_read(phydev, MDIO_DEVAD_NONE,
-                                       MIIM_RTL8211B_PHY_STATUS);
+                                       MIIM_RTL8211x_PHY_STATUS);
                }
                puts(" done\n");
                udelay(500000); /* another 500 ms (results in faster booting) */
        } else {
-               if (mii_reg & MIIM_RTL8211B_PHYSTAT_LINK)
+               if (mii_reg & MIIM_RTL8211x_PHYSTAT_LINK)
                        phydev->link = 1;
                else
                        phydev->link = 0;
        }
 
-       if (mii_reg & MIIM_RTL8211B_PHYSTAT_DUPLEX)
+       if (mii_reg & MIIM_RTL8211x_PHYSTAT_DUPLEX)
                phydev->duplex = DUPLEX_FULL;
        else
                phydev->duplex = DUPLEX_HALF;
 
-       speed = (mii_reg & MIIM_RTL8211B_PHYSTAT_SPEED);
+       speed = (mii_reg & MIIM_RTL8211x_PHYSTAT_SPEED);
 
        switch (speed) {
-       case MIIM_RTL8211B_PHYSTAT_GBIT:
+       case MIIM_RTL8211x_PHYSTAT_GBIT:
                phydev->speed = SPEED_1000;
                break;
-       case MIIM_RTL8211B_PHYSTAT_100:
+       case MIIM_RTL8211x_PHYSTAT_100:
                phydev->speed = SPEED_100;
                break;
        default:
@@ -89,28 +89,53 @@ static int rtl8211b_parse_status(struct phy_device *phydev)
        return 0;
 }
 
-static int rtl8211b_startup(struct phy_device *phydev)
+static int rtl8211x_startup(struct phy_device *phydev)
 {
        /* Read the Status (2x to make sure link is right) */
        genphy_update_link(phydev);
-       rtl8211b_parse_status(phydev);
+       rtl8211x_parse_status(phydev);
 
        return 0;
 }
 
+/* Support for RTL8211B PHY */
 static struct phy_driver RTL8211B_driver = {
        .name = "RealTek RTL8211B",
        .uid = 0x1cc910,
        .mask = 0xfffff0,
        .features = PHY_GBIT_FEATURES,
-       .config = &rtl8211b_config,
-       .startup = &rtl8211b_startup,
+       .config = &rtl8211x_config,
+       .startup = &rtl8211x_startup,
+       .shutdown = &genphy_shutdown,
+};
+
+/* Support for RTL8211E-VB-CG, RTL8211E-VL-CG and RTL8211EG-VB-CG PHYs */
+static struct phy_driver RTL8211E_driver = {
+       .name = "RealTek RTL8211E",
+       .uid = 0x1cc915,
+       .mask = 0xfffff0,
+       .features = PHY_GBIT_FEATURES,
+       .config = &rtl8211x_config,
+       .startup = &rtl8211x_startup,
+       .shutdown = &genphy_shutdown,
+};
+
+/* Support for RTL8211DN PHY */
+static struct phy_driver RTL8211DN_driver = {
+       .name = "RealTek RTL8211DN",
+       .uid = 0x1cc914,
+       .mask = 0xfffff0,
+       .features = PHY_GBIT_FEATURES,
+       .config = &rtl8211x_config,
+       .startup = &rtl8211x_startup,
        .shutdown = &genphy_shutdown,
 };
 
 int phy_realtek_init(void)
 {
        phy_register(&RTL8211B_driver);
+       phy_register(&RTL8211E_driver);
+       phy_register(&RTL8211DN_driver);
 
        return 0;
 }
index f64eb8fe04dd6df261ba33f83c0026a8bf41fdc6..5936f9bd7f31f18b2a53a369b2130eb7a86caa15 100644 (file)
@@ -62,7 +62,7 @@ static struct phy_driver lan8710_driver = {
        .name = "SMSC LAN8710/LAN8720",
        .uid = 0x0007c0f0,
        .mask = 0xffff0,
-       .features = PHY_GBIT_FEATURES,
+       .features = PHY_BASIC_FEATURES,
        .config = &genphy_config_aneg,
        .startup = &smsc_startup,
        .shutdown = &genphy_shutdown,
index 17ca961abf93f74e38a06c25bf1669164ba78bc0..d55db1a0b691a3243d84f7e817ee69771a1df36d 100644 (file)
@@ -28,12 +28,6 @@ DECLARE_GLOBAL_DATA_PTR;
 #include <asm/io.h>
 #include <asm/fsl_pci.h>
 
-/* Freescale-specific PCI config registers */
-#define FSL_PCI_PBFR           0x44
-#define FSL_PCIE_CAP_ID                0x4c
-#define FSL_PCIE_CFG_RDY       0x4b0
-#define FSL_PROG_IF_AGENT      0x1
-
 #ifndef CONFIG_SYS_PCI_MEMORY_BUS
 #define CONFIG_SYS_PCI_MEMORY_BUS 0
 #endif
@@ -424,6 +418,15 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
        udelay(1);
 #endif
        if (pcie_cap == PCI_CAP_ID_EXP) {
+               if (block_rev >= PEX_IP_BLK_REV_3_0) {
+#define PEX_CSR0_LTSSM_MASK    0xFC
+#define PEX_CSR0_LTSSM_SHIFT   2
+                       ltssm = (in_be32(&pci->pex_csr0)
+                               & PEX_CSR0_LTSSM_MASK) >> PEX_CSR0_LTSSM_SHIFT;
+                       enabled = (ltssm == 0x11) ? 1 : 0;
+               } else {
+               /* pci_hose_read_config_word(hose, dev, PCI_LTSSM, &ltssm); */
+               /* enabled = ltssm >= PCI_LTSSM_L0; */
                pci_hose_read_config_word(hose, dev, PCI_LTSSM, &ltssm);
                enabled = ltssm >= PCI_LTSSM_L0;
 
@@ -456,6 +459,7 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
                                        PCI_BASE_ADDRESS_0, pcicsrbar);
                }
 #endif
+       }
 
 #ifdef CONFIG_SYS_P4080_ERRATUM_PCIE_A003
                if (enabled == 0) {
@@ -564,6 +568,10 @@ int fsl_is_pci_agent(struct pci_controller *hose)
                u8 prog_if;
 
                pci_hose_read_config_byte(hose, dev, PCI_CLASS_PROG, &prog_if);
+               /* Programming Interface (PCI_CLASS_PROG)
+                * 0 == pci host or pcie root-complex,
+                * 1 == pci agent or pcie end-point
+                */
                return (prog_if == FSL_PROG_IF_AGENT);
        }
 }
index 66b3bab4625e4642ff46526b4f0c972eeb683d44..ac768708eadf22aacc4f2e6e15c66d07a5c248f5 100644 (file)
@@ -98,7 +98,7 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
 
 int pmic_probe(struct pmic *p)
 {
-       I2C_SET_BUS(p->bus);
+       i2c_set_bus_num(p->bus);
        debug("Bus: %d PMIC:%s probed!\n", p->bus, p->name);
        if (i2c_probe(pmic_i2c_addr)) {
                printf("Can't find PMIC:%s\n", p->name);
index 697f2bb4e8d31d0e072343fd2b026491790e96c4..4c45bfa363f14af03384102d3a5b373e146dbe44 100644 (file)
@@ -38,6 +38,7 @@ COBJS-$(CONFIG_SCIF_CONSOLE) += serial_sh.o
 COBJS-$(CONFIG_ZYNQ_SERIAL) += serial_zynq.o
 COBJS-$(CONFIG_BFIN_SERIAL) += serial_bfin.o
 COBJS-$(CONFIG_FSL_LPUART) += serial_lpuart.o
+COBJS-$(CONFIG_MXS_AUART) += mxs_auart.o
 
 ifndef CONFIG_SPL_BUILD
 COBJS-$(CONFIG_USB_TTY) += usbtty.o
index c217c88e59aec10c47bb547520d5eb7a1e61906c..5dfb02f47045a173ea83816893e7474881d5d5d9 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #include <common.h>
-#include <stdio_dev.h>
+#include <serial.h>
 
 #if defined(CONFIG_CPU_V6)
 /*
 
 #define TIMEOUT_COUNT 0x4000000
 
-int arm_dcc_init(void)
+static int arm_dcc_init(void)
 {
        return 0;
 }
 
-int arm_dcc_getc(void)
+static int arm_dcc_getc(void)
 {
        int ch;
        register unsigned int reg;
@@ -107,7 +107,7 @@ int arm_dcc_getc(void)
        return ch;
 }
 
-void arm_dcc_putc(char ch)
+static void arm_dcc_putc(char ch)
 {
        register unsigned int reg;
        unsigned int timeout_count = TIMEOUT_COUNT;
@@ -123,13 +123,7 @@ void arm_dcc_putc(char ch)
                write_dcc(ch);
 }
 
-void arm_dcc_puts(const char *s)
-{
-       while (*s)
-               arm_dcc_putc(*s++);
-}
-
-int arm_dcc_tstc(void)
+static int arm_dcc_tstc(void)
 {
        register unsigned int reg;
 
@@ -138,22 +132,27 @@ int arm_dcc_tstc(void)
        return reg;
 }
 
-static struct stdio_dev arm_dcc_dev;
+static void arm_dcc_setbrg(void)
+{
+}
 
-int drv_arm_dcc_init(void)
+static struct serial_device arm_dcc_drv = {
+       .name   = "arm_dcc",
+       .start  = arm_dcc_init,
+       .stop   = NULL,
+       .setbrg = arm_dcc_setbrg,
+       .putc   = arm_dcc_putc,
+       .puts   = default_serial_puts,
+       .getc   = arm_dcc_getc,
+       .tstc   = arm_dcc_tstc,
+};
+
+void arm_dcc_initialize(void)
 {
-       strcpy(arm_dcc_dev.name, "dcc");
-       arm_dcc_dev.ext = 0;    /* No extensions */
-       arm_dcc_dev.flags = DEV_FLAGS_INPUT | DEV_FLAGS_OUTPUT;
-       arm_dcc_dev.tstc = arm_dcc_tstc;        /* 'tstc' function */
-       arm_dcc_dev.getc = arm_dcc_getc;        /* 'getc' function */
-       arm_dcc_dev.putc = arm_dcc_putc;        /* 'putc' function */
-       arm_dcc_dev.puts = arm_dcc_puts;        /* 'puts' function */
-
-       return stdio_register(&arm_dcc_dev);
+       serial_register(&arm_dcc_drv);
 }
 
 __weak struct serial_device *default_serial_console(void)
 {
-       return NULL;
+       return &arm_dcc_drv;
 }
diff --git a/drivers/serial/mxs_auart.c b/drivers/serial/mxs_auart.c
new file mode 100644 (file)
index 0000000..7cfe5bc
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Freescale i.MX23/i.MX28 AUART driver
+ *
+ * Copyright (C) 2013 Andreas Wass <andreas.wass@dalelven.com>
+ *
+ * Based on the MXC serial driver:
+ *
+ * (c) 2007 Sascha Hauer <s.hauer@pengutronix.de>
+ *
+ * Further based on the Linux mxs-auart.c driver:
+ *
+ * Freescale STMP37XX/STMP38X Application UART drkiver
+ * Copyright 2008-2010 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+#include <common.h>
+#include <asm/io.h>
+#include <serial.h>
+#include <linux/compiler.h>
+#include <asm/arch/regs-base.h>
+#include <asm/arch/regs-uartapp.h>
+#include <asm/arch/sys_proto.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifndef CONFIG_MXS_AUART_BASE
+#error "CONFIG_MXS_AUART_BASE must be set to the base UART to use"
+#endif
+
+/* AUART clock always supplied by XTAL and always 24MHz */
+#define MXS_AUART_CLK 24000000
+
+static struct mxs_uartapp_regs *get_uartapp_registers(void)
+{
+       return (struct mxs_uartapp_regs *)CONFIG_MXS_AUART_BASE;
+}
+
+/**
+ * Sets the baud rate and settings.
+ * The settings are: 8 data bits, no parit and 1 stop bit.
+ */
+void mxs_auart_setbrg(void)
+{
+       u32 div;
+       u32 linectrl = 0;
+       struct mxs_uartapp_regs *regs = get_uartapp_registers();
+
+       if (!gd->baudrate)
+               gd->baudrate = CONFIG_BAUDRATE;
+
+       /*
+        * From i.MX28 datasheet:
+        * div is calculated by calculating UARTCLK*32/baudrate, rounded to int
+        * div must be between 0xEC and 0x003FFFC0 inclusive
+        * Lowest 6 bits of div goes in BAUD_DIVFRAC part of LINECTRL register
+        * Next 16 bits goes in BAUD_DIVINT part of LINECTRL register
+        */
+       div = (MXS_AUART_CLK * 32) / gd->baudrate;
+       if (div < 0xEC || div > 0x003FFFC0)
+               return;
+
+       linectrl |= ((div & UARTAPP_LINECTRL_EXTRACT_BAUD_DIVFRAC_MASK) <<
+               UARTAPP_LINECTRL_BAUD_DIVFRAC_OFFSET) &
+               UARTAPP_LINECTRL_BAUD_DIVFRAC_MASK;
+       linectrl |= ((div >> UARTAPP_LINECTRL_EXTRACT_BAUD_DIVINT_OFFSET) <<
+               UARTAPP_LINECTRL_BAUD_DIVINT_OFFSET) &
+               UARTAPP_LINECTRL_BAUD_DIVINT_MASK;
+
+       /* Word length: 8 bits */
+       linectrl |= UARTAPP_LINECTRL_WLEN_8BITS;
+
+       /* Enable FIFOs. */
+       linectrl |= UARTAPP_LINECTRL_FEN_MASK;
+
+       /* Write above settings, no parity, 1 stop bit */
+       writel(linectrl, &regs->hw_uartapp_linectrl);
+}
+
+int mxs_auart_init(void)
+{
+       struct mxs_uartapp_regs *regs = get_uartapp_registers();
+       /* Reset everything */
+       mxs_reset_block(&regs->hw_uartapp_ctrl0_reg);
+       /* Disable interrupts */
+       writel(0, &regs->hw_uartapp_intr);
+       /* Set baud rate and settings */
+       serial_setbrg();
+       /* Disable RTS and CTS, ignore LINECTRL2 register */
+       writel(UARTAPP_CTRL2_RTSEN_MASK |
+                       UARTAPP_CTRL2_CTSEN_MASK |
+                       UARTAPP_CTRL2_USE_LCR2_MASK,
+                       &regs->hw_uartapp_ctrl2_clr);
+       /* Enable receiver, transmitter and UART */
+       writel(UARTAPP_CTRL2_RXE_MASK |
+                       UARTAPP_CTRL2_TXE_MASK |
+                       UARTAPP_CTRL2_UARTEN_MASK,
+                       &regs->hw_uartapp_ctrl2_set);
+       return 0;
+}
+
+void mxs_auart_putc(const char c)
+{
+       struct mxs_uartapp_regs *regs = get_uartapp_registers();
+       /* Wait in loop while the transmit FIFO is full */
+       while (readl(&regs->hw_uartapp_stat) & UARTAPP_STAT_TXFF_MASK)
+               ;
+
+       writel(c, &regs->hw_uartapp_data);
+
+       if (c == '\n')
+               mxs_auart_putc('\r');
+}
+
+int mxs_auart_tstc(void)
+{
+       struct mxs_uartapp_regs *regs = get_uartapp_registers();
+       /* Checks if receive FIFO is empty */
+       return !(readl(&regs->hw_uartapp_stat) & UARTAPP_STAT_RXFE_MASK);
+}
+
+int mxs_auart_getc(void)
+{
+       struct mxs_uartapp_regs *regs = get_uartapp_registers();
+       /* Wait until a character is available to read */
+       while (!mxs_auart_tstc())
+               ;
+       /* Read the character from the data register */
+       return readl(&regs->hw_uartapp_data) & 0xFF;
+}
+
+static struct serial_device mxs_auart_drv = {
+       .name = "mxs_auart_serial",
+       .start = mxs_auart_init,
+       .stop = NULL,
+       .setbrg = mxs_auart_setbrg,
+       .putc = mxs_auart_putc,
+       .puts = default_serial_puts,
+       .getc = mxs_auart_getc,
+       .tstc = mxs_auart_tstc,
+};
+
+void mxs_auart_initialize(void)
+{
+       serial_register(&mxs_auart_drv);
+}
+
+__weak struct serial_device *default_serial_console(void)
+{
+       return &mxs_auart_drv;
+}
index 67301355d7dcba85d1a7c2608c1d1814c4e6e687..35dc61e020c04b5e0efc37df211e28fff8f2a67d 100644 (file)
@@ -159,6 +159,8 @@ serial_initfunc(pl01x_serial_initialize);
 serial_initfunc(s3c44b0_serial_initialize);
 serial_initfunc(sa1100_serial_initialize);
 serial_initfunc(sh_serial_initialize);
+serial_initfunc(arm_dcc_initialize);
+serial_initfunc(mxs_auart_initialize);
 
 /**
  * serial_register() - Register serial driver with serial driver core
@@ -251,6 +253,8 @@ void serial_initialize(void)
        s3c44b0_serial_initialize();
        sa1100_serial_initialize();
        sh_serial_initialize();
+       arm_dcc_initialize();
+       mxs_auart_initialize();
 
        serial_assign(default_serial_console()->name);
 }
index bbabb325f83a2d777d5bd5b1e50ceba5305f231b..e243a8e3b203fe2106beae5b7b3b957629acfacb 100644 (file)
@@ -22,6 +22,8 @@
 #include <usb/pxa27x_udc.h>
 #elif defined(CONFIG_DW_UDC)
 #include <usb/designware_udc.h>
+#elif defined(CONFIG_MV_UDC)
+#include <usb/mv_udc.h>
 #endif
 
 #include <version.h>
index 019132e853b76fa7379c1fc8135ae20e0228b2ba..91d24cea58da297d047121647ee39705583d513f 100644 (file)
@@ -39,6 +39,7 @@ COBJS-$(CONFIG_TEGRA20_SFLASH) += tegra20_sflash.o
 COBJS-$(CONFIG_TEGRA20_SLINK) += tegra20_slink.o
 COBJS-$(CONFIG_TEGRA114_SPI) += tegra114_spi.o
 COBJS-$(CONFIG_XILINX_SPI) += xilinx_spi.o
+COBJS-$(CONFIG_ZYNQ_SPI) += zynq_spi.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
index a9a4d92c3e719b0a1f215393ac7fc22de6cae8cf..f7192c23401a11b0ffa9605300cda5ed6e508914 100644 (file)
@@ -144,10 +144,8 @@ void spi_set_speed(struct spi_slave *slave, uint hz)
        u32 baud;
 
        sclk = get_sclk();
-       baud = sclk / (2 * hz);
        /* baud should be rounded up */
-       if (sclk % (2 * hz))
-               baud += 1;
+       baud = DIV_ROUND_UP(sclk, 2 * hz);
        if (baud < 2)
                baud = 2;
        else if (baud > (u16)-1)
index fc0a58be2998381198e4b9411a42a20d9cda6f44..7c845827627bc2a276e326f7119fab2c485fffc9 100644 (file)
@@ -75,7 +75,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
 
        /* Set eSPI BRG clock source */
        get_sys_info(&sysinfo);
-       spibrg = sysinfo.freqSystemBus / 2;
+       spibrg = sysinfo.freq_systembus / 2;
        fsl->div16 = 0;
        if ((spibrg / max_hz) > 32) {
                fsl->div16 = ESPI_CSMODE_DIV16;
@@ -221,15 +221,13 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *data_out,
              slave->bus, slave->cs, *(uint *) dout,
              dout, *(uint *) din, din, len);
 
-       num_chunks = data_len / max_tran_len +
-               (data_len % max_tran_len ? 1 : 0);
+       num_chunks = DIV_ROUND_UP(data_len, max_tran_len);
        while (num_chunks--) {
                if (data_in)
                        din = buffer + rx_offset;
                dout = buffer;
                tran_len = min(data_len , max_tran_len);
-               num_blks = (tran_len + cmd_len) / 4 +
-                       ((tran_len + cmd_len) % 4 ? 1 : 0);
+               num_blks = DIV_ROUND_UP(tran_len + cmd_len, 4);
                num_bytes = (tran_len + cmd_len) % 4;
                fsl->data_len = tran_len + cmd_len;
                spi_cs_activate(slave);
index bbfc259e47382e8c690289bcb445deb0beaf6977..348361a7fd078d1cbcc5f1a0f926faa2a7173c03 100644 (file)
@@ -77,7 +77,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
 {
        volatile spi8xxx_t *spi = &((immap_t *) (CONFIG_SYS_IMMR))->spi;
        unsigned int tmpdout, tmpdin, event;
-       int numBlks = bitlen / 32 + (bitlen % 32 ? 1 : 0);
+       int numBlks = DIV_ROUND_UP(bitlen, 32);
        int tm, isRead = 0;
        unsigned char charSize = 32;
 
diff --git a/drivers/spi/zynq_spi.c b/drivers/spi/zynq_spi.c
new file mode 100644 (file)
index 0000000..5da8759
--- /dev/null
@@ -0,0 +1,280 @@
+/*
+ * (C) Copyright 2013 Inc.
+ *
+ * Xilinx Zynq PS SPI controller driver (master mode only)
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <config.h>
+#include <common.h>
+#include <malloc.h>
+#include <spi.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+
+/* zynq spi register bit masks ZYNQ_SPI_<REG>_<BIT>_MASK */
+#define ZYNQ_SPI_CR_MSA_MASK           (1 << 15)       /* Manual start enb */
+#define ZYNQ_SPI_CR_MCS_MASK           (1 << 14)       /* Manual chip select */
+#define ZYNQ_SPI_CR_CS_MASK            (0xF << 10)     /* Chip select */
+#define ZYNQ_SPI_CR_BRD_MASK           (0x7 << 3)      /* Baud rate div */
+#define ZYNQ_SPI_CR_CPHA_MASK          (1 << 2)        /* Clock phase */
+#define ZYNQ_SPI_CR_CPOL_MASK          (1 << 1)        /* Clock polarity */
+#define ZYNQ_SPI_CR_MSTREN_MASK                (1 << 0)        /* Mode select */
+#define ZYNQ_SPI_IXR_RXNEMPTY_MASK     (1 << 4)        /* RX_FIFO_not_empty */
+#define ZYNQ_SPI_IXR_TXOW_MASK         (1 << 2)        /* TX_FIFO_not_full */
+#define ZYNQ_SPI_IXR_ALL_MASK          0x7F            /* All IXR bits */
+#define ZYNQ_SPI_ENR_SPI_EN_MASK       (1 << 0)        /* SPI Enable */
+
+#define ZYNQ_SPI_FIFO_DEPTH            128
+#ifndef CONFIG_SYS_ZYNQ_SPI_WAIT
+#define CONFIG_SYS_ZYNQ_SPI_WAIT       (CONFIG_SYS_HZ/100)     /* 10 ms */
+#endif
+
+/* zynq spi register set */
+struct zynq_spi_regs {
+       u32 cr;         /* 0x00 */
+       u32 isr;        /* 0x04 */
+       u32 ier;        /* 0x08 */
+       u32 idr;        /* 0x0C */
+       u32 imr;        /* 0x10 */
+       u32 enr;        /* 0x14 */
+       u32 dr;         /* 0x18 */
+       u32 txdr;       /* 0x1C */
+       u32 rxdr;       /* 0x20 */
+};
+
+/* zynq spi slave */
+struct zynq_spi_slave {
+       struct spi_slave slave;
+       struct zynq_spi_regs *base;
+       u8 mode;
+       u8 fifo_depth;
+       u32 speed_hz;
+       u32 input_hz;
+       u32 req_hz;
+};
+
+static inline struct zynq_spi_slave *to_zynq_spi_slave(struct spi_slave *slave)
+{
+       return container_of(slave, struct zynq_spi_slave, slave);
+}
+
+static inline struct zynq_spi_regs *get_zynq_spi_base(int dev)
+{
+       if (dev)
+               return (struct zynq_spi_regs *)ZYNQ_SPI_BASEADDR1;
+       else
+               return (struct zynq_spi_regs *)ZYNQ_SPI_BASEADDR0;
+}
+
+static void zynq_spi_init_hw(struct zynq_spi_slave *zslave)
+{
+       u32 confr;
+
+       /* Disable SPI */
+       writel(~ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr);
+
+       /* Disable Interrupts */
+       writel(ZYNQ_SPI_IXR_ALL_MASK, &zslave->base->idr);
+
+       /* Clear RX FIFO */
+       while (readl(&zslave->base->isr) &
+                       ZYNQ_SPI_IXR_RXNEMPTY_MASK)
+               readl(&zslave->base->rxdr);
+
+       /* Clear Interrupts */
+       writel(ZYNQ_SPI_IXR_ALL_MASK, &zslave->base->isr);
+
+       /* Manual slave select and Auto start */
+       confr = ZYNQ_SPI_CR_MCS_MASK | ZYNQ_SPI_CR_CS_MASK |
+               ZYNQ_SPI_CR_MSTREN_MASK;
+       confr &= ~ZYNQ_SPI_CR_MSA_MASK;
+       writel(confr, &zslave->base->cr);
+
+       /* Enable SPI */
+       writel(ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr);
+}
+
+int spi_cs_is_valid(unsigned int bus, unsigned int cs)
+{
+       /* 2 bus with 3 chipselect */
+       return bus < 2 && cs < 3;
+}
+
+void spi_cs_activate(struct spi_slave *slave)
+{
+       struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave);
+       u32 cr;
+
+       debug("spi_cs_activate: 0x%08x\n", (u32)slave);
+
+       clrbits_le32(&zslave->base->cr, ZYNQ_SPI_CR_CS_MASK);
+       cr = readl(&zslave->base->cr);
+       /*
+        * CS cal logic: CS[13:10]
+        * xxx0 - cs0
+        * xx01 - cs1
+        * x011 - cs2
+        */
+       cr |= (~(0x1 << slave->cs) << 10) & ZYNQ_SPI_CR_CS_MASK;
+       writel(cr, &zslave->base->cr);
+}
+
+void spi_cs_deactivate(struct spi_slave *slave)
+{
+       struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave);
+
+       debug("spi_cs_deactivate: 0x%08x\n", (u32)slave);
+
+       setbits_le32(&zslave->base->cr, ZYNQ_SPI_CR_CS_MASK);
+}
+
+void spi_init()
+{
+       /* nothing to do */
+}
+
+struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
+               unsigned int max_hz, unsigned int mode)
+{
+       struct zynq_spi_slave *zslave;
+
+       if (!spi_cs_is_valid(bus, cs))
+               return NULL;
+
+       zslave = spi_alloc_slave(struct zynq_spi_slave, bus, cs);
+       if (!zslave) {
+               printf("SPI_error: Fail to allocate zynq_spi_slave\n");
+               return NULL;
+       }
+
+       zslave->base = get_zynq_spi_base(bus);
+       zslave->mode = mode;
+       zslave->fifo_depth = ZYNQ_SPI_FIFO_DEPTH;
+       zslave->input_hz = 166666700;
+       zslave->speed_hz = zslave->input_hz / 2;
+       zslave->req_hz = max_hz;
+
+       /* init the zynq spi hw */
+       zynq_spi_init_hw(zslave);
+
+       return &zslave->slave;
+}
+
+void spi_free_slave(struct spi_slave *slave)
+{
+       struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave);
+
+       debug("spi_free_slave: 0x%08x\n", (u32)slave);
+       free(zslave);
+}
+
+int spi_claim_bus(struct spi_slave *slave)
+{
+       struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave);
+       u32 confr = 0;
+       u8 baud_rate_val = 0;
+
+       writel(~ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr);
+
+       /* Set the SPI Clock phase and polarities */
+       confr = readl(&zslave->base->cr);
+       confr &= ~(ZYNQ_SPI_CR_CPHA_MASK | ZYNQ_SPI_CR_CPOL_MASK);
+       if (zslave->mode & SPI_CPHA)
+               confr |= ZYNQ_SPI_CR_CPHA_MASK;
+       if (zslave->mode & SPI_CPOL)
+               confr |= ZYNQ_SPI_CR_CPOL_MASK;
+
+       /* Set the clock frequency */
+       if (zslave->req_hz == 0) {
+               /* Set baudrate x8, if the req_hz is 0 */
+               baud_rate_val = 0x2;
+       } else if (zslave->speed_hz != zslave->req_hz) {
+               while ((baud_rate_val < 8) &&
+                               ((zslave->input_hz /
+                               (2 << baud_rate_val)) > zslave->req_hz))
+                       baud_rate_val++;
+               zslave->speed_hz = zslave->req_hz / (2 << baud_rate_val);
+       }
+       confr &= ~ZYNQ_SPI_CR_BRD_MASK;
+       confr |= (baud_rate_val << 3);
+       writel(confr, &zslave->base->cr);
+
+       writel(ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr);
+
+       return 0;
+}
+
+void spi_release_bus(struct spi_slave *slave)
+{
+       struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave);
+
+       debug("spi_release_bus: 0x%08x\n", (u32)slave);
+       writel(~ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr);
+}
+
+int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
+               void *din, unsigned long flags)
+{
+       struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave);
+       u32 len = bitlen / 8;
+       u32 tx_len = len, rx_len = len, tx_tvl;
+       const u8 *tx_buf = dout;
+       u8 *rx_buf = din, buf;
+       u32 ts, status;
+
+       debug("spi_xfer: bus:%i cs:%i bitlen:%i len:%i flags:%lx\n",
+             slave->bus, slave->cs, bitlen, len, flags);
+
+       if (bitlen == 0)
+               return -1;
+
+       if (bitlen % 8) {
+               debug("spi_xfer: Non byte aligned SPI transfer\n");
+               return -1;
+       }
+
+       if (flags & SPI_XFER_BEGIN)
+               spi_cs_activate(slave);
+
+       while (rx_len > 0) {
+               /* Write the data into TX FIFO - tx threshold is fifo_depth */
+               tx_tvl = 0;
+               while ((tx_tvl < zslave->fifo_depth) && tx_len) {
+                       if (tx_buf)
+                               buf = *tx_buf++;
+                       else
+                               buf = 0;
+                       writel(buf, &zslave->base->txdr);
+                       tx_len--;
+                       tx_tvl++;
+               }
+
+               /* Check TX FIFO completion */
+               ts = get_timer(0);
+               status = readl(&zslave->base->isr);
+               while (!(status & ZYNQ_SPI_IXR_TXOW_MASK)) {
+                       if (get_timer(ts) > CONFIG_SYS_ZYNQ_SPI_WAIT) {
+                               printf("spi_xfer: Timeout! TX FIFO not full\n");
+                               return -1;
+                       }
+                       status = readl(&zslave->base->isr);
+               }
+
+               /* Read the data from RX FIFO */
+               status = readl(&zslave->base->isr);
+               while (status & ZYNQ_SPI_IXR_RXNEMPTY_MASK) {
+                       buf = readl(&zslave->base->rxdr);
+                       if (rx_buf)
+                               *rx_buf++ = buf;
+                       status = readl(&zslave->base->isr);
+                       rx_len--;
+               }
+       }
+
+       if (flags & SPI_XFER_END)
+               spi_cs_deactivate(slave);
+
+       return 0;
+}
index b04e91cfcbae45ca71bb5f86f88e1df468930b84..15fd9a9f785de9ce20a8b185e68d910fde83598c 100644 (file)
@@ -784,6 +784,7 @@ static const struct smsc95xx_dongle smsc95xx_dongles[] = {
        { 0x0424, 0xec00 },     /* LAN9512/LAN9514 Ethernet */
        { 0x0424, 0x9500 },     /* LAN9500 Ethernet */
        { 0x0424, 0x9730 },     /* LAN9730 Ethernet (HSIC) */
+       { 0x0424, 0x9900 },     /* SMSC9500 USB Ethernet Device (SAL10) */
        { 0x0000, 0x0000 }      /* END - Do not remove */
 };
 
index 5321a689d4dc3905651fade571dd27fcb8b5dc2a..37d04a19285e605a6d4e34ae9b54b989eca28891 100644 (file)
@@ -312,6 +312,8 @@ static int state_dfu_idle(struct f_dfu *f_dfu,
                        DFU_STATE_dfuMANIFEST_WAIT_RST;
                to_runtime_mode(f_dfu);
                f_dfu->dfu_state = DFU_STATE_appIDLE;
+
+               dfu_trigger_reset();
                break;
        default:
                f_dfu->dfu_state = DFU_STATE_dfuERROR;
index 5b348d7a6ef2a6b50bd59b55e165279d9f53c778..b34068a0bb3862f508c2822078f5beb5850f6ed3 100644 (file)
@@ -6,35 +6,7 @@
  *                    Author: Michal Nazarewicz <m.nazarewicz@samsung.com>
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions, and the following disclaimer,
- *    without modification.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The names of the above-listed copyright holders may not be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * ALTERNATIVELY, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") as published by the Free Software
- * Foundation, either version 2 of that License or (at your option) any
- * later version.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier: GPL-2.0+   BSD-3-Clause
  */
 
 
index cbfcb2d0748435bf4d9e74e55b46b8c24dba7408..a3e05a872a7bdd157ddcad653a32cc9f97f391d5 100644 (file)
 
 #define STRING_MANUFACTURER 25
 #define STRING_PRODUCT 2
+/* Index of String Descriptor describing this configuration */
 #define STRING_USBDOWN 2
-#define CONFIG_USBDOWNLOADER 2
+/* Number of supported configurations */
+#define CONFIGURATION_NUMBER 1
 
 #define DRIVER_VERSION         "usb_dnl 2.0"
 
@@ -54,11 +56,14 @@ static struct usb_device_descriptor device_desc = {
        .bNumConfigurations = 1,
 };
 
-/* static strings, in UTF-8 */
+/*
+ * static strings, in UTF-8
+ * IDs for those strings are assigned dynamically at g_dnl_bind()
+ */
 static struct usb_string g_dnl_string_defs[] = {
-       { 0, manufacturer, },
-       { 1, product, },
-       {  }            /* end of list */
+       {.s = manufacturer},
+       {.s = product},
+       {             /* end of list */
 };
 
 static struct usb_gadget_strings g_dnl_string_tab = {
@@ -104,7 +109,7 @@ static int g_dnl_config_register(struct usb_composite_dev *cdev)
        static struct usb_configuration config = {
                .label = "usb_dnload",
                .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
-               .bConfigurationValue =  CONFIG_USBDOWNLOADER,
+               .bConfigurationValue =  CONFIGURATION_NUMBER,
                .iConfiguration =       STRING_USBDOWN,
 
                .bind = g_dnl_do_config,
index f038747e63e0d5175bb58ee495b7e419140d8c98..aa54b8547e73d2945a9b5d8df5486c87ec73f3bc 100644 (file)
 #define        gadget_is_m66592(g)     0
 #endif
 
-#ifdef CONFIG_USB_GADGET_MV
+#ifdef CONFIG_MV_UDC
 #define gadget_is_mv(g)        (!strcmp("mv_udc", (g)->name))
 #else
 #define gadget_is_mv(g)        0
index 7fa5288803809653a12fb5308edafaf15b0405e4..7574e31a8f3e8d18fbf7cc0ce7c838f824f656a7 100644 (file)
 #include <linux/types.h>
 #include <usb/mv_udc.h>
 
+#if CONFIG_USB_MAX_CONTROLLER_COUNT > 1
+#error This driver only supports one single controller.
+#endif
+
+/*
+ * Check if the system has too long cachelines. If the cachelines are
+ * longer then 128b, the driver will not be able flush/invalidate data
+ * cache over separate QH entries. We use 128b because one QH entry is
+ * 64b long and there are always two QH list entries for each endpoint.
+ */
+#if ARCH_DMA_MINALIGN > 128
+#error This driver can not work on systems with caches longer than 128b
+#endif
+
 #ifndef DEBUG
 #define DBG(x...) do {} while (0)
 #else
@@ -39,8 +53,6 @@ static const char *reqname(unsigned r)
 }
 #endif
 
-#define PAGE_SIZE      4096
-#define QH_MAXNUM      32
 static struct usb_endpoint_descriptor ep0_out_desc = {
        .bLength = sizeof(struct usb_endpoint_descriptor),
        .bDescriptorType = USB_DT_ENDPOINT,
@@ -55,8 +67,6 @@ static struct usb_endpoint_descriptor ep0_in_desc = {
        .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
 };
 
-struct ept_queue_head *epts;
-struct ept_queue_item *items[2 * NUM_ENDPOINTS];
 static int mv_pullup(struct usb_gadget *gadget, int is_on);
 static int mv_ep_enable(struct usb_ep *ep,
                const struct usb_endpoint_descriptor *desc);
@@ -79,14 +89,115 @@ static struct usb_ep_ops mv_ep_ops = {
        .free_request   = mv_ep_free_request,
 };
 
-static struct mv_ep ep[2 * NUM_ENDPOINTS];
+/* Init values for USB endpoints. */
+static const struct usb_ep mv_ep_init[2] = {
+       [0] = { /* EP 0 */
+               .maxpacket      = 64,
+               .name           = "ep0",
+               .ops            = &mv_ep_ops,
+       },
+       [1] = { /* EP 1..n */
+               .maxpacket      = 512,
+               .name           = "ep-",
+               .ops            = &mv_ep_ops,
+       },
+};
+
 static struct mv_drv controller = {
-       .gadget = {
-               .ep0 = &ep[0].ep,
-               .name = "mv_udc",
+       .gadget = {
+               .name   = "mv_udc",
+               .ops    = &mv_udc_ops,
        },
 };
 
+/**
+ * mv_get_qh() - return queue head for endpoint
+ * @ep_num:    Endpoint number
+ * @dir_in:    Direction of the endpoint (IN = 1, OUT = 0)
+ *
+ * This function returns the QH associated with particular endpoint
+ * and it's direction.
+ */
+static struct ept_queue_head *mv_get_qh(int ep_num, int dir_in)
+{
+       return &controller.epts[(ep_num * 2) + dir_in];
+}
+
+/**
+ * mv_get_qtd() - return queue item for endpoint
+ * @ep_num:    Endpoint number
+ * @dir_in:    Direction of the endpoint (IN = 1, OUT = 0)
+ *
+ * This function returns the QH associated with particular endpoint
+ * and it's direction.
+ */
+static struct ept_queue_item *mv_get_qtd(int ep_num, int dir_in)
+{
+       return controller.items[(ep_num * 2) + dir_in];
+}
+
+/**
+ * mv_flush_qh - flush cache over queue head
+ * @ep_num:    Endpoint number
+ *
+ * This function flushes cache over QH for particular endpoint.
+ */
+static void mv_flush_qh(int ep_num)
+{
+       struct ept_queue_head *head = mv_get_qh(ep_num, 0);
+       const uint32_t start = (uint32_t)head;
+       const uint32_t end = start + 2 * sizeof(*head);
+
+       flush_dcache_range(start, end);
+}
+
+/**
+ * mv_invalidate_qh - invalidate cache over queue head
+ * @ep_num:    Endpoint number
+ *
+ * This function invalidates cache over QH for particular endpoint.
+ */
+static void mv_invalidate_qh(int ep_num)
+{
+       struct ept_queue_head *head = mv_get_qh(ep_num, 0);
+       uint32_t start = (uint32_t)head;
+       uint32_t end = start + 2 * sizeof(*head);
+
+       invalidate_dcache_range(start, end);
+}
+
+/**
+ * mv_flush_qtd - flush cache over queue item
+ * @ep_num:    Endpoint number
+ *
+ * This function flushes cache over qTD pair for particular endpoint.
+ */
+static void mv_flush_qtd(int ep_num)
+{
+       struct ept_queue_item *item = mv_get_qtd(ep_num, 0);
+       const uint32_t start = (uint32_t)item;
+       const uint32_t end_raw = start + 2 * sizeof(*item);
+       const uint32_t end = roundup(end_raw, ARCH_DMA_MINALIGN);
+
+       flush_dcache_range(start, end);
+}
+
+/**
+ * mv_invalidate_qtd - invalidate cache over queue item
+ * @ep_num:    Endpoint number
+ *
+ * This function invalidates cache over qTD pair for particular endpoint.
+ */
+static void mv_invalidate_qtd(int ep_num)
+{
+       struct ept_queue_item *item = mv_get_qtd(ep_num, 0);
+       const uint32_t start = (uint32_t)item;
+       const uint32_t end_raw = start + 2 * sizeof(*item);
+       const uint32_t end = roundup(end_raw, ARCH_DMA_MINALIGN);
+
+       invalidate_dcache_range(start, end);
+}
+
 static struct usb_request *
 mv_ep_alloc_request(struct usb_ep *ep, unsigned int gfp_flags)
 {
@@ -102,9 +213,9 @@ static void mv_ep_free_request(struct usb_ep *ep, struct usb_request *_req)
 static void ep_enable(int num, int in)
 {
        struct ept_queue_head *head;
-       struct mv_udc *udc = controller.udc;
+       struct mv_udc *udc = (struct mv_udc *)controller.ctrl->hcor;
        unsigned n;
-       head = epts + 2*num + in;
+       head = mv_get_qh(num, in);
 
        n = readl(&udc->epctrl[num]);
        if (in)
@@ -112,8 +223,10 @@ static void ep_enable(int num, int in)
        else
                n |= (CTRL_RXE | CTRL_RXR | CTRL_RXT_BULK);
 
-       if (num != 0)
+       if (num != 0) {
                head->config = CONFIG_MAX_PKT(EP_MAX_PACKET_SIZE) | CONFIG_ZLT;
+               mv_flush_qh(num);
+       }
        writel(n, &udc->epctrl[num]);
 }
 
@@ -134,40 +247,108 @@ static int mv_ep_disable(struct usb_ep *ep)
        return 0;
 }
 
+static int mv_bounce(struct mv_ep *ep)
+{
+       uint32_t addr = (uint32_t)ep->req.buf;
+       uint32_t ba;
+
+       /* Input buffer address is not aligned. */
+       if (addr & (ARCH_DMA_MINALIGN - 1))
+               goto align;
+
+       /* Input buffer length is not aligned. */
+       if (ep->req.length & (ARCH_DMA_MINALIGN - 1))
+               goto align;
+
+       /* The buffer is well aligned, only flush cache. */
+       ep->b_len = ep->req.length;
+       ep->b_buf = ep->req.buf;
+       goto flush;
+
+align:
+       /* Use internal buffer for small payloads. */
+       if (ep->req.length <= 64) {
+               ep->b_len = 64;
+               ep->b_buf = ep->b_fast;
+       } else {
+               ep->b_len = roundup(ep->req.length, ARCH_DMA_MINALIGN);
+               ep->b_buf = memalign(ARCH_DMA_MINALIGN, ep->b_len);
+               if (!ep->b_buf)
+                       return -ENOMEM;
+       }
+
+       memcpy(ep->b_buf, ep->req.buf, ep->req.length);
+
+flush:
+       ba = (uint32_t)ep->b_buf;
+       flush_dcache_range(ba, ba + ep->b_len);
+
+       return 0;
+}
+
+static void mv_debounce(struct mv_ep *ep)
+{
+       uint32_t addr = (uint32_t)ep->req.buf;
+       uint32_t ba = (uint32_t)ep->b_buf;
+
+       invalidate_dcache_range(ba, ba + ep->b_len);
+
+       /* Input buffer address is not aligned. */
+       if (addr & (ARCH_DMA_MINALIGN - 1))
+               goto copy;
+
+       /* Input buffer length is not aligned. */
+       if (ep->req.length & (ARCH_DMA_MINALIGN - 1))
+               goto copy;
+
+       /* The buffer is well aligned, only invalidate cache. */
+       return;
+
+copy:
+       memcpy(ep->req.buf, ep->b_buf, ep->req.length);
+
+       /* Large payloads use allocated buffer, free it. */
+       if (ep->req.length > 64)
+               free(ep->b_buf);
+}
+
 static int mv_ep_queue(struct usb_ep *ep,
                struct usb_request *req, gfp_t gfp_flags)
 {
        struct mv_ep *mv_ep = container_of(ep, struct mv_ep, ep);
-       struct mv_udc *udc = controller.udc;
+       struct mv_udc *udc = (struct mv_udc *)controller.ctrl->hcor;
        struct ept_queue_item *item;
        struct ept_queue_head *head;
-       unsigned phys;
-       int bit, num, len, in;
+       int bit, num, len, in, ret;
        num = mv_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
        in = (mv_ep->desc->bEndpointAddress & USB_DIR_IN) != 0;
-       item = items[2 * num + in];
-       head = epts + 2 * num + in;
-       phys = (unsigned)req->buf;
+       item = mv_get_qtd(num, in);
+       head = mv_get_qh(num, in);
        len = req->length;
 
+       ret = mv_bounce(mv_ep);
+       if (ret)
+               return ret;
+
        item->next = TERMINATE;
        item->info = INFO_BYTES(len) | INFO_IOC | INFO_ACTIVE;
-       item->page0 = phys;
-       item->page1 = (phys & 0xfffff000) + 0x1000;
+       item->page0 = (uint32_t)mv_ep->b_buf;
+       item->page1 = ((uint32_t)mv_ep->b_buf & 0xfffff000) + 0x1000;
 
        head->next = (unsigned) item;
        head->info = 0;
 
-       DBG("ept%d %s queue len %x, buffer %x\n",
-                       num, in ? "in" : "out", len, phys);
+       DBG("ept%d %s queue len %x, buffer %p\n",
+           num, in ? "in" : "out", len, mv_ep->b_buf);
 
        if (in)
                bit = EPT_TX(num);
        else
                bit = EPT_RX(num);
 
-       flush_cache(phys, len);
-       flush_cache((unsigned long)item, sizeof(struct ept_queue_item));
+       mv_flush_qh(num);
+       mv_flush_qtd(num);
+
        writel(bit, &udc->epprime);
 
        return 0;
@@ -181,13 +362,17 @@ static void handle_ep_complete(struct mv_ep *ep)
        in = (ep->desc->bEndpointAddress & USB_DIR_IN) != 0;
        if (num == 0)
                ep->desc = &ep0_out_desc;
-       item = items[2 * num + in];
-
+       item = mv_get_qtd(num, in);
+       mv_invalidate_qtd(num);
+       
        if (item->info & 0xff)
                printf("EP%d/%s FAIL nfo=%x pg0=%x\n",
                        num, in ? "in" : "out", item->info, item->page0);
 
        len = (item->info >> 16) & 0x7fff;
+
+       mv_debounce(ep);
+
        ep->req.length -= len;
        DBG("ept%d %s complete %x\n",
                        num, in ? "in" : "out", len);
@@ -203,16 +388,16 @@ static void handle_ep_complete(struct mv_ep *ep)
 
 static void handle_setup(void)
 {
-       struct usb_request *req = &ep[0].req;
-       struct mv_udc *udc = controller.udc;
+       struct usb_request *req = &controller.ep[0].req;
+       struct mv_udc *udc = (struct mv_udc *)controller.ctrl->hcor;
        struct ept_queue_head *head;
        struct usb_ctrlrequest r;
        int status = 0;
        int num, in, _num, _in, i;
        char *buf;
-       head = epts;
+       head = mv_get_qh(0, 0); /* EP0 OUT */
 
-       flush_cache((unsigned long)head, sizeof(struct ept_queue_head));
+       mv_invalidate_qh(0);
        memcpy(&r, head->setup_data, sizeof(struct usb_ctrlrequest));
        writel(EPT_RX(0), &udc->epstat);
        DBG("handle setup %s, %x, %x index %x value %x\n", reqname(r.bRequest),
@@ -226,11 +411,11 @@ static void handle_setup(void)
                if ((r.wValue == 0) && (r.wLength == 0)) {
                        req->length = 0;
                        for (i = 0; i < NUM_ENDPOINTS; i++) {
-                               if (!ep[i].desc)
+                               if (!controller.ep[i].desc)
                                        continue;
-                               num = ep[i].desc->bEndpointAddress
-                                       & USB_ENDPOINT_NUMBER_MASK;
-                               in = (ep[i].desc->bEndpointAddress
+                               num = controller.ep[i].desc->bEndpointAddress
+                                               & USB_ENDPOINT_NUMBER_MASK;
+                               in = (controller.ep[i].desc->bEndpointAddress
                                                & USB_DIR_IN) != 0;
                                if ((num == _num) && (in == _in)) {
                                        ep_enable(num, in);
@@ -277,7 +462,7 @@ static void stop_activity(void)
 {
        int i, num, in;
        struct ept_queue_head *head;
-       struct mv_udc *udc = controller.udc;
+       struct mv_udc *udc = (struct mv_udc *)controller.ctrl->hcor;
        writel(readl(&udc->epcomp), &udc->epcomp);
        writel(readl(&udc->epstat), &udc->epstat);
        writel(0xffffffff, &udc->epflush);
@@ -286,19 +471,21 @@ static void stop_activity(void)
        for (i = 0; i < NUM_ENDPOINTS; i++) {
                if (i != 0)
                        writel(0, &udc->epctrl[i]);
-               if (ep[i].desc) {
-                       num = ep[i].desc->bEndpointAddress
+               if (controller.ep[i].desc) {
+                       num = controller.ep[i].desc->bEndpointAddress
                                & USB_ENDPOINT_NUMBER_MASK;
-                       in = (ep[i].desc->bEndpointAddress & USB_DIR_IN) != 0;
-                       head = epts + (num * 2) + (in);
+                       in = (controller.ep[i].desc->bEndpointAddress
+                               & USB_DIR_IN) != 0;
+                       head = mv_get_qh(num, in);
                        head->info = INFO_ACTIVE;
+                       mv_flush_qh(num);
                }
        }
 }
 
 void udc_irq(void)
 {
-       struct mv_udc *udc = controller.udc;
+       struct mv_udc *udc = (struct mv_udc *)controller.ctrl->hcor;
        unsigned n = readl(&udc->usbsts);
        writel(n, &udc->usbsts);
        int bit, i, num, in;
@@ -320,8 +507,8 @@ void udc_irq(void)
                if (bit == 2) {
                        controller.gadget.speed = USB_SPEED_HIGH;
                        for (i = 1; i < NUM_ENDPOINTS && n; i++)
-                               if (ep[i].desc)
-                                       ep[i].ep.maxpacket = 512;
+                               if (controller.ep[i].desc)
+                                       controller.ep[i].ep.maxpacket = 512;
                } else {
                        controller.gadget.speed = USB_SPEED_FULL;
                }
@@ -340,14 +527,14 @@ void udc_irq(void)
                        writel(n, &udc->epcomp);
 
                for (i = 0; i < NUM_ENDPOINTS && n; i++) {
-                       if (ep[i].desc) {
-                               num = ep[i].desc->bEndpointAddress
+                       if (controller.ep[i].desc) {
+                               num = controller.ep[i].desc->bEndpointAddress
                                        & USB_ENDPOINT_NUMBER_MASK;
-                               in = (ep[i].desc->bEndpointAddress
+                               in = (controller.ep[i].desc->bEndpointAddress
                                                & USB_DIR_IN) != 0;
                                bit = (in) ? EPT_TX(num) : EPT_RX(num);
                                if (n & bit)
-                                       handle_ep_complete(&ep[i]);
+                                       handle_ep_complete(&controller.ep[i]);
                        }
                }
        }
@@ -356,7 +543,7 @@ void udc_irq(void)
 int usb_gadget_handle_interrupts(void)
 {
        u32 value;
-       struct mv_udc *udc = controller.udc;
+       struct mv_udc *udc = (struct mv_udc *)controller.ctrl->hcor;
 
        value = readl(&udc->usbsts);
        if (value)
@@ -367,13 +554,13 @@ int usb_gadget_handle_interrupts(void)
 
 static int mv_pullup(struct usb_gadget *gadget, int is_on)
 {
-       struct mv_udc *udc = controller.udc;
+       struct mv_udc *udc = (struct mv_udc *)controller.ctrl->hcor;
        if (is_on) {
                /* RESET */
                writel(USBCMD_ITC(MICRO_8FRAME) | USBCMD_RST, &udc->usbcmd);
                udelay(200);
 
-               writel((unsigned) epts, &udc->epinitaddr);
+               writel((unsigned)controller.epts, &udc->epinitaddr);
 
                /* select DEVICE mode */
                writel(USBMODE_DEVICE, &udc->usbmode);
@@ -395,7 +582,7 @@ static int mv_pullup(struct usb_gadget *gadget, int is_on)
 
 void udc_disconnect(void)
 {
-       struct mv_udc *udc = controller.udc;
+       struct mv_udc *udc = (struct mv_udc *)controller.ctrl->hcor;
        /* disable pullup */
        stop_activity();
        writel(USBCMD_FS2, &udc->usbcmd);
@@ -407,18 +594,48 @@ void udc_disconnect(void)
 static int mvudc_probe(void)
 {
        struct ept_queue_head *head;
+       uint8_t *imem;
        int i;
 
-       controller.gadget.ops = &mv_udc_ops;
-       controller.udc = (struct mv_udc *)CONFIG_USB_REG_BASE;
-       epts = memalign(PAGE_SIZE, QH_MAXNUM * sizeof(struct ept_queue_head));
-       memset(epts, 0, QH_MAXNUM * sizeof(struct ept_queue_head));
+       const int num = 2 * NUM_ENDPOINTS;
+
+       const int eplist_min_align = 4096;
+       const int eplist_align = roundup(eplist_min_align, ARCH_DMA_MINALIGN);
+       const int eplist_raw_sz = num * sizeof(struct ept_queue_head);
+       const int eplist_sz = roundup(eplist_raw_sz, ARCH_DMA_MINALIGN);
+
+       const int ilist_align = roundup(ARCH_DMA_MINALIGN, 32);
+       const int ilist_ent_raw_sz = 2 * sizeof(struct ept_queue_item);
+       const int ilist_ent_sz = roundup(ilist_ent_raw_sz, ARCH_DMA_MINALIGN);
+       const int ilist_sz = NUM_ENDPOINTS * ilist_ent_sz;
+
+       /* The QH list must be aligned to 4096 bytes. */
+       controller.epts = memalign(eplist_align, eplist_sz);
+       if (!controller.epts)
+               return -ENOMEM;
+       memset(controller.epts, 0, eplist_sz);
+
+       /*
+        * Each qTD item must be 32-byte aligned, each qTD touple must be
+        * cacheline aligned. There are two qTD items for each endpoint and
+        * only one of them is used for the endpoint at time, so we can group
+        * them together.
+        */
+       controller.items_mem = memalign(ilist_align, ilist_sz);
+       if (!controller.items_mem) {
+               free(controller.epts);
+               return -ENOMEM;
+       }
+
        for (i = 0; i < 2 * NUM_ENDPOINTS; i++) {
                /*
-                * For item0 and item1, they are served as ep0
-                * out&in seperately
+                * Configure QH for each endpoint. The structure of the QH list
+                * is such that each two subsequent fields, N and N+1 where N is
+                * even, in the QH list represent QH for one endpoint. The Nth
+                * entry represents OUT configuration and the N+1th entry does
+                * represent IN configuration of the endpoint.
                 */
-               head = epts + i;
+               head = controller.epts + i;
                if (i < 2)
                        head->config = CONFIG_MAX_PKT(EP0_MAX_PACKET_SIZE)
                                | CONFIG_ZLT | CONFIG_IOS;
@@ -428,49 +645,65 @@ static int mvudc_probe(void)
                head->next = TERMINATE;
                head->info = 0;
 
-               items[i] = memalign(PAGE_SIZE, sizeof(struct ept_queue_item));
+               imem = controller.items_mem + ((i >> 1) * ilist_ent_sz);
+               if (i & 1)
+                       imem += sizeof(struct ept_queue_item);
+
+               controller.items[i] = (struct ept_queue_item *)imem;
+
+               if (i & 1) {
+                       mv_flush_qh(i - 1);
+                       mv_flush_qtd(i - 1);
+               }
        }
 
        INIT_LIST_HEAD(&controller.gadget.ep_list);
-       ep[0].ep.maxpacket = 64;
-       ep[0].ep.name = "ep0";
-       ep[0].desc = &ep0_in_desc;
+
+       /* Init EP 0 */
+       memcpy(&controller.ep[0].ep, &mv_ep_init[0], sizeof(*mv_ep_init));
+       controller.ep[0].desc = &ep0_in_desc;
+       controller.gadget.ep0 = &controller.ep[0].ep;
        INIT_LIST_HEAD(&controller.gadget.ep0->ep_list);
-       for (i = 0; i < 2 * NUM_ENDPOINTS; i++) {
-               if (i != 0) {
-                       ep[i].ep.maxpacket = 512;
-                       ep[i].ep.name = "ep-";
-                       list_add_tail(&ep[i].ep.ep_list,
-                                     &controller.gadget.ep_list);
-                       ep[i].desc = NULL;
-               }
-               ep[i].ep.ops = &mv_ep_ops;
+
+       /* Init EP 1..n */
+       for (i = 1; i < NUM_ENDPOINTS; i++) {
+               memcpy(&controller.ep[i].ep, &mv_ep_init[1],
+                      sizeof(*mv_ep_init));
+               list_add_tail(&controller.ep[i].ep.ep_list,
+                             &controller.gadget.ep_list);
        }
+
        return 0;
 }
 
 int usb_gadget_register_driver(struct usb_gadget_driver *driver)
 {
-       struct mv_udc *udc = controller.udc;
-       int             retval;
-
-       if (!driver
-                       || driver->speed < USB_SPEED_FULL
-                       || !driver->bind
-                       || !driver->setup) {
-               DBG("bad parameter.\n");
+       struct mv_udc *udc;
+       int ret;
+
+       if (!driver)
                return -EINVAL;
-       }
+       if (!driver->bind || !driver->setup || !driver->disconnect)
+               return -EINVAL;
+       if (driver->speed != USB_SPEED_FULL && driver->speed != USB_SPEED_HIGH)
+               return -EINVAL;
+
+       ret = usb_lowlevel_init(0, (void **)&controller.ctrl);
+       if (ret)
+               return ret;
+
+       ret = mvudc_probe();
+       if (!ret) {
+               udc = (struct mv_udc *)controller.ctrl->hcor;
 
-       if (!mvudc_probe()) {
-               usb_lowlevel_init();
                /* select ULPI phy */
                writel(PTS(PTS_ENABLE) | PFSC, &udc->portsc);
        }
-       retval = driver->bind(&controller.gadget);
-       if (retval) {
-               DBG("driver->bind() returned %d\n", retval);
-               return retval;
+
+       ret = driver->bind(&controller.gadget);
+       if (ret) {
+               DBG("driver->bind() returned %d\n", ret);
+               return ret;
        }
        controller.driver = driver;
 
index 706cf0cb7dba246c2c567b5da4111590bb9679b9..fdad739724eacb545817ebaf8128bdba96a82c91 100644 (file)
 #define CONFIG_USB_MAX_CONTROLLER_COUNT 1
 #endif
 
-static struct ehci_ctrl {
-       struct ehci_hccr *hccr; /* R/O registers, not need for volatile */
-       struct ehci_hcor *hcor;
-       int rootdev;
-       uint16_t portreset;
-       struct QH qh_list __aligned(USB_DMA_MINALIGN);
-       struct QH periodic_queue __aligned(USB_DMA_MINALIGN);
-       uint32_t *periodic_list;
-       int ntds;
-} ehcic[CONFIG_USB_MAX_CONTROLLER_COUNT];
+static struct ehci_ctrl ehcic[CONFIG_USB_MAX_CONTROLLER_COUNT];
 
 #define ALIGN_END_ADDR(type, ptr, size)                        \
        ((uint32_t)(ptr) + roundup((size) * sizeof(type), USB_DMA_MINALIGN))
@@ -954,7 +945,9 @@ int usb_lowlevel_init(int index, void **controller)
         *         Split Transactions will be spread across microframes using
         *         S-mask and C-mask.
         */
-       ehcic[index].periodic_list = memalign(4096, 1024*4);
+       if (ehcic[index].periodic_list == NULL)
+               ehcic[index].periodic_list = memalign(4096, 1024 * 4);
+
        if (!ehcic[index].periodic_list)
                return -ENOMEM;
        for (i = 0; i < 1024; i++) {
index 3548620ecafc4d1c027aaeb6076945ae96a31ea5..dd11f535adc5937c3fdd6ea2da52cbf53dd24455 100644 (file)
@@ -221,21 +221,12 @@ void __weak board_ehci_hcd_postinit(struct usb_ehci *ehci, int port)
 int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor)
 {
        struct usb_ehci *ehci;
-#ifdef CONFIG_MX53
-       struct clkctl *sc_regs = (struct clkctl *)CCM_BASE_ADDR;
-       u32 reg;
-
-       reg = __raw_readl(&sc_regs->cscmr1) & ~(1 << 26);
-       /* derive USB PHY clock multiplexer from PLL3 */
-       reg |= 1 << 26;
-       __raw_writel(reg, &sc_regs->cscmr1);
-#endif
 
        set_usboh3_clk();
-       enable_usboh3_clk(1);
+       enable_usboh3_clk(true);
        set_usb_phy_clk();
-       enable_usb_phy1_clk(1);
-       enable_usb_phy2_clk(1);
+       enable_usb_phy1_clk(true);
+       enable_usb_phy2_clk(true);
        mdelay(1);
 
        /* Do board specific initialization */
index a47e078f62a14e8b107c8b3859b4776b4a4197ff..3c58f9e656c6d1a2dbe5a2bd103dfbe623a96eb2 100644 (file)
@@ -28,18 +28,21 @@ static struct omap_ehci *const ehci = (struct omap_ehci *)OMAP_EHCI_BASE;
 
 static int omap_uhh_reset(void)
 {
-       unsigned long init = get_timer(0);
-
-       /* perform UHH soft reset, and wait until reset is complete */
-       writel(OMAP_UHH_SYSCONFIG_SOFTRESET, &uhh->sysc);
-
-       /* Wait for UHH reset to complete */
-       while (!(readl(&uhh->syss) & OMAP_UHH_SYSSTATUS_EHCI_RESETDONE))
-               if (get_timer(init) > CONFIG_SYS_HZ) {
-                       debug("OMAP UHH error: timeout resetting ehci\n");
-                       return -EL3RST;
-               }
-
+/*
+ * Soft resetting the UHH module causes instability issues on
+ * all OMAPs so we just avoid it.
+ *
+ * See OMAP36xx Errata
+ *  i571: USB host EHCI may stall when entering smart-standby mode
+ *  i660: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
+ *
+ * On OMAP4/5, soft-resetting the UHH module will put it into
+ * Smart-Idle mode and lead to a deadlock.
+ *
+ * On OMAP3, this doesn't seem to be the case but still instabilities
+ * are observed on beagle (3530 ES1.0) if soft-reset is used.
+ * e.g. NFS root failures with Linux kernel.
+ */
        return 0;
 }
 
@@ -76,6 +79,7 @@ static void omap_usbhs_hsic_init(int port)
        writel(reg, &usbtll->channel_conf + port);
 }
 
+#ifdef CONFIG_USB_ULPI
 static void omap_ehci_soft_phy_reset(int port)
 {
        struct ulpi_viewport ulpi_vp;
@@ -85,6 +89,12 @@ static void omap_ehci_soft_phy_reset(int port)
 
        ulpi_reset(&ulpi_vp);
 }
+#else
+static void omap_ehci_soft_phy_reset(int port)
+{
+       return;
+}
+#endif
 
 inline int __board_usb_init(void)
 {
@@ -93,7 +103,8 @@ inline int __board_usb_init(void)
 int board_usb_init(void) __attribute__((weak, alias("__board_usb_init")));
 
 #if defined(CONFIG_OMAP_EHCI_PHY1_RESET_GPIO) || \
-       defined(CONFIG_OMAP_EHCI_PHY2_RESET_GPIO)
+       defined(CONFIG_OMAP_EHCI_PHY2_RESET_GPIO) || \
+       defined(CONFIG_OMAP_EHCI_PHY3_RESET_GPIO)
 /* controls PHY(s) reset signal(s) */
 static inline void omap_ehci_phy_reset(int on, int delay)
 {
@@ -112,6 +123,10 @@ static inline void omap_ehci_phy_reset(int on, int delay)
        gpio_request(CONFIG_OMAP_EHCI_PHY2_RESET_GPIO, "USB PHY2 reset");
        gpio_direction_output(CONFIG_OMAP_EHCI_PHY2_RESET_GPIO, !on);
 #endif
+#ifdef CONFIG_OMAP_EHCI_PHY3_RESET_GPIO
+       gpio_request(CONFIG_OMAP_EHCI_PHY3_RESET_GPIO, "USB PHY3 reset");
+       gpio_direction_output(CONFIG_OMAP_EHCI_PHY3_RESET_GPIO, !on);
+#endif
 
        /* Hold the PHY in RESET for enough time till DIR is high */
        /* Refer: ISSUE1 */
@@ -195,10 +210,27 @@ int omap_ehci_hcd_init(struct omap_usbhs_board_data *usbhs_pdata,
                else
                        setbits_le32(&reg, OMAP_UHH_HOSTCONFIG_ULPI_P3_BYPASS);
        } else if (rev == OMAP_USBHS_REV2) {
+
                clrsetbits_le32(&reg, (OMAP_P1_MODE_CLEAR | OMAP_P2_MODE_CLEAR),
                                        OMAP4_UHH_HOSTCONFIG_APP_START_CLK);
 
-               /* Clear port mode fields for PHY mode*/
+               /* Clear port mode fields for PHY mode */
+
+               if (is_ehci_hsic_mode(usbhs_pdata->port_mode[0]))
+                       setbits_le32(&reg, OMAP_P1_MODE_HSIC);
+
+               if (is_ehci_hsic_mode(usbhs_pdata->port_mode[1]))
+                       setbits_le32(&reg, OMAP_P2_MODE_HSIC);
+
+       } else if (rev == OMAP_USBHS_REV2_1) {
+
+               clrsetbits_le32(&reg,
+                               (OMAP_P1_MODE_CLEAR |
+                                OMAP_P2_MODE_CLEAR |
+                                OMAP_P3_MODE_CLEAR),
+                               OMAP4_UHH_HOSTCONFIG_APP_START_CLK);
+
+               /* Clear port mode fields for PHY mode */
 
                if (is_ehci_hsic_mode(usbhs_pdata->port_mode[0]))
                        setbits_le32(&reg, OMAP_P1_MODE_HSIC);
index d090f0a53e87349ee96a5bfe7d64a917bf153d0e..bd52afe2626fa58df48b23357cf3c987f4c4bdcf 100644 (file)
@@ -22,6 +22,8 @@
 #ifndef USB_EHCI_H
 #define USB_EHCI_H
 
+#include <usb.h>
+
 #if !defined(CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS)
 #define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS     2
 #endif
@@ -252,6 +254,17 @@ struct QH {
        };
 };
 
+struct ehci_ctrl {
+       struct ehci_hccr *hccr; /* R/O registers, not need for volatile */
+       struct ehci_hcor *hcor;
+       int rootdev;
+       uint16_t portreset;
+       struct QH qh_list __aligned(USB_DMA_MINALIGN);
+       struct QH periodic_queue __aligned(USB_DMA_MINALIGN);
+       uint32_t *periodic_list;
+       int ntds;
+};
+
 /* Low level init functions */
 int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor);
 int ehci_hcd_stop(int index);
index 72c8c2bad1940c68993f2019fa11e31f0a708339..d7a5663deb31aa12dc04408937e3e0800257a437 100644 (file)
@@ -39,15 +39,6 @@ typedef unsigned long dmaaddr_t;
 #define cpu_relax() do {} while (0)
 
 #define pr_debug(fmt, args...) debug(fmt, ##args)
-#define dev_dbg(dev, fmt, args...)             \
-       debug(fmt, ##args)
-#define dev_vdbg(dev, fmt, args...)            \
-       debug(fmt, ##args)
-#define dev_info(dev, fmt, args...)            \
-       printf(fmt, ##args)
-#define dev_err(dev, fmt, args...)             \
-       printf(fmt, ##args)
-#define printk printf
 
 #define WARN(condition, fmt, args...) ({       \
        int ret_warn = !!condition;             \
@@ -55,13 +46,6 @@ typedef unsigned long dmaaddr_t;
                printf(fmt, ##args);            \
        ret_warn; })
 
-#define KERN_DEBUG
-#define KERN_NOTICE
-#define KERN_WARNING
-#define KERN_ERR
-
-#define kfree(ptr) free(ptr)
-
 #define pm_runtime_get_sync(dev) do {} while (0)
 #define pm_runtime_put(dev) do {} while (0)
 #define pm_runtime_put_sync(dev) do {} while (0)
index f1fb26c18044c81299cf9965c03aae713bcaf717..6c208c596e1eb0722c80bd84cbc645552ff07a1d 100644 (file)
@@ -19,6 +19,7 @@ COBJS-$(CONFIG_EXYNOS_MIPI_DSIM) += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \
                                exynos_mipi_dsi_lowlevel.o
 COBJS-$(CONFIG_EXYNOS_PWM_BL) += exynos_pwm_bl.o
 COBJS-$(CONFIG_FSL_DIU_FB) += fsl_diu_fb.o videomodes.o
+COBJS-$(CONFIG_L5F31188) += l5f31188.o
 COBJS-$(CONFIG_MPC8XX_LCD) += mpc8xx_lcd.o
 COBJS-$(CONFIG_PXA_LCD) += pxa_lcd.o
 COBJS-$(CONFIG_S6E8AX0) += s6e8ax0.o
@@ -40,6 +41,7 @@ COBJS-$(CONFIG_VIDEO_SM501) += sm501.o
 COBJS-$(CONFIG_VIDEO_SMI_LYNXEM) += smiLynxEM.o videomodes.o
 COBJS-$(CONFIG_VIDEO_TEGRA) += tegra.o
 COBJS-$(CONFIG_VIDEO_VCXK) += bus_vcxk.o
+COBJS-$(CONFIG_FORMIKE) += formike.o
 
 COBJS  := $(sort $(COBJS-y))
 SRCS   := $(COBJS:.o=.c)
index 96ef8f9c2620186d3588439b8e60faaca4821f2f..fd2885573ca70538e6c7c23a8aa463ff455fd615 100644 (file)
 #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>
@@ -431,6 +430,16 @@ static const int video_font_draw_table32[16][4] = {
        {0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff}
 };
 
+/*
+ * Implement a weak default function for boards that optionally
+ * need to skip the cfb initialization.
+ */
+__weak int board_cfb_skip(void)
+{
+       /* As default, don't skip cfb init */
+       return 0;
+}
+
 static void video_drawchars(int xx, int yy, unsigned char *s, int count)
 {
        u8 *cdat, *dest, *dest0;
@@ -452,6 +461,10 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
                                ((u32 *) dest)[0] =
                                        (video_font_draw_table8[bits >> 4] &
                                         eorx) ^ bgx;
+
+                               if (VIDEO_FONT_WIDTH == 4)
+                                       continue;
+
                                ((u32 *) dest)[1] =
                                        (video_font_draw_table8[bits & 15] &
                                         eorx) ^ bgx;
@@ -477,6 +490,10 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
                                        SHORTSWAP32((video_font_draw_table15
                                                     [bits >> 4 & 3] & eorx) ^
                                                    bgx);
+
+                               if (VIDEO_FONT_WIDTH == 4)
+                                       continue;
+
                                ((u32 *) dest)[2] =
                                        SHORTSWAP32((video_font_draw_table15
                                                     [bits >> 2 & 3] & eorx) ^
@@ -507,6 +524,10 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
                                        SHORTSWAP32((video_font_draw_table16
                                                     [bits >> 4 & 3] & eorx) ^
                                                    bgx);
+
+                               if (VIDEO_FONT_WIDTH == 4)
+                                       continue;
+
                                ((u32 *) dest)[2] =
                                        SHORTSWAP32((video_font_draw_table16
                                                     [bits >> 2 & 3] & eorx) ^
@@ -541,6 +562,11 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
                                ((u32 *) dest)[3] =
                                        SWAP32((video_font_draw_table32
                                                [bits >> 4][3] & eorx) ^ bgx);
+
+
+                               if (VIDEO_FONT_WIDTH == 4)
+                                       continue;
+
                                ((u32 *) dest)[4] =
                                        SWAP32((video_font_draw_table32
                                                [bits & 15][0] & eorx) ^ bgx);
@@ -576,6 +602,10 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
                                ((u32 *) dest)[2] =
                                        (video_font_draw_table24[bits >> 4][2]
                                         & eorx) ^ bgx;
+
+                               if (VIDEO_FONT_WIDTH == 4)
+                                       continue;
+
                                ((u32 *) dest)[3] =
                                        (video_font_draw_table24[bits & 15][0]
                                         & eorx) ^ bgx;
@@ -1996,6 +2026,8 @@ static void *video_logo(void)
                return video_fb_address + video_logo_height * VIDEO_LINE_LEN;
        }
 #endif
+       if (board_cfb_skip())
+               return 0;
 
        sprintf(info, " %s", version_string);
 
@@ -2205,6 +2237,9 @@ int drv_video_init(void)
        /* Init video chip - returns with framebuffer cleared */
        skip_dev_init = (video_init() == -1);
 
+       if (board_cfb_skip())
+               return 0;
+
 #if !defined(CONFIG_VGA_AS_SINGLE_DEVICE)
        debug("KBD: Keyboard init ...\n");
        skip_dev_init |= (VIDEO_KBD_INIT_FCT == -1);
index 373991ddee16a4c05a85b81ece15428f85c9b84c..3a5f325cd30b97337c77280d5dc8877d2c86fceb 100644 (file)
 #include <asm/arch/hardware.h>
 
 #include "videomodes.h"
-#include <asm/arch/da8xx-fb.h>
+#include "da8xx-fb.h"
+
+#if !defined(DA8XX_LCD_CNTL_BASE)
+#define DA8XX_LCD_CNTL_BASE    DAVINCI_LCD_CNTL_BASE
+#endif
 
 #define DRIVER_NAME "da8xx_lcdc"
 
+#define LCD_VERSION_1  1
+#define LCD_VERSION_2  2
+
 /* LCD Status Register */
 #define LCD_END_OF_FRAME1              (1 << 9)
 #define LCD_END_OF_FRAME0              (1 << 8)
 #define LCD_DMA_BURST_4                        0x2
 #define LCD_DMA_BURST_8                        0x3
 #define LCD_DMA_BURST_16               0x4
-#define LCD_END_OF_FRAME_INT_ENA       (1 << 2)
+#define LCD_V1_END_OF_FRAME_INT_ENA    (1 << 2)
+#define LCD_V2_END_OF_FRAME0_INT_ENA   (1 << 8)
+#define LCD_V2_END_OF_FRAME1_INT_ENA   (1 << 9)
 #define LCD_DUAL_FRAME_BUFFER_ENABLE   (1 << 0)
 
+#define LCD_V2_TFT_24BPP_MODE          (1 << 25)
+#define LCD_V2_TFT_24BPP_UNPACK                (1 << 26)
+
 /* LCD Control Register */
 #define LCD_CLK_DIVISOR(x)             ((x) << 8)
 #define LCD_RASTER_MODE                        0x01
 #define LCD_MONO_8BIT_MODE             (1 << 9)
 #define LCD_RASTER_ORDER               (1 << 8)
 #define LCD_TFT_MODE                   (1 << 7)
-#define LCD_UNDERFLOW_INT_ENA          (1 << 6)
-#define LCD_PL_ENABLE                  (1 << 4)
+#define LCD_V1_UNDERFLOW_INT_ENA       (1 << 6)
+#define LCD_V2_UNDERFLOW_INT_ENA       (1 << 5)
+#define LCD_V1_PL_INT_ENA              (1 << 4)
+#define LCD_V2_PL_INT_ENA              (1 << 6)
 #define LCD_MONOCHROME_MODE            (1 << 1)
 #define LCD_RASTER_ENABLE              (1 << 0)
 #define LCD_TFT_ALT_ENABLE             (1 << 23)
 #define LCD_STN_565_ENABLE             (1 << 24)
+#define LCD_V2_DMA_CLK_EN              (1 << 2)
+#define LCD_V2_LIDD_CLK_EN             (1 << 1)
+#define LCD_V2_CORE_CLK_EN             (1 << 0)
+#define LCD_V2_LPP_B10                 26
+#define LCD_V2_TFT_24BPP_MODE          (1 << 25)
+#define LCD_V2_TFT_24BPP_UNPACK                (1 << 26)
 
 /* LCD Raster Timing 2 Register */
 #define LCD_AC_BIAS_TRANSITIONS_PER_INT(x)     ((x) << 16)
@@ -74,6 +94,8 @@
 #define LCD_INVERT_LINE_CLOCK                  (1 << 21)
 #define LCD_INVERT_FRAME_CLOCK                 (1 << 20)
 
+/* Clock registers available only on Version 2 */
+#define  LCD_CLK_MAIN_RESET                    (1 << 3)
 /* LCD Block */
 struct da8xx_lcd_regs {
        u32     revid;
@@ -97,6 +119,15 @@ struct da8xx_lcd_regs {
        u32     dma_frm_buf_ceiling_addr_0;
        u32     dma_frm_buf_base_addr_1;
        u32     dma_frm_buf_ceiling_addr_1;
+       u32     resv1;
+       u32     raw_stat;
+       u32     masked_stat;
+       u32     int_ena_set;
+       u32     int_ena_clr;
+       u32     end_of_int_ind;
+       /* Clock registers available only on Version 2 */
+       u32     clk_ena;
+       u32     clk_reset;
 };
 
 #define LCD_NUM_BUFFERS        1
@@ -107,6 +138,8 @@ struct da8xx_lcd_regs {
 #define RIGHT_MARGIN   64
 #define UPPER_MARGIN   32
 #define LOWER_MARGIN   32
+#define WAIT_FOR_FRAME_DONE    true
+#define NO_WAIT_FOR_FRAME_DONE false
 
 #define calc_fbsize() (panel.plnSizeX * panel.plnSizeY * panel.gdfBytesPP)
 
@@ -119,6 +152,8 @@ static GraphicDevice gpanel;
 static const struct da8xx_panel *lcd_panel;
 static struct fb_info *da8xx_fb_info;
 static int bits_x_pixel;
+static unsigned int lcd_revision;
+const struct lcd_ctrl_config *da8xx_lcd_cfg;
 
 static inline unsigned int lcdc_read(u32 *addr)
 {
@@ -179,35 +214,24 @@ static struct fb_fix_screeninfo da8xx_fb_fix = {
        .accel = FB_ACCEL_NONE
 };
 
-static const struct display_panel disp_panel = {
-       QVGA,
-       16,
-       16,
-       COLOR_ACTIVE,
-};
-
-static const struct lcd_ctrl_config lcd_cfg = {
-       &disp_panel,
-       .ac_bias                = 255,
-       .ac_bias_intrpt         = 0,
-       .dma_burst_sz           = 16,
-       .bpp                    = 16,
-       .fdd                    = 255,
-       .tft_alt_mode           = 0,
-       .stn_565_mode           = 0,
-       .mono_8bit_mode         = 0,
-       .invert_line_clock      = 1,
-       .invert_frm_clock       = 1,
-       .sync_edge              = 0,
-       .sync_ctrl              = 1,
-       .raster_order           = 0,
-};
-
 /* Enable the Raster Engine of the LCD Controller */
 static inline void lcd_enable_raster(void)
 {
        u32 reg;
 
+       /* Put LCDC in reset for several cycles */
+       if (lcd_revision == LCD_VERSION_2)
+               lcdc_write(LCD_CLK_MAIN_RESET,
+                          &da8xx_fb_reg_base->clk_reset);
+
+       udelay(1000);
+       /* Bring LCDC out of reset */
+       if (lcd_revision == LCD_VERSION_2)
+               lcdc_write(0,
+                          &da8xx_fb_reg_base->clk_reset);
+
+       udelay(1000);
+
        reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl);
        if (!(reg & LCD_RASTER_ENABLE))
                lcdc_write(reg | LCD_RASTER_ENABLE,
@@ -215,14 +239,40 @@ static inline void lcd_enable_raster(void)
 }
 
 /* Disable the Raster Engine of the LCD Controller */
-static inline void lcd_disable_raster(void)
+static inline void lcd_disable_raster(bool wait_for_frame_done)
 {
        u32 reg;
+       u32 loop_cnt = 0;
+       u32 stat;
+       u32 i = 0;
+
+       if (wait_for_frame_done)
+               loop_cnt = 5000;
 
        reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl);
        if (reg & LCD_RASTER_ENABLE)
                lcdc_write(reg & ~LCD_RASTER_ENABLE,
                        &da8xx_fb_reg_base->raster_ctrl);
+
+       /* Wait for the current frame to complete */
+       do {
+               if (lcd_revision == LCD_VERSION_1)
+                       stat = lcdc_read(&da8xx_fb_reg_base->stat);
+               else
+                       stat = lcdc_read(&da8xx_fb_reg_base->raw_stat);
+
+               mdelay(1);
+       } while (!(stat & 0x01) && (i++ < loop_cnt));
+
+       if (lcd_revision == LCD_VERSION_1)
+               lcdc_write(stat, &da8xx_fb_reg_base->stat);
+       else
+               lcdc_write(stat, &da8xx_fb_reg_base->raw_stat);
+
+       if ((loop_cnt != 0) && (i >= loop_cnt)) {
+               printf("LCD Controller timed out\n");
+               return;
+       }
 }
 
 static void lcd_blit(int load_mode, struct da8xx_fb_par *par)
@@ -231,6 +281,7 @@ static void lcd_blit(int load_mode, struct da8xx_fb_par *par)
        u32 end;
        u32 reg_ras;
        u32 reg_dma;
+       u32 reg_int;
 
        /* init reg to clear PLM (loading mode) fields */
        reg_ras = lcdc_read(&da8xx_fb_reg_base->raster_ctrl);
@@ -243,7 +294,15 @@ static void lcd_blit(int load_mode, struct da8xx_fb_par *par)
                end      = par->dma_end;
 
                reg_ras |= LCD_PALETTE_LOAD_MODE(DATA_ONLY);
-               reg_dma |= LCD_END_OF_FRAME_INT_ENA;
+               if (lcd_revision == LCD_VERSION_1) {
+                       reg_dma |= LCD_V1_END_OF_FRAME_INT_ENA;
+               } else {
+                       reg_int = lcdc_read(&da8xx_fb_reg_base->int_ena_set) |
+                               LCD_V2_END_OF_FRAME0_INT_ENA |
+                               LCD_V2_END_OF_FRAME1_INT_ENA |
+                               LCD_V2_UNDERFLOW_INT_ENA | LCD_SYNC_LOST;
+                       lcdc_write(reg_int, &da8xx_fb_reg_base->int_ena_set);
+               }
 
 #if (LCD_NUM_BUFFERS == 2)
                reg_dma |= LCD_DUAL_FRAME_BUFFER_ENABLE;
@@ -264,7 +323,13 @@ static void lcd_blit(int load_mode, struct da8xx_fb_par *par)
                end      = start + par->palette_sz - 1;
 
                reg_ras |= LCD_PALETTE_LOAD_MODE(PALETTE_ONLY);
-               reg_ras |= LCD_PL_ENABLE;
+               if (lcd_revision == LCD_VERSION_1) {
+                       reg_ras |= LCD_V1_PL_INT_ENA;
+               } else {
+                       reg_int = lcdc_read(&da8xx_fb_reg_base->int_ena_set) |
+                               LCD_V2_PL_INT_ENA;
+                       lcdc_write(reg_int, &da8xx_fb_reg_base->int_ena_set);
+               }
 
                lcdc_write(start, &da8xx_fb_reg_base->dma_frm_buf_base_addr_0);
                lcdc_write(end, &da8xx_fb_reg_base->dma_frm_buf_ceiling_addr_0);
@@ -348,6 +413,7 @@ static void lcd_cfg_vertical_sync(int back_porch, int pulse_width,
 static int lcd_cfg_display(const struct lcd_ctrl_config *cfg)
 {
        u32 reg;
+       u32 reg_int;
 
        reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl) & ~(LCD_TFT_MODE |
                                                LCD_MONO_8BIT_MODE |
@@ -375,7 +441,13 @@ static int lcd_cfg_display(const struct lcd_ctrl_config *cfg)
        }
 
        /* enable additional interrupts here */
-       reg |= LCD_UNDERFLOW_INT_ENA;
+       if (lcd_revision == LCD_VERSION_1) {
+               reg |= LCD_V1_UNDERFLOW_INT_ENA;
+       } else {
+               reg_int = lcdc_read(&da8xx_fb_reg_base->int_ena_set) |
+                       LCD_V2_UNDERFLOW_INT_ENA;
+               lcdc_write(reg_int, &da8xx_fb_reg_base->int_ena_set);
+       }
 
        lcdc_write(reg, &da8xx_fb_reg_base->raster_ctrl);
 
@@ -413,22 +485,53 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
 
        /* Set the Panel Width */
        /* Pixels per line = (PPL + 1)*16 */
-       /*0x3F in bits 4..9 gives max horisontal resolution = 1024 pixels*/
-       width &= 0x3f0;
+       if (lcd_revision == LCD_VERSION_1) {
+               /*
+                * 0x3F in bits 4..9 gives max horisontal resolution = 1024
+                * pixels
+                */
+               width &= 0x3f0;
+       } else {
+               /*
+                * 0x7F in bits 4..10 gives max horizontal resolution = 2048
+                * pixels.
+                */
+               width &= 0x7f0;
+       }
        reg = lcdc_read(&da8xx_fb_reg_base->raster_timing_0);
        reg &= 0xfffffc00;
-       reg |= ((width >> 4) - 1) << 4;
+       if (lcd_revision == LCD_VERSION_1) {
+               reg |= ((width >> 4) - 1) << 4;
+       } else {
+               width = (width >> 4) - 1;
+               reg |= ((width & 0x3f) << 4) | ((width & 0x40) >> 3);
+       }
        lcdc_write(reg, &da8xx_fb_reg_base->raster_timing_0);
 
        /* Set the Panel Height */
+       /* Set bits 9:0 of Lines Per Pixel */
        reg = lcdc_read(&da8xx_fb_reg_base->raster_timing_1);
        reg = ((height - 1) & 0x3ff) | (reg & 0xfffffc00);
        lcdc_write(reg, &da8xx_fb_reg_base->raster_timing_1);
 
+       /* Set bit 10 of Lines Per Pixel */
+       if (lcd_revision == LCD_VERSION_2) {
+               reg = lcdc_read(&da8xx_fb_reg_base->raster_timing_2);
+               reg |= ((height - 1) & 0x400) << 16;
+               lcdc_write(reg, &da8xx_fb_reg_base->raster_timing_2);
+       }
+
        /* Set the Raster Order of the Frame Buffer */
        reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl) & ~(1 << 8);
        if (raster_order)
                reg |= LCD_RASTER_ORDER;
+
+       if (bpp == 24)
+               reg |= (LCD_TFT_MODE | LCD_V2_TFT_24BPP_MODE);
+       else if (bpp == 32)
+               reg |= (LCD_TFT_MODE | LCD_V2_TFT_24BPP_MODE
+                               | LCD_V2_TFT_24BPP_UNPACK);
+
        lcdc_write(reg, &da8xx_fb_reg_base->raster_ctrl);
 
        switch (bpp) {
@@ -436,6 +539,8 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
        case 2:
        case 4:
        case 16:
+       case 24:
+       case 32:
                par->palette_sz = 16 * 2;
                break;
 
@@ -490,6 +595,23 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
 
                par->pseudo_palette[regno] = red | green | blue;
 
+               if (palette[0] != 0x4000) {
+                       update_hw = 1;
+                       palette[0] = 0x4000;
+               }
+       } else if (((info->var.bits_per_pixel == 32) && regno < 32) ||
+                  ((info->var.bits_per_pixel == 24) && regno < 24)) {
+               red >>= (24 - info->var.red.length);
+               red <<= info->var.red.offset;
+
+               green >>= (24 - info->var.green.length);
+               green <<= info->var.green.offset;
+
+               blue >>= (24 - info->var.blue.length);
+               blue <<= info->var.blue.offset;
+
+               par->pseudo_palette[regno] = red | green | blue;
+
                if (palette[0] != 0x4000) {
                        update_hw = 1;
                        palette[0] = 0x4000;
@@ -506,11 +628,18 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static void lcd_reset(struct da8xx_fb_par *par)
 {
        /* Disable the Raster if previously Enabled */
-       lcd_disable_raster();
+       lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);
 
        /* DMA has to be disabled */
        lcdc_write(0, &da8xx_fb_reg_base->dma_ctrl);
        lcdc_write(0, &da8xx_fb_reg_base->raster_ctrl);
+
+       if (lcd_revision == LCD_VERSION_2) {
+               lcdc_write(0, &da8xx_fb_reg_base->int_ena_set);
+               /* Write 1 to reset */
+               lcdc_write(LCD_CLK_MAIN_RESET, &da8xx_fb_reg_base->clk_reset);
+               lcdc_write(0, &da8xx_fb_reg_base->clk_reset);
+       }
 }
 
 static void lcd_calc_clk_divider(struct da8xx_fb_par *par)
@@ -521,12 +650,17 @@ static void lcd_calc_clk_divider(struct da8xx_fb_par *par)
        lcd_clk = clk_get(2);
 
        div = lcd_clk / par->pxl_clk;
-       debug("LCD Clock: 0x%x Divider: 0x%x PixClk: 0x%x\n",
-               lcd_clk, div, par->pxl_clk);
+       debug("LCD Clock: %d Divider: %d PixClk: %d\n",
+             lcd_clk, div, par->pxl_clk);
 
        /* Configure the LCD clock divisor. */
        lcdc_write(LCD_CLK_DIVISOR(div) |
                        (LCD_RASTER_MODE & 0x1), &da8xx_fb_reg_base->ctrl);
+
+       if (lcd_revision == LCD_VERSION_2)
+               lcdc_write(LCD_V2_DMA_CLK_EN | LCD_V2_LIDD_CLK_EN |
+                               LCD_V2_CORE_CLK_EN,
+                               &da8xx_fb_reg_base->clk_ena);
 }
 
 static int lcd_init(struct da8xx_fb_par *par, const struct lcd_ctrl_config *cfg,
@@ -566,7 +700,8 @@ static int lcd_init(struct da8xx_fb_par *par, const struct lcd_ctrl_config *cfg,
        if (ret < 0)
                return ret;
 
-       if (QVGA != cfg->p_disp_panel->panel_type)
+       if ((QVGA != cfg->p_disp_panel->panel_type) &&
+           (WVGA != cfg->p_disp_panel->panel_type))
                return -EINVAL;
 
        if (cfg->bpp <= cfg->p_disp_panel->max_bpp &&
@@ -602,7 +737,7 @@ static void lcdc_dma_start(void)
                &da8xx_fb_reg_base->dma_frm_buf_ceiling_addr_1);
 }
 
-static u32 lcdc_irq_handler(void)
+static u32 lcdc_irq_handler_rev01(void)
 {
        struct da8xx_fb_par *par = da8xx_fb_info->par;
        u32 stat = lcdc_read(&da8xx_fb_reg_base->stat);
@@ -610,7 +745,7 @@ static u32 lcdc_irq_handler(void)
 
        if ((stat & LCD_SYNC_LOST) && (stat & LCD_FIFO_UNDERFLOW)) {
                debug("LCD_SYNC_LOST\n");
-               lcd_disable_raster();
+               lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);
                lcdc_write(stat, &da8xx_fb_reg_base->stat);
                lcd_enable_raster();
                return LCD_SYNC_LOST;
@@ -622,13 +757,13 @@ static u32 lcdc_irq_handler(void)
                 * interrupt via the following write to the status register. If
                 * this is done after then one gets multiple PL done interrupts.
                 */
-               lcd_disable_raster();
+               lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);
 
                lcdc_write(stat, &da8xx_fb_reg_base->stat);
 
                /* Disable PL completion inerrupt */
                reg_ras  = lcdc_read(&da8xx_fb_reg_base->raster_ctrl);
-               reg_ras &= ~LCD_PL_ENABLE;
+               reg_ras &= ~LCD_V1_PL_INT_ENA;
                lcdc_write(reg_ras, &da8xx_fb_reg_base->raster_ctrl);
 
                /* Setup and start data loading mode */
@@ -650,6 +785,66 @@ static u32 lcdc_irq_handler(void)
        return stat;
 }
 
+static u32 lcdc_irq_handler_rev02(void)
+{
+       struct da8xx_fb_par *par = da8xx_fb_info->par;
+       u32 stat = lcdc_read(&da8xx_fb_reg_base->masked_stat);
+       u32 reg_int;
+
+       if ((stat & LCD_SYNC_LOST) && (stat & LCD_FIFO_UNDERFLOW)) {
+               debug("LCD_SYNC_LOST\n");
+               lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);
+               lcdc_write(stat, &da8xx_fb_reg_base->masked_stat);
+               lcd_enable_raster();
+               lcdc_write(0, &da8xx_fb_reg_base->end_of_int_ind);
+               return LCD_SYNC_LOST;
+       } else if (stat & LCD_PL_LOAD_DONE) {
+               debug("LCD_PL_LOAD_DONE\n");
+               /*
+                * Must disable raster before changing state of any control bit.
+                * And also must be disabled before clearing the PL loading
+                * interrupt via the following write to the status register. If
+                * this is done after then one gets multiple PL done interrupts.
+                */
+               lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);
+
+               lcdc_write(stat, &da8xx_fb_reg_base->masked_stat);
+
+               /* Disable PL completion inerrupt */
+               reg_int  = lcdc_read(&da8xx_fb_reg_base->int_ena_clr) |
+                       (LCD_V2_PL_INT_ENA);
+               lcdc_write(reg_int, &da8xx_fb_reg_base->int_ena_clr);
+
+               /* Setup and start data loading mode */
+               lcd_blit(LOAD_DATA, par);
+               lcdc_write(0, &da8xx_fb_reg_base->end_of_int_ind);
+               return LCD_PL_LOAD_DONE;
+       } else {
+               lcdc_write(stat, &da8xx_fb_reg_base->masked_stat);
+
+               if (stat & LCD_END_OF_FRAME0)
+                       debug("LCD_END_OF_FRAME0\n");
+
+               lcdc_write(par->dma_start,
+                          &da8xx_fb_reg_base->dma_frm_buf_base_addr_0);
+               lcdc_write(par->dma_end,
+                          &da8xx_fb_reg_base->dma_frm_buf_ceiling_addr_0);
+               par->vsync_flag = 1;
+               lcdc_write(0, &da8xx_fb_reg_base->end_of_int_ind);
+               return LCD_END_OF_FRAME0;
+       }
+       lcdc_write(0, &da8xx_fb_reg_base->end_of_int_ind);
+       return stat;
+}
+
+static u32 lcdc_irq_handler(void)
+{
+       if (lcd_revision == LCD_VERSION_1)
+               return lcdc_irq_handler_rev01();
+       else
+               return lcdc_irq_handler_rev02();
+}
+
 static u32 wait_for_event(u32 event)
 {
        u32 timeout = 50000;
@@ -673,6 +868,7 @@ void *video_hw_init(void)
 {
        struct da8xx_fb_par *par;
        u32 size;
+       u32 rev;
        char *p;
 
        if (!lcd_panel) {
@@ -685,6 +881,10 @@ void *video_hw_init(void)
        gpanel.plnSizeY = lcd_panel->height;
 
        switch (bits_x_pixel) {
+       case 32:
+               gpanel.gdfBytesPP = 4;
+               gpanel.gdfIndex = GDF_32BIT_X888RGB;
+               break;
        case 24:
                gpanel.gdfBytesPP = 4;
                gpanel.gdfIndex = GDF_32BIT_X888RGB;
@@ -699,12 +899,29 @@ void *video_hw_init(void)
                break;
        }
 
-       da8xx_fb_reg_base = (struct da8xx_lcd_regs *)DAVINCI_LCD_CNTL_BASE;
+       da8xx_fb_reg_base = (struct da8xx_lcd_regs *)DA8XX_LCD_CNTL_BASE;
+
+       /* Determine LCD IP Version */
+       rev = lcdc_read(&da8xx_fb_reg_base->revid);
+       switch (rev) {
+       case 0x4C100102:
+               lcd_revision = LCD_VERSION_1;
+               break;
+       case 0x4F200800:
+       case 0x4F201000:
+               lcd_revision = LCD_VERSION_2;
+               break;
+       default:
+               printf("Unknown PID Reg value 0x%x, defaulting to LCD revision 1\n",
+                      rev);
+               lcd_revision = LCD_VERSION_1;
+               break;
+       }
 
-       debug("Resolution: %dx%d %x\n",
-               gpanel.winSizeX,
-               gpanel.winSizeY,
-               lcd_cfg.bpp);
+       debug("rev: 0x%x Resolution: %dx%d %d\n", rev,
+             gpanel.winSizeX,
+             gpanel.winSizeY,
+             da8xx_lcd_cfg->bpp);
 
        size = sizeof(struct fb_info) + sizeof(struct da8xx_fb_par);
        da8xx_fb_info = malloc(size);
@@ -722,13 +939,14 @@ void *video_hw_init(void)
        par = da8xx_fb_info->par;
        par->pxl_clk = lcd_panel->pxl_clk;
 
-       if (lcd_init(par, &lcd_cfg, lcd_panel) < 0) {
+       if (lcd_init(par, da8xx_lcd_cfg, lcd_panel) < 0) {
                printf("lcd_init failed\n");
                goto err_release_fb;
        }
 
        /* allocate frame buffer */
-       par->vram_size = lcd_panel->width * lcd_panel->height * lcd_cfg.bpp;
+       par->vram_size = lcd_panel->width * lcd_panel->height *
+                       da8xx_lcd_cfg->bpp;
        par->vram_size = par->vram_size * LCD_NUM_BUFFERS / 8;
 
        par->vram_virt = malloc(par->vram_size);
@@ -741,12 +959,13 @@ void *video_hw_init(void)
                printf("GLCD: malloc for frame buffer failed\n");
                goto err_release_fb;
        }
+       gd->fb_base = (int)par->vram_virt;
 
        gpanel.frameAdrs = (unsigned int)par->vram_virt;
        da8xx_fb_info->screen_base = (char *) par->vram_virt;
        da8xx_fb_fix.smem_start = gpanel.frameAdrs;
        da8xx_fb_fix.smem_len = par->vram_size;
-       da8xx_fb_fix.line_length = (lcd_panel->width * lcd_cfg.bpp) / 8;
+       da8xx_fb_fix.line_length = (lcd_panel->width * da8xx_lcd_cfg->bpp) / 8;
 
        par->dma_start = par->vram_phys;
        par->dma_end   = par->dma_start + lcd_panel->height *
@@ -762,7 +981,7 @@ void *video_hw_init(void)
        par->p_palette_base = (unsigned int)par->v_palette_base;
 
        /* Initialize par */
-       da8xx_fb_info->var.bits_per_pixel = lcd_cfg.bpp;
+       da8xx_fb_info->var.bits_per_pixel = da8xx_lcd_cfg->bpp;
 
        da8xx_fb_var.xres = lcd_panel->width;
        da8xx_fb_var.xres_virtual = lcd_panel->width;
@@ -771,8 +990,8 @@ void *video_hw_init(void)
        da8xx_fb_var.yres_virtual = lcd_panel->height * LCD_NUM_BUFFERS;
 
        da8xx_fb_var.grayscale =
-           lcd_cfg.p_disp_panel->panel_shade == MONOCHROME ? 1 : 0;
-       da8xx_fb_var.bits_per_pixel = lcd_cfg.bpp;
+           da8xx_lcd_cfg->p_disp_panel->panel_shade == MONOCHROME ? 1 : 0;
+       da8xx_fb_var.bits_per_pixel = da8xx_lcd_cfg->bpp;
 
        da8xx_fb_var.hsync_len = lcd_panel->hsw;
        da8xx_fb_var.vsync_len = lcd_panel->vsw;
@@ -787,8 +1006,11 @@ void *video_hw_init(void)
 
        /* Clear interrupt */
        memset((void *)par->vram_virt, 0, par->vram_size);
-       lcd_disable_raster();
-       lcdc_write(0xFFFF, &da8xx_fb_reg_base->stat);
+       lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);
+       if (lcd_revision == LCD_VERSION_1)
+               lcdc_write(0xFFFF, &da8xx_fb_reg_base->stat);
+       else
+               lcdc_write(0xFFFF, &da8xx_fb_reg_base->masked_stat);
        debug("Palette at 0x%x size %d\n", par->p_palette_base,
                par->palette_sz);
        lcdc_dma_start();
@@ -823,8 +1045,10 @@ void video_set_lut(unsigned int index,    /* color number */
        return;
 }
 
-void da8xx_video_init(const struct da8xx_panel *panel, int bits_pixel)
+void da8xx_video_init(const struct da8xx_panel *panel,
+                     const struct lcd_ctrl_config *lcd_cfg, int bits_pixel)
 {
        lcd_panel = panel;
+       da8xx_lcd_cfg = lcd_cfg;
        bits_x_pixel = bits_pixel;
 }
similarity index 94%
rename from arch/arm/include/asm/arch-davinci/da8xx-fb.h
rename to drivers/video/da8xx-fb.h
index c115034f061844f7e418b298a3aaeafdb1bd6bcf..6447a4047de204259d6c9ab15b63770ff53aaaee 100644 (file)
@@ -17,7 +17,8 @@
 #define DA8XX_FB_H
 
 enum panel_type {
-       QVGA = 0
+       QVGA = 0,
+       WVGA
 };
 
 enum panel_shade {
@@ -108,6 +109,8 @@ struct lcd_sync_arg {
        int pulse_width;
 };
 
-void da8xx_video_init(const struct da8xx_panel *panel, int bits_pixel);
+void da8xx_video_init(const struct da8xx_panel *panel,
+                     const struct lcd_ctrl_config *lcd_cfg,
+                     int bits_pixel);
 
 #endif  /* ifndef DA8XX_FB_H */
index 2cc847f6e12869e3e270e3f3765e07baaafb56ac..97e12484fd126d473f0774dbf9b8ff31c81af839 100644 (file)
@@ -50,7 +50,7 @@ static unsigned int dpll_table[15] = {
 };
 
 static void exynos_mipi_dsi_long_data_wr(struct mipi_dsim_device *dsim,
-               unsigned int data0, unsigned int data1)
+               const unsigned char *data0, unsigned int data1)
 {
        unsigned int data_cnt = 0, payload = 0;
 
@@ -62,42 +62,40 @@ static void exynos_mipi_dsi_long_data_wr(struct mipi_dsim_device *dsim,
                 */
                if ((data1 - data_cnt) < 4) {
                        if ((data1 - data_cnt) == 3) {
-                               payload = *(u8 *)(data0 + data_cnt) |
-                                       (*(u8 *)(data0 + (data_cnt + 1))) << 8 |
-                                       (*(u8 *)(data0 + (data_cnt + 2))) << 16;
+                               payload = data0[data_cnt] |
+                                       data0[data_cnt + 1] << 8 |
+                                       data0[data_cnt + 2] << 16;
                        debug("count = 3 payload = %x, %x %x %x\n",
-                               payload, *(u8 *)(data0 + data_cnt),
-                               *(u8 *)(data0 + (data_cnt + 1)),
-                               *(u8 *)(data0 + (data_cnt + 2)));
+                               payload, data0[data_cnt],
+                               data0[data_cnt + 1],
+                               data0[data_cnt + 2]);
                        } else if ((data1 - data_cnt) == 2) {
-                               payload = *(u8 *)(data0 + data_cnt) |
-                                       (*(u8 *)(data0 + (data_cnt + 1))) << 8;
+                               payload = data0[data_cnt] |
+                                       data0[data_cnt + 1] << 8;
                        debug("count = 2 payload = %x, %x %x\n", payload,
-                               *(u8 *)(data0 + data_cnt),
-                               *(u8 *)(data0 + (data_cnt + 1)));
+                               data0[data_cnt], data0[data_cnt + 1]);
                        } else if ((data1 - data_cnt) == 1) {
-                               payload = *(u8 *)(data0 + data_cnt);
+                               payload = data0[data_cnt];
                        }
                } else {
                        /* send 4bytes per one time. */
-                       payload = *(u8 *)(data0 + data_cnt) |
-                               (*(u8 *)(data0 + (data_cnt + 1))) << 8 |
-                               (*(u8 *)(data0 + (data_cnt + 2))) << 16 |
-                               (*(u8 *)(data0 + (data_cnt + 3))) << 24;
+                       payload = data0[data_cnt] |
+                               data0[data_cnt + 1] << 8 |
+                               data0[data_cnt + 2] << 16 |
+                               data0[data_cnt + 3] << 24;
 
                        debug("count = 4 payload = %x, %x %x %x %x\n",
                                payload, *(u8 *)(data0 + data_cnt),
-                               *(u8 *)(data0 + (data_cnt + 1)),
-                               *(u8 *)(data0 + (data_cnt + 2)),
-                               *(u8 *)(data0 + (data_cnt + 3)));
-
+                               data0[data_cnt + 1],
+                               data0[data_cnt + 2],
+                               data0[data_cnt + 3]);
                }
                exynos_mipi_dsi_wr_tx_data(dsim, payload);
        }
 }
 
 int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
-       unsigned int data0, unsigned int data1)
+       const unsigned char *data0, unsigned int data1)
 {
        unsigned int timeout = TRY_GET_FIFO_TIMEOUT;
        unsigned long delay_val, delay;
@@ -136,8 +134,8 @@ int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
        case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
        case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:
                debug("data0 = %x data1 = %x\n",
-                               data0, data1);
-               exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+                               data0[0], data0[1]);
+               exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);
                if (check_rx_ack) {
                        /* process response func should be implemented */
                        return 0;
@@ -150,7 +148,7 @@ int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
        case MIPI_DSI_COLOR_MODE_ON:
        case MIPI_DSI_SHUTDOWN_PERIPHERAL:
        case MIPI_DSI_TURN_ON_PERIPHERAL:
-               exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+               exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);
                if (check_rx_ack) {
                        /* process response func should be implemented. */
                        return 0;
@@ -172,7 +170,7 @@ int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
        case MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM:
        case MIPI_DSI_DCS_READ:
                exynos_mipi_dsi_clear_all_interrupt(dsim);
-               exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+               exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);
                /* process response func should be implemented. */
                return 0;
 
@@ -183,21 +181,19 @@ int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
        case MIPI_DSI_GENERIC_LONG_WRITE:
        case MIPI_DSI_DCS_LONG_WRITE:
        {
-               unsigned int data_cnt = 0, payload = 0;
+               unsigned int payload = 0;
 
                /* if data count is less then 4, then send 3bytes data.  */
                if (data1 < 4) {
-                       payload = *(u8 *)(data0) |
-                               *(u8 *)(data0 + 1) << 8 |
-                               *(u8 *)(data0 + 2) << 16;
+                       payload = data0[0] |
+                               data0[1] << 8 |
+                               data0[2] << 16;
 
                        exynos_mipi_dsi_wr_tx_data(dsim, payload);
 
                        debug("count = %d payload = %x,%x %x %x\n",
-                               data1, payload,
-                               *(u8 *)(data0 + data_cnt),
-                               *(u8 *)(data0 + (data_cnt + 1)),
-                               *(u8 *)(data0 + (data_cnt + 2)));
+                               data1, payload, data0[0],
+                               data0[1], data0[2]);
                } else {
                        /* in case that data count is more then 4 */
                        exynos_mipi_dsi_long_data_wr(dsim, data0, data1);
index 318c7ecec331b3893169ca2048996cb17cb49495..ef6510abdd8997484015447a2ff6f9d5fc721e78 100644 (file)
@@ -13,7 +13,7 @@
 #define _EXYNOS_MIPI_DSI_COMMON_H
 
 int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
-       unsigned int data0, unsigned int data1);
+       const unsigned char *data0, unsigned int data1);
 int exynos_mipi_dsi_pll_on(struct mipi_dsim_device *dsim, unsigned int enable);
 unsigned long exynos_mipi_dsi_change_pll(struct mipi_dsim_device *dsim,
        unsigned int pre_divider, unsigned int main_divider,
index b47eee45defc7ededb639df607f00ba92edb7fc9..1313bcea4cfe88a7625ec978c0e77bee2426cff5 100644 (file)
@@ -600,7 +600,7 @@ unsigned int exynos_mipi_dsi_get_fifo_state(struct mipi_dsim_device *dsim)
 }
 
 void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim,
-       unsigned int di, unsigned int data0, unsigned int data1)
+       unsigned int di, const unsigned char data0, const unsigned char data1)
 {
        struct exynos_mipi_dsim *mipi_dsim =
                (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
index 8a45954e9eee078189b19afeacfb2dfe63f9f031..59f6ce09e40ce51dafebbe74a215ba343c883ae9 100644 (file)
@@ -91,7 +91,7 @@ unsigned int _exynos_mipi_dsi_get_frame_done_status(struct mipi_dsim_device
                                                *dsim);
 void _exynos_mipi_dsi_clear_frame_done(struct mipi_dsim_device *dsim);
 void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim,
-               unsigned int di, unsigned int data0, unsigned int data1);
+               unsigned int di, const unsigned char data0, const unsigned char data1);
 void exynos_mipi_dsi_wr_tx_data(struct mipi_dsim_device *dsim,
                unsigned int tx_data);
 
diff --git a/drivers/video/formike.c b/drivers/video/formike.c
new file mode 100644 (file)
index 0000000..b9b6822
--- /dev/null
@@ -0,0 +1,511 @@
+/*
+ * LCD: Formike, TFT 4.3", 480x800, RGB24, KWH043ST20-F01, DriverIC NT35510-16
+ * LCD initialization via SPI
+ *
+ * SPDX-License-Identifier:    GPL-2.0
+ * Based on:
+ *
+ */
+#include <common.h>
+#include <errno.h>
+#include <spi.h>
+
+#define TAG_READ       0x80
+#define TAG_WRITE      0x00
+
+#define TAG_DATA       0x40
+#define TAG_COMMAND    0x00
+
+#define TAG_ADDR_H     0x20
+#define TAG_ADDR_L     0x00
+
+static int spi_write_tag_val(struct spi_slave *spi, unsigned char tag,
+                            unsigned char val)
+{
+       unsigned long flags = SPI_XFER_BEGIN;
+       u8 buf[2];
+       int ret;
+
+       buf[0] = tag;
+       buf[1] = val;
+       flags |= SPI_XFER_END;
+
+       ret = spi_xfer(spi, 16, buf, NULL, flags);
+#ifdef KWH043ST20_F01_SPI_DEBUG
+       printf("spi_write_tag_val: tag=%02X, val=%02X ret: %d\n",
+              tag, val, ret);
+#endif /* KWH043ST20_F01_SPI_DEBUG */
+       if (ret)
+               debug("%s: Failed to send: %d\n", __func__, ret);
+
+       return ret;
+}
+
+static void spi_write_dat(struct spi_slave *spi, unsigned int val)
+{
+       spi_write_tag_val(spi, TAG_WRITE|TAG_DATA, val);
+}
+
+static void spi_write_com(struct spi_slave *spi, unsigned int addr)
+{
+       spi_write_tag_val(spi, TAG_WRITE|TAG_COMMAND|TAG_ADDR_H,
+                         (addr & 0xff00) >> 8);
+       spi_write_tag_val(spi, TAG_WRITE|TAG_COMMAND|TAG_ADDR_L,
+                         (addr & 0x00ff) >> 0);
+}
+
+int kwh043st20_f01_spi_startup(unsigned int bus, unsigned int cs,
+       unsigned int max_hz, unsigned int spi_mode)
+{
+       struct spi_slave *spi;
+       int ret;
+
+       spi = spi_setup_slave(bus, cs, max_hz, spi_mode);
+       if (!spi) {
+               debug("%s: Failed to set up slave\n", __func__);
+               return -1;
+       }
+
+       ret = spi_claim_bus(spi);
+       if (ret) {
+               debug("%s: Failed to claim SPI bus: %d\n", __func__, ret);
+               goto err_claim_bus;
+       }
+
+
+       /* LV2 Page 1 enable */
+       spi_write_com(spi, 0xF000);     spi_write_dat(spi, 0x55);
+       spi_write_com(spi, 0xF001);     spi_write_dat(spi, 0xAA);
+       spi_write_com(spi, 0xF002);     spi_write_dat(spi, 0x52);
+       spi_write_com(spi, 0xF003);     spi_write_dat(spi, 0x08);
+       spi_write_com(spi, 0xF004);     spi_write_dat(spi, 0x01);
+
+       /* AVDD Set AVDD 5.2V */
+       spi_write_com(spi, 0xB000);     spi_write_dat(spi, 0x0D);
+       spi_write_com(spi, 0xB001);     spi_write_dat(spi, 0x0D);
+       spi_write_com(spi, 0xB002);     spi_write_dat(spi, 0x0D);
+
+       /* AVDD ratio */
+       spi_write_com(spi, 0xB600);     spi_write_dat(spi, 0x34);
+       spi_write_com(spi, 0xB601);     spi_write_dat(spi, 0x34);
+       spi_write_com(spi, 0xB602);     spi_write_dat(spi, 0x34);
+
+       /* AVEE  -5.2V */
+       spi_write_com(spi, 0xB100);     spi_write_dat(spi, 0x0D);
+       spi_write_com(spi, 0xB101);     spi_write_dat(spi, 0x0D);
+       spi_write_com(spi, 0xB102);     spi_write_dat(spi, 0x0D);
+
+       /* AVEE ratio */
+       spi_write_com(spi, 0xB700);     spi_write_dat(spi, 0x35);
+       spi_write_com(spi, 0xB701);     spi_write_dat(spi, 0x35);
+       spi_write_com(spi, 0xB702);     spi_write_dat(spi, 0x35);
+
+       /* VCL  -2.5V */
+       spi_write_com(spi, 0xB200);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xB201);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xB202);     spi_write_dat(spi, 0x00);
+
+       /* VCL ratio */
+       spi_write_com(spi, 0xB800);     spi_write_dat(spi, 0x24);
+       spi_write_com(spi, 0xB801);     spi_write_dat(spi, 0x24);
+       spi_write_com(spi, 0xB802);     spi_write_dat(spi, 0x24);
+
+       /* VGH 15V */
+       spi_write_com(spi, 0xBF00);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xB300);     spi_write_dat(spi, 0x08);
+       spi_write_com(spi, 0xB301);     spi_write_dat(spi, 0x08);
+       spi_write_com(spi, 0xB302);     spi_write_dat(spi, 0x08);
+
+       /* VGH ratio */
+       spi_write_com(spi, 0xB900);     spi_write_dat(spi, 0x34);
+       spi_write_com(spi, 0xB901);     spi_write_dat(spi, 0x34);
+       spi_write_com(spi, 0xB902);     spi_write_dat(spi, 0x34);
+
+       /* VGLX ratio */
+       spi_write_com(spi, 0xBA00);     spi_write_dat(spi, 0x24);
+       spi_write_com(spi, 0xBA01);     spi_write_dat(spi, 0x24);
+       spi_write_com(spi, 0xBA02);     spi_write_dat(spi, 0x24);
+
+       /* VGMP/VGSP 4.7V/0V */
+       spi_write_com(spi, 0xBC00);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xBC01);     spi_write_dat(spi, 0x88);
+       spi_write_com(spi, 0xBC02);     spi_write_dat(spi, 0x00);
+
+       /* VGMN/VGSN -4.7V/0V */
+       spi_write_com(spi, 0xBD00);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xBD01);     spi_write_dat(spi, 0x88);
+       spi_write_com(spi, 0xBD02);     spi_write_dat(spi, 0x00);
+
+       /* VCOM 1.525V */
+       spi_write_com(spi, 0xBE00);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xBE01);     spi_write_dat(spi, 0x7A);
+
+       /* Gamma Setting */
+       spi_write_com(spi, 0xD100);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD101);     spi_write_dat(spi, 0x05);
+       spi_write_com(spi, 0xD102);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD103);     spi_write_dat(spi, 0x15);
+       spi_write_com(spi, 0xD104);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD105);     spi_write_dat(spi, 0x30);
+       spi_write_com(spi, 0xD106);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD107);     spi_write_dat(spi, 0x47);
+       spi_write_com(spi, 0xD108);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD109);     spi_write_dat(spi, 0x5B);
+       spi_write_com(spi, 0xD10A);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD10B);     spi_write_dat(spi, 0x7D);
+       spi_write_com(spi, 0xD10C);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD10D);     spi_write_dat(spi, 0x9D);
+       spi_write_com(spi, 0xD10E);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD10F);     spi_write_dat(spi, 0xCC);
+       spi_write_com(spi, 0xD110);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD111);     spi_write_dat(spi, 0xF3);
+       spi_write_com(spi, 0xD112);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD113);     spi_write_dat(spi, 0x32);
+       spi_write_com(spi, 0xD114);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD115);     spi_write_dat(spi, 0x63);
+       spi_write_com(spi, 0xD116);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD117);     spi_write_dat(spi, 0xB1);
+       spi_write_com(spi, 0xD118);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD119);     spi_write_dat(spi, 0xF0);
+       spi_write_com(spi, 0xD11A);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD11B);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD11C);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD11D);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD11E);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD11F);     spi_write_dat(spi, 0x67);
+       spi_write_com(spi, 0xD120);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD121);     spi_write_dat(spi, 0x90);
+       spi_write_com(spi, 0xD122);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD123);     spi_write_dat(spi, 0xCB);
+       spi_write_com(spi, 0xD124);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD125);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD126);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD127);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD128);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD129);     spi_write_dat(spi, 0x51);
+       spi_write_com(spi, 0xD12A);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD12B);     spi_write_dat(spi, 0x80);
+       spi_write_com(spi, 0xD12C);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD12D);     spi_write_dat(spi, 0x9F);
+       spi_write_com(spi, 0xD12E);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD12F);     spi_write_dat(spi, 0xBE);
+       spi_write_com(spi, 0xD130);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD131);     spi_write_dat(spi, 0xF9);
+       spi_write_com(spi, 0xD132);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD133);     spi_write_dat(spi, 0xFF);
+
+       spi_write_com(spi, 0xD200);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD201);     spi_write_dat(spi, 0x05);
+       spi_write_com(spi, 0xD202);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD203);     spi_write_dat(spi, 0x15);
+       spi_write_com(spi, 0xD204);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD205);     spi_write_dat(spi, 0x30);
+       spi_write_com(spi, 0xD206);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD207);     spi_write_dat(spi, 0x47);
+       spi_write_com(spi, 0xD208);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD209);     spi_write_dat(spi, 0x5B);
+       spi_write_com(spi, 0xD20A);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD20B);     spi_write_dat(spi, 0x7D);
+       spi_write_com(spi, 0xD20C);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD20D);     spi_write_dat(spi, 0x9D);
+       spi_write_com(spi, 0xD20E);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD20F);     spi_write_dat(spi, 0xCC);
+       spi_write_com(spi, 0xD210);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD211);     spi_write_dat(spi, 0xF3);
+       spi_write_com(spi, 0xD212);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD213);     spi_write_dat(spi, 0x32);
+       spi_write_com(spi, 0xD214);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD215);     spi_write_dat(spi, 0x63);
+       spi_write_com(spi, 0xD216);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD217);     spi_write_dat(spi, 0xB1);
+       spi_write_com(spi, 0xD218);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD219);     spi_write_dat(spi, 0xF0);
+       spi_write_com(spi, 0xD21A);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD21B);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD21C);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD21D);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD21E);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD21F);     spi_write_dat(spi, 0x67);
+       spi_write_com(spi, 0xD220);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD221);     spi_write_dat(spi, 0x90);
+       spi_write_com(spi, 0xD222);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD223);     spi_write_dat(spi, 0xCB);
+       spi_write_com(spi, 0xD224);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD225);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD226);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD227);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD228);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD229);     spi_write_dat(spi, 0x51);
+       spi_write_com(spi, 0xD22A);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD22B);     spi_write_dat(spi, 0x80);
+       spi_write_com(spi, 0xD22C);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD22D);     spi_write_dat(spi, 0x9F);
+       spi_write_com(spi, 0xD22E);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD22F);     spi_write_dat(spi, 0xBE);
+       spi_write_com(spi, 0xD230);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD231);     spi_write_dat(spi, 0xF9);
+       spi_write_com(spi, 0xD232);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD233);     spi_write_dat(spi, 0xFF);
+
+       spi_write_com(spi, 0xD300);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD301);     spi_write_dat(spi, 0x05);
+       spi_write_com(spi, 0xD302);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD303);     spi_write_dat(spi, 0x15);
+       spi_write_com(spi, 0xD304);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD305);     spi_write_dat(spi, 0x30);
+       spi_write_com(spi, 0xD306);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD307);     spi_write_dat(spi, 0x47);
+       spi_write_com(spi, 0xD308);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD309);     spi_write_dat(spi, 0x5B);
+       spi_write_com(spi, 0xD30A);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD30B);     spi_write_dat(spi, 0x7D);
+       spi_write_com(spi, 0xD30C);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD30D);     spi_write_dat(spi, 0x9D);
+       spi_write_com(spi, 0xD30E);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD30F);     spi_write_dat(spi, 0xCC);
+       spi_write_com(spi, 0xD310);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD311);     spi_write_dat(spi, 0xF3);
+       spi_write_com(spi, 0xD312);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD313);     spi_write_dat(spi, 0x32);
+       spi_write_com(spi, 0xD314);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD315);     spi_write_dat(spi, 0x63);
+       spi_write_com(spi, 0xD316);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD317);     spi_write_dat(spi, 0xB1);
+       spi_write_com(spi, 0xD318);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD319);     spi_write_dat(spi, 0xF0);
+       spi_write_com(spi, 0xD31A);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD31B);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD31C);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD31D);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD31E);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD31F);     spi_write_dat(spi, 0x67);
+       spi_write_com(spi, 0xD320);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD321);     spi_write_dat(spi, 0x90);
+       spi_write_com(spi, 0xD322);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD323);     spi_write_dat(spi, 0xCB);
+       spi_write_com(spi, 0xD324);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD325);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD326);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD327);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD328);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD329);     spi_write_dat(spi, 0x51);
+       spi_write_com(spi, 0xD32A);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD32B);     spi_write_dat(spi, 0x80);
+       spi_write_com(spi, 0xD32C);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD32D);     spi_write_dat(spi, 0x9F);
+       spi_write_com(spi, 0xD32E);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD32F);     spi_write_dat(spi, 0xBE);
+       spi_write_com(spi, 0xD330);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD331);     spi_write_dat(spi, 0xF9);
+       spi_write_com(spi, 0xD332);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD333);     spi_write_dat(spi, 0xFF);
+
+       spi_write_com(spi, 0xD400);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD401);     spi_write_dat(spi, 0x05);
+       spi_write_com(spi, 0xD402);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD403);     spi_write_dat(spi, 0x15);
+       spi_write_com(spi, 0xD404);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD405);     spi_write_dat(spi, 0x30);
+       spi_write_com(spi, 0xD406);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD407);     spi_write_dat(spi, 0x47);
+       spi_write_com(spi, 0xD408);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD409);     spi_write_dat(spi, 0x5B);
+       spi_write_com(spi, 0xD40A);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD40B);     spi_write_dat(spi, 0x7D);
+       spi_write_com(spi, 0xD40C);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD40D);     spi_write_dat(spi, 0x9D);
+       spi_write_com(spi, 0xD40E);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD40F);     spi_write_dat(spi, 0xCC);
+       spi_write_com(spi, 0xD410);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD411);     spi_write_dat(spi, 0xF3);
+       spi_write_com(spi, 0xD412);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD413);     spi_write_dat(spi, 0x32);
+       spi_write_com(spi, 0xD414);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD415);     spi_write_dat(spi, 0x63);
+       spi_write_com(spi, 0xD416);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD417);     spi_write_dat(spi, 0xB1);
+       spi_write_com(spi, 0xD418);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD419);     spi_write_dat(spi, 0xF0);
+       spi_write_com(spi, 0xD41A);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD41B);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD41C);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD41D);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD41E);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD41F);     spi_write_dat(spi, 0x67);
+       spi_write_com(spi, 0xD420);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD421);     spi_write_dat(spi, 0x90);
+       spi_write_com(spi, 0xD422);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD423);     spi_write_dat(spi, 0xCB);
+       spi_write_com(spi, 0xD424);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD425);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD426);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD427);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD428);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD429);     spi_write_dat(spi, 0x51);
+       spi_write_com(spi, 0xD42A);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD42B);     spi_write_dat(spi, 0x80);
+       spi_write_com(spi, 0xD42C);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD42D);     spi_write_dat(spi, 0x9F);
+       spi_write_com(spi, 0xD42E);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD42F);     spi_write_dat(spi, 0xBE);
+       spi_write_com(spi, 0xD430);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD431);     spi_write_dat(spi, 0xF9);
+       spi_write_com(spi, 0xD432);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD433);     spi_write_dat(spi, 0xFF);
+
+       spi_write_com(spi, 0xD500);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD501);     spi_write_dat(spi, 0x05);
+       spi_write_com(spi, 0xD502);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD503);     spi_write_dat(spi, 0x15);
+       spi_write_com(spi, 0xD504);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD505);     spi_write_dat(spi, 0x30);
+       spi_write_com(spi, 0xD506);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD507);     spi_write_dat(spi, 0x47);
+       spi_write_com(spi, 0xD508);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD509);     spi_write_dat(spi, 0x5B);
+       spi_write_com(spi, 0xD50A);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD50B);     spi_write_dat(spi, 0x7D);
+       spi_write_com(spi, 0xD50C);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD50D);     spi_write_dat(spi, 0x9D);
+       spi_write_com(spi, 0xD50E);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD50F);     spi_write_dat(spi, 0xCC);
+       spi_write_com(spi, 0xD510);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD511);     spi_write_dat(spi, 0xF3);
+       spi_write_com(spi, 0xD512);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD513);     spi_write_dat(spi, 0x32);
+       spi_write_com(spi, 0xD514);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD515);     spi_write_dat(spi, 0x63);
+       spi_write_com(spi, 0xD516);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD517);     spi_write_dat(spi, 0xB1);
+       spi_write_com(spi, 0xD518);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD519);     spi_write_dat(spi, 0xF0);
+       spi_write_com(spi, 0xD51A);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD51B);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD51C);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD51D);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD51E);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD51F);     spi_write_dat(spi, 0x67);
+       spi_write_com(spi, 0xD520);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD521);     spi_write_dat(spi, 0x90);
+       spi_write_com(spi, 0xD522);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD523);     spi_write_dat(spi, 0xCB);
+       spi_write_com(spi, 0xD524);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD525);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD526);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD527);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD528);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD529);     spi_write_dat(spi, 0x51);
+       spi_write_com(spi, 0xD52A);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD52B);     spi_write_dat(spi, 0x80);
+       spi_write_com(spi, 0xD52C);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD52D);     spi_write_dat(spi, 0x9F);
+       spi_write_com(spi, 0xD52E);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD52F);     spi_write_dat(spi, 0xBE);
+       spi_write_com(spi, 0xD530);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD531);     spi_write_dat(spi, 0xF9);
+       spi_write_com(spi, 0xD532);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD533);     spi_write_dat(spi, 0xFF);
+
+       spi_write_com(spi, 0xD600);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD601);     spi_write_dat(spi, 0x05);
+       spi_write_com(spi, 0xD602);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD603);     spi_write_dat(spi, 0x15);
+       spi_write_com(spi, 0xD604);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD605);     spi_write_dat(spi, 0x30);
+       spi_write_com(spi, 0xD606);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD607);     spi_write_dat(spi, 0x47);
+       spi_write_com(spi, 0xD608);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD609);     spi_write_dat(spi, 0x5B);
+       spi_write_com(spi, 0xD60A);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD60B);     spi_write_dat(spi, 0x7D);
+       spi_write_com(spi, 0xD60C);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD60D);     spi_write_dat(spi, 0x9D);
+       spi_write_com(spi, 0xD60E);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD60F);     spi_write_dat(spi, 0xCC);
+       spi_write_com(spi, 0xD610);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xD611);     spi_write_dat(spi, 0xF3);
+       spi_write_com(spi, 0xD612);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD613);     spi_write_dat(spi, 0x32);
+       spi_write_com(spi, 0xD614);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD615);     spi_write_dat(spi, 0x63);
+       spi_write_com(spi, 0xD616);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD617);     spi_write_dat(spi, 0xB1);
+       spi_write_com(spi, 0xD618);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD619);     spi_write_dat(spi, 0xF0);
+       spi_write_com(spi, 0xD61A);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xD61B);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD61C);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD61D);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD61E);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD61F);     spi_write_dat(spi, 0x67);
+       spi_write_com(spi, 0xD620);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD621);     spi_write_dat(spi, 0x90);
+       spi_write_com(spi, 0xD622);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD623);     spi_write_dat(spi, 0xCB);
+       spi_write_com(spi, 0xD624);     spi_write_dat(spi, 0x02);
+       spi_write_com(spi, 0xD625);     spi_write_dat(spi, 0xF2);
+       spi_write_com(spi, 0xD626);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD627);     spi_write_dat(spi, 0x2A);
+       spi_write_com(spi, 0xD628);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD629);     spi_write_dat(spi, 0x51);
+       spi_write_com(spi, 0xD62A);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD62B);     spi_write_dat(spi, 0x80);
+       spi_write_com(spi, 0xD62C);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD62D);     spi_write_dat(spi, 0x9F);
+       spi_write_com(spi, 0xD62E);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD62F);     spi_write_dat(spi, 0xBE);
+       spi_write_com(spi, 0xD630);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD631);     spi_write_dat(spi, 0xF9);
+       spi_write_com(spi, 0xD632);     spi_write_dat(spi, 0x03);
+       spi_write_com(spi, 0xD633);     spi_write_dat(spi, 0xFF);
+
+       /* LV2 Page 0 enable */
+       spi_write_com(spi, 0xF000);     spi_write_dat(spi, 0x55);
+       spi_write_com(spi, 0xF001);     spi_write_dat(spi, 0xAA);
+       spi_write_com(spi, 0xF002);     spi_write_dat(spi, 0x52);
+       spi_write_com(spi, 0xF003);     spi_write_dat(spi, 0x08);
+       spi_write_com(spi, 0xF004);     spi_write_dat(spi, 0x00);
+
+       /* Display control */
+       spi_write_com(spi, 0xB100);     spi_write_dat(spi, 0xFC);
+       spi_write_com(spi, 0xB101);     spi_write_dat(spi, 0x00);
+
+       /* Source hold time */
+       spi_write_com(spi, 0xB600);     spi_write_dat(spi, 0x05);
+
+       /* Gate EQ control */
+       spi_write_com(spi, 0xB700);     spi_write_dat(spi, 0x70);
+       spi_write_com(spi, 0xB701);     spi_write_dat(spi, 0x70);
+
+       /* Source EQ control (Mode 2) */
+       spi_write_com(spi, 0xB800);     spi_write_dat(spi, 0x01);
+       spi_write_com(spi, 0xB801);     spi_write_dat(spi, 0x05);
+       spi_write_com(spi, 0xB802);     spi_write_dat(spi, 0x05);
+       spi_write_com(spi, 0xB803);     spi_write_dat(spi, 0x05);
+
+       /* Inversion mode  (Column) */
+       spi_write_com(spi, 0xBC00);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xBC01);     spi_write_dat(spi, 0x00);
+       spi_write_com(spi, 0xBC02);     spi_write_dat(spi, 0x00);
+
+       /* Timing control 8phase dual side/4H/4delay/RST_EN */
+       spi_write_com(spi, 0xC900);     spi_write_dat(spi, 0xD0);
+       spi_write_com(spi, 0xC901);     spi_write_dat(spi, 0x82);
+       spi_write_com(spi, 0xC902);     spi_write_dat(spi, 0x50);
+       spi_write_com(spi, 0xC903);     spi_write_dat(spi, 0x50);
+       spi_write_com(spi, 0xC904);     spi_write_dat(spi, 0x50);
+
+       spi_write_com(spi, 0x3A00);     spi_write_dat(spi, 0x55);
+       mdelay(120);
+       spi_write_com(spi, 0x1100);
+       mdelay(120);
+       spi_write_com(spi, 0x2900);
+       mdelay(120);
+       /* spi_write_com(spi, 0x2100);  spi_write_dat(spi, 0x00); */
+       spi_write_com(spi, 0x2C00);
+
+       return 0;
+err_claim_bus:
+       spi_free_slave(spi);
+       return -1;
+}
diff --git a/drivers/video/l5f31188.c b/drivers/video/l5f31188.c
new file mode 100644 (file)
index 0000000..3312dcf
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ * Hyungwon Hwang <human.hwang@samsung.com>
+ *
+ * SPDX-License-Identifier:      GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arch/mipi_dsim.h>
+
+#define SCAN_FROM_LEFT_TO_RIGHT 0
+#define SCAN_FROM_RIGHT_TO_LEFT 1
+#define SCAN_FROM_TOP_TO_BOTTOM 0
+#define SCAN_FROM_BOTTOM_TO_TOP 1
+
+static void l5f31188_sleep_in(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x10, 0x00);
+}
+
+static void l5f31188_sleep_out(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x11, 0x00);
+}
+
+static void l5f31188_set_gamma(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x26, 0x00);
+}
+
+static void l5f31188_display_off(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x28, 0x00);
+}
+
+static void l5f31188_display_on(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x29, 0x00);
+}
+
+static void l5f31188_ctl_memory_access(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops,
+               int h_direction, int v_direction)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x36,
+                       (((h_direction & 0x1) << 1) | (v_direction & 0x1)));
+}
+
+static void l5f31188_set_pixel_format(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x3A, 0x70);
+}
+
+static void l5f31188_write_disbv(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops, unsigned int brightness)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x51, brightness);
+}
+
+static void l5f31188_write_ctrld(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x53, 0x2C);
+}
+
+static void l5f31188_write_cabc(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops,
+                       unsigned int wm_mode)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x55, wm_mode);
+}
+
+static void l5f31188_write_cabcmb(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops, unsigned int min_brightness)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x5E,
+                       min_brightness);
+}
+
+static void l5f31188_set_extension(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       const unsigned char data_to_send[] = {
+               0xB9, 0xFF, 0x83, 0x94
+       };
+
+       ops->cmd_write(dev, MIPI_DSI_DCS_LONG_WRITE,
+                       (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void l5f31188_set_dgc_lut(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       const unsigned char data_to_send[] = {
+               0xC1, 0x01, 0x00, 0x04, 0x0E, 0x18, 0x1E, 0x26,
+               0x2F, 0x36, 0x3E, 0x47, 0x4E, 0x56, 0x5D, 0x65,
+               0x6D, 0x75, 0x7D, 0x84, 0x8C, 0x94, 0x9C, 0xA4,
+               0xAD, 0xB5, 0xBD, 0xC5, 0xCC, 0xD4, 0xDE, 0xE5,
+               0xEE, 0xF7, 0xFF, 0x3F, 0x9A, 0xCE, 0xD4, 0x21,
+               0xA1, 0x26, 0x54, 0x00, 0x00, 0x04, 0x0E, 0x19,
+               0x1F, 0x27, 0x30, 0x37, 0x40, 0x48, 0x50, 0x58,
+               0x60, 0x67, 0x6F, 0x77, 0x7F, 0x87, 0x8F, 0x97,
+               0x9F, 0xA7, 0xB0, 0xB8, 0xC0, 0xC8, 0xCE, 0xD8,
+               0xE0, 0xE7, 0xF0, 0xF7, 0xFF, 0x3C, 0xEB, 0xFD,
+               0x2F, 0x66, 0xA8, 0x2C, 0x46, 0x00, 0x00, 0x04,
+               0x0E, 0x18, 0x1E, 0x26, 0x30, 0x38, 0x41, 0x4A,
+               0x52, 0x5A, 0x62, 0x6B, 0x73, 0x7B, 0x83, 0x8C,
+               0x94, 0x9C, 0xA5, 0xAD, 0xB6, 0xBD, 0xC5, 0xCC,
+               0xD4, 0xDD, 0xE3, 0xEB, 0xF2, 0xF9, 0xFF, 0x3F,
+               0xA4, 0x8A, 0x8F, 0xC7, 0x33, 0xF5, 0xE9, 0x00
+       };
+       ops->cmd_write(dev, MIPI_DSI_DCS_LONG_WRITE,
+                       (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void l5f31188_set_tcon(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       const unsigned char data_to_send[] = {
+               0xC7, 0x00, 0x20
+       };
+       ops->cmd_write(dev, MIPI_DSI_DCS_LONG_WRITE,
+                       (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void l5f31188_set_ptba(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       const unsigned char data_to_send[] = {
+               0xBF, 0x06, 0x10
+       };
+       ops->cmd_write(dev, MIPI_DSI_DCS_LONG_WRITE,
+                       (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void l5f31188_set_eco(struct mipi_dsim_device *dev,
+               struct mipi_dsim_master_ops *ops)
+{
+       ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xC6, 0x0C);
+}
+
+static int l5f31188_panel_init(struct mipi_dsim_device *dev)
+{
+       struct mipi_dsim_master_ops *ops = dev->master_ops;
+
+       l5f31188_set_extension(dev, ops);
+       l5f31188_set_dgc_lut(dev, ops);
+
+       l5f31188_set_eco(dev, ops);
+       l5f31188_set_tcon(dev, ops);
+       l5f31188_set_ptba(dev, ops);
+       l5f31188_set_gamma(dev, ops);
+       l5f31188_ctl_memory_access(dev, ops,
+                       SCAN_FROM_LEFT_TO_RIGHT, SCAN_FROM_TOP_TO_BOTTOM);
+       l5f31188_set_pixel_format(dev, ops);
+       l5f31188_write_disbv(dev, ops, 0xFF);
+       l5f31188_write_ctrld(dev, ops);
+       l5f31188_write_cabc(dev, ops, 0x0);
+       l5f31188_write_cabcmb(dev, ops, 0x0);
+
+       l5f31188_sleep_out(dev, ops);
+
+       /* 120 msec */
+       udelay(120 * 1000);
+
+       return 0;
+}
+
+static void l5f31188_display_enable(struct mipi_dsim_device *dev)
+{
+       struct mipi_dsim_master_ops *ops = dev->master_ops;
+       l5f31188_display_on(dev, ops);
+}
+
+static struct mipi_dsim_lcd_driver l5f31188_dsim_ddi_driver = {
+       .name = "l5f31188",
+       .id = -1,
+
+       .mipi_panel_init = l5f31188_panel_init,
+       .mipi_display_on = l5f31188_display_enable,
+};
+
+void l5f31188_init(void)
+{
+       exynos_mipi_dsi_register_lcd_driver(&l5f31188_dsim_ddi_driver);
+}
index 6bf9fc5036e351edfd8ee5d4c7276be54fb6d9dd..03b0f88acfaa26cf930bbe8d6390b1b731de32b8 100644 (file)
 #include <asm/errno.h>
 #include <asm/io.h>
 
+#include <asm/imx-common/dma.h>
+
 #include "videomodes.h"
 
 #define        PS2KHZ(ps)      (1000000000UL / (ps))
 
 static GraphicDevice panel;
+struct mxs_dma_desc desc;
+
+/**
+ * mxsfb_system_setup() - Fine-tune LCDIF configuration
+ *
+ * This function is used to adjust the LCDIF configuration. This is usually
+ * needed when driving the controller in System-Mode to operate an 8080 or
+ * 6800 connected SmartLCD.
+ */
+__weak void mxsfb_system_setup(void)
+{
+}
 
 /*
  * DENX M28EVK:
@@ -75,6 +89,9 @@ static void mxs_lcd_init(GraphicDevice *panel,
 
        writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
                &regs->hw_lcdif_ctrl1);
+
+       mxsfb_system_setup();
+
        writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) | mode->xres,
                &regs->hw_lcdif_transfer_count);
 
@@ -102,8 +119,10 @@ static void mxs_lcd_init(GraphicDevice *panel,
        /* Flush FIFO first */
        writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
 
+#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM
        /* Sync signals ON */
        setbits_le32(&regs->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON);
+#endif
 
        /* FIFO cleared */
        writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_clr);
@@ -161,7 +180,8 @@ void *video_hw_init(void)
        panel.memSize = mode.xres * mode.yres * panel.gdfBytesPP;
 
        /* Allocate framebuffer */
-       fb = malloc(panel.memSize);
+       fb = memalign(ARCH_DMA_MINALIGN,
+                     roundup(panel.memSize, ARCH_DMA_MINALIGN));
        if (!fb) {
                printf("MXSFB: Error allocating framebuffer!\n");
                return NULL;
@@ -177,5 +197,28 @@ void *video_hw_init(void)
        /* Start framebuffer */
        mxs_lcd_init(&panel, &mode, bpp);
 
+#ifdef CONFIG_VIDEO_MXS_MODE_SYSTEM
+       /*
+        * If the LCD runs in system mode, the LCD refresh has to be triggered
+        * manually by setting the RUN bit in HW_LCDIF_CTRL register. To avoid
+        * having to set this bit manually after every single change in the
+        * framebuffer memory, we set up specially crafted circular DMA, which
+        * sets the RUN bit, then waits until it gets cleared and repeats this
+        * infinitelly. This way, we get smooth continuous updates of the LCD.
+        */
+       struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
+
+       memset(&desc, 0, sizeof(struct mxs_dma_desc));
+       desc.address = (dma_addr_t)&desc;
+       desc.cmd.data = MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_CHAIN |
+                       MXS_DMA_DESC_WAIT4END |
+                       (1 << MXS_DMA_DESC_PIO_WORDS_OFFSET);
+       desc.cmd.pio_words[0] = readl(&regs->hw_lcdif_ctrl) | LCDIF_CTRL_RUN;
+       desc.cmd.next = (uint32_t)&desc.cmd;
+
+       /* Execute the DMA chain. */
+       mxs_dma_circ_start(MXS_DMA_CHANNEL_AHB_APBH_LCDIF, &desc);
+#endif
+
        return (void *)&panel;
 }
index fc092522b261c39f7062ee1d419e28a782c83bdb..0e97f511fdcfa4de21af43e88ff8e44d30e546e7 100644 (file)
@@ -34,11 +34,11 @@ static void s6e8ax0_panel_cond(struct mipi_dsim_device *dsim_dev)
 
        if (reverse) {
                ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send_reverse,
+                       data_to_send_reverse,
                        ARRAY_SIZE(data_to_send_reverse));
        } else {
                ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+                       data_to_send, ARRAY_SIZE(data_to_send));
        }
 }
 
@@ -50,8 +50,7 @@ static void s6e8ax0_display_cond(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send,
-                       ARRAY_SIZE(data_to_send));
+                       data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_gamma_cond(struct mipi_dsim_device *dsim_dev)
@@ -65,15 +64,18 @@ static void s6e8ax0_gamma_cond(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send,
-                       ARRAY_SIZE(data_to_send));
+                       data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_gamma_update(struct mipi_dsim_device *dsim_dev)
 {
        struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+       static const unsigned char data_to_send[] = {
+               0xf7, 0x03
+       };
 
-       ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xf7, 0x3);
+       ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, data_to_send,
+                       ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_source_control(struct mipi_dsim_device *dsim_dev)
@@ -84,8 +86,7 @@ static void s6e8ax0_etc_source_control(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send,
-                       ARRAY_SIZE(data_to_send));
+                       data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_pentile_control(struct mipi_dsim_device *dsim_dev)
@@ -97,8 +98,7 @@ static void s6e8ax0_etc_pentile_control(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send,
-                       ARRAY_SIZE(data_to_send));
+                       data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_mipi_control1(struct mipi_dsim_device *dsim_dev)
@@ -109,8 +109,7 @@ static void s6e8ax0_etc_mipi_control1(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send,
-                       ARRAY_SIZE(data_to_send));
+                       data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_mipi_control2(struct mipi_dsim_device *dsim_dev)
@@ -121,8 +120,7 @@ static void s6e8ax0_etc_mipi_control2(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send,
-                       ARRAY_SIZE(data_to_send));
+                       data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_power_control(struct mipi_dsim_device *dsim_dev)
@@ -133,14 +131,18 @@ static void s6e8ax0_etc_power_control(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-               (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+               data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_mipi_control3(struct mipi_dsim_device *dsim_dev)
 {
        struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+       static const unsigned char data_to_send[] = {
+               0xe3, 0x40
+       };
 
-       ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xe3, 0x40);
+       ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, data_to_send,
+                      ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_mipi_control4(struct mipi_dsim_device *dsim_dev)
@@ -151,7 +153,7 @@ static void s6e8ax0_etc_mipi_control4(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-               (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+               data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_elvss_set(struct mipi_dsim_device *dsim_dev)
@@ -162,24 +164,29 @@ static void s6e8ax0_elvss_set(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-                       (unsigned int)data_to_send,
-                       ARRAY_SIZE(data_to_send));
+                       data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_display_on(struct mipi_dsim_device *dsim_dev)
 {
        struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+       static const unsigned char data_to_send[] = {
+               0x29, 0x00
+       };
 
-       ops->cmd_write(dsim_dev,
-               MIPI_DSI_DCS_SHORT_WRITE, 0x29, 0x00);
+       ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE, data_to_send,
+                      ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_sleep_out(struct mipi_dsim_device *dsim_dev)
 {
        struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+       static const unsigned char data_to_send[] = {
+               0x11, 0x00
+       };
 
-       ops->cmd_write(dsim_dev,
-               MIPI_DSI_DCS_SHORT_WRITE, 0x11, 0x00);
+       ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE, data_to_send,
+                      ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_apply_level1_key(struct mipi_dsim_device *dsim_dev)
@@ -190,7 +197,7 @@ static void s6e8ax0_apply_level1_key(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-               (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+               data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_apply_mtp_key(struct mipi_dsim_device *dsim_dev)
@@ -201,7 +208,7 @@ static void s6e8ax0_apply_mtp_key(struct mipi_dsim_device *dsim_dev)
        };
 
        ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-               (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+               data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_panel_init(struct mipi_dsim_device *dsim_dev)
index d8b0d7f5d6ff5eb2cb4b3141eb1af8be15875003..f324354c39d619b6e3741826729d9a0c56b0e8f9 100644 (file)
@@ -25,7 +25,6 @@
 
 /* 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 7e255ce8aef987daf37f52e0f00d41292162946a..3ade624702e9820f74f6e34cde4e34d31a6cb5a8 100644 (file)
@@ -18,6 +18,7 @@ COBJS-$(CONFIG_TNETV107X_WATCHDOG) += tnetv107x_wdt.o
 COBJS-$(CONFIG_S5P)               += s5p_wdt.o
 COBJS-$(CONFIG_XILINX_TB_WATCHDOG) += xilinx_tb_wdt.o
 COBJS-$(CONFIG_BFIN_WATCHDOG)  += bfin_wdt.o
+COBJS-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
new file mode 100644 (file)
index 0000000..7ea4b60
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * omap_wdt.c
+ *
+ * (C) Copyright 2013
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * SPDX-License-Identifier:    GPL-2.0
+ *
+ * Based on:
+ *
+ * Watchdog driver for the TI OMAP 16xx & 24xx/34xx 32KHz (non-secure) watchdog
+ *
+ * commit 2d991a164a61858012651e13c59521975504e260
+ * Author: Bill Pemberton <wfp5p@virginia.edu>
+ * Date:   Mon Nov 19 13:21:41 2012 -0500
+ *
+ * watchdog: remove use of __devinit
+ *
+ * CONFIG_HOTPLUG is going away as an option so __devinit is no longer
+ * needed.
+ *
+ * Author: MontaVista Software, Inc.
+ *      <gdavis@mvista.com> or <source@mvista.com>
+ *
+ * History:
+ *
+ * 20030527: George G. Davis <gdavis@mvista.com>
+ *     Initially based on linux-2.4.19-rmk7-pxa1/drivers/char/sa1100_wdt.c
+ *     (c) Copyright 2000 Oleg Drokin <green@crimea.edu>
+ *     Based on SoftDog driver by Alan Cox <alan@lxorguk.ukuu.org.uk>
+ *
+ * Copyright (c) 2004 Texas Instruments.
+ *     1. Modified to support OMAP1610 32-KHz watchdog timer
+ *     2. Ported to 2.6 kernel
+ *
+ * Copyright (c) 2005 David Brownell
+ *     Use the driver model and standard identifiers; handle bigger timeouts.
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <asm/arch/hardware.h>
+#include <asm/io.h>
+#include <asm/processor.h>
+#include <asm/arch/cpu.h>
+
+/* Hardware timeout in seconds */
+#define WDT_HW_TIMEOUT 60
+
+static unsigned int wdt_trgr_pattern = 0x1234;
+
+void hw_watchdog_reset(void)
+{
+       struct wd_timer *wdt = (struct wd_timer *)WDT_BASE;
+
+       /* wait for posted write to complete */
+       while ((readl(&wdt->wdtwwps)) & WDT_WWPS_PEND_WTGR)
+               ;
+
+       wdt_trgr_pattern = ~wdt_trgr_pattern;
+       writel(wdt_trgr_pattern, &wdt->wdtwtgr);
+
+       /* wait for posted write to complete */
+       while ((readl(&wdt->wdtwwps) & WDT_WWPS_PEND_WTGR))
+               ;
+}
+
+static int omap_wdt_set_timeout(unsigned int timeout)
+{
+       struct wd_timer *wdt = (struct wd_timer *)WDT_BASE;
+       u32 pre_margin = GET_WLDR_VAL(timeout);
+
+       /* just count up at 32 KHz */
+       while (readl(&wdt->wdtwwps) & WDT_WWPS_PEND_WLDR)
+               ;
+
+       writel(pre_margin, &wdt->wdtwldr);
+       while (readl(&wdt->wdtwwps) & WDT_WWPS_PEND_WLDR)
+               ;
+
+       return 0;
+}
+
+void hw_watchdog_init(void)
+{
+       struct wd_timer *wdt = (struct wd_timer *)WDT_BASE;
+
+       /* initialize prescaler */
+       while (readl(&wdt->wdtwwps) & WDT_WWPS_PEND_WCLR)
+               ;
+
+       writel(WDT_WCLR_PRE | (PTV << WDT_WCLR_PTV_OFF), &wdt->wdtwclr);
+       while (readl(&wdt->wdtwwps) & WDT_WWPS_PEND_WCLR)
+               ;
+
+       omap_wdt_set_timeout(WDT_HW_TIMEOUT);
+
+       /* Sequence to enable the watchdog */
+       writel(0xBBBB, &wdt->wdtwspr);
+       while ((readl(&wdt->wdtwwps)) & WDT_WWPS_PEND_WSPR)
+               ;
+
+       writel(0x4444, &wdt->wdtwspr);
+       while ((readl(&wdt->wdtwwps)) & WDT_WWPS_PEND_WSPR)
+               ;
+}
+
+void hw_watchdog_disable(void)
+{
+       struct wd_timer *wdt = (struct wd_timer *)WDT_BASE;
+
+       /*
+        * Disable watchdog
+        */
+       writel(0xAAAA, &wdt->wdtwspr);
+       while (readl(&wdt->wdtwwps) != 0x0)
+               ;
+       writel(0x5555, &wdt->wdtwspr);
+       while (readl(&wdt->wdtwwps) != 0x0)
+               ;
+}
index 35303f7c5a8fdab0e5391c09d3a2bd9acb232c56..3cf991eaf2f801b1f3886a9627d927296aa239ea 100644 (file)
@@ -17,15 +17,15 @@ $(error Please define CONFIG_DEFAULT_DEVICE_TREE in your board header file))
 DEVICE_TREE = $(subst ",,$(CONFIG_DEFAULT_DEVICE_TREE))
 endif
 
-$(if $(CONFIG_ARCH_DEVICE_TREE),,\
-$(error Your architecture does not have device tree support enabled. \
-Please define CONFIG_ARCH_DEVICE_TREE))
+DTS_INCDIRS =  $(SRCTREE)/board/$(VENDOR)/$(BOARD)/dts
+DTS_INCDIRS += $(SRCTREE)/board/$(VENDOR)/dts
+DTS_INCDIRS += $(SRCTREE)/arch/$(ARCH)/dts
 
-# We preprocess the device tree file provide a useful define
-DTS_CPPFLAGS := -x assembler-with-cpp \
-               -DARCH_CPU_DTS=\"$(SRCTREE)/arch/$(ARCH)/dts/$(CONFIG_ARCH_DEVICE_TREE).dtsi\" \
-               -DBOARD_DTS=\"$(SRCTREE)/board/$(VENDOR)/$(BOARD)/dts/$(DEVICE_TREE).dts\" \
-               -I$(SRCTREE)/board/$(VENDOR)/dts -I$(SRCTREE)/arch/$(ARCH)/dts
+DTS_CPPFLAGS := -x assembler-with-cpp -undef -D__DTS__ \
+               -nostdinc $(addprefix -I,$(DTS_INCDIRS))
+
+DTC_FLAGS := -R 4 -p 0x1000 \
+       $(addprefix -i ,$(DTS_INCDIRS))
 
 all:   $(obj).depend $(LIB)
 
@@ -35,13 +35,8 @@ all: $(obj).depend $(LIB)
 DT_BIN := $(obj)dt.dtb
 
 $(DT_BIN): $(TOPDIR)/board/$(VENDOR)/dts/$(DEVICE_TREE).dts
-       rc=$$( \
-               cat $< | $(CPP) -P $(DTS_CPPFLAGS) - | \
-               { { $(DTC) -R 4 -p 0x1000 -O dtb -o ${DT_BIN} - 2>&1 ; \
-                   echo $$? >&3 ; } | \
-                 grep -v '^DTC: dts->dtb  on file' ; \
-               } 3>&1 1>&2 ) ; \
-       exit $$rc
+       $(CPP) $(DTS_CPPFLAGS) $< -o $(DT_BIN).dts.tmp
+       $(DTC) $(DTC_FLAGS) -O dtb -o ${DT_BIN} $(DT_BIN).dts.tmp
 
 process_lds = \
        $(1) | sed -r -n 's/^OUTPUT_$(2)[ ("]*([^")]*).*/\1/p'
index afd1ffa799ead0a2d197b0a5f42f4e99a81ca3a1..1ca5895740bffbdf12f6b74f2ab983d97379fb09 100644 (file)
@@ -2,29 +2,7 @@
  * Copyright (c) 1992, 1993
  *     The Regents of the University of California.  All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * SPDX-License-Identifier:    BSD-3-Clause
  */
 
 #include "yportenv.h"
index 4420c990b4cca52ae3a080748c7e278e0442a9d0..f5c89f3f13773199f5a971e5db11bce338c7f647 100644 (file)
@@ -3,50 +3,7 @@
  *
  * Written by: Rafal Jaworowski <raj@semihalf.com>
  *
- * This file is dual licensed; you can use it under the terms of
- * either the GPL, or the BSD license, at your option.
- *
- * I. GPL:
- *
- * 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 of
- * the License, or (at your option) any later version.
- *
- * 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; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- *
- * Alternatively,
- *
- * II. BSD license:
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+        BSD-2-Clause
  */
 
 #ifndef _API_PUBLIC_H_
index 29e0438ba450bf2cb1cb51421e41b3fd0a229422..43872010c7f2ba43a91b6b9c70907861a5d56abd 100644 (file)
@@ -69,7 +69,6 @@ typedef struct bd_info {
        unsigned int    bi_baudrate;    /* Console Baudrate */
 #if defined(CONFIG_405)   || \
                defined(CONFIG_405GP) || \
-               defined(CONFIG_405CR) || \
                defined(CONFIG_405EP) || \
                defined(CONFIG_405EZ) || \
                defined(CONFIG_405EX) || \
index 09043435b433d9a97fa55c7d6fcb4742a9bdd6ce..2f0bc6b062b325e2f35282e378bbad0201ed1d1a 100644 (file)
@@ -33,7 +33,6 @@
 #define CONFIG_E500MC                  /* BOOKE e500mc family */
 #define CONFIG_SYS_BOOK3E_HV           /* Category E.HV supported */
 #define CONFIG_MPC85xx                 /* MPC85xx/PQ3 platform */
-#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MP                      /* support multiple processors */
 
 #ifndef CONFIG_SYS_TEXT_BASE
 #define VSC3308_TX_ADDRESS              0x02
 #define VSC3308_RX_ADDRESS              0x03
 
+/* IDT clock synthesizers */
+#define CONFIG_IDT8T49N222A
+#define I2C_CH_IDT                     0x9
+
+#define IDT_SERDES1_ADDRESS            0x6E
+#define IDT_SERDES2_ADDRESS            0x6C
+
 #define CONFIG_ENV_OVERWRITE
 
 #ifdef CONFIG_SYS_NO_FLASH
@@ -578,6 +584,8 @@ unsigned long get_board_ddr_clk(void);
 
 #define CONFIG_SYS_DPAA_FMAN
 
+#define CONFIG_SYS_DPAA_RMAN
+
 /* Default address of microcode for the Linux Fman driver */
 #if defined(CONFIG_SPIFLASH)
 /*
index 1ab68915859bfac3b8f15c2a2dbedd15f1bf05ed..03f3a4f80377ef0093612cee9746821057dd6f04 100644 (file)
@@ -224,6 +224,10 @@ combinations. this should be removed later
 
 #define CONFIG_SYS_IMMR                CONFIG_SYS_CCSRBAR
 
+/* DSP CCSRBAR */
+#define CONFIG_SYS_FSL_DSP_CCSRBAR     CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT
+#define CONFIG_SYS_FSL_DSP_CCSRBAR_PHYS        CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT
+
 /*
  * IFC Definitions
  */
diff --git a/include/configs/C29XPCIE.h b/include/configs/C29XPCIE.h
new file mode 100644 (file)
index 0000000..83779ef
--- /dev/null
@@ -0,0 +1,456 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/*
+ * C29XPCIE board configuration file
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_PHYS_64BIT
+
+#ifdef CONFIG_C29XPCIE
+#define CONFIG_PPC_C29X
+#endif
+
+#ifdef CONFIG_SPIFLASH
+#define CONFIG_RAMBOOT_SPIFLASH
+#define CONFIG_SYS_TEXT_BASE           0x11000000
+#define CONFIG_RESET_VECTOR_ADDRESS    0x1107fffc
+#endif
+
+#ifndef CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_TEXT_BASE           0xeff80000
+#endif
+
+#ifndef CONFIG_RESET_VECTOR_ADDRESS
+#define CONFIG_RESET_VECTOR_ADDRESS    0xeffffffc
+#endif
+
+#ifndef CONFIG_SYS_MONITOR_BASE
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
+#endif
+
+/* High Level Configuration Options */
+#define CONFIG_BOOKE                   /* BOOKE */
+#define CONFIG_E500                    /* BOOKE e500 family */
+#define CONFIG_MPC85xx
+#define CONFIG_FSL_IFC                 /* Enable IFC Support */
+#define CONFIG_SYS_HAS_SERDES          /* common SERDES init code */
+
+#define CONFIG_PCI                     /* Enable PCI/PCIE */
+#ifdef CONFIG_PCI
+#define CONFIG_PCIE1                   /* PCIE controler 1 (slot 1) */
+#define CONFIG_FSL_PCI_INIT            /* Use common FSL init code */
+#define CONFIG_PCI_INDIRECT_BRIDGE
+#define CONFIG_FSL_PCIE_RESET          /* need PCIe reset errata */
+#define CONFIG_SYS_PCI_64BIT           /* enable 64-bit PCI resources */
+
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_PCI
+
+#define CONFIG_E1000
+
+/*
+ * PCI Windows
+ * Memory space is mapped 1-1, but I/O space must start from 0.
+ */
+/* controller 1, Slot 1, tgtid 1, Base address a000 */
+#define CONFIG_SYS_PCIE1_NAME          "Slot 1"
+#define CONFIG_SYS_PCIE1_MEM_VIRT      0x80000000
+#define CONFIG_SYS_PCIE1_MEM_BUS       0x80000000
+#define CONFIG_SYS_PCIE1_MEM_PHYS      0xc00000000ull
+#define CONFIG_SYS_PCIE1_MEM_SIZE      0x10000000      /* 256M */
+#define CONFIG_SYS_PCIE1_IO_VIRT       0xffc00000
+#define CONFIG_SYS_PCIE1_IO_BUS                0x00000000
+#define CONFIG_SYS_PCIE1_IO_SIZE       0x00010000      /* 64k */
+#define CONFIG_SYS_PCIE1_IO_PHYS       0xfffc00000ull
+
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
+
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup */
+#define CONFIG_DOS_PARTITION
+#endif
+
+#define CONFIG_FSL_LAW                 /* Use common FSL init code */
+#define CONFIG_TSEC_ENET
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_DDR_CLK_FREQ    100000000
+#define CONFIG_SYS_CLK_FREQ    66666666
+
+#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 predition */
+
+#define CONFIG_ADDR_STREAMING          /* toggle addr streaming */
+
+#define CONFIG_ENABLE_36BIT_PHYS
+
+#define CONFIG_ADDR_MAP                        1
+#define CONFIG_SYS_NUM_ADDR_MAP                16      /* number of TLB1 entries */
+
+#define CONFIG_SYS_MEMTEST_START       0x00200000
+#define CONFIG_SYS_MEMTEST_END         0x00400000
+#define CONFIG_PANIC_HANG
+
+/* DDR Setup */
+#define CONFIG_FSL_DDR3
+#define CONFIG_DDR_SPD
+#define CONFIG_SYS_SPD_BUS_NUM         0
+#define SPD_EEPROM_ADDRESS             0x50
+#define CONFIG_SYS_DDR_RAW_TIMING
+
+/* DDR ECC Setup*/
+#define CONFIG_DDR_ECC
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
+
+#define CONFIG_SYS_SDRAM_SIZE          512
+#define CONFIG_SYS_DDR_SDRAM_BASE      0x00000000
+#define CONFIG_SYS_SDRAM_BASE          CONFIG_SYS_DDR_SDRAM_BASE
+
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+#define CONFIG_CHIP_SELECTS_PER_CTRL   1
+
+#define CONFIG_SYS_CCSRBAR             0xffe00000
+#define CONFIG_SYS_CCSRBAR_PHYS_LOW    CONFIG_SYS_CCSRBAR
+
+/* Platform SRAM setting  */
+#define CONFIG_SYS_PLATFORM_SRAM_BASE  0xffb00000
+#define CONFIG_SYS_PLATFORM_SRAM_BASE_PHYS \
+                       (0xf00000000ull | CONFIG_SYS_PLATFORM_SRAM_BASE)
+#define CONFIG_SYS_PLATFORM_SRAM_SIZE  (512 << 10)
+
+/*
+ * IFC Definitions
+ */
+/* NOR Flash on IFC */
+#define CONFIG_SYS_FLASH_BASE          0xec000000
+#define CONFIG_SYS_MAX_FLASH_SECT      512     /* 64M */
+
+#define CONFIG_SYS_FLASH_BASE_PHYS     (0xf00000000ull | CONFIG_SYS_FLASH_BASE)
+
+#define CONFIG_SYS_FLASH_BANKS_LIST    { CONFIG_SYS_FLASH_BASE_PHYS }
+#define CONFIG_SYS_MAX_FLASH_BANKS     1
+
+#define CONFIG_SYS_FLASH_QUIET_TEST
+#define CONFIG_FLASH_SHOW_PROGRESS     45
+#define CONFIG_SYS_FLASH_ERASE_TOUT    60000   /* in ms */
+#define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* in ms */
+
+/* 16Bit NOR Flash - S29GL512S10TFI01 */
+#define CONFIG_SYS_NOR_CSPR    (CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS) | \
+                               CSPR_PORT_SIZE_16 | \
+                               CSPR_MSEL_NOR | \
+                               CSPR_V)
+#define CONFIG_SYS_NOR_AMASK   IFC_AMASK(64*1024*1024)
+#define CONFIG_SYS_NOR_CSOR    CSOR_NOR_ADM_SHIFT(4)
+#define CONFIG_SYS_NOR_FTIM0   (FTIM0_NOR_TACSE(0x4) | \
+                               FTIM0_NOR_TEADC(0x5) | \
+                               FTIM0_NOR_TEAHC(0x5))
+#define CONFIG_SYS_NOR_FTIM1   (FTIM1_NOR_TACO(0x1e) | \
+                               FTIM1_NOR_TRAD_NOR(0x0f) | \
+                               FTIM1_NOR_TSEQRAD_NOR(0x0f))
+#define CONFIG_SYS_NOR_FTIM2   (FTIM2_NOR_TCS(0x4) | \
+                               FTIM2_NOR_TCH(0x4) | \
+                               FTIM2_NOR_TWP(0x1c))
+#define CONFIG_SYS_NOR_FTIM3   0x0
+
+/* CFI for NOR Flash */
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_SYS_FLASH_EMPTY_INFO
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
+
+/* NAND Flash on IFC */
+#define CONFIG_NAND_FSL_IFC
+#define CONFIG_SYS_NAND_BASE           0xff800000
+#define CONFIG_SYS_NAND_BASE_PHYS      0xfff800000ull
+
+#define CONFIG_SYS_NAND_BASE_LIST      { CONFIG_SYS_NAND_BASE }
+
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_MTD_NAND_VERIFY_WRITE
+#define CONFIG_CMD_NAND
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128 * 1024)
+
+/* 8Bit NAND Flash - K9F1G08U0B */
+#define CONFIG_SYS_NAND_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \
+                               | CSPR_PORT_SIZE_8 \
+                               | CSPR_MSEL_NAND \
+                               | CSPR_V)
+#define CONFIG_SYS_NAND_AMASK  IFC_AMASK(64*1024)
+#define CONFIG_SYS_NAND_CSOR   (CSOR_NAND_ECC_ENC_EN   /* ECC on encode */ \
+                               | CSOR_NAND_ECC_DEC_EN  /* ECC on decode */ \
+                               | CSOR_NAND_ECC_MODE_4  /* 4-bit ECC */ \
+                               | CSOR_NAND_RAL_2       /* RAL = 2 Bytes */ \
+                               | CSOR_NAND_PGS_2K      /* Page Size = 2k */ \
+                               | CSOR_NAND_SPRZ_64     /* Spare size = 64 */ \
+                               | CSOR_NAND_PB(64))     /* 64 Pages Per Block */
+#define CONFIG_SYS_NAND_FTIM0  (FTIM0_NAND_TCCST(0x01) | \
+                               FTIM0_NAND_TWP(0x0c)   | \
+                               FTIM0_NAND_TWCHT(0x08) | \
+                               FTIM0_NAND_TWH(0x06))
+#define CONFIG_SYS_NAND_FTIM1  (FTIM1_NAND_TADLE(0x28) | \
+                               FTIM1_NAND_TWBE(0x1d)  | \
+                               FTIM1_NAND_TRR(0x08)   | \
+                               FTIM1_NAND_TRP(0x0c))
+#define CONFIG_SYS_NAND_FTIM2  (FTIM2_NAND_TRAD(0x0c) | \
+                               FTIM2_NAND_TREH(0x0a) | \
+                               FTIM2_NAND_TWHRE(0x18))
+#define CONFIG_SYS_NAND_FTIM3  (FTIM3_NAND_TWW(0x04))
+
+#define CONFIG_SYS_NAND_DDR_LAW                11
+
+/* Set up IFC registers for boot location NOR/NAND */
+#define CONFIG_SYS_CSPR0               CONFIG_SYS_NOR_CSPR
+#define CONFIG_SYS_AMASK0              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR0               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NOR_FTIM3
+#define CONFIG_SYS_CSPR1               CONFIG_SYS_NAND_CSPR
+#define CONFIG_SYS_AMASK1              CONFIG_SYS_NAND_AMASK
+#define CONFIG_SYS_CSOR1               CONFIG_SYS_NAND_CSOR
+#define CONFIG_SYS_CS1_FTIM0           CONFIG_SYS_NAND_FTIM0
+#define CONFIG_SYS_CS1_FTIM1           CONFIG_SYS_NAND_FTIM1
+#define CONFIG_SYS_CS1_FTIM2           CONFIG_SYS_NAND_FTIM2
+#define CONFIG_SYS_CS1_FTIM3           CONFIG_SYS_NAND_FTIM3
+
+/* CPLD on IFC, selected by CS2 */
+#define CONFIG_SYS_CPLD_BASE           0xffdf0000
+#define CONFIG_SYS_CPLD_BASE_PHYS      (0xf00000000ull \
+                                       | CONFIG_SYS_CPLD_BASE)
+
+#define CONFIG_SYS_CSPR2       (CSPR_PHYS_ADDR(CONFIG_SYS_CPLD_BASE_PHYS) \
+                               | CSPR_PORT_SIZE_8 \
+                               | CSPR_MSEL_GPCM \
+                               | CSPR_V)
+#define CONFIG_SYS_AMASK2      IFC_AMASK(64*1024)
+#define CONFIG_SYS_CSOR2       0x0
+/* CPLD Timing parameters for IFC CS2 */
+#define CONFIG_SYS_CS2_FTIM0   (FTIM0_GPCM_TACSE(0x0e) | \
+                               FTIM0_GPCM_TEADC(0x0e) | \
+                               FTIM0_GPCM_TEAHC(0x0e))
+#define CONFIG_SYS_CS2_FTIM1   (FTIM1_GPCM_TACO(0x0e) | \
+                               FTIM1_GPCM_TRAD(0x1f))
+#define CONFIG_SYS_CS2_FTIM2   (FTIM2_GPCM_TCS(0x0e) | \
+                               FTIM2_GPCM_TCH(0x0) | \
+                               FTIM2_GPCM_TWP(0x1f))
+#define CONFIG_SYS_CS2_FTIM3   0x0
+
+#if defined(CONFIG_RAMBOOT_SPIFLASH)
+#define CONFIG_SYS_RAMBOOT
+#define CONFIG_SYS_EXTRA_ENV_RELOC
+#endif
+
+#define CONFIG_BOARD_EARLY_INIT_R
+
+#define CONFIG_SYS_INIT_RAM_LOCK
+#define CONFIG_SYS_INIT_RAM_ADDR       0xffd00000
+#define CONFIG_SYS_INIT_RAM_END                0x00004000
+
+#define CONFIG_SYS_GBL_DATA_OFFSET     (CONFIG_SYS_INIT_RAM_END \
+                                               - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
+
+#define CONFIG_SYS_MONITOR_LEN         (512 * 1024)
+#define CONFIG_SYS_MALLOC_LEN          (1024 * 1024)
+
+/* Serial Port */
+#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            /* Enable both serial ports */
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+
+#define CONFIG_SYS_BAUDRATE_TABLE      \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 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
+
+/*
+ * Pass open firmware flat tree
+ */
+#define CONFIG_OF_LIBFDT
+#define CONFIG_OF_BOARD_SETUP
+#define CONFIG_OF_STDOUT_VIA_ALIAS
+
+/* new uImage format support */
+#define CONFIG_FIT
+#define CONFIG_FIT_VERBOSE     /* enable fit_format_{error,warning}() */
+
+#define CONFIG_SYS_I2C
+#define CONFIG_SYS_I2C_FSL
+#define CONFIG_SYS_FSL_I2C_SPEED       400000
+#define CONFIG_SYS_FSL_I2C2_SPEED      400000
+#define CONFIG_SYS_FSL_I2C_SLAVE       0x7F
+#define CONFIG_SYS_FSL_I2C2_SLAVE      0x7F
+#define CONFIG_SYS_FSL_I2C_OFFSET      0x3000
+#define CONFIG_SYS_FSL_I2C2_OFFSET     0x3100
+
+/* I2C EEPROM */
+/* enable read and write access to EEPROM */
+#define CONFIG_CMD_EEPROM
+#define CONFIG_SYS_I2C_MULTI_EEPROMS
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 5
+
+#define CONFIG_CMD_I2C
+
+/* eSPI - Enhanced SPI */
+#define CONFIG_FSL_ESPI
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_SPANSION
+#define CONFIG_SPI_FLASH_EON
+#define CONFIG_CMD_SF
+#define CONFIG_SF_DEFAULT_SPEED                10000000
+#define CONFIG_SF_DEFAULT_MODE         SPI_MODE_0
+
+#ifdef CONFIG_TSEC_ENET
+#define CONFIG_NET_MULTI
+#define CONFIG_MII                     /* 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"
+
+/* Default mode is RGMII mode */
+#define TSEC1_PHY_ADDR         0
+#define TSEC2_PHY_ADDR         2
+
+#define TSEC1_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC2_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+
+#define CONFIG_ETHPRIME                "eTSEC1"
+
+#define CONFIG_PHY_GIGE
+#endif /* CONFIG_TSEC_ENET */
+
+/*
+ * Environment
+ */
+#if defined(CONFIG_SYS_RAMBOOT)
+#if 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
+#else
+#define CONFIG_ENV_IS_IN_FLASH
+#if CONFIG_SYS_MONITOR_BASE > 0xfff80000
+#define CONFIG_ENV_ADDR        0xfff80000
+#else
+#define CONFIG_ENV_ADDR        (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SECT_SIZE)
+#endif
+#define CONFIG_ENV_SIZE                0x2000
+#define CONFIG_ENV_SECT_SIZE   0x20000
+#endif
+
+#define CONFIG_LOADS_ECHO
+#define CONFIG_SYS_LOADS_BAUD_CHANGE
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ERRATA
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_SETEXPR
+#define CONFIG_CMD_REGINFO
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_LONGHELP                    /* undef to save memory */
+#define CONFIG_CMDLINE_EDITING                 /* Command-line editing */
+#define CONFIG_AUTO_COMPLETE                   /* add autocompletion support */
+#define CONFIG_SYS_LOAD_ADDR   0x2000000       /* default load address */
+#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_HZ          1000            /* dec freq: 1ms ticks */
+
+/*
+ * 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) /* Initial Memory map for Linux */
+#define CONFIG_SYS_BOOTM_LEN   (64 << 20) /* Increase max gunzip size */
+
+/*
+ * Environment Configuration
+ */
+
+#ifdef CONFIG_TSEC_ENET
+#define CONFIG_HAS_ETH0
+#define CONFIG_HAS_ETH1
+#endif
+
+#define CONFIG_ROOTPATH                "/opt/nfsroot"
+#define CONFIG_BOOTFILE                "uImage"
+#define CONFIG_UBOOTPATH       u-boot.bin/* U-Boot image on TFTP server */
+
+/* default location for tftp and bootm */
+#define CONFIG_LOADADDR                1000000
+
+#define CONFIG_BOOTDELAY       -1      /* -1 disables auto-boot */
+
+#define CONFIG_BAUDRATE                115200
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                               \
+       "hwconfig=" __stringify(CONFIG_DEF_HWCONFIG)  "\0"      \
+       "netdev=eth0\0"                                         \
+       "uboot=" __stringify(CONFIG_UBOOTPATH) "\0"             \
+       "loadaddr=1000000\0"                            \
+       "consoledev=ttyS0\0"                            \
+       "ramdiskaddr=2000000\0"                         \
+       "ramdiskfile=rootfs.ext2.gz.uboot\0"            \
+       "fdtaddr=c00000\0"                              \
+       "fdtfile=name/of/device-tree.dtb\0"                     \
+       "othbootargs=ramdisk_size=600000\0"             \
+
+#define CONFIG_RAMBOOTCOMMAND                  \
+       "setenv bootargs root=/dev/ram rw "     \
+       "console=$consoledev,$baudrate $othbootargs; "  \
+       "tftp $ramdiskaddr $ramdiskfile;"       \
+       "tftp $loadaddr $bootfile;"             \
+       "tftp $fdtaddr $fdtfile;"               \
+       "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_BOOTCOMMAND CONFIG_RAMBOOTCOMMAND
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/CANBT.h b/include/configs/CANBT.h
deleted file mode 100644 (file)
index 40471b7..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * (C) Copyright 2001
- * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com
- *
- * SPDX-License-Identifier:    GPL-2.0+ 
- */
-
-/*
- * board/config.h - configuration options, board specific
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-
-#define CONFIG_405CR           1       /* This is a PPC405CR CPU       */
-#define CONFIG_4xx             1       /* ...member of PPC4xx family   */
-#define CONFIG_CANBT           1       /* ...on a CANBT board          */
-
-#define        CONFIG_SYS_TEXT_BASE    0xFFFC0000
-
-#define CONFIG_BOARD_EARLY_INIT_F 1    /* call board_early_init_f()    */
-
-#define CONFIG_SYS_CLK_FREQ    25000000 /* external frequency to pll   */
-
-#define CONFIG_BAUDRATE                115200
-#define CONFIG_BOOTDELAY       1       /* autoboot after 1 seconds     */
-
-#undef CONFIG_BOOTARGS
-#define CONFIG_BOOTCOMMAND                                             \
-       "setenv bootargs root=/dev/ram rw console=ttyS0,115200; "       \
-       "bootm ffe00000 ffe80000"
-
-#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
-#define CONFIG_SYS_LOADS_BAUD_CHANGE   1       /* allow baudrate change        */
-
-#undef CONFIG_PCI_PNP                  /* no pci plug-and-play         */
-
-#define CONFIG_PHY_ADDR                0       /* PHY address                  */
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_IRQ
-#define CONFIG_CMD_EEPROM
-
-#undef CONFIG_CMD_NET
-#undef CONFIG_CMD_NFS
-
-#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
-
-#define CONFIG_SDRAM_BANK0     1       /* init onboard SDRAM bank 0    */
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_SYS_LONGHELP                    /* undef to save memory         */
-#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_CONSOLE_INFO_QUIET  1       /* don't print console @ startup*/
-
-#define CONFIG_SYS_MEMTEST_START       0x0400000       /* memtest works on     */
-#define CONFIG_SYS_MEMTEST_END         0x0C00000       /* 4 ... 12 MB in DRAM  */
-
-#define CONFIG_CONS_INDEX      1       /* Use UART0                    */
-#define CONFIG_SYS_NS16550
-#define CONFIG_SYS_NS16550_SERIAL
-#define CONFIG_SYS_NS16550_REG_SIZE    1
-#define CONFIG_SYS_NS16550_CLK         get_serial_clock()
-
-#define CONFIG_SYS_EXT_SERIAL_CLOCK    14745600 /* use external serial clock   */
-
-/* The following table includes the supported baudrates */
-#define CONFIG_SYS_BAUDRATE_TABLE      \
-       { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400,     \
-        57600, 115200, 230400, 460800, 921600 }
-
-#define CONFIG_SYS_LOAD_ADDR   0x100000        /* default load address */
-#define CONFIG_SYS_EXTBDINFO   1               /* To use extended board_into (bd_t) */
-
-#define CONFIG_SYS_HZ          1000            /* decrementer freq: 1 ms ticks */
-
-#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
-
-/*-----------------------------------------------------------------------
- * Start addresses for the final memory configuration
- * (Set up by the startup code)
- * Please note that CONFIG_SYS_SDRAM_BASE _must_ start at 0
- */
-#define CONFIG_SYS_SDRAM_BASE          0x00000000
-#define CONFIG_SYS_FLASH_BASE          CONFIG_SYS_MONITOR_BASE
-#define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_TEXT_BASE
-#define CONFIG_SYS_MONITOR_LEN         (~(CONFIG_SYS_TEXT_BASE) + 1)
-#define CONFIG_SYS_MALLOC_LEN          (128 * 1024)    /* Reserve 128 kB for malloc()  */
-
-/*
- * For booting Linux, the board info and command line data
- * have to be in the first 8 MB of memory, since this is
- * the maximum mapped by the Linux kernel during initialization.
- */
-#define CONFIG_SYS_BOOTMAPSZ           (8 << 20)       /* Initial Memory map for Linux */
-/*-----------------------------------------------------------------------
- * FLASH organization
- */
-#define CONFIG_SYS_MAX_FLASH_BANKS     1       /* max number of memory banks           */
-#define CONFIG_SYS_MAX_FLASH_SECT      256     /* max number of sectors on one chip    */
-
-#define CONFIG_SYS_FLASH_ERASE_TOUT    120000  /* Timeout for Flash Erase (in ms)      */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Timeout for Flash Write (in ms)      */
-
-#define CONFIG_SYS_FLASH_WORD_SIZE     unsigned short  /* flash word size (width)      */
-#define CONFIG_SYS_FLASH_ADDR0         0x5555  /* 1st address for flash config cycles  */
-#define CONFIG_SYS_FLASH_ADDR1         0x2AAA  /* 2nd address for flash config cycles  */
-/*
- * The following defines are added for buggy IOP480 byte interface.
- * All other boards should use the standard values (CPCI405 etc.)
- */
-#define CONFIG_SYS_FLASH_READ0         0x0000  /* 0 is standard                        */
-#define CONFIG_SYS_FLASH_READ1         0x0001  /* 1 is standard                        */
-#define CONFIG_SYS_FLASH_READ2         0x0002  /* 2 is standard                        */
-
-#define CONFIG_SYS_FLASH_EMPTY_INFO            /* print 'E' for empty sector on flinfo */
-
-#if 0 /* Use FLASH for environment variables */
-
-#define CONFIG_ENV_IS_IN_FLASH 1
-#define CONFIG_ENV_OFFSET              0x00010000      /* Offset of Environment Sector */
-#define CONFIG_ENV_SIZE                0x1000  /* Total Size of Environment Sector     */
-
-#define CONFIG_ENV_SECT_SIZE   0x10000 /* see README - env sector total size   */
-
-#else /* Use EEPROM for environment variables */
-
-#define CONFIG_ENV_IS_IN_EEPROM        1       /* use EEPROM for environment vars */
-#define CONFIG_ENV_OFFSET              0x000   /* environment starts at the beginning of the EEPROM */
-#define CONFIG_ENV_SIZE                0x400   /* 1024 bytes may be used for env vars */
-                                  /* total size of a CAT24WC08 is 1024 bytes */
-#endif
-
-/*-----------------------------------------------------------------------
- * I2C EEPROM (CAT24WC08) for environment
- */
-#define CONFIG_SYS_I2C
-#define CONFIG_SYS_I2C_PPC4XX
-#define CONFIG_SYS_I2C_PPC4XX_CH0
-#define CONFIG_SYS_I2C_PPC4XX_SPEED_0          400000
-#define CONFIG_SYS_I2C_PPC4XX_SLAVE_0          0x7F
-
-#define CONFIG_SYS_I2C_EEPROM_ADDR     0x50    /* EEPROM CAT28WC08     */
-#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1       /* bytes of address     */
-/* mask of address bits that overflow into the "EEPROM chip address"   */
-#define CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW    0x07
-
-/*
- * Init Memory Controller:
- *
- * BR0/1 and OR0/1 (FLASH)
- */
-
-#define FLASH_BASE0_PRELIM     0xFFC00000      /* FLASH bank #0        */
-#define FLASH_BASE1_PRELIM     0               /* FLASH bank #1        */
-
-/*-----------------------------------------------------------------------
- * External Bus Controller (EBC) Setup
- */
-
-/* Memory Bank 0 (Flash Bank 0) initialization                                 */
-#define CONFIG_SYS_EBC_PB0AP           0x92015480
-#define CONFIG_SYS_EBC_PB0CR           0xFFC5A000  /* BAS=0xFFC,BS=4MB,BU=R/W,BW=16bit */
-
-/* Memory Bank 1 (CAN/USB) initialization                                      */
-#define CONFIG_SYS_EBC_PB1AP           0x010053C0  /* enable Ready, BEM=1              */
-#define CONFIG_SYS_EBC_PB1CR           0xF0018000  /* BAS=0xF00,BS=1MB,BU=R/W,BW=8bit  */
-
-/* Memory Bank 2 (Misc-IO/LEDs) initialization                                 */
-#define CONFIG_SYS_EBC_PB2AP           0x000004c0  /* no Ready, BEM=1                  */
-#define CONFIG_SYS_EBC_PB2CR           0xF0118000  /* BAS=0xF01,BS=1MB,BU=R/W,BW=8bit  */
-
-/* Memory Bank 3 (CAN Features) initialization                                 */
-#define CONFIG_SYS_EBC_PB3AP           0x80000040  /* no Ready, BEM=1                  */
-#define CONFIG_SYS_EBC_PB3CR           0xF021C000  /* BAS=0xF02,BS=1MB,BU=R/W,BW=32bit */
-
-/*-----------------------------------------------------------------------
- * Definitions for initial stack pointer and data area (in RAM)
- */
-#define CONFIG_SYS_INIT_RAM_ADDR       0x00ef0000 /* inside of SDRAM                   */
-#define CONFIG_SYS_INIT_RAM_SIZE       0x0f00  /* Size of used area in RAM            */
-#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
-
-#endif /* __CONFIG_H */
index 6c6ce58fb88709401393424363891a3d9bd3ba7a..ddcbfa6a264c40bfc90282d60579cd4f1c5c6d58 100644 (file)
@@ -24,7 +24,6 @@
 #define CONFIG_SPL_INIT_MINIMAL
 #define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_NAND_SUPPORT
-#define CONFIG_SPL_NAND_MINIMAL
 #define CONFIG_SPL_FLUSH_IMAGE
 #define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
 #define CONFIG_SPL_MPC83XX_WAIT_FOR_NAND
index d1ce9fdc8d8436a327acea07adbfcaba6e8d7dfa..edece1f9b57a4bfe85094351502fb29b2953e0d0 100644 (file)
 #endif
 
 #ifdef CONFIG_SDCARD
-#define CONFIG_RAMBOOT_SDCARD
-#define CONFIG_SYS_RAMBOOT
-#define CONFIG_SYS_EXTRA_ENV_RELOC
-#define CONFIG_SYS_TEXT_BASE           0x11000000
-#define CONFIG_RESET_VECTOR_ADDRESS    0x1107fffc
+#define CONFIG_SPL
+#define CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
+#define CONFIG_SPL_ENV_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_MMC_MINIMAL
+#define CONFIG_SPL_FLUSH_IMAGE
+#define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_FSL_LAW                 /* Use common FSL init code */
+#define CONFIG_SYS_TEXT_BASE           0x11001000
+#define CONFIG_SPL_TEXT_BASE           0xf8f81000
+#define CONFIG_SPL_PAD_TO              0x18000
+#define CONFIG_SPL_MAX_SIZE            (96 * 1024)
+#define CONFIG_SYS_MMC_U_BOOT_SIZE     (512 << 10)
+#define CONFIG_SYS_MMC_U_BOOT_DST      (0x11000000)
+#define CONFIG_SYS_MMC_U_BOOT_START    (0x11000000)
+#define CONFIG_SYS_MMC_U_BOOT_OFFS     (96 << 10)
+#define CONFIG_SYS_MPC85XX_NO_RESETVEC
+#define CONFIG_SYS_LDSCRIPT            "arch/powerpc/cpu/mpc85xx/u-boot.lds"
+#define CONFIG_SPL_MMC_BOOT
+#ifdef CONFIG_SPL_BUILD
+#define CONFIG_SPL_COMMON_INIT_DDR
+#endif
 #endif
 
 #ifdef CONFIG_SPIFLASH
-#define CONFIG_RAMBOOT_SPIFLASH
-#define CONFIG_SYS_RAMBOOT
-#define CONFIG_SYS_EXTRA_ENV_RELOC
-#define CONFIG_SYS_TEXT_BASE           0x11000000
-#define CONFIG_RESET_VECTOR_ADDRESS    0x1107fffc
+#define CONFIG_SPL
+#define CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
+#define CONFIG_SPL_ENV_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_SPI_SUPPORT
+#define CONFIG_SPL_SPI_FLASH_SUPPORT
+#define CONFIG_SPL_SPI_FLASH_MINIMAL
+#define CONFIG_SPL_FLUSH_IMAGE
+#define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_FSL_LAW         /* Use common FSL init code */
+#define CONFIG_SYS_TEXT_BASE           0x11001000
+#define CONFIG_SPL_TEXT_BASE           0xf8f81000
+#define CONFIG_SPL_PAD_TO              0x18000
+#define CONFIG_SPL_MAX_SIZE            (96 * 1024)
+#define CONFIG_SYS_SPI_FLASH_U_BOOT_SIZE       (512 << 10)
+#define CONFIG_SYS_SPI_FLASH_U_BOOT_DST                (0x11000000)
+#define CONFIG_SYS_SPI_FLASH_U_BOOT_START      (0x11000000)
+#define CONFIG_SYS_SPI_FLASH_U_BOOT_OFFS       (96 << 10)
+#define CONFIG_SYS_MPC85XX_NO_RESETVEC
+#define CONFIG_SYS_LDSCRIPT    "arch/powerpc/cpu/mpc85xx/u-boot.lds"
+#define CONFIG_SPL_SPI_BOOT
+#ifdef CONFIG_SPL_BUILD
+#define CONFIG_SPL_COMMON_INIT_DDR
+#endif
 #endif
 
 #define CONFIG_NAND_FSL_ELBC
 
 #ifdef CONFIG_NAND
 #define CONFIG_SPL
+#define CONFIG_TPL
+#ifdef CONFIG_TPL_BUILD
+#define CONFIG_SPL_NAND_BOOT
+#define CONFIG_SPL_FLUSH_IMAGE
+#define CONFIG_SPL_ENV_SUPPORT
+#define CONFIG_SPL_NAND_INIT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
+#define CONFIG_SPL_COMMON_INIT_DDR
+#define CONFIG_SPL_MAX_SIZE            (128 << 10)
+#define CONFIG_SPL_TEXT_BASE           0xf8f81000
+#define CONFIG_SYS_MPC85XX_NO_RESETVEC
+#define CONFIG_SYS_NAND_U_BOOT_SIZE    (576 << 10)
+#define CONFIG_SYS_NAND_U_BOOT_DST     (0x11000000)
+#define CONFIG_SYS_NAND_U_BOOT_START   (0x11000000)
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    ((128 + 128) << 10)
+#elif defined(CONFIG_SPL_BUILD)
 #define CONFIG_SPL_INIT_MINIMAL
 #define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_NAND_SUPPORT
-#define CONFIG_SPL_NAND_MINIMAL
 #define CONFIG_SPL_FLUSH_IMAGE
-#define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
-
-#define CONFIG_SYS_TEXT_BASE           0x00201000
-#define CONFIG_SPL_TEXT_BASE           0xfffff000
-#define CONFIG_SPL_MAX_SIZE            4096
-#define CONFIG_SPL_RELOC_TEXT_BASE     0x00100000
-#define CONFIG_SPL_RELOC_STACK         0x00100000
-#define CONFIG_SYS_NAND_U_BOOT_SIZE    ((512 << 10) + CONFIG_SPL_MAX_SIZE)
-#define CONFIG_SYS_NAND_U_BOOT_DST     (0x00200000 - CONFIG_SPL_MAX_SIZE)
-#define CONFIG_SYS_NAND_U_BOOT_START   0x00200000
-#define CONFIG_SYS_NAND_U_BOOT_OFFS    0
-#define CONFIG_SYS_LDSCRIPT            "arch/powerpc/cpu/mpc85xx/u-boot-nand.lds"
+#define CONFIG_SPL_TEXT_BASE           0xff800000
+#define CONFIG_SPL_MAX_SIZE            4096
+#define CONFIG_SYS_NAND_U_BOOT_SIZE    (128 << 10)
+#define CONFIG_SYS_NAND_U_BOOT_DST     0xf8f80000
+#define CONFIG_SYS_NAND_U_BOOT_START   0xf8f80000
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    (128 << 10)
+#endif
+#define CONFIG_SPL_PAD_TO              0x20000
+#define CONFIG_TPL_PAD_TO              0x20000
+#define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
+#define CONFIG_SYS_TEXT_BASE           0x11001000
+#define CONFIG_SYS_LDSCRIPT    "arch/powerpc/cpu/mpc85xx/u-boot-nand.lds"
 #endif
 
 /* High Level Configuration Options */
 #define CONFIG_SYS_NAND_BASE_PHYS      CONFIG_SYS_NAND_BASE
 #endif
 
-#define CONFIG_SYS_NAND_BASE_LIST     { CONFIG_SYS_NAND_BASE, }
+#define CONFIG_SYS_NAND_BASE_LIST      {CONFIG_SYS_NAND_BASE}
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
 #define CONFIG_MTD_NAND_VERIFY_WRITE
 #define CONFIG_CMD_NAND                        1
-#define CONFIG_SYS_NAND_BLOCK_SIZE    (256 * 1024)
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (256 * 1024)
 #define CONFIG_ELBC_NAND_SPL_STATIC_PGSIZE
 
 /* NAND flash config */
 #define CONFIG_SYS_MONITOR_LEN         (512 * 1024)
 #define CONFIG_SYS_MALLOC_LEN          (10 * 1024 * 1024)
 
+/*
+ * Config the L2 Cache as L2 SRAM
+*/
+#if defined(CONFIG_SPL_BUILD)
+#if defined(CONFIG_SDCARD) || defined(CONFIG_SPIFLASH)
+#define CONFIG_SYS_INIT_L2_ADDR        0xf8f80000
+#define CONFIG_SYS_INIT_L2_ADDR_PHYS   CONFIG_SYS_INIT_L2_ADDR
+#define CONFIG_SYS_L2_SIZE             (256 << 10)
+#define CONFIG_SYS_INIT_L2_END (CONFIG_SYS_INIT_L2_ADDR + CONFIG_SYS_L2_SIZE)
+#define CONFIG_SPL_RELOC_TEXT_BASE     0xf8f81000
+#define CONFIG_SPL_RELOC_STACK         (CONFIG_SYS_INIT_L2_ADDR + 128 * 1024)
+#define CONFIG_SPL_RELOC_STACK_SIZE    (32 << 10)
+#define CONFIG_SPL_RELOC_MALLOC_ADDR   (CONFIG_SYS_INIT_L2_ADDR + 160 * 1024)
+#define CONFIG_SPL_RELOC_MALLOC_SIZE   (96 << 10)
+#define CONFIG_SPL_GD_ADDR             (CONFIG_SYS_INIT_L2_ADDR + 112 * 1024)
+#elif defined(CONFIG_NAND)
+#ifdef CONFIG_TPL_BUILD
+#define CONFIG_SYS_INIT_L2_ADDR                0xf8f80000
+#define CONFIG_SYS_INIT_L2_ADDR_PHYS   CONFIG_SYS_INIT_L2_ADDR
+#define CONFIG_SYS_L2_SIZE             (256 << 10)
+#define CONFIG_SYS_INIT_L2_END (CONFIG_SYS_INIT_L2_ADDR + CONFIG_SYS_L2_SIZE)
+#define CONFIG_SPL_RELOC_TEXT_BASE     0xf8f81000
+#define CONFIG_SPL_RELOC_STACK         (CONFIG_SYS_INIT_L2_ADDR + 192 * 1024)
+#define CONFIG_SPL_RELOC_MALLOC_ADDR   (CONFIG_SYS_INIT_L2_ADDR + 208 * 1024)
+#define CONFIG_SPL_RELOC_MALLOC_SIZE   (48 << 10)
+#define CONFIG_SPL_GD_ADDR             (CONFIG_SYS_INIT_L2_ADDR + 176 * 1024)
+#else
+#define CONFIG_SYS_INIT_L2_ADDR                0xf8f80000
+#define CONFIG_SYS_INIT_L2_ADDR_PHYS   CONFIG_SYS_INIT_L2_ADDR
+#define CONFIG_SYS_L2_SIZE             (256 << 10)
+#define CONFIG_SYS_INIT_L2_END (CONFIG_SYS_INIT_L2_ADDR + CONFIG_SYS_L2_SIZE)
+#define CONFIG_SPL_RELOC_TEXT_BASE     (CONFIG_SYS_INIT_L2_END - 0x2000)
+#define CONFIG_SPL_RELOC_STACK         ((CONFIG_SYS_INIT_L2_END - 1) & ~0xF)
+#endif
+#endif
+#endif
+
 /*
  * Serial Port
  */
 #define CONFIG_SYS_NS16550_SERIAL
 #define CONFIG_SYS_NS16550_REG_SIZE    1
 #define CONFIG_SYS_NS16550_CLK         get_bus_freq(0)
-#ifdef CONFIG_SPL_BUILD
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_INIT_MINIMAL)
 #define CONFIG_NS16550_MIN_FUNCTIONS
 #endif
 
 /*
  * Environment
  */
-#ifdef CONFIG_RAMBOOT_SPIFLASH
+#ifdef CONFIG_SPIFLASH
 #define CONFIG_ENV_IS_IN_SPI_FLASH
 #define CONFIG_ENV_SPI_BUS     0
 #define CONFIG_ENV_SPI_CS      0
 #define CONFIG_ENV_SIZE                0x2000  /* 8KB */
 #define CONFIG_ENV_OFFSET      0x100000        /* 1MB */
 #define CONFIG_ENV_SECT_SIZE   0x10000
-#elif defined(CONFIG_RAMBOOT_SDCARD)
+#elif defined(CONFIG_SDCARD)
 #define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_FSL_FIXED_MMC_LOCATION
 #define CONFIG_ENV_SIZE                0x2000
 #define CONFIG_SYS_MMC_ENV_DEV 0
 #elif defined(CONFIG_NAND)
-#define CONFIG_ENV_IS_IN_NAND
+#ifdef CONFIG_TPL_BUILD
+#define CONFIG_ENV_SIZE                0x2000
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_INIT_L2_ADDR + (160 << 10))
+#else
 #define CONFIG_ENV_SIZE                CONFIG_SYS_NAND_BLOCK_SIZE
-#define CONFIG_ENV_OFFSET      ((512 * 1024) + CONFIG_SYS_NAND_BLOCK_SIZE)
+#endif
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_OFFSET      (1024 * 1024)
 #define CONFIG_ENV_RANGE       (3 * CONFIG_ENV_SIZE)
 #elif defined(CONFIG_SYS_RAMBOOT)
 #define CONFIG_ENV_IS_NOWHERE  /* Store ENV in memory only */
index 9814ca2012f5946641046422152074fe27af4f0b..905bacfa969d367e0da30f5894edf8267c2480f2 100644 (file)
@@ -37,7 +37,6 @@
 #define CONFIG_E500MC                  /* BOOKE e500mc family */
 #define CONFIG_SYS_BOOK3E_HV           /* Category E.HV supported */
 #define CONFIG_MPC85xx                 /* MPC85xx/PQ3 platform */
-#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MP                      /* support multiple processors */
 
 #ifndef CONFIG_SYS_TEXT_BASE
diff --git a/include/configs/T4240EMU.h b/include/configs/T4240EMU.h
new file mode 100644 (file)
index 0000000..9fa6b77
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/*
+ * T4240 EMU board configuration file
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_T4240EMU
+#define CONFIG_PHYS_64BIT
+
+#define CONFIG_SYS_NO_FLASH            1
+#define CONFIG_SYS_FSL_DDR_EMU         1
+#define CONFIG_SYS_FSL_NO_QIXIS                1
+#define CONFIG_SYS_FSL_NO_SERDES       1
+
+#include "t4qds.h"
+
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_CACHE_FLUSH
+
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_SIZE         0x2000
+
+#define CONFIG_SYS_CLK_FREQ    100000000
+#define CONFIG_DDR_CLK_FREQ    133333333
+#define CONFIG_FSL_TBCLK_EXTRA_DIV 100
+
+
+/*
+ * DDR Setup
+ */
+#define CONFIG_SYS_SPD_BUS_NUM 1
+#define SPD_EEPROM_ADDRESS1    0x51
+#define SPD_EEPROM_ADDRESS2    0x52
+#define SPD_EEPROM_ADDRESS3    0x53
+#define SPD_EEPROM_ADDRESS4    0x54
+#define SPD_EEPROM_ADDRESS5    0x55
+#define SPD_EEPROM_ADDRESS6    0x56
+#define SPD_EEPROM_ADDRESS     SPD_EEPROM_ADDRESS1     /* for p3041/p5010 */
+#define CONFIG_SYS_SDRAM_SIZE  4096    /* for fixed parameter use */
+
+/*
+ * IFC Definitions
+ */
+#define CONFIG_SYS_NOR0_CSPR_EXT       (0xf)
+#define CONFIG_SYS_NOR_AMASK   IFC_AMASK(128*1024*1024)
+/* NOR Flash Timing Params */
+#define CONFIG_SYS_NOR0_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS \
+                               + 0x8000000) | \
+                               CSPR_PORT_SIZE_32 | \
+                               CSPR_MSEL_NOR | \
+                               CSPR_V)
+#define CONFIG_SYS_NOR_CSOR    CSOR_NOR_ADM_SHIFT(0)
+#define CONFIG_SYS_NOR_FTIM0   (FTIM0_NOR_TACSE(0x1) | \
+                               FTIM0_NOR_TEADC(0x1) | \
+                               FTIM0_NOR_TEAHC(0x1))
+#define CONFIG_SYS_NOR_FTIM1   (FTIM1_NOR_TACO(0x1) | \
+                               FTIM1_NOR_TRAD_NOR(0x1))
+#define CONFIG_SYS_NOR_FTIM2   (FTIM2_NOR_TCS(0x0) | \
+                               FTIM2_NOR_TCH(0x0) | \
+                               FTIM2_NOR_TWP(0x1))
+#define CONFIG_SYS_NOR_FTIM3   0x04000000
+#define CONFIG_SYS_IFC_CCR     0x01000000
+
+#define CONFIG_SYS_CSPR0_EXT           CONFIG_SYS_NOR0_CSPR_EXT
+#define CONFIG_SYS_CSPR0               CONFIG_SYS_NOR0_CSPR
+#define CONFIG_SYS_AMASK0              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR0               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NOR_FTIM3
+
+
+/* I2C */
+#define CONFIG_SYS_FSL_I2C_SPEED       4000000 /* faster speed for emulator */
+#define CONFIG_SYS_FSL_I2C2_SPEED      4000000
+
+/* Qman/Bman */
+#define CONFIG_SYS_DPAA_QBMAN          /* Support Q/Bman */
+#define CONFIG_SYS_BMAN_NUM_PORTALS    50
+#define CONFIG_SYS_BMAN_MEM_BASE       0xf4000000
+#define CONFIG_SYS_BMAN_MEM_PHYS       0xff4000000ull
+#define CONFIG_SYS_BMAN_MEM_SIZE       0x02000000
+#define CONFIG_SYS_QMAN_NUM_PORTALS    50
+#define CONFIG_SYS_QMAN_MEM_BASE       0xf6000000
+#define CONFIG_SYS_QMAN_MEM_PHYS       0xff6000000ull
+#define CONFIG_SYS_QMAN_MEM_SIZE       0x02000000
+
+#define CONFIG_SYS_DPAA_FMAN
+#define CONFIG_SYS_DPAA_PME
+#define CONFIG_SYS_PMAN
+#define CONFIG_SYS_DPAA_DCE
+#define CONFIG_SYS_DPAA_RMAN
+#define CONFIG_SYS_INTERLAKEN
+
+#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
+#define CONFIG_SYS_QE_FMAN_FW_ADDR             0xEFF40000
+#define CONFIG_SYS_QE_FMAN_FW_LENGTH   0x10000
+#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH)
+
+
+
+#define CONFIG_BOOTDELAY       0
+
+/*
+ * T4240 has 3 DDR controllers. Default to 3-way interleaving. It can be
+ * 3way_1KB, 3way_4KB, 3way_8KB. T4160 has 2 DDR controllers. Default to 2-way
+ * interleaving. It can be cacheline, page, bank, superbank.
+ * See doc/README.fsl-ddr for details.
+ */
+#ifdef CONFIG_PPC_T4240
+#define CTRL_INTLV_PREFERED 3way_4KB
+#else
+#define CTRL_INTLV_PREFERED cacheline
+#endif
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                               \
+       "hwconfig=fsl_ddr:"                                     \
+       "ctlr_intlv=" __stringify(CTRL_INTLV_PREFERED) ","      \
+       "bank_intlv=auto;"                                      \
+       "netdev=eth0\0"                                         \
+       "uboot=" __stringify(CONFIG_UBOOTPATH) "\0"                     \
+       "ubootaddr=" __stringify(CONFIG_SYS_TEXT_BASE) "\0"             \
+       "consoledev=ttyS0\0"                                    \
+       "ramdiskaddr=2000000\0"                                 \
+       "ramdiskfile=t4240emu/ramdisk.uboot\0"                  \
+       "fdtaddr=c00000\0"                                      \
+       "fdtfile=t4240emu/t4240emu.dtb\0"                               \
+       "bdev=sda3\0"                                           \
+       "c=ffe\0"
+
+/*
+ * For emulation this causes u-boot to jump to the start of the proof point
+ * app code automatically
+ */
+#define CONFIG_PROOF_POINTS                    \
+       "setenv bootargs root=/dev/$bdev rw "           \
+       "console=$consoledev,$baudrate $othbootargs;"   \
+       "cpu 1 release 0x29000000 - - -;"               \
+       "cpu 2 release 0x29000000 - - -;"               \
+       "cpu 3 release 0x29000000 - - -;"               \
+       "cpu 4 release 0x29000000 - - -;"               \
+       "cpu 5 release 0x29000000 - - -;"               \
+       "cpu 6 release 0x29000000 - - -;"               \
+       "cpu 7 release 0x29000000 - - -;"               \
+       "go 0x29000000"
+
+#define CONFIG_HVBOOT                          \
+       "setenv bootargs config-addr=0x60000000; "      \
+       "bootm 0x01000000 - 0x00f00000"
+
+#define CONFIG_LINUX                                   \
+       "errata;"                                       \
+       "setenv othbootargs ignore_loglevel;"           \
+       "setenv bootargs root=/dev/ram rw "             \
+       "console=$consoledev,$baudrate $othbootargs;"   \
+       "setenv ramdiskaddr 0x02000000;"                \
+       "setenv fdtaddr 0x00c00000;"                    \
+       "setenv loadaddr 0x1000000;"                    \
+       "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_BOOTCOMMAND             CONFIG_LINUX
+
+#endif /* __CONFIG_H */
index 9ac7f699228eb68e08467d4a8d8357169eb9c554..92a30ab09fc95e44255d9395470eb3d33872f483 100644 (file)
@@ -7,6 +7,9 @@
 /*
  * T4240 QDS board configuration file
  */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
 #define CONFIG_T4240QDS
 #define CONFIG_PHYS_64BIT
 
 
 #define CONFIG_ICS307_REFCLK_HZ                25000000  /* ICS307 ref clk freq */
 
+#ifdef CONFIG_RAMBOOT_PBL
+#define CONFIG_RAMBOOT_TEXT_BASE       CONFIG_SYS_TEXT_BASE
+#define CONFIG_RESET_VECTOR_ADDRESS    0xfffffffc
+#define CONFIG_PBLPBI_CONFIG $(SRCTREE)/board/freescale/t4qds/t4_pbi.cfg
+#define CONFIG_PBLRCW_CONFIG $(SRCTREE)/board/freescale/t4qds/t4_rcw.cfg
+#endif
+
+#ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
+/* Set 1M boot space */
+#define CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR (CONFIG_SYS_TEXT_BASE & 0xfff00000)
+#define CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS \
+               (0x300000000ull | CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR)
+#define CONFIG_RESET_VECTOR_ADDRESS 0xfffffffc
+#define CONFIG_SYS_NO_FLASH
+#endif
+
+#define CONFIG_SRIO_PCIE_BOOT_MASTER
+#define CONFIG_DDR_ECC
+
 #include "t4qds.h"
+
+#ifdef CONFIG_SYS_NO_FLASH
+#if !defined(CONFIG_SRIO_PCIE_BOOT_SLAVE) && !defined(CONFIG_RAMBOOT_PBL)
+#define CONFIG_ENV_IS_NOWHERE
+#endif
+#else
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
+#endif
+
+#if defined(CONFIG_SPIFLASH)
+#define CONFIG_SYS_EXTRA_ENV_RELOC
+#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_SIZE                 0x2000          /* 8KB */
+#define CONFIG_ENV_OFFSET               0x100000        /* 1MB */
+#define CONFIG_ENV_SECT_SIZE            0x10000
+#elif defined(CONFIG_SDCARD)
+#define CONFIG_SYS_EXTRA_ENV_RELOC
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_SYS_MMC_ENV_DEV          0
+#define CONFIG_ENV_SIZE                        0x2000
+#define CONFIG_ENV_OFFSET              (512 * 1097)
+#elif defined(CONFIG_NAND)
+#define CONFIG_SYS_EXTRA_ENV_RELOC
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_SIZE                        CONFIG_SYS_NAND_BLOCK_SIZE
+#define CONFIG_ENV_OFFSET              (5 * CONFIG_SYS_NAND_BLOCK_SIZE)
+#elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
+#define CONFIG_ENV_IS_IN_REMOTE
+#define CONFIG_ENV_ADDR                0xffe20000
+#define CONFIG_ENV_SIZE                0x2000
+#elif defined(CONFIG_ENV_IS_NOWHERE)
+#define CONFIG_ENV_SIZE                0x2000
+#else
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_SIZE                0x2000
+#define CONFIG_ENV_SECT_SIZE   0x20000 /* 128K (one sector) */
+#endif
+
+#define CONFIG_SYS_CLK_FREQ    get_board_sys_clk()
+#define CONFIG_DDR_CLK_FREQ    get_board_ddr_clk()
+
+#ifndef __ASSEMBLY__
+unsigned long get_board_sys_clk(void);
+unsigned long get_board_ddr_clk(void);
+#endif
+
+/* EEPROM */
+#define CONFIG_ID_EEPROM
+#define CONFIG_SYS_I2C_EEPROM_NXID
+#define CONFIG_SYS_EEPROM_BUS_NUM      0
+#define CONFIG_SYS_I2C_EEPROM_ADDR     0x57
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
+
+/*
+ * DDR Setup
+ */
+#define CONFIG_SYS_SPD_BUS_NUM 0
+#define SPD_EEPROM_ADDRESS1    0x51
+#define SPD_EEPROM_ADDRESS2    0x52
+#define SPD_EEPROM_ADDRESS3    0x53
+#define SPD_EEPROM_ADDRESS4    0x54
+#define SPD_EEPROM_ADDRESS5    0x55
+#define SPD_EEPROM_ADDRESS6    0x56
+#define SPD_EEPROM_ADDRESS     SPD_EEPROM_ADDRESS1     /* for p3041/p5010 */
+#define CONFIG_SYS_SDRAM_SIZE  4096    /* for fixed parameter use */
+
+/*
+ * IFC Definitions
+ */
+#define CONFIG_SYS_NOR0_CSPR_EXT       (0xf)
+#define CONFIG_SYS_NOR0_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS \
+                               + 0x8000000) | \
+                               CSPR_PORT_SIZE_16 | \
+                               CSPR_MSEL_NOR | \
+                               CSPR_V)
+#define CONFIG_SYS_NOR1_CSPR_EXT       (0xf)
+#define CONFIG_SYS_NOR1_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS) | \
+                               CSPR_PORT_SIZE_16 | \
+                               CSPR_MSEL_NOR | \
+                               CSPR_V)
+#define CONFIG_SYS_NOR_AMASK   IFC_AMASK(128*1024*1024)
+/* NOR Flash Timing Params */
+#define CONFIG_SYS_NOR_CSOR    CSOR_NAND_TRHZ_80
+
+#define CONFIG_SYS_NOR_FTIM0   (FTIM0_NOR_TACSE(0x4) | \
+                               FTIM0_NOR_TEADC(0x5) | \
+                               FTIM0_NOR_TEAHC(0x5))
+#define CONFIG_SYS_NOR_FTIM1   (FTIM1_NOR_TACO(0x35) | \
+                               FTIM1_NOR_TRAD_NOR(0x1A) |\
+                               FTIM1_NOR_TSEQRAD_NOR(0x13))
+#define CONFIG_SYS_NOR_FTIM2   (FTIM2_NOR_TCS(0x4) | \
+                               FTIM2_NOR_TCH(0x4) | \
+                               FTIM2_NOR_TWPH(0x0E) | \
+                               FTIM2_NOR_TWP(0x1c))
+#define CONFIG_SYS_NOR_FTIM3   0x0
+
+#define CONFIG_SYS_FLASH_QUIET_TEST
+#define CONFIG_FLASH_SHOW_PROGRESS     45 /* count down from 45/5: 9..1 */
+
+#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* number of banks */
+#define CONFIG_SYS_MAX_FLASH_SECT      1024    /* sectors per device */
+#define CONFIG_SYS_FLASH_ERASE_TOUT    60000   /* Flash Erase Timeout (ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Flash Write Timeout (ms) */
+
+#define CONFIG_SYS_FLASH_EMPTY_INFO
+#define CONFIG_SYS_FLASH_BANKS_LIST    {CONFIG_SYS_FLASH_BASE_PHYS \
+                                       + 0x8000000, CONFIG_SYS_FLASH_BASE_PHYS}
+
+#define CONFIG_FSL_QIXIS       /* use common QIXIS code */
+#define QIXIS_BASE                     0xffdf0000
+#define QIXIS_LBMAP_SWITCH             6
+#define QIXIS_LBMAP_MASK               0x0f
+#define QIXIS_LBMAP_SHIFT              0
+#define QIXIS_LBMAP_DFLTBANK           0x00
+#define QIXIS_LBMAP_ALTBANK            0x04
+#define QIXIS_RST_CTL_RESET            0x83
+#define QIXIS_RST_FORCE_MEM            0x1
+#define QIXIS_RCFG_CTL_RECONFIG_IDLE   0x20
+#define QIXIS_RCFG_CTL_RECONFIG_START  0x21
+#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE  0x08
+#define QIXIS_BASE_PHYS                (0xf00000000ull | QIXIS_BASE)
+
+#define CONFIG_SYS_CSPR3_EXT   (0xf)
+#define CONFIG_SYS_CSPR3       (CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) \
+                               | CSPR_PORT_SIZE_8 \
+                               | CSPR_MSEL_GPCM \
+                               | CSPR_V)
+#define CONFIG_SYS_AMASK3      IFC_AMASK(4*1024)
+#define CONFIG_SYS_CSOR3       0x0
+/* QIXIS Timing parameters for IFC CS3 */
+#define CONFIG_SYS_CS3_FTIM0           (FTIM0_GPCM_TACSE(0x0e) | \
+                                       FTIM0_GPCM_TEADC(0x0e) | \
+                                       FTIM0_GPCM_TEAHC(0x0e))
+#define CONFIG_SYS_CS3_FTIM1           (FTIM1_GPCM_TACO(0xff) | \
+                                       FTIM1_GPCM_TRAD(0x3f))
+#define CONFIG_SYS_CS3_FTIM2           (FTIM2_GPCM_TCS(0x0e) | \
+                                       FTIM2_GPCM_TCH(0x0) | \
+                                       FTIM2_GPCM_TWP(0x1f))
+#define CONFIG_SYS_CS3_FTIM3           0x0
+
+/* NAND Flash on IFC */
+#define CONFIG_NAND_FSL_IFC
+#define CONFIG_SYS_NAND_BASE           0xff800000
+#define CONFIG_SYS_NAND_BASE_PHYS      (0xf00000000ull | CONFIG_SYS_NAND_BASE)
+
+#define CONFIG_SYS_NAND_CSPR_EXT       (0xf)
+#define CONFIG_SYS_NAND_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \
+                               | CSPR_PORT_SIZE_8 /* Port Size = 8 bit */ \
+                               | CSPR_MSEL_NAND        /* MSEL = NAND */ \
+                               | CSPR_V)
+#define CONFIG_SYS_NAND_AMASK  IFC_AMASK(64*1024)
+
+#define CONFIG_SYS_NAND_CSOR    (CSOR_NAND_ECC_ENC_EN   /* ECC on encode */ \
+                               | CSOR_NAND_ECC_DEC_EN  /* ECC on decode */ \
+                               | CSOR_NAND_ECC_MODE_4  /* 4-bit ECC */ \
+                               | CSOR_NAND_RAL_3       /* RAL = 2Byes */ \
+                               | CSOR_NAND_PGS_2K      /* Page Size = 2K */ \
+                               | CSOR_NAND_SPRZ_64/* Spare size = 64 */ \
+                               | CSOR_NAND_PB(64))     /*Pages Per Block = 64*/
+
+#define CONFIG_SYS_NAND_ONFI_DETECTION
+
+/* ONFI NAND Flash mode0 Timing Params */
+#define CONFIG_SYS_NAND_FTIM0          (FTIM0_NAND_TCCST(0x07) | \
+                                       FTIM0_NAND_TWP(0x18)   | \
+                                       FTIM0_NAND_TWCHT(0x07) | \
+                                       FTIM0_NAND_TWH(0x0a))
+#define CONFIG_SYS_NAND_FTIM1          (FTIM1_NAND_TADLE(0x32) | \
+                                       FTIM1_NAND_TWBE(0x39)  | \
+                                       FTIM1_NAND_TRR(0x0e)   | \
+                                       FTIM1_NAND_TRP(0x18))
+#define CONFIG_SYS_NAND_FTIM2          (FTIM2_NAND_TRAD(0x0f) | \
+                                       FTIM2_NAND_TREH(0x0a) | \
+                                       FTIM2_NAND_TWHRE(0x1e))
+#define CONFIG_SYS_NAND_FTIM3          0x0
+
+#define CONFIG_SYS_NAND_DDR_LAW                11
+
+#define CONFIG_SYS_NAND_BASE_LIST      { CONFIG_SYS_NAND_BASE }
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_MTD_NAND_VERIFY_WRITE
+#define CONFIG_CMD_NAND
+
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128 * 1024)
+
+#if defined(CONFIG_NAND)
+#define CONFIG_SYS_CSPR0_EXT           CONFIG_SYS_NAND_CSPR_EXT
+#define CONFIG_SYS_CSPR0               CONFIG_SYS_NAND_CSPR
+#define CONFIG_SYS_AMASK0              CONFIG_SYS_NAND_AMASK
+#define CONFIG_SYS_CSOR0               CONFIG_SYS_NAND_CSOR
+#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NAND_FTIM0
+#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NAND_FTIM1
+#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NAND_FTIM2
+#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NAND_FTIM3
+#define CONFIG_SYS_CSPR2_EXT           CONFIG_SYS_NOR0_CSPR_EXT
+#define CONFIG_SYS_CSPR2               CONFIG_SYS_NOR0_CSPR
+#define CONFIG_SYS_AMASK2              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR2               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS2_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS2_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS2_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS2_FTIM3           CONFIG_SYS_NOR_FTIM3
+#else
+#define CONFIG_SYS_CSPR0_EXT           CONFIG_SYS_NOR0_CSPR_EXT
+#define CONFIG_SYS_CSPR0               CONFIG_SYS_NOR0_CSPR
+#define CONFIG_SYS_AMASK0              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR0               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NOR_FTIM3
+#define CONFIG_SYS_CSPR2_EXT           CONFIG_SYS_NAND_CSPR_EXT
+#define CONFIG_SYS_CSPR2               CONFIG_SYS_NAND_CSPR
+#define CONFIG_SYS_AMASK2              CONFIG_SYS_NAND_AMASK
+#define CONFIG_SYS_CSOR2               CONFIG_SYS_NAND_CSOR
+#define CONFIG_SYS_CS2_FTIM0           CONFIG_SYS_NAND_FTIM0
+#define CONFIG_SYS_CS2_FTIM1           CONFIG_SYS_NAND_FTIM1
+#define CONFIG_SYS_CS2_FTIM2           CONFIG_SYS_NAND_FTIM2
+#define CONFIG_SYS_CS2_FTIM3           CONFIG_SYS_NAND_FTIM3
+#endif
+#define CONFIG_SYS_CSPR1_EXT           CONFIG_SYS_NOR1_CSPR_EXT
+#define CONFIG_SYS_CSPR1               CONFIG_SYS_NOR1_CSPR
+#define CONFIG_SYS_AMASK1              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR1               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS1_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS1_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS1_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS1_FTIM3           CONFIG_SYS_NOR_FTIM3
+
+#if defined(CONFIG_RAMBOOT_PBL)
+#define CONFIG_SYS_RAMBOOT
+#endif
+
+
+/* I2C */
+#define CONFIG_SYS_FSL_I2C_SPEED       100000  /* I2C speed */
+#define CONFIG_SYS_FSL_I2C2_SPEED      100000  /* I2C2 speed */
+#define I2C_MUX_PCA_ADDR_PRI           0x77 /* I2C bus multiplexer,primary */
+#define I2C_MUX_PCA_ADDR_SEC           0x76 /* I2C bus multiplexer,secondary */
+
+#define I2C_MUX_CH_DEFAULT     0x8
+#define I2C_MUX_CH_VOL_MONITOR 0xa
+#define I2C_MUX_CH_VSC3316_FS  0xc
+#define I2C_MUX_CH_VSC3316_BS  0xd
+
+/* Voltage monitor on channel 2*/
+#define I2C_VOL_MONITOR_ADDR           0x40
+#define I2C_VOL_MONITOR_BUS_V_OFFSET   0x2
+#define I2C_VOL_MONITOR_BUS_V_OVF      0x1
+#define I2C_VOL_MONITOR_BUS_V_SHIFT    3
+
+/* VSC Crossbar switches */
+#define CONFIG_VSC_CROSSBAR
+#define VSC3316_FSM_TX_ADDR    0x70
+#define VSC3316_FSM_RX_ADDR    0x71
+
+/*
+ * RapidIO
+ */
+
+/*
+ * for slave u-boot IMAGE instored in master memory space,
+ * PHYS must be aligned based on the SIZE
+ */
+#define CONFIG_SRIO_PCIE_BOOT_IMAGE_MEM_PHYS 0xfef080000ull
+#define CONFIG_SRIO_PCIE_BOOT_IMAGE_MEM_BUS1 0xfff80000ull
+#define CONFIG_SRIO_PCIE_BOOT_IMAGE_SIZE 0x80000       /* 512K */
+#define CONFIG_SRIO_PCIE_BOOT_IMAGE_MEM_BUS2 0x3fff80000ull
+/*
+ * for slave UCODE and ENV instored in master memory space,
+ * PHYS must be aligned based on the SIZE
+ */
+#define CONFIG_SRIO_PCIE_BOOT_UCODE_ENV_MEM_PHYS 0xfef040000ull
+#define CONFIG_SRIO_PCIE_BOOT_UCODE_ENV_MEM_BUS 0x3ffe00000ull
+#define CONFIG_SRIO_PCIE_BOOT_UCODE_ENV_SIZE 0x40000   /* 256K */
+
+/* slave core release by master*/
+#define CONFIG_SRIO_PCIE_BOOT_BRR_OFFSET 0xe00e4
+#define CONFIG_SRIO_PCIE_BOOT_RELEASE_MASK 0x00000001 /* release core 0 */
+
+/*
+ * SRIO_PCIE_BOOT - SLAVE
+ */
+#ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
+#define CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR 0xFFE00000
+#define CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS \
+               (0x300000000ull | CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR)
+#endif
+/*
+ * eSPI - Enhanced SPI
+ */
+#define CONFIG_FSL_ESPI
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_SST
+#define CONFIG_CMD_SF
+#define CONFIG_SF_DEFAULT_SPEED         10000000
+#define CONFIG_SF_DEFAULT_MODE          0
+
+
+/* Qman/Bman */
+#ifndef CONFIG_NOBQFMAN
+#define CONFIG_SYS_DPAA_QBMAN          /* Support Q/Bman */
+#define CONFIG_SYS_BMAN_NUM_PORTALS    50
+#define CONFIG_SYS_BMAN_MEM_BASE       0xf4000000
+#define CONFIG_SYS_BMAN_MEM_PHYS       0xff4000000ull
+#define CONFIG_SYS_BMAN_MEM_SIZE       0x02000000
+#define CONFIG_SYS_QMAN_NUM_PORTALS    50
+#define CONFIG_SYS_QMAN_MEM_BASE       0xf6000000
+#define CONFIG_SYS_QMAN_MEM_PHYS       0xff6000000ull
+#define CONFIG_SYS_QMAN_MEM_SIZE       0x02000000
+
+#define CONFIG_SYS_DPAA_FMAN
+#define CONFIG_SYS_DPAA_PME
+#define CONFIG_SYS_PMAN
+#define CONFIG_SYS_DPAA_DCE
+#define CONFIG_SYS_DPAA_RMAN
+#define CONFIG_SYS_INTERLAKEN
+
+/* Default address of microcode for the Linux Fman driver */
+#if defined(CONFIG_SPIFLASH)
+/*
+ * 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
+#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_FMAN_FW_IN_MMC
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     (512 * 1130)
+#elif defined(CONFIG_NAND)
+#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
+#elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
+/*
+ * Slave has no ucode locally, it can fetch this from remote. When implementing
+ * in two corenet boards, slave's ucode could be stored in master's memory
+ * space, the address can be mapped from slave TLB->slave LAW->
+ * slave SRIO or PCIE outbound window->master inbound window->
+ * master LAW->the ucode address in master's memory space.
+ */
+#define CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
+#define CONFIG_SYS_QE_FMAN_FW_ADDR     0xFFE00000
+#else
+#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
+#define CONFIG_SYS_QE_FMAN_FW_ADDR             0xEFF40000
+#endif
+#define CONFIG_SYS_QE_FMAN_FW_LENGTH   0x10000
+#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH)
+#endif /* CONFIG_NOBQFMAN */
+
+#ifdef CONFIG_SYS_DPAA_FMAN
+#define CONFIG_FMAN_ENET
+#define CONFIG_PHYLIB_10G
+#define CONFIG_PHY_VITESSE
+#define CONFIG_PHY_TERANETICS
+#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
+#define FM1_10GEC1_PHY_ADDR    0x0
+#define FM1_10GEC2_PHY_ADDR    0x1
+#define FM2_10GEC1_PHY_ADDR    0x2
+#define FM2_10GEC2_PHY_ADDR    0x3
+#endif
+
+
+/* SATA */
+#ifdef CONFIG_FSL_SATA_V2
+#define CONFIG_LIBATA
+#define CONFIG_FSL_SATA
+
+#define CONFIG_SYS_SATA_MAX_DEVICE     2
+#define CONFIG_SATA1
+#define CONFIG_SYS_SATA1               CONFIG_SYS_MPC85xx_SATA1_ADDR
+#define CONFIG_SYS_SATA1_FLAGS         FLAGS_DMA
+#define CONFIG_SATA2
+#define CONFIG_SYS_SATA2               CONFIG_SYS_MPC85xx_SATA2_ADDR
+#define CONFIG_SYS_SATA2_FLAGS         FLAGS_DMA
+
+#define CONFIG_LBA48
+#define CONFIG_CMD_SATA
+#define CONFIG_DOS_PARTITION
+#define CONFIG_CMD_EXT2
+#endif
+
+#ifdef CONFIG_FMAN_ENET
+#define CONFIG_MII             /* MII PHY management */
+#define CONFIG_ETHPRIME                "FM1@DTSEC1"
+#define CONFIG_PHY_GIGE                /* Include GbE speed/duplex detection */
+#endif
+
+/*
+* USB
+*/
+#define CONFIG_CMD_USB
+#define CONFIG_USB_STORAGE
+#define CONFIG_USB_EHCI
+#define CONFIG_USB_EHCI_FSL
+#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
+#define CONFIG_CMD_EXT2
+#define CONFIG_HAS_FSL_DR_USB
+
+#define CONFIG_MMC
+
+#ifdef CONFIG_MMC
+#define CONFIG_FSL_ESDHC
+#define CONFIG_SYS_FSL_ESDHC_ADDR       CONFIG_SYS_MPC85xx_ESDHC_ADDR
+#define CONFIG_SYS_FSL_ESDHC_BROKEN_TIMEOUT
+#define CONFIG_CMD_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_DOS_PARTITION
+#endif
+
+#define CONFIG_BOOTDELAY       10      /* -1 disables auto-boot */
+
+#define __USB_PHY_TYPE utmi
+
+/*
+ * T4240 has 3 DDR controllers. Default to 3-way interleaving. It can be
+ * 3way_1KB, 3way_4KB, 3way_8KB. T4160 has 2 DDR controllers. Default to 2-way
+ * interleaving. It can be cacheline, page, bank, superbank.
+ * See doc/README.fsl-ddr for details.
+ */
+#ifdef CONFIG_PPC_T4240
+#define CTRL_INTLV_PREFERED 3way_4KB
+#else
+#define CTRL_INTLV_PREFERED cacheline
+#endif
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                               \
+       "hwconfig=fsl_ddr:"                                     \
+       "ctlr_intlv=" __stringify(CTRL_INTLV_PREFERED) ","      \
+       "bank_intlv=auto;"                                      \
+       "usb1:dr_mode=host,phy_type=" __stringify(__USB_PHY_TYPE) "\0"\
+       "netdev=eth0\0"                                         \
+       "uboot=" __stringify(CONFIG_UBOOTPATH) "\0"                     \
+       "ubootaddr=" __stringify(CONFIG_SYS_TEXT_BASE) "\0"             \
+       "tftpflash=tftpboot $loadaddr $uboot && "               \
+       "protect off $ubootaddr +$filesize && "                 \
+       "erase $ubootaddr +$filesize && "                       \
+       "cp.b $loadaddr $ubootaddr $filesize && "               \
+       "protect on $ubootaddr +$filesize && "                  \
+       "cmp.b $loadaddr $ubootaddr $filesize\0"                \
+       "consoledev=ttyS0\0"                                    \
+       "ramdiskaddr=2000000\0"                                 \
+       "ramdiskfile=t4240qds/ramdisk.uboot\0"                  \
+       "fdtaddr=c00000\0"                                      \
+       "fdtfile=t4240qds/t4240qds.dtb\0"                               \
+       "bdev=sda3\0"                                           \
+       "c=ffe\0"
+
+#define CONFIG_HVBOOT                          \
+       "setenv bootargs config-addr=0x60000000; "      \
+       "bootm 0x01000000 - 0x00f00000"
+
+#define CONFIG_ALU                             \
+       "setenv bootargs root=/dev/$bdev rw "           \
+       "console=$consoledev,$baudrate $othbootargs;"   \
+       "cpu 1 release 0x01000000 - - -;"               \
+       "cpu 2 release 0x01000000 - - -;"               \
+       "cpu 3 release 0x01000000 - - -;"               \
+       "cpu 4 release 0x01000000 - - -;"               \
+       "cpu 5 release 0x01000000 - - -;"               \
+       "cpu 6 release 0x01000000 - - -;"               \
+       "cpu 7 release 0x01000000 - - -;"               \
+       "go 0x01000000"
+
+#define CONFIG_LINUX                           \
+       "setenv bootargs root=/dev/ram rw "             \
+       "console=$consoledev,$baudrate $othbootargs;"   \
+       "setenv ramdiskaddr 0x02000000;"                \
+       "setenv fdtaddr 0x00c00000;"                    \
+       "setenv loadaddr 0x1000000;"                    \
+       "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_HDBOOT                                  \
+       "setenv bootargs root=/dev/$bdev rw "           \
+       "console=$consoledev,$baudrate $othbootargs;"   \
+       "tftp $loadaddr $bootfile;"                     \
+       "tftp $fdtaddr $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 $bootfile;"             \
+       "tftp $fdtaddr $fdtfile;"               \
+       "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_RAMBOOTCOMMAND                          \
+       "setenv bootargs root=/dev/ram rw "             \
+       "console=$consoledev,$baudrate $othbootargs;"   \
+       "tftp $ramdiskaddr $ramdiskfile;"               \
+       "tftp $loadaddr $bootfile;"                     \
+       "tftp $fdtaddr $fdtfile;"                       \
+       "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_BOOTCOMMAND             CONFIG_LINUX
+
+#ifdef CONFIG_SECURE_BOOT
+#include <asm/fsl_secure_boot.h>
+#endif
+
+#endif /* __CONFIG_H */
index b18a3fa643a378141252ffe08d2dcdef285d7807..43d3d99bcb822653bd01b4811ff63d5615dae9ea 100644 (file)
@@ -31,6 +31,8 @@
 #define CONFIG_HOSTNAME                a3m071
 #endif
 
+#define CONFIG_BOOTCOUNT_LIMIT
+
 /*
  * Serial console configuration
  */
@@ -65,7 +67,8 @@
 #define CONFIG_FLASH_CFI_MTD
 #define MTDIDS_DEFAULT          "nor0=fc000000.flash"
 #define MTDPARTS_DEFAULT       "mtdparts=fc000000.flash:512k(u-boot)," \
-                                               "256k(env),"    \
+                                               "128k(env1),"   \
+                                               "128k(env2),"   \
                                                "128k(hwinfo)," \
                                                "1M(nvramsim)," \
                                                "128k(dtb),"    \
@@ -73,7 +76,9 @@
                                                "128k(sysinfo),"        \
                                                "7552k(root),"  \
                                                "4M(app),"      \
-                                               "13568k(data)"
+                                               "5376k(data),"  \
+                                               "8M(install)"
+
 #define CONFIG_LZO                     /* needed for UBI */
 #define CONFIG_RBTREE                  /* needed for UBI */
 #define CONFIG_CMD_MTDPARTS
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
                "nfsroot=${serverip}:${rootpath}\0"                     \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
-       "mtdargs=setenv bootargs root=/dev/mtdblock7 "                  \
+       "mtdargs=setenv bootargs root=/dev/mtdblock8 "                  \
                "rootfstype=squashfs,jffs2\0"                           \
        "addhost=setenv bootargs ${bootargs} "                          \
                "hostname=${hostname}\0"                                \
                ":${hostname}:${netdev}:off panic=1\0"                  \
        "addtty=setenv bootargs ${bootargs} "                           \
                "console=${consoledev},${baudrate}\0"                   \
-       "flash_nfs=run nfsargs addip addtty addhost;"                   \
+       "flash_nfs=run nfsargs addip addtty addmtd addhost;"            \
                "bootm ${kernel_addr} - ${fdt_addr}\0"                  \
-       "flash_mtd=run mtdargs addip addtty addhost;"                   \
+       "flash_mtd=run mtdargs addip addtty addmtd addhost;"            \
                "bootm ${kernel_addr} - ${fdt_addr}\0"                  \
-       "flash_self=run ramargs addip addtty addhost;"                  \
+       "flash_self=run ramargs addip addtty addmtd addhost;"           \
                "bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}\0"    \
        "net_nfs=tftp ${kernel_addr_r} ${bootfile};"                    \
                "tftp ${fdt_addr_r} ${fdtfile};"                        \
-               "run nfsargs addip addtty addhost;"                     \
+               "run nfsargs addip addtty addmtd addhost;"              \
                "bootm ${kernel_addr_r} - ${fdt_addr_r}\0"              \
        "load=tftp ${loadaddr} " __stringify(CONFIG_HOSTNAME)           \
                "/u-boot-img.bin\0"                                     \
-       "update=protect off fc000000 fc07ffff; "                        \
+       "update=protect off fc000000 fc07ffff;                        \
                "era fc000000 fc07ffff;"                                \
                "cp.b ${loadaddr} fc000000 ${filesize}\0"               \
        "upd=run load;run update\0"                                     \
+       "upd_fdt=tftp 1800000 a3m071/a3m071.dtb;"                       \
+               "run mtdargs addip addtty addmtd addhost;"              \
+               "fdt addr 1800000;fdt boardsetup;fdt chosen;"           \
+               "erase fc1e0000 fc1fffff;cp.b 1800000 fc1e0000 20000"   \
+       "upd_kernel=tftp 1000000 a3m071/uImage-uncompressed;"           \
+               "erase fc200000 fc6fffff;"                              \
+               "cp.b 1000000 fc200000 ${filesize}"                     \
+       "addmtd=setenv bootargs ${bootargs} ${mtdparts}\0"              \
+       "mtdids=" MTDIDS_DEFAULT "\0"                                   \
+       "mtdparts=" MTDPARTS_DEFAULT "\0"                               \
        ""
 
 #define CONFIG_BOOTCOMMAND     "run flash_mtd"
index e0a87f8bc4d193f0c83670045a7c0867a1785f22..eae5a19f2ab391911107e6ab1a31c9d39e1d4a98 100644 (file)
        "run mmcboot;" \
        "run nandboot;"
 
-/* USB Composite download gadget - g_dnl */
-#define CONFIG_USB_GADGET
-#define CONFIG_USBDOWNLOAD_GADGET
-
-/* USB TI's IDs */
-#define CONFIG_G_DNL_VENDOR_NUM 0x0403
-#define CONFIG_G_DNL_PRODUCT_NUM 0xBD00
-#define CONFIG_G_DNL_MANUFACTURER "Texas Instruments"
-
-/* USB Device Firmware Update support */
-#define CONFIG_DFU_FUNCTION
-#define CONFIG_DFU_MMC
-#define CONFIG_CMD_DFU
-#define DFU_ALT_INFO_MMC \
-       "boot part 0 1;" \
-       "rootfs part 0 2;" \
-       "MLO fat 0 1;" \
-       "MLO.raw mmc 100 100;" \
-       "u-boot.img.raw mmc 300 400;" \
-       "spl-os-args.raw mmc 80 80;" \
-       "spl-os-image.raw mmc 900 2000;" \
-       "spl-os-args fat 0 1;" \
-       "spl-os-image fat 0 1;" \
-       "u-boot.img fat 0 1;" \
-       "uEnv.txt fat 0 1"
-#ifdef CONFIG_NAND
-#define CONFIG_DFU_NAND
-#define DFU_ALT_INFO_NAND \
-       "SPL part 0 1;" \
-       "SPL.backup1 part 0 2;" \
-       "SPL.backup2 part 0 3;" \
-       "SPL.backup3 part 0 4;" \
-       "u-boot part 0 5;" \
-       "u-boot-spl-os part 0 6;" \
-       "kernel part 0 8;" \
-       "rootfs part 0 9"
-#endif
-
 /* NS16550 Configuration */
 #define CONFIG_SYS_NS16550_COM1                0x44e09000      /* Base EVM has UART0 */
 #define CONFIG_SYS_NS16550_COM2                0x48022000      /* UART1 */
 /* SPL */
 #ifndef CONFIG_NOR_BOOT
 #define CONFIG_SPL_YMODEM_SUPPORT
+
+/* CPSW support */
+#define CONFIG_SPL_ETH_SUPPORT
+
+/* USB gadget RNDIS */
+#define CONFIG_SPL_MUSB_NEW_SUPPORT
+
+/* General network SPL, both CPSW and USB gadget RNDIS */
 #define CONFIG_SPL_NET_SUPPORT
 #define CONFIG_SPL_ENV_SUPPORT
 #define CONFIG_SPL_NET_VCI_STRING      "AM335x U-Boot SPL"
-#define CONFIG_SPL_ETH_SUPPORT
+
+/* SPI flash. */
 #define CONFIG_SPL_SPI_SUPPORT
 #define CONFIG_SPL_SPI_FLASH_SUPPORT
 #define CONFIG_SPL_SPI_LOAD
 #define CONFIG_SPL_SPI_BUS             0
 #define CONFIG_SPL_SPI_CS              0
 #define CONFIG_SYS_SPI_U_BOOT_OFFS     0x20000
-#define CONFIG_SPL_MUSB_NEW_SUPPORT
+
 #define CONFIG_SPL_LDSCRIPT            "$(CPUDIR)/am33xx/u-boot-spl.lds"
 
 #ifdef CONFIG_NAND
 #endif
 
 /*
- * USB configuration
+ * USB configuration.  We enable MUSB support, both for host and for
+ * gadget.  We set USB0 as peripheral and USB1 as host, based on the
+ * board schematic and physical port wired to each.  Then for host we
+ * add mass storage support and for gadget we add both RNDIS ethernet
+ * and DFU.
  */
 #define CONFIG_USB_MUSB_DSPS
 #define CONFIG_ARCH_MISC_INIT
 #define CONFIG_MUSB_GADGET
 #define CONFIG_MUSB_PIO_ONLY
 #define CONFIG_MUSB_DISABLE_BULK_COMBINE_SPLIT
+#define CONFIG_USB_GADGET
+#define CONFIG_USBDOWNLOAD_GADGET
 #define CONFIG_USB_GADGET_DUALSPEED
 #define CONFIG_USB_GADGET_VBUS_DRAW    2
 #define CONFIG_MUSB_HOST
 #define CONFIG_USB_ETHER
 #define CONFIG_USB_ETH_RNDIS
 #define CONFIG_USBNET_HOST_ADDR        "de:ad:be:af:00:00"
+
+/* USB TI's IDs */
+#define CONFIG_G_DNL_VENDOR_NUM 0x0403
+#define CONFIG_G_DNL_PRODUCT_NUM 0xBD00
+#define CONFIG_G_DNL_MANUFACTURER "Texas Instruments"
 #endif /* CONFIG_MUSB_GADGET */
 
 #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_USBETH_SUPPORT)
 #undef CONFIG_SPL_ETH_SUPPORT
 #endif
 
+/* USB Device Firmware Update support */
+#define CONFIG_DFU_FUNCTION
+#define CONFIG_DFU_MMC
+#define CONFIG_CMD_DFU
+#define DFU_ALT_INFO_MMC \
+       "boot part 0 1;" \
+       "rootfs part 0 2;" \
+       "MLO fat 0 1;" \
+       "MLO.raw mmc 100 100;" \
+       "u-boot.img.raw mmc 300 400;" \
+       "spl-os-args.raw mmc 80 80;" \
+       "spl-os-image.raw mmc 900 2000;" \
+       "spl-os-args fat 0 1;" \
+       "spl-os-image fat 0 1;" \
+       "u-boot.img fat 0 1;" \
+       "uEnv.txt fat 0 1"
+#ifdef CONFIG_NAND
+#define CONFIG_DFU_NAND
+#define DFU_ALT_INFO_NAND \
+       "SPL part 0 1;" \
+       "SPL.backup1 part 0 2;" \
+       "SPL.backup2 part 0 3;" \
+       "SPL.backup3 part 0 4;" \
+       "u-boot part 0 5;" \
+       "u-boot-spl-os part 0 6;" \
+       "kernel part 0 8;" \
+       "rootfs part 0 9"
+#endif
+
 /*
  * Default to using SPI for environment, etc.
  * 0x000000 - 0x020000 : SPL (128KiB)
index 2aea55567da54d387b57510537c2eb7d36bbfe76..fc4ecec7ad47195ded6f4a462ecfb1700d50c5c4 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <asm/hardware.h>
 
+#define CONFIG_SYS_TEXT_BASE           0x73f00000
+
 #define CONFIG_AT91_LEGACY
 #define CONFIG_ATMEL_LEGACY            /* required until (g)pio is fixed */
 
index be8a28c32714f7e89a262f09242a56b37900fa1d..28a79258df41a783be95d459f7f5fef5219e5dd6 100644 (file)
 #define CONFIG_PMECC_CAP               2
 #define CONFIG_PMECC_SECTOR_SIZE       512
 #define CONFIG_PMECC_INDEX_TABLE_OFFSET        0x8000
+
+#define CONFIG_CMD_NAND_TRIMFFS
+
 #endif
 
 #define CONFIG_MTD_PARTITIONS
index 2b1533c85ac70eda187c9040f5daa7f5deb06c6e..4a2ac9aabde12354b353c32ade3f31eea6086d5a 100644 (file)
@@ -11,6 +11,8 @@
 
 #include <asm/hardware.h>
 
+#define CONFIG_SYS_TEXT_BASE           0x26f00000
+
 /* ARM asynchronous clock */
 #define CONFIG_SYS_AT91_SLOW_CLOCK     32768
 #define CONFIG_SYS_AT91_MAIN_CLOCK     12000000        /* 12 MHz crystal */
 #define CONFIG_ATMEL_NAND_HW_PMECC     1
 #define CONFIG_PMECC_CAP               2
 #define CONFIG_PMECC_SECTOR_SIZE       512
-#define CONFIG_PMECC_INDEX_TABLE_OFFSET        0x8000
+
+#define CONFIG_CMD_NAND_TRIMFFS
 
 #define CONFIG_MTD_DEVICE
 #define CONFIG_CMD_MTDPARTS
index 7d8227503a8f11a417aa0af70b481d3f15e3921d..5b3aac795492915cd1d9ff6d2a90116e4000bb29 100644 (file)
 #ifdef CONFIG_SYS_I2C_SOFT
 #define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF9
 #define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF8
-#define CONFIG_SYS_SOFT_I2C_SPEED      50000
-#define CONFIG_SYS_SOFT_I2C_SLAVE      0xFE
+#define CONFIG_SYS_I2C_SOFT_SPEED      50000
+#define CONFIG_SYS_I2C_SOFT_SLAVE      0xFE
 #endif
 
 /*
index c76bc2cbe6154779c822097377ca3f0a2da23d5b..d20074c7310da6444c2fc39b7f4b1daf1497c66e 100644 (file)
 #ifdef 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
index 0f3f61a0d5e53607aa621e6095d695fb72e236a4..ac7ed812d68b6cd3118948633f56e4c22a2a65fe 100644 (file)
@@ -49,7 +49,6 @@
 #define CONFIG_EMAC_MDIO_PHY_NUM       0
 #define        CONFIG_SYS_EMAC_TI_CLKDIV       0xa9    /* 1MHz */
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index c0591c52770d9083b4291bfccea69271bbcb3649..c3fb80c8d056b174dd271b7f1406004ce5909f3d 100644 (file)
@@ -42,7 +42,6 @@
 #define CONFIG_E500MC                  /* BOOKE e500mc family */
 #define CONFIG_SYS_BOOK3E_HV           /* Category E.HV supported */
 #define CONFIG_MPC85xx                 /* MPC85xx/PQ3 platform */
-#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MP                      /* support multiple processors */
 
 #ifndef CONFIG_SYS_TEXT_BASE
index 9407eaf74b83732a934456cf5f175a7d1370a00a..3e71ae5a3eef5bb62ae5d3a68814aa244045896f 100644 (file)
@@ -74,7 +74,6 @@
  */
 #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
index 3c0aacdd56088ae280e99032151ab55e807bc899..e63d7c4ab6e79495a0551c7626a0b20dd282682d 100644 (file)
  */
 #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
index 145e7ac926db17df54b818f3d0db7fd2bccd1e96..bdf012b2b8e3ee51c2b04feb6603a370660ccfd3 100644 (file)
@@ -21,9 +21,6 @@
 
 #include "tegra114-common.h"
 
-/* Must be off for Dalmore to boot !?!? FIXME */
-#define CONFIG_SYS_DCACHE_OFF
-
 /* Enable fdt support for Dalmore. Flash the image in u-boot-dtb.bin */
 #define CONFIG_DEFAULT_DEVICE_TREE     tegra114-dalmore
 #define CONFIG_OF_CONTROL
index e3084d3754cb756f303bbaa7bfafd7ee72b4e6c0..82dc1a2579ed7efa58ca9bbef687c54b667737f4 100644 (file)
@@ -44,7 +44,6 @@
 /* Network Configuration */
 #define CONFIG_DRIVER_TI_EMAC
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index 3c430ae0e002c26e2e95265e01737307f72686f3..7f578777529f100cdeedf26bfc6e701acb20883a 100644 (file)
@@ -69,7 +69,6 @@ extern unsigned int davinci_arm_clk_get(void);
 /* Network & Ethernet Configuration */
 #define CONFIG_DRIVER_TI_EMAC
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index 6526478a960d557774ab6808870dd825fd99f8b9..a49a9891d481ab43fb4e3d795836a38f7c236be1 100644 (file)
@@ -87,7 +87,6 @@
 /*==================================*/
 #define CONFIG_DRIVER_TI_EMAC
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index 29b10dd167dda3b881fe2b306606f49e75642e8c..1595bc7f6309d448a0defd492c85f7274262e34c 100644 (file)
@@ -56,7 +56,6 @@
 /*==================================*/
 #define CONFIG_DRIVER_TI_EMAC
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index 34a64b301adbd9b2b8ff7eb38a989fc64e5790cd..6ebbe818a543f7c8d5c1d0c24e329bb727582909 100644 (file)
@@ -50,7 +50,6 @@
 /* Network & Ethernet Configuration */
 #define CONFIG_DRIVER_TI_EMAC
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index d35aea7ee5fb4c592cc8c35e4db22b16bde31978..3eaa7c08401f53426b4825ea442772263718954e 100644 (file)
@@ -88,7 +88,6 @@
 /*==================================*/
 #define CONFIG_DRIVER_TI_EMAC
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index 17391cddc988529c2f1314125f61a443a4ea45b9..68e5246b6db0cc387f7a41b5240a58d91732f5bd 100644 (file)
@@ -18,7 +18,7 @@
  * Include common defines/options for all AMCC eval boards
  */
 #define CONFIG_HOSTNAME                dlvsion-10g
-#define CONFIG_IDENT_STRING    " dlvision-10g 0.03"
+#define CONFIG_IDENT_STRING    " dlvision-10g 0.05"
 #include "amcc-common.h"
 
 #define CONFIG_BOARD_EARLY_INIT_F
 
 #define CONFIG_SYS_FPGA_COUNT          2
 
+#define CONFIG_SYS_FPGA_PTR { \
+       (struct ihs_fpga *)CONFIG_SYS_FPGA0_BASE, \
+       (struct ihs_fpga *)CONFIG_SYS_FPGA1_BASE }
+
+#define CONFIG_SYS_FPGA_COMMON
+
 #define CONFIG_SYS_LATCH0_RESET                0xffff
 #define CONFIG_SYS_LATCH0_BOOT         0xffff
-#define CONFIG_SYS_LATCH1_RESET                0xffcf
+#define CONFIG_SYS_LATCH1_RESET                0xffbf
 #define CONFIG_SYS_LATCH1_BOOT         0xffff
 
 #define CONFIG_SYS_FPGA_NO_RFL_HI
 #define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Timeout for Flash Write/ms */
 
 #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1    /* use buff'd writes */
-#define CONFIG_SYS_FLASH_PROTECTION    1       /* use hardware flash protect */
 
 #define CONFIG_SYS_FLASH_EMPTY_INFO    /* 'E' for empty sector on flinfo */
 #define CONFIG_SYS_FLASH_QUIET_TEST    1       /* no warn upon unknown flash */
index 27471284ac6fa59d170b58e44d24d2d059a8d6a4..2f8d6b4c904becbfd01791798d33cf95c5469944 100644 (file)
@@ -18,7 +18,7 @@
  * Include common defines/options for all AMCC eval boards
  */
 #define CONFIG_HOSTNAME                dlvision
-#define CONFIG_IDENT_STRING    " dlvision 0.01"
+#define CONFIG_IDENT_STRING    " dlvision 0.02"
 #include "amcc-common.h"
 
 #define CONFIG_BOARD_EARLY_INIT_F      /* call board_early_init_f */
 #define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Timeout for Flash Write/ms */
 
 #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1    /* use buff'd writes */
-#define CONFIG_SYS_FLASH_PROTECTION    1       /* use hardware flash protect */
 
 #define CONFIG_SYS_FLASH_EMPTY_INFO    /* 'E' for empty sector on flinfo */
 #define CONFIG_SYS_FLASH_QUIET_TEST    1       /* no warn upon unknown flash */
index 58786ffa9126d6335cbb60700a14baaa6a11529f..4fbe768cbc71b2c48e2b824bff96b6dbb66bf874 100644 (file)
 #include <configs/omap5_common.h>
 
 /* CPSW Ethernet */
-#define CONFIG_CMD_NET
+#define CONFIG_CMD_NET                 /* 'bootp' and 'tftp' */
 #define CONFIG_CMD_DHCP
-#define CONFIG_CMD_PING
-#define CONFIG_CMD_MII
-#define CONFIG_DRIVER_TI_CPSW
-#define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
-#define CONFIG_BOOTP_DNS
+#define CONFIG_BOOTP_DNS               /* Configurable parts of CMD_DHCP */
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
 #define CONFIG_BOOTP_GATEWAY
 #define CONFIG_BOOTP_SUBNETMASK
-#define CONFIG_NET_RETRY_COUNT         10
-#define CONFIG_NET_MULTI
-#define CONFIG_PHY_GIGE
+#define CONFIG_NET_RETRY_COUNT         10
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_MII
+#define CONFIG_DRIVER_TI_CPSW          /* Driver for IP block */
+#define CONFIG_MII                     /* Required in net/eth.c */
+#define CONFIG_PHY_GIGE                        /* per-board part of CPSW */
 #define CONFIG_PHYLIB
 #define CONFIG_PHY_ADDR                        2
 
diff --git a/include/configs/dxr2.h b/include/configs/dxr2.h
new file mode 100644 (file)
index 0000000..cd553ec
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * U-Boot file:/include/configs/am335x_evm.h
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __CONFIG_DXR2_H
+#define __CONFIG_DXR2_H
+
+#define CONFIG_SIEMENS_DXR2
+#define MACH_TYPE_DXR2                 4315
+#define CONFIG_SIEMENS_MACH_TYPE       MACH_TYPE_DXR2
+
+#include "siemens-am33x-common.h"
+
+#define CONFIG_SYS_MPUCLK      275
+#define DXR2_IOCTRL_VAL        0x18b
+#define DDR_PLL_FREQ   266
+#define CONFIG_SPL_AM33XX_DO_NOT_ENABLE_RTC32K
+
+#define BOARD_DFU_BUTTON_GPIO  27
+#define BOARD_DFU_BUTTON_LED   64
+
+#undef CONFIG_DOS_PARTITION
+#undef CONFIG_CMD_FAT
+
+
+ /* Physical Memory Map */
+#define CONFIG_MAX_RAM_BANK_SIZE       (1024 << 20)    /* 1GB */
+
+/* I2C Configuration */
+#define CONFIG_SYS_I2C_SPEED           100000
+
+#define CONFIG_SYS_I2C_EEPROM_ADDR              0x50
+#define EEPROM_ADDR_DDR3 0x90
+#define EEPROM_ADDR_CHIP 0x120
+
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x300
+
+#undef CONFIG_SPL_NET_SUPPORT
+#undef CONFIG_SPL_NET_VCI_STRING
+#undef CONFIG_SPL_ETH_SUPPORT
+
+#undef CONFIG_MII
+#undef CONFIG_PHY_GIGE
+#define CONFIG_PHY_ADDR                        0
+#define CONFIG_PHY_SMSC
+
+#define CONFIG_FACTORYSET
+
+/* Watchdog */
+#define CONFIG_OMAP_WATCHDOG
+
+#ifndef CONFIG_SPL_BUILD
+
+/* Default env settings */
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "hostname=dxr2\0" \
+       "nand_img_size=0x300000\0" \
+       "optargs=\0" \
+       CONFIG_COMMON_ENV_SETTINGS
+
+#ifndef CONFIG_RESTORE_FLASH
+/* set to negative value for no autoboot */
+#define CONFIG_BOOTDELAY               3
+
+#define CONFIG_BOOTCOMMAND \
+"if dfubutton; then " \
+       "run dfu_start; " \
+       "reset; " \
+"fi;" \
+"if ping ${serverip}; then " \
+       "run net_nfs; " \
+"fi;" \
+"run nand_boot;"
+
+#else
+#define CONFIG_BOOTDELAY               0
+
+#define CONFIG_BOOTCOMMAND                     \
+       "setenv autoload no; "                  \
+       "dhcp; "                                \
+       "if tftp 80000000 debrick.scr; then "   \
+               "source 80000000; "             \
+       "fi"
+#endif
+#endif /* CONFIG_SPL_BUILD */
+#endif /* ! __CONFIG_DXR2_H */
index 14a8db3bb878fc92045c8b92867581b37d16986a..e08423a097887257d3592bb32c4904a6d34ce10f 100644 (file)
@@ -89,7 +89,6 @@
 #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
index 247e37b6dddaeec972465876ea6f2dcbde76a3b1..ccc7bd0a8aa70f88750499e83dbb1793c5c2bf19 100644 (file)
@@ -39,6 +39,7 @@
 #define CONFIG_SYS_TEXT_BASE           0x21f00000
 #endif
 #define CONFIG_SYS_LOAD_ADDR           0x21000000  /* default load address */
+#define CONFIG_STANDALONE_LOAD_ADDR    0x21000000
 
 #define CONFIG_SYS_BOOT_SIZE           0x00 /* 0 KBytes */
 #define CONFIG_SYS_U_BOOT_BASE         PHYS_FLASH_1
 #define CONFIG_CMD_DATE
 #define CONFIG_CMD_DHCP
 #define CONFIG_CMD_I2C
-#define CONFIG_CMD_JFFS2
 #define CONFIG_CMD_MII
 #define CONFIG_CMD_NAND
 #define CONFIG_CMD_PING
-#define CONFIG_I2C_CMD_NO_FLAT
 #define CONFIG_I2C_CMD_TREE
 #define CONFIG_CMD_USB
 #define CONFIG_CMD_FAT
-
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_CMD_UBIFS
 #define CONFIG_SYS_LONGHELP
 
 /*
- * Filesystems
+ * MTD defines
  */
 
-#define CONFIG_JFFS2_NAND              1
+#define CONFIG_FLASH_CFI_MTD
+#define CONFIG_MTD_DEVICE
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_RBTREE
+#define CONFIG_LZO
 
-#ifndef CONFIG_JFFS2_CMDLINE
-#define CONFIG_JFFS2_DEV               "nand0"
-#define CONFIG_JFFS2_PART_OFFSET       0
-#define CONFIG_JFFS2_PART_SIZE         0xFFFFFFFF
-#else
-#define MTDIDS_DEFAULT         "nor0=0,nand0=1"
+#define MTDIDS_DEFAULT         "nor0=physmap-flash.0,nand0=atmel_nand"
 #define MTDPARTS_DEFAULT       "mtdparts="                             \
-                                       "0:"                            \
-                                       "384k(U-Boot),"                 \
-                                       "128k(Env),"                    \
-                                       "128k(Splash),"                 \
-                                       "4M(Kernel),"                   \
-                                       "-(FS)"                         \
+                                       "physmap-flash.0:"              \
+                                               "512k(U-Boot),"         \
+                                               "128k(Env),"            \
+                                               "128k(Splash),"         \
+                                               "4M(Kernel),"           \
+                                               "384k(MiniFS),"         \
+                                               "-(FS)"                 \
                                        ";"                             \
-                                       "1:"                            \
-                                       "-(jffs2)"
-#endif /* CONFIG_JFFS2_CMDLINE */
-
+                                       "atmel_nand:"                   \
+                                               "1M(emergency),"        \
+                                               "-(data)"
 /*
  * Hardware drivers
  */
 #define CONFIG_BOOTDELAY               5
 
 #define CONFIG_ENV_IS_IN_FLASH         1
-#define CONFIG_ENV_ADDR                        (PHYS_FLASH_1 + 0x60000)
+#define CONFIG_ENV_ADDR                        (PHYS_FLASH_1 + 0x80000)
 #define CONFIG_ENV_SIZE                        0x20000 /* sectors are 128K here */
 
 #define CONFIG_BAUDRATE                115200
        "displayheight=512\0"                                           \
        "displaybsteps=1023\0"                                          \
        "ubootaddr=10000000\0"                                          \
-       "splashimage=10080000\0"                                        \
-       "kerneladdr=100A0000\0"                                         \
+       "splashimage=100A0000\0"                                        \
+       "kerneladdr=100C0000\0"                                         \
        "kernelsize=00400000\0"                                         \
-       "rootfsaddr=104A0000\0"                                         \
+       "rootfsaddr=10520000\0"                                         \
        "copy_addr=21200000\0"                                          \
-       "rootfssize=00B60000\0"                                         \
+       "rootfssize=00AE0000\0"                                         \
+       "mtdids=" MTDIDS_DEFAULT "\0"                                   \
+       "mtdparts=" MTDPARTS_DEFAULT "\0"                               \
        "bootargsdefaults=set bootargs "                                \
                "console=ttyS0,115200 "                                 \
                "video=vcxk_fb:xres:${displaywidth},"                   \
                "erase $(rootfsaddr) +$(rootfssize);"                   \
                "cp.b $(fileaddr) $(rootfsaddr) $(filesize);"           \
                "\0"                                                    \
-       "update_uboot=protect off 10000000 1005FFFF;"                   \
+       "update_uboot=protect off 10000000 1007FFFF;"                   \
                "dhcp $(copy_addr) u-boot_eb_cpux9k2;"                  \
-               "erase 10000000 1005FFFF;"                              \
+               "erase 10000000 1007FFFF;"                              \
                "cp.b $(fileaddr) $(ubootaddr) $(filesize);"            \
-               "protect on 10000000 1005FFFF;reset\0"                  \
+               "protect on 10000000 1007FFFF;reset\0"                  \
        "update_splash=protect off $(splashimage) +20000;"              \
                "dhcp $(copy_addr) splash_eb_cpux9k2.bmp;"              \
                "erase $(splashimage) +20000;"                          \
-               "cp.b $(fileaddr) 10080000 $(filesize);"                \
+               "cp.b $(fileaddr) $(splashimage) $(filesize);"          \
                "protect on $(splashimage) +20000;reset\0"              \
        "emergency=run bootargsdefaults;"                               \
                "set bootargs $(bootargs) root=initramfs boot=emergency " \
index 43cf6bc441c0421fa5dc5d24d837d5705d9e8a68..90033fa10f8c9591ce8b8c32021fb886701d6b35 100644 (file)
  */
 #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
index 2b93a458cbdf6d48352314e407966e7d263af0e0..8c21909d634f600f64f9c0376ea8819cc272f5e6 100644 (file)
@@ -23,7 +23,6 @@
 #define CONFIG_DISPLAY_BOARDINFO
 
 /* Enable fdt support for Exynos5250 */
-#define CONFIG_ARCH_DEVICE_TREE                exynos5250
 #define CONFIG_OF_CONTROL
 #define CONFIG_OF_SEPARATE
 
index 984f2745120854fdb2f7950d38f080c4e8d979c3..47e65d8b72853e378c9b6de6190b7f41dca751b5 100644 (file)
 
 #define CONFIG_CRC32_VERIFY  1
 
-#define CONFIG_BOOTP_MASK      (CONFIG_BOOTP_DEFAULT | \
-                                CONFIG_BOOTP_DNS | \
-                                CONFIG_BOOTP_DNS2 | \
-                                CONFIG_BOOTP_SEND_HOSTNAME )
+#define CONFIG_BOOTP_DNS
+#define CONFIG_BOOTP_DNS2
+#define CONFIG_BOOTP_SEND_HOSTNAME
 
 #define CONFIG_VERSION_VARIABLE 1
 
index 2e478cc63c28ca2dc1f58330c925f1126f10dc30..b8197ac18921cf68302e9b9e0fe8dbef5f81ae92 100644 (file)
@@ -97,7 +97,6 @@
  */
 #define CONFIG_DRIVER_TI_EMAC
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index e08fc14b3ad58f6bdcbfce213d40a9f41cab732c..3e18a657faa6f94b6f20c013f03ea142d183c914 100644 (file)
 /* Ethernet support */
 #define CONFIG_DRIVER_TI_CPSW
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index 722c56652f1b22417642ec79e3d0d527a5096e89..9982cf6e900c4d434bf49224af6a01cca0653759 100644 (file)
@@ -45,6 +45,7 @@
 
 #define CONFIG_OF_LIBFDT
 #define CONFIG_CMD_BOOTZ
+#define CONFIG_SUPPORT_RAW_INITRD
 
 /*
  * NS16550 Configuration
index 33743e61ac0951b7e655d28daafcffa8dc463f7d..79ada68ac7715b54964f842a16eaee47fb0518a4 100644 (file)
@@ -18,7 +18,7 @@
  * Include common defines/options for all AMCC eval boards
  */
 #define CONFIG_HOSTNAME                io
-#define CONFIG_IDENT_STRING    " io 0.05"
+#define CONFIG_IDENT_STRING    " io 0.06"
 #include "amcc-common.h"
 
 #define CONFIG_BOARD_EARLY_INIT_F
 #define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Timeout for Flash Write/ms */
 
 #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1    /* use buff'd writes */
-#define CONFIG_SYS_FLASH_PROTECTION    1       /* use hardware flash protect */
 
 #define CONFIG_SYS_FLASH_EMPTY_INFO    /* 'E' for empty sector on flinfo */
 #define CONFIG_SYS_FLASH_QUIET_TEST    1       /* no warn upon unknown flash */
 
 #define CONFIG_SYS_FPGA_COUNT          1
 
+#define CONFIG_SYS_FPGA_PTR \
+       { (struct ihs_fpga *)CONFIG_SYS_FPGA0_BASE }
+
+#define CONFIG_SYS_FPGA_COMMON
+
 /* Memory Bank 3 (Latches) initialization */
 #define CONFIG_SYS_LATCH_BASE          0x7f200000
 #define CONFIG_SYS_EBC_PB3AP           0xa2015480
index dcd1b82e25f0ffd738049d33240a577b687de07c..f110b706020f73fc01d6dee5a2f7497c5ece9e8f 100644 (file)
 
 #define CONFIG_SYS_FPGA_COUNT          2
 
+#define CONFIG_SYS_FPGA_PTR { \
+       (struct ihs_fpga *)CONFIG_SYS_FPGA0_BASE, \
+       (struct ihs_fpga *)CONFIG_SYS_FPGA1_BASE }
+
+#define CONFIG_SYS_FPGA_COMMON
+
 #define CONFIG_SYS_LATCH0_RESET                0xffff
 #define CONFIG_SYS_LATCH0_BOOT         0xffff
 #define CONFIG_SYS_LATCH1_RESET                0xffbf
index 32d9050adb952f14838e96ba00ed4ac5ba00f28e..ec9016a6d14b89ffa2444d4e725a11965658448f 100644 (file)
@@ -18,7 +18,7 @@
  * Include common defines/options for all AMCC eval boards
  */
 #define CONFIG_HOSTNAME                iocon
-#define CONFIG_IDENT_STRING    " iocon 0.04"
+#define CONFIG_IDENT_STRING    " iocon 0.05"
 #include "amcc-common.h"
 
 #define CONFIG_BOARD_EARLY_INIT_F
@@ -63,6 +63,7 @@
  * Commands additional to the ones defined in amcc-common.h
  */
 #define CONFIG_CMD_CACHE
+#define CONFIG_CMD_FPGAD
 #undef CONFIG_CMD_EEPROM
 
 /*
 #define CONFIG_SYS_I2C_PPC4XX_SPEED_0          400000
 #define CONFIG_SYS_I2C_PPC4XX_SLAVE_0          0x7F
 
+#define CONFIG_SYS_I2C_SPEED           400000
+
+#define CONFIG_PCA953X                 /* NXP PCA9554 */
+#define CONFIG_PCA9698                 /* NXP PCA9698 */
+
 /*
  * Software (bit-bang) I2C driver configuration
  */
+#define CONFIG_SYS_I2C_SOFT
+#define CONFIG_SYS_I2C_SOFT_SPEED              50000
+#define CONFIG_SYS_I2C_SOFT_SLAVE              0x7F
+#define I2C_SOFT_DECLARATIONS2
+#define CONFIG_SYS_I2C_SOFT_SPEED_2            50000
+#define CONFIG_SYS_I2C_SOFT_SLAVE_2            0x7F
+#define I2C_SOFT_DECLARATIONS3
+#define CONFIG_SYS_I2C_SOFT_SPEED_3            50000
+#define CONFIG_SYS_I2C_SOFT_SLAVE_3            0x7F
+#define I2C_SOFT_DECLARATIONS4
+#define CONFIG_SYS_I2C_SOFT_SPEED_4            50000
+#define CONFIG_SYS_I2C_SOFT_SLAVE_4            0x7F
+
+#define CONFIG_SYS_CH7301_I2C                  {1, 2, 3, 4}
 
 #ifndef __ASSEMBLY__
-void fpga_gpio_set(int pin);
-void fpga_gpio_clear(int pin);
-int fpga_gpio_get(int pin);
+void fpga_gpio_set(unsigned int bus, int pin);
+void fpga_gpio_clear(unsigned int bus, int pin);
+int fpga_gpio_get(unsigned int bus, int pin);
 #endif
 
 #define I2C_ACTIVE     { }
 #define I2C_TRISTATE   { }
-#define I2C_READ       fpga_gpio_get(0x0040) ? 1 : 0
-#define I2C_SDA(bit)   if (bit) fpga_gpio_set(0x0040); \
-                       else fpga_gpio_clear(0x0040)
-#define I2C_SCL(bit)   if (bit) fpga_gpio_set(0x0020); \
-                       else fpga_gpio_clear(0x0020)
+#define I2C_READ \
+       (fpga_gpio_get(I2C_ADAP_HWNR, 0x0040) ? 1 : 0)
+#define I2C_SDA(bit) \
+       do { \
+               if (bit) \
+                       fpga_gpio_set(I2C_ADAP_HWNR, 0x0040); \
+               else \
+                       fpga_gpio_clear(I2C_ADAP_HWNR, 0x0040); \
+       } while (0)
+#define I2C_SCL(bit) \
+       do { \
+               if (bit) \
+                       fpga_gpio_set(I2C_ADAP_HWNR, 0x0020); \
+               else \
+                       fpga_gpio_clear(I2C_ADAP_HWNR, 0x0020); \
+       } while (0)
 #define I2C_DELAY      udelay(25)      /* 1/4 I2C clock duration */
 
 /*
@@ -141,7 +172,6 @@ int fpga_gpio_get(int pin);
 #define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Timeout for Flash Write/ms */
 
 #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1    /* use buff'd writes */
-#define CONFIG_SYS_FLASH_PROTECTION    1       /* use hardware flash protect */
 
 #define CONFIG_SYS_FLASH_EMPTY_INFO    /* 'E' for empty sector on flinfo */
 #define CONFIG_SYS_FLASH_QUIET_TEST    1       /* no warn upon unknown flash */
@@ -236,6 +266,11 @@ int fpga_gpio_get(int pin);
 
 #define CONFIG_SYS_FPGA_COUNT          1
 
+#define CONFIG_SYS_MCLINK_MAX          3
+
+#define CONFIG_SYS_FPGA_PTR \
+       { (struct ihs_fpga *)CONFIG_SYS_FPGA0_BASE, NULL, NULL, NULL }
+
 /* Memory Bank 3 (Latches) initialization */
 #define CONFIG_SYS_LATCH_BASE          0x7f200000
 #define CONFIG_SYS_EBC_PB3AP           0x02025080
@@ -251,6 +286,9 @@ int fpga_gpio_get(int pin);
  */
 #define CONFIG_SYS_MPC92469AC
 #define CONFIG_SYS_CH7301
-#define CONFIG_SYS_OSD_SCREENS         CONFIG_SYS_FPGA_COUNT
+#define CONFIG_SYS_OSD_SCREENS         1
+
+#define CONFIG_BITBANGMII              /* bit-bang MII PHY management */
+#define CONFIG_BITBANGMII_MULTI
 
 #endif /* __CONFIG_H */
index 2ec776174cd07644b3e18ea8e150abc068c8ff91..932dac36ad0d1443c61a71b5a2d43fdb272669c3 100644 (file)
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_EXT2
 
-#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+#define CONFIG_BOOTP_SUBNETMASK
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+#define CONFIG_BOOTP_NISDOMAIN
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_DNS
+#define CONFIG_BOOTP_DNS2
+#define CONFIG_BOOTP_SEND_HOSTNAME
+#define CONFIG_BOOTP_NTPSERVER
+#define CONFIG_BOOTP_TIMEOFFSET
 
 #define CONFIG_OF_LIBFDT       1
 
index 85ae016e0cac0db9aeff8708165ea15ac1e8a8e3..5e27ab2e4cfc49c2fd33b5b2a5dbcf2d8e50e18c 100644 (file)
 #define CONFIG_DRIVER_TI_EMAC
 #define CONFIG_DRIVER_TI_EMAC_USE_RMII
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index 87f3d132a88c767875f26c0fe44b6fc64b92c83d..0e3de777b25eec15371a209b20f5875ea14a60a9 100644 (file)
@@ -18,7 +18,7 @@
 /* Open Firmware DTS */
 #define CONFIG_OF_CONTROL      1
 #define CONFIG_OF_EMBED                1
-#define CONFIG_DEFAULT_DEVICE_TREE microblaze
+#define CONFIG_DEFAULT_DEVICE_TREE microblaze-generic
 
 /* linear and spi flash memory */
 #ifdef XILINX_FLASH_START
index a684166502fc5d6de05a5cd8a6f602bce9085261..124dc1e6cbd41602333d3c0d1d705eb2200cdc3e 100644 (file)
 /* GPIO */
 #define CONFIG_MXS_GPIO
 
-/* DUART Serial Driver */
+/*
+ * DUART Serial Driver.
+ * Conflicts with AUART driver which can be set by board.
+ */
+#ifndef CONFIG_MXS_AUART
 #define CONFIG_PL011_SERIAL
 #define CONFIG_PL011_CLOCK             24000000
 #define CONFIG_PL01x_PORTS             { (void *)MXS_UARTDBG_BASE }
 #define CONFIG_CONS_INDEX              0
+#endif
 /* Default baudrate can be overriden by board! */
 #ifndef CONFIG_BAUDRATE
 #define CONFIG_BAUDRATE                        115200
index 5abb8b1a7521d822ecd87513f13ce29fc78af40b..ccbb1fa9b16ebfefd311dcdc550b8196cfa2ad3b 100644 (file)
@@ -19,7 +19,7 @@
  * Include common defines/options for all AMCC eval boards
  */
 #define CONFIG_HOSTNAME                neo
-#define CONFIG_IDENT_STRING    " neo 0.01"
+#define CONFIG_IDENT_STRING    " neo 0.02"
 #include "amcc-common.h"
 
 #define CONFIG_BOARD_EARLY_INIT_F
 #define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Timeout for Flash Write (in ms)      */
 
 #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1    /* use buffered writes (20x faster)     */
-#define CONFIG_SYS_FLASH_PROTECTION    1       /* use hardware flash protection        */
 
 #define CONFIG_SYS_FLASH_EMPTY_INFO            /* print 'E' for empty sector on flinfo */
 #define CONFIG_SYS_FLASH_QUIET_TEST    1       /* don't warn upon unknown flash        */
 
 #define CONFIG_SYS_FPGA_COUNT          1
 
+#define CONFIG_SYS_FPGA_PTR \
+       { (struct ihs_fpga *)CONFIG_SYS_FPGA0_BASE }
+
+#define CONFIG_SYS_FPGA_COMMON
+
 /* Memory Bank 3 (Latches) initialization                      */
 #define CONFIG_SYS_LATCH_BASE          0x7f200000
 #define CONFIG_SYS_EBC_PB3AP           0x92015480
index 3da78b65750f63c6f4d83e5cfdd3fa84e3b7130a..f40e0b718fc843d2a82a35e64e2829e35f1fbb22 100644 (file)
@@ -17,6 +17,7 @@
  * High Level Configuration Options
  */
 #define CONFIG_4430SDP         1       /* working with SDP */
+#define CONFIG_MACH_TYPE       MACH_TYPE_OMAP_4430SDP
 
 #include <configs/omap4_common.h>
 
index 8e82fed2347a7f63f0cd302c76337fdefd3de8bc..98ba559c86d134f2158c1d047ab3a018d12c911a 100644 (file)
 /* Use General purpose timer 1 */
 #define CONFIG_SYS_TIMERBASE           GPT2_BASE
 
+/*
+ * For the DDR timing information we can either dynamically determine
+ * the timings to use or use pre-determined timings (based on using the
+ * dynamic method.  Default to the static timing infomation.
+ */
 #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
        "fi"
 
 
-/* Defines for SPL */
-#define CONFIG_SPL_TEXT_BASE           0x40300350
-#define CONFIG_SPL_MAX_SIZE            0x19000 /* 100K */
+/*
+ * SPL related defines.  The Public RAM memory map the ROM defines the
+ * area between 0x40300000 and 0x4031E000 as a download area for OMAP5
+ * (dra7xx is larger, but we do not need to be larger at this time).  We
+ * set CONFIG_SPL_DISPLAY_PRINT to have omap_rev_string() called and
+ * print some information.
+ */
+#define CONFIG_SPL_TEXT_BASE           0x40300000
+#define CONFIG_SPL_MAX_SIZE            (0x4031E000 - CONFIG_SPL_TEXT_BASE)
 #define CONFIG_SPL_DISPLAY_PRINT
 #define CONFIG_SPL_LDSCRIPT "$(CPUDIR)/omap-common/u-boot-spl.lds"
 
index d10c2b56f9498ddea6708ff6b63c497364ec9a4b..0d1c43c2eb570dbdce1749c30000f65eaca8e7ac 100644 (file)
@@ -17,6 +17,8 @@
        "uuid_disk=${uuid_gpt_disk};" \
        "name=rootfs,start=2MiB,size=-,uuid=${uuid_gpt_rootfs}"
 
+#include <configs/omap5_common.h>
+
 #define CONFIG_CONS_INDEX              3
 #define CONFIG_SYS_NS16550_COM3                UART3_BASE
 #define CONFIG_BAUDRATE                        115200
 #define CONFIG_PARTITION_UUIDS
 #define CONFIG_CMD_PART
 
+/* Required support for the TCA642X GPIO we have on the uEVM */
 #define CONFIG_TCA642X
 #define CONFIG_CMD_TCA642X
 #define CONFIG_SYS_I2C_TCA642X_BUS_NUM 4
 #define CONFIG_SYS_I2C_TCA642X_ADDR 0x22
 
+/* USB UHH support options */
+#define CONFIG_CMD_USB
+#define CONFIG_USB_HOST
+#define CONFIG_USB_EHCI
+#define CONFIG_USB_EHCI_OMAP
+#define CONFIG_USB_STORAGE
+#define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS 3
+#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
+
+#define CONFIG_OMAP_EHCI_PHY2_RESET_GPIO 80
+#define CONFIG_OMAP_EHCI_PHY3_RESET_GPIO 79
+
+/* Enabled commands */
+#define CONFIG_CMD_DHCP                /* DHCP Support                 */
+#define CONFIG_CMD_NET         /* bootp, tftpboot, rarpboot    */
+#define CONFIG_CMD_NFS         /* NFS support                  */
+
+/* USB Networking options */
+#define CONFIG_USB_HOST_ETHER
+#define CONFIG_USB_ETHER_SMSC95XX
+
 #define CONSOLEDEV             "ttyO2"
-#define CONFIG_OMAP_PLATFORM_RESET_TIME_MAX_USEC       16296
 
-#include <configs/omap5_common.h>
+/* Max time to hold reset on this board, see doc/README.omap-reset-time */
+#define CONFIG_OMAP_PLATFORM_RESET_TIME_MAX_USEC       16296
 
 #endif /* __CONFIG_OMAP5_EVM_H */
index 1b0be23dd36d8710014dc53c16d59b4b8aadc60b..5f0c4fb254be812c329563ca24539cdc4ee853b1 100644 (file)
@@ -34,7 +34,7 @@
 #define CONFIG_SYS_L2_SIZE     (256 << 10)
 #endif
 
-#if defined(CONFIG_P1020RDB)
+#if defined(CONFIG_P1020RDB_PC)
 #define CONFIG_BOARDNAME "P1020RDB-PC"
 #define CONFIG_NAND_FSL_ELBC
 #define CONFIG_P1020
 #define CONFIG_SYS_L2_SIZE     (256 << 10)
 #endif
 
+/*
+ * P1020RDB-PD board has user selectable switches for evaluating different
+ * frequency and boot options for the P1020 device. The table that
+ * follow describe the available options. The front six binary number was in
+ * accordance with SW3[1:6].
+ * 111101 533 533 267 667 NOR Core0 boot; Core1 hold-off
+ * 101101 667 667 333 667 NOR Core0 boot; Core1 hold-off
+ * 011001 800 800 400 667 NOR Core0 boot; Core1 hold-off
+ * 001001 800 800 400 667 SD/MMC Core0 boot; Core1 hold-off
+ * 001101 800 800 400 667 SPI Core0 boot; Core1 hold-off
+ * 010001 800 800 400 667 NAND Core0 boot; Core1 hold-off
+ * 011101 800 800 400 667 PCIe-2 Core0 boot; Core1 hold-off
+ */
+#if defined(CONFIG_P1020RDB_PD)
+#define CONFIG_BOARDNAME "P1020RDB-PD"
+#define CONFIG_NAND_FSL_ELBC
+#define CONFIG_P1020
+#define CONFIG_SPI_FLASH
+#define CONFIG_VSC7385_ENET
+#define CONFIG_SLIC
+#define __SW_BOOT_MASK         0x03
+#define __SW_BOOT_NOR          0x64
+#define __SW_BOOT_SPI          0x34
+#define __SW_BOOT_SD           0x24
+#define __SW_BOOT_NAND         0x44
+#define __SW_BOOT_PCIE         0x74
+#define CONFIG_SYS_L2_SIZE     (256 << 10)
+#endif
+
 #if defined(CONFIG_P1021RDB)
 #define CONFIG_BOARDNAME "P1021RDB-PC"
 #define CONFIG_NAND_FSL_ELBC
 #define CONFIG_SPL_INIT_MINIMAL
 #define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_NAND_SUPPORT
-#define CONFIG_SPL_NAND_MINIMAL
 #define CONFIG_SPL_FLUSH_IMAGE
 #define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
 
 #define SPD_EEPROM_ADDRESS 0x52
 #undef CONFIG_FSL_DDR_INTERACTIVE
 
-#ifdef CONFIG_P1020MBG
+#if (defined(CONFIG_P1020MBG) || defined(CONFIG_P1020RDB_PD))
 #define CONFIG_SYS_SDRAM_SIZE_LAW      LAW_SIZE_2G
 #define CONFIG_CHIP_SELECTS_PER_CTRL   2
 #else
 /*
  * Local Bus Definitions
  */
-#if defined(CONFIG_P1020MBG)
+#if (defined(CONFIG_P1020MBG) || defined(CONFIG_P1020RDB_PD))
 #define CONFIG_SYS_MAX_FLASH_SECT      512     /* 64M */
 #define CONFIG_SYS_FLASH_BASE          0xec000000
 #elif defined(CONFIG_P1020UTM)
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
 #define CONFIG_MTD_NAND_VERIFY_WRITE
 #define CONFIG_CMD_NAND
+#if defined(CONFIG_P1020RDB_PD)
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128 * 1024)
+#else
 #define CONFIG_SYS_NAND_BLOCK_SIZE     (16 * 1024)
+#endif
 
 #define CONFIG_SYS_NAND_BR_PRELIM (BR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \
        | (2<<BR_DECC_SHIFT)    /* Use HW ECC */ \
        | BR_PS_8       /* Port Size = 8 bit */ \
        | BR_MS_FCM     /* MSEL = FCM */ \
        | BR_V) /* valid */
+#if defined(CONFIG_P1020RDB_PD)
+#define CONFIG_SYS_NAND_OR_PRELIM      (OR_AM_32KB \
+       | OR_FCM_PGS    /* Large Page*/ \
+       | OR_FCM_CSCT \
+       | OR_FCM_CST \
+       | OR_FCM_CHT \
+       | OR_FCM_SCY_1 \
+       | OR_FCM_TRLX \
+       | OR_FCM_EHTR)
+#else
 #define CONFIG_SYS_NAND_OR_PRELIM      (OR_AM_32KB     /* small page */ \
        | OR_FCM_CSCT \
        | OR_FCM_CST \
        | OR_FCM_SCY_1 \
        | OR_FCM_TRLX \
        | OR_FCM_EHTR)
+#endif
 #endif /* CONFIG_NAND_FSL_ELBC */
 
 #define CONFIG_BOARD_EARLY_INIT_R      /* call board_early_init_r function */
diff --git a/include/configs/p1_twr.h b/include/configs/p1_twr.h
new file mode 100644 (file)
index 0000000..4aa7064
--- /dev/null
@@ -0,0 +1,619 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/*
+ * QorIQ P1 Tower boards configuration file
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#if defined(CONFIG_TWR_P1025)
+#define CONFIG_BOARDNAME "TWR-P1025"
+#define CONFIG_P1025
+#define CONFIG_PHY_ATHEROS
+#define CONFIG_QE
+#define CONFIG_SYS_LBC_LBCR    0x00080000      /* Conversion of LBC addr */
+#define CONFIG_SYS_LBC_LCRR    0x80000002      /* LB clock ratio reg */
+#endif
+
+#ifdef CONFIG_SDCARD
+#define CONFIG_RAMBOOT_SDCARD
+#define CONFIG_SYS_RAMBOOT
+#define CONFIG_SYS_EXTRA_ENV_RELOC
+#define CONFIG_SYS_TEXT_BASE           0x11000000
+#define CONFIG_RESET_VECTOR_ADDRESS    0x1107fffc
+#endif
+
+#ifndef CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_TEXT_BASE           0xeff80000
+#endif
+
+#ifndef CONFIG_RESET_VECTOR_ADDRESS
+#define CONFIG_RESET_VECTOR_ADDRESS    0xeffffffc
+#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
+#define CONFIG_E500
+#define CONFIG_MPC85xx
+
+#define CONFIG_MP
+
+#define CONFIG_FSL_ELBC
+#define CONFIG_PCI
+#define CONFIG_PCIE1   /* PCIE controler 1 (slot 1) */
+#define CONFIG_PCIE2   /* PCIE controler 2 (slot 2) */
+#define CONFIG_FSL_PCI_INIT    /* Use common FSL init code */
+#define CONFIG_PCI_INDIRECT_BRIDGE     /* indirect PCI bridge support */
+#define CONFIG_FSL_PCIE_RESET  /* need PCIe reset errata */
+#define CONFIG_SYS_PCI_64BIT   /* enable 64-bit PCI resources */
+
+#define CONFIG_FSL_LAW
+#define CONFIG_TSEC_ENET       /* tsec ethernet support */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_CMD_SATA
+#define CONFIG_SATA_SIL3114
+#define CONFIG_SYS_SATA_MAX_DEVICE     2
+#define CONFIG_LIBATA
+#define CONFIG_LBA48
+
+#ifndef __ASSEMBLY__
+extern unsigned long get_board_sys_clk(unsigned long dummy);
+#endif
+#define CONFIG_SYS_CLK_FREQ    get_board_sys_clk(0) /*sysclk for TWR-P1025 */
+
+#define CONFIG_DDR_CLK_FREQ    66666666
+
+#define CONFIG_HWCONFIG
+/*
+ * These can be toggled for performance analysis, otherwise use default.
+ */
+#define CONFIG_L2_CACHE
+#define CONFIG_BTB
+
+#define CONFIG_BOARD_EARLY_INIT_F      /* Call board_pre_init */
+
+#define CONFIG_SYS_MEMTEST_START       0x00200000      /* memtest works on */
+#define CONFIG_SYS_MEMTEST_END         0x1fffffff
+#define CONFIG_PANIC_HANG      /* do not reset board on panic */
+
+#define CONFIG_SYS_CCSRBAR             0xffe00000
+#define CONFIG_SYS_CCSRBAR_PHYS_LOW    CONFIG_SYS_CCSRBAR
+
+/* DDR Setup */
+#define CONFIG_FSL_DDR3
+
+#define CONFIG_SYS_SDRAM_SIZE_LAW      LAW_SIZE_512M
+#define CONFIG_CHIP_SELECTS_PER_CTRL   1
+
+#define CONFIG_SYS_SDRAM_SIZE          (1u << (CONFIG_SYS_SDRAM_SIZE_LAW - 19))
+#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
+
+/* Default settings for DDR3 */
+#define CONFIG_SYS_DDR_CS0_BNDS                0x0000001f
+#define CONFIG_SYS_DDR_CS0_CONFIG      0x80014202
+#define CONFIG_SYS_DDR_CS0_CONFIG_2    0x00000000
+#define CONFIG_SYS_DDR_CS1_BNDS                0x00000000
+#define CONFIG_SYS_DDR_CS1_CONFIG      0x00000000
+#define CONFIG_SYS_DDR_CS1_CONFIG_2    0x00000000
+
+#define CONFIG_SYS_DDR_DATA_INIT       0xdeadbeef
+#define CONFIG_SYS_DDR_INIT_ADDR       0x00000000
+#define CONFIG_SYS_DDR_INIT_EXT_ADDR   0x00000000
+#define CONFIG_SYS_DDR_MODE_CONTROL    0x00000000
+
+#define CONFIG_SYS_DDR_ZQ_CONTROL      0x89080600
+#define CONFIG_SYS_DDR_WRLVL_CONTROL   0x8655a608
+#define CONFIG_SYS_DDR_SR_CNTR         0x00000000
+#define CONFIG_SYS_DDR_RCW_1           0x00000000
+#define CONFIG_SYS_DDR_RCW_2           0x00000000
+#define CONFIG_SYS_DDR_CONTROL         0xc70c0000      /* Type = DDR3  */
+#define CONFIG_SYS_DDR_CONTROL_2       0x04401050
+#define CONFIG_SYS_DDR_TIMING_4                0x00220001
+#define CONFIG_SYS_DDR_TIMING_5                0x03402400
+
+#define CONFIG_SYS_DDR_TIMING_3                0x00020000
+#define CONFIG_SYS_DDR_TIMING_0                0x00220004
+#define CONFIG_SYS_DDR_TIMING_1                0x5c5b6544
+#define CONFIG_SYS_DDR_TIMING_2                0x0fa880de
+#define CONFIG_SYS_DDR_CLK_CTRL                0x03000000
+#define CONFIG_SYS_DDR_MODE_1          0x80461320
+#define CONFIG_SYS_DDR_MODE_2          0x00008000
+#define CONFIG_SYS_DDR_INTERVAL                0x09480000
+
+/*
+ * Memory map
+ *
+ * 0x0000_0000 0x1fff_ffff     DDR             Up to 512MB cacheable
+ * 0x8000_0000 0xdfff_ffff     PCI Express Mem 1.5G non-cacheable(PCIe * 3)
+ * 0xffc0_0000 0xffc3_ffff     PCI IO range    256k non-cacheable
+ *
+ * Localbus
+ * 0xe000_0000 0xe002_0000     SSD1289         128K non-cacheable
+ * 0xec00_0000 0xefff_ffff     FLASH           Up to 64M non-cacheable
+ *
+ * 0xff90_0000 0xff97_ffff     L2 SRAM         Up to 512K cacheable
+ * 0xffd0_0000 0xffd0_3fff     init ram        16K Cacheable
+ * 0xffe0_0000 0xffef_ffff     CCSR            1M non-cacheable
+ */
+
+/*
+ * Local Bus Definitions
+ */
+#define CONFIG_SYS_MAX_FLASH_SECT      512     /* 64M */
+#define CONFIG_SYS_FLASH_BASE          0xec000000
+
+#define CONFIG_SYS_FLASH_BASE_PHYS     CONFIG_SYS_FLASH_BASE
+
+#define CONFIG_FLASH_BR_PRELIM (BR_PHYS_ADDR((CONFIG_SYS_FLASH_BASE_PHYS)) \
+       | BR_PS_16 | BR_V)
+
+#define CONFIG_FLASH_OR_PRELIM 0xfc0000b1
+
+#define CONFIG_SYS_SSD_BASE    0xe0000000
+#define CONFIG_SYS_SSD_BASE_PHYS       CONFIG_SYS_SSD_BASE
+#define CONFIG_SSD_BR_PRELIM   (BR_PHYS_ADDR(CONFIG_SYS_SSD_BASE_PHYS) | \
+                                       BR_PS_16 | BR_V)
+#define CONFIG_SSD_OR_PRELIM   (OR_AM_64KB | OR_GPCM_CSNT | OR_GPCM_XACS | \
+                                OR_GPCM_ACS_DIV2 | OR_GPCM_SCY | \
+                                OR_GPCM_TRLX | OR_GPCM_EHTR | OR_GPCM_EAD)
+
+#define CONFIG_SYS_BR2_PRELIM CONFIG_SSD_BR_PRELIM
+#define CONFIG_SYS_OR2_PRELIM CONFIG_SSD_OR_PRELIM
+
+#define CONFIG_SYS_FLASH_BANKS_LIST    {CONFIG_SYS_FLASH_BASE_PHYS}
+#define CONFIG_SYS_FLASH_QUIET_TEST
+#define CONFIG_FLASH_SHOW_PROGRESS     45      /* count down from 45/5: 9..1 */
+
+#define CONFIG_SYS_MAX_FLASH_BANKS     1       /* number of banks */
+
+#undef CONFIG_SYS_FLASH_CHECKSUM
+#define CONFIG_SYS_FLASH_ERASE_TOUT    60000   /* Flash Erase Timeout (ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Flash Write Timeout (ms) */
+
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_SYS_FLASH_EMPTY_INFO
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
+
+#define CONFIG_BOARD_EARLY_INIT_R      /* call board_early_init_r function */
+
+#define CONFIG_SYS_INIT_RAM_LOCK
+#define CONFIG_SYS_INIT_RAM_ADDR       0xffd00000
+/* Initial L1 address */
+#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
+/* Size of used area in RAM */
+#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 (512 * 1024)/* Reserve 512 kB for Mon */
+#define CONFIG_SYS_MALLOC_LEN  (1024 * 1024)/* Reserved for malloc */
+
+#define CONFIG_SYS_BR0_PRELIM  CONFIG_FLASH_BR_PRELIM  /* NOR Base Address */
+#define CONFIG_SYS_OR0_PRELIM  CONFIG_FLASH_OR_PRELIM  /* NOR Options */
+
+/* Serial Port
+ * open - index 2
+ * shorted - index 1
+ */
+#define CONFIG_CONS_INDEX              1
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#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_SYS_BAUDRATE_TABLE      \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 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
+#define CONFIG_OF_BOARD_SETUP
+#define CONFIG_OF_STDOUT_VIA_ALIAS
+
+#define CONFIG_SYS_64BIT_VSPRINTF
+#define CONFIG_SYS_64BIT_STRTOUL
+
+/* new uImage format support */
+#define CONFIG_FIT
+#define CONFIG_FIT_VERBOSE     /* enable fit_format_{error,warning}() */
+
+/* I2C */
+#define CONFIG_SYS_I2C
+#define CONFIG_SYS_I2C_FSL                     /* Use FSL common I2C driver */
+#define CONFIG_SYS_FSL_I2C_SPEED       400000  /* I2C spd and slave address */
+#define CONFIG_SYS_FSL_I2C_SLAVE       0x7F
+#define CONFIG_SYS_FSL_I2C_OFFSET      0x3000
+#define CONFIG_SYS_I2C_EEPROM_ADDR     0x52
+
+/*
+ * I2C2 EEPROM
+ */
+#define CONFIG_SYS_FSL_I2C2_SPEED      400000  /* I2C spd and slave address */
+#define CONFIG_SYS_FSL_I2C2_SLAVE      0x7F
+#define CONFIG_SYS_FSL_I2C2_OFFSET     0x3100
+
+#define CONFIG_SYS_I2C_PCA9555_ADDR    0x23
+
+/* enable read and write access to EEPROM */
+#define CONFIG_CMD_EEPROM
+#define CONFIG_SYS_I2C_MULTI_EEPROMS
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 5
+
+/*
+ * eSPI - Enhanced SPI
+ */
+#define CONFIG_HARD_SPI
+#define CONFIG_FSL_ESPI
+
+#if defined(CONFIG_PCI)
+/*
+ * General PCI
+ * Memory space is mapped 1-1, but I/O space must start from 0.
+ */
+
+/* controller 2, direct to uli, tgtid 2, Base address 9000 */
+#define CONFIG_SYS_PCIE2_NAME          "TWR-ELEV PCIe SLOT"
+#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       0xffc10000
+#define CONFIG_SYS_PCIE2_IO_BUS                0x00000000
+#define CONFIG_SYS_PCIE2_IO_PHYS       0xffc10000
+#define CONFIG_SYS_PCIE2_IO_SIZE       0x00010000      /* 64k */
+
+/* controller 1, tgtid 1, Base address a000 */
+#define CONFIG_SYS_PCIE1_NAME          "mini PCIe SLOT"
+#define CONFIG_SYS_PCIE1_MEM_VIRT      0x80000000
+#define CONFIG_SYS_PCIE1_MEM_BUS       0x80000000
+#define CONFIG_SYS_PCIE1_MEM_PHYS      0x80000000
+#define CONFIG_SYS_PCIE1_MEM_SIZE      0x20000000      /* 512M */
+#define CONFIG_SYS_PCIE1_IO_VIRT       0xffc00000
+#define CONFIG_SYS_PCIE1_IO_BUS                0x00000000
+#define CONFIG_SYS_PCIE1_IO_PHYS       0xffc00000
+#define CONFIG_SYS_PCIE1_IO_SIZE       0x00010000      /* 64k */
+
+#define CONFIG_NET_MULTI
+#define CONFIG_PCI_PNP /* do pci plug-and-play */
+#define CONFIG_E1000   /* Defind e1000 pci Ethernet card*/
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_NET
+
+#define CONFIG_PCI_SCAN_SHOW   /* show pci devices on startup */
+#define CONFIG_DOS_PARTITION
+#endif /* CONFIG_PCI */
+
+#if defined(CONFIG_TSEC_ENET)
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI
+#endif
+
+#define CONFIG_MII             /* MII PHY management */
+#define CONFIG_TSEC1
+#define CONFIG_TSEC1_NAME      "eTSEC1"
+#undef CONFIG_TSEC2
+#undef CONFIG_TSEC2_NAME
+#define CONFIG_TSEC3
+#define CONFIG_TSEC3_NAME      "eTSEC3"
+
+#define TSEC1_PHY_ADDR 2
+#define TSEC2_PHY_ADDR 0
+#define TSEC3_PHY_ADDR 1
+
+#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 */
+
+#define CONFIG_HAS_ETH0
+#define CONFIG_HAS_ETH1
+#undef CONFIG_HAS_ETH2
+#endif /* CONFIG_TSEC_ENET */
+
+#ifdef CONFIG_QE
+/* QE microcode/firmware address */
+#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_TWR_P1025
+/*
+ * QE UEC ethernet configuration
+ */
+#define CONFIG_MIIM_ADDRESS    (CONFIG_SYS_CCSRBAR + 0x82120)
+
+#undef CONFIG_UEC_ETH
+#define CONFIG_PHY_MODE_NEED_CHANGE
+
+#define CONFIG_UEC_ETH1        /* ETH1 */
+#define CONFIG_HAS_ETH0
+
+#ifdef CONFIG_UEC_ETH1
+#define CONFIG_SYS_UEC1_UCC_NUM        0       /* UCC1 */
+#define CONFIG_SYS_UEC1_RX_CLK QE_CLK12 /* CLK12 for MII */
+#define CONFIG_SYS_UEC1_TX_CLK QE_CLK9 /* CLK9 for MII */
+#define CONFIG_SYS_UEC1_ETH_TYPE       FAST_ETH
+#define CONFIG_SYS_UEC1_PHY_ADDR       0x18    /* 0x18 for MII */
+#define CONFIG_SYS_UEC1_INTERFACE_TYPE PHY_INTERFACE_MODE_MII
+#define CONFIG_SYS_UEC1_INTERFACE_SPEED        100
+#endif /* CONFIG_UEC_ETH1 */
+
+#define CONFIG_UEC_ETH5        /* ETH5 */
+#define CONFIG_HAS_ETH1
+
+#ifdef CONFIG_UEC_ETH5
+#define CONFIG_SYS_UEC5_UCC_NUM        4       /* UCC5 */
+#define CONFIG_SYS_UEC5_RX_CLK QE_CLK_NONE
+#define CONFIG_SYS_UEC5_TX_CLK QE_CLK13 /* CLK 13 for RMII */
+#define CONFIG_SYS_UEC5_ETH_TYPE       FAST_ETH
+#define CONFIG_SYS_UEC5_PHY_ADDR       0x19    /* 0x19 for RMII */
+#define CONFIG_SYS_UEC5_INTERFACE_TYPE PHY_INTERFACE_MODE_RMII
+#define CONFIG_SYS_UEC5_INTERFACE_SPEED        100
+#endif /* CONFIG_UEC_ETH5 */
+#endif /* CONFIG_TWR-P1025 */
+
+/*
+ * Environment
+ */
+#ifdef CONFIG_SYS_RAMBOOT
+#ifdef CONFIG_RAMBOOT_SDCARD
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_ENV_SIZE                0x2000
+#define CONFIG_SYS_MMC_ENV_DEV 0
+#else
+#define CONFIG_ENV_IS_NOWHERE  /* Store ENV in memory only */
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_MONITOR_BASE - 0x1000)
+#define CONFIG_ENV_SIZE                0x2000
+#endif
+#else
+#define CONFIG_ENV_IS_IN_FLASH
+#if CONFIG_SYS_MONITOR_BASE > 0xfff80000
+#define CONFIG_ENV_ADDR        0xfff80000
+#else
+#define CONFIG_ENV_ADDR        (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SECT_SIZE)
+#endif
+#define CONFIG_ENV_SIZE                0x2000
+#define CONFIG_ENV_SECT_SIZE   0x20000 /* 128K (one sector) */
+#endif
+
+#define CONFIG_LOADS_ECHO              /* echo on for serial download */
+#define CONFIG_SYS_LOADS_BAUD_CHANGE   /* allow baudrate change */
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_SETEXPR
+#define CONFIG_CMD_REGINFO
+
+/*
+ * USB
+ */
+#define CONFIG_HAS_FSL_DR_USB
+
+#if defined(CONFIG_HAS_FSL_DR_USB)
+#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
+#endif
+#endif
+
+#define CONFIG_MMC
+
+#ifdef CONFIG_MMC
+#define CONFIG_FSL_ESDHC
+#define CONFIG_SYS_FSL_ESDHC_ADDR      CONFIG_SYS_MPC85xx_ESDHC_ADDR
+#define CONFIG_CMD_MMC
+#define CONFIG_GENERIC_MMC
+#endif
+
+#if defined(CONFIG_MMC) || defined(CONFIG_USB_EHCI) \
+                || defined(CONFIG_FSL_SATA)
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_DOS_PARTITION
+#endif
+
+#undef CONFIG_WATCHDOG /* watchdog disabled */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_LONGHELP                    /* undef to save memory */
+#define CONFIG_CMDLINE_EDITING                 /* Command-line editing */
+#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)      /* Initial Memory for Linux*/
+#define CONFIG_SYS_BOOTM_LEN   (64 << 20)      /* Increase max gunzip size */
+
+/*
+ * Environment Configuration
+ */
+#define CONFIG_HOSTNAME                unknown
+#define CONFIG_ROOTPATH                "/opt/nfsroot"
+#define CONFIG_BOOTFILE                "uImage"
+#define CONFIG_UBOOTPATH       u-boot.bin /* U-Boot image on TFTP server */
+
+/* default location for tftp and bootm */
+#define CONFIG_LOADADDR        1000000
+
+#define CONFIG_BOOTDELAY 10    /* -1 disables auto-boot */
+#define CONFIG_BOOTARGS        /* the boot command will set bootargs */
+
+#define CONFIG_BAUDRATE        115200
+
+#define        CONFIG_EXTRA_ENV_SETTINGS       \
+"netdev=eth0\0"        \
+"uboot=" __stringify(CONFIG_UBOOTPATH) "\0"    \
+"loadaddr=1000000\0"   \
+"bootfile=uImage\0"    \
+"dtbfile=twr-p1025twr.dtb\0"   \
+"ramdiskfile=rootfs.ext2.gz.uboot\0"   \
+"qefirmwarefile=fsl_qe_ucode_1021_10_A.bin\0"  \
+"tftpflash=tftpboot $loadaddr $uboot; "        \
+       "protect off " __stringify(CONFIG_SYS_TEXT_BASE) " +$filesize; " \
+       "erase " __stringify(CONFIG_SYS_TEXT_BASE) " +$filesize; "      \
+       "cp.b $loadaddr " __stringify(CONFIG_SYS_TEXT_BASE) " $filesize; " \
+       "protect on " __stringify(CONFIG_SYS_TEXT_BASE) " +$filesize; " \
+       "cmp.b $loadaddr " __stringify(CONFIG_SYS_TEXT_BASE) " $filesize\0" \
+"kernelflash=tftpboot $loadaddr $bootfile; "   \
+       "protect off 0xefa80000 +$filesize; "   \
+       "erase 0xefa80000 +$filesize; " \
+       "cp.b $loadaddr 0xefa80000 $filesize; " \
+       "protect on 0xefa80000 +$filesize; "    \
+       "cmp.b $loadaddr 0xefa80000 $filesize\0"        \
+"dtbflash=tftpboot $loadaddr $dtbfile; "       \
+       "protect off 0xefe80000 +$filesize; "   \
+       "erase 0xefe80000 +$filesize; " \
+       "cp.b $loadaddr 0xefe80000 $filesize; " \
+       "protect on 0xefe80000 +$filesize; "    \
+       "cmp.b $loadaddr 0xefe80000 $filesize\0"        \
+"ramdiskflash=tftpboot $loadaddr $ramdiskfile; "       \
+       "protect off 0xeeb80000 +$filesize; "   \
+       "erase 0xeeb80000 +$filesize; " \
+       "cp.b $loadaddr 0xeeb80000 $filesize; " \
+       "protect on 0xeeb80000 +$filesize; "    \
+       "cmp.b $loadaddr 0xeeb80000 $filesize\0"        \
+"qefirmwareflash=tftpboot $loadaddr $qefirmwarefile; " \
+       "protect off 0xefec0000 +$filesize; "   \
+       "erase 0xefec0000 +$filesize; " \
+       "cp.b $loadaddr 0xefec0000 $filesize; " \
+       "protect on 0xefec0000 +$filesize; "    \
+       "cmp.b $loadaddr 0xefec0000 $filesize\0"        \
+"consoledev=ttyS0\0"   \
+"ramdiskaddr=2000000\0"        \
+"ramdiskfile=rootfs.ext2.gz.uboot\0"   \
+"fdtaddr=c00000\0"     \
+"bdev=sda1\0"  \
+"norbootaddr=ef080000\0"       \
+"norfdtaddr=ef040000\0"        \
+"ramdisk_size=120000\0" \
+"usbboot=setenv bootargs root=/dev/sda1 rw rootdelay=5 " \
+"console=$consoledev,$baudrate $othbootargs ; bootm 0xefa80000 - 0xefe80000"
+
+#define CONFIG_NFSBOOTCOMMAND  \
+"setenv bootargs root=/dev/nfs rw "    \
+"nfsroot=$serverip:$rootpath " \
+"ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \
+"console=$consoledev,$baudrate $othbootargs;" \
+"tftp $loadaddr $bootfile&&"   \
+"tftp $fdtaddr $fdtfile&&"     \
+"bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_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_USB_FAT_BOOT    \
+"setenv bootargs root=/dev/ram rw "    \
+"console=$consoledev,$baudrate $othbootargs " \
+"ramdisk_size=$ramdisk_size;"  \
+"usb start;"   \
+"fatload usb 0:2 $loadaddr $bootfile;" \
+"fatload usb 0:2 $fdtaddr $fdtfile;"   \
+"fatload usb 0:2 $ramdiskaddr $ramdiskfile;"   \
+"bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_USB_EXT2_BOOT   \
+"setenv bootargs root=/dev/ram rw "    \
+"console=$consoledev,$baudrate $othbootargs " \
+"ramdisk_size=$ramdisk_size;"  \
+"usb start;"   \
+"ext2load usb 0:4 $loadaddr $bootfile;"        \
+"ext2load usb 0:4 $fdtaddr $fdtfile;" \
+"ext2load usb 0:4 $ramdiskaddr $ramdiskfile;" \
+"bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_NORBOOT \
+"setenv bootargs root=/dev/mtdblock3 rw "      \
+"console=$consoledev,$baudrate rootfstype=jffs2 $othbootargs;" \
+"bootm $norbootaddr - $norfdtaddr"
+
+#define CONFIG_RAMBOOTCOMMAND_TFTP     \
+"setenv bootargs root=/dev/ram rw "    \
+"console=$consoledev,$baudrate $othbootargs " \
+"ramdisk_size=$ramdisk_size;"  \
+"tftp $ramdiskaddr $ramdiskfile;"      \
+"tftp $loadaddr $bootfile;"    \
+"tftp $fdtaddr $fdtfile;"      \
+"bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_RAMBOOTCOMMAND  \
+"setenv bootargs root=/dev/ram rw "    \
+"console=$consoledev,$baudrate $othbootargs " \
+"ramdisk_size=$ramdisk_size;"  \
+"bootm 0xefa80000 0xeeb80000 0xefe80000"
+
+#define CONFIG_BOOTCOMMAND     CONFIG_RAMBOOTCOMMAND
+
+#endif /* __CONFIG_H */
index d4d4d791cf9ec1d94504c8474fb12c4d82ce8503..e2b4de7414d542a1537f04ab2d7abf7187227c15 100644 (file)
 #define CONFIG_CMD_PING
 #define CONFIG_DRIVER_TI_CPSW
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
diff --git a/include/configs/pxm2.h b/include/configs/pxm2.h
new file mode 100644 (file)
index 0000000..20b0f9a
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * siemens pxm2
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * U-Boot file:/include/configs/am335x_evm.h
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __CONFIG_PXM2_H
+#define __CONFIG_PXM2_H
+
+#define CONFIG_SIEMENS_PXM2
+#define MACH_TYPE_PXM2                 4309
+#define CONFIG_SIEMENS_MACH_TYPE       MACH_TYPE_PXM2
+
+#include "siemens-am33x-common.h"
+
+#define CONFIG_SYS_MPUCLK      720
+#define DXR2_IOCTRL_VAL                0x18b
+#define DDR_PLL_FREQ           266
+
+#define BOARD_DFU_BUTTON_GPIO  59
+#define BOARD_DFU_BUTTON_LED   117
+#define BOARD_LCD_POWER                111
+#define BOARD_BACK_LIGHT       112
+#define BOARD_TOUCH_POWER      57
+
+ /* Physical Memory Map */
+#define CONFIG_MAX_RAM_BANK_SIZE       (512 << 20)     /* 1GB */
+
+/* I2C Configuration */
+#define CONFIG_SYS_I2C_SPEED           400000
+#define CONFIG_SYS_I2C_EEPROM_ADDR     0x50
+
+
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x300
+
+#undef CONFIG_SPL_NET_SUPPORT
+#undef CONFIG_SPL_NET_VCI_STRING
+#undef CONFIG_SPL_ETH_SUPPORT
+
+#define CONFIG_PHY_ADDR                        0
+#define CONFIG_PHY_ATHEROS
+
+#define CONFIG_FACTORYSET
+
+/* UBI Support */
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_MTD_DEVICE
+#define CONFIG_RBTREE
+#define CONFIG_LZO
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#endif
+
+/* Watchdog */
+#define CONFIG_OMAP_WATCHDOG
+
+#ifndef CONFIG_SPL_BUILD
+
+/* Default env settings */
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "hostname=pxm2\0" \
+       "nand_img_size=0x500000\0" \
+       "optargs=\0" \
+       CONFIG_COMMON_ENV_SETTINGS \
+       "mmc_dev=0\0" \
+       "mmc_root=/dev/mmcblk0p2 rw\0" \
+       "mmc_root_fs_type=ext4 rootwait\0" \
+       "mmc_load_uimage=" \
+               "mmc rescan; " \
+               "setenv bootfile uImage;" \
+               "fatload mmc ${mmc_dev} ${kloadaddr} ${bootfile}\0" \
+       "loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}\0" \
+       "importbootenv=echo Importing environment from mmc ...; " \
+               "env import -t $loadaddr $filesize\0" \
+       "mmc_args=run bootargs_defaults;" \
+               "mtdparts default;" \
+               "setenv bootargs ${bootargs} " \
+               "root=${mmc_root} ${mtdparts}" \
+               "rootfstype=${mmc_root_fs_type} ip=${ip_method} " \
+               "eth=${ethaddr} " \
+               "\0" \
+       "mmc_boot=run mmc_args; " \
+               "run mmc_load_uimage; " \
+               "bootm ${kloadaddr}\0" \
+       ""
+
+#ifndef CONFIG_RESTORE_FLASH
+/* set to negative value for no autoboot */
+#define CONFIG_BOOTDELAY               3
+
+#define CONFIG_BOOTCOMMAND \
+       "if dfubutton; then " \
+               "run dfu_start; " \
+               "reset; " \
+       "fi; " \
+       "if mmc rescan; then " \
+               "echo SD/MMC found on device ${mmc_dev};" \
+               "if run loadbootenv; then " \
+                       "echo Loaded environment from ${bootenv};" \
+                       "run importbootenv;" \
+               "fi;" \
+               "if test -n $uenvcmd; then " \
+                       "echo Running uenvcmd ...;" \
+                       "run uenvcmd;" \
+               "fi;" \
+               "if run mmc_load_uimage; then " \
+                       "run mmc_args;" \
+                       "bootm ${kloadaddr};" \
+               "fi;" \
+       "fi;" \
+       "run nand_boot;" \
+       "if ping ${serverip}; then " \
+               "run net_nfs; " \
+       "fi; "
+
+#else
+#define CONFIG_BOOTDELAY               0
+
+#define CONFIG_BOOTCOMMAND                     \
+       "setenv autoload no; "                  \
+       "dhcp; "                                \
+       "if tftp 80000000 debrick.scr; then "   \
+               "source 80000000; "             \
+       "fi"
+#endif
+#endif /* CONFIG_SPL_BUILD */
+
+#define CONFIG_VIDEO
+#if defined(CONFIG_VIDEO)
+#define CONFIG_VIDEO_DA8XX
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_SPLASH_SCREEN_ALIGN
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VIDEO_BMP_RLE8
+#define CONFIG_VIDEO_BMP_LOGO
+#define CONFIG_CMD_BMP
+#define DA8XX_LCD_CNTL_BASE    LCD_CNTL_BASE
+#define PWM_TICKS      0x1388
+#define PWM_DUTY       0x200
+#endif
+
+#endif /* ! __CONFIG_PXM2_H */
diff --git a/include/configs/rut.h b/include/configs/rut.h
new file mode 100644 (file)
index 0000000..7c94644
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * siemens rut
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * U-Boot file:/include/configs/am335x_evm.h
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __CONFIG_RUT_H
+#define __CONFIG_RUT_H
+
+#define CONFIG_SIEMENS_RUT
+#define MACH_TYPE_RUT                  4316
+#define CONFIG_SIEMENS_MACH_TYPE       MACH_TYPE_RUT
+
+#include "siemens-am33x-common.h"
+
+#define CONFIG_SYS_MPUCLK      600
+#define RUT_IOCTRL_VAL 0x18b
+#define DDR_PLL_FREQ   303
+
+ /* Physical Memory Map */
+#define CONFIG_MAX_RAM_BANK_SIZE       (256 << 20) /* 256 MiB */
+
+/* I2C Configuration */
+#define CONFIG_SYS_I2C_SPEED           100000
+
+#define CONFIG_SYS_I2C_EEPROM_ADDR              0x50
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN          2
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS       6       /* 64 byte pages */
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS   10      /* take up to 10 msec */
+
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS     0x200
+
+#undef CONFIG_SPL_NET_SUPPORT
+#undef CONFIG_SPL_NET_VCI_STRING
+#undef CONFIG_SPL_ETH_SUPPORT
+
+#define CONFIG_PHY_ADDR                        1
+#define CONFIG_PHY_NATSEMI
+
+#define CONFIG_FACTORYSET
+
+/* UBI Support */
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_MTD_DEVICE
+#define CONFIG_RBTREE
+#define CONFIG_LZO
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#endif
+
+/* Watchdog */
+#define WATCHDOG_TRIGGER_GPIO  14
+
+#ifndef CONFIG_SPL_BUILD
+
+/* Default env settings */
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "hostname=rut\0" \
+       "splashpos=488,352\0" \
+       "optargs=fixrtc --no-log consoleblank=0 \0" \
+       CONFIG_COMMON_ENV_SETTINGS \
+       "mmc_dev=0\0" \
+       "mmc_root=/dev/mmcblk0p2 rw\0" \
+       "mmc_root_fs_type=ext4 rootwait\0" \
+       "mmc_load_uimage=" \
+               "mmc rescan; " \
+               "setenv bootfile uImage;" \
+               "fatload mmc ${mmc_dev} ${kloadaddr} ${bootfile}\0" \
+       "loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}\0" \
+       "importbootenv=echo Importing environment from mmc ...; " \
+               "env import -t $loadaddr $filesize\0" \
+       "mmc_args=run bootargs_defaults;" \
+               "mtdparts default;" \
+               "setenv bootargs ${bootargs} " \
+               "root=${mmc_root} ${mtdparts}" \
+               "rootfstype=${mmc_root_fs_type} ip=${ip_method} " \
+               "eth=${ethaddr} " \
+               "\0" \
+       "mmc_boot=run mmc_args; " \
+               "run mmc_load_uimage; " \
+               "bootm ${kloadaddr}\0" \
+       ""
+
+#ifndef CONFIG_RESTORE_FLASH
+/* set to negative value for no autoboot */
+#define CONFIG_BOOTDELAY               3
+
+#define CONFIG_BOOTCOMMAND \
+       "if mmc rescan; then " \
+               "echo SD/MMC found on device ${mmc_dev};" \
+               "if run loadbootenv; then " \
+                       "echo Loaded environment from ${bootenv};" \
+                       "run importbootenv;" \
+               "fi;" \
+               "if test -n $uenvcmd; then " \
+                       "echo Running uenvcmd ...;" \
+                       "run uenvcmd;" \
+               "fi;" \
+               "if run mmc_load_uimage; then " \
+                       "run mmc_args;" \
+                       "bootm ${kloadaddr};" \
+               "fi;" \
+       "fi;" \
+       "run nand_boot;" \
+       "if ping ${serverip}; then " \
+               "run net_nfs; " \
+       "fi; "
+
+#else
+#define CONFIG_BOOTDELAY               0
+
+#define CONFIG_BOOTCOMMAND                     \
+       "setenv autoload no; "                  \
+       "dhcp; "                                \
+       "if tftp 80000000 debrick.scr; then "   \
+               "source 80000000; "             \
+       "fi"
+#endif
+
+#endif /* CONFIG_SPL_BUILD */
+
+#ifdef CONFIG_SPL_BUILD
+#undef CONFIG_HW_WATCHDOG
+#endif
+
+#define CONFIG_VIDEO
+#if defined(CONFIG_VIDEO)
+#define CONFIG_VIDEO_DA8XX
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_SPLASH_SCREEN_ALIGN
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VIDEO_BMP_RLE8
+#define CONFIG_VIDEO_BMP_LOGO
+#define CONFIG_CMD_BMP
+#define DA8XX_LCD_CNTL_BASE    LCD_CNTL_BASE
+
+#define CONFIG_SPI
+#define CONFIG_OMAP3_SPI
+
+#define BOARD_LCD_RESET                115     /* Bank 3 pin 19 */
+#define CONFIG_ARCH_EARLY_INIT_R
+#define CONFIG_FORMIKE
+#endif
+
+#endif /* ! __CONFIG_RUT_H */
index 10697d627af6d573d9f93b84258ba27d8adf396b..76fa500eddb5b137fe407ae6ce71514015def7a7 100644 (file)
@@ -56,7 +56,6 @@
 #define LCD_BPP                                LCD_COLOR16
 #define LCD_OUTPUT_BPP                  24
 #define CONFIG_LCD_LOGO
-#undef LCD_TEST_PATTERN
 #define CONFIG_LCD_INFO
 #define CONFIG_LCD_INFO_BELOW_LOGO
 #define CONFIG_SYS_WHITE_ON_BLACK
 #define CONFIG_CMD_NAND
 
 #ifdef CONFIG_CMD_NAND
-#define CONFIG_NAND_MAX_CHIPS          1
 #define CONFIG_NAND_ATMEL
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
 #define CONFIG_SYS_NAND_BASE           ATMEL_BASE_CS3
 #define CONFIG_ATMEL_NAND_HW_PMECC
 #define CONFIG_PMECC_CAP               4
 #define CONFIG_PMECC_SECTOR_SIZE       512
-#define CONFIG_PMECC_INDEX_TABLE_OFFSET        ATMEL_PMECC_INDEX_OFFSET_512
 #define CONFIG_CMD_NAND_TRIMFFS
 #endif
 
 /* Ethernet Hardware */
 #define CONFIG_MACB
 #define CONFIG_RMII
-#define CONFIG_NET_MULTI
 #define CONFIG_NET_RETRY_COUNT         20
 #define CONFIG_MACB_SEARCH_PHY
+#define CONFIG_RGMII
+#define CONFIG_CMD_MII
+#define CONFIG_PHYLIB
+#define CONFIG_PHY_MICREL
+#define CONFIG_PHY_MICREL_KSZ9021
 
 /* MMC */
 #define CONFIG_CMD_MMC
                                "bootm 0x22000000 - 0x21000000"
 #define CONFIG_SYS_MMC_ENV_DEV 0
 #else
-#define CONIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_IS_NOWHERE
 #endif
 
 #ifdef CONFIG_SYS_USE_MMC
diff --git a/include/configs/siemens-am33x-common.h b/include/configs/siemens-am33x-common.h
new file mode 100644 (file)
index 0000000..5426ee8
--- /dev/null
@@ -0,0 +1,461 @@
+/*
+ * siemens am33x common board options
+ * (C) Copyright 2013 Siemens Schweiz AG
+ * (C) Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * Based on:
+ * U-Boot file:/include/configs/am335x_evm.h
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __CONFIG_SIEMENS_AM33X_COMMON_H
+#define __CONFIG_SIEMENS_AM33X_COMMON_H
+
+#define CONFIG_AM33XX
+#define CONFIG_OMAP
+#define CONFIG_OMAP_COMMON
+
+#include <asm/arch/omap.h>
+
+#define CONFIG_DMA_COHERENT
+#define CONFIG_DMA_COHERENT_SIZE       (1 << 20)
+
+#define CONFIG_ENV_SIZE                        (0x2000)
+#define CONFIG_SYS_MALLOC_LEN          (16 * 1024 * 1024)
+#define CONFIG_SYS_LONGHELP            /* undef to save memory */
+#define CONFIG_SYS_HUSH_PARSER         /* use "hush" command parser */
+#define CONFIG_SYS_PROMPT              "U-Boot# "
+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
+#define CONFIG_BOARD_LATE_INIT
+#define CONFIG_SYS_NO_FLASH
+#define CONFIG_MACH_TYPE               CONFIG_SIEMENS_MACH_TYPE
+
+#define CONFIG_CMDLINE_TAG             /* enable passing of ATAGs */
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+
+#define CONFIG_SYS_CACHELINE_SIZE       64
+
+/* commands to include */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_ECHO
+#define CONFIG_CMD_CACHE
+
+#define CONFIG_ENV_VARS_UBOOT_CONFIG
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_ROOTPATH                "/opt/eldk"
+#endif
+
+#define CONFIG_ENV_OVERWRITE           1
+#define CONFIG_ENV_IS_NOWHERE
+
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_AUTOLOAD    "yes"
+
+/* Clock Defines */
+#define V_OSCK                         24000000  /* Clock output from T2 */
+#define V_SCLK                         (V_OSCK)
+
+/* We set the max number of command args high to avoid HUSH bugs. */
+#define CONFIG_SYS_MAXARGS             32
+
+/* Console I/O Buffer Size */
+#define CONFIG_SYS_CBSIZE              512
+
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE              (CONFIG_SYS_CBSIZE \
+                                       + sizeof(CONFIG_SYS_PROMPT) + 16)
+
+/* Boot Argument Buffer Size */
+#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE
+
+/*
+ * memtest works on 8 MB in DRAM after skipping 32MB from
+ * start addr of ram disk
+ */
+#define CONFIG_SYS_MEMTEST_START       (PHYS_DRAM_1 + (64 * 1024 * 1024))
+#define CONFIG_SYS_MEMTEST_END         (CONFIG_SYS_MEMTEST_START \
+                                       + (8 * 1024 * 1024))
+
+#define CONFIG_SYS_LOAD_ADDR           0x81000000 /* Default load address */
+#define CONFIG_SYS_HZ                  1000 /* 1ms clock */
+
+#define CONFIG_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_OMAP_HSMMC
+#define CONFIG_CMD_MMC
+#define CONFIG_DOS_PARTITION
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_EXT2
+
+#define CONFIG_SPI
+#define CONFIG_OMAP3_SPI
+#define CONFIG_MTD_DEVICE
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_WINBOND
+#define CONFIG_CMD_SF
+#define CONFIG_SF_DEFAULT_SPEED                (75000000)
+
+ /* Physical Memory Map */
+#define CONFIG_NR_DRAM_BANKS           1               /*  1 bank of DRAM */
+#define PHYS_DRAM_1                    0x80000000      /* DRAM Bank #1 */
+
+#define CONFIG_SYS_SDRAM_BASE          PHYS_DRAM_1
+#define CONFIG_SYS_INIT_SP_ADDR         (NON_SECURE_SRAM_END - \
+                                               GENERATED_GBL_DATA_SIZE)
+ /* Platform/Board specific defs */
+#define CONFIG_SYS_TIMERBASE           0x48040000      /* Use Timer2 */
+#define CONFIG_SYS_PTV                 2       /* Divisor: 2^(PTV+1) => 8 */
+#define CONFIG_SYS_HZ                  1000
+
+/* NS16550 Configuration */
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SERIAL_MULTI
+#define CONFIG_SYS_NS16550_REG_SIZE    (-4)
+#define CONFIG_SYS_NS16550_CLK         (48000000)
+#define CONFIG_SYS_NS16550_COM1                0x44e09000
+#define CONFIG_SYS_NS16550_COM4                0x481a6000
+
+#define CONFIG_BAUDRATE                115200
+
+#define CONFIG_SYS_CONSOLE_INFO_QUIET
+#define CONFIG_SERIAL1                  1
+#define CONFIG_CONS_INDEX               1
+
+/* I2C Configuration */
+#define CONFIG_I2C
+#define CONFIG_CMD_I2C
+#define CONFIG_HARD_I2C
+#define CONFIG_SYS_I2C_SLAVE           1
+#define CONFIG_I2C_MULTI_BUS
+#define CONFIG_DRIVER_OMAP24XX_I2C
+
+
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SPL_FRAMEWORK
+#define CONFIG_SPL_TEXT_BASE           0x402F0400
+#define CONFIG_SPL_MAX_SIZE            (101 * 1024)
+#define CONFIG_SPL_STACK               CONFIG_SYS_INIT_SP_ADDR
+
+#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_MMC_SD_FAT_BOOT_PARTITION   1
+#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME       "u-boot.img"
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SPL_FAT_SUPPORT
+#define CONFIG_FS_FAT
+#define CONFIG_SPL_I2C_SUPPORT
+
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBDISK_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_YMODEM_SUPPORT
+
+#define CONFIG_SPL_GPIO_SUPPORT
+#define CONFIG_SPL_WATCHDOG_SUPPORT
+
+#define CONFIG_SPL_SPI_SUPPORT
+#define CONFIG_SPL_SPI_FLASH_SUPPORT
+#define CONFIG_SPL_SPI_LOAD
+#define CONFIG_SPL_SPI_BUS             0
+#define CONFIG_SPL_SPI_CS              0
+#define CONFIG_SYS_SPI_U_BOOT_OFFS     0x20000
+
+#define CONFIG_SPL_LDSCRIPT            "$(CPUDIR)/am33xx/u-boot-spl.lds"
+
+#define CONFIG_SPL_BOARD_INIT
+#define CONFIG_SPL_NAND_AM33XX_BCH
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SPL_NAND_BASE
+#define CONFIG_SPL_NAND_DRIVERS
+#define CONFIG_SPL_NAND_ECC
+#define CONFIG_SYS_NAND_5_ADDR_CYCLE
+#define CONFIG_SYS_NAND_PAGE_COUNT     (CONFIG_SYS_NAND_BLOCK_SIZE / \
+                                        CONFIG_SYS_NAND_PAGE_SIZE)
+#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, 14, 15, 16, 17, \
+                                        18, 19, 20, 21, 22, 23, 24, 25, \
+                                        26, 27, 28, 29, 30, 31, 32, 33, \
+                                        34, 35, 36, 37, 38, 39, 40, 41, \
+                                        42, 43, 44, 45, 46, 47, 48, 49, \
+                                        50, 51, 52, 53, 54, 55, 56, 57, }
+
+#define CONFIG_SYS_NAND_ECCSIZE                512
+#define CONFIG_SYS_NAND_ECCBYTES       14
+
+#define CONFIG_SYS_NAND_ECCSTEPS       4
+#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
+
+/*
+ * Since SPL did pll and ddr initialization for us,
+ * we don't need to do it twice.
+ */
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#endif
+
+#ifndef CONFIG_SPL_BUILD
+/*
+ * USB configuration
+ */
+#define CONFIG_USB_MUSB_DSPS
+#define CONFIG_ARCH_MISC_INIT
+#define CONFIG_MUSB_GADGET
+#define CONFIG_MUSB_PIO_ONLY
+#define CONFIG_MUSB_DISABLE_BULK_COMBINE_SPLIT
+#define CONFIG_USB_GADGET_DUALSPEED
+#define CONFIG_USB_GADGET_VBUS_DRAW    2
+#define CONFIG_MUSB_HOST
+
+#define CONFIG_AM335X_USB0
+#define CONFIG_AM335X_USB0_MODE        MUSB_PERIPHERAL
+#define CONFIG_AM335X_USB1
+#define CONFIG_AM335X_USB1_MODE MUSB_HOST
+#ifdef CONFIG_MUSB_HOST
+#define CONFIG_CMD_USB
+#define CONFIG_USB_STORAGE
+#endif
+
+#ifdef CONFIG_MUSB_GADGET
+#define CONFIG_USB_ETHER
+#define CONFIG_USB_ETH_RNDIS
+#define CONFIG_USBNET_HOST_ADDR        "de:ad:be:af:00:00"
+#endif /* CONFIG_MUSB_GADGET */
+
+#define CONFIG_USB_GADGET
+#define CONFIG_USBDOWNLOAD_GADGET
+
+/* USB TI's IDs */
+#define CONFIG_USBD_HS
+#define CONFIG_G_DNL_VENDOR_NUM 0x0525
+#define CONFIG_G_DNL_PRODUCT_NUM 0x4a47
+#define CONFIG_G_DNL_MANUFACTURER "Texas Instruments"
+
+/* USB Device Firmware Update support */
+#define CONFIG_DFU_FUNCTION
+#define CONFIG_DFU_NAND
+#define CONFIG_CMD_DFU
+#define CONFIG_SYS_DFU_DATA_BUF_SIZE   (1 << 20)
+
+#endif /* CONFIG_SPL_BUILD */
+
+/*
+ * Default to using SPI for environment, etc.  We have multiple copies
+ * of SPL as the ROM will check these locations.
+ * 0x0 - 0x20000 : First copy of SPL
+ * 0x20000 - 0x40000 : Second copy of SPL
+ * 0x40000 - 0x60000 : Third copy of SPL
+ * 0x60000 - 0x80000 : Fourth copy of SPL
+ * 0x80000 - 0xDF000 : U-Boot
+ * 0xDF000 - 0xE0000 : U-Boot Environment
+ * 0xE0000 - 0x442000 : Linux Kernel
+ * 0x442000 - 0x800000 : Userland
+ */
+#if defined(CONFIG_SPI_BOOT)
+# undef CONFIG_ENV_IS_NOWHERE
+# define CONFIG_ENV_IS_IN_SPI_FLASH
+# define CONFIG_ENV_SPI_MAX_HZ         CONFIG_SF_DEFAULT_SPEED
+# define CONFIG_ENV_OFFSET             (892 << 10) /* 892 KiB in */
+# define CONFIG_ENV_SECT_SIZE          (4 << 10) /* 4 KB sectors */
+#endif /* SPI support */
+
+/* Unsupported features */
+#undef CONFIG_USE_IRQ
+
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_PING
+#define CONFIG_DRIVER_TI_CPSW
+#define CONFIG_MII
+#define CONFIG_PHY_GIGE
+#define CONFIG_PHYLIB
+#define CONFIG_CMD_MII
+#define CONFIG_BOOTP_DEFAULT
+#define CONFIG_BOOTP_DNS
+#define CONFIG_BOOTP_DNS2
+#define CONFIG_BOOTP_SEND_HOSTNAME
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_SUBNETMASK
+#define CONFIG_NET_RETRY_COUNT         10
+#define CONFIG_NET_MULTI
+
+#define CONFIG_NAND
+/* NAND support */
+#ifdef CONFIG_NAND
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_MTDPARTS
+
+#define MTDIDS_NAME_STR                "omap2-nand.0"
+#define MTDIDS_DEFAULT         "nand0=" MTDIDS_NAME_STR
+#define MTDPARTS_DEFAULT       "mtdparts=" MTDIDS_NAME_STR ":" \
+                                       "128k(spl),"            \
+                                       "128k(spl.backup1),"    \
+                                       "128k(spl.backup2),"    \
+                                       "128k(spl.backup3),"    \
+                                       "1920k(u-boot),"        \
+                                       "128k(uboot.env),"      \
+                                       "5120k(kernel_a),"      \
+                                       "5120k(kernel_b),"      \
+                                       "8192k(mtdoops),"       \
+                                       "-(rootfs)"
+/*
+ * chip-size = 256MiB
+ *|         name |        size |           address area |
+ *-------------------------------------------------------
+ *|          spl | 128.000 KiB | 0x       0..0x   1ffff |
+ *|  spl.backup1 | 128.000 KiB | 0x   20000..0x   3ffff |
+ *|  spl.backup2 | 128.000 KiB | 0x   40000..0x   5ffff |
+ *|  spl.backup3 | 128.000 KiB | 0x   60000..0x   7ffff |
+ *|       u-boot |   1.875 MiB | 0x   80000..0x  25ffff |
+ *|    uboot.env | 128.000 KiB | 0x  260000..0x  27ffff |
+ *|     kernel_a |   5.000 MiB | 0x  280000..0x  77ffff |
+ *|     kernel_b |   5.000 MiB | 0x  780000..0x  c7ffff |
+ *|      mtdoops |   8.000 MiB | 0x  c80000..0x 147ffff |
+ *|       rootfs | 235.500 MiB | 0x 1480000..0x fffffff |
+ *-------------------------------------------------------
+ */
+
+#define DFU_ALT_INFO_NAND \
+       "spl part 0 1;" \
+       "spl.backup1 part 0 2;" \
+       "spl.backup2 part 0 3;" \
+       "spl.backup3 part 0 4;" \
+       "u-boot part 0 5;" \
+       "u-boot.env part 0 6;" \
+       "kernel_a part 0 7;" \
+       "kernel_b part 0 8;" \
+       "rootfs partubi 0 10"
+
+#define CONFIG_COMMON_ENV_SETTINGS \
+       "verify=no \0" \
+       "project_dir=systemone\0" \
+       "loadaddr=0x82000000\0" \
+       "kloadaddr=0x81000000\0" \
+       "script_addr=0x81900000\0" \
+       "console=console=ttyMTD,mtdoops console=ttyO0,115200n8\0" \
+       "active_set=a\0" \
+       "nand_active_ubi_vol=rootfs_a\0" \
+       "nand_root_fs_type=ubifs rootwait=1\0" \
+       "nand_src_addr=0x280000\0" \
+       "nand_src_addr_a=0x280000\0" \
+       "nand_src_addr_b=0x780000\0" \
+       "nfsopts=nolock rw mem=128M\0" \
+       "ip_method=none\0" \
+       "bootenv=uEnv.txt\0" \
+       "bootargs_defaults=setenv bootargs " \
+               "console=${console} " \
+               "${optargs}\0" \
+       "nand_args=run bootargs_defaults;" \
+               "mtdparts default;" \
+               "setenv nand_active_ubi_vol rootfs_${active_set};" \
+               "setenv ${active_set} true;" \
+               "if test -n ${a}; then " \
+                       "setenv nand_src_addr ${nand_src_addr_a};" \
+               "fi;" \
+               "if test -n ${b}; then " \
+                       "setenv nand_src_addr ${nand_src_addr_b};" \
+               "fi;" \
+               "setenv nand_root ubi0:${nand_active_ubi_vol} rw " \
+               "ubi.mtd=9,2048;" \
+               "setenv bootargs ${bootargs} " \
+               "root=${nand_root} noinitrd ${mtdparts} " \
+               "rootfstype=${nand_root_fs_type} ip=${ip_method} " \
+               "console=ttyMTD,mtdoops console=ttyO0,115200n8 mtdoops.mtddev" \
+               "=mtdoops\0" \
+       "dfu_args=run bootargs_defaults;" \
+               "setenv bootargs ${bootargs} ;" \
+               "mtdparts default; " \
+               "dfu nand 0; \0" \
+               "dfu_alt_info=" DFU_ALT_INFO_NAND "\0" \
+       "net_args=run bootargs_defaults;" \
+               "mtdparts default;" \
+               "setenv bootfile ${project_dir}/kernel/uImage;" \
+               "setenv rootpath /home/projects/${project_dir}/rootfs;" \
+               "setenv bootargs ${bootargs} " \
+               "root=/dev/nfs ${mtdparts} " \
+               "nfsroot=${serverip}:${rootpath},${nfsopts} " \
+               "addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:" \
+               "${gatewayip}:${netmask}:${hostname}:eth0:off\0" \
+       "nand_boot=echo Booting from nand, active set ${active_set} ...; " \
+               "run nand_args; " \
+               "nand read.i ${kloadaddr} ${nand_src_addr} " \
+               "${nand_img_size}; bootm ${kloadaddr}\0" \
+       "net_nfs=echo Booting from network ...; " \
+               "run net_args; " \
+               "tftpboot ${kloadaddr} ${serverip}:${bootfile}; " \
+               "bootm ${kloadaddr}\0" \
+       "flash_self=run nand_boot\0" \
+       "flash_self_test=setenv bootargs_defaults ${bootargs_defaults} test; " \
+               "run nand_boot\0" \
+       "dfu_start=echo Preparing for dfu mode ...; " \
+               "run dfu_args; \0" \
+       "preboot=echo; "\
+               "echo Type 'run flash_self' to use kernel and root " \
+               "filesystem on memory; echo Type 'run flash_self_test' to " \
+               "use kernel and root filesystem on memory, boot in test " \
+               "mode; echo Not ready yet: 'run flash_nfs' to use kernel " \
+               "from memory and root filesystem over NFS; echo Type " \
+               "'run net_nfs' to get Kernel over TFTP and mount root " \
+               "filesystem over NFS; echo Set active_set variable to 'a' " \
+               "or 'b' to select kernel and rootfs partition; " \
+               "echo" \
+               "\0"
+
+#define CONFIG_NAND_OMAP_GPMC
+#define GPMC_NAND_ECC_LP_x16_LAYOUT    1
+#define CONFIG_SYS_NAND_BASE           (0x08000000)    /* physical address */
+                                                       /* to access nand at */
+                                                       /* CS0 */
+#define CONFIG_SYS_MAX_NAND_DEVICE     1               /* Max number of NAND
+                                                          devices */
+#if !defined(CONFIG_SPI_BOOT)
+#undef CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_OFFSET              0x260000 /* environment starts here */
+#define CONFIG_SYS_ENV_SECT_SIZE       (128 << 10)     /* 128 KiB */
+#endif
+#endif
+
+#define CONFIG_OMAP_GPIO
+
+/* Watchdog */
+#define CONFIG_HW_WATCHDOG
+
+/* Stop autoboot with ESC ESC key detected */
+#define CONFIG_AUTOBOOT_KEYED
+#define CONFIG_AUTOBOOT_STOP_STR       "\x1b\x1b"
+#define CONFIG_AUTOBOOT_PROMPT "Autobooting in %d seconds, "           \
+                               "press \"<Esc><Esc>\" to stop\n", bootdelay
+
+#endif /* ! __CONFIG_SIEMENS_AM33X_COMMON_H */
index b5a7a9addcfaa8dbbdb831f5b2de3203b4361859..06aeba61dd2dd32da524df63c66f8b32cc3ec503 100644 (file)
@@ -11,6 +11,8 @@
 /*
  * High level configuration
  */
+/* Virtual target or real hardware */
+#define CONFIG_SOCFPGA_VIRTUAL_TARGET
 
 #define CONFIG_ARMV7
 #define CONFIG_L2_OFF
 #define CONFIG_SINGLE_BOOTLOADER
 #define CONFIG_SOCFPGA
 
+/* base address for .text section */
+#ifdef CONFIG_SOCFPGA_VIRTUAL_TARGET
 #define CONFIG_SYS_TEXT_BASE           0x08000040
-#define V_NS16550_CLK                  1000000
-#define CONFIG_BAUDRATE                        57600
-#define CONFIG_SYS_HZ                  1000
-#define CONFIG_TIMER_CLOCK_KHZ         2400
+#else
+#define CONFIG_SYS_TEXT_BASE           0x01000040
+#endif
 #define CONFIG_SYS_LOAD_ADDR           0x7fc0
 
 /* Console I/O Buffer Size */
 /* SDRAM Bank #1 */
 #define CONFIG_SYS_SDRAM_BASE          0x00000000
 /* SDRAM memory size */
-#define PHYS_SDRAM_1_SIZE              0x80000000
+#define PHYS_SDRAM_1_SIZE              0x40000000
 
 #define PHYS_SDRAM_1                   CONFIG_SYS_SDRAM_BASE
 #define CONFIG_SYS_MEMTEST_START       0x00000000
 #define CONFIG_SYS_NS16550_CLK          V_NS16550_CLK
 #define CONFIG_CONS_INDEX               1
 #define CONFIG_SYS_NS16550_COM1                UART0_BASE
-
 #define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600, 115200}
+#ifdef CONFIG_SOCFPGA_VIRTUAL_TARGET
+#define V_NS16550_CLK                  1000000
+#else
+#define V_NS16550_CLK                  100000000
+#endif
+#define CONFIG_BAUDRATE                        115200
 
 /*
  * FLASH
 /* This timer use eosc1 where the clock frequency is fixed
  * throughout any condition */
 #define CONFIG_SYS_TIMERBASE           SOCFPGA_OSC1TIMER0_ADDRESS
-
 /* reload value when timer count to zero */
 #define TIMER_LOAD_VAL                 0xFFFFFFFF
+/* Timer info */
+#define CONFIG_SYS_HZ                  1000
+#ifdef CONFIG_SOCFPGA_VIRTUAL_TARGET
+#define CONFIG_TIMER_CLOCK_KHZ         2400
+#else
+#define CONFIG_TIMER_CLOCK_KHZ         25000
+#endif
 
 #define CONFIG_ENV_IS_NOWHERE
 
index 1ed53dbbb1ee5a38283cf86b0f0712297844c1cf..3e82fc255823493ae059f2971abe949baa4b5519 100644 (file)
@@ -7,24 +7,8 @@
 /*
  * Corenet DS style board configuration file
  */
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#ifdef CONFIG_RAMBOOT_PBL
-#define CONFIG_RAMBOOT_TEXT_BASE       CONFIG_SYS_TEXT_BASE
-#define CONFIG_RESET_VECTOR_ADDRESS    0xfffffffc
-#define CONFIG_PBLPBI_CONFIG $(SRCTREE)/board/freescale/t4qds/t4_pbi.cfg
-#define CONFIG_PBLRCW_CONFIG $(SRCTREE)/board/freescale/t4qds/t4_rcw.cfg
-#endif
-
-#ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
-/* Set 1M boot space */
-#define CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR (CONFIG_SYS_TEXT_BASE & 0xfff00000)
-#define CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS \
-               (0x300000000ull | CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR)
-#define CONFIG_RESET_VECTOR_ADDRESS 0xfffffffc
-#define CONFIG_SYS_NO_FLASH
-#endif
+#ifndef __T4QDS_H
+#define __T4QDS_H
 
 #define CONFIG_CMD_REGINFO
 
@@ -34,7 +18,6 @@
 #define CONFIG_E500MC                  /* BOOKE e500mc family */
 #define CONFIG_SYS_BOOK3E_HV           /* Category E.HV supported */
 #define CONFIG_MPC85xx                 /* MPC85xx/PQ3 platform */
-#define CONFIG_FSL_CORENET             /* Freescale CoreNet platform */
 #define CONFIG_MP                      /* support multiple processors */
 
 #ifndef CONFIG_SYS_TEXT_BASE
 #define CONFIG_SYS_SRIO
 #define CONFIG_SRIO1                   /* SRIO port 1 */
 #define CONFIG_SRIO2                   /* SRIO port 2 */
-#define CONFIG_SRIO_PCIE_BOOT_MASTER
 
 #define CONFIG_FSL_LAW                 /* Use common FSL init code */
 
 #define CONFIG_ENV_OVERWRITE
 
-#ifdef CONFIG_SYS_NO_FLASH
-#if !defined(CONFIG_SRIO_PCIE_BOOT_SLAVE) && !defined(CONFIG_RAMBOOT_PBL)
-#define CONFIG_ENV_IS_NOWHERE
-#endif
-#else
-#define CONFIG_FLASH_CFI_DRIVER
-#define CONFIG_SYS_FLASH_CFI
-#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
-#endif
-
-#if defined(CONFIG_SPIFLASH)
-#define CONFIG_SYS_EXTRA_ENV_RELOC
-#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_SIZE                 0x2000          /* 8KB */
-#define CONFIG_ENV_OFFSET               0x100000        /* 1MB */
-#define CONFIG_ENV_SECT_SIZE            0x10000
-#elif defined(CONFIG_SDCARD)
-#define CONFIG_SYS_EXTRA_ENV_RELOC
-#define CONFIG_ENV_IS_IN_MMC
-#define CONFIG_SYS_MMC_ENV_DEV          0
-#define CONFIG_ENV_SIZE                        0x2000
-#define CONFIG_ENV_OFFSET              (512 * 1097)
-#elif defined(CONFIG_NAND)
-#define CONFIG_SYS_EXTRA_ENV_RELOC
-#define CONFIG_ENV_IS_IN_NAND
-#define CONFIG_ENV_SIZE                        CONFIG_SYS_NAND_BLOCK_SIZE
-#define CONFIG_ENV_OFFSET              (5 * CONFIG_SYS_NAND_BLOCK_SIZE)
-#elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
-#define CONFIG_ENV_IS_IN_REMOTE
-#define CONFIG_ENV_ADDR                0xffe20000
-#define CONFIG_ENV_SIZE                0x2000
-#elif defined(CONFIG_ENV_IS_NOWHERE)
-#define CONFIG_ENV_SIZE                0x2000
-#else
-#define CONFIG_ENV_IS_IN_FLASH
-#define CONFIG_ENV_ADDR                (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SECT_SIZE)
-#define CONFIG_ENV_SIZE                0x2000
-#define CONFIG_ENV_SECT_SIZE   0x20000 /* 128K (one sector) */
-#endif
-
-#define CONFIG_SYS_CLK_FREQ    get_board_sys_clk()
-#define CONFIG_DDR_CLK_FREQ    get_board_ddr_clk()
-
-#ifndef __ASSEMBLY__
-unsigned long get_board_sys_clk(void);
-unsigned long get_board_ddr_clk(void);
-#endif
-
 /*
  * These can be toggled for performance analysis, otherwise use default.
  */
 #define CONFIG_SYS_CACHE_STASHING
 #define CONFIG_BTB                     /* toggle branch predition */
-#define        CONFIG_DDR_ECC
 #ifdef CONFIG_DDR_ECC
 #define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
 #define CONFIG_MEM_INIT_VALUE          0xdeadbeef
@@ -129,14 +58,9 @@ unsigned long get_board_ddr_clk(void);
 
 #define CONFIG_ENABLE_36BIT_PHYS
 
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_ADDR_MAP
 #define CONFIG_SYS_NUM_ADDR_MAP                64      /* number of TLB1 entries */
-#endif
 
-#if 0
-#define CONFIG_POST CONFIG_SYS_POST_MEMORY     /* test POST memory test */
-#endif
 #define CONFIG_SYS_MEMTEST_START       0x00200000      /* memtest works on */
 #define CONFIG_SYS_MEMTEST_END         0x00400000
 #define CONFIG_SYS_ALT_MEMTEST
@@ -147,17 +71,8 @@ unsigned long get_board_ddr_clk(void);
  */
 #define CONFIG_SYS_INIT_L3_ADDR                CONFIG_RAMBOOT_TEXT_BASE
 
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_DCSRBAR             0xf0000000
 #define CONFIG_SYS_DCSRBAR_PHYS                0xf00000000ull
-#endif
-
-/* EEPROM */
-#define CONFIG_ID_EEPROM
-#define CONFIG_SYS_I2C_EEPROM_NXID
-#define CONFIG_SYS_EEPROM_BUS_NUM      0
-#define CONFIG_SYS_I2C_EEPROM_ADDR     0x57
-#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
 
 /*
  * DDR Setup
@@ -174,199 +89,16 @@ unsigned long get_board_ddr_clk(void);
 #define CONFIG_DDR_SPD
 #define CONFIG_FSL_DDR3
 
-#define CONFIG_SYS_SPD_BUS_NUM 0
-#define SPD_EEPROM_ADDRESS1    0x51
-#define SPD_EEPROM_ADDRESS2    0x52
-#define SPD_EEPROM_ADDRESS3    0x53
-#define SPD_EEPROM_ADDRESS4    0x54
-#define SPD_EEPROM_ADDRESS5    0x55
-#define SPD_EEPROM_ADDRESS6    0x56
-#define SPD_EEPROM_ADDRESS     SPD_EEPROM_ADDRESS1     /* for p3041/p5010 */
-#define CONFIG_SYS_SDRAM_SIZE  4096    /* for fixed parameter use */
 
 /*
  * IFC Definitions
  */
 #define CONFIG_SYS_FLASH_BASE  0xe0000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_FLASH_BASE_PHYS     (0xf00000000ull | CONFIG_SYS_FLASH_BASE)
-#else
-#define CONFIG_SYS_FLASH_BASE_PHYS     CONFIG_SYS_FLASH_BASE
-#endif
-
-#define CONFIG_SYS_NOR0_CSPR_EXT       (0xf)
-#define CONFIG_SYS_NOR0_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS \
-                               + 0x8000000) | \
-                               CSPR_PORT_SIZE_16 | \
-                               CSPR_MSEL_NOR | \
-                               CSPR_V)
-#define CONFIG_SYS_NOR1_CSPR_EXT       (0xf)
-#define CONFIG_SYS_NOR1_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS) | \
-                               CSPR_PORT_SIZE_16 | \
-                               CSPR_MSEL_NOR | \
-                               CSPR_V)
-#define CONFIG_SYS_NOR_AMASK   IFC_AMASK(128*1024*1024)
-/* NOR Flash Timing Params */
-#define CONFIG_SYS_NOR_CSOR    CSOR_NAND_TRHZ_80
-
-#define CONFIG_SYS_NOR_FTIM0   (FTIM0_NOR_TACSE(0x4) | \
-                               FTIM0_NOR_TEADC(0x5) | \
-                               FTIM0_NOR_TEAHC(0x5))
-#define CONFIG_SYS_NOR_FTIM1   (FTIM1_NOR_TACO(0x35) | \
-                               FTIM1_NOR_TRAD_NOR(0x1A) |\
-                               FTIM1_NOR_TSEQRAD_NOR(0x13))
-#define CONFIG_SYS_NOR_FTIM2   (FTIM2_NOR_TCS(0x4) | \
-                               FTIM2_NOR_TCH(0x4) | \
-                               FTIM2_NOR_TWPH(0x0E) | \
-                               FTIM2_NOR_TWP(0x1c))
-#define CONFIG_SYS_NOR_FTIM3   0x0
-
-#define CONFIG_SYS_FLASH_QUIET_TEST
-#define CONFIG_FLASH_SHOW_PROGRESS     45 /* count down from 45/5: 9..1 */
-
-#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* number of banks */
-#define CONFIG_SYS_MAX_FLASH_SECT      1024    /* sectors per device */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    60000   /* Flash Erase Timeout (ms) */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Flash Write Timeout (ms) */
-
-#define CONFIG_SYS_FLASH_EMPTY_INFO
-#define CONFIG_SYS_FLASH_BANKS_LIST    {CONFIG_SYS_FLASH_BASE_PHYS \
-                                       + 0x8000000, CONFIG_SYS_FLASH_BASE_PHYS}
-
-#define CONFIG_FSL_QIXIS       /* use common QIXIS code */
-#define QIXIS_BASE                     0xffdf0000
-#define QIXIS_LBMAP_SWITCH             6
-#define QIXIS_LBMAP_MASK               0x0f
-#define QIXIS_LBMAP_SHIFT              0
-#define QIXIS_LBMAP_DFLTBANK           0x00
-#define QIXIS_LBMAP_ALTBANK            0x04
-#define QIXIS_RST_CTL_RESET            0x83
-#define QIXIS_RCFG_CTL_RECONFIG_IDLE   0x20
-#define QIXIS_RCFG_CTL_RECONFIG_START  0x21
-#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE  0x08
-#ifdef CONFIG_PHYS_64BIT
-#define QIXIS_BASE_PHYS                (0xf00000000ull | QIXIS_BASE)
-#else
-#define QIXIS_BASE_PHYS                QIXIS_BASE
-#endif
-
-#define CONFIG_SYS_CSPR3_EXT   (0xf)
-#define CONFIG_SYS_CSPR3       (CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) \
-                               | CSPR_PORT_SIZE_8 \
-                               | CSPR_MSEL_GPCM \
-                               | CSPR_V)
-#define CONFIG_SYS_AMASK3      IFC_AMASK(4 * 1024)
-#define CONFIG_SYS_CSOR3       0x0
-/* QIXIS Timing parameters for IFC CS3 */
-#define CONFIG_SYS_CS3_FTIM0           (FTIM0_GPCM_TACSE(0x0e) | \
-                                       FTIM0_GPCM_TEADC(0x0e) | \
-                                       FTIM0_GPCM_TEAHC(0x0e))
-#define CONFIG_SYS_CS3_FTIM1           (FTIM1_GPCM_TACO(0xff) | \
-                                       FTIM1_GPCM_TRAD(0x3f))
-#define CONFIG_SYS_CS3_FTIM2           (FTIM2_GPCM_TCS(0x0e) | \
-                                       FTIM2_GPCM_TCH(0x0) | \
-                                       FTIM2_GPCM_TWP(0x1f))
-#define CONFIG_SYS_CS3_FTIM3           0x0
-
-/* NAND Flash on IFC */
-#define CONFIG_NAND_FSL_IFC
-#define CONFIG_SYS_NAND_BASE           0xff800000
-#ifdef CONFIG_PHYS_64BIT
-#define CONFIG_SYS_NAND_BASE_PHYS      (0xf00000000ull | CONFIG_SYS_NAND_BASE)
-#else
-#define CONFIG_SYS_NAND_BASE_PHYS      CONFIG_SYS_NAND_BASE
-#endif
 
-#define CONFIG_SYS_NAND_CSPR_EXT       (0xf)
-#define CONFIG_SYS_NAND_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \
-                               | CSPR_PORT_SIZE_8 /* Port Size = 8 bit */ \
-                               | CSPR_MSEL_NAND        /* MSEL = NAND */ \
-                               | CSPR_V)
-#define CONFIG_SYS_NAND_AMASK  IFC_AMASK(64*1024)
-
-#define CONFIG_SYS_NAND_CSOR    (CSOR_NAND_ECC_ENC_EN   /* ECC on encode */ \
-                               | CSOR_NAND_ECC_DEC_EN  /* ECC on decode */ \
-                               | CSOR_NAND_ECC_MODE_4  /* 4-bit ECC */ \
-                               | CSOR_NAND_RAL_3       /* RAL = 2Byes */ \
-                               | CSOR_NAND_PGS_2K      /* Page Size = 2K */ \
-                               | CSOR_NAND_SPRZ_64/* Spare size = 64 */ \
-                               | CSOR_NAND_PB(64))     /*Pages Per Block = 64*/
-
-#define CONFIG_SYS_NAND_ONFI_DETECTION
-
-/* ONFI NAND Flash mode0 Timing Params */
-#define CONFIG_SYS_NAND_FTIM0          (FTIM0_NAND_TCCST(0x07) | \
-                                       FTIM0_NAND_TWP(0x18)   | \
-                                       FTIM0_NAND_TWCHT(0x07) | \
-                                       FTIM0_NAND_TWH(0x0a))
-#define CONFIG_SYS_NAND_FTIM1          (FTIM1_NAND_TADLE(0x32) | \
-                                       FTIM1_NAND_TWBE(0x39)  | \
-                                       FTIM1_NAND_TRR(0x0e)   | \
-                                       FTIM1_NAND_TRP(0x18))
-#define CONFIG_SYS_NAND_FTIM2          (FTIM2_NAND_TRAD(0x0f) | \
-                                       FTIM2_NAND_TREH(0x0a) | \
-                                       FTIM2_NAND_TWHRE(0x1e))
-#define CONFIG_SYS_NAND_FTIM3          0x0
-
-#define CONFIG_SYS_NAND_DDR_LAW                11
-
-#define CONFIG_SYS_NAND_BASE_LIST      { CONFIG_SYS_NAND_BASE }
-#define CONFIG_SYS_MAX_NAND_DEVICE     1
-#define CONFIG_MTD_NAND_VERIFY_WRITE
-#define CONFIG_CMD_NAND
-
-#define CONFIG_SYS_NAND_BLOCK_SIZE     (128 * 1024)
-
-#if defined(CONFIG_NAND)
-#define CONFIG_SYS_CSPR0_EXT           CONFIG_SYS_NAND_CSPR_EXT
-#define CONFIG_SYS_CSPR0               CONFIG_SYS_NAND_CSPR
-#define CONFIG_SYS_AMASK0              CONFIG_SYS_NAND_AMASK
-#define CONFIG_SYS_CSOR0               CONFIG_SYS_NAND_CSOR
-#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NAND_FTIM0
-#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NAND_FTIM1
-#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NAND_FTIM2
-#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NAND_FTIM3
-#define CONFIG_SYS_CSPR2_EXT           CONFIG_SYS_NOR0_CSPR_EXT
-#define CONFIG_SYS_CSPR2               CONFIG_SYS_NOR0_CSPR
-#define CONFIG_SYS_AMASK2              CONFIG_SYS_NOR_AMASK
-#define CONFIG_SYS_CSOR2               CONFIG_SYS_NOR_CSOR
-#define CONFIG_SYS_CS2_FTIM0           CONFIG_SYS_NOR_FTIM0
-#define CONFIG_SYS_CS2_FTIM1           CONFIG_SYS_NOR_FTIM1
-#define CONFIG_SYS_CS2_FTIM2           CONFIG_SYS_NOR_FTIM2
-#define CONFIG_SYS_CS2_FTIM3           CONFIG_SYS_NOR_FTIM3
-#else
-#define CONFIG_SYS_CSPR0_EXT           CONFIG_SYS_NOR0_CSPR_EXT
-#define CONFIG_SYS_CSPR0               CONFIG_SYS_NOR0_CSPR
-#define CONFIG_SYS_AMASK0              CONFIG_SYS_NOR_AMASK
-#define CONFIG_SYS_CSOR0               CONFIG_SYS_NOR_CSOR
-#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NOR_FTIM0
-#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NOR_FTIM1
-#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NOR_FTIM2
-#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NOR_FTIM3
-#define CONFIG_SYS_CSPR2_EXT           CONFIG_SYS_NAND_CSPR_EXT
-#define CONFIG_SYS_CSPR2               CONFIG_SYS_NAND_CSPR
-#define CONFIG_SYS_AMASK2              CONFIG_SYS_NAND_AMASK
-#define CONFIG_SYS_CSOR2               CONFIG_SYS_NAND_CSOR
-#define CONFIG_SYS_CS2_FTIM0           CONFIG_SYS_NAND_FTIM0
-#define CONFIG_SYS_CS2_FTIM1           CONFIG_SYS_NAND_FTIM1
-#define CONFIG_SYS_CS2_FTIM2           CONFIG_SYS_NAND_FTIM2
-#define CONFIG_SYS_CS2_FTIM3           CONFIG_SYS_NAND_FTIM3
-#endif
-#define CONFIG_SYS_CSPR1_EXT           CONFIG_SYS_NOR1_CSPR_EXT
-#define CONFIG_SYS_CSPR1               CONFIG_SYS_NOR1_CSPR
-#define CONFIG_SYS_AMASK1              CONFIG_SYS_NOR_AMASK
-#define CONFIG_SYS_CSOR1               CONFIG_SYS_NOR_CSOR
-#define CONFIG_SYS_CS1_FTIM0           CONFIG_SYS_NOR_FTIM0
-#define CONFIG_SYS_CS1_FTIM1           CONFIG_SYS_NOR_FTIM1
-#define CONFIG_SYS_CS1_FTIM2           CONFIG_SYS_NOR_FTIM2
-#define CONFIG_SYS_CS1_FTIM3           CONFIG_SYS_NOR_FTIM3
 
 #define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_TEXT_BASE
 
-#if defined(CONFIG_RAMBOOT_PBL)
-#define CONFIG_SYS_RAMBOOT
-#endif
-
 #define CONFIG_BOARD_EARLY_INIT_R      /* call board_early_init_r function */
 #define CONFIG_MISC_INIT_R
 
@@ -376,18 +108,12 @@ unsigned long get_board_ddr_clk(void);
 #define CONFIG_L1_INIT_RAM
 #define CONFIG_SYS_INIT_RAM_LOCK
 #define CONFIG_SYS_INIT_RAM_ADDR       0xfdd00000      /* Initial L1 address */
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_INIT_RAM_ADDR_PHYS_HIGH     0xf
 #define CONFIG_SYS_INIT_RAM_ADDR_PHYS_LOW      0xfe0ec000
 /* 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  0xfe0ec000 /* Initial L1 address */
-#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 - \
@@ -431,89 +157,22 @@ unsigned long get_board_ddr_clk(void);
 /* I2C */
 #define CONFIG_SYS_I2C
 #define CONFIG_SYS_I2C_FSL
-#define CONFIG_SYS_FSL_I2C_SPEED       100000
 #define CONFIG_SYS_FSL_I2C_SLAVE       0x7F
 #define CONFIG_SYS_FSL_I2C_OFFSET      0x118000
-#define CONFIG_SYS_FSL_I2C2_SPEED      100000
 #define CONFIG_SYS_FSL_I2C2_SLAVE      0x7F
 #define CONFIG_SYS_FSL_I2C2_OFFSET     0x118100
 
-#define I2C_MUX_PCA_ADDR_PRI           0x77 /* I2C bus multiplexer,primary */
-#define I2C_MUX_PCA_ADDR_SEC           0x76 /* I2C bus multiplexer,secondary */
-
-#define I2C_MUX_CH_DEFAULT     0x8
-#define I2C_MUX_CH_VOL_MONITOR 0xa
-#define I2C_MUX_CH_VSC3316_FS  0xc
-#define I2C_MUX_CH_VSC3316_BS  0xd
-
-/* Voltage monitor on channel 2*/
-#define I2C_VOL_MONITOR_ADDR           0x40
-#define I2C_VOL_MONITOR_BUS_V_OFFSET   0x2
-#define I2C_VOL_MONITOR_BUS_V_OVF      0x1
-#define I2C_VOL_MONITOR_BUS_V_SHIFT    3
-
-/* VSC Crossbar switches */
-#define CONFIG_VSC_CROSSBAR
-#define VSC3316_FSM_TX_ADDR    0x70
-#define VSC3316_FSM_RX_ADDR    0x71
-
 /*
  * RapidIO
  */
 #define CONFIG_SYS_SRIO1_MEM_VIRT      0xa0000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_SRIO1_MEM_PHYS      0xc20000000ull
-#else
-#define CONFIG_SYS_SRIO1_MEM_PHYS      0xa0000000
-#endif
 #define CONFIG_SYS_SRIO1_MEM_SIZE      0x10000000      /* 256M */
 
 #define CONFIG_SYS_SRIO2_MEM_VIRT      0xb0000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_SRIO2_MEM_PHYS      0xc30000000ull
-#else
-#define CONFIG_SYS_SRIO2_MEM_PHYS      0xb0000000
-#endif
 #define CONFIG_SYS_SRIO2_MEM_SIZE      0x10000000      /* 256M */
 
-/*
- * for slave u-boot IMAGE instored in master memory space,
- * PHYS must be aligned based on the SIZE
- */
-#define CONFIG_SRIO_PCIE_BOOT_IMAGE_MEM_PHYS 0xfef080000ull
-#define CONFIG_SRIO_PCIE_BOOT_IMAGE_MEM_BUS1 0xfff80000ull
-#define CONFIG_SRIO_PCIE_BOOT_IMAGE_SIZE 0x80000       /* 512K */
-#define CONFIG_SRIO_PCIE_BOOT_IMAGE_MEM_BUS2 0x3fff80000ull
-/*
- * for slave UCODE and ENV instored in master memory space,
- * PHYS must be aligned based on the SIZE
- */
-#define CONFIG_SRIO_PCIE_BOOT_UCODE_ENV_MEM_PHYS 0xfef040000ull
-#define CONFIG_SRIO_PCIE_BOOT_UCODE_ENV_MEM_BUS 0x3ffe00000ull
-#define CONFIG_SRIO_PCIE_BOOT_UCODE_ENV_SIZE 0x40000   /* 256K */
-
-/* slave core release by master*/
-#define CONFIG_SRIO_PCIE_BOOT_BRR_OFFSET 0xe00e4
-#define CONFIG_SRIO_PCIE_BOOT_RELEASE_MASK 0x00000001 /* release core 0 */
-
-/*
- * SRIO_PCIE_BOOT - SLAVE
- */
-#ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
-#define CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR 0xFFE00000
-#define CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS \
-               (0x300000000ull | CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR)
-#endif
-/*
- * eSPI - Enhanced SPI
- */
-#define CONFIG_FSL_ESPI
-#define CONFIG_SPI_FLASH
-#define CONFIG_SPI_FLASH_SST
-#define CONFIG_CMD_SF
-#define CONFIG_SF_DEFAULT_SPEED         10000000
-#define CONFIG_SF_DEFAULT_MODE          0
-
 /*
  * General PCI
  * Memory space is mapped 1-1, but I/O space must start from 0.
@@ -521,59 +180,32 @@ unsigned long get_board_ddr_clk(void);
 
 /* controller 1, direct to uli, tgtid 3, Base address 20000 */
 #define CONFIG_SYS_PCIE1_MEM_VIRT      0x80000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_PCIE1_MEM_BUS       0xe0000000
 #define CONFIG_SYS_PCIE1_MEM_PHYS      0xc00000000ull
-#else
-#define CONFIG_SYS_PCIE1_MEM_BUS       0x80000000
-#define CONFIG_SYS_PCIE1_MEM_PHYS      0x80000000
-#endif
 #define CONFIG_SYS_PCIE1_MEM_SIZE      0x20000000      /* 512M */
 #define CONFIG_SYS_PCIE1_IO_VIRT       0xf8000000
 #define CONFIG_SYS_PCIE1_IO_BUS                0x00000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_PCIE1_IO_PHYS       0xff8000000ull
-#else
-#define CONFIG_SYS_PCIE1_IO_PHYS       0xf8000000
-#endif
 #define CONFIG_SYS_PCIE1_IO_SIZE       0x00010000      /* 64k */
 
 /* controller 2, Slot 2, tgtid 2, Base address 201000 */
 #define CONFIG_SYS_PCIE2_MEM_VIRT      0xa0000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_PCIE2_MEM_BUS       0xe0000000
 #define CONFIG_SYS_PCIE2_MEM_PHYS      0xc20000000ull
-#else
-#define CONFIG_SYS_PCIE2_MEM_BUS       0xa0000000
-#define CONFIG_SYS_PCIE2_MEM_PHYS      0xa0000000
-#endif
 #define CONFIG_SYS_PCIE2_MEM_SIZE      0x20000000      /* 512M */
 #define CONFIG_SYS_PCIE2_IO_VIRT       0xf8010000
 #define CONFIG_SYS_PCIE2_IO_BUS                0x00000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_PCIE2_IO_PHYS       0xff8010000ull
-#else
-#define CONFIG_SYS_PCIE2_IO_PHYS       0xf8010000
-#endif
 #define CONFIG_SYS_PCIE2_IO_SIZE       0x00010000      /* 64k */
 
 /* controller 3, Slot 1, tgtid 1, Base address 202000 */
 #define CONFIG_SYS_PCIE3_MEM_VIRT      0xc0000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_PCIE3_MEM_BUS       0xe0000000
 #define CONFIG_SYS_PCIE3_MEM_PHYS      0xc40000000ull
-#else
-#define CONFIG_SYS_PCIE3_MEM_BUS       0xc0000000
-#define CONFIG_SYS_PCIE3_MEM_PHYS      0xc0000000
-#endif
 #define CONFIG_SYS_PCIE3_MEM_SIZE      0x20000000      /* 512M */
 #define CONFIG_SYS_PCIE3_IO_VIRT       0xf8020000
 #define CONFIG_SYS_PCIE3_IO_BUS                0x00000000
-#ifdef CONFIG_PHYS_64BIT
 #define CONFIG_SYS_PCIE3_IO_PHYS       0xff8020000ull
-#else
-#define CONFIG_SYS_PCIE3_IO_PHYS       0xf8020000
-#endif
 #define CONFIG_SYS_PCIE3_IO_SIZE       0x00010000      /* 64k */
 
 /* controller 4, Base address 203000 */
@@ -584,84 +216,6 @@ unsigned long get_board_ddr_clk(void);
 #define CONFIG_SYS_PCIE4_IO_PHYS       0xff8030000ull
 #define CONFIG_SYS_PCIE4_IO_SIZE       0x00010000      /* 64k */
 
-/* Qman/Bman */
-#ifndef CONFIG_NOBQFMAN
-#define CONFIG_SYS_DPAA_QBMAN          /* Support Q/Bman */
-#define CONFIG_SYS_BMAN_NUM_PORTALS    50
-#define CONFIG_SYS_BMAN_MEM_BASE       0xf4000000
-#ifdef CONFIG_PHYS_64BIT
-#define CONFIG_SYS_BMAN_MEM_PHYS       0xff4000000ull
-#else
-#define CONFIG_SYS_BMAN_MEM_PHYS       CONFIG_SYS_BMAN_MEM_BASE
-#endif
-#define CONFIG_SYS_BMAN_MEM_SIZE       0x02000000
-#define CONFIG_SYS_QMAN_NUM_PORTALS    50
-#define CONFIG_SYS_QMAN_MEM_BASE       0xf6000000
-#ifdef CONFIG_PHYS_64BIT
-#define CONFIG_SYS_QMAN_MEM_PHYS       0xff6000000ull
-#else
-#define CONFIG_SYS_QMAN_MEM_PHYS       CONFIG_SYS_QMAN_MEM_BASE
-#endif
-#define CONFIG_SYS_QMAN_MEM_SIZE       0x02000000
-
-#define CONFIG_SYS_DPAA_FMAN
-#define CONFIG_SYS_DPAA_PME
-#define CONFIG_SYS_PMAN
-#define CONFIG_SYS_DPAA_DCE
-#define CONFIG_SYS_INTERLAKEN
-
-/* Default address of microcode for the Linux Fman driver */
-#if defined(CONFIG_SPIFLASH)
-/*
- * 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
-#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_FMAN_FW_IN_MMC
-#define CONFIG_SYS_QE_FMAN_FW_ADDR     (512 * 1130)
-#elif defined(CONFIG_NAND)
-#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
-#define CONFIG_SYS_QE_FMAN_FW_ADDR     (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
-#elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
-/*
- * Slave has no ucode locally, it can fetch this from remote. When implementing
- * in two corenet boards, slave's ucode could be stored in master's memory
- * space, the address can be mapped from slave TLB->slave LAW->
- * slave SRIO or PCIE outbound window->master inbound window->
- * master LAW->the ucode address in master's memory space.
- */
-#define CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
-#define CONFIG_SYS_QE_FMAN_FW_ADDR     0xFFE00000
-#else
-#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
-#define CONFIG_SYS_QE_FMAN_FW_ADDR             0xEFF40000
-#endif
-#define CONFIG_SYS_QE_FMAN_FW_LENGTH   0x10000
-#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH)
-#endif /* CONFIG_NOBQFMAN */
-
-#ifdef CONFIG_SYS_DPAA_FMAN
-#define CONFIG_FMAN_ENET
-#define CONFIG_PHYLIB_10G
-#define CONFIG_PHY_VITESSE
-#define CONFIG_PHY_TERANETICS
-#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
-#define FM1_10GEC1_PHY_ADDR    0x0
-#define FM1_10GEC2_PHY_ADDR    0x1
-#define FM2_10GEC1_PHY_ADDR    0x2
-#define FM2_10GEC2_PHY_ADDR    0x3
-#endif
-
 #ifdef CONFIG_PCI
 #define CONFIG_PCI_INDIRECT_BRIDGE
 #define CONFIG_NET_MULTI
@@ -723,30 +277,6 @@ unsigned long get_board_ddr_clk(void);
 #define CONFIG_CMD_NET
 #endif
 
-/*
-* USB
-*/
-#define CONFIG_CMD_USB
-#define CONFIG_USB_STORAGE
-#define CONFIG_USB_EHCI
-#define CONFIG_USB_EHCI_FSL
-#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
-#define CONFIG_CMD_EXT2
-#define CONFIG_HAS_FSL_DR_USB
-
-#define CONFIG_MMC
-
-#ifdef CONFIG_MMC
-#define CONFIG_FSL_ESDHC
-#define CONFIG_SYS_FSL_ESDHC_ADDR       CONFIG_SYS_MPC85xx_ESDHC_ADDR
-#define CONFIG_SYS_FSL_ESDHC_BROKEN_TIMEOUT
-#define CONFIG_CMD_MMC
-#define CONFIG_GENERIC_MMC
-#define CONFIG_CMD_EXT2
-#define CONFIG_CMD_FAT
-#define CONFIG_DOS_PARTITION
-#endif
-
 /*
  * Miscellaneous configurable options
  */
@@ -788,112 +318,11 @@ unsigned long get_board_ddr_clk(void);
 /* default location for tftp and bootm */
 #define CONFIG_LOADADDR                1000000
 
-#define CONFIG_BOOTDELAY       10      /* -1 disables auto-boot */
 
 #define CONFIG_BAUDRATE        115200
 
-#define __USB_PHY_TYPE utmi
-
-/*
- * T4240 has 3 DDR controllers. Default to 3way_4KB interleaving. It can be
- * 3way_1KB, 3way_4KB, 3way_8KB. T4160 has 2 DDR controllers. Default to
- * cacheline interleaving. It can be cacheline, page, bank, superbank.
- * See doc/README.fsl-ddr for details.
- */
-#ifdef CONFIG_PPC_T4240
-#define CTRL_INTLV_PREFERED 3way_4KB
-#else
-#define CTRL_INTLV_PREFERED cacheline
-#endif
-
-#define        CONFIG_EXTRA_ENV_SETTINGS                               \
-       "hwconfig=fsl_ddr:"                                     \
-       "ctlr_intlv=" __stringify(CTRL_INTLV_PREFERED) ","      \
-       "bank_intlv=auto;"                                      \
-       "usb1:dr_mode=host,phy_type=" __stringify(__USB_PHY_TYPE) "\0"\
-       "netdev=eth0\0"                                         \
-       "uboot=" __stringify(CONFIG_UBOOTPATH) "\0"                     \
-       "ubootaddr=" __stringify(CONFIG_SYS_TEXT_BASE) "\0"             \
-       "tftpflash=tftpboot $loadaddr $uboot && "               \
-       "protect off $ubootaddr +$filesize && "                 \
-       "erase $ubootaddr +$filesize && "                       \
-       "cp.b $loadaddr $ubootaddr $filesize && "               \
-       "protect on $ubootaddr +$filesize && "                  \
-       "cmp.b $loadaddr $ubootaddr $filesize\0"                \
-       "consoledev=ttyS0\0"                                    \
-       "ramdiskaddr=2000000\0"                                 \
-       "ramdiskfile=t4240qds/ramdisk.uboot\0"                  \
-       "fdtaddr=c00000\0"                                      \
-       "fdtfile=t4240qds/t4240qds.dtb\0"                               \
-       "bdev=sda3\0"                                           \
-       "c=ffe\0"
-
-/* For emulation this causes u-boot to jump to the start of the proof point
-   app code automatically */
-#define CONFIG_PROOF_POINTS                    \
- "setenv bootargs root=/dev/$bdev rw "         \
- "console=$consoledev,$baudrate $othbootargs;" \
- "cpu 1 release 0x29000000 - - -;"             \
- "cpu 2 release 0x29000000 - - -;"             \
- "cpu 3 release 0x29000000 - - -;"             \
- "cpu 4 release 0x29000000 - - -;"             \
- "cpu 5 release 0x29000000 - - -;"             \
- "cpu 6 release 0x29000000 - - -;"             \
- "cpu 7 release 0x29000000 - - -;"             \
- "go 0x29000000"
-
 #define CONFIG_HVBOOT                          \
  "setenv bootargs config-addr=0x60000000; "    \
  "bootm 0x01000000 - 0x00f00000"
 
-#define CONFIG_ALU                             \
- "setenv bootargs root=/dev/$bdev rw "         \
- "console=$consoledev,$baudrate $othbootargs;" \
- "cpu 1 release 0x01000000 - - -;"             \
- "cpu 2 release 0x01000000 - - -;"             \
- "cpu 3 release 0x01000000 - - -;"             \
- "cpu 4 release 0x01000000 - - -;"             \
- "cpu 5 release 0x01000000 - - -;"             \
- "cpu 6 release 0x01000000 - - -;"             \
- "cpu 7 release 0x01000000 - - -;"             \
- "go 0x01000000"
-
-#define CONFIG_LINUX                           \
- "setenv bootargs root=/dev/ram rw "           \
- "console=$consoledev,$baudrate $othbootargs;" \
- "setenv ramdiskaddr 0x02000000;"              \
- "setenv fdtaddr 0x00c00000;"                  \
- "setenv loadaddr 0x1000000;"                  \
- "bootm $loadaddr $ramdiskaddr $fdtaddr"
-
-#define CONFIG_HDBOOT                                  \
-       "setenv bootargs root=/dev/$bdev rw "           \
-       "console=$consoledev,$baudrate $othbootargs;"   \
-       "tftp $loadaddr $bootfile;"                     \
-       "tftp $fdtaddr $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 $bootfile;"             \
-       "tftp $fdtaddr $fdtfile;"               \
-       "bootm $loadaddr - $fdtaddr"
-
-#define CONFIG_RAMBOOTCOMMAND                          \
-       "setenv bootargs root=/dev/ram rw "             \
-       "console=$consoledev,$baudrate $othbootargs;"   \
-       "tftp $ramdiskaddr $ramdiskfile;"               \
-       "tftp $loadaddr $bootfile;"                     \
-       "tftp $fdtaddr $fdtfile;"                       \
-       "bootm $loadaddr $ramdiskaddr $fdtaddr"
-
-#define CONFIG_BOOTCOMMAND             CONFIG_LINUX
-
-#ifdef CONFIG_SECURE_BOOT
-#include <asm/fsl_secure_boot.h>
-#endif
-
 #endif /* __CONFIG_H */
index c215f0b92522057d28bee64a1b600d67af7d4371..60dd8ff11af272e15e7b203437b3957d97b2b074 100644 (file)
 #define CONFIG_DRIVER_TI_EMAC_USE_RMII
 #define CONFIG_MII
 #define CONFIG_EMAC_MDIO_PHY_NUM       0
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index ccd68a19fd4cf2a23f656d3df46ae34e1fdc00d0..ba6c6bb9f5f80aadd8de9c71f9b3bf66a9354749 100644 (file)
@@ -17,8 +17,6 @@
 #define CONFIG_TEGRA                   /* which is a Tegra generic machine */
 #define CONFIG_SYS_L2CACHE_OFF         /* No L2 cache */
 
-#define CONFIG_SYS_CACHELINE_SIZE      32
-
 #include <asm/arch/tegra.h>            /* get chip and board defs */
 
 /*
 #define CONFIG_CMD_GPIO
 #define CONFIG_CMD_ENTERRCM
 #define CONFIG_CMD_BOOTZ
+#define CONFIG_SUPPORT_RAW_INITRD
 
 /* Defines for SPL */
 #define CONFIG_SPL
index 44e98e501952bb26284b531323aee68c9621e9c3..c3de9a999e952e3f893a6ae9efa2538e53b79e3e 100644 (file)
@@ -18,6 +18,9 @@
 #define _TEGRA114_COMMON_H_
 #include "tegra-common.h"
 
+/* Cortex-A15 uses a cache line size of 64 bytes */
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
 /*
  * NS16550 Configuration
  */
index d5e9ee4062e4fd7b1343e761c08cdbdb47186f80..b009a316b14cd29e4389e64dfef8cbfec111bf3c 100644 (file)
@@ -9,6 +9,9 @@
 #define _TEGRA20_COMMON_H_
 #include "tegra-common.h"
 
+/* Cortex-A9 uses a cache line size of 32 bytes */
+#define CONFIG_SYS_CACHELINE_SIZE      32
+
 /*
  * Errata configuration
  */
index 5ac88165041595a9edd7d13f70e1b2fb61684c90..99acbfd28b29de65dad657cbd556cd523322e2c2 100644 (file)
@@ -9,6 +9,9 @@
 #define _TEGRA30_COMMON_H_
 #include "tegra-common.h"
 
+/* Cortex-A9 uses a cache line size of 32 bytes */
+#define CONFIG_SYS_CACHELINE_SIZE      32
+
 /*
  * Errata configuration
  */
index dfc4c756db8c9e2f1647639f49e718785bf2acf5..2fc2c10676c84b9e116fb48eabfbb0350f190f38 100644 (file)
 #define CONFIG_CMD_MII
 #define CONFIG_DRIVER_TI_CPSW
 #define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
index fd3ffab015bd26f2185590834bbac4de68eaf96b..d2e34aeed48142e0b086c834ce73ac70045afe4e 100644 (file)
 #define CONFIG_SYS_NS16550_CLK         48000000
 
 /* Network defines. */
-#define CONFIG_CMD_NET
+#define CONFIG_CMD_NET                 /* 'bootp' and 'tftp' */
 #define CONFIG_CMD_DHCP
-#define CONFIG_CMD_PING
-#define CONFIG_DRIVER_TI_CPSW
-#define CONFIG_MII
-#define CONFIG_BOOTP_DEFAULT
-#define CONFIG_BOOTP_DNS
+#define CONFIG_BOOTP_DNS               /* Configurable parts of CMD_DHCP */
 #define CONFIG_BOOTP_DNS2
 #define CONFIG_BOOTP_SEND_HOSTNAME
 #define CONFIG_BOOTP_GATEWAY
 #define CONFIG_BOOTP_SUBNETMASK
 #define CONFIG_NET_RETRY_COUNT         10
+#define CONFIG_CMD_PING
+#define CONFIG_DRIVER_TI_CPSW          /* Driver for IP block */
+#define CONFIG_MII                     /* Required in net/eth.c */
 
-/* SPL defines. */
+/*
+ * SPL related defines.  The Public RAM memory map the ROM defines the
+ * area between 0x402F0400 and 0x4030B800 as a download area and
+ * 0x4030B800 to 0x4030CE00 as a public stack area.  The ROM also
+ * supports X-MODEM loading via UART, and we leverage this and then use
+ * Y-MODEM to load u-boot.img, when booted over UART.
+ */
 #define CONFIG_SPL_TEXT_BASE           0x402F0400
-#define CONFIG_SPL_MAX_SIZE            (0x4030C000 - CONFIG_SPL_TEXT_BASE)
-#define CONFIG_SPL_YMODEM_SUPPORT
+#define CONFIG_SPL_MAX_SIZE            (0x4030B800 - CONFIG_SPL_TEXT_BASE)
 
 /*
  * Since SPL did pll and ddr initialization for us,
index e0ab6912baf29ca2c9253c4f42ecd23f93663404..e89e8744df4492a722eb142cdd22d91c14d60997 100644 (file)
 
 /* I2C IP block */
 #define CONFIG_I2C
-#define CONFIG_CMD_I2C
 #define CONFIG_HARD_I2C
 #define CONFIG_SYS_I2C_SPEED           100000
 #define CONFIG_SYS_I2C_SLAVE           1
 #define CONFIG_I2C_MULTI_BUS
 #define CONFIG_DRIVER_OMAP24XX_I2C
+#define CONFIG_CMD_I2C
 
 /* MMC/SD IP block */
 #define CONFIG_MMC
  * access CS0 at is 0x8000000.
  */
 #ifdef CONFIG_NAND
-#define CONFIG_CMD_NAND
 #define CONFIG_NAND_OMAP_GPMC
 #define CONFIG_SYS_NAND_BASE           0x8000000
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_CMD_NAND
 #endif
 
 /*
  * console baudrate of 115200 and use the default baud rate table.
  */
 #define CONFIG_SYS_MALLOC_LEN          (1024 << 10)
-#define CONFIG_SYS_LONGHELP
 #define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT              "U-Boot# "
+#define CONFIG_SYS_CONSOLE_INFO_QUIET
+#define CONFIG_BAUDRATE                        115200
+#define CONFIG_ENV_VARS_UBOOT_CONFIG   /* Strongly encouraged */
+#define CONFIG_ENV_OVERWRITE           /* Overwrite ethaddr / serial# */
+
+/* As stated above, the following choices are optional. */
+#define CONFIG_SYS_LONGHELP
 #define CONFIG_AUTO_COMPLETE
 #define CONFIG_CMDLINE_EDITING
-#define CONFIG_SYS_PROMPT              "U-Boot# "
 #define CONFIG_VERSION_VARIABLE
-#define CONFIG_ENV_VARS_UBOOT_CONFIG
-#define CONFIG_BAUDRATE                        115200
 
 /* We set the max number of command args high to avoid HUSH bugs. */
 #define CONFIG_SYS_MAXARGS             64
 /* Boot Argument Buffer Size */
 #define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE
 
-#define CONFIG_ENV_OVERWRITE
-#define CONFIG_SYS_CONSOLE_INFO_QUIET
-
 /*
  * When we have SPI, NOR or NAND flash we expect to be making use of
  * mtdparts, both for ease of use in U-Boot and for passing information
  * useful commands.  Note that we must have set CONFIG_SYS_NO_FLASH
  * prior to this include, in order to skip a few commands.  When we do
  * have flash, if we expect these commands they must be enabled in that
- * config.
+ * config.  If desired, a specific list of desired commands can be used
+ * instead.
  */
 #include <config_cmd_default.h>
 #define CONFIG_CMD_ASKENV
 #endif
 
 #ifdef CONFIG_MMC
+#define CONFIG_SPL_LIBDISK_SUPPORT
 #define CONFIG_SPL_MMC_SUPPORT
 #define CONFIG_SPL_FAT_SUPPORT
 #endif
 
-/* General parts of the framework. */
+/* General parts of the framework, required. */
 #define CONFIG_SPL_I2C_SUPPORT
 #define CONFIG_SPL_LIBCOMMON_SUPPORT
-#define CONFIG_SPL_LIBDISK_SUPPORT
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
 #define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_GPIO_SUPPORT
index 9b6aac96e675f7c6a0c3f8939d3a4c4abe857f6d..24ea06b92734718ab831bfcba6fab99273e049d1 100644 (file)
 #define CONFIG_SYS_I2C_SOFT            /* I2C bit-banged */
 #define CONFIG_SYS_I2C_SOFT_SPEED      50000
 #define CONFIG_SYS_I2C_SOFT_SLAVE      0xFE
+#define I2C_SOFT_DECLARATIONS2
+#define CONFIG_SYS_I2C_SOFT_SPEED_2     50000
+#define CONFIG_SYS_I2C_SOFT_SLAVE_2     0x7F
 #define CONFIG_SOFT_I2C_READ_REPEATED_START
 #define CONFIG_SYS_I2C_INIT_BOARD
 #define CONFIG_I2C_MULTI_BUS
index 79fa5bb53faec013a5146271c22c87c3d8adbf0a..b9f381f645ee9a1749ee9d983c1827cbf1b98053 100644 (file)
 # define CONFIG_CPU_V6 /* Required by CONFIG_ARM_DCC */
 #endif
 
+#define CONFIG_ZYNQ_SPI
+
+/* SPI */
+#ifdef CONFIG_ZYNQ_SPI
+# define CONFIG_SPI_FLASH
+# define CONFIG_SPI_FLASH_SST
+# define CONFIG_CMD_SF
+#endif
+
 /* Enable the PL to be downloaded */
 #define CONFIG_FPGA
 #define CONFIG_FPGA_XILINX
index 6c7d2271371ebfb4f8c2dd52dab8f904e769d920..47b90559d5bbe705fdba2fcc050d29d1481b6e49 100644 (file)
@@ -47,6 +47,8 @@ struct nand_internal_data {
 
        unsigned int dev;
        unsigned int part;
+       /* for nand/ubi use */
+       unsigned int ubi;
 };
 
 static inline unsigned int get_mmc_blk_size(int dev)
@@ -109,6 +111,8 @@ const char *dfu_get_dev_type(enum dfu_device_type t);
 const char *dfu_get_layout(enum dfu_layout l);
 struct dfu_entity *dfu_get_entity(int alt);
 char *dfu_extract_token(char** e, int *n);
+void dfu_trigger_reset(void);
+bool dfu_reset(void);
 
 int dfu_read(struct dfu_entity *de, void *buf, int size, int blk_seq_num);
 int dfu_write(struct dfu_entity *de, void *buf, int size, int blk_seq_num);
index 0ff8e89a1e345f8274f3c83da715f301ca1ce0a8..0c2432657be189546c20032204af0dd1ab0b83db 100644 (file)
 
 typedef struct
 {
-  unsigned long freqProcessor[CONFIG_MAX_CPUS];
-  unsigned long freqSystemBus;
-  unsigned long freqDDRBus;
-  unsigned long freqLocalBus;
-  unsigned long freqQE;
+       unsigned long freq_processor[CONFIG_MAX_CPUS];
+       unsigned long freq_systembus;
+       unsigned long freq_ddrbus;
+       unsigned long freq_localbus;
+       unsigned long freq_qe;
 #ifdef CONFIG_SYS_DPAA_FMAN
-  unsigned long freqFMan[CONFIG_SYS_NUM_FMAN];
+       unsigned long freq_fman[CONFIG_SYS_NUM_FMAN];
 #endif
 #ifdef CONFIG_SYS_DPAA_QBMAN
-  unsigned long freqQMAN;
+       unsigned long freq_qman;
 #endif
 #ifdef CONFIG_SYS_DPAA_PME
-  unsigned long freqPME;
+       unsigned long freq_pme;
 #endif
 } MPC85xx_SYS_INFO;
 
index f153091f64976525fbfbdb8ef9012490e37f1dae..480a773d0f64f49c9d7148f714fbcfc7b4bb7728 100644 (file)
@@ -54,7 +54,7 @@ struct edid_detailed_timing {
         (_x).vertical_blanking)
        unsigned char hsync_offset;
        unsigned char hsync_pulse_width;
-       unsigned char sync_offset_pulse_width;
+       unsigned char vsync_offset_pulse_width;
        unsigned char hsync_vsync_offset_pulse_width_hi;
 #define EDID_DETAILED_TIMING_HSYNC_OFFSET(_x) \
        ((GET_BITS((_x).hsync_vsync_offset_pulse_width_hi, 7, 6) << 8) + \
index 29f276d3f029320bbab74d64a08432b185ef5588..b8ecc41063b3e5b366f1688d60a32dd4f8e914fa 100644 (file)
@@ -2,27 +2,7 @@
  * Copyright (c) 1995, 1996, 2001, 2002
  * Erik Theisen.  All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    BSD-3-Clause
  */
 
 /*
index 2c97398f4eafe84325be0727469266d70be52ecb..89bcbd1700ac7b62d4fcc06304177a176180aef3 100644 (file)
@@ -182,5 +182,6 @@ void fdt_fixup_esdhc(void *blob, bd_t *bd);
 static inline int fsl_esdhc_mmc_init(bd_t *bis) { return -ENOSYS; }
 static inline void fdt_fixup_esdhc(void *blob, bd_t *bd) {}
 #endif /* CONFIG_FSL_ESDHC */
+void __noreturn mmc_boot(void);
 
 #endif  /* __FSL_ESDHC_H__ */
diff --git a/include/fsl_usb.h b/include/fsl_usb.h
new file mode 100644 (file)
index 0000000..915774c
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Freescale USB Controller
+ *
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef _ASM_FSL_USB_H_
+#define _ASM_FSL_USB_H_
+
+#ifdef CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE
+struct ccsr_usb_port_ctrl {
+       u32     ctrl;
+       u32     drvvbuscfg;
+       u32     pwrfltcfg;
+       u32     sts;
+       u8      res_14[0xc];
+       u32     bistcfg;
+       u32     biststs;
+       u32     abistcfg;
+       u32     abiststs;
+       u8      res_30[0x10];
+       u32     xcvrprg;
+       u32     anaprg;
+       u32     anadrv;
+       u32     anasts;
+};
+
+struct ccsr_usb_phy {
+       u32     id;
+       struct ccsr_usb_port_ctrl port1;
+       u8      res_50[0xc];
+       u32     tvr;
+       u32     pllprg[4];
+       u8      res_70[0x4];
+       u32     anaccfg;
+       u32     dbg;
+       u8      res_7c[0x4];
+       struct ccsr_usb_port_ctrl port2;
+       u8      res_dc[0x334];
+};
+
+#define CONFIG_SYS_FSL_USB_CTRL_PHY_EN (1 << 0)
+#define CONFIG_SYS_FSL_USB_DRVVBUS_CR_EN (1 << 1)
+#define CONFIG_SYS_FSL_USB_PWRFLT_CR_EN (1 << 1)
+#define CONFIG_SYS_FSL_USB_PLLPRG1_PHY_DIV (1 << 0)
+#define CONFIG_SYS_FSL_USB_PLLPRG2_PHY2_CLK_EN (1 << 0)
+#define CONFIG_SYS_FSL_USB_PLLPRG2_PHY1_CLK_EN (1 << 1)
+#define CONFIG_SYS_FSL_USB_PLLPRG2_FRAC_LPF_EN (1 << 13)
+#define CONFIG_SYS_FSL_USB_PLLPRG2_REF_DIV (1 << 4)
+#define CONFIG_SYS_FSL_USB_PLLPRG2_MFI (5 << 16)
+#define CONFIG_SYS_FSL_USB_PLLPRG2_PLL_EN (1 << 21)
+#define CONFIG_SYS_FSL_USB_SYS_CLK_VALID (1 << 0)
+#else
+struct ccsr_usb_phy {
+       u8      res0[0x18];
+       u32     usb_enable_override;
+       u8      res[0xe4];
+};
+#define        CONFIG_SYS_FSL_USB_ENABLE_OVERRIDE      1
+#endif
+
+#endif /*_ASM_FSL_USB_H_ */
index 0a8268cbb581ec060a6ab7f5af578488d4129429..f50e0e2733764bb3fcd8dfb27031c28771c37a80 100644 (file)
@@ -19,6 +19,23 @@ enum {
 int get_fpga_state(unsigned dev);
 void print_fpga_state(unsigned dev);
 
+int fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data);
+int fpga_get_reg(u32 fpga, u16 *reg, off_t regoff, u16 *data);
+
+extern struct ihs_fpga *fpga_ptr[];
+
+#define FPGA_SET_REG(ix, fld, val) \
+       fpga_set_reg((ix), \
+                    &fpga_ptr[ix]->fld, \
+                    offsetof(struct ihs_fpga, fld), \
+                    val)
+
+#define FPGA_GET_REG(ix, fld, val) \
+       fpga_get_reg((ix), \
+                    &fpga_ptr[ix]->fld, \
+                    offsetof(struct ihs_fpga, fld), \
+                    val)
+
 struct ihs_gpio {
        u16 read;
        u16 clear;
@@ -67,6 +84,19 @@ struct ihs_fpga {
 #endif
 
 #ifdef CONFIG_IO64
+
+struct ihs_fpga_channel {
+       u16 status_int;
+       u16 config_int;
+       u16 switch_connect_config;
+       u16 tx_destination;
+};
+
+struct ihs_fpga_hicb {
+       u16 status_int;
+       u16 config_int;
+};
+
 struct ihs_fpga {
        u16 reflection_low;     /* 0x0000 */
        u16 versions;           /* 0x0002 */
@@ -75,12 +105,9 @@ struct ihs_fpga {
        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[126];    /* 0x0404 */
-       u16 ch0_hicb_status_int;/* 0x0500 */
-       u16 ch0_hicb_config_int;/* 0x0502 */
-       u16 reserved_3[7549];   /* 0x0504 */
+       struct ihs_fpga_channel ch[32];         /* 0x0400 */
+       struct ihs_fpga_channel hicb_ch[32];    /* 0x0500 */
+       u16 reserved_2[7487];   /* 0x0580 */
        u16 reflection_high;    /* 0x3ffe */
 };
 #endif
@@ -96,11 +123,22 @@ struct ihs_fpga {
        u16 mpc3w_control;      /* 0x001a */
        u16 reserved_1[19];     /* 0x001c */
        u16 videocontrol;       /* 0x0042 */
-       u16 reserved_2[93];     /* 0x0044 */
+       u16 reserved_2[14];     /* 0x0044 */
+       u16 mc_int;             /* 0x0060 */
+       u16 mc_int_en;          /* 0x0062 */
+       u16 mc_status;          /* 0x0064 */
+       u16 mc_control;         /* 0x0066 */
+       u16 mc_tx_data;         /* 0x0068 */
+       u16 mc_tx_address;      /* 0x006a */
+       u16 mc_tx_cmd;          /* 0x006c */
+       u16 mc_res;             /* 0x006e */
+       u16 mc_rx_cmd_status;   /* 0x0070 */
+       u16 mc_rx_data;         /* 0x0072 */
+       u16 reserved_3[69];     /* 0x0074 */
        u16 reflection_high;    /* 0x00fe */
        struct ihs_osd osd;     /* 0x0100 */
-       u16 reserved_3[889];    /* 0x010e */
-       u16 videomem;           /* 0x0800 */
+       u16 reserved_4[889];    /* 0x010e */
+       u16 videomem[31736];    /* 0x0800 */
 };
 #endif
 
@@ -121,7 +159,7 @@ struct ihs_fpga {
        u16 reserved_4[176];    /* 0x00a0 */
        struct ihs_osd osd;     /* 0x0200 */
        u16 reserved_5[761];    /* 0x020e */
-       u16 videomem;           /* 0x0800 */
+       u16 videomem[31736];    /* 0x0800 */
 };
 #endif
 
index d8674efe58b64a42daa31e00a7639982521c2890..8fd17d190af7cd532a445b77aaadceee00967bdd 100644 (file)
@@ -390,7 +390,7 @@ unsigned int i2c_get_bus_speed(void);
 # if !defined(CONFIG_SYS_MAX_I2C_BUS)
 #  define CONFIG_SYS_MAX_I2C_BUS               2
 # endif
-# define I2C_MULTI_BUS                         0
+# define I2C_MULTI_BUS                         1
 #else
 # define CONFIG_SYS_MAX_I2C_BUS                1
 # define I2C_MULTI_BUS                         0
index f93a39389a4d00b575cfdbfb9e528413ef0b99ce..ee6eb8d24645a7ba8112a7ba15303b10b823a51f 100644 (file)
@@ -212,6 +212,7 @@ struct lmb;
 #define IH_TYPE_AISIMAGE       13      /* TI Davinci AIS Image         */
 #define IH_TYPE_KERNEL_NOLOAD  14      /* OS Kernel Image, can run from any load address */
 #define IH_TYPE_PBLIMAGE       15      /* Freescale PBL Boot Image     */
+#define IH_TYPE_MXSIMAGE       16      /* Freescale MXSBoot Image      */
 
 /*
  * Compression Types
index e1338bf489f8a1934c1c1e669d3db5db48d712be..3fdfb399b50fde478c2bfd81483576697b468671 100644 (file)
@@ -3,6 +3,14 @@
 
 #define ndelay(x)      udelay(1)
 
+#define dev_dbg(dev, fmt, args...)             \
+       debug(fmt, ##args)
+#define dev_vdbg(dev, fmt, args...)            \
+       debug(fmt, ##args)
+#define dev_info(dev, fmt, args...)            \
+       printf(fmt, ##args)
+#define dev_err(dev, fmt, args...)             \
+       printf(fmt, ##args)
 #define printk printf
 
 #define KERN_EMERG
index ca5040ed8d409f695154c4fb42ba8f75e230c8b5..657b49624a90a44057aaf7f446e23a501de59e23 100644 (file)
@@ -1,27 +1,8 @@
-/*----------------------------------------------------------------------------+
-|   This source code is dual-licensed.  You may use it under the terms of the
-|   GNU General Public License version 2, or under the license below.
-|
-|      This source code has been made available to you by IBM on an AS-IS
-|      basis.  Anyone receiving this source is licensed under IBM
-|      copyrights to use it in any way he or she deems fit, including
-|      copying it, modifying it, compiling it, and redistributing it either
-|      with or without modifications.  No license under IBM patents or
-|      patent applications is to be implied by the copyright license.
-|
-|      Any user of this software should understand that IBM cannot provide
-|      technical support for this software and will not be responsible for
-|      any consequences resulting from the use of this software.
-|
-|      Any person who transfers this source code or any derivative work
-|      must include the IBM copyright notice, this paragraph, and the
-|      preceding two paragraphs in the transferred software.
-|
-|      COPYRIGHT   I B M   CORPORATION 1999
-|      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-|
-|   Additions (C) Copyright 2009 Industrie Dial Face S.p.A.
-+----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 ibm-pibs
+ *
+ * Additions (C) Copyright 2009 Industrie Dial Face S.p.A.
+ */
 /*----------------------------------------------------------------------------+
 |
 |  File Name:  miiphy.h
index 31e83f2cc9213377fc55ae8473c96e9e0c40fd47..9fe47480325354270ec9b5cee7194b7d1025464d 100644 (file)
@@ -41,9 +41,9 @@
 #ifndef __ASSEMBLY__
 
 typedef struct {
-       unsigned long freqProcessor;
-       unsigned long freqSystemBus;
-       unsigned long freqLocalBus;
+       unsigned long freq_processor;
+       unsigned long freq_systembus;
+       unsigned long freq_localbus;
 } MPC86xx_SYS_INFO;
 
 #define l1icache_enable        icache_enable
index 5198ecd404abb517cb13a03d2e8b017b6ab9764e..048b4773fcad230d41ef8353d7f660bff6d9be38 100644 (file)
@@ -167,5 +167,19 @@ extern int cfi_flash_num_flash_banks;
 
 void flash_write_cmd(flash_info_t * info, flash_sect_t sect,
                     uint offset, u32 cmd);
+phys_addr_t cfi_flash_bank_addr(int i);
+unsigned long cfi_flash_bank_size(int i);
+void flash_cmd_reset(flash_info_t *info);
+
+#ifdef CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS
+void flash_write8(u8 value, void *addr);
+void flash_write16(u16 value, void *addr);
+void flash_write32(u32 value, void *addr);
+void flash_write64(u64 value, void *addr);
+u8 flash_read8(void *addr);
+u16 flash_read16(void *addr);
+u32 flash_read32(void *addr);
+u64 flash_read64(void *addr);
+#endif
 
 #endif /* __CFI_FLASH_H__ */
index 7673470046f596263e170d0facbdffba74540299..5aedc17aa6dc36ea6600d2c24e3d011c9c140226 100644 (file)
@@ -357,7 +357,7 @@ struct icmp_hdr {
                } echo;
                ulong   gateway;
                struct {
-                       ushort  __unused;
+                       ushort  unused;
                        ushort  mtu;
                } frag;
                uchar data[0];
index 01002a430cdedda0858d6477f65f2ec28aa8b34f..911ba89ac36bfc690676af55475764c24c419e27 100644 (file)
 #define PCI_MAX_PCI_DEVICES    32
 #define PCI_MAX_PCI_FUNCTIONS  8
 
-#define PCI_DCR                0x54    /* PCIe Device Control Register */
-#define PCI_DSR                0x56    /* PCIe Device Status Register */
-#define PCI_LSR                0x5e    /* PCIe Link Status Register */
-#define PCI_LCR                0x5c    /* PCIe Link Control Register */
-#define PCI_LTSSM      0x404   /* PCIe Link Training, Status State Machine */
-#define  PCI_LTSSM_L0  0x16    /* L0 state */
-
 /* Include the ID list */
 
 #include <pci_ids.h>
index f6bb2b90a1ee196c4a353ab0708e1146c2c139a0..d232d470a337e842ed9f88173b9a810f3fc818ba 100644 (file)
@@ -26,7 +26,7 @@ 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) || \
+#if    defined(CONFIG_405GP) || \
        defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
        defined(CONFIG_405EX) || defined(CONFIG_440) || \
        defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
index d0b5593e5bd6e625172323d40729d01a93db6376..e6dc12ac3984b578be2601a09efd6c1bce5febe3 100644 (file)
@@ -83,9 +83,6 @@ struct list_head* stdio_get_list(void);
 struct stdio_dev* stdio_get_by_name(const char* name);
 struct stdio_dev* stdio_clone(struct stdio_dev *dev);
 
-#ifdef CONFIG_ARM_DCC
-int drv_arm_dcc_init(void);
-#endif
 #ifdef CONFIG_LCD
 int    drv_lcd_init (void);
 #endif
index c7696e6a3ef724c5782612575590c4f7af74dee4..c71516cf6daa01f56c6bbea77e7bbf221fd603a6 100644 (file)
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 
-/* Endpoint 0 states */
-#define EP0_IDLE               0
-#define EP0_IN_DATA            1
-#define EP0_OUT_DATA           2
-#define EP0_XFER_COMPLETE      3
+#include "../../drivers/usb/host/ehci.h"
 
+#define NUM_ENDPOINTS          6
 
 /* Endpoint parameters */
 #define MAX_ENDPOINTS          4
-#define EP_MAX_PACKET_SIZE     0x200
 
+#define EP_MAX_PACKET_SIZE     0x200
 #define EP0_MAX_PACKET_SIZE    64
-#define UDC_OUT_ENDPOINT        0x02
-#define UDC_OUT_PACKET_SIZE    EP_MAX_PACKET_SIZE
-#define UDC_IN_ENDPOINT         0x01
-#define UDC_IN_PACKET_SIZE      EP_MAX_PACKET_SIZE
-#define UDC_INT_ENDPOINT        0x05
-#define UDC_INT_PACKET_SIZE     EP_MAX_PACKET_SIZE
-#define UDC_BULK_PACKET_SIZE    EP_MAX_PACKET_SIZE
-
-#define        NUM_ENDPOINTS   6
-#define                REQ_COUNT       12
-struct mv_ep {
-       struct usb_ep ep;
-       struct usb_request req;
-       struct list_head queue;
-       const struct usb_endpoint_descriptor *desc;
-};
 
 struct mv_udc {
-       u32 pad0[80];
 #define MICRO_8FRAME   0x8
-#define USBCMD_ITC(x)  (((x > 0xff) ? 0xff : x) << 16)
+#define USBCMD_ITC(x)  ((((x) > 0xff) ? 0xff : x) << 16)
 #define USBCMD_FS2     (1 << 15)
 #define USBCMD_RST     (1 << 1)
 #define USBCMD_RUN     (1)
@@ -62,37 +42,52 @@ struct mv_udc {
        u32 epinitaddr;         /* 0x158 */
        u32 pad2[10];
 #define PTS_ENABLE     2
-#define PTS(x)         ((x & 0x3) << 30)
+#define PTS(x)         (((x) & 0x3) << 30)
 #define PFSC           (1 << 24)
        u32 portsc;             /* 0x184 */
        u32 pad3[8];
 #define USBMODE_DEVICE 2
        u32 usbmode;            /* 0x1a8 */
        u32 epstat;             /* 0x1ac */
-#define EPT_TX(x)      (1 << ((x & 0xffff) + 16))
-#define EPT_RX(x)      (1 << (x & 0xffff))
+#define EPT_TX(x)      (1 << (((x) & 0xffff) + 16))
+#define EPT_RX(x)      (1 << ((x) & 0xffff))
        u32 epprime;            /* 0x1b0 */
        u32 epflush;            /* 0x1b4 */
        u32 pad4;
        u32 epcomp;             /* 0x1bc */
-#define CTRL_TXE              (1 << 23)
-#define CTRL_TXR              (1 << 22)
-#define CTRL_RXE              (1 << 7)
-#define CTRL_RXR              (1 << 6)
-#define CTRL_TXT_BULK         (2 << 18)
-#define CTRL_RXT_BULK         (2 << 2)
+#define CTRL_TXE       (1 << 23)
+#define CTRL_TXR       (1 << 22)
+#define CTRL_RXE       (1 << 7)
+#define CTRL_RXR       (1 << 6)
+#define CTRL_TXT_BULK  (2 << 18)
+#define CTRL_RXT_BULK  (2 << 2)
        u32 epctrl[16];         /* 0x1c0 */
 };
 
+struct mv_ep {
+       struct usb_ep ep;
+       struct list_head queue;
+       const struct usb_endpoint_descriptor *desc;
+
+       struct usb_request req;
+       uint8_t *b_buf;
+       uint32_t b_len;
+       uint8_t b_fast[64] __aligned(ARCH_DMA_MINALIGN);
+};
+
 struct mv_drv {
        struct usb_gadget               gadget;
-       struct usb_gadget_driver                *driver;
-       struct mv_udc                   *udc;
+       struct usb_gadget_driver        *driver;
+       struct ehci_ctrl                *ctrl;
+       struct ept_queue_head           *epts;
+       struct ept_queue_item           *items[2 * NUM_ENDPOINTS];
+       uint8_t                         *items_mem;
+       struct mv_ep                    ep[NUM_ENDPOINTS];
 };
 
 struct ept_queue_head {
        unsigned config;
-       unsigned current; /* read-only */
+       unsigned current;       /* read-only */
 
        unsigned next;
        unsigned info;
@@ -111,9 +106,9 @@ struct ept_queue_head {
        unsigned reserved_4;
 };
 
-#define CONFIG_MAX_PKT(n)     ((n) << 16)
-#define CONFIG_ZLT            (1 << 29)    /* stop on zero-len xfer */
-#define CONFIG_IOS            (1 << 15)    /* IRQ on setup */
+#define CONFIG_MAX_PKT(n)      ((n) << 16)
+#define CONFIG_ZLT             (1 << 29)       /* stop on zero-len xfer */
+#define CONFIG_IOS             (1 << 15)       /* IRQ on setup */
 
 struct ept_queue_item {
        unsigned next;
@@ -127,12 +122,11 @@ struct ept_queue_item {
 };
 
 #define TERMINATE 1
-#define INFO_BYTES(n)         ((n) << 16)
-#define INFO_IOC              (1 << 15)
-#define INFO_ACTIVE           (1 << 7)
-#define INFO_HALTED           (1 << 6)
-#define INFO_BUFFER_ERROR     (1 << 5)
-#define INFO_TX_ERROR         (1 << 3)
-
-extern int usb_lowlevel_init(int index, void **controller);
+#define INFO_BYTES(n)          ((n) << 16)
+#define INFO_IOC               (1 << 15)
+#define INFO_ACTIVE            (1 << 7)
+#define INFO_HALTED            (1 << 6)
+#define INFO_BUFFER_ERROR      (1 << 5)
+#define INFO_TX_ERROR          (1 << 3)
+
 #endif /* __MV_UDC_H__ */
index f7e27f8477b0e5d3c4acae8175b080db88a78eca..0ff857bc9f5722bce1062e6744f16bbfdbbbe9b0 100644 (file)
@@ -63,4 +63,8 @@ void video_position_cursor(unsigned col, unsigned row);
 /* Clear the display */
 void video_clear(void);
 
+#if defined(CONFIG_FORMIKE)
+int kwh043st20_f01_spi_startup(unsigned int bus, unsigned int cs,
+       unsigned int max_hz, unsigned int spi_mode);
+#endif
 #endif
index 7ef95199976e2b7cc77f7a2dc1d4ecff92d0ac20..96b9edb0da170a0ebbdbb8bbccac13ad03fdfb23 100644 (file)
@@ -8,9 +8,10 @@
 #ifndef _VIDEO_FONT_
 #define _VIDEO_FONT_
 
-#define VIDEO_FONT_CHARS       256
-#define VIDEO_FONT_WIDTH       8
-#define VIDEO_FONT_HEIGHT      16
-#define VIDEO_FONT_SIZE                (VIDEO_FONT_CHARS * VIDEO_FONT_HEIGHT)
+#ifdef CONFIG_VIDEO_FONT_4X6
+#include <video_font_4x6.h>
+#else
+#include <video_font_data.h>
+#endif
 
 #endif /* _VIDEO_FONT_ */
diff --git a/include/video_font_4x6.h b/include/video_font_4x6.h
new file mode 100644 (file)
index 0000000..d1778d5
--- /dev/null
@@ -0,0 +1,2154 @@
+
+/* Hand composed "Minuscule" 4x6 font, with binary data generated using
+ * Perl stub.
+ *
+ * Use 'perl -x mini_4x6.c < mini_4x6.c > new_version.c' to regenerate
+ * binary data.
+ *
+ * Created by Kenneth Albanowski.
+ * No rights reserved, released to the public domain.
+ *
+ * Version 1.0
+ */
+
+/*
+
+#!/usr/bin/perl -pn
+
+s{((0x)?[0-9a-fA-F]+)(.*\[([\*\ ]{4})\])}{
+
+       ($num,$pat,$bits) = ($1,$3,$4);
+       
+       $bits =~ s/([^\s0])|(.)/ defined($1) + 0 /ge;
+       
+       $num = ord(pack("B8", $bits));
+       $num |= $num >> 4;
+       $num = sprintf("0x%.2x", $num);
+       
+       #print "$num,$pat,$bits\n";
+       
+       $num . $pat;
+}ge;
+
+__END__;
+*/
+
+/* Note: binary data consists of one byte for each row of each character top
+   to bottom, character 0 to character 255, six bytes per character. Each
+   byte contains the same four character bits in both nybbles.
+   MSBit to LSBit = left to right.
+ */
+
+#ifndef _VIDEO_FONT_DATA_
+#define _VIDEO_FONT_DATA_
+
+#define VIDEO_FONT_CHARS       256
+#define VIDEO_FONT_WIDTH       4
+#define VIDEO_FONT_HEIGHT      6
+#define VIDEO_FONT_SIZE                (VIDEO_FONT_CHARS * VIDEO_FONT_HEIGHT)
+
+static unsigned char video_fontdata[VIDEO_FONT_SIZE] = {
+
+       /*{*/
+               /*   Char 0: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 1: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 2: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 3: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 4: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 5: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 6: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 7: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 8: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 9: ' '  */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 10: '' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 11: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 12: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 13: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 14: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 15: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 16: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 17: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 18: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 19: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 20: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 21: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 22: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 23: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 24: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 25: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 26: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 27: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 28: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 29: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 30: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 31: ' ' */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 32: ' ' */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 33: '!' */
+       0x44,   /*=  [ *  ]       */
+       0x44,   /*=  [ *  ]       */
+       0x44,   /*=  [ *  ]       */
+       0x00,   /*=  [    ]       */
+       0x44,   /*=  [ *  ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 34: '"' */
+       0xaa,   /*=  [* * ]       */
+       0xaa,   /*=  [* * ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 35: '#' */
+       0xaa,   /*=  [* * ]       */
+       0xff,   /*=  [****]       */
+       0xff,   /*=  [****]       */
+       0xaa,   /*=  [* * ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 36: '$' */
+       0x44,   /*=  [ *  ]       */
+       0x66,   /*=  [ ** ]       */
+       0xee,   /*=  [*** ]       */
+       0xcc,   /*=  [**  ]       */
+       0x44,   /*=  [ *  ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 37: '%' */
+       0xaa,   /*=  [* * ]       */
+       0x22,   /*=  [  * ]       */
+       0x44,   /*=  [ *  ]       */
+       0x88,   /*=  [*   ]       */
+       0xaa,   /*=  [* * ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 38: '&' */
+       0x66,   /*=  [ ** ]       */
+       0x99,   /*=  [*  *]       */
+       0x66,   /*=  [ ** ]       */
+       0xaa,   /*=  [* * ]       */
+       0xdd,   /*=  [** *]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 39: ''' */
+       0x22,   /*=  [  * ]       */
+       0x44,   /*=  [ *  ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 40: '(' */
+       0x22,   /*=  [  * ]       */
+       0x44,   /*=  [ *  ]       */
+       0x44,   /*=  [ *  ]       */
+       0x44,   /*=  [ *  ]       */
+       0x22,   /*=  [  * ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 41: ')' */
+       0x44,   /*=  [ *  ]       */
+       0x22,   /*=  [  * ]       */
+       0x22,   /*=  [  * ]       */
+       0x22,   /*=  [  * ]       */
+       0x44,   /*=  [ *  ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 42: '*' */
+       0x00,   /*=  [    ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 43: '+' */
+       0x00,   /*=  [    ]       */
+       0x44,   /*=  [ *  ]       */
+       0xee,   /*=  [*** ]       */
+       0x44,   /*=  [ *  ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 44: ',' */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x44,   /*=  [ *  ]       */
+       0x88,   /*=  [*   ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 45: '-' */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0xee,   /*=  [*** ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 46: '.' */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       0x44,   /*=  [ *  ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 47: '/' */
+       0x00,   /*=  [    ]       */
+       0x22,   /*=  [  * ]       */
+       0x44,   /*=  [ *  ]       */
+       0x88,   /*=  [*   ]       */
+       0x00,   /*=  [    ]       */
+       0x00,   /*=  [    ]       */
+       /*}*/
+       /*{*/
+               /*   Char 48: '0'   */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/
+               /*   Char 49: '1'   */
+       0x44,   /*=   [ *  ]        */
+       0xcc,   /*=   [**  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/
+               /*   Char 50: '2'   */
+       0xcc,   /*=   [**  ]        */
+       0x22,   /*=   [  * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/
+               /*   Char 51: '3'   */
+       0xee,   /*=   [*** ]        */
+       0x22,   /*=   [  * ]        */
+       0x66,   /*=   [ ** ]        */
+       0x22,   /*=   [  * ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 52: '4'   */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 53: '5'   */
+       0xee,   /*=   [*** ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0x22,   /*=   [  * ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 54: '6'   */
+       0xee,   /*=   [*** ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 55: '7'   */
+       0xee,   /*=   [*** ]        */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 56: '8'   */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 57: '9'   */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 58: ':'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 59: ';'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0x88,   /*=   [*   ]        */
+       /*}*/
+       /*{*/   /*   Char 60: '<'   */
+       0x22,   /*=   [  * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x88,   /*=   [*   ]        */
+       0x44,   /*=   [ *  ]        */
+       0x22,   /*=   [  * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 61: '='   */
+       0x00,   /*=   [    ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 62: '>'   */
+       0x88,   /*=   [*   ]        */
+       0x44,   /*=   [ *  ]        */
+       0x22,   /*=   [  * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x88,   /*=   [*   ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 63: '?'   */
+       0xee,   /*=   [*** ]        */
+       0x22,   /*=   [  * ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 64: '@'   */
+       0x44,   /*=   [ *  ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x88,   /*=   [*   ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 65: 'A'   */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 66: 'B'   */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xcc,   /*=   [**  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 67: 'C'   */
+       0x66,   /*=   [ ** ]        */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 68: 'D'   */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xcc,   /*=   [**  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 69: 'E'   */
+       0xee,   /*=   [*** ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 70: 'F'   */
+       0xee,   /*=   [*** ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 71: 'G'   */
+       0x66,   /*=   [ ** ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 72: 'H'   */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 73: 'I'   */
+       0xee,   /*=   [*** ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 74: 'J'   */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 75: 'K'   */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 76: 'L'   */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 77: 'M'   */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 78: 'N'   */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 79: 'O'   */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 80: 'P'   */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xcc,   /*=   [**  ]        */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 81: 'Q'   */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 82: 'R'   */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 83: 'S'   */
+       0x66,   /*=   [ ** ]        */
+       0x88,   /*=   [*   ]        */
+       0x44,   /*=   [ *  ]        */
+       0x22,   /*=   [  * ]        */
+       0xcc,   /*=   [**  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 84: 'T'   */
+       0xee,   /*=   [*** ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 85: 'U'   */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 86: 'V'   */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 87: 'W'   */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 88: 'X'   */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 89: 'Y'   */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 90: 'Z'   */
+       0xee,   /*=   [*** ]        */
+       0x22,   /*=   [  * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x88,   /*=   [*   ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 91: '['   */
+       0x66,   /*=   [ ** ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 92: '\'   */
+       0x00,   /*=   [    ]        */
+       0x88,   /*=   [*   ]        */
+       0x44,   /*=   [ *  ]        */
+       0x22,   /*=   [  * ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 93: ']'   */
+       0x66,   /*=   [ ** ]        */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 94: '^'   */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 95: '_'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xff,   /*=   [****]        */
+       /*}*/
+       /*{*/   /*   Char 96: '`'   */
+       0x88,   /*=   [*   ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 97: 'a'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x66,   /*=   [ ** ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 98: 'b'   */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xcc,   /*=   [**  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 99: 'c'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x66,   /*=   [ ** ]        */
+       0x88,   /*=   [*   ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 100: 'd'   */
+       0x22,   /*=   [  * ]        */
+       0x22,   /*=   [  * ]        */
+       0x66,   /*=   [ ** ]        */
+       0xaa,   /*=   [* * ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 101: 'e'   */
+       0x00,   /*=   [    ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x88,   /*=   [*   ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 102: 'f'   */
+       0x22,   /*=   [  * ]        */
+       0x44,   /*=   [ *  ]        */
+       0xee,   /*=   [*** ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 103: 'g'   */
+       0x00,   /*=   [    ]        */
+       0x66,   /*=   [ ** ]        */
+       0xaa,   /*=   [* * ]        */
+       0x66,   /*=   [ ** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 104: 'h'   */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 105: 'i'   */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 106: 'j'   */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x88,   /*=   [*   ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 107: 'k'   */
+       0x00,   /*=   [    ]        */
+       0x88,   /*=   [*   ]        */
+       0xaa,   /*=   [* * ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 108: 'l'   */
+       0x00,   /*=   [    ]        */
+       0xcc,   /*=   [**  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 109: 'm'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 110: 'n'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 111: 'o'   */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 112: 'p'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xcc,   /*=   [**  ]        */
+       0x88,   /*=   [*   ]        */
+       /*}*/
+       /*{*/   /*   Char 113: 'q'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x66,   /*=   [ ** ]        */
+       0xaa,   /*=   [* * ]        */
+       0x66,   /*=   [ ** ]        */
+       0x22,   /*=   [  * ]        */
+       /*}*/
+       /*{*/   /*   Char 114: 'r'   */
+       0x00,   /*=   [    ]        */
+       0xcc,   /*=   [**  ]        */
+       0xaa,   /*=   [* * ]        */
+       0x88,   /*=   [*   ]        */
+       0x88,   /*=   [*   ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 115: 's'   */
+       0x00,   /*=   [    ]        */
+       0x66,   /*=   [ ** ]        */
+       0xcc,   /*=   [**  ]        */
+       0x22,   /*=   [  * ]        */
+       0xcc,   /*=   [**  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 116: 't'   */
+       0x00,   /*=   [    ]        */
+       0x44,   /*=   [ *  ]        */
+       0xee,   /*=   [*** ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 117: 'u'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 118: 'v'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 119: 'w'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 120: 'x'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xaa,   /*=   [* * ]        */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 121: 'y'   */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x22,   /*=   [  * ]        */
+       0xcc,   /*=   [**  ]        */
+       /*}*/
+       /*{*/   /*   Char 122: 'z' */
+       0x00,   /*=   [    ]        */
+       0xee,   /*=   [*** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xcc,   /*=   [**  ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 123: '{' */
+       0x22,   /*=   [  * ]        */
+       0x44,   /*=   [ *  ]        */
+       0xcc,   /*=   [**  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x22,   /*=   [  * ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 124: '|' */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 125: '}' */
+       0x88,   /*=   [*   ]        */
+       0x44,   /*=   [ *  ]        */
+       0x66,   /*=   [ ** ]        */
+       0x44,   /*=   [ *  ]        */
+       0x88,   /*=   [*   ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 126: '~' */
+       0x55,   /*=   [ * *]        */
+       0xaa,   /*=   [* * ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 127: '\7f' */
+       0x44,   /*=   [ *  ]        */
+       0xaa,   /*=   [* * ]        */
+       0xaa,   /*=   [* * ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 128:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 129:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 130:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 131:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 132:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 133:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 134:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 135:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 136:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 137:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 138:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 139:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 140:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 141:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 142:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 143:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 144:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 145:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 146:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 147:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 148:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 149:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 150:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 151:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 152:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 153:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 154:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 155:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 156:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 157:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 158:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 159:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 160:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 161:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 162:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 163:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 164:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 165:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 166:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 167:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 168:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 169:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 170:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 171:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 172:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 173:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 174:  */
+       0x00,   /*=   [    ]        */
+       0x66,   /*=   [ ** ]        */
+       0xcc,   /*=   [**  ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 175:  */
+       0x00,   /*=   [    ]        */
+       0xcc,   /*=   [**  ]        */
+       0x66,   /*=   [ ** ]        */
+       0xcc,   /*=   [**  ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 176:  */
+       0x88,   /*=   [*   ]        */
+       0x22,   /*=   [  * ]        */
+       0x88,   /*=   [*   ]        */
+       0x22,   /*=   [  * ]        */
+       0x88,   /*=   [*   ]        */
+       0x22,   /*=   [  * ]        */
+       /*}*/
+       /*{*/   /*   Char 177:  */
+       0xaa,   /*=   [* * ]        */
+       0x55,   /*=   [ * *]        */
+       0xaa,   /*=   [* * ]        */
+       0x55,   /*=   [ * *]        */
+       0xaa,   /*=   [* * ]        */
+       0x55,   /*=   [ * *]        */
+       /*}*/
+       /*{*/   /*   Char 178:  */
+       0xdd,   /*=   [** *]        */
+       0xbb,   /*=   [* **]        */
+       0xdd,   /*=   [** *]        */
+       0xbb,   /*=   [* **]        */
+       0xdd,   /*=   [** *]        */
+       0xbb,   /*=   [* **]        */
+       /*}*/
+       /*{*/   /*   Char 179:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 180:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xcc,   /*=   [**  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 181:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xcc,   /*=   [**  ]        */
+       0xcc,   /*=   [**  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 182:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xee,   /*=   [*** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 183:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xee,   /*=   [*** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 184:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xcc,   /*=   [**  ]        */
+       0xcc,   /*=   [**  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 185:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 186:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 187:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 188:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 189:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 190:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xcc,   /*=   [**  ]        */
+       0xcc,   /*=   [**  ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 191:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xcc,   /*=   [**  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 192:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x77,   /*=   [ ***]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 193:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xff,   /*=   [****]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 194:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xff,   /*=   [****]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 195:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x77,   /*=   [ ***]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 196:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xff,   /*=   [****]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 197:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xff,   /*=   [****]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 198:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x77,   /*=   [ ***]        */
+       0x77,   /*=   [ ***]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 199:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x77,   /*=   [ ***]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 200:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x77,   /*=   [ ***]        */
+       0x77,   /*=   [ ***]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 201:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x77,   /*=   [ ***]        */
+       0x77,   /*=   [ ***]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 202:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 203:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 204:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x77,   /*=   [ ***]        */
+       0x77,   /*=   [ ***]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 205:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 206:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 207:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 208:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xff,   /*=   [****]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 209:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 210:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xff,   /*=   [****]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 211:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x77,   /*=   [ ***]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 212:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x77,   /*=   [ ***]        */
+       0x77,   /*=   [ ***]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 213:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x77,   /*=   [ ***]        */
+       0x77,   /*=   [ ***]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 214:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x77,   /*=   [ ***]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 215:  */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0xff,   /*=   [****]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       /*}*/
+       /*{*/   /*   Char 216:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 217:  */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0xcc,   /*=   [**  ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 218:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x77,   /*=   [ ***]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       0x44,   /*=   [ *  ]        */
+       /*}*/
+       /*{*/   /*   Char 219:  */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       /*}*/
+       /*{*/   /*   Char 220:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       /*}*/
+       /*{*/   /*   Char 221:  */
+       0xcc,   /*=   [**  ]        */
+       0xcc,   /*=   [**  ]        */
+       0xcc,   /*=   [**  ]        */
+       0xcc,   /*=   [**  ]        */
+       0xcc,   /*=   [**  ]        */
+       0xcc,   /*=   [**  ]        */
+       /*}*/
+       /*{*/   /*   Char 222:  */
+       0x33,   /*=   [  **]        */
+       0x33,   /*=   [  **]        */
+       0x33,   /*=   [  **]        */
+       0x33,   /*=   [  **]        */
+       0x33,   /*=   [  **]        */
+       0x33,   /*=   [  **]        */
+       /*}*/
+       /*{*/   /*   Char 223:  */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0xff,   /*=   [****]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 224:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 225:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 226:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 227:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 228:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 229:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 230:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 231:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 232:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 233:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 234:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 235:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 236:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 237:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 238:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 239:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 240:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 241:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 242:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 243:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 244:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 245:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 246:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 247:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 248:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 249:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 250:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 251:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 252:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 253:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 254:  */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       0x66,   /*=   [ ** ]        */
+       0x66,   /*=   [ ** ]        */
+       0x00,   /*=   [    ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+       /*{*/   /*   Char 255:  */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0xee,   /*=   [*** ]        */
+       0x00,   /*=   [    ]        */
+       /*}*/
+};
+
+#endif
index 4e544f0d7f74a3107feefd535467ce934fbf49bb..346a162f56fe7ef759d8ee5c29614fa70151f931 100644 (file)
@@ -8,7 +8,12 @@
 #ifndef _VIDEO_FONT_DATA_
 #define _VIDEO_FONT_DATA_
 
-static unsigned char video_fontdata[VIDEO_FONT_SIZE] = {
+#define VIDEO_FONT_CHARS       256
+#define VIDEO_FONT_WIDTH       8
+#define VIDEO_FONT_HEIGHT      16
+#define VIDEO_FONT_SIZE                (VIDEO_FONT_CHARS * VIDEO_FONT_HEIGHT)
+
+static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
 
        /* 0 0x00 '^@' */
        0x00, /* 00000000 */
index f8211cdba29e7a31b9e6b0e83f44101fc49278fd..6107cbf3a5a9c98c44951b013adee0cab949e3d8 100644 (file)
@@ -20,12 +20,14 @@ extern int zynq_info(Xilinx_desc *desc);
 #define XILINX_ZYNQ_7020       0x7
 #define XILINX_ZYNQ_7030       0xc
 #define XILINX_ZYNQ_7045       0x11
+#define XILINX_ZYNQ_7100       0x16
 
 /* Device Image Sizes */
 #define XILINX_XC7Z010_SIZE    16669920/8
 #define XILINX_XC7Z020_SIZE    32364512/8
 #define XILINX_XC7Z030_SIZE    47839328/8
 #define XILINX_XC7Z045_SIZE    106571232/8
+#define XILINX_XC7Z100_SIZE    139330784/8
 
 /* Descriptor Macros */
 #define XILINX_XC7Z010_DESC(cookie) \
@@ -40,4 +42,7 @@ extern int zynq_info(Xilinx_desc *desc);
 #define XILINX_XC7Z045_DESC(cookie) \
 { xilinx_zynq, devcfg, XILINX_XC7Z045_SIZE, NULL, cookie, "7z045" }
 
+#define XILINX_XC7Z100_DESC(cookie) \
+{ xilinx_zynq, devcfg, XILINX_XC7Z100_SIZE, NULL, cookie, "7z100" }
+
 #endif /* _ZYNQPL_H_ */
index 154e9a4461794dc9ec7271e1b61cda38703626b9..e146aba6eb7cdb182191954c67a4e3ec99ce8a42 100644 (file)
@@ -1,52 +1,7 @@
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+ BSD-2-Clause
  */
 #include "libfdt_env.h"
 
index f72d13b1d19c0bce7a27658e18a5f9fe26b2453c..ac6c1fb04ffbaa3ecf877d68faa5b9b1d5399b9b 100644 (file)
@@ -1,52 +1,7 @@
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2012 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+ BSD-2-Clause
  */
 #include "libfdt_env.h"
 
index b65f4e23ad7b019e37993282090b1a99aab36770..f2154e8370272eeac529644e80a19923902a7265 100644 (file)
@@ -1,52 +1,7 @@
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+ BSD-2-Clause
  */
 #include "libfdt_env.h"
 
index aba60948416e1cd7a802770f94627089d685446e..6fa4f13073d28fd76c886b1154e254ca1c6e1fd0 100644 (file)
@@ -1,52 +1,7 @@
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+ BSD-2-Clause
  */
 #include "libfdt_env.h"
 
index 9b00c3a6e83c085d2ad3372659bab62b2d2b85a5..2f3cc243dba14d7faab3ba567984863a635b765e 100644 (file)
@@ -1,52 +1,7 @@
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+ BSD-2-Clause
  */
 #include "libfdt_env.h"
 
index f422754de9d28df97b99db3506e6b2135dfb4921..580b57024ffc96843d718ed3ea7dd962acd52327 100644 (file)
@@ -1,52 +1,7 @@
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+ BSD-2-Clause
  */
 #include "libfdt_env.h"
 
index b9e3c4a742119fcea67cc4e60572d4da0b5b9957..3f2dfa573b65086e121597a6bb5d438dfcfad4dd 100644 (file)
@@ -1,52 +1,7 @@
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+ BSD-2-Clause
  */
 #include "libfdt_env.h"
 
index 381133ba81df7d02c375d7a1462d650136abd6d1..13cbc9af2ab9259ea1cb76c37cb489be6907ab57 100644 (file)
@@ -3,52 +3,7 @@
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
- *
- * libfdt is dual licensed: you can use it either under the terms of
- * the GPL, or the BSD license, at your option.
- *
- *  a) This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of the
- *     License, or (at your option) any later version.
- *
- *     This library is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this library; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Alternatively,
- *
- *  b) Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *     1. Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *     2. Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier:    GPL-2.0+ BSD-2-Clause
  */
 #include <fdt.h>
 
index 7663b9cd6c92541b657fb3eebcbd72ba98b9a6df..f7cc29f03956a6b1b56ccc27e479f351d86cf570 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -207,6 +207,8 @@ static int net_check_prereq(enum proto_t protocol);
 
 static int NetTryCount;
 
+int __maybe_unused net_busy_flag;
+
 /**********************************************************************/
 
 static int on_bootfile(const char *name, const char *value, enum env_op op,
@@ -342,6 +344,9 @@ int NetLoop(enum proto_t protocol)
                eth_init_state_only(bd);
 
 restart:
+#ifdef CONFIG_USB_KEYBOARD
+       net_busy_flag = 0;
+#endif
        net_set_state(NETLOOP_CONTINUE);
 
        /*
@@ -454,6 +459,9 @@ restart:
                status_led_set(STATUS_LED_RED, STATUS_LED_ON);
 #endif /* CONFIG_SYS_FAULT_ECHO_LINK_DOWN, ... */
 #endif /* CONFIG_MII, ... */
+#ifdef CONFIG_USB_KEYBOARD
+       net_busy_flag = 1;
+#endif
 
        /*
         *      Main packet reception loop.  Loop receiving packets until
@@ -559,6 +567,9 @@ restart:
        }
 
 done:
+#ifdef CONFIG_USB_KEYBOARD
+       net_busy_flag = 0;
+#endif
 #ifdef CONFIG_CMD_TFTPPUT
        /* Clear out the handlers */
        net_set_udp_handler(NULL);
index 28ebc96060f8b6b6709b4b55b16a1b641c79b887..174d0a7fc47fe60d16b2613a57cd97055dca0970 100644 (file)
 CONFIG_SPL_BUILD := y
 export CONFIG_SPL_BUILD
 
+ifeq ($(CONFIG_TPL_BUILD),y)
+export CONFIG_TPL_BUILD
+SPL_BIN := u-boot-tpl
+else
+SPL_BIN := u-boot-spl
+endif
+
 include $(TOPDIR)/config.mk
 
 # We want the final binaries in this directory
+ifeq ($(CONFIG_TPL_BUILD),y)
+obj := $(OBJTREE)/tpl/
+SPLTREE := $(TPLTREE)
+else
 obj := $(OBJTREE)/spl/
+endif
 
 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(SRCTREE)/board/$(VENDOR)/common/Makefile),y,n)
 
@@ -50,6 +62,9 @@ LIBS-y += arch/powerpc/cpu/mpc8xxx/lib8xxx.o
 endif
 ifeq ($(CPU),mpc85xx)
 LIBS-y += arch/powerpc/cpu/mpc8xxx/lib8xxx.o
+ifdef CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
+LIBS-y += arch/powerpc/cpu/mpc8xxx/ddr/libddr.o
+endif
 endif
 ifeq ($(CPU),mpc86xx)
 LIBS-y += arch/powerpc/cpu/mpc8xxx/lib8xxx.o
@@ -80,8 +95,10 @@ LIBS-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/memory.o
 LIBS-$(CONFIG_SPL_NET_SUPPORT) += net/libnet.o
 LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/libnet.o
 LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/libphy.o
+LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/net/phy/libphy.o
 LIBS-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += drivers/usb/musb-new/libusb_musb-new.o
 LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/libusb_gadget.o
+LIBS-$(CONFIG_SPL_WATCHDOG_SUPPORT) += drivers/watchdog/libwatchdog.o
 
 ifneq ($(CONFIG_OMAP_COMMON),)
 LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
@@ -157,7 +174,7 @@ $(OBJTREE)/MLO.byteswap: $(obj)u-boot-spl.bin
 $(OBJTREE)/SPL : $(obj)u-boot-spl.bin depend
                $(MAKE) -C $(SRCTREE)/arch/arm/imx-common $@
 
-ALL-y  += $(obj)u-boot-spl.bin
+ALL-y  += $(obj)$(SPL_BIN).bin
 
 ifdef CONFIG_SAMSUNG
 ALL-y  += $(obj)$(BOARD)-spl.bin
@@ -171,15 +188,15 @@ $(obj)$(BOARD)-spl.bin: $(obj)u-boot-spl.bin
                $(obj)u-boot-spl.bin $(obj)$(BOARD)-spl.bin
 endif
 
-$(obj)u-boot-spl.bin:  $(obj)u-boot-spl
+$(obj)$(SPL_BIN).bin:  $(obj)$(SPL_BIN)
        $(OBJCOPY) $(OBJCFLAGS) -O binary $< $@
 
 GEN_UBOOT = \
        cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $(__START) \
                --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
-               -Map u-boot-spl.map -o u-boot-spl
+               -Map $(SPL_BIN).map -o $(SPL_BIN)
 
-$(obj)u-boot-spl:      depend $(START) $(LIBS) $(obj)u-boot-spl.lds
+$(obj)$(SPL_BIN):      depend $(START) $(LIBS) $(obj)u-boot-spl.lds
        $(GEN_UBOOT)
 
 $(START):      depend
index b94119202c85597cad3027420ac93f8f8564aed3..c36cde200745b0da9959d280606ca76ccd498798 100644 (file)
@@ -70,31 +70,33 @@ EXT_OBJ_FILES-y += lib/md5.o
 EXT_OBJ_FILES-y += lib/sha1.o
 
 # Source files located in the tools directory
-OBJ_FILES-$(CONFIG_LCD_LOGO) += bmp_logo.o
-OBJ_FILES-$(CONFIG_VIDEO_LOGO) += bmp_logo.o
+NOPED_OBJ_FILES-y += aisimage.o
 NOPED_OBJ_FILES-y += default_image.o
-NOPED_OBJ_FILES-y += proftool.o
-OBJ_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc.o
 NOPED_OBJ_FILES-y += fit_image.o
-OBJ_FILES-$(CONFIG_CMD_NET) += gen_eth_addr.o
-OBJ_FILES-$(CONFIG_CMD_LOADS) += img2srec.o
-OBJ_FILES-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes.o
-NOPED_OBJ_FILES-y += aisimage.o
-NOPED_OBJ_FILES-y += kwbimage.o
-NOPED_OBJ_FILES-y += pblimage.o
-NOPED_OBJ_FILES-y += imximage.o
 NOPED_OBJ_FILES-y += image-host.o
-NOPED_OBJ_FILES-y += omapimage.o
+NOPED_OBJ_FILES-y += imximage.o
+NOPED_OBJ_FILES-y += kwbimage.o
 NOPED_OBJ_FILES-y += mkenvimage.o
 NOPED_OBJ_FILES-y += mkimage.o
+NOPED_OBJ_FILES-y += mxsimage.o
+NOPED_OBJ_FILES-y += omapimage.o
+NOPED_OBJ_FILES-y += os_support.o
+NOPED_OBJ_FILES-y += pblimage.o
+NOPED_OBJ_FILES-y += proftool.o
+NOPED_OBJ_FILES-y += ublimage.o
+OBJ_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc.o
+OBJ_FILES-$(CONFIG_CMD_LOADS) += img2srec.o
+OBJ_FILES-$(CONFIG_CMD_NET) += gen_eth_addr.o
 OBJ_FILES-$(CONFIG_EXYNOS5250) += mkexynosspl.o
+OBJ_FILES-$(CONFIG_KIRKWOOD) += kwboot.o
+OBJ_FILES-$(CONFIG_LCD_LOGO) += bmp_logo.o
 OBJ_FILES-$(CONFIG_MX23) += mxsboot.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
-NOPED_OBJ_FILES-y += ublimage.o
-OBJ_FILES-$(CONFIG_KIRKWOOD) += kwboot.o
+OBJ_FILES-$(CONFIG_SMDK5250) += mkexynosspl.o
+OBJ_FILES-$(CONFIG_VIDEO_LOGO) += bmp_logo.o
+OBJ_FILES-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes.o
 
 # Don't build by default
 #ifeq ($(ARCH),ppc)
@@ -154,6 +156,7 @@ NOPEDOBJS := $(addprefix $(obj),$(NOPED_OBJ_FILES-y))
 #
 # Use native tools and options
 # Define __KERNEL_STRICT_NAMES to prevent typedef overlaps
+# Define _GNU_SOURCE to obtain the getline prototype from stdio.h
 #
 HOSTCPPFLAGS = -include $(SRCTREE)/include/libfdt_env.h \
                -idirafter $(SRCTREE)/include \
@@ -163,7 +166,8 @@ HOSTCPPFLAGS =      -include $(SRCTREE)/include/libfdt_env.h \
                -I $(SRCTREE)/tools \
                -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE) \
                -DUSE_HOSTCC \
-               -D__KERNEL_STRICT_NAMES
+               -D__KERNEL_STRICT_NAMES \
+               -D_GNU_SOURCE
 
 
 all:   $(obj).depend $(BINS) $(LOGO-y) subdirs
@@ -201,20 +205,21 @@ $(obj)mkenvimage$(SFX):   $(obj)crc32.o $(obj)mkenvimage.o \
        $(HOSTSTRIP) $@
 
 $(obj)mkimage$(SFX):   $(obj)aisimage.o \
+                       $(FIT_SIG_OBJS) \
                        $(obj)crc32.o \
                        $(obj)default_image.o \
                        $(obj)fit_image.o \
                        $(obj)image-fit.o \
-                       $(obj)image.o \
                        $(obj)image-host.o \
-                       $(FIT_SIG_OBJS) \
+                       $(obj)image.o \
                        $(obj)imximage.o \
                        $(obj)kwbimage.o \
-                       $(obj)pblimage.o \
                        $(obj)md5.o \
                        $(obj)mkimage.o \
-                       $(obj)os_support.o \
+                       $(obj)mxsimage.o \
                        $(obj)omapimage.o \
+                       $(obj)os_support.o \
+                       $(obj)pblimage.o \
                        $(obj)sha1.o \
                        $(obj)ublimage.o \
                        $(LIBFDT_OBJS) \
index cd89145867d5b17351b27112017ef7d83a7b80d7..980bf2e1a7b9c700389df00a57525c8cf78cf63c 100644 (file)
@@ -5,9 +5,6 @@
  * SPDX-License-Identifier:    GPL-2.0+ 
  */
 
-/* Required to obtain the getline prototype from stdio.h */
-#define _GNU_SOURCE
-
 #include "mkimage.h"
 #include "aisimage.h"
 #include <image.h>
index b2ad3d592768747ae0eed5bda884272a58bc47b7..2247adcc82ec1ebad5070eab61fb559991a731c3 100644 (file)
@@ -179,7 +179,7 @@ int main (int argc, char *argv[])
        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) \
+                       b->data[i + x] = (uint8_t) fgetc(fp)
                                                + DEFAULT_CMAP_SIZE;
                }
        }
diff --git a/tools/dtc-version.sh b/tools/dtc-version.sh
new file mode 100755 (executable)
index 0000000..e8c94d3
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# dtc-version dtc-command
+#
+# Prints the dtc version of `dtc-command' in a canonical 4-digit form
+# such as `0222' for binutils 2.22
+#
+
+dtc="$*"
+
+if [ ${#dtc} -eq 0 ]; then
+       echo "Error: No dtc command specified."
+       printf "Usage:\n\t$0 <dtc-command>\n"
+       exit 1
+fi
+
+MAJOR=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 1)
+MINOR=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 2)
+
+printf "%02d%02d\\n" $MAJOR $MINOR
index c8a9ad578bc932cd8491c77390062921ace60481..c87669b985d4c4b95d531b5899b013fa44bf4997 100644 (file)
@@ -9,13 +9,12 @@
  * SPDX-License-Identifier:    GPL-2.0+ 
  */
 
-/* Required to obtain the getline prototype from stdio.h */
-#define _GNU_SOURCE
-
 #include "mkimage.h"
 #include <image.h>
 #include "imximage.h"
 
+#define UNDEFINED 0xFFFFFFFF
+
 /*
  * Supported commands for configuration file
  */
@@ -23,6 +22,7 @@ static table_entry_t imximage_cmds[] = {
        {CMD_BOOT_FROM,         "BOOT_FROM",            "boot command",   },
        {CMD_BOOT_OFFSET,       "BOOT_OFFSET",          "Boot offset",    },
        {CMD_DATA,              "DATA",                 "Reg Write Data", },
+       {CMD_CSF,               "CSF",           "Command Sequence File", },
        {CMD_IMAGE_VERSION,     "IMAGE_VERSION",        "image version",  },
        {-1,                    "",                     "",               },
 };
@@ -31,7 +31,7 @@ static table_entry_t imximage_cmds[] = {
  * Supported Boot options for configuration file
  * this is needed to set the correct flash offset
  */
-static table_entry_t imximage_bootops[] = {
+static table_entry_t imximage_boot_offset[] = {
        {FLASH_OFFSET_ONENAND,  "onenand",      "OneNAND Flash",},
        {FLASH_OFFSET_NAND,     "nand",         "NAND Flash",   },
        {FLASH_OFFSET_NOR,      "nor",          "NOR Flash",    },
@@ -41,6 +41,20 @@ static table_entry_t imximage_bootops[] = {
        {-1,                    "",             "Invalid",      },
 };
 
+/*
+ * Supported Boot options for configuration file
+ * this is needed to determine the initial load size
+ */
+static table_entry_t imximage_boot_loadsize[] = {
+       {FLASH_LOADSIZE_ONENAND,        "onenand",      "OneNAND Flash",},
+       {FLASH_LOADSIZE_NAND,           "nand",         "NAND Flash",   },
+       {FLASH_LOADSIZE_NOR,            "nor",          "NOR Flash",    },
+       {FLASH_LOADSIZE_SATA,           "sata",         "SATA Disk",    },
+       {FLASH_LOADSIZE_SD,             "sd",           "SD Card",      },
+       {FLASH_LOADSIZE_SPI,            "spi",          "SPI Flash",    },
+       {-1,                            "",             "Invalid",      },
+};
+
 /*
  * IMXIMAGE version definition for i.MX chips
  */
@@ -52,12 +66,22 @@ static table_entry_t imximage_versions[] = {
 
 static struct imx_header imximage_header;
 static uint32_t imximage_version;
+/*
+ * Image Vector Table Offset
+ * Initialized to a wrong not 4-bytes aligned address to
+ * check if it is was set by the cfg file.
+ */
+static uint32_t imximage_ivt_offset = UNDEFINED;
+static uint32_t imximage_csf_size = UNDEFINED;
+/* Initial Load Region Size */
+static uint32_t imximage_init_loadsize;
 
 static set_dcd_val_t set_dcd_val;
 static set_dcd_rst_t set_dcd_rst;
 static set_imx_hdr_t set_imx_hdr;
 static uint32_t max_dcd_entries;
 static uint32_t *header_size_ptr;
+static uint32_t *csf_ptr;
 
 static uint32_t get_cfg_value(char *token, char *name,  int linenr)
 {
@@ -193,7 +217,8 @@ static void set_imx_hdr_v1(struct imx_header *imxhdr, uint32_t dcd_len,
        /* Set magic number */
        fhdr_v1->app_code_barker = APP_CODE_BARKER;
 
-       hdr_base = entry_point - sizeof(struct imx_header);
+       /* TODO: check i.MX image V1 handling, for now use 'old' style */
+       hdr_base = entry_point - 4096;
        fhdr_v1->app_dest_ptr = hdr_base - flash_offset;
        fhdr_v1->app_code_jump_vector = entry_point;
 
@@ -220,16 +245,18 @@ static void set_imx_hdr_v2(struct imx_header *imxhdr, uint32_t dcd_len,
 
        fhdr_v2->entry = entry_point;
        fhdr_v2->reserved1 = fhdr_v2->reserved2 = 0;
-       fhdr_v2->self = hdr_base = entry_point - sizeof(struct imx_header);
-
+       hdr_base = entry_point - imximage_init_loadsize +
+               flash_offset;
+       fhdr_v2->self = hdr_base;
        fhdr_v2->dcd_ptr = hdr_base + offsetof(imx_header_v2_t, dcd_table);
        fhdr_v2->boot_data_ptr = hdr_base
                        + offsetof(imx_header_v2_t, boot_data);
-       hdr_v2->boot_data.start = hdr_base - flash_offset;
+       hdr_v2->boot_data.start = entry_point - imximage_init_loadsize;
 
-       /* Security feature are not supported */
        fhdr_v2->csf = 0;
+
        header_size_ptr = &hdr_v2->boot_data.size;
+       csf_ptr = &fhdr_v2->csf;
 }
 
 static void set_hdr_func(struct imx_header *imxhdr)
@@ -306,6 +333,13 @@ static void print_hdr_v2(struct imx_header *imx_hdr)
        genimg_print_size(hdr_v2->boot_data.size);
        printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr);
        printf("Entry Point:  %08x\n", (uint32_t)fhdr_v2->entry);
+       if (fhdr_v2->csf && (imximage_ivt_offset != UNDEFINED) &&
+           (imximage_csf_size != UNDEFINED)) {
+               printf("HAB Blocks:   %08x %08x %08x\n",
+                      (uint32_t)fhdr_v2->self, 0,
+                      hdr_v2->boot_data.size - imximage_ivt_offset -
+                      imximage_csf_size);
+       }
 }
 
 static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
@@ -327,18 +361,36 @@ static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
                set_hdr_func(imxhdr);
                break;
        case CMD_BOOT_FROM:
-               imxhdr->flash_offset = get_table_entry_id(imximage_bootops,
+               imximage_ivt_offset = get_table_entry_id(imximage_boot_offset,
                                        "imximage boot option", token);
-               if (imxhdr->flash_offset == -1) {
+               if (imximage_ivt_offset == -1) {
                        fprintf(stderr, "Error: %s[%d] -Invalid boot device"
                                "(%s)\n", name, lineno, token);
                        exit(EXIT_FAILURE);
                }
+
+               imximage_init_loadsize =
+                       get_table_entry_id(imximage_boot_loadsize,
+                                          "imximage boot option", token);
+
+               if (imximage_init_loadsize == -1) {
+                       fprintf(stderr,
+                               "Error: %s[%d] -Invalid boot device(%s)\n",
+                               name, lineno, token);
+                       exit(EXIT_FAILURE);
+               }
+
+               /*
+                * The SOC loads from the storage starting at address 0
+                * then ensures that the load size contains the offset
+                */
+               if (imximage_init_loadsize < imximage_ivt_offset)
+                       imximage_init_loadsize = imximage_ivt_offset;
                if (unlikely(cmd_ver_first != 1))
                        cmd_ver_first = 0;
                break;
        case CMD_BOOT_OFFSET:
-               imxhdr->flash_offset = get_cfg_value(token, name, lineno);
+               imximage_ivt_offset = get_cfg_value(token, name, lineno);
                if (unlikely(cmd_ver_first != 1))
                        cmd_ver_first = 0;
                break;
@@ -348,6 +400,17 @@ static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
                if (unlikely(cmd_ver_first != 1))
                        cmd_ver_first = 0;
                break;
+       case CMD_CSF:
+               if (imximage_version != 2) {
+                       fprintf(stderr,
+                               "Error: %s[%d] - CSF only supported for VERSION 2(%s)\n",
+                               name, lineno, token);
+                       exit(EXIT_FAILURE);
+               }
+               imximage_csf_size = get_cfg_value(token, name, lineno);
+               if (unlikely(cmd_ver_first != 1))
+                       cmd_ver_first = 0;
+               break;
        }
 }
 
@@ -408,7 +471,8 @@ static uint32_t parse_cfg_file(struct imx_header *imxhdr, char *name)
                exit(EXIT_FAILURE);
        }
 
-       /* Very simple parsing, line starting with # are comments
+       /*
+        * Very simple parsing, line starting with # are comments
         * and are dropped
         */
        while ((getline(&line, &len, fd)) > 0) {
@@ -439,7 +503,7 @@ static uint32_t parse_cfg_file(struct imx_header *imxhdr, char *name)
        fclose(fd);
 
        /* Exit if there is no BOOT_FROM field specifying the flash_offset */
-       if (imxhdr->flash_offset == FLASH_OFFSET_UNDEFINED) {
+       if (imximage_ivt_offset == FLASH_OFFSET_UNDEFINED) {
                fprintf(stderr, "Error: No BOOT_FROM tag in %s\n", name);
                exit(EXIT_FAILURE);
        }
@@ -497,14 +561,15 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,
         */
        imximage_version = IMXIMAGE_V1;
        /* Be able to detect if the cfg file has no BOOT_FROM tag */
-       imxhdr->flash_offset = FLASH_OFFSET_UNDEFINED;
+       imximage_ivt_offset = FLASH_OFFSET_UNDEFINED;
+       imximage_csf_size = 0;
        set_hdr_func(imxhdr);
 
        /* Parse dcd configuration file */
        dcd_len = parse_cfg_file(imxhdr, params->imagename);
 
        /* Set the imx header */
-       (*set_imx_hdr)(imxhdr, dcd_len, params->ep, imxhdr->flash_offset);
+       (*set_imx_hdr)(imxhdr, dcd_len, params->ep, imximage_ivt_offset);
 
        /*
         * ROM bug alert
@@ -515,7 +580,13 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,
         *
         * The remaining fraction of a block bytes would not be loaded!
         */
-       *header_size_ptr = ROUND(sbuf->st_size + imxhdr->flash_offset, 4096);
+       *header_size_ptr = ROUND(sbuf->st_size, 4096);
+
+       if (csf_ptr && imximage_csf_size) {
+               *csf_ptr = params->ep - imximage_init_loadsize +
+                       *header_size_ptr;
+               *header_size_ptr += imximage_csf_size;
+       }
 }
 
 int imximage_check_params(struct mkimage_params *params)
@@ -540,18 +611,92 @@ int imximage_check_params(struct mkimage_params *params)
                (params->xflag) || !(strlen(params->imagename));
 }
 
+static int imximage_generate(struct mkimage_params *params,
+       struct image_type_params *tparams)
+{
+       struct imx_header *imxhdr;
+       size_t alloc_len;
+       struct stat sbuf;
+       char *datafile = params->datafile;
+       uint32_t pad_len;
+
+       memset(&imximage_header, 0, sizeof(imximage_header));
+
+       /*
+        * In order to not change the old imx cfg file
+        * by adding VERSION command into it, here need
+        * set up function ptr group to V1 by default.
+        */
+       imximage_version = IMXIMAGE_V1;
+       /* Be able to detect if the cfg file has no BOOT_FROM tag */
+       imximage_ivt_offset = FLASH_OFFSET_UNDEFINED;
+       imximage_csf_size = 0;
+       set_hdr_func(imxhdr);
+
+       /* Parse dcd configuration file */
+       parse_cfg_file(&imximage_header, params->imagename);
+
+       /* TODO: check i.MX image V1 handling, for now use 'old' style */
+       if (imximage_version == IMXIMAGE_V1) {
+               alloc_len = 4096;
+       } else {
+               if (imximage_init_loadsize < imximage_ivt_offset +
+                       sizeof(imx_header_v2_t))
+                               imximage_init_loadsize = imximage_ivt_offset +
+                                       sizeof(imx_header_v2_t);
+               alloc_len = imximage_init_loadsize - imximage_ivt_offset;
+       }
+
+       if (alloc_len < sizeof(struct imx_header)) {
+               fprintf(stderr, "%s: header error\n",
+                       params->cmdname);
+               exit(EXIT_FAILURE);
+       }
+
+       imxhdr = malloc(alloc_len);
+
+       if (!imxhdr) {
+               fprintf(stderr, "%s: malloc return failure: %s\n",
+                       params->cmdname, strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+
+       memset(imxhdr, 0, alloc_len);
+
+       tparams->header_size = alloc_len;
+       tparams->hdr         = imxhdr;
+
+       /* determine data image file length */
+
+       if (stat(datafile, &sbuf) < 0) {
+               fprintf(stderr, "%s: Can't stat %s: %s\n",
+                       params->cmdname, datafile, strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+
+       pad_len = ROUND(sbuf.st_size, 4096) - sbuf.st_size;
+
+       /* TODO: check i.MX image V1 handling, for now use 'old' style */
+       if (imximage_version == IMXIMAGE_V1)
+               return 0;
+       else
+               return pad_len;
+}
+
+
 /*
  * imximage parameters
  */
 static struct image_type_params imximage_params = {
        .name           = "Freescale i.MX Boot Image support",
-       .header_size    = sizeof(struct imx_header),
-       .hdr            = (void *)&imximage_header,
+       .header_size    = 0,
+       .hdr            = NULL,
        .check_image_type = imximage_check_image_types,
        .verify_header  = imximage_verify_header,
        .print_header   = imximage_print_header,
        .set_header     = imximage_set_header,
        .check_params   = imximage_check_params,
+       .vrec_header    = imximage_generate,
 };
 
 void init_imx_image_type(void)
index 214187bb8c5aa308760116524be4b126ceaf89ed..efe6a88d9ea4ebea22e909f96420a3be176ca872 100644 (file)
 #define APP_CODE_BARKER        0xB1
 #define DCD_BARKER     0xB17219E9
 
-#define HEADER_OFFSET  0x400
-
 /*
  * NOTE: This file must be kept in sync with arch/arm/include/asm/\
  *       imx-common/imximage.cfg because tools/imximage.c can not
  *       cross-include headers from arch/arm/ and vice-versa.
  */
 #define CMD_DATA_STR   "DATA"
+
+/* Initial Vector Table Offset */
 #define FLASH_OFFSET_UNDEFINED 0xFFFFFFFF
 #define FLASH_OFFSET_STANDARD  0x400
 #define FLASH_OFFSET_NAND      FLASH_OFFSET_STANDARD
 #define FLASH_OFFSET_NOR       0x1000
 #define FLASH_OFFSET_SATA      FLASH_OFFSET_STANDARD
 
+/* Initial Load Region Size */
+#define FLASH_LOADSIZE_UNDEFINED       0xFFFFFFFF
+#define FLASH_LOADSIZE_STANDARD                0x1000
+#define FLASH_LOADSIZE_NAND            FLASH_LOADSIZE_STANDARD
+#define FLASH_LOADSIZE_SD              FLASH_LOADSIZE_STANDARD
+#define FLASH_LOADSIZE_SPI             FLASH_LOADSIZE_STANDARD
+#define FLASH_LOADSIZE_ONENAND         0x400
+#define FLASH_LOADSIZE_NOR             0x0 /* entire image */
+#define FLASH_LOADSIZE_SATA            FLASH_LOADSIZE_STANDARD
+
 #define IVT_HEADER_TAG 0xD1
 #define IVT_VERSION 0x40
 #define DCD_HEADER_TAG 0xD2
@@ -42,7 +52,8 @@ enum imximage_cmd {
        CMD_IMAGE_VERSION,
        CMD_BOOT_FROM,
        CMD_BOOT_OFFSET,
-       CMD_DATA
+       CMD_DATA,
+       CMD_CSF,
 };
 
 enum imximage_fld_types {
@@ -147,8 +158,7 @@ struct imx_header {
                imx_header_v1_t hdr_v1;
                imx_header_v2_t hdr_v2;
        } header;
-       uint32_t flash_offset;
-} __attribute__((aligned(4096)));
+};
 
 typedef void (*set_dcd_val_t)(struct imx_header *imxhdr,
                                        char *name, int lineno,
index d08e49892d59e028b8080ef0bea361b0dc31ba06..1df6b2051e83738644dd9f9d8ff7eb84476bccbd 100644 (file)
@@ -6,9 +6,6 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
-/* Required to obtain the getline prototype from stdio.h */
-#define _GNU_SOURCE
-
 #include "mkimage.h"
 #include <image.h>
 #include "kwbimage.h"
diff --git a/tools/logos/siemens.bmp b/tools/logos/siemens.bmp
new file mode 100644 (file)
index 0000000..bff2b19
Binary files /dev/null and b/tools/logos/siemens.bmp differ
index f685ff2e30c72617e699f428cfd806a8c9226d98..bbd3041e36f4e5a2ac909fbe101ecfdd91b6345b 100644 (file)
@@ -9,9 +9,6 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
-/* We want the GNU version of basename() */
-#define _GNU_SOURCE
-
 #include <errno.h>
 #include <fcntl.h>
 #include <stdio.h>
index b700b9e8c0eb424b9022a2f21f54201d0cef3dee..7f221013e38cf20fe9bad4a42d1a7aca387e9924 100644 (file)
@@ -137,6 +137,7 @@ main (int argc, char **argv)
        char *ptr;
        int retval = 0;
        struct image_type_params *tparams = NULL;
+       int pad_len = 0;
 
        /* Init Freescale PBL Boot image generation/list support */
        init_pbl_image_type();
@@ -144,6 +145,8 @@ main (int argc, char **argv)
        init_kwb_image_type ();
        /* Init Freescale imx Boot image generation/list support */
        init_imx_image_type ();
+       /* Init Freescale mxs Boot image generation/list support */
+       init_mxs_image_type();
        /* Init FIT image generation/list support */
        init_fit_image_type ();
        /* Init TI OMAP Boot image generation/list support */
@@ -391,7 +394,7 @@ NXTARG:             ;
         * allocate memory for the header itself.
         */
        if (tparams->vrec_header)
-               tparams->vrec_header(&params, tparams);
+               pad_len = tparams->vrec_header(&params, tparams);
        else
                memset(tparams->hdr, 0, tparams->header_size);
 
@@ -463,7 +466,7 @@ NXTARG:             ;
                        /* PBL has special Image format, implements its' own */
                        pbl_load_uboot(ifd, &params);
                } else {
-                       copy_file (ifd, params.datafile, 0);
+                       copy_file(ifd, params.datafile, pad_len);
                }
        }
 
@@ -537,10 +540,19 @@ copy_file (int ifd, const char *datafile, int pad)
        unsigned char *ptr;
        int tail;
        int zero = 0;
+       uint8_t zeros[4096];
        int offset = 0;
        int size;
        struct image_type_params *tparams = mkimage_get_type (params.type);
 
+       if (pad >= sizeof(zeros)) {
+               fprintf(stderr, "%s: Can't pad to %d\n",
+                       params.cmdname, pad);
+               exit(EXIT_FAILURE);
+       }
+
+       memset(zeros, 0, sizeof(zeros));
+
        if (params.vflag) {
                fprintf (stderr, "Adding Image %s\n", datafile);
        }
@@ -598,7 +610,8 @@ copy_file (int ifd, const char *datafile, int pad)
                exit (EXIT_FAILURE);
        }
 
-       if (pad && ((tail = size % 4) != 0)) {
+       tail = size % 4;
+       if ((pad == 1) && (tail != 0)) {
 
                if (write(ifd, (char *)&zero, 4-tail) != 4-tail) {
                        fprintf (stderr, "%s: Write error on %s: %s\n",
@@ -606,6 +619,13 @@ copy_file (int ifd, const char *datafile, int pad)
                                strerror(errno));
                        exit (EXIT_FAILURE);
                }
+       } else if (pad > 1) {
+               if (write(ifd, (char *)&zeros, pad) != pad) {
+                       fprintf(stderr, "%s: Write error on %s: %s\n",
+                               params.cmdname, params.imagefile,
+                               strerror(errno));
+                       exit(EXIT_FAILURE);
+               }
        }
 
        (void) munmap((void *)ptr, sbuf.st_size);
index 950e19067f0a34b25328b5d691bd51d0b56a63fd..af491544e42b5557a1e06c0afd0aef50d6fa010d 100644 (file)
@@ -132,7 +132,10 @@ struct image_type_params {
        /*
         * This callback function will be executed for variable size record
         * It is expected to build this header in memory and return its length
-        * and a pointer to it
+        * and a pointer to it by using image_type_params.header_size and
+        * image_type_params.hdr. The return value shall indicate if an
+        * additional padding should be used when copying the data image
+        * by returning the padding length.
         */
        int (*vrec_header) (struct mkimage_params *,
                struct image_type_params *);
@@ -158,6 +161,7 @@ void init_pbl_image_type(void);
 void init_ais_image_type(void);
 void init_kwb_image_type (void);
 void init_imx_image_type (void);
+void init_mxs_image_type(void);
 void init_default_image_type (void);
 void init_fit_image_type (void);
 void init_ubl_image_type(void);
index 3d9cc10f0fa8761277509954376e3b7dc3fc9234..1060cbf605f82a382a2db32ac46f550dad8f7ccc 100644 (file)
  *
  * 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;
+static uint32_t nand_writesize = 2048;
+static uint32_t nand_oobsize = 64;
+static uint32_t nand_erasesize = 128 * 1024;
 
 /*
  * Sector on which the SigmaTel boot partition (0x53) starts.
  */
-uint32_t sd_sector = 2048;
+static uint32_t sd_sector = 2048;
 
 /*
  * Each of the U-Boot bootstreams is at maximum 1MB big.
@@ -434,7 +434,7 @@ static int mx28_nand_write_firmware(struct mx28_nand_fcb *fcb, int infd,
        return 0;
 }
 
-void usage(void)
+static void usage(void)
 {
        printf(
                "Usage: mxsboot [ops] <type> <infile> <outfile>\n"
@@ -575,7 +575,7 @@ err0:
        return ret;
 }
 
-int parse_ops(int argc, char **argv)
+static int parse_ops(int argc, char **argv)
 {
        int i;
        int tmp;
diff --git a/tools/mxsimage.c b/tools/mxsimage.c
new file mode 100644 (file)
index 0000000..5db19b2
--- /dev/null
@@ -0,0 +1,2347 @@
+/*
+ * Freescale i.MX23/i.MX28 SB image generator
+ *
+ * Copyright (C) 2012-2013 Marek Vasut <marex@denx.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifdef CONFIG_MXS
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+
+#include <openssl/evp.h>
+
+#include "mkimage.h"
+#include "mxsimage.h"
+#include <image.h>
+
+
+/*
+ * DCD block
+ * |-Write to address command block
+ * |  0xf00 == 0xf33d
+ * |  0xba2 == 0xb33f
+ * |-ORR address with mask command block
+ * |  0xf00 |= 0x1337
+ * |-Write to address command block
+ * |  0xba2 == 0xd00d
+ * :
+ */
+#define SB_HAB_DCD_WRITE       0xccUL
+#define SB_HAB_DCD_CHECK       0xcfUL
+#define SB_HAB_DCD_NOOP                0xc0UL
+#define SB_HAB_DCD_MASK_BIT    (1 << 3)
+#define SB_HAB_DCD_SET_BIT     (1 << 4)
+
+/* Addr.n = Value.n */
+#define        SB_DCD_WRITE    \
+       (SB_HAB_DCD_WRITE << 24)
+/* Addr.n &= ~Value.n */
+#define        SB_DCD_ANDC     \
+       ((SB_HAB_DCD_WRITE << 24) | SB_HAB_DCD_SET_BIT)
+/* Addr.n |= Value.n */
+#define        SB_DCD_ORR      \
+       ((SB_HAB_DCD_WRITE << 24) | SB_HAB_DCD_SET_BIT | SB_HAB_DCD_MASK_BIT)
+/* (Addr.n & Value.n) == 0 */
+#define        SB_DCD_CHK_EQZ  \
+       (SB_HAB_DCD_CHECK << 24)
+/* (Addr.n & Value.n) == Value.n */
+#define        SB_DCD_CHK_EQ   \
+       ((SB_HAB_DCD_CHECK << 24) | SB_HAB_DCD_SET_BIT)
+/* (Addr.n & Value.n) != Value.n */
+#define        SB_DCD_CHK_NEQ  \
+       ((SB_HAB_DCD_CHECK << 24) | SB_HAB_DCD_MASK_BIT)
+/* (Addr.n & Value.n) != 0 */
+#define        SB_DCD_CHK_NEZ  \
+       ((SB_HAB_DCD_CHECK << 24) | SB_HAB_DCD_SET_BIT | SB_HAB_DCD_MASK_BIT)
+/* NOP */
+#define        SB_DCD_NOOP     \
+       (SB_HAB_DCD_NOOP << 24)
+
+struct sb_dcd_ctx {
+       struct sb_dcd_ctx               *dcd;
+
+       uint32_t                        id;
+
+       /* The DCD block. */
+       uint32_t                        *payload;
+       /* Size of the whole DCD block. */
+       uint32_t                        size;
+
+       /* Pointer to previous DCD command block. */
+       uint32_t                        *prev_dcd_head;
+};
+
+/*
+ * IMAGE
+ *   |-SECTION
+ *   |    |-CMD
+ *   |    |-CMD
+ *   |    `-CMD
+ *   |-SECTION
+ *   |    |-CMD
+ *   :    :
+ */
+struct sb_cmd_list {
+       char                            *cmd;
+       size_t                          len;
+       unsigned int                    lineno;
+};
+
+struct sb_cmd_ctx {
+       uint32_t                        size;
+
+       struct sb_cmd_ctx               *cmd;
+
+       uint8_t                         *data;
+       uint32_t                        length;
+
+       struct sb_command               payload;
+       struct sb_command               c_payload;
+};
+
+struct sb_section_ctx {
+       uint32_t                        size;
+
+       /* Section flags */
+       unsigned int                    boot:1;
+
+       struct sb_section_ctx           *sect;
+
+       struct sb_cmd_ctx               *cmd_head;
+       struct sb_cmd_ctx               *cmd_tail;
+
+       struct sb_sections_header       payload;
+};
+
+struct sb_image_ctx {
+       unsigned int                    in_section:1;
+       unsigned int                    in_dcd:1;
+       /* Image configuration */
+       unsigned int                    verbose_boot:1;
+       unsigned int                    silent_dump:1;
+       char                            *input_filename;
+       char                            *output_filename;
+       char                            *cfg_filename;
+       uint8_t                         image_key[16];
+
+       /* Number of section in the image */
+       unsigned int                    sect_count;
+       /* Bootable section */
+       unsigned int                    sect_boot;
+       unsigned int                    sect_boot_found:1;
+
+       struct sb_section_ctx           *sect_head;
+       struct sb_section_ctx           *sect_tail;
+
+       struct sb_dcd_ctx               *dcd_head;
+       struct sb_dcd_ctx               *dcd_tail;
+
+       EVP_CIPHER_CTX                  cipher_ctx;
+       EVP_MD_CTX                      md_ctx;
+       uint8_t                         digest[32];
+       struct sb_key_dictionary_key    sb_dict_key;
+
+       struct sb_boot_image_header     payload;
+};
+
+/*
+ * Instruction semantics:
+ * NOOP
+ * TAG [LAST]
+ * LOAD       address file
+ * LOAD  IVT  address IVT_entry_point
+ * FILL address pattern length
+ * JUMP [HAB] address [r0_arg]
+ * CALL [HAB] address [r0_arg]
+ * MODE mode
+ *      For i.MX23, mode = USB/I2C/SPI1_FLASH/SPI2_FLASH/NAND_BCH
+ *                         JTAG/SPI3_EEPROM/SD_SSP0/SD_SSP1
+ *      For i.MX28, mode = USB/I2C/SPI2_FLASH/SPI3_FLASH/NAND_BCH
+ *                         JTAG/SPI2_EEPROM/SD_SSP0/SD_SSP1
+ */
+
+/*
+ * AES libcrypto
+ */
+static int sb_aes_init(struct sb_image_ctx *ictx, uint8_t *iv, int enc)
+{
+       EVP_CIPHER_CTX *ctx = &ictx->cipher_ctx;
+       int ret;
+
+       /* If there is no init vector, init vector is all zeroes. */
+       if (!iv)
+               iv = ictx->image_key;
+
+       EVP_CIPHER_CTX_init(ctx);
+       ret = EVP_CipherInit(ctx, EVP_aes_128_cbc(), ictx->image_key, iv, enc);
+       if (ret == 1)
+               EVP_CIPHER_CTX_set_padding(ctx, 0);
+       return ret;
+}
+
+static int sb_aes_crypt(struct sb_image_ctx *ictx, uint8_t *in_data,
+                       uint8_t *out_data, int in_len)
+{
+       EVP_CIPHER_CTX *ctx = &ictx->cipher_ctx;
+       int ret, outlen;
+       uint8_t *outbuf;
+
+       outbuf = malloc(in_len);
+       if (!outbuf)
+               return -ENOMEM;
+       memset(outbuf, 0, sizeof(in_len));
+
+       ret = EVP_CipherUpdate(ctx, outbuf, &outlen, in_data, in_len);
+       if (!ret) {
+               ret = -EINVAL;
+               goto err;
+       }
+
+       if (out_data)
+               memcpy(out_data, outbuf, outlen);
+
+err:
+       free(outbuf);
+       return ret;
+}
+
+static int sb_aes_deinit(EVP_CIPHER_CTX *ctx)
+{
+       return EVP_CIPHER_CTX_cleanup(ctx);
+}
+
+static int sb_aes_reinit(struct sb_image_ctx *ictx, int enc)
+{
+       int ret;
+       EVP_CIPHER_CTX *ctx = &ictx->cipher_ctx;
+       struct sb_boot_image_header *sb_header = &ictx->payload;
+       uint8_t *iv = sb_header->iv;
+
+       ret = sb_aes_deinit(ctx);
+       if (!ret)
+               return ret;
+       return sb_aes_init(ictx, iv, enc);
+}
+
+/*
+ * CRC32
+ */
+static uint32_t crc32(uint8_t *data, uint32_t len)
+{
+       const uint32_t poly = 0x04c11db7;
+       uint32_t crc32 = 0xffffffff;
+       unsigned int byte, bit;
+
+       for (byte = 0; byte < len; byte++) {
+               crc32 ^= data[byte] << 24;
+
+               for (bit = 8; bit > 0; bit--) {
+                       if (crc32 & (1UL << 31))
+                               crc32 = (crc32 << 1) ^ poly;
+                       else
+                               crc32 = (crc32 << 1);
+               }
+       }
+
+       return crc32;
+}
+
+/*
+ * Debug
+ */
+static void soprintf(struct sb_image_ctx *ictx, const char *fmt, ...)
+{
+       va_list ap;
+
+       if (ictx->silent_dump)
+               return;
+
+       va_start(ap, fmt);
+       vfprintf(stdout, fmt, ap);
+       va_end(ap);
+}
+
+/*
+ * Code
+ */
+static time_t sb_get_timestamp(void)
+{
+       struct tm time_2000 = {
+               .tm_yday        = 1,    /* Jan. 1st */
+               .tm_year        = 100,  /* 2000 */
+       };
+       time_t seconds_to_2000 = mktime(&time_2000);
+       time_t seconds_to_now = time(NULL);
+
+       return seconds_to_now - seconds_to_2000;
+}
+
+static int sb_get_time(time_t time, struct tm *tm)
+{
+       struct tm time_2000 = {
+               .tm_yday        = 1,    /* Jan. 1st */
+               .tm_year        = 0,    /* 1900 */
+       };
+       const time_t seconds_to_2000 = mktime(&time_2000);
+       const time_t seconds_to_now = seconds_to_2000 + time;
+       struct tm *ret;
+       ret = gmtime_r(&seconds_to_now, tm);
+       return ret ? 0 : -EINVAL;
+}
+
+static void sb_encrypt_sb_header(struct sb_image_ctx *ictx)
+{
+       EVP_MD_CTX *md_ctx = &ictx->md_ctx;
+       struct sb_boot_image_header *sb_header = &ictx->payload;
+       uint8_t *sb_header_ptr = (uint8_t *)sb_header;
+
+       /* Encrypt the header, compute the digest. */
+       sb_aes_crypt(ictx, sb_header_ptr, NULL, sizeof(*sb_header));
+       EVP_DigestUpdate(md_ctx, sb_header_ptr, sizeof(*sb_header));
+}
+
+static void sb_encrypt_sb_sections_header(struct sb_image_ctx *ictx)
+{
+       EVP_MD_CTX *md_ctx = &ictx->md_ctx;
+       struct sb_section_ctx *sctx = ictx->sect_head;
+       struct sb_sections_header *shdr;
+       uint8_t *sb_sections_header_ptr;
+       const int size = sizeof(*shdr);
+
+       while (sctx) {
+               shdr = &sctx->payload;
+               sb_sections_header_ptr = (uint8_t *)shdr;
+
+               sb_aes_crypt(ictx, sb_sections_header_ptr,
+                            ictx->sb_dict_key.cbc_mac, size);
+               EVP_DigestUpdate(md_ctx, sb_sections_header_ptr, size);
+
+               sctx = sctx->sect;
+       };
+}
+
+static void sb_encrypt_key_dictionary_key(struct sb_image_ctx *ictx)
+{
+       EVP_MD_CTX *md_ctx = &ictx->md_ctx;
+
+       sb_aes_crypt(ictx, ictx->image_key, ictx->sb_dict_key.key,
+                    sizeof(ictx->sb_dict_key.key));
+       EVP_DigestUpdate(md_ctx, &ictx->sb_dict_key, sizeof(ictx->sb_dict_key));
+}
+
+static void sb_decrypt_key_dictionary_key(struct sb_image_ctx *ictx)
+{
+       EVP_MD_CTX *md_ctx = &ictx->md_ctx;
+
+       EVP_DigestUpdate(md_ctx, &ictx->sb_dict_key, sizeof(ictx->sb_dict_key));
+       sb_aes_crypt(ictx, ictx->sb_dict_key.key, ictx->image_key,
+                    sizeof(ictx->sb_dict_key.key));
+}
+
+static void sb_encrypt_tag(struct sb_image_ctx *ictx,
+               struct sb_cmd_ctx *cctx)
+{
+       EVP_MD_CTX *md_ctx = &ictx->md_ctx;
+       struct sb_command *cmd = &cctx->payload;
+
+       sb_aes_crypt(ictx, (uint8_t *)cmd,
+                    (uint8_t *)&cctx->c_payload, sizeof(*cmd));
+       EVP_DigestUpdate(md_ctx, &cctx->c_payload, sizeof(*cmd));
+}
+
+static int sb_encrypt_image(struct sb_image_ctx *ictx)
+{
+       /* Start image-wide crypto. */
+       EVP_MD_CTX_init(&ictx->md_ctx);
+       EVP_DigestInit(&ictx->md_ctx, EVP_sha1());
+
+       /*
+        * SB image header.
+        */
+       sb_aes_init(ictx, NULL, 1);
+       sb_encrypt_sb_header(ictx);
+
+       /*
+        * SB sections header.
+        */
+       sb_encrypt_sb_sections_header(ictx);
+
+       /*
+        * Key dictionary.
+        */
+       sb_aes_reinit(ictx, 1);
+       sb_encrypt_key_dictionary_key(ictx);
+
+       /*
+        * Section tags.
+        */
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+       struct sb_section_ctx *sctx = ictx->sect_head;
+
+       while (sctx) {
+               cctx = sctx->cmd_head;
+
+               sb_aes_reinit(ictx, 1);
+
+               while (cctx) {
+                       ccmd = &cctx->payload;
+
+                       sb_encrypt_tag(ictx, cctx);
+
+                       if (ccmd->header.tag == ROM_TAG_CMD) {
+                               sb_aes_reinit(ictx, 1);
+                       } else if (ccmd->header.tag == ROM_LOAD_CMD) {
+                               sb_aes_crypt(ictx, cctx->data, cctx->data,
+                                            cctx->length);
+                               EVP_DigestUpdate(&ictx->md_ctx, cctx->data,
+                                                cctx->length);
+                       }
+
+                       cctx = cctx->cmd;
+               }
+
+               sctx = sctx->sect;
+       };
+
+       /*
+        * Dump the SHA1 of the whole image.
+        */
+       sb_aes_reinit(ictx, 1);
+
+       EVP_DigestFinal(&ictx->md_ctx, ictx->digest, NULL);
+       sb_aes_crypt(ictx, ictx->digest, ictx->digest, sizeof(ictx->digest));
+
+       /* Stop the encryption session. */
+       sb_aes_deinit(&ictx->cipher_ctx);
+
+       return 0;
+}
+
+static int sb_load_file(struct sb_cmd_ctx *cctx, char *filename)
+{
+       long real_size, roundup_size;
+       uint8_t *data;
+       long ret;
+       unsigned long size;
+       FILE *fp;
+
+       if (!filename) {
+               fprintf(stderr, "ERR: Missing filename!\n");
+               return -EINVAL;
+       }
+
+       fp = fopen(filename, "r");
+       if (!fp)
+               goto err_open;
+
+       ret = fseek(fp, 0, SEEK_END);
+       if (ret < 0)
+               goto err_file;
+
+       real_size = ftell(fp);
+       if (real_size < 0)
+               goto err_file;
+
+       ret = fseek(fp, 0, SEEK_SET);
+       if (ret < 0)
+               goto err_file;
+
+       roundup_size = roundup(real_size, SB_BLOCK_SIZE);
+       data = calloc(1, roundup_size);
+       if (!data)
+               goto err_file;
+
+       size = fread(data, 1, real_size, fp);
+       if (size != (unsigned long)real_size)
+               goto err_alloc;
+
+       cctx->data = data;
+       cctx->length = roundup_size;
+
+       fclose(fp);
+       return 0;
+
+err_alloc:
+       free(data);
+err_file:
+       fclose(fp);
+err_open:
+       fprintf(stderr, "ERR: Failed to load file \"%s\"\n", filename);
+       return -EINVAL;
+}
+
+static uint8_t sb_command_checksum(struct sb_command *inst)
+{
+       uint8_t *inst_ptr = (uint8_t *)inst;
+       uint8_t csum = 0;
+       unsigned int i;
+
+       for (i = 0; i < sizeof(struct sb_command); i++)
+               csum += inst_ptr[i];
+
+       return csum;
+}
+
+static int sb_token_to_long(char *tok, uint32_t *rid)
+{
+       char *endptr;
+       unsigned long id;
+
+       if (tok[0] != '0' || tok[1] != 'x') {
+               fprintf(stderr, "ERR: Invalid hexadecimal number!\n");
+               return -EINVAL;
+       }
+
+       tok += 2;
+
+       id = strtoul(tok, &endptr, 16);
+       if ((errno == ERANGE && id == ULONG_MAX) || (errno != 0 && id == 0)) {
+               fprintf(stderr, "ERR: Value can't be decoded!\n");
+               return -EINVAL;
+       }
+
+       /* Check for 32-bit overflow. */
+       if (id > 0xffffffff) {
+               fprintf(stderr, "ERR: Value too big!\n");
+               return -EINVAL;
+       }
+
+       if (endptr == tok) {
+               fprintf(stderr, "ERR: Deformed value!\n");
+               return -EINVAL;
+       }
+
+       *rid = (uint32_t)id;
+       return 0;
+}
+
+static int sb_grow_dcd(struct sb_dcd_ctx *dctx, unsigned int inc_size)
+{
+       uint32_t *tmp;
+
+       if (!inc_size)
+               return 0;
+
+       dctx->size += inc_size;
+       tmp = realloc(dctx->payload, dctx->size);
+       if (!tmp)
+               return -ENOMEM;
+
+       dctx->payload = tmp;
+
+       /* Assemble and update the HAB DCD header. */
+       dctx->payload[0] = htonl((SB_HAB_DCD_TAG << 24) |
+                                (dctx->size << 8) |
+                                SB_HAB_VERSION);
+
+       return 0;
+}
+
+static int sb_build_dcd(struct sb_image_ctx *ictx, struct sb_cmd_list *cmd)
+{
+       struct sb_dcd_ctx *dctx;
+
+       char *tok;
+       uint32_t id;
+       int ret;
+
+       dctx = calloc(1, sizeof(*dctx));
+       if (!dctx)
+               return -ENOMEM;
+
+       ret = sb_grow_dcd(dctx, 4);
+       if (ret)
+               goto err_dcd;
+
+       /* Read DCD block number. */
+       tok = strtok(cmd->cmd, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: DCD block without number!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err_dcd;
+       }
+
+       /* Parse the DCD block number. */
+       ret = sb_token_to_long(tok, &id);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Malformed DCD block number!\n",
+                       cmd->lineno);
+               goto err_dcd;
+       }
+
+       dctx->id = id;
+
+       /*
+        * The DCD block is now constructed. Append it to the list.
+        * WARNING: The DCD size is still not computed and will be
+        * updated while parsing it's commands.
+        */
+       if (!ictx->dcd_head) {
+               ictx->dcd_head = dctx;
+               ictx->dcd_tail = dctx;
+       } else {
+               ictx->dcd_tail->dcd = dctx;
+               ictx->dcd_tail = dctx;
+       }
+
+       return 0;
+
+err_dcd:
+       free(dctx->payload);
+       free(dctx);
+       return ret;
+}
+
+static int sb_build_dcd_block(struct sb_image_ctx *ictx,
+                             struct sb_cmd_list *cmd,
+                             uint32_t type)
+{
+       char *tok;
+       uint32_t address, value, length;
+       int ret;
+
+       struct sb_dcd_ctx *dctx = ictx->dcd_tail;
+       uint32_t *dcd;
+
+       if (dctx->prev_dcd_head && (type != SB_DCD_NOOP) &&
+           ((dctx->prev_dcd_head[0] & 0xff0000ff) == type)) {
+               /* Same instruction as before, just append it. */
+               ret = sb_grow_dcd(dctx, 8);
+               if (ret)
+                       return ret;
+       } else if (type == SB_DCD_NOOP) {
+               ret = sb_grow_dcd(dctx, 4);
+               if (ret)
+                       return ret;
+
+               /* Update DCD command block pointer. */
+               dctx->prev_dcd_head = dctx->payload +
+                               dctx->size / sizeof(*dctx->payload) - 1;
+
+               /* NOOP has only 4 bytes and no payload. */
+               goto noop;
+       } else {
+               /*
+                * Either a different instruction block started now
+                * or this is the first instruction block.
+                */
+               ret = sb_grow_dcd(dctx, 12);
+               if (ret)
+                       return ret;
+
+               /* Update DCD command block pointer. */
+               dctx->prev_dcd_head = dctx->payload +
+                               dctx->size / sizeof(*dctx->payload) - 3;
+       }
+
+       dcd = dctx->payload + dctx->size / sizeof(*dctx->payload) - 2;
+
+       /*
+        * Prepare the command.
+        */
+       tok = strtok(cmd->cmd, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: Missing DCD address!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       /* Read DCD destination address. */
+       ret = sb_token_to_long(tok, &address);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Incorrect DCD address!\n",
+                       cmd->lineno);
+               goto err;
+       }
+
+       tok = strtok(NULL, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: Missing DCD value!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       /* Read DCD operation value. */
+       ret = sb_token_to_long(tok, &value);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Incorrect DCD value!\n",
+                       cmd->lineno);
+               goto err;
+       }
+
+       /* Fill in the new DCD entry. */
+       dcd[0] = htonl(address);
+       dcd[1] = htonl(value);
+
+noop:
+       /* Update the DCD command block. */
+       length = dctx->size -
+                ((dctx->prev_dcd_head - dctx->payload) *
+                sizeof(*dctx->payload));
+       dctx->prev_dcd_head[0] = htonl(type | (length << 8));
+
+err:
+       return ret;
+}
+
+static int sb_build_section(struct sb_image_ctx *ictx, struct sb_cmd_list *cmd)
+{
+       struct sb_section_ctx *sctx;
+       struct sb_sections_header *shdr;
+       char *tok;
+       uint32_t bootable = 0;
+       uint32_t id;
+       int ret;
+
+       sctx = calloc(1, sizeof(*sctx));
+       if (!sctx)
+               return -ENOMEM;
+
+       /* Read section number. */
+       tok = strtok(cmd->cmd, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: Section without number!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err_sect;
+       }
+
+       /* Parse the section number. */
+       ret = sb_token_to_long(tok, &id);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Malformed section number!\n",
+                       cmd->lineno);
+               goto err_sect;
+       }
+
+       /* Read section's BOOTABLE flag. */
+       tok = strtok(NULL, " ");
+       if (tok && (strlen(tok) == 8) && !strncmp(tok, "BOOTABLE", 8))
+               bootable = SB_SECTION_FLAG_BOOTABLE;
+
+       sctx->boot = bootable;
+
+       shdr = &sctx->payload;
+       shdr->section_number = id;
+       shdr->section_flags = bootable;
+
+       /*
+        * The section is now constructed. Append it to the list.
+        * WARNING: The section size is still not computed and will
+        * be updated while parsing it's commands.
+        */
+       ictx->sect_count++;
+
+       /* Mark that this section is bootable one. */
+       if (bootable) {
+               if (ictx->sect_boot_found) {
+                       fprintf(stderr,
+                               "#%i WARN: Multiple bootable section!\n",
+                               cmd->lineno);
+               } else {
+                       ictx->sect_boot = id;
+                       ictx->sect_boot_found = 1;
+               }
+       }
+
+       if (!ictx->sect_head) {
+               ictx->sect_head = sctx;
+               ictx->sect_tail = sctx;
+       } else {
+               ictx->sect_tail->sect = sctx;
+               ictx->sect_tail = sctx;
+       }
+
+       return 0;
+
+err_sect:
+       free(sctx);
+       return ret;
+}
+
+static int sb_build_command_nop(struct sb_image_ctx *ictx)
+{
+       struct sb_section_ctx *sctx = ictx->sect_tail;
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+
+       cctx = calloc(1, sizeof(*cctx));
+       if (!cctx)
+               return -ENOMEM;
+
+       ccmd = &cctx->payload;
+
+       /*
+        * Construct the command.
+        */
+       ccmd->header.checksum   = 0x5a;
+       ccmd->header.tag        = ROM_NOP_CMD;
+
+       cctx->size = sizeof(*ccmd);
+
+       /*
+        * Append the command to the last section.
+        */
+       if (!sctx->cmd_head) {
+               sctx->cmd_head = cctx;
+               sctx->cmd_tail = cctx;
+       } else {
+               sctx->cmd_tail->cmd = cctx;
+               sctx->cmd_tail = cctx;
+       }
+
+       return 0;
+}
+
+static int sb_build_command_tag(struct sb_image_ctx *ictx,
+                               struct sb_cmd_list *cmd)
+{
+       struct sb_section_ctx *sctx = ictx->sect_tail;
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+       char *tok;
+
+       cctx = calloc(1, sizeof(*cctx));
+       if (!cctx)
+               return -ENOMEM;
+
+       ccmd = &cctx->payload;
+
+       /*
+        * Prepare the command.
+        */
+       /* Check for the LAST keyword. */
+       tok = strtok(cmd->cmd, " ");
+       if (tok && !strcmp(tok, "LAST"))
+               ccmd->header.flags = ROM_TAG_CMD_FLAG_ROM_LAST_TAG;
+
+       /*
+        * Construct the command.
+        */
+       ccmd->header.checksum   = 0x5a;
+       ccmd->header.tag        = ROM_TAG_CMD;
+
+       cctx->size = sizeof(*ccmd);
+
+       /*
+        * Append the command to the last section.
+        */
+       if (!sctx->cmd_head) {
+               sctx->cmd_head = cctx;
+               sctx->cmd_tail = cctx;
+       } else {
+               sctx->cmd_tail->cmd = cctx;
+               sctx->cmd_tail = cctx;
+       }
+
+       return 0;
+}
+
+static int sb_build_command_load(struct sb_image_ctx *ictx,
+                                struct sb_cmd_list *cmd)
+{
+       struct sb_section_ctx *sctx = ictx->sect_tail;
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+       char *tok;
+       int ret, is_ivt = 0, is_dcd = 0;
+       uint32_t dest, dcd = 0;
+
+       cctx = calloc(1, sizeof(*cctx));
+       if (!cctx)
+               return -ENOMEM;
+
+       ccmd = &cctx->payload;
+
+       /*
+        * Prepare the command.
+        */
+       tok = strtok(cmd->cmd, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: Missing LOAD address or 'IVT'!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       /* Check for "IVT" flag. */
+       if (!strcmp(tok, "IVT"))
+               is_ivt = 1;
+       if (!strcmp(tok, "DCD"))
+               is_dcd = 1;
+       if (is_ivt || is_dcd) {
+               tok = strtok(NULL, " ");
+               if (!tok) {
+                       fprintf(stderr, "#%i ERR: Missing LOAD address!\n",
+                               cmd->lineno);
+                       ret = -EINVAL;
+                       goto err;
+               }
+       }
+
+       /* Read load destination address. */
+       ret = sb_token_to_long(tok, &dest);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Incorrect LOAD address!\n",
+                       cmd->lineno);
+               goto err;
+       }
+
+       /* Read filename or IVT entrypoint or DCD block ID. */
+       tok = strtok(NULL, " ");
+       if (!tok) {
+               fprintf(stderr,
+                       "#%i ERR: Missing LOAD filename or IVT ep or DCD block ID!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       if (is_ivt) {
+               /* Handle IVT. */
+               struct sb_ivt_header *ivt;
+               uint32_t ivtep;
+               ret = sb_token_to_long(tok, &ivtep);
+
+               if (ret) {
+                       fprintf(stderr,
+                               "#%i ERR: Incorrect IVT entry point!\n",
+                               cmd->lineno);
+                       goto err;
+               }
+
+               ivt = calloc(1, sizeof(*ivt));
+               if (!ivt) {
+                       ret = -ENOMEM;
+                       goto err;
+               }
+
+               ivt->header = sb_hab_ivt_header();
+               ivt->entry = ivtep;
+               ivt->self = dest;
+
+               cctx->data = (uint8_t *)ivt;
+               cctx->length = sizeof(*ivt);
+       } else if (is_dcd) {
+               struct sb_dcd_ctx *dctx = ictx->dcd_head;
+               uint32_t dcdid;
+               uint8_t *payload;
+               uint32_t asize;
+               ret = sb_token_to_long(tok, &dcdid);
+
+               if (ret) {
+                       fprintf(stderr,
+                               "#%i ERR: Incorrect DCD block ID!\n",
+                               cmd->lineno);
+                       goto err;
+               }
+
+               while (dctx) {
+                       if (dctx->id == dcdid)
+                               break;
+                       dctx = dctx->dcd;
+               }
+
+               if (!dctx) {
+                       fprintf(stderr, "#%i ERR: DCD block %08x not found!\n",
+                               cmd->lineno, dcdid);
+                       goto err;
+               }
+
+               asize = roundup(dctx->size, SB_BLOCK_SIZE);
+               payload = calloc(1, asize);
+               if (!payload) {
+                       ret = -ENOMEM;
+                       goto err;
+               }
+
+               memcpy(payload, dctx->payload, dctx->size);
+
+               cctx->data = payload;
+               cctx->length = asize;
+
+               /* Set the Load DCD flag. */
+               dcd = ROM_LOAD_CMD_FLAG_DCD_LOAD;
+       } else {
+               /* Regular LOAD of a file. */
+               ret = sb_load_file(cctx, tok);
+               if (ret) {
+                       fprintf(stderr, "#%i ERR: Cannot load '%s'!\n",
+                               cmd->lineno, tok);
+                       goto err;
+               }
+       }
+
+       if (cctx->length & (SB_BLOCK_SIZE - 1)) {
+               fprintf(stderr, "#%i ERR: Unaligned payload!\n",
+                       cmd->lineno);
+       }
+
+       /*
+        * Construct the command.
+        */
+       ccmd->header.checksum   = 0x5a;
+       ccmd->header.tag        = ROM_LOAD_CMD;
+       ccmd->header.flags      = dcd;
+
+       ccmd->load.address      = dest;
+       ccmd->load.count        = cctx->length;
+       ccmd->load.crc32        = crc32(cctx->data, cctx->length);
+
+       cctx->size = sizeof(*ccmd) + cctx->length;
+
+       /*
+        * Append the command to the last section.
+        */
+       if (!sctx->cmd_head) {
+               sctx->cmd_head = cctx;
+               sctx->cmd_tail = cctx;
+       } else {
+               sctx->cmd_tail->cmd = cctx;
+               sctx->cmd_tail = cctx;
+       }
+
+       return 0;
+
+err:
+       free(cctx);
+       return ret;
+}
+
+static int sb_build_command_fill(struct sb_image_ctx *ictx,
+                                struct sb_cmd_list *cmd)
+{
+       struct sb_section_ctx *sctx = ictx->sect_tail;
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+       char *tok;
+       uint32_t address, pattern, length;
+       int ret;
+
+       cctx = calloc(1, sizeof(*cctx));
+       if (!cctx)
+               return -ENOMEM;
+
+       ccmd = &cctx->payload;
+
+       /*
+        * Prepare the command.
+        */
+       tok = strtok(cmd->cmd, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: Missing FILL address!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       /* Read fill destination address. */
+       ret = sb_token_to_long(tok, &address);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Incorrect FILL address!\n",
+                       cmd->lineno);
+               goto err;
+       }
+
+       tok = strtok(NULL, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: Missing FILL pattern!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       /* Read fill pattern address. */
+       ret = sb_token_to_long(tok, &pattern);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Incorrect FILL pattern!\n",
+                       cmd->lineno);
+               goto err;
+       }
+
+       tok = strtok(NULL, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: Missing FILL length!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       /* Read fill pattern address. */
+       ret = sb_token_to_long(tok, &length);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Incorrect FILL length!\n",
+                       cmd->lineno);
+               goto err;
+       }
+
+       /*
+        * Construct the command.
+        */
+       ccmd->header.checksum   = 0x5a;
+       ccmd->header.tag        = ROM_FILL_CMD;
+
+       ccmd->fill.address      = address;
+       ccmd->fill.count        = length;
+       ccmd->fill.pattern      = pattern;
+
+       cctx->size = sizeof(*ccmd);
+
+       /*
+        * Append the command to the last section.
+        */
+       if (!sctx->cmd_head) {
+               sctx->cmd_head = cctx;
+               sctx->cmd_tail = cctx;
+       } else {
+               sctx->cmd_tail->cmd = cctx;
+               sctx->cmd_tail = cctx;
+       }
+
+       return 0;
+
+err:
+       free(cctx);
+       return ret;
+}
+
+static int sb_build_command_jump_call(struct sb_image_ctx *ictx,
+                                     struct sb_cmd_list *cmd,
+                                     unsigned int is_call)
+{
+       struct sb_section_ctx *sctx = ictx->sect_tail;
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+       char *tok;
+       uint32_t dest, arg = 0x0;
+       uint32_t hab = 0;
+       int ret;
+       const char *cmdname = is_call ? "CALL" : "JUMP";
+
+       cctx = calloc(1, sizeof(*cctx));
+       if (!cctx)
+               return -ENOMEM;
+
+       ccmd = &cctx->payload;
+
+       /*
+        * Prepare the command.
+        */
+       tok = strtok(cmd->cmd, " ");
+       if (!tok) {
+               fprintf(stderr,
+                       "#%i ERR: Missing %s address or 'HAB'!\n",
+                       cmd->lineno, cmdname);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       /* Check for "HAB" flag. */
+       if (!strcmp(tok, "HAB")) {
+               hab = is_call ? ROM_CALL_CMD_FLAG_HAB : ROM_JUMP_CMD_FLAG_HAB;
+               tok = strtok(NULL, " ");
+               if (!tok) {
+                       fprintf(stderr, "#%i ERR: Missing %s address!\n",
+                               cmd->lineno, cmdname);
+                       ret = -EINVAL;
+                       goto err;
+               }
+       }
+       /* Read load destination address. */
+       ret = sb_token_to_long(tok, &dest);
+       if (ret) {
+               fprintf(stderr, "#%i ERR: Incorrect %s address!\n",
+                       cmd->lineno, cmdname);
+               goto err;
+       }
+
+       tok = strtok(NULL, " ");
+       if (tok) {
+               ret = sb_token_to_long(tok, &arg);
+               if (ret) {
+                       fprintf(stderr,
+                               "#%i ERR: Incorrect %s argument!\n",
+                               cmd->lineno, cmdname);
+                       goto err;
+               }
+       }
+
+       /*
+        * Construct the command.
+        */
+       ccmd->header.checksum   = 0x5a;
+       ccmd->header.tag        = is_call ? ROM_CALL_CMD : ROM_JUMP_CMD;
+       ccmd->header.flags      = hab;
+
+       ccmd->call.address      = dest;
+       ccmd->call.argument     = arg;
+
+       cctx->size = sizeof(*ccmd);
+
+       /*
+        * Append the command to the last section.
+        */
+       if (!sctx->cmd_head) {
+               sctx->cmd_head = cctx;
+               sctx->cmd_tail = cctx;
+       } else {
+               sctx->cmd_tail->cmd = cctx;
+               sctx->cmd_tail = cctx;
+       }
+
+       return 0;
+
+err:
+       free(cctx);
+       return ret;
+}
+
+static int sb_build_command_jump(struct sb_image_ctx *ictx,
+                                struct sb_cmd_list *cmd)
+{
+       return sb_build_command_jump_call(ictx, cmd, 0);
+}
+
+static int sb_build_command_call(struct sb_image_ctx *ictx,
+                                struct sb_cmd_list *cmd)
+{
+       return sb_build_command_jump_call(ictx, cmd, 1);
+}
+
+static int sb_build_command_mode(struct sb_image_ctx *ictx,
+                                struct sb_cmd_list *cmd)
+{
+       struct sb_section_ctx *sctx = ictx->sect_tail;
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+       char *tok;
+       int ret;
+       unsigned int i;
+       uint32_t mode = 0xffffffff;
+
+       cctx = calloc(1, sizeof(*cctx));
+       if (!cctx)
+               return -ENOMEM;
+
+       ccmd = &cctx->payload;
+
+       /*
+        * Prepare the command.
+        */
+       tok = strtok(cmd->cmd, " ");
+       if (!tok) {
+               fprintf(stderr, "#%i ERR: Missing MODE boot mode argument!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(modetable); i++) {
+               if (!strcmp(tok, modetable[i].name)) {
+                       mode = modetable[i].mode;
+                       break;
+               }
+
+               if (!modetable[i].altname)
+                       continue;
+
+               if (!strcmp(tok, modetable[i].altname)) {
+                       mode = modetable[i].mode;
+                       break;
+               }
+       }
+
+       if (mode == 0xffffffff) {
+               fprintf(stderr, "#%i ERR: Invalid MODE boot mode argument!\n",
+                       cmd->lineno);
+               ret = -EINVAL;
+               goto err;
+       }
+
+       /*
+        * Construct the command.
+        */
+       ccmd->header.checksum   = 0x5a;
+       ccmd->header.tag        = ROM_MODE_CMD;
+
+       ccmd->mode.mode         = mode;
+
+       cctx->size = sizeof(*ccmd);
+
+       /*
+        * Append the command to the last section.
+        */
+       if (!sctx->cmd_head) {
+               sctx->cmd_head = cctx;
+               sctx->cmd_tail = cctx;
+       } else {
+               sctx->cmd_tail->cmd = cctx;
+               sctx->cmd_tail = cctx;
+       }
+
+       return 0;
+
+err:
+       free(cctx);
+       return ret;
+}
+
+static int sb_prefill_image_header(struct sb_image_ctx *ictx)
+{
+       struct sb_boot_image_header *hdr = &ictx->payload;
+
+       /* Fill signatures */
+       memcpy(hdr->signature1, "STMP", 4);
+       memcpy(hdr->signature2, "sgtl", 4);
+
+       /* SB Image version 1.1 */
+       hdr->major_version = SB_VERSION_MAJOR;
+       hdr->minor_version = SB_VERSION_MINOR;
+
+       /* Boot image major version */
+       hdr->product_version.major = htons(0x999);
+       hdr->product_version.minor = htons(0x999);
+       hdr->product_version.revision = htons(0x999);
+       /* Boot image major version */
+       hdr->component_version.major = htons(0x999);
+       hdr->component_version.minor = htons(0x999);
+       hdr->component_version.revision = htons(0x999);
+
+       /* Drive tag must be 0x0 for i.MX23 */
+       hdr->drive_tag = 0;
+
+       hdr->header_blocks =
+               sizeof(struct sb_boot_image_header) / SB_BLOCK_SIZE;
+       hdr->section_header_size =
+               sizeof(struct sb_sections_header) / SB_BLOCK_SIZE;
+       hdr->timestamp_us = sb_get_timestamp() * 1000000;
+
+       /* FIXME -- add proper config option */
+       hdr->flags = ictx->verbose_boot ? SB_IMAGE_FLAG_VERBOSE : 0,
+
+       /* FIXME -- We support only default key */
+       hdr->key_count = 1;
+
+       return 0;
+}
+
+static int sb_postfill_image_header(struct sb_image_ctx *ictx)
+{
+       struct sb_boot_image_header *hdr = &ictx->payload;
+       struct sb_section_ctx *sctx = ictx->sect_head;
+       uint32_t kd_size, sections_blocks;
+       EVP_MD_CTX md_ctx;
+
+       /* The main SB header size in blocks. */
+       hdr->image_blocks = hdr->header_blocks;
+
+       /* Size of the key dictionary, which has single zero entry. */
+       kd_size = hdr->key_count * sizeof(struct sb_key_dictionary_key);
+       hdr->image_blocks += kd_size / SB_BLOCK_SIZE;
+
+       /* Now count the payloads. */
+       hdr->section_count = ictx->sect_count;
+       while (sctx) {
+               hdr->image_blocks += sctx->size / SB_BLOCK_SIZE;
+               sctx = sctx->sect;
+       }
+
+       if (!ictx->sect_boot_found) {
+               fprintf(stderr, "ERR: No bootable section selected!\n");
+               return -EINVAL;
+       }
+       hdr->first_boot_section_id = ictx->sect_boot;
+
+       /* The n * SB section size in blocks. */
+       sections_blocks = hdr->section_count * hdr->section_header_size;
+       hdr->image_blocks += sections_blocks;
+
+       /* Key dictionary offset. */
+       hdr->key_dictionary_block = hdr->header_blocks + sections_blocks;
+
+       /* Digest of the whole image. */
+       hdr->image_blocks += 2;
+
+       /* Pointer past the dictionary. */
+       hdr->first_boot_tag_block =
+               hdr->key_dictionary_block + kd_size / SB_BLOCK_SIZE;
+
+       /* Compute header digest. */
+       EVP_MD_CTX_init(&md_ctx);
+
+       EVP_DigestInit(&md_ctx, EVP_sha1());
+       EVP_DigestUpdate(&md_ctx, hdr->signature1,
+                        sizeof(struct sb_boot_image_header) -
+                        sizeof(hdr->digest));
+       EVP_DigestFinal(&md_ctx, hdr->digest, NULL);
+
+       return 0;
+}
+
+static int sb_fixup_sections_and_tags(struct sb_image_ctx *ictx)
+{
+       /* Fixup the placement of sections. */
+       struct sb_boot_image_header *ihdr = &ictx->payload;
+       struct sb_section_ctx *sctx = ictx->sect_head;
+       struct sb_sections_header *shdr;
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+       uint32_t offset = ihdr->first_boot_tag_block;
+
+       while (sctx) {
+               shdr = &sctx->payload;
+
+               /* Fill in the section TAG offset. */
+               shdr->section_offset = offset + 1;
+               offset += shdr->section_size;
+
+               /* Section length is measured from the TAG block. */
+               shdr->section_size--;
+
+               /* Fixup the TAG command. */
+               cctx = sctx->cmd_head;
+               while (cctx) {
+                       ccmd = &cctx->payload;
+                       if (ccmd->header.tag == ROM_TAG_CMD) {
+                               ccmd->tag.section_number = shdr->section_number;
+                               ccmd->tag.section_length = shdr->section_size;
+                               ccmd->tag.section_flags = shdr->section_flags;
+                       }
+
+                       /* Update the command checksum. */
+                       ccmd->header.checksum = sb_command_checksum(ccmd);
+
+                       cctx = cctx->cmd;
+               }
+
+               sctx = sctx->sect;
+       }
+
+       return 0;
+}
+
+static int sb_parse_line(struct sb_image_ctx *ictx, struct sb_cmd_list *cmd)
+{
+       char *tok;
+       char *line = cmd->cmd;
+       char *rptr;
+       int ret;
+
+       /* Analyze the identifier on this line first. */
+       tok = strtok_r(line, " ", &rptr);
+       if (!tok || (strlen(tok) == 0)) {
+               fprintf(stderr, "#%i ERR: Invalid line!\n", cmd->lineno);
+               return -EINVAL;
+       }
+
+       cmd->cmd = rptr;
+
+       /* DCD */
+       if (!strcmp(tok, "DCD")) {
+               ictx->in_section = 0;
+               ictx->in_dcd = 1;
+               sb_build_dcd(ictx, cmd);
+               return 0;
+       }
+
+       /* Section */
+       if (!strcmp(tok, "SECTION")) {
+               ictx->in_section = 1;
+               ictx->in_dcd = 0;
+               sb_build_section(ictx, cmd);
+               return 0;
+       }
+
+       if (!ictx->in_section && !ictx->in_dcd) {
+               fprintf(stderr, "#%i ERR: Data outside of a section!\n",
+                       cmd->lineno);
+               return -EINVAL;
+       }
+
+       if (ictx->in_section) {
+               /* Section commands */
+               if (!strcmp(tok, "NOP")) {
+                       ret = sb_build_command_nop(ictx);
+               } else if (!strcmp(tok, "TAG")) {
+                       ret = sb_build_command_tag(ictx, cmd);
+               } else if (!strcmp(tok, "LOAD")) {
+                       ret = sb_build_command_load(ictx, cmd);
+               } else if (!strcmp(tok, "FILL")) {
+                       ret = sb_build_command_fill(ictx, cmd);
+               } else if (!strcmp(tok, "JUMP")) {
+                       ret = sb_build_command_jump(ictx, cmd);
+               } else if (!strcmp(tok, "CALL")) {
+                       ret = sb_build_command_call(ictx, cmd);
+               } else if (!strcmp(tok, "MODE")) {
+                       ret = sb_build_command_mode(ictx, cmd);
+               } else {
+                       fprintf(stderr,
+                               "#%i ERR: Unsupported instruction '%s'!\n",
+                               cmd->lineno, tok);
+                       return -ENOTSUP;
+               }
+       } else if (ictx->in_dcd) {
+               char *lptr;
+               uint32_t ilen = '1';
+
+               tok = strtok_r(tok, ".", &lptr);
+               if (!tok || (strlen(tok) == 0) || (lptr && strlen(lptr) != 1)) {
+                       fprintf(stderr, "#%i ERR: Invalid line!\n",
+                               cmd->lineno);
+                       return -EINVAL;
+               }
+
+               if (lptr &&
+                   (lptr[0] != '1' && lptr[0] != '2' && lptr[0] != '4')) {
+                       fprintf(stderr, "#%i ERR: Invalid instruction width!\n",
+                               cmd->lineno);
+                       return -EINVAL;
+               }
+
+               if (lptr)
+                       ilen = lptr[0] - '1';
+
+               /* DCD commands */
+               if (!strcmp(tok, "WRITE")) {
+                       ret = sb_build_dcd_block(ictx, cmd,
+                                                SB_DCD_WRITE | ilen);
+               } else if (!strcmp(tok, "ANDC")) {
+                       ret = sb_build_dcd_block(ictx, cmd,
+                                                SB_DCD_ANDC | ilen);
+               } else if (!strcmp(tok, "ORR")) {
+                       ret = sb_build_dcd_block(ictx, cmd,
+                                                SB_DCD_ORR | ilen);
+               } else if (!strcmp(tok, "EQZ")) {
+                       ret = sb_build_dcd_block(ictx, cmd,
+                                                SB_DCD_CHK_EQZ | ilen);
+               } else if (!strcmp(tok, "EQ")) {
+                       ret = sb_build_dcd_block(ictx, cmd,
+                                                SB_DCD_CHK_EQ | ilen);
+               } else if (!strcmp(tok, "NEQ")) {
+                       ret = sb_build_dcd_block(ictx, cmd,
+                                                SB_DCD_CHK_NEQ | ilen);
+               } else if (!strcmp(tok, "NEZ")) {
+                       ret = sb_build_dcd_block(ictx, cmd,
+                                                SB_DCD_CHK_NEZ | ilen);
+               } else if (!strcmp(tok, "NOOP")) {
+                       ret = sb_build_dcd_block(ictx, cmd, SB_DCD_NOOP);
+               } else {
+                       fprintf(stderr,
+                               "#%i ERR: Unsupported instruction '%s'!\n",
+                               cmd->lineno, tok);
+                       return -ENOTSUP;
+               }
+       } else {
+               fprintf(stderr, "#%i ERR: Unsupported instruction '%s'!\n",
+                       cmd->lineno, tok);
+               return -ENOTSUP;
+       }
+
+       /*
+        * Here we have at least one section with one command, otherwise we
+        * would have failed already higher above.
+        *
+        * FIXME -- should the updating happen here ?
+        */
+       if (ictx->in_section && !ret) {
+               ictx->sect_tail->size += ictx->sect_tail->cmd_tail->size;
+               ictx->sect_tail->payload.section_size =
+                       ictx->sect_tail->size / SB_BLOCK_SIZE;
+       }
+
+       return ret;
+}
+
+static int sb_load_cmdfile(struct sb_image_ctx *ictx)
+{
+       struct sb_cmd_list cmd;
+       int lineno = 1;
+       FILE *fp;
+       char *line = NULL;
+       ssize_t rlen;
+       size_t len;
+
+       fp = fopen(ictx->cfg_filename, "r");
+       if (!fp)
+               goto err_file;
+
+       while ((rlen = getline(&line, &len, fp)) > 0) {
+               memset(&cmd, 0, sizeof(cmd));
+
+               /* Strip the trailing newline. */
+               line[rlen - 1] = '\0';
+
+               cmd.cmd = line;
+               cmd.len = rlen;
+               cmd.lineno = lineno++;
+
+               sb_parse_line(ictx, &cmd);
+       }
+
+       free(line);
+
+       fclose(fp);
+
+       return 0;
+
+err_file:
+       fclose(fp);
+       fprintf(stderr, "ERR: Failed to load file \"%s\"\n",
+               ictx->cfg_filename);
+       return -EINVAL;
+}
+
+static int sb_build_tree_from_cfg(struct sb_image_ctx *ictx)
+{
+       int ret;
+
+       ret = sb_load_cmdfile(ictx);
+       if (ret)
+               return ret;
+
+       ret = sb_prefill_image_header(ictx);
+       if (ret)
+               return ret;
+
+       ret = sb_postfill_image_header(ictx);
+       if (ret)
+               return ret;
+
+       ret = sb_fixup_sections_and_tags(ictx);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+static int sb_verify_image_header(struct sb_image_ctx *ictx,
+                                 FILE *fp, long fsize)
+{
+       /* Verify static fields in the image header. */
+       struct sb_boot_image_header *hdr = &ictx->payload;
+       const char *stat[2] = { "[PASS]", "[FAIL]" };
+       struct tm tm;
+       int sz, ret = 0;
+       unsigned char digest[20];
+       EVP_MD_CTX md_ctx;
+       unsigned long size;
+
+       /* Start image-wide crypto. */
+       EVP_MD_CTX_init(&ictx->md_ctx);
+       EVP_DigestInit(&ictx->md_ctx, EVP_sha1());
+
+       soprintf(ictx, "---------- Verifying SB Image Header ----------\n");
+
+       size = fread(&ictx->payload, 1, sizeof(ictx->payload), fp);
+       if (size != sizeof(ictx->payload)) {
+               fprintf(stderr, "ERR: SB image header too short!\n");
+               return -EINVAL;
+       }
+
+       /* Compute header digest. */
+       EVP_MD_CTX_init(&md_ctx);
+       EVP_DigestInit(&md_ctx, EVP_sha1());
+       EVP_DigestUpdate(&md_ctx, hdr->signature1,
+                        sizeof(struct sb_boot_image_header) -
+                        sizeof(hdr->digest));
+       EVP_DigestFinal(&md_ctx, digest, NULL);
+
+       sb_aes_init(ictx, NULL, 1);
+       sb_encrypt_sb_header(ictx);
+
+       if (memcmp(digest, hdr->digest, 20))
+               ret = -EINVAL;
+       soprintf(ictx, "%s Image header checksum:        %s\n", stat[!!ret],
+                ret ? "BAD" : "OK");
+       if (ret)
+               return ret;
+
+       if (memcmp(hdr->signature1, "STMP", 4) ||
+           memcmp(hdr->signature2, "sgtl", 4))
+               ret = -EINVAL;
+       soprintf(ictx, "%s Signatures:                   '%.4s' '%.4s'\n",
+                stat[!!ret], hdr->signature1, hdr->signature2);
+       if (ret)
+               return ret;
+
+       if ((hdr->major_version != SB_VERSION_MAJOR) ||
+           ((hdr->minor_version != 1) && (hdr->minor_version != 2)))
+               ret = -EINVAL;
+       soprintf(ictx, "%s Image version:                v%i.%i\n", stat[!!ret],
+                hdr->major_version, hdr->minor_version);
+       if (ret)
+               return ret;
+
+       ret = sb_get_time(hdr->timestamp_us / 1000000, &tm);
+       soprintf(ictx,
+                "%s Creation time:                %02i:%02i:%02i %02i/%02i/%04i\n",
+                stat[!!ret], tm.tm_hour, tm.tm_min, tm.tm_sec,
+                tm.tm_mday, tm.tm_mon, tm.tm_year + 2000);
+       if (ret)
+               return ret;
+
+       soprintf(ictx, "%s Product version:              %x.%x.%x\n", stat[0],
+                ntohs(hdr->product_version.major),
+                ntohs(hdr->product_version.minor),
+                ntohs(hdr->product_version.revision));
+       soprintf(ictx, "%s Component version:            %x.%x.%x\n", stat[0],
+                ntohs(hdr->component_version.major),
+                ntohs(hdr->component_version.minor),
+                ntohs(hdr->component_version.revision));
+
+       if (hdr->flags & ~SB_IMAGE_FLAG_VERBOSE)
+               ret = -EINVAL;
+       soprintf(ictx, "%s Image flags:                  %s\n", stat[!!ret],
+                hdr->flags & SB_IMAGE_FLAG_VERBOSE ? "Verbose_boot" : "");
+       if (ret)
+               return ret;
+
+       if (hdr->drive_tag != 0)
+               ret = -EINVAL;
+       soprintf(ictx, "%s Drive tag:                    %i\n", stat[!!ret],
+                hdr->drive_tag);
+       if (ret)
+               return ret;
+
+       sz = sizeof(struct sb_boot_image_header) / SB_BLOCK_SIZE;
+       if (hdr->header_blocks != sz)
+               ret = -EINVAL;
+       soprintf(ictx, "%s Image header size (blocks):   %i\n", stat[!!ret],
+                hdr->header_blocks);
+       if (ret)
+               return ret;
+
+       sz = sizeof(struct sb_sections_header) / SB_BLOCK_SIZE;
+       if (hdr->section_header_size != sz)
+               ret = -EINVAL;
+       soprintf(ictx, "%s Section header size (blocks): %i\n", stat[!!ret],
+                hdr->section_header_size);
+       if (ret)
+               return ret;
+
+       soprintf(ictx, "%s Sections count:               %i\n", stat[!!ret],
+                hdr->section_count);
+       soprintf(ictx, "%s First bootable section        %i\n", stat[!!ret],
+                hdr->first_boot_section_id);
+
+       if (hdr->image_blocks != fsize / SB_BLOCK_SIZE)
+               ret = -EINVAL;
+       soprintf(ictx, "%s Image size (blocks):          %i\n", stat[!!ret],
+                hdr->image_blocks);
+       if (ret)
+               return ret;
+
+       sz = hdr->header_blocks + hdr->section_header_size * hdr->section_count;
+       if (hdr->key_dictionary_block != sz)
+               ret = -EINVAL;
+       soprintf(ictx, "%s Key dict offset (blocks):     %i\n", stat[!!ret],
+                hdr->key_dictionary_block);
+       if (ret)
+               return ret;
+
+       if (hdr->key_count != 1)
+               ret = -EINVAL;
+       soprintf(ictx, "%s Number of encryption keys:    %i\n", stat[!!ret],
+                hdr->key_count);
+       if (ret)
+               return ret;
+
+       sz = hdr->header_blocks + hdr->section_header_size * hdr->section_count;
+       sz += hdr->key_count *
+               sizeof(struct sb_key_dictionary_key) / SB_BLOCK_SIZE;
+       if (hdr->first_boot_tag_block != (unsigned)sz)
+               ret = -EINVAL;
+       soprintf(ictx, "%s First TAG block (blocks):     %i\n", stat[!!ret],
+                hdr->first_boot_tag_block);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+static void sb_decrypt_tag(struct sb_image_ctx *ictx,
+               struct sb_cmd_ctx *cctx)
+{
+       EVP_MD_CTX *md_ctx = &ictx->md_ctx;
+       struct sb_command *cmd = &cctx->payload;
+
+       sb_aes_crypt(ictx, (uint8_t *)&cctx->c_payload,
+                    (uint8_t *)&cctx->payload, sizeof(*cmd));
+       EVP_DigestUpdate(md_ctx, &cctx->c_payload, sizeof(*cmd));
+}
+
+static int sb_verify_command(struct sb_image_ctx *ictx,
+                            struct sb_cmd_ctx *cctx, FILE *fp,
+                            unsigned long *tsize)
+{
+       struct sb_command *ccmd = &cctx->payload;
+       unsigned long size, asize;
+       char *csum, *flag = "";
+       int ret;
+       unsigned int i;
+       uint8_t csn, csc = ccmd->header.checksum;
+       ccmd->header.checksum = 0x5a;
+       csn = sb_command_checksum(ccmd);
+       ccmd->header.checksum = csc;
+
+       if (csc == csn)
+               ret = 0;
+       else
+               ret = -EINVAL;
+       csum = ret ? "checksum BAD" : "checksum OK";
+
+       switch (ccmd->header.tag) {
+       case ROM_NOP_CMD:
+               soprintf(ictx, " NOOP # %s\n", csum);
+               return ret;
+       case ROM_TAG_CMD:
+               if (ccmd->header.flags & ROM_TAG_CMD_FLAG_ROM_LAST_TAG)
+                       flag = "LAST";
+               soprintf(ictx, " TAG %s # %s\n", flag, csum);
+               sb_aes_reinit(ictx, 0);
+               return ret;
+       case ROM_LOAD_CMD:
+               soprintf(ictx, " LOAD addr=0x%08x length=0x%08x # %s\n",
+                        ccmd->load.address, ccmd->load.count, csum);
+
+               cctx->length = ccmd->load.count;
+               asize = roundup(cctx->length, SB_BLOCK_SIZE);
+               cctx->data = malloc(asize);
+               if (!cctx->data)
+                       return -ENOMEM;
+
+               size = fread(cctx->data, 1, asize, fp);
+               if (size != asize) {
+                       fprintf(stderr,
+                               "ERR: SB LOAD command payload too short!\n");
+                       return -EINVAL;
+               }
+
+               *tsize += size;
+
+               EVP_DigestUpdate(&ictx->md_ctx, cctx->data, asize);
+               sb_aes_crypt(ictx, cctx->data, cctx->data, asize);
+
+               if (ccmd->load.crc32 != crc32(cctx->data, asize)) {
+                       fprintf(stderr,
+                               "ERR: SB LOAD command payload CRC32 invalid!\n");
+                       return -EINVAL;
+               }
+               return 0;
+       case ROM_FILL_CMD:
+               soprintf(ictx,
+                        " FILL addr=0x%08x length=0x%08x pattern=0x%08x # %s\n",
+                        ccmd->fill.address, ccmd->fill.count,
+                        ccmd->fill.pattern, csum);
+               return 0;
+       case ROM_JUMP_CMD:
+               if (ccmd->header.flags & ROM_JUMP_CMD_FLAG_HAB)
+                       flag = " HAB";
+               soprintf(ictx,
+                        " JUMP%s addr=0x%08x r0_arg=0x%08x # %s\n",
+                        flag, ccmd->fill.address, ccmd->jump.argument, csum);
+               return 0;
+       case ROM_CALL_CMD:
+               if (ccmd->header.flags & ROM_CALL_CMD_FLAG_HAB)
+                       flag = " HAB";
+               soprintf(ictx,
+                        " CALL%s addr=0x%08x r0_arg=0x%08x # %s\n",
+                        flag, ccmd->fill.address, ccmd->jump.argument, csum);
+               return 0;
+       case ROM_MODE_CMD:
+               for (i = 0; i < ARRAY_SIZE(modetable); i++) {
+                       if (ccmd->mode.mode == modetable[i].mode) {
+                               soprintf(ictx, " MODE %s # %s\n",
+                                        modetable[i].name, csum);
+                               break;
+                       }
+               }
+               fprintf(stderr, " MODE !INVALID! # %s\n", csum);
+               return 0;
+       }
+
+       return ret;
+}
+
+static int sb_verify_commands(struct sb_image_ctx *ictx,
+                             struct sb_section_ctx *sctx, FILE *fp)
+{
+       unsigned long size, tsize = 0;
+       struct sb_cmd_ctx *cctx;
+       int ret;
+
+       sb_aes_reinit(ictx, 0);
+
+       while (tsize < sctx->size) {
+               cctx = calloc(1, sizeof(*cctx));
+               if (!cctx)
+                       return -ENOMEM;
+               if (!sctx->cmd_head) {
+                       sctx->cmd_head = cctx;
+                       sctx->cmd_tail = cctx;
+               } else {
+                       sctx->cmd_tail->cmd = cctx;
+                       sctx->cmd_tail = cctx;
+               }
+
+               size = fread(&cctx->c_payload, 1, sizeof(cctx->c_payload), fp);
+               if (size != sizeof(cctx->c_payload)) {
+                       fprintf(stderr, "ERR: SB command header too short!\n");
+                       return -EINVAL;
+               }
+
+               tsize += size;
+
+               sb_decrypt_tag(ictx, cctx);
+
+               ret = sb_verify_command(ictx, cctx, fp, &tsize);
+               if (ret)
+                       return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int sb_verify_sections_cmds(struct sb_image_ctx *ictx, FILE *fp)
+{
+       struct sb_boot_image_header *hdr = &ictx->payload;
+       struct sb_sections_header *shdr;
+       unsigned int i;
+       int ret;
+       struct sb_section_ctx *sctx;
+       unsigned long size;
+       char *bootable = "";
+
+       soprintf(ictx, "----- Verifying  SB Sections and Commands -----\n");
+
+       for (i = 0; i < hdr->section_count; i++) {
+               sctx = calloc(1, sizeof(*sctx));
+               if (!sctx)
+                       return -ENOMEM;
+               if (!ictx->sect_head) {
+                       ictx->sect_head = sctx;
+                       ictx->sect_tail = sctx;
+               } else {
+                       ictx->sect_tail->sect = sctx;
+                       ictx->sect_tail = sctx;
+               }
+
+               size = fread(&sctx->payload, 1, sizeof(sctx->payload), fp);
+               if (size != sizeof(sctx->payload)) {
+                       fprintf(stderr, "ERR: SB section header too short!\n");
+                       return -EINVAL;
+               }
+       }
+
+       size = fread(&ictx->sb_dict_key, 1, sizeof(ictx->sb_dict_key), fp);
+       if (size != sizeof(ictx->sb_dict_key)) {
+               fprintf(stderr, "ERR: SB key dictionary too short!\n");
+               return -EINVAL;
+       }
+
+       sb_encrypt_sb_sections_header(ictx);
+       sb_aes_reinit(ictx, 0);
+       sb_decrypt_key_dictionary_key(ictx);
+
+       sb_aes_reinit(ictx, 0);
+
+       sctx = ictx->sect_head;
+       while (sctx) {
+               shdr = &sctx->payload;
+
+               if (shdr->section_flags & SB_SECTION_FLAG_BOOTABLE) {
+                       sctx->boot = 1;
+                       bootable = " BOOTABLE";
+               }
+
+               sctx->size = (shdr->section_size * SB_BLOCK_SIZE) +
+                            sizeof(struct sb_command);
+               soprintf(ictx, "SECTION 0x%x%s # size = %i bytes\n",
+                        shdr->section_number, bootable, sctx->size);
+
+               if (shdr->section_flags & ~SB_SECTION_FLAG_BOOTABLE)
+                       fprintf(stderr, " WARN: Unknown section flag(s) %08x\n",
+                               shdr->section_flags);
+
+               if ((shdr->section_flags & SB_SECTION_FLAG_BOOTABLE) &&
+                   (hdr->first_boot_section_id != shdr->section_number)) {
+                       fprintf(stderr,
+                               " WARN: Bootable section does ID not match image header ID!\n");
+               }
+
+               ret = sb_verify_commands(ictx, sctx, fp);
+               if (ret)
+                       return ret;
+
+               sctx = sctx->sect;
+       }
+
+       /*
+        * FIXME IDEA:
+        * check if the first TAG command is at sctx->section_offset
+        */
+       return 0;
+}
+
+static int sb_verify_image_end(struct sb_image_ctx *ictx,
+                              FILE *fp, off_t filesz)
+{
+       uint8_t digest[32];
+       unsigned long size;
+       off_t pos;
+       int ret;
+
+       soprintf(ictx, "------------- Verifying image end -------------\n");
+
+       size = fread(digest, 1, sizeof(digest), fp);
+       if (size != sizeof(digest)) {
+               fprintf(stderr, "ERR: SB key dictionary too short!\n");
+               return -EINVAL;
+       }
+
+       pos = ftell(fp);
+       if (pos != filesz) {
+               fprintf(stderr, "ERR: Trailing data past the image!\n");
+               return -EINVAL;
+       }
+
+       /* Check the image digest. */
+       EVP_DigestFinal(&ictx->md_ctx, ictx->digest, NULL);
+
+       /* Decrypt the image digest from the input image. */
+       sb_aes_reinit(ictx, 0);
+       sb_aes_crypt(ictx, digest, digest, sizeof(digest));
+
+       /* Check all of 20 bytes of the SHA1 hash. */
+       ret = memcmp(digest, ictx->digest, 20) ? -EINVAL : 0;
+
+       if (ret)
+               soprintf(ictx, "[FAIL] Full-image checksum:          BAD\n");
+       else
+               soprintf(ictx, "[PASS] Full-image checksum:          OK\n");
+
+       return ret;
+}
+
+
+static int sb_build_tree_from_img(struct sb_image_ctx *ictx)
+{
+       long filesize;
+       int ret;
+       FILE *fp;
+
+       if (!ictx->input_filename) {
+               fprintf(stderr, "ERR: Missing filename!\n");
+               return -EINVAL;
+       }
+
+       fp = fopen(ictx->input_filename, "r");
+       if (!fp)
+               goto err_open;
+
+       ret = fseek(fp, 0, SEEK_END);
+       if (ret < 0)
+               goto err_file;
+
+       filesize = ftell(fp);
+       if (filesize < 0)
+               goto err_file;
+
+       ret = fseek(fp, 0, SEEK_SET);
+       if (ret < 0)
+               goto err_file;
+
+       if (filesize < (signed)sizeof(ictx->payload)) {
+               fprintf(stderr, "ERR: File too short!\n");
+               goto err_file;
+       }
+
+       if (filesize & (SB_BLOCK_SIZE - 1)) {
+               fprintf(stderr, "ERR: The file is not aligned!\n");
+               goto err_file;
+       }
+
+       /* Load and verify image header */
+       ret = sb_verify_image_header(ictx, fp, filesize);
+       if (ret)
+               goto err_verify;
+
+       /* Load and verify sections and commands */
+       ret = sb_verify_sections_cmds(ictx, fp);
+       if (ret)
+               goto err_verify;
+
+       ret = sb_verify_image_end(ictx, fp, filesize);
+       if (ret)
+               goto err_verify;
+
+       ret = 0;
+
+err_verify:
+       soprintf(ictx, "-------------------- Result -------------------\n");
+       soprintf(ictx, "Verification %s\n", ret ? "FAILED" : "PASSED");
+
+       /* Stop the encryption session. */
+       sb_aes_deinit(&ictx->cipher_ctx);
+
+       fclose(fp);
+       return ret;
+
+err_file:
+       fclose(fp);
+err_open:
+       fprintf(stderr, "ERR: Failed to load file \"%s\"\n",
+               ictx->input_filename);
+       return -EINVAL;
+}
+
+static void sb_free_image(struct sb_image_ctx *ictx)
+{
+       struct sb_section_ctx *sctx = ictx->sect_head, *s_head;
+       struct sb_dcd_ctx *dctx = ictx->dcd_head, *d_head;
+       struct sb_cmd_ctx *cctx, *c_head;
+
+       while (sctx) {
+               s_head = sctx;
+               c_head = sctx->cmd_head;
+
+               while (c_head) {
+                       cctx = c_head;
+                       c_head = c_head->cmd;
+                       if (cctx->data)
+                               free(cctx->data);
+                       free(cctx);
+               }
+
+               sctx = sctx->sect;
+               free(s_head);
+       }
+
+       while (dctx) {
+               d_head = dctx;
+               dctx = dctx->dcd;
+               free(d_head->payload);
+               free(d_head);
+       }
+}
+
+/*
+ * MXSSB-MKIMAGE glue code.
+ */
+static int mxsimage_check_image_types(uint8_t type)
+{
+       if (type == IH_TYPE_MXSIMAGE)
+               return EXIT_SUCCESS;
+       else
+               return EXIT_FAILURE;
+}
+
+static void mxsimage_set_header(void *ptr, struct stat *sbuf, int ifd,
+                               struct mkimage_params *params)
+{
+}
+
+int mxsimage_check_params(struct mkimage_params *params)
+{
+       if (!params)
+               return -1;
+       if (!strlen(params->imagename)) {
+               fprintf(stderr,
+                       "Error: %s - Configuration file not specified, it is needed for mxsimage generation\n",
+                       params->cmdname);
+               return -1;
+       }
+
+       /*
+        * Check parameters:
+        * XIP is not allowed and verify that incompatible
+        * parameters are not sent at the same time
+        * For example, if list is required a data image must not be provided
+        */
+       return  (params->dflag && (params->fflag || params->lflag)) ||
+               (params->fflag && (params->dflag || params->lflag)) ||
+               (params->lflag && (params->dflag || params->fflag)) ||
+               (params->xflag) || !(strlen(params->imagename));
+}
+
+static int mxsimage_verify_print_header(char *file, int silent)
+{
+       int ret;
+       struct sb_image_ctx ctx;
+
+       memset(&ctx, 0, sizeof(ctx));
+
+       ctx.input_filename = file;
+       ctx.silent_dump = silent;
+
+       ret = sb_build_tree_from_img(&ctx);
+       sb_free_image(&ctx);
+
+       return ret;
+}
+
+char *imagefile;
+static int mxsimage_verify_header(unsigned char *ptr, int image_size,
+                       struct mkimage_params *params)
+{
+       struct sb_boot_image_header *hdr;
+
+       if (!ptr)
+               return -EINVAL;
+
+       hdr = (struct sb_boot_image_header *)ptr;
+
+       /*
+        * Check if the header contains the MXS image signatures,
+        * if so, do a full-image verification.
+        */
+       if (memcmp(hdr->signature1, "STMP", 4) ||
+           memcmp(hdr->signature2, "sgtl", 4))
+               return -EINVAL;
+
+       imagefile = params->imagefile;
+
+       return mxsimage_verify_print_header(params->imagefile, 1);
+}
+
+static void mxsimage_print_header(const void *hdr)
+{
+       if (imagefile)
+               mxsimage_verify_print_header(imagefile, 0);
+}
+
+static int sb_build_image(struct sb_image_ctx *ictx,
+                         struct image_type_params *tparams)
+{
+       struct sb_boot_image_header *sb_header = &ictx->payload;
+       struct sb_section_ctx *sctx;
+       struct sb_cmd_ctx *cctx;
+       struct sb_command *ccmd;
+       struct sb_key_dictionary_key *sb_dict_key = &ictx->sb_dict_key;
+
+       uint8_t *image, *iptr;
+
+       /* Calculate image size. */
+       uint32_t size = sizeof(*sb_header) +
+               ictx->sect_count * sizeof(struct sb_sections_header) +
+               sizeof(*sb_dict_key) + sizeof(ictx->digest);
+
+       sctx = ictx->sect_head;
+       while (sctx) {
+               size += sctx->size;
+               sctx = sctx->sect;
+       };
+
+       image = malloc(size);
+       if (!image)
+               return -ENOMEM;
+       iptr = image;
+
+       memcpy(iptr, sb_header, sizeof(*sb_header));
+       iptr += sizeof(*sb_header);
+
+       sctx = ictx->sect_head;
+       while (sctx) {
+               memcpy(iptr, &sctx->payload, sizeof(struct sb_sections_header));
+               iptr += sizeof(struct sb_sections_header);
+               sctx = sctx->sect;
+       };
+
+       memcpy(iptr, sb_dict_key, sizeof(*sb_dict_key));
+       iptr += sizeof(*sb_dict_key);
+
+       sctx = ictx->sect_head;
+       while (sctx) {
+               cctx = sctx->cmd_head;
+               while (cctx) {
+                       ccmd = &cctx->payload;
+
+                       memcpy(iptr, &cctx->c_payload, sizeof(cctx->payload));
+                       iptr += sizeof(cctx->payload);
+
+                       if (ccmd->header.tag == ROM_LOAD_CMD) {
+                               memcpy(iptr, cctx->data, cctx->length);
+                               iptr += cctx->length;
+                       }
+
+                       cctx = cctx->cmd;
+               }
+
+               sctx = sctx->sect;
+       };
+
+       memcpy(iptr, ictx->digest, sizeof(ictx->digest));
+       iptr += sizeof(ictx->digest);
+
+       /* Configure the mkimage */
+       tparams->hdr = image;
+       tparams->header_size = size;
+
+       return 0;
+}
+
+static int mxsimage_generate(struct mkimage_params *params,
+       struct image_type_params *tparams)
+{
+       int ret;
+       struct sb_image_ctx ctx;
+
+       /* Do not copy the U-Boot image! */
+       params->skipcpy = 1;
+
+       memset(&ctx, 0, sizeof(ctx));
+
+       ctx.cfg_filename = params->imagename;
+       ctx.output_filename = params->imagefile;
+       ctx.verbose_boot = 1;
+
+       ret = sb_build_tree_from_cfg(&ctx);
+       if (ret)
+               goto fail;
+
+       ret = sb_encrypt_image(&ctx);
+       if (!ret)
+               ret = sb_build_image(&ctx, tparams);
+
+fail:
+       sb_free_image(&ctx);
+
+       return ret;
+}
+
+/*
+ * mxsimage parameters
+ */
+static struct image_type_params mxsimage_params = {
+       .name           = "Freescale MXS Boot Image support",
+       .header_size    = 0,
+       .hdr            = NULL,
+       .check_image_type = mxsimage_check_image_types,
+       .verify_header  = mxsimage_verify_header,
+       .print_header   = mxsimage_print_header,
+       .set_header     = mxsimage_set_header,
+       .check_params   = mxsimage_check_params,
+       .vrec_header    = mxsimage_generate,
+};
+
+void init_mxs_image_type(void)
+{
+       mkimage_register(&mxsimage_params);
+}
+
+#else
+void init_mxs_image_type(void)
+{
+}
+#endif
diff --git a/tools/mxsimage.h b/tools/mxsimage.h
new file mode 100644 (file)
index 0000000..6cd59d2
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * Freescale i.MX28 SB image generator
+ *
+ * Copyright (C) 2012 Marek Vasut <marex@denx.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __MXSSB_H__
+#define __MXSSB_H__
+
+#include <stdint.h>
+#include <arpa/inet.h>
+
+#define SB_BLOCK_SIZE          16
+
+#define roundup(x, y)          ((((x) + ((y) - 1)) / (y)) * (y))
+#define ARRAY_SIZE(x)          (sizeof(x) / sizeof((x)[0]))
+
+struct sb_boot_image_version {
+       uint16_t        major;
+       uint16_t        pad0;
+       uint16_t        minor;
+       uint16_t        pad1;
+       uint16_t        revision;
+       uint16_t        pad2;
+};
+
+struct sb_boot_image_header {
+       union {
+               /* SHA1 of the header. */
+               uint8_t digest[20];
+               struct {
+                       /* CBC-MAC initialization vector. */
+                       uint8_t iv[16];
+                       uint8_t extra[4];
+               };
+       };
+       /* 'STMP' */
+       uint8_t         signature1[4];
+       /* Major version of the image format. */
+       uint8_t         major_version;
+       /* Minor version of the image format. */
+       uint8_t         minor_version;
+       /* Flags associated with the image. */
+       uint16_t        flags;
+       /* Size of the image in 16b blocks. */
+       uint32_t        image_blocks;
+       /* Offset of the first tag in 16b blocks. */
+       uint32_t        first_boot_tag_block;
+       /* ID of the section to boot from. */
+       uint32_t        first_boot_section_id;
+       /* Amount of crypto keys. */
+       uint16_t        key_count;
+       /* Offset to the key dictionary in 16b blocks. */
+       uint16_t        key_dictionary_block;
+       /* Size of this header in 16b blocks. */
+       uint16_t        header_blocks;
+       /* Amount of section headers. */
+       uint16_t        section_count;
+       /* Section header size in 16b blocks. */
+       uint16_t        section_header_size;
+       /* Padding to align timestamp to uint64_t. */
+       uint8_t         padding0[2];
+       /* 'sgtl' (since v1.1) */
+       uint8_t         signature2[4];
+       /* Image generation date, in microseconds since 1.1.2000 . */
+       uint64_t        timestamp_us;
+       /* Product version. */
+       struct sb_boot_image_version
+                       product_version;
+       /* Component version. */
+       struct sb_boot_image_version
+                       component_version;
+       /* Drive tag for the system drive. (since v1.1) */
+       uint16_t        drive_tag;
+       /* Padding. */
+       uint8_t         padding1[6];
+};
+
+#define        SB_VERSION_MAJOR        1
+#define        SB_VERSION_MINOR        1
+
+/* Enable to HTLLC verbose boot report. */
+#define SB_IMAGE_FLAG_VERBOSE  (1 << 0)
+
+struct sb_key_dictionary_key {
+       /* The CBC-MAC of image and sections header. */
+       uint8_t         cbc_mac[SB_BLOCK_SIZE];
+       /* The AES key encrypted by image key (zero). */
+       uint8_t         key[SB_BLOCK_SIZE];
+};
+
+struct sb_ivt_header {
+       uint32_t        header;
+       uint32_t        entry;
+       uint32_t        reserved1;
+       uint32_t        dcd;
+       uint32_t        boot_data;
+       uint32_t        self;
+       uint32_t        csf;
+       uint32_t        reserved2;
+};
+
+#define        SB_HAB_IVT_TAG                  0xd1UL
+#define        SB_HAB_DCD_TAG                  0xd2UL
+
+#define        SB_HAB_VERSION                  0x40UL
+
+/*
+ * The "size" field in the IVT header is not naturally aligned,
+ * use this macro to fill first 4 bytes of the IVT header without
+ * causing issues on some systems (esp. M68k, PPC, MIPS-BE, ARM-BE).
+ */
+static inline uint32_t sb_hab_ivt_header(void)
+{
+       uint32_t ret = 0;
+       ret |= SB_HAB_IVT_TAG << 24;
+       ret |= sizeof(struct sb_ivt_header) << 16;
+       ret |= SB_HAB_VERSION;
+       return htonl(ret);
+}
+
+struct sb_sections_header {
+       /* Section number. */
+       uint32_t        section_number;
+       /* Offset of this sections first instruction after "TAG". */
+       uint32_t        section_offset;
+       /* Size of the section in 16b blocks. */
+       uint32_t        section_size;
+       /* Section flags. */
+       uint32_t        section_flags;
+};
+
+#define        SB_SECTION_FLAG_BOOTABLE        (1 << 0)
+
+struct sb_command {
+       struct {
+               uint8_t         checksum;
+               uint8_t         tag;
+               uint16_t        flags;
+#define ROM_TAG_CMD_FLAG_ROM_LAST_TAG  0x1
+#define ROM_LOAD_CMD_FLAG_DCD_LOAD     0x1     /* MX28 only */
+#define ROM_JUMP_CMD_FLAG_HAB          0x1     /* MX28 only */
+#define ROM_CALL_CMD_FLAG_HAB          0x1     /* MX28 only */
+       } header;
+
+       union {
+       struct {
+               uint32_t        reserved[3];
+       } nop;
+       struct {
+               uint32_t        section_number;
+               uint32_t        section_length;
+               uint32_t        section_flags;
+       } tag;
+       struct {
+               uint32_t        address;
+               uint32_t        count;
+               uint32_t        crc32;
+       } load;
+       struct {
+               uint32_t        address;
+               uint32_t        count;
+               uint32_t        pattern;
+       } fill;
+       struct {
+               uint32_t        address;
+               uint32_t        reserved;
+               /* Passed in register r0 before JUMP */
+               uint32_t        argument;
+       } jump;
+       struct {
+               uint32_t        address;
+               uint32_t        reserved;
+               /* Passed in register r0 before CALL */
+               uint32_t        argument;
+       } call;
+       struct {
+               uint32_t        reserved1;
+               uint32_t        reserved2;
+               uint32_t        mode;
+       } mode;
+
+       };
+};
+
+/*
+ * Most of the mode names are same or at least similar
+ * on i.MX23 and i.MX28, but some of the mode names
+ * differ. The "name" field represents the mode name
+ * on i.MX28 as seen in Table 12-2 of the datasheet.
+ * The "altname" field represents the differently named
+ * fields on i.MX23 as seen in Table 35-3 of the
+ * datasheet.
+ */
+static const struct {
+       const char      *name;
+       const char      *altname;
+       const uint8_t   mode;
+} modetable[] = {
+       { "USB",                NULL,           0x00 },
+       { "I2C",                NULL,           0x01 },
+       { "SPI2_FLASH",         "SPI1_FLASH",   0x02 },
+       { "SPI3_FLASH",         "SPI2_FLASH",   0x03 },
+       { "NAND_BCH",           NULL,           0x04 },
+       { "JTAG",               NULL,           0x06 },
+       { "SPI3_EEPROM",        "SPI2_EEPROM",  0x08 },
+       { "SD_SSP0",            NULL,           0x09 },
+       { "SD_SSP1",            NULL,           0x0A }
+};
+
+enum sb_tag {
+       ROM_NOP_CMD     = 0x00,
+       ROM_TAG_CMD     = 0x01,
+       ROM_LOAD_CMD    = 0x02,
+       ROM_FILL_CMD    = 0x03,
+       ROM_JUMP_CMD    = 0x04,
+       ROM_CALL_CMD    = 0x05,
+       ROM_MODE_CMD    = 0x06
+};
+
+struct sb_source_entry {
+       uint8_t         tag;
+       uint32_t        address;
+       uint32_t        flags;
+       char            *filename;
+};
+
+#endif /* __MXSSB_H__ */
index d4d77d8858ea9d609590a0cf8c1a566eb5b0b328..00853dd7413bdc68d5c1d80623dd48931b646449 100644 (file)
@@ -14,9 +14,6 @@
  * SPDX-License-Identifier:    GPL-2.0+ 
  */
 
-/* Required to obtain the getline prototype from stdio.h */
-#define _GNU_SOURCE
-
 #include "mkimage.h"
 #include <image.h>
 #include "omapimage.h"
index 4542a9c10f52a0670555c2282754cc06460fc280..bac5faff9883acb727502f890f3ab8d6b0902f45 100644 (file)
@@ -3,8 +3,6 @@
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
-#define _GNU_SOURCE
-
 #include "mkimage.h"
 #include <image.h>
 #include "pblimage.h"
index 6495db6d6a8bf8488ae56e7740eaa30ed6bd38de..b4ef7f080ea3d70a6a486055f59bd1f9b2d2a143 100644 (file)
@@ -13,9 +13,6 @@
  * SPDX-License-Identifier:    GPL-2.0+ 
  */
 
-/* Required to obtain the getline prototype from stdio.h */
-#define _GNU_SOURCE
-
 #include "mkimage.h"
 #include <image.h>
 #include "ublimage.h"