]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot
authorStefano Babic <sbabic@denx.de>
Fri, 16 Dec 2016 08:53:52 +0000 (09:53 +0100)
committerStefano Babic <sbabic@denx.de>
Fri, 16 Dec 2016 08:53:52 +0000 (09:53 +0100)
180 files changed:
.travis.yml
MAINTAINERS
Makefile
arch/arm/Kconfig
arch/arm/cpu/armv7/arch_timer.c
arch/arm/cpu/armv8/fsl-layerscape/Kconfig
arch/arm/cpu/armv8/fsl-layerscape/cpu.c
arch/arm/cpu/armv8/fsl-layerscape/ls2080a_serdes.c
arch/arm/cpu/armv8/fsl-layerscape/soc.c
arch/arm/dts/Makefile
arch/arm/dts/armada-7040-db.dts
arch/arm/dts/armada-8020.dtsi [new file with mode: 0644]
arch/arm/dts/armada-8040-db.dts [new file with mode: 0644]
arch/arm/dts/armada-8040.dtsi [new file with mode: 0644]
arch/arm/dts/armada-ap806.dtsi
arch/arm/dts/armada-cp110-master.dtsi
arch/arm/dts/armada-cp110-slave.dtsi [new file with mode: 0644]
arch/arm/dts/ls1021a.dtsi
arch/arm/dts/socfpga_cyclone5_de1_soc.dts [new file with mode: 0644]
arch/arm/dts/uniphier-common32.dtsi [deleted file]
arch/arm/dts/uniphier-ld11.dtsi
arch/arm/dts/uniphier-ld20.dtsi
arch/arm/dts/uniphier-ld4.dtsi
arch/arm/dts/uniphier-pro4-ref.dts
arch/arm/dts/uniphier-pro4.dtsi
arch/arm/dts/uniphier-pro5.dtsi
arch/arm/dts/uniphier-pxs2-gentil.dts
arch/arm/dts/uniphier-pxs2-vodka.dts
arch/arm/dts/uniphier-pxs2.dtsi
arch/arm/dts/uniphier-sld3.dtsi
arch/arm/dts/uniphier-sld8.dtsi
arch/arm/include/asm/arch-armada8k/cache_llc.h [new file with mode: 0644]
arch/arm/include/asm/arch-armada8k/soc-info.h [new file with mode: 0644]
arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h
arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
arch/arm/include/asm/emif.h
arch/arm/mach-mvebu/Kconfig
arch/arm/mach-mvebu/arm64-common.c
arch/arm/mach-mvebu/armada8k/Makefile
arch/arm/mach-mvebu/armada8k/cache_llc.S [new file with mode: 0644]
arch/arm/mach-mvebu/armada8k/cpu.c
arch/arm/mach-omap2/am33xx/ddr.c
arch/arm/mach-socfpga/Kconfig
arch/arm/mach-socfpga/include/mach/boot0.h [new file with mode: 0644]
arch/arm/mach-socfpga/qts-filter.sh
arch/arm/mach-sunxi/board.c
arch/arm/mach-uniphier/boot-mode/spl_board.c
arch/arm/mach-uniphier/dram/umc-ld20.c
arch/arm/mach-uniphier/memconf/memconf.c
arch/powerpc/cpu/mpc85xx/cpu_init.c
arch/powerpc/include/asm/config_mpc85xx.h
arch/sandbox/cpu/spl.c
board/Marvell/mvebu_armada-8k/MAINTAINERS [new file with mode: 0644]
board/Marvell/mvebu_armada-8k/Makefile [moved from board/Marvell/mvebu_db-88f7040/Makefile with 100% similarity]
board/Marvell/mvebu_armada-8k/board.c [new file with mode: 0644]
board/Marvell/mvebu_db-88f7040/MAINTAINERS [deleted file]
board/Marvell/mvebu_db-88f7040/board.c [deleted file]
board/altera/arria5-socdk/MAINTAINERS
board/altera/cyclone5-socdk/MAINTAINERS
board/freescale/ls1021aqds/ls1021aqds.c
board/imgtec/boston/MAINTAINERS
board/imgtec/malta/MAINTAINERS
board/omicron/calimain/MAINTAINERS
board/samsung/common/misc.c
board/samsung/goni/goni.c
board/samsung/trats/trats.c
board/samsung/trats2/trats2.c
board/samsung/universal_c210/universal.c
board/terasic/de0-nano-soc/MAINTAINERS
board/terasic/de1-soc/MAINTAINERS [new file with mode: 0644]
board/terasic/de1-soc/Makefile [new file with mode: 0644]
board/terasic/de1-soc/qts/iocsr_config.h [new file with mode: 0644]
board/terasic/de1-soc/qts/pinmux_config.h [new file with mode: 0644]
board/terasic/de1-soc/qts/pll_config.h [new file with mode: 0644]
board/terasic/de1-soc/qts/sdram_config.h [new file with mode: 0644]
board/terasic/de1-soc/socfpga.c [new file with mode: 0644]
board/ti/am335x/board.c
board/ti/am335x/board.h
board/ti/am57xx/board.c
board/ti/common/board_detect.c
board/vscom/baltos/board.c
board/vscom/baltos/board.h
board/vscom/baltos/mux.c
cmd/Kconfig
cmd/Makefile
cmd/mvebu/Kconfig [new file with mode: 0644]
cmd/mvebu/Makefile [new file with mode: 0644]
cmd/mvebu/bubt.c [new file with mode: 0644]
cmd/pci.c
common/spl/spl.c
common/spl/spl_mmc.c
common/spl/spl_nand.c
common/spl/spl_net.c
common/spl/spl_nor.c
common/spl/spl_onenand.c
common/spl/spl_sata.c
common/spl/spl_spi.c
common/spl/spl_ubi.c
common/spl/spl_usb.c
common/spl/spl_ymodem.c
configs/am57xx_hs_evm_defconfig
configs/dra7xx_hs_evm_defconfig
configs/ls1012afrdm_qspi_defconfig
configs/ls1012aqds_qspi_defconfig
configs/ls1012ardb_qspi_defconfig
configs/ls1046ardb_qspi_defconfig
configs/mvebu_db-88f7040_defconfig
configs/mvebu_db-88f8040_defconfig [new file with mode: 0644]
configs/omap5_uevm_defconfig
configs/omapl138_lcdk_defconfig
configs/origen_defconfig
configs/socfpga_de1_soc_defconfig [new file with mode: 0644]
configs/uniphier_ld11_defconfig
configs/uniphier_ld20_defconfig
configs/uniphier_ld4_sld8_defconfig
configs/uniphier_pro4_defconfig
configs/uniphier_pxs2_ld6b_defconfig
configs/uniphier_sld3_defconfig
doc/device-tree-bindings/pinctrl/marvell,armada-apn806-pinctrl.txt [new file with mode: 0644]
doc/device-tree-bindings/pinctrl/marvell,armada-cp110-pinctrl.txt [new file with mode: 0644]
doc/device-tree-bindings/pinctrl/marvell,mvebu-pinctrl.txt [new file with mode: 0644]
doc/driver-model/i2c-howto.txt [new file with mode: 0644]
doc/git-mailrc
doc/mvebu/cmd/bubt.txt [new file with mode: 0644]
drivers/block/sata_mv.c
drivers/ddr/fsl/ctrl_regs.c
drivers/ddr/fsl/fsl_ddr_gen4.c
drivers/ddr/fsl/mpc85xx_ddr_gen3.c
drivers/i2c/Makefile
drivers/i2c/adi_i2c.c
drivers/i2c/davinci_i2c.c
drivers/i2c/exynos_hs_i2c.c [new file with mode: 0644]
drivers/i2c/fti2c010.c
drivers/i2c/ihs_i2c.c
drivers/i2c/kona_i2c.c
drivers/i2c/lpc32xx_i2c.c
drivers/i2c/pca9564_i2c.c
drivers/i2c/ppc4xx_i2c.c
drivers/i2c/rcar_i2c.c
drivers/i2c/s3c24x0_i2c.c
drivers/i2c/s3c24x0_i2c.h
drivers/i2c/sh_i2c.c
drivers/i2c/sh_sh7734_i2c.c
drivers/i2c/soft_i2c.c
drivers/i2c/tsi108_i2c.c
drivers/i2c/zynq_i2c.c
drivers/mtd/spi/sunxi_spi_spl.c
drivers/net/fm/eth.c
drivers/net/fm/memac.c
drivers/net/phy/micrel.c
drivers/net/phy/realtek.c
drivers/net/phy/vitesse.c
drivers/pci/Kconfig
drivers/pci/Makefile
drivers/pci/pcie_dw_mvebu.c [new file with mode: 0644]
drivers/phy/marvell/comphy.h
drivers/phy/marvell/comphy_core.c
drivers/pinctrl/Kconfig
drivers/pinctrl/Makefile
drivers/pinctrl/mvebu/Kconfig [new file with mode: 0644]
drivers/pinctrl/mvebu/Makefile [new file with mode: 0644]
drivers/pinctrl/mvebu/pinctrl-mvebu.c [new file with mode: 0644]
drivers/pinctrl/mvebu/pinctrl-mvebu.h [new file with mode: 0644]
drivers/usb/common/fsl-errata.c
drivers/usb/eth/r8152.c
drivers/usb/host/xhci-pci.c
include/configs/baltos.h
include/configs/mvebu_armada-8k.h [moved from include/configs/mvebu_db-88f7040.h with 94% similarity]
include/configs/omapl138_lcdk.h
include/configs/s5p_goni.h
include/configs/s5pc210_universal.h
include/configs/socfpga_de1_soc.h [new file with mode: 0644]
include/configs/trats.h
include/configs/trats2.h
include/fsl_ddr.h
include/fsl_ddr_sdram.h
include/fsl_memac.h
include/spl.h
tools/zynqimage.c
tools/zynqmpimage.c

index 1611e14a045c2741ed2f4d2897f4a0c54cbde56d..51f14c85b283c336ce1e49a77f5305bd11aec99e 100644 (file)
@@ -10,8 +10,6 @@ language: c
 
 addons:
   apt:
-    sources:
-    - sourceline: 'ppa:gns3/qemu'
     packages:
     - cppcheck
     - sloccount
@@ -21,10 +19,6 @@ addons:
     - libsdl1.2-dev
     - python
     - python-virtualenv
-    - qemu-system-arm
-    - qemu-system-mips
-    - qemu-system-ppc
-    - qemu-system-x86
     - gcc-powerpc-linux-gnu
     - gcc-arm-linux-gnueabihf
     - gcc-aarch64-linux-gnu
@@ -54,7 +48,7 @@ install:
 
 env:
   global:
-    - PATH=/tmp/dtc:/tmp/uboot-test-hooks/bin:$PATH
+    - PATH=/tmp/dtc:/tmp/qemu-install/bin:/tmp/uboot-test-hooks/bin:$PATH
     - PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci
     - BUILD_DIR=build
     - HOSTCC="cc"
@@ -74,6 +68,15 @@ before_script:
       echo -e "\n[toolchain-prefix]\nx86 = ${HOME}/.buildman-toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-" >> ~/.buildman;
     fi
   - if [[ "${TOOLCHAIN}" == *xtensa* ]]; then ./tools/buildman/buildman --fetch-arch xtensa ; fi
+  - if [[ "${QEMU_TARGET}" != "" ]]; then
+       git clone git://git.qemu.org/qemu.git /tmp/qemu;
+       pushd /tmp/qemu;
+       git submodule update --init dtc &&
+       git checkout v2.8.0-rc3 &&
+       ./configure --prefix=/tmp/qemu-install --target-list=${QEMU_TARGET} &&
+       make -j4 all install;
+       popd;
+    fi
 
 script:
  # Comments must be outside the command strings below, or the Travis parser
@@ -151,12 +154,14 @@ matrix:
         - BUILDMAN="sun50i"
     - env:
         - JOB="Catch-all ARM"
-          BUILDMAN="arm -x arm11,arm7,arm9,aarch64,atmel,denx,freescale,kirkwood,siemens,tegra,uniphier,mx,samsung,sunxi,am33xx,omap3,omap4,omap5,pxa,rockchip"
+          BUILDMAN="arm -x arm11,arm7,arm9,aarch64,atmel,denx,freescale,kirkwood,mvebu,siemens,tegra,uniphier,mx,samsung,sunxi,am33xx,omap3,omap4,omap5,pxa,rockchip"
     - env:
         - BUILDMAN="sandbox x86"
           TOOLCHAIN="x86_64"
     - env:
         - BUILDMAN="kirkwood"
+    - env:
+        - BUILDMAN="mvebu"
     - env:
         - BUILDMAN="pxa"
     - env:
@@ -208,7 +213,7 @@ matrix:
     - env:
         - BUILDMAN="uniphier"
     - env:
-        - BUILDMAN="aarch64 -x tegra,freescale,uniphier,sunxi,samsung,rockchip"
+        - BUILDMAN="aarch64 -x tegra,freescale,mvebu,uniphier,sunxi,samsung,rockchip"
           TOOLCHAIN="aarch64"
     - env:
         - BUILDMAN="rockchip"
@@ -252,43 +257,52 @@ matrix:
     - env:
         - TEST_PY_BD="vexpress_ca15_tc2"
           TEST_PY_ID="--id qemu"
+          QEMU_TARGET="arm-softmmu"
           BUILDMAN="^vexpress_ca15_tc2$"
     - env:
         - TEST_PY_BD="vexpress_ca9x4"
           TEST_PY_ID="--id qemu"
+          QEMU_TARGET="arm-softmmu"
           BUILDMAN="^vexpress_ca9x4$"
     - env:
         - TEST_PY_BD="integratorcp_cm926ejs"
           TEST_PY_TEST_SPEC="not sleep"
           TEST_PY_ID="--id qemu"
+          QEMU_TARGET="arm-softmmu"
           BUILDMAN="^integratorcp_cm926ejs$"
     - env:
         - TEST_PY_BD="qemu_mips"
           TEST_PY_TEST_SPEC="not sleep"
+          QEMU_TARGET="mips-softmmu"
           BUILDMAN="^qemu_mips$"
           TOOLCHAIN="mips"
     - env:
         - TEST_PY_BD="qemu_mipsel"
           TEST_PY_TEST_SPEC="not sleep"
+          QEMU_TARGET="mipsel-softmmu"
           BUILDMAN="^qemu_mipsel$"
           TOOLCHAIN="mips"
     - env:
         - TEST_PY_BD="qemu_mips64"
           TEST_PY_TEST_SPEC="not sleep"
+          QEMU_TARGET="mips64-softmmu"
           BUILDMAN="^qemu_mips64$"
           TOOLCHAIN="mips"
     - env:
         - TEST_PY_BD="qemu_mips64el"
           TEST_PY_TEST_SPEC="not sleep"
+          QEMU_TARGET="mips64el-softmmu"
           BUILDMAN="^qemu_mips64el$"
           TOOLCHAIN="mips"
     - env:
         - TEST_PY_BD="qemu-ppce500"
           TEST_PY_TEST_SPEC="not sleep"
+          QEMU_TARGET="ppc-softmmu"
           BUILDMAN="^qemu-ppce500$"
     - env:
         - TEST_PY_BD="qemu-x86"
           TEST_PY_TEST_SPEC="not sleep"
+          QEMU_TARGET="i386-softmmu"
           BUILDMAN="^qemu-x86$"
           TOOLCHAIN="x86_64"
           BUILD_ROM="yes"
index a1a8e064689fd1e462bce3e356c0f6aa62b0346f..c2085ca2b62aa044148bf39333e72900afc882de 100644 (file)
@@ -69,8 +69,7 @@ ARM ALTERA SOCFPGA
 M:     Marek Vasut <marex@denx.de>
 S:     Maintainted
 T:     git git://git.denx.de/u-boot-socfpga.git
-F:     arch/arm/cpu/armv7/socfpga/
-F:     board/altera/socfpga/
+F:     arch/arm/mach-socfpga/
 
 ARM ATMEL AT91
 M:     Andreas Bießmann <andreas@biessmann.org>
@@ -243,7 +242,7 @@ T:  git git://git.denx.de/u-boot-coldfire.git
 F:     arch/m68k/
 
 DFU
-M:     Lukasz Majewski <l.majewski@samsung.com>
+M:     Lukasz Majewski <l.majewski@majess.pl>
 S:     Maintained
 T:     git git://git.denx.de/u-boot-dfu.git
 F:     drivers/dfu/
@@ -393,8 +392,8 @@ T:  git git://git.denx.de/u-boot-nios.git
 F:     arch/nios2/
 
 ONENAND
-M:     Lukasz Majewski <l.majewski@samsung.com>
-S:     Maintained
+#M:    Lukasz Majewski <l.majewski@majess.pl>
+S:     Orphaned (Since 2017-01)
 T:     git git://git.denx.de/u-boot-onenand.git
 F:     drivers/mtd/onenand/
 
index 153e076480ee10cc76bfbb1db19e15b8d1a2016a..dfed58bec661bb71aab8cbc67edbd5478e98e999 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,10 +2,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-VERSION = 2016
-PATCHLEVEL = 11
+VERSION = 2017
+PATCHLEVEL = 01
 SUBLEVEL =
-EXTRAVERSION =
+EXTRAVERSION = -rc1
 NAME =
 
 # *DOCUMENTATION*
index cead0401cdf7aa962c71de87cd2c264667dd991c..714dd8b51493d21990e593cbd2dcee370dd490df 100644 (file)
@@ -406,6 +406,7 @@ config TARGET_BCMNSP
 config ARCH_EXYNOS
        bool "Samsung EXYNOS"
        select DM
+       select DM_I2C
        select DM_SPI_FLASH
        select DM_SERIAL
        select DM_SPI
@@ -418,6 +419,7 @@ config ARCH_S5PC1XX
        select DM
        select DM_SERIAL
        select DM_GPIO
+       select DM_I2C
 
 config ARCH_HIGHBANK
        bool "Calxeda Highbank"
@@ -540,6 +542,7 @@ config ARCH_SOCFPGA
        select DM
        select DM_SPI_FLASH
        select DM_SPI
+       select ENABLE_ARM_SOC_BOOT0_HOOK
 
 config TARGET_CM_T43
        bool "Support cm_t43"
@@ -826,7 +829,6 @@ config TARGET_COLIBRI_PXA270
 
 config ARCH_UNIPHIER
        bool "Socionext UniPhier SoCs"
-       select BLK
        select CLK_UNIPHIER
        select DM
        select DM_GPIO
index 0588e2baef5ed10b69f7c271f5c19419770c4881..30915d28aa9cc09b86f23d4f4b6679996a458b40 100644 (file)
@@ -8,6 +8,7 @@
 #include <common.h>
 #include <asm/io.h>
 #include <div64.h>
+#include <bootstage.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -17,7 +18,6 @@ int timer_init(void)
        gd->arch.tbu = 0;
 
        gd->arch.timer_rate_hz = CONFIG_SYS_HZ_CLOCK / CONFIG_SYS_HZ;
-
        return 0;
 }
 
@@ -39,6 +39,11 @@ ulong get_timer(ulong base)
        return lldiv(get_ticks(), gd->arch.timer_rate_hz) - base;
 }
 
+ulong timer_get_boot_us(void)
+{
+       return lldiv(get_ticks(), CONFIG_SYS_HZ_CLOCK / (CONFIG_SYS_HZ * 1000));
+}
+
 void __udelay(unsigned long usec)
 {
        unsigned long long endtime;
index ed1c4eeb03c07d249b0c358f40163c407401cfd1..6772584a60422c8c14ee47033e43264d59659e05 100644 (file)
@@ -76,6 +76,13 @@ config SECURE_BOOT
        help
                Enable Freescale Secure Boot feature
 
+config QSPI_AHB_INIT
+       bool "Init the QSPI AHB bus"
+       help
+         The default setting for QSPI AHB bus just support 3bytes addressing.
+         But some QSPI flash size up to 64MBytes, so initialize the QSPI AHB
+         bus for those flashes to support the full QSPI flash size.
+
 config SYS_FSL_IFC_BANK_COUNT
        int "Maximum banks of Integrated flash controller"
        depends on ARCH_LS1043A || ARCH_LS1046A || ARCH_LS2080A
index d6ee54642d214cb1445adab7965e09f6110c12b5..ffbbd729d461da29f4395cfd25d144d3cf8248b8 100644 (file)
@@ -26,6 +26,9 @@
 #ifdef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
 #include <asm/armv8/sec_firmware.h>
 #endif
+#ifdef CONFIG_SYS_FSL_DDR
+#include <fsl_ddr.h>
+#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -403,7 +406,9 @@ int arch_early_init_r(void)
 #ifdef CONFIG_SYS_FSL_ERRATUM_A009635
        erratum_a009635();
 #endif
-
+#if defined(CONFIG_SYS_FSL_ERRATUM_A009942) && defined(CONFIG_SYS_FSL_DDR)
+       erratum_a009942_check_cpo();
+#endif
 #ifdef CONFIG_MP
 #if defined(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT) && defined(CONFIG_ARMV8_PSCI)
        /* Check the psci version to determine if the psci is supported */
index 67d605e38b1812ce9673fa2ac10bb3500e6e5df7..ab83e85adcda609d5af46f2bede1fd83b018ed05 100644 (file)
@@ -36,6 +36,7 @@ static struct serdes_config serdes1_cfg_tbl[] = {
        {0x35, {QSGMII_D, QSGMII_C, QSGMII_B, PCIE2, XFI4, XFI3, XFI2, XFI1 } },
        {0x39, {SGMII8, SGMII7, SGMII6, PCIE2, SGMII4, SGMII3, SGMII2,
                PCIE1 } },
+       {0x3B, {XFI8, XFI7, XFI6, PCIE2, XFI4, XFI3, XFI2, PCIE1 } },
        {0x4B, {PCIE2, PCIE2, PCIE2, PCIE2, XFI4, XFI3, XFI2, XFI1 } },
        {0x4C, {XFI8, XFI7, XFI6, XFI5, PCIE1, PCIE1, PCIE1, PCIE1 } },
        {0x4D, {SGMII8, SGMII7, PCIE2, PCIE2, SGMII4, SGMII3, PCIE1, PCIE1 } },
index 6c4238707d1c32a44a16c3da479bd495b4386478..2f54625d42b90ee4d3836e3dc0efcfc45857d494 100644 (file)
@@ -373,6 +373,45 @@ void fsl_lsch2_early_init_f(void)
 }
 #endif
 
+#ifdef CONFIG_QSPI_AHB_INIT
+/* Enable 4bytes address support and fast read */
+int qspi_ahb_init(void)
+{
+       u32 *qspi_lut, lut_key, *qspi_key;
+
+       qspi_key = (void *)SYS_FSL_QSPI_ADDR + 0x300;
+       qspi_lut = (void *)SYS_FSL_QSPI_ADDR + 0x310;
+
+       lut_key = in_be32(qspi_key);
+
+       if (lut_key == 0x5af05af0) {
+               /* That means the register is BE */
+               out_be32(qspi_key, 0x5af05af0);
+               /* Unlock the lut table */
+               out_be32(qspi_key + 1, 0x00000002);
+               out_be32(qspi_lut, 0x0820040c);
+               out_be32(qspi_lut + 1, 0x1c080c08);
+               out_be32(qspi_lut + 2, 0x00002400);
+               /* Lock the lut table */
+               out_be32(qspi_key, 0x5af05af0);
+               out_be32(qspi_key + 1, 0x00000001);
+       } else {
+               /* That means the register is LE */
+               out_le32(qspi_key, 0x5af05af0);
+               /* Unlock the lut table */
+               out_le32(qspi_key + 1, 0x00000002);
+               out_le32(qspi_lut, 0x0820040c);
+               out_le32(qspi_lut + 1, 0x1c080c08);
+               out_le32(qspi_lut + 2, 0x00002400);
+               /* Lock the lut table */
+               out_le32(qspi_key, 0x5af05af0);
+               out_le32(qspi_key + 1, 0x00000001);
+       }
+
+       return 0;
+}
+#endif
+
 #ifdef CONFIG_BOARD_LATE_INIT
 int board_late_init(void)
 {
@@ -382,6 +421,9 @@ int board_late_init(void)
 #ifdef CONFIG_CHAIN_OF_TRUST
        fsl_setenv_chain_of_trust();
 #endif
+#ifdef CONFIG_QSPI_AHB_INIT
+       qspi_ahb_init();
+#endif
 
        return 0;
 }
index 1964d3d9d18ecdef65b9ba6c202408c0d083d0a3..f43746966c0abe8a352f392a2bd3e4d993ad6fc4 100644 (file)
@@ -75,6 +75,7 @@ dtb-$(CONFIG_ARCH_MVEBU) +=                   \
        armada-388-gp.dtb                       \
        armada-385-amc.dtb                      \
        armada-7040-db.dtb                      \
+       armada-8040-db.dtb                      \
        armada-xp-gp.dtb                        \
        armada-xp-maxbcm.dtb                    \
        armada-xp-synology-ds414.dtb            \
@@ -132,6 +133,7 @@ dtb-$(CONFIG_ARCH_SOCFPGA) +=                               \
        socfpga_cyclone5_mcvevk.dtb                     \
        socfpga_cyclone5_socdk.dtb                      \
        socfpga_cyclone5_de0_nano_soc.dtb                       \
+       socfpga_cyclone5_de1_soc.dtb                    \
        socfpga_cyclone5_sockit.dtb                     \
        socfpga_cyclone5_socrates.dtb                   \
        socfpga_cyclone5_sr1500.dtb                     \
index 7d0059afe5c2030fcd0fd8a2fb8da6d708b540bc..466c6dcc3f3b25c7038b0ae0a63074a012a2aedf 100644 (file)
        };
 };
 
-&i2c0 {
-       status = "okay";
-       clock-frequency = <100000>;
-};
-
-&spi0 {
-       status = "okay";
-
-       spi-flash@0 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               compatible = "jedec,spi-nor";
-               reg = <0>;
-               spi-max-frequency = <10000000>;
-
-               partitions {
-                       compatible = "fixed-partitions";
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-
-                       partition@0 {
-                               label = "U-Boot";
-                               reg = <0 0x200000>;
-                       };
-                       partition@400000 {
-                               label = "Filesystem";
-                               reg = <0x200000 0xce0000>;
-                       };
-               };
-       };
+&ap_pinctl {
+          /* MPP Bus:
+           * SDIO  [0-5]
+           * UART0 [11,19]
+           */
+                 /* 0 1 2 3 4 5 6 7 8 9 */
+       pin-func = < 1 1 1 1 1 1 0 0 0 0
+                    0 3 0 0 0 0 0 0 0 3 >;
 };
 
 &uart0 {
 };
 
 &cpm_i2c0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cpm_i2c0_pins>;
        status = "okay";
        clock-frequency = <100000>;
 };
 
+&cpm_pinctl {
+               /* MPP Bus:
+                * TDM   [0-11]
+                * SPI   [13-16]
+                * SATA1 [28]
+                * UART0 [29-30]
+                * SMI   [32,34]
+                * XSMI  [35-36]
+                * I2C   [37-38]
+                * RGMII1[44-55]
+                * SD    [56-62]
+                */
+               /*   0   1   2   3   4   5   6   7   8   9 */
+       pin-func = < 4   4   4   4   4   4   4   4   4   4
+                    4   4   0   3   3   3   3   0   0   0
+                    0   0   0   0   0   0   0   0   9   0xA
+                    0xA 0   7   0   7   7   7   2   2   0
+                    0   0   0   0   1   1   1   1   1   1
+                    1   1   1   1   1   1   0xE 0xE 0xE 0xE
+                    0xE 0xE 0xE >;
+};
+
 &cpm_spi1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cpm_spi0_pins>;
        status = "okay";
 
        spi-flash@0 {
        status = "okay";
 };
 
-&comphy_cp110 {
+&cpm_comphy {
        phy0 {
                phy-type = <PHY_TYPE_SGMII2>;
                phy-speed = <PHY_SPEED_3_125G>;
        };
 };
 
-&utmi0 {
+&cpm_utmi0 {
        status = "okay";
 };
 
-&utmi1 {
+&cpm_utmi1 {
        status = "okay";
 };
diff --git a/arch/arm/dts/armada-8020.dtsi b/arch/arm/dts/armada-8020.dtsi
new file mode 100644 (file)
index 0000000..048e5cf
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 Marvell Technology Group Ltd.
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPLv2 or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  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.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Device Tree file for the Armada 8020 SoC, made of an AP806 Dual and
+ * two CP110.
+ */
+
+#include "armada-ap806-dual.dtsi"
+#include "armada-cp110-master.dtsi"
+#include "armada-cp110-slave.dtsi"
+
+/ {
+       model = "Marvell Armada 8020";
+       compatible = "marvell,armada8020", "marvell,armada-ap806-dual",
+                    "marvell,armada-ap806";
+};
diff --git a/arch/arm/dts/armada-8040-db.dts b/arch/arm/dts/armada-8040-db.dts
new file mode 100644 (file)
index 0000000..40def9d
--- /dev/null
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2016 Marvell Technology Group Ltd.
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPLv2 or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  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.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Device Tree file for Marvell Armada 8040 Development board platform
+ */
+
+#include "armada-8040.dtsi"
+
+/ {
+       model = "Marvell Armada 8040 DB board";
+       compatible = "marvell,armada8040-db", "marvell,armada8040",
+                    "marvell,armada-ap806-quad", "marvell,armada-ap806";
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       aliases {
+               i2c0 = &cpm_i2c0;
+               spi0 = &cps_spi1;
+       };
+
+       memory@00000000 {
+               device_type = "memory";
+               reg = <0x0 0x0 0x0 0x80000000>;
+       };
+};
+
+/* Accessible over the mini-USB CON9 connector on the main board */
+&uart0 {
+       status = "okay";
+};
+
+&ap_pinctl {
+       /* MPP Bus:
+        * SDIO  [0-10]
+        * UART0 [11,19]
+        */
+                 /* 0 1 2 3 4 5 6 7 8 9 */
+       pin-func = < 1 1 1 1 1 1 1 1 1 1
+                    1 3 0 0 0 0 0 0 0 3 >;
+};
+
+&cpm_pinctl {
+       /* MPP Bus:
+        * [0-31] = 0xff: Keep default CP0_shared_pins:
+        * [11] CLKOUT_MPP_11 (out)
+        * [23] LINK_RD_IN_CP2CP (in)
+        * [25] CLKOUT_MPP_25 (out)
+        * [29] AVS_FB_IN_CP2CP (in)
+        * [32,34] SMI
+        * [31]    GPIO: push button/Wake
+        * [35-36] GPIO
+        * [37-38] I2C
+        * [40-41] SATA[0/1]_PRESENT_ACTIVEn
+        * [42-43] XSMI
+        * [44-55] RGMII1
+        * [56-62] SD
+        */
+               /*   0    1    2    3    4    5    6    7    8    9 */
+       pin-func = < 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                    0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                    0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                    0xff 0    7    0    7    0    0    2    2    0
+                    0    0    8    8    1    1    1    1    1    1
+                    1    1    1    1    1    1    0xe  0xe  0xe  0xe
+                    0xe  0xe  0xe >;
+};
+
+/* CON5 on CP0 expansion */
+&cpm_pcie2 {
+       status = "okay";
+};
+
+&cpm_i2c0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cpm_i2c0_pins>;
+       status = "okay";
+       clock-frequency = <100000>;
+};
+
+/* CON4 on CP0 expansion */
+&cpm_sata0 {
+       status = "okay";
+};
+
+/* CON9 on CP0 expansion */
+&cpm_usb3_0 {
+       status = "okay";
+};
+
+/* CON10 on CP0 expansion */
+&cpm_usb3_1 {
+       status = "okay";
+};
+
+&cps_pinctl {
+       /* MPP Bus:
+        * [0-11]  RGMII0
+        * [13-16] SPI1
+        * [27,31] GE_MDIO/MDC
+        * [32-62] = 0xff: Keep default CP1_shared_pins:
+        */
+               /*   0    1    2    3    4    5    6    7    8    9 */
+       pin-func = < 0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3
+                    0x3  0x3  0xff 0x3  0x3  0x3  0x3  0xff 0xff 0xff
+                    0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x8  0xff 0xff
+                    0xff 0x8  0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                    0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                    0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                    0xff 0xff 0xff >;
+};
+
+/* CON5 on CP1 expansion */
+&cps_pcie2 {
+       status = "okay";
+};
+
+&cps_spi1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cps_spi1_pins>;
+       status = "okay";
+
+       spi-flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "U-Boot";
+                               reg = <0 0x200000>;
+                       };
+                       partition@400000 {
+                               label = "Filesystem";
+                               reg = <0x200000 0xce0000>;
+                       };
+               };
+       };
+};
+
+/* CON4 on CP1 expansion */
+&cps_sata0 {
+       status = "okay";
+};
+
+/* CON9 on CP1 expansion */
+&cps_usb3_0 {
+       status = "okay";
+};
+
+/* CON10 on CP1 expansion */
+&cps_usb3_1 {
+       status = "okay";
+};
+
+&cpm_comphy {
+       /*
+        * Serdes Configuration:
+        * Lane 0: SGMII2
+        * Lane 1: USB3_HOST0
+        * Lane 2: KR (10G)
+        * Lane 3: SATA1
+        * Lane 4: USB3_HOST1
+        * Lane 5: PEX2x1
+        */
+       phy0 {
+               phy-type = <PHY_TYPE_SGMII2>;
+               phy-speed = <PHY_SPEED_3_125G>;
+       };
+
+       phy1 {
+               phy-type = <PHY_TYPE_USB3_HOST0>;
+       };
+
+       phy2 {
+               phy-type = <PHY_TYPE_KR>;
+       };
+
+       phy3 {
+               phy-type = <PHY_TYPE_SATA1>;
+       };
+
+       phy4 {
+               phy-type = <PHY_TYPE_USB3_HOST1>;
+       };
+
+       phy5 {
+               phy-type = <PHY_TYPE_PEX2>;
+       };
+};
+
+&cps_comphy {
+       /*
+        * Serdes Configuration:
+        * Lane 0: SGMII2
+        * Lane 1: USB3_HOST0
+        * Lane 2: KR (10G)
+        * Lane 3: SATA1
+        * Lane 4: Unconnected
+        * Lane 5: PEX2x1
+        */
+       phy0 {
+               phy-type = <PHY_TYPE_SGMII2>;
+               phy-speed = <PHY_SPEED_3_125G>;
+       };
+
+       phy1 {
+               phy-type = <PHY_TYPE_USB3_HOST0>;
+       };
+
+       phy2 {
+               phy-type = <PHY_TYPE_KR>;
+       };
+
+       phy3 {
+               phy-type = <PHY_TYPE_SATA1>;
+       };
+
+       phy4 {
+               phy-type = <PHY_TYPE_UNCONNECTED>;
+       };
+
+       phy5 {
+               phy-type = <PHY_TYPE_PEX2>;
+       };
+};
+
+&cpm_utmi0 {
+       status = "okay";
+};
+
+&cpm_utmi1 {
+       status = "okay";
+};
+
+&cps_utmi0 {
+       status = "okay";
+};
diff --git a/arch/arm/dts/armada-8040.dtsi b/arch/arm/dts/armada-8040.dtsi
new file mode 100644 (file)
index 0000000..9c1b28c
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 Marvell Technology Group Ltd.
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPLv2 or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  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.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Device Tree file for the Armada 8040 SoC, made of an AP806 Quad and
+ * two CP110.
+ */
+
+#include "armada-ap806-quad.dtsi"
+#include "armada-cp110-master.dtsi"
+#include "armada-cp110-slave.dtsi"
+
+/ {
+       model = "Marvell Armada 8040";
+       compatible = "marvell,armada8040", "marvell,armada-ap806-quad",
+                    "marvell,armada-ap806";
+};
index d315b29cd0583213488a5018913414474904b024..efb383b9f394cd29bdc3e5e67bff778bd3e14852 100644 (file)
                                marvell,spi-base = <128>, <136>, <144>, <152>;
                        };
 
+                       ap_pinctl: ap-pinctl@6F4000 {
+                               compatible = "marvell,armada-ap806-pinctrl";
+                               bank-name ="apn-806";
+                               reg = <0x6F4000 0x10>;
+                               pin-count = <20>;
+                               max-func = <3>;
+
+                               ap_i2c0_pins: i2c-pins-0 {
+                                       marvell,pins = < 4 5 >;
+                                       marvell,function = <3>;
+                               };
+                               ap_emmc_pins: emmc-pins-0 {
+                                       marvell,pins = < 0 1 2 3 4 5 6 7
+                                                        8 9 10 >;
+                                       marvell,function = <1>;
+                               };
+                       };
+
                        xor@400000 {
                                compatible = "marvell,mv-xor-v2";
                                reg = <0x400000 0x1000>,
index 7da98bf5cbc05cd65173e5dcfbe6fe27438df7e8..d637867615fd190b44a55efcfbea8efaf9451b4a 100644 (file)
                                        "cpm-usb3dev", "cpm-eip150", "cpm-eip197";
                        };
 
+                       cpm_pinctl: cpm-pinctl@440000 {
+                               compatible = "marvell,mvebu-pinctrl",
+                                            "marvell,a70x0-pinctrl",
+                                            "marvell,a80x0-cp0-pinctrl";
+                               bank-name ="cp0-110";
+                               reg = <0x440000 0x20>;
+                               pin-count = <63>;
+                               max-func = <0xf>;
+
+                               cpm_i2c0_pins: cpm-i2c-pins-0 {
+                                       marvell,pins = < 37 38 >;
+                                       marvell,function = <2>;
+                               };
+                               cpm_ge2_rgmii_pins: cpm-ge-rgmii-pins-0 {
+                                       marvell,pins = < 44 45 46 47 48 49 50 51
+                                                        52 53 54 55 >;
+                                       marvell,function = <1>;
+                               };
+                               pca0_pins: cpm-pca0_pins {
+                                       marvell,pins = <62>;
+                                       marvell,function = <0>;
+                               };
+                               cpm_sdhci_pins: cpm-sdhi-pins-0 {
+                                       marvell,pins = < 56 57 58 59 60 61 >;
+                                       marvell,function = <14>;
+                               };
+                               cpm_spi0_pins: cpm-spi-pins-0 {
+                                       marvell,pins = < 13 14 15 16 >;
+                                       marvell,function = <3>;
+                               };
+                       };
+
                        cpm_sata0: sata@540000 {
                                compatible = "marvell,armada-8k-ahci";
                                reg = <0x540000 0x30000>;
                                status = "disabled";
                        };
 
-                       comphy_cp110: comphy@441000 {
+                       cpm_comphy: comphy@441000 {
                                compatible = "marvell,mvebu-comphy", "marvell,comphy-cp110";
                                reg = <0x441000 0x8>,
                                      <0x120000 0x8>;
                                max-lanes = <6>;
                        };
 
-                       utmi0: utmi@580000 {
+                       cpm_utmi0: utmi@580000 {
                                compatible = "marvell,mvebu-utmi-2.6.0";
                                reg = <0x580000 0x1000>,        /* utmi-unit */
                                      <0x440420 0x4>,           /* usb-cfg */
                                status = "disabled";
                        };
 
-                       utmi1: utmi@581000 {
+                       cpm_utmi1: utmi@581000 {
                                compatible = "marvell,mvebu-utmi-2.6.0";
                                reg = <0x581000 0x1000>,        /* utmi-unit */
                                      <0x440420 0x4>,           /* usb-cfg */
diff --git a/arch/arm/dts/armada-cp110-slave.dtsi b/arch/arm/dts/armada-cp110-slave.dtsi
new file mode 100644 (file)
index 0000000..92ef55c
--- /dev/null
@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2016 Marvell Technology Group Ltd.
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPLv2 or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  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.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Device Tree file for Marvell Armada CP110 Slave.
+ */
+
+#include <dt-bindings/comphy/comphy_data.h>
+
+/ {
+       cp110-slave {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               compatible = "simple-bus";
+               interrupt-parent = <&gic>;
+               ranges;
+
+               config-space {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       compatible = "simple-bus";
+                       interrupt-parent = <&gic>;
+                       ranges = <0x0 0x0 0xf4000000 0x2000000>;
+
+                       cps_syscon0: system-controller@440000 {
+                               compatible = "marvell,cp110-system-controller0",
+                                            "syscon";
+                               reg = <0x440000 0x1000>;
+                               #clock-cells = <2>;
+                               core-clock-output-names =
+                                       "cps-apll", "cps-ppv2-core", "cps-eip",
+                                       "cps-core", "cps-nand-core";
+                               gate-clock-output-names =
+                                       "cps-audio", "cps-communit", "cps-nand",
+                                       "cps-ppv2", "cps-sdio", "cps-mg-domain",
+                                       "cps-mg-core", "cps-xor1", "cps-xor0",
+                                       "cps-gop-dp", "none", "cps-pcie_x10",
+                                       "cps-pcie_x11", "cps-pcie_x4", "cps-pcie-xor",
+                                       "cps-sata", "cps-sata-usb", "cps-main",
+                                       "cps-sd-mmc", "none", "none",
+                                       "cps-slow-io", "cps-usb3h0", "cps-usb3h1",
+                                       "cps-usb3dev", "cps-eip150", "cps-eip197";
+                       };
+
+                       cps_pinctl: cps-pinctl@440000 {
+                               compatible = "marvell,mvebu-pinctrl",
+                                            "marvell,a80x0-cp1-pinctrl";
+                               bank-name ="cp1-110";
+                               reg = <0x440000 0x20>;
+                               pin-count = <63>;
+                               max-func = <0xf>;
+
+                               cps_ge1_rgmii_pins: cps-ge-rgmii-pins-0 {
+                                       marvell,pins = < 0  1  2  3  4  5  6  7
+                                                        8  9  10 11 >;
+                                       marvell,function = <3>;
+                               };
+                               cps_spi1_pins: cps-spi-pins-1 {
+                                       marvell,pins = < 13 14 15 16 >;
+                                       marvell,function = <3>;
+                               };
+                       };
+
+                       cps_sata0: sata@540000 {
+                               compatible = "marvell,armada-8k-ahci";
+                               reg = <0x540000 0x30000>;
+                               interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&cps_syscon0 1 15>;
+                               status = "disabled";
+                       };
+
+                       cps_usb3_0: usb3@500000 {
+                               compatible = "marvell,armada-8k-xhci",
+                                            "generic-xhci";
+                               reg = <0x500000 0x4000>;
+                               dma-coherent;
+                               interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&cps_syscon0 1 22>;
+                               status = "disabled";
+                       };
+
+                       cps_usb3_1: usb3@510000 {
+                               compatible = "marvell,armada-8k-xhci",
+                                            "generic-xhci";
+                               reg = <0x510000 0x4000>;
+                               dma-coherent;
+                               interrupts = <GIC_SPI 285 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&cps_syscon0 1 23>;
+                               status = "disabled";
+                       };
+
+                       cps_xor0: xor@6a0000 {
+                               compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
+                               reg = <0x6a0000 0x1000>,
+                                     <0x6b0000 0x1000>;
+                               dma-coherent;
+                               msi-parent = <&gic_v2m0>;
+                               clocks = <&cps_syscon0 1 8>;
+                       };
+
+                       cps_xor1: xor@6c0000 {
+                               compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
+                               reg = <0x6c0000 0x1000>,
+                                     <0x6d0000 0x1000>;
+                               dma-coherent;
+                               msi-parent = <&gic_v2m0>;
+                               clocks = <&cps_syscon0 1 7>;
+                       };
+
+                       cps_spi0: spi@700600 {
+                               compatible = "marvell,armada-380-spi";
+                               reg = <0x700600 0x50>;
+                               #address-cells = <0x1>;
+                               #size-cells = <0x0>;
+                               cell-index = <1>;
+                               clocks = <&cps_syscon0 0 3>;
+                               status = "disabled";
+                       };
+
+                       cps_spi1: spi@700680 {
+                               compatible = "marvell,armada-380-spi";
+                               reg = <0x700680 0x50>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               cell-index = <2>;
+                               clocks = <&cps_syscon0 1 21>;
+                               status = "disabled";
+                       };
+
+                       cps_i2c0: i2c@701000 {
+                               compatible = "marvell,mv78230-i2c";
+                               reg = <0x701000 0x20>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               interrupts = <GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&cps_syscon0 1 21>;
+                               status = "disabled";
+                       };
+
+                       cps_i2c1: i2c@701100 {
+                               compatible = "marvell,mv78230-i2c";
+                               reg = <0x701100 0x20>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               interrupts = <GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&cps_syscon0 1 21>;
+                               status = "disabled";
+                       };
+
+                       cps_comphy: comphy@441000 {
+                               compatible = "marvell,mvebu-comphy", "marvell,comphy-cp110";
+                               reg = <0x441000 0x8>,
+                                     <0x120000 0x8>;
+                               mux-bitcount = <4>;
+                               max-lanes = <6>;
+                       };
+
+                       cps_utmi0: utmi@580000 {
+                               compatible = "marvell,mvebu-utmi-2.6.0";
+                               reg = <0x580000 0x1000>,        /* utmi-unit */
+                                     <0x440420 0x4>,           /* usb-cfg */
+                                     <0x440440 0x4>;           /* utmi-cfg */
+                               utmi-port = <UTMI_PHY_TO_USB_HOST0>;
+                               status = "disabled";
+                       };
+               };
+
+               cps_pcie0: pcie@f4600000 {
+                       compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
+                       reg = <0 0xf4600000 0 0x10000>,
+                             <0 0xfaf00000 0 0x80000>;
+                       reg-names = "ctrl", "config";
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       #interrupt-cells = <1>;
+                       device_type = "pci";
+                       dma-coherent;
+                       msi-parent = <&gic_v2m0>;
+
+                       bus-range = <0 0xff>;
+                       ranges =
+                               /* downstream I/O */
+                               <0x81000000 0 0xfd000000 0  0xfd000000 0 0x10000
+                               /* non-prefetchable memory */
+                               0x82000000 0 0xfa000000 0  0xfa000000 0 0xf00000>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic 0 GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>;
+                       num-lanes = <1>;
+                       clocks = <&cps_syscon0 1 13>;
+                       status = "disabled";
+               };
+
+               cps_pcie1: pcie@f4620000 {
+                       compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
+                       reg = <0 0xf4620000 0 0x10000>,
+                             <0 0xfbf00000 0 0x80000>;
+                       reg-names = "ctrl", "config";
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       #interrupt-cells = <1>;
+                       device_type = "pci";
+                       dma-coherent;
+                       msi-parent = <&gic_v2m0>;
+
+                       bus-range = <0 0xff>;
+                       ranges =
+                               /* downstream I/O */
+                               <0x81000000 0 0xfd010000 0  0xfd010000 0 0x10000
+                               /* non-prefetchable memory */
+                               0x82000000 0 0xfb000000 0  0xfb000000 0 0xf00000>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic 0 GIC_SPI 258 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupts = <GIC_SPI 258 IRQ_TYPE_LEVEL_HIGH>;
+
+                       num-lanes = <1>;
+                       clocks = <&cps_syscon0 1 11>;
+                       status = "disabled";
+               };
+
+               cps_pcie2: pcie@f4640000 {
+                       compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
+                       reg = <0 0xf4640000 0 0x10000>,
+                             <0 0xfcf00000 0 0x80000>;
+                       reg-names = "ctrl", "config";
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       #interrupt-cells = <1>;
+                       device_type = "pci";
+                       dma-coherent;
+                       msi-parent = <&gic_v2m0>;
+
+                       bus-range = <0 0xff>;
+                       ranges =
+                               /* downstream I/O */
+                               <0x81000000 0 0xfd020000 0  0xfd020000 0 0x10000
+                               /* non-prefetchable memory */
+                               0x82000000 0 0xfc000000 0  0xfc000000 0 0xf00000>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic 0 GIC_SPI 257 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupts = <GIC_SPI 257 IRQ_TYPE_LEVEL_HIGH>;
+
+                       num-lanes = <1>;
+                       clocks = <&cps_syscon0 1 12>;
+                       status = "disabled";
+               };
+       };
+};
index 119b1afeb7f1d2b6b182ac42fc71746857938bc3..37be16905b9c6d7c9b55e6c620ec10c47fb6c783 100644 (file)
                        #size-cells = <0>;
                        reg = <0x1550000 0x10000>,
                                <0x40000000 0x4000000>;
+                       reg-names = "QuadSPI", "QuadSPI-memory";
                        num-cs = <2>;
                        big-endian;
                        status = "disabled";
diff --git a/arch/arm/dts/socfpga_cyclone5_de1_soc.dts b/arch/arm/dts/socfpga_cyclone5_de1_soc.dts
new file mode 100644 (file)
index 0000000..a583990
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright Altera Corporation (C) 2015
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include "socfpga_cyclone5.dtsi"
+
+/ {
+       model = "Terasic DE1-SoC";
+       compatible = "altr,socfpga-cyclone5", "altr,socfpga";
+
+       chosen {
+               bootargs = "console=ttyS0,115200";
+       };
+
+       aliases {
+               ethernet0 = &gmac1;
+               udc0 = &usb1;
+       };
+
+       memory {
+               name = "memory";
+               device_type = "memory";
+               reg = <0x0 0x40000000>; /* 1GB */
+       };
+
+       soc {
+               u-boot,dm-pre-reloc;
+       };
+};
+
+&gmac1 {
+       status = "okay";
+       phy-mode = "rgmii";
+
+       rxd0-skew-ps = <420>;
+       rxd1-skew-ps = <420>;
+       rxd2-skew-ps = <420>;
+       rxd3-skew-ps = <420>;
+       txen-skew-ps = <0>;
+       txc-skew-ps = <1860>;
+       rxdv-skew-ps = <420>;
+       rxc-skew-ps = <1680>;
+};
+
+&gpio0 {
+       status = "okay";
+};
+
+&gpio1 {
+       status = "okay";
+};
+
+&gpio2 {
+       status = "okay";
+};
+
+&mmc0 {
+       status = "okay";
+       u-boot,dm-pre-reloc;
+};
+
+&usb1 {
+       status = "okay";
+};
diff --git a/arch/arm/dts/uniphier-common32.dtsi b/arch/arm/dts/uniphier-common32.dtsi
deleted file mode 100644 (file)
index f87e320..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Device Tree Source commonly used by UniPhier ARM SoCs
- *
- * Copyright (C) 2015-2016 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+        X11
- */
-
-/include/ "skeleton.dtsi"
-
-/ {
-       psci {
-               compatible = "arm,psci-0.2";
-               method = "smc";
-       };
-
-       clocks {
-               refclk: ref {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
-               };
-       };
-
-       soc: soc {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <1>;
-               ranges;
-               interrupt-parent = <&intc>;
-               u-boot,dm-pre-reloc;
-
-               serial0: serial@54006800 {
-                       compatible = "socionext,uniphier-uart";
-                       status = "disabled";
-                       reg = <0x54006800 0x40>;
-                       interrupts = <0 33 4>;
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&pinctrl_uart0>;
-                       clocks = <&peri_clk 0>;
-               };
-
-               serial1: serial@54006900 {
-                       compatible = "socionext,uniphier-uart";
-                       status = "disabled";
-                       reg = <0x54006900 0x40>;
-                       interrupts = <0 35 4>;
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&pinctrl_uart1>;
-                       clocks = <&peri_clk 1>;
-               };
-
-               serial2: serial@54006a00 {
-                       compatible = "socionext,uniphier-uart";
-                       status = "disabled";
-                       reg = <0x54006a00 0x40>;
-                       interrupts = <0 37 4>;
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&pinctrl_uart2>;
-                       clocks = <&peri_clk 2>;
-               };
-
-               serial3: serial@54006b00 {
-                       compatible = "socionext,uniphier-uart";
-                       status = "disabled";
-                       reg = <0x54006b00 0x40>;
-                       interrupts = <0 177 4>;
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&pinctrl_uart3>;
-                       clocks = <&peri_clk 3>;
-               };
-
-               system_bus: system-bus@58c00000 {
-                       compatible = "socionext,uniphier-system-bus";
-                       status = "disabled";
-                       reg = <0x58c00000 0x400>;
-                       #address-cells = <2>;
-                       #size-cells = <1>;
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&pinctrl_system_bus>;
-               };
-
-               smpctrl@59800000 {
-                       compatible = "socionext,uniphier-smpctrl";
-                       reg = <0x59801000 0x400>;
-               };
-
-               mioctrl@59810000 {
-                       compatible = "socionext,uniphier-mioctrl",
-                                    "simple-mfd", "syscon";
-                       reg = <0x59810000 0x800>;
-                       u-boot,dm-pre-reloc;
-
-                       mio_clk: clock {
-                               #clock-cells = <1>;
-                       };
-
-                       mio_rst: reset {
-                               #reset-cells = <1>;
-                       };
-               };
-
-               perictrl@59820000 {
-                       compatible = "socionext,uniphier-perictrl",
-                                    "simple-mfd", "syscon";
-                       reg = <0x59820000 0x200>;
-
-                       peri_clk: clock {
-                               #clock-cells = <1>;
-                       };
-
-                       peri_rst: reset {
-                               #reset-cells = <1>;
-                       };
-               };
-
-               timer@60000200 {
-                       compatible = "arm,cortex-a9-global-timer";
-                       reg = <0x60000200 0x20>;
-                       interrupts = <1 11 0x104>;
-                       clocks = <&arm_timer_clk>;
-               };
-
-               timer@60000600 {
-                       compatible = "arm,cortex-a9-twd-timer";
-                       reg = <0x60000600 0x20>;
-                       interrupts = <1 13 0x104>;
-                       clocks = <&arm_timer_clk>;
-               };
-
-               intc: interrupt-controller@60001000 {
-                       compatible = "arm,cortex-a9-gic";
-                       reg = <0x60001000 0x1000>,
-                             <0x60000100 0x100>;
-                       #interrupt-cells = <3>;
-                       interrupt-controller;
-               };
-
-               soc-glue@5f800000 {
-                       compatible = "socionext,uniphier-soc-glue",
-                                    "simple-mfd", "syscon";
-                       reg = <0x5f800000 0x2000>;
-                       u-boot,dm-pre-reloc;
-
-                       pinctrl: pinctrl {
-                               /* specify compatible in each SoC DTSI */
-                               u-boot,dm-pre-reloc;
-                       };
-               };
-
-               sysctrl@61840000 {
-                       compatible = "socionext,uniphier-sysctrl",
-                                    "simple-mfd", "syscon";
-                       reg = <0x61840000 0x4000>;
-
-                       sys_clk: clock {
-                               #clock-cells = <1>;
-                       };
-
-                       sys_rst: reset {
-                               #reset-cells = <1>;
-                       };
-               };
-
-               nand: nand@68000000 {
-                       compatible = "denali,denali-nand-dt";
-                       status = "disabled";
-                       reg-names = "nand_data", "denali_reg";
-                       reg = <0x68000000 0x20>, <0x68100000 0x1000>;
-                       interrupts = <0 65 4>;
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&pinctrl_nand>;
-               };
-       };
-};
-
-/include/ "uniphier-pinctrl.dtsi"
index a95cb6e97bd14bfec5be3a756251ac1decccf329..eef4dcefbce1845ecd56a45dbcfd9db573979e37 100644 (file)
@@ -7,7 +7,7 @@
  * SPDX-License-Identifier:    GPL-2.0+        X11
  */
 
-/memreserve/ 0x80000000 0x00000008;    /* cpu-release-addr */
+/memreserve/ 0x80000000 0x00080000;
 
 / {
        compatible = "socionext,uniphier-ld11";
                        device_type = "cpu";
                        compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0 0x000>;
-                       enable-method = "spin-table";
-                       cpu-release-addr = <0 0x80000000>;
+                       clocks = <&sys_clk 33>;
+                       enable-method = "psci";
+                       operating-points-v2 = <&cluster0_opp>;
                };
 
                cpu1: cpu@1 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0 0x001>;
-                       enable-method = "spin-table";
-                       cpu-release-addr = <0 0x80000000>;
+                       clocks = <&sys_clk 33>;
+                       enable-method = "psci";
+                       operating-points-v2 = <&cluster0_opp>;
                };
        };
 
+       cluster0_opp: opp_table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp@245000000 {
+                       opp-hz = /bits/ 64 <245000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@250000000 {
+                       opp-hz = /bits/ 64 <250000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@490000000 {
+                       opp-hz = /bits/ 64 <490000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@500000000 {
+                       opp-hz = /bits/ 64 <500000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@653334000 {
+                       opp-hz = /bits/ 64 <653334000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@666667000 {
+                       opp-hz = /bits/ 64 <666667000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@980000000 {
+                       opp-hz = /bits/ 64 <980000000>;
+                       clock-latency-ns = <300>;
+               };
+       };
+
+       psci {
+               compatible = "arm,psci-1.0";
+               method = "smc";
+       };
+
        clocks {
                refclk: ref {
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
                        clock-frequency = <25000000>;
                };
-
-               i2c_clk: i2c_clk {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
-                       clock-frequency = <50000000>;
-               };
        };
 
        timer {
                        interrupts = <0 41 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c0>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 4>;
                        clock-frequency = <100000>;
                };
 
                        interrupts = <0 42 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c1>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 5>;
                        clock-frequency = <100000>;
                };
 
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 43 4>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 6>;
                        clock-frequency = <400000>;
                };
 
                        interrupts = <0 44 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c3>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 7>;
                        clock-frequency = <100000>;
                };
 
                        interrupts = <0 45 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c4>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 8>;
                        clock-frequency = <100000>;
                };
 
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 25 4>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 9>;
                        clock-frequency = <400000>;
                };
 
                        reg = <0x59801000 0x400>;
                };
 
+               sdctrl@59810000 {
+                       compatible = "socionext,uniphier-ld11-sdctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59810000 0x400>;
+
+                       sd_rst: reset {
+                               compatible = "socionext,uniphier-ld11-sd-reset";
+                               #reset-cells = <1>;
+                       };
+               };
+
                perictrl@59820000 {
-                       compatible = "socionext,uniphier-perictrl",
+                       compatible = "socionext,uniphier-ld11-perictrl",
                                     "simple-mfd", "syscon";
                        reg = <0x59820000 0x200>;
 
                        };
                };
 
+               emmc: sdhc@5a000000 {
+                       compatible = "cdns,sd4hc";
+                       reg = <0x5a000000 0x400>;
+                       interrupts = <0 78 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_emmc_1v8>;
+                       clocks = <&sys_clk 4>;
+                       bus-width = <8>;
+                       mmc-ddr-1_8v;
+                       mmc-hs200-1_8v;
+                       /* mmc-hs400-1_8v; support depends on board design */
+               };
+
                usb0: usb@5a800100 {
                        compatible = "socionext,uniphier-ehci", "generic-ehci";
                        status = "disabled";
                };
 
                soc-glue@5f800000 {
-                       compatible = "socionext,uniphier-soc-glue",
+                       compatible = "socionext,uniphier-ld11-soc-glue",
                                     "simple-mfd", "syscon";
                        reg = <0x5f800000 0x2000>;
                        u-boot,dm-pre-reloc;
                sysctrl@61840000 {
                        compatible = "socionext,uniphier-ld11-sysctrl",
                                     "simple-mfd", "syscon";
-                       reg = <0x61840000 0x4000>;
+                       reg = <0x61840000 0x10000>;
 
                        sys_clk: clock {
                                compatible = "socionext,uniphier-ld11-clock";
                                #reset-cells = <1>;
                        };
                };
+
+               nand: nand@68000000 {
+                       compatible = "socionext,denali-nand-v5b";
+                       status = "disabled";
+                       reg-names = "nand_data", "denali_reg";
+                       reg = <0x68000000 0x20>, <0x68100000 0x1000>;
+                       interrupts = <0 65 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_nand>;
+                       clocks = <&sys_clk 2>;
+                       nand-ecc-strength = <8>;
+               };
        };
 };
 
index 29a84aeccdd8500ae1e71917905409189626c271..1b41945ead1a8cf6fa11f0737083f025def82a0d 100644 (file)
@@ -7,7 +7,7 @@
  * SPDX-License-Identifier:    GPL-2.0+        X11
  */
 
-/memreserve/ 0x80000000 0x00000008;    /* cpu-release-addr */
+/memreserve/ 0x80000000 0x00080000;
 
 / {
        compatible = "socionext,uniphier-ld20";
                        device_type = "cpu";
                        compatible = "arm,cortex-a72", "arm,armv8";
                        reg = <0 0x000>;
-                       enable-method = "spin-table";
-                       cpu-release-addr = <0 0x80000000>;
+                       clocks = <&sys_clk 32>;
+                       enable-method = "psci";
+                       operating-points-v2 = <&cluster0_opp>;
                };
 
                cpu1: cpu@1 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72", "arm,armv8";
                        reg = <0 0x001>;
-                       enable-method = "spin-table";
-                       cpu-release-addr = <0 0x80000000>;
+                       clocks = <&sys_clk 32>;
+                       enable-method = "psci";
+                       operating-points-v2 = <&cluster0_opp>;
                };
 
                cpu2: cpu@100 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0 0x100>;
-                       enable-method = "spin-table";
-                       cpu-release-addr = <0 0x80000000>;
+                       clocks = <&sys_clk 33>;
+                       enable-method = "psci";
+                       operating-points-v2 = <&cluster1_opp>;
                };
 
                cpu3: cpu@101 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0 0x101>;
-                       enable-method = "spin-table";
-                       cpu-release-addr = <0 0x80000000>;
+                       clocks = <&sys_clk 33>;
+                       enable-method = "psci";
+                       operating-points-v2 = <&cluster1_opp>;
                };
        };
 
+       cluster0_opp: opp_table0 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp@250000000 {
+                       opp-hz = /bits/ 64 <250000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@275000000 {
+                       opp-hz = /bits/ 64 <275000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@500000000 {
+                       opp-hz = /bits/ 64 <500000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@550000000 {
+                       opp-hz = /bits/ 64 <550000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@666667000 {
+                       opp-hz = /bits/ 64 <666667000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@733334000 {
+                       opp-hz = /bits/ 64 <733334000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@1100000000 {
+                       opp-hz = /bits/ 64 <1100000000>;
+                       clock-latency-ns = <300>;
+               };
+       };
+
+       cluster1_opp: opp_table1 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp@250000000 {
+                       opp-hz = /bits/ 64 <250000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@275000000 {
+                       opp-hz = /bits/ 64 <275000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@500000000 {
+                       opp-hz = /bits/ 64 <500000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@550000000 {
+                       opp-hz = /bits/ 64 <550000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@666667000 {
+                       opp-hz = /bits/ 64 <666667000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@733334000 {
+                       opp-hz = /bits/ 64 <733334000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@1100000000 {
+                       opp-hz = /bits/ 64 <1100000000>;
+                       clock-latency-ns = <300>;
+               };
+       };
+
+       psci {
+               compatible = "arm,psci-1.0";
+               method = "smc";
+       };
+
        clocks {
                refclk: ref {
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
                        clock-frequency = <25000000>;
                };
-
-               i2c_clk: i2c_clk {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
-                       clock-frequency = <50000000>;
-               };
        };
 
        timer {
                        interrupts = <0 41 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c0>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 4>;
                        clock-frequency = <100000>;
                };
 
                        interrupts = <0 42 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c1>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 5>;
                        clock-frequency = <100000>;
                };
 
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 43 4>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 6>;
                        clock-frequency = <400000>;
                };
 
                        interrupts = <0 44 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c3>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 7>;
                        clock-frequency = <100000>;
                };
 
                        interrupts = <0 45 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c4>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 8>;
                        clock-frequency = <100000>;
                };
 
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 25 4>;
-                       clocks = <&i2c_clk>;
+                       clocks = <&peri_clk 9>;
                        clock-frequency = <400000>;
                };
 
                        reg = <0x59801000 0x400>;
                };
 
-               mioctrl@59810000 {
-                       compatible = "socionext,uniphier-mioctrl",
+               sdctrl@59810000 {
+                       compatible = "socionext,uniphier-ld20-sdctrl",
                                     "simple-mfd", "syscon";
                        reg = <0x59810000 0x800>;
 
-                       mio_clk: clock {
-                               compatible = "socionext,uniphier-ld20-mio-clock";
+                       sd_clk: clock {
+                               compatible = "socionext,uniphier-ld20-sd-clock";
                                #clock-cells = <1>;
                        };
 
-                       mio_rst: reset {
-                               compatible = "socionext,uniphier-ld20-mio-reset";
+                       sd_rst: reset {
+                               compatible = "socionext,uniphier-ld20-sd-reset";
                                #reset-cells = <1>;
                        };
                };
 
                perictrl@59820000 {
-                       compatible = "socionext,uniphier-perictrl",
+                       compatible = "socionext,uniphier-ld20-perictrl",
                                     "simple-mfd", "syscon";
                        reg = <0x59820000 0x200>;
 
                        };
                };
 
+               emmc: sdhc@5a000000 {
+                       compatible = "cdns,sd4hc";
+                       reg = <0x5a000000 0x400>;
+                       interrupts = <0 78 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_emmc_1v8>;
+                       clocks = <&sys_clk 4>;
+                       bus-width = <8>;
+                       mmc-ddr-1_8v;
+                       mmc-hs200-1_8v;
+                       /* mmc-hs400-1_8v; support depends on board design */
+               };
+
                sd: sdhc@5a400000 {
                        compatible = "socionext,uniphier-sdhc";
                        status = "disabled";
                        interrupts = <0 76 4>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_sd>;
-                       clocks = <&mio_clk 0>;
+                       clocks = <&sd_clk 0>;
                        reset-names = "host";
-                       resets = <&mio_rst 0>;
+                       resets = <&sd_rst 0>;
                        bus-width = <4>;
+                       cap-sd-highspeed;
                };
 
                soc-glue@5f800000 {
-                       compatible = "socionext,uniphier-soc-glue",
+                       compatible = "socionext,uniphier-ld20-soc-glue",
                                     "simple-mfd", "syscon";
                        reg = <0x5f800000 0x2000>;
                        u-boot,dm-pre-reloc;
                };
 
                sysctrl@61840000 {
-                       compatible = "socionext,uniphier-sysctrl",
+                       compatible = "socionext,uniphier-ld20-sysctrl",
                                     "simple-mfd", "syscon";
-                       reg = <0x61840000 0x4000>;
+                       reg = <0x61840000 0x10000>;
 
                        sys_clk: clock {
                                compatible = "socionext,uniphier-ld20-clock";
                                #reset-cells = <1>;
                        };
                };
+
+               usb: usb@65b00000 {
+                       compatible = "socionext,uniphier-ld20-dwc3";
+                       reg = <0x65b00000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb0>, <&pinctrl_usb1>,
+                                   <&pinctrl_usb2>, <&pinctrl_usb3>;
+                       dwc3@65a00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x65a00000 0x10000>;
+                               interrupts = <0 134 4>;
+                               tx-fifo-resize;
+                       };
+               };
+
+               nand: nand@68000000 {
+                       compatible = "socionext,denali-nand-v5b";
+                       status = "disabled";
+                       reg-names = "nand_data", "denali_reg";
+                       reg = <0x68000000 0x20>, <0x68100000 0x1000>;
+                       interrupts = <0 65 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_nand>;
+                       clocks = <&sys_clk 2>;
+                       nand-ecc-strength = <8>;
+               };
        };
 };
 
index 9f555df652d6411cced35d598a47f06078578272..bbfa164c92a3dcccb2d9026bcf5216512394f2a8 100644 (file)
@@ -7,7 +7,7 @@
  * SPDX-License-Identifier:    GPL-2.0+        X11
  */
 
-/include/ "uniphier-common32.dtsi"
+/include/ "skeleton.dtsi"
 
 / {
        compatible = "socionext,uniphier-ld4";
                };
        };
 
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
        clocks {
-               arm_timer_clk: arm_timer_clk {
-                       #clock-cells = <0>;
+               refclk: ref {
                        compatible = "fixed-clock";
-                       clock-frequency = <50000000>;
+                       #clock-cells = <0>;
+                       clock-frequency = <24576000>;
                };
 
-               iobus_clk: iobus_clk {
+               arm_timer_clk: arm_timer_clk {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
-                       clock-frequency = <100000000>;
+                       clock-frequency = <50000000>;
                };
        };
-};
 
-&soc {
-       l2: l2-cache@500c0000 {
-               compatible = "socionext,uniphier-system-cache";
-               reg = <0x500c0000 0x2000>, <0x503c0100 0x4>, <0x506c0000 0x400>;
-               interrupts = <0 174 4>, <0 175 4>;
-               cache-unified;
-               cache-size = <(512 * 1024)>;
-               cache-sets = <256>;
-               cache-line-size = <128>;
-               cache-level = <2>;
-       };
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+               interrupt-parent = <&intc>;
+               u-boot,dm-pre-reloc;
+
+               l2: l2-cache@500c0000 {
+                       compatible = "socionext,uniphier-system-cache";
+                       reg = <0x500c0000 0x2000>, <0x503c0100 0x4>,
+                             <0x506c0000 0x400>;
+                       interrupts = <0 174 4>, <0 175 4>;
+                       cache-unified;
+                       cache-size = <(512 * 1024)>;
+                       cache-sets = <256>;
+                       cache-line-size = <128>;
+                       cache-level = <2>;
+               };
 
-       port0x: gpio@55000008 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000008 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial0: serial@54006800 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006800 0x40>;
+                       interrupts = <0 33 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart0>;
+                       clocks = <&peri_clk 0>;
+                       clock-frequency = <36864000>;
+               };
 
-       port1x: gpio@55000010 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000010 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial1: serial@54006900 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006900 0x40>;
+                       interrupts = <0 35 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart1>;
+                       clocks = <&peri_clk 1>;
+                       clock-frequency = <36864000>;
+               };
 
-       port2x: gpio@55000018 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000018 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial2: serial@54006a00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006a00 0x40>;
+                       interrupts = <0 37 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart2>;
+                       clocks = <&peri_clk 2>;
+                       clock-frequency = <36864000>;
+               };
 
-       port3x: gpio@55000020 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000020 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial3: serial@54006b00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006b00 0x40>;
+                       interrupts = <0 29 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart3>;
+                       clocks = <&peri_clk 3>;
+                       clock-frequency = <36864000>;
+               };
 
-       port4: gpio@55000028 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000028 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port0x: gpio@55000008 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000008 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port5x: gpio@55000030 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000030 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port1x: gpio@55000010 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000010 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port6x: gpio@55000038 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000038 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port2x: gpio@55000018 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000018 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port7x: gpio@55000040 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000040 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port3x: gpio@55000020 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000020 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port8x: gpio@55000048 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000048 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port4: gpio@55000028 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000028 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port9x: gpio@55000050 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000050 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port5x: gpio@55000030 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000030 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port10x: gpio@55000058 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000058 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port6x: gpio@55000038 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000038 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port11x: gpio@55000060 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000060 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port7x: gpio@55000040 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000040 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port12x: gpio@55000068 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000068 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port8x: gpio@55000048 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000048 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port13x: gpio@55000070 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000070 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port9x: gpio@55000050 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000050 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port14x: gpio@55000078 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000078 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port10x: gpio@55000058 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000058 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port16x: gpio@55000088 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000088 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port11x: gpio@55000060 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000060 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c0: i2c@58400000 {
-               compatible = "socionext,uniphier-i2c";
-               status = "disabled";
-               reg = <0x58400000 0x40>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 41 1>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c0>;
-               clocks = <&iobus_clk>;
-               clock-frequency = <100000>;
-       };
+               port12x: gpio@55000068 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000068 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c1: i2c@58480000 {
-               compatible = "socionext,uniphier-i2c";
-               status = "disabled";
-               reg = <0x58480000 0x40>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 42 1>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c1>;
-               clocks = <&iobus_clk>;
-               clock-frequency = <100000>;
-       };
+               port13x: gpio@55000070 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000070 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       /* chip-internal connection for DMD */
-       i2c2: i2c@58500000 {
-               compatible = "socionext,uniphier-i2c";
-               reg = <0x58500000 0x40>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 43 1>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c2>;
-               clocks = <&iobus_clk>;
-               clock-frequency = <400000>;
-       };
+               port14x: gpio@55000078 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000078 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c3: i2c@58580000 {
-               compatible = "socionext,uniphier-i2c";
-               status = "disabled";
-               reg = <0x58580000 0x40>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 44 1>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c3>;
-               clocks = <&iobus_clk>;
-               clock-frequency = <100000>;
-       };
+               port16x: gpio@55000088 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000088 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       sd: sdhc@5a400000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x5a400000 0x200>;
-               interrupts = <0 76 4>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_sd>;
-               pinctrl-1 = <&pinctrl_sd_1v8>;
-               clocks = <&mio_clk 0>;
-               reset-names = "host", "bridge";
-               resets = <&mio_rst 0>, <&mio_rst 3>;
-               bus-width = <4>;
-       };
+               i2c0: i2c@58400000 {
+                       compatible = "socionext,uniphier-i2c";
+                       status = "disabled";
+                       reg = <0x58400000 0x40>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 41 1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c0>;
+                       clocks = <&peri_clk 4>;
+                       clock-frequency = <100000>;
+               };
 
-       emmc: sdhc@5a500000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x5a500000 0x200>;
-               interrupts = <0 78 4>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_emmc>;
-               pinctrl-1 = <&pinctrl_emmc_1v8>;
-               clocks = <&mio_clk 1>;
-               reset-names = "host", "bridge", "hw-reset";
-               resets = <&mio_rst 1>, <&mio_rst 4>, <&mio_rst 6>;
-               bus-width = <8>;
-               non-removable;
-       };
+               i2c1: i2c@58480000 {
+                       compatible = "socionext,uniphier-i2c";
+                       status = "disabled";
+                       reg = <0x58480000 0x40>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 42 1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c1>;
+                       clocks = <&peri_clk 5>;
+                       clock-frequency = <100000>;
+               };
 
-       usb0: usb@5a800100 {
-               compatible = "socionext,uniphier-ehci", "generic-ehci";
-               status = "disabled";
-               reg = <0x5a800100 0x100>;
-               interrupts = <0 80 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb0>;
-               clocks = <&mio_clk 7>, <&mio_clk 8>, <&mio_clk 12>;
-               resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 8>,
-                        <&mio_rst 12>;
-       };
+               /* chip-internal connection for DMD */
+               i2c2: i2c@58500000 {
+                       compatible = "socionext,uniphier-i2c";
+                       reg = <0x58500000 0x40>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 43 1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c2>;
+                       clocks = <&peri_clk 6>;
+                       clock-frequency = <400000>;
+               };
 
-       usb1: usb@5a810100 {
-               compatible = "socionext,uniphier-ehci", "generic-ehci";
-               status = "disabled";
-               reg = <0x5a810100 0x100>;
-               interrupts = <0 81 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb1>;
-               clocks = <&mio_clk 7>, <&mio_clk 9>, <&mio_clk 13>;
-               resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 9>,
-                        <&mio_rst 13>;
-       };
+               i2c3: i2c@58580000 {
+                       compatible = "socionext,uniphier-i2c";
+                       status = "disabled";
+                       reg = <0x58580000 0x40>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 44 1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c3>;
+                       clocks = <&peri_clk 7>;
+                       clock-frequency = <100000>;
+               };
 
-       usb2: usb@5a820100 {
-               compatible = "socionext,uniphier-ehci", "generic-ehci";
-               status = "disabled";
-               reg = <0x5a820100 0x100>;
-               interrupts = <0 82 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb2>;
-               clocks = <&mio_clk 7>, <&mio_clk 10>, <&mio_clk 14>;
-               resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 10>,
-                        <&mio_rst 14>;
-       };
+               system_bus: system-bus@58c00000 {
+                       compatible = "socionext,uniphier-system-bus";
+                       status = "disabled";
+                       reg = <0x58c00000 0x400>;
+                       #address-cells = <2>;
+                       #size-cells = <1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_system_bus>;
+               };
 
-       aidet@61830000 {
-               compatible = "simple-mfd", "syscon";
-               reg = <0x61830000 0x200>;
-       };
-};
+               smpctrl@59800000 {
+                       compatible = "socionext,uniphier-smpctrl";
+                       reg = <0x59801000 0x400>;
+               };
 
-&refclk {
-       clock-frequency = <24576000>;
-};
+               mioctrl@59810000 {
+                       compatible = "socionext,uniphier-ld4-mioctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59810000 0x800>;
 
-&serial0 {
-       clock-frequency = <36864000>;
-};
+                       mio_clk: clock {
+                               compatible = "socionext,uniphier-ld4-mio-clock";
+                               #clock-cells = <1>;
+                       };
 
-&serial1 {
-       clock-frequency = <36864000>;
-};
+                       mio_rst: reset {
+                               compatible = "socionext,uniphier-ld4-mio-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-&serial2 {
-       clock-frequency = <36864000>;
-};
+               perictrl@59820000 {
+                       compatible = "socionext,uniphier-ld4-perictrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59820000 0x200>;
 
-&serial3 {
-       interrupts = <0 29 4>;
-       clock-frequency = <36864000>;
-};
+                       peri_clk: clock {
+                               compatible = "socionext,uniphier-ld4-peri-clock";
+                               #clock-cells = <1>;
+                       };
 
-&mio_clk {
-       compatible = "socionext,uniphier-ld4-mio-clock";
-};
+                       peri_rst: reset {
+                               compatible = "socionext,uniphier-ld4-peri-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-&mio_rst {
-       compatible = "socionext,uniphier-ld4-mio-reset";
-};
+               sd: sdhc@5a400000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a400000 0x200>;
+                       interrupts = <0 76 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_sd>;
+                       pinctrl-1 = <&pinctrl_sd_1v8>;
+                       clocks = <&mio_clk 0>;
+                       reset-names = "host", "bridge";
+                       resets = <&mio_rst 0>, <&mio_rst 3>;
+                       bus-width = <4>;
+                       cap-sd-highspeed;
+                       sd-uhs-sdr12;
+                       sd-uhs-sdr25;
+                       sd-uhs-sdr50;
+               };
 
-&peri_clk {
-       compatible = "socionext,uniphier-ld4-peri-clock";
-};
+               emmc: sdhc@5a500000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a500000 0x200>;
+                       interrupts = <0 78 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_emmc>;
+                       pinctrl-1 = <&pinctrl_emmc_1v8>;
+                       clocks = <&mio_clk 1>;
+                       reset-names = "host", "bridge";
+                       resets = <&mio_rst 1>, <&mio_rst 4>;
+                       bus-width = <8>;
+                       non-removable;
+                       cap-mmc-highspeed;
+                       cap-mmc-hw-reset;
+               };
 
-&peri_rst {
-       compatible = "socionext,uniphier-ld4-peri-reset";
-};
+               usb0: usb@5a800100 {
+                       compatible = "socionext,uniphier-ehci", "generic-ehci";
+                       status = "disabled";
+                       reg = <0x5a800100 0x100>;
+                       interrupts = <0 80 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb0>;
+                       clocks = <&mio_clk 7>, <&mio_clk 8>, <&mio_clk 12>;
+                       resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 8>,
+                                <&mio_rst 12>;
+               };
 
-&pinctrl {
-       compatible = "socionext,uniphier-ld4-pinctrl";
-};
+               usb1: usb@5a810100 {
+                       compatible = "socionext,uniphier-ehci", "generic-ehci";
+                       status = "disabled";
+                       reg = <0x5a810100 0x100>;
+                       interrupts = <0 81 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb1>;
+                       clocks = <&mio_clk 7>, <&mio_clk 9>, <&mio_clk 13>;
+                       resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 9>,
+                                <&mio_rst 13>;
+               };
 
-&sys_clk {
-       compatible = "socionext,uniphier-ld4-clock";
-};
+               usb2: usb@5a820100 {
+                       compatible = "socionext,uniphier-ehci", "generic-ehci";
+                       status = "disabled";
+                       reg = <0x5a820100 0x100>;
+                       interrupts = <0 82 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb2>;
+                       clocks = <&mio_clk 7>, <&mio_clk 10>, <&mio_clk 14>;
+                       resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 10>,
+                                <&mio_rst 14>;
+               };
+
+               soc-glue@5f800000 {
+                       compatible = "socionext,uniphier-ld4-soc-glue",
+                                    "simple-mfd", "syscon";
+                       reg = <0x5f800000 0x2000>;
+                       u-boot,dm-pre-reloc;
+
+                       pinctrl: pinctrl {
+                               compatible = "socionext,uniphier-ld4-pinctrl";
+                               u-boot,dm-pre-reloc;
+                       };
+               };
+
+               timer@60000200 {
+                       compatible = "arm,cortex-a9-global-timer";
+                       reg = <0x60000200 0x20>;
+                       interrupts = <1 11 0x104>;
+                       clocks = <&arm_timer_clk>;
+               };
 
-&sys_rst {
-       compatible = "socionext,uniphier-ld4-reset";
+               timer@60000600 {
+                       compatible = "arm,cortex-a9-twd-timer";
+                       reg = <0x60000600 0x20>;
+                       interrupts = <1 13 0x104>;
+                       clocks = <&arm_timer_clk>;
+               };
+
+               intc: interrupt-controller@60001000 {
+                       compatible = "arm,cortex-a9-gic";
+                       reg = <0x60001000 0x1000>,
+                             <0x60000100 0x100>;
+                       #interrupt-cells = <3>;
+                       interrupt-controller;
+               };
+
+               aidet@61830000 {
+                       compatible = "simple-mfd", "syscon";
+                       reg = <0x61830000 0x200>;
+               };
+
+               sysctrl@61840000 {
+                       compatible = "socionext,uniphier-ld4-sysctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x61840000 0x10000>;
+
+                       sys_clk: clock {
+                               compatible = "socionext,uniphier-ld4-clock";
+                               #clock-cells = <1>;
+                       };
+
+                       sys_rst: reset {
+                               compatible = "socionext,uniphier-ld4-reset";
+                               #reset-cells = <1>;
+                       };
+               };
+
+               nand: nand@68000000 {
+                       compatible = "socionext,denali-nand-v5a";
+                       status = "disabled";
+                       reg-names = "nand_data", "denali_reg";
+                       reg = <0x68000000 0x20>, <0x68100000 0x1000>;
+                       interrupts = <0 65 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_nand>;
+                       clocks = <&sys_clk 2>;
+                       nand-ecc-strength = <8>;
+               };
+       };
 };
+
+/include/ "uniphier-pinctrl.dtsi"
index 2d49b3e831ad6c52c1aa9904dd7d80ef1e21278b..9714fb0c302505f6aaba284dfc1114126262f913 100644 (file)
        status = "okay";
 };
 
-&usb0 {
+&usb2 {
        status = "okay";
 };
 
-&usb2 {
+&usb3 {
        status = "okay";
 };
 
-&usb3 {
+&usb0 {
+       status = "okay";
+};
+
+&usb1 {
        status = "okay";
 };
 
index aa80ea4801f26ba20fdd96399038bb3fbf85ded4..9b881f6905b07a2549ba7bf14c11ea0b1a62d357 100644 (file)
@@ -7,7 +7,7 @@
  * SPDX-License-Identifier:    GPL-2.0+        X11
  */
 
-/include/ "uniphier-common32.dtsi"
+/include/ "skeleton.dtsi"
 
 / {
        compatible = "socionext,uniphier-pro4";
                };
        };
 
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
        clocks {
+               refclk: ref {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-frequency = <25000000>;
+               };
+
                arm_timer_clk: arm_timer_clk {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <50000000>;
                };
+       };
 
-               uart_clk: uart_clk {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+               interrupt-parent = <&intc>;
+               u-boot,dm-pre-reloc;
+
+               l2: l2-cache@500c0000 {
+                       compatible = "socionext,uniphier-system-cache";
+                       reg = <0x500c0000 0x2000>, <0x503c0100 0x4>,
+                             <0x506c0000 0x400>;
+                       interrupts = <0 174 4>, <0 175 4>;
+                       cache-unified;
+                       cache-size = <(768 * 1024)>;
+                       cache-sets = <256>;
+                       cache-line-size = <128>;
+                       cache-level = <2>;
+               };
+
+               serial0: serial@54006800 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006800 0x40>;
+                       interrupts = <0 33 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart0>;
+                       clocks = <&peri_clk 0>;
                        clock-frequency = <73728000>;
                };
 
-               i2c_clk: i2c_clk {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
-                       clock-frequency = <50000000>;
+               serial1: serial@54006900 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006900 0x40>;
+                       interrupts = <0 35 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart1>;
+                       clocks = <&peri_clk 1>;
+                       clock-frequency = <73728000>;
                };
-       };
-};
 
-&soc {
-       l2: l2-cache@500c0000 {
-               compatible = "socionext,uniphier-system-cache";
-               reg = <0x500c0000 0x2000>, <0x503c0100 0x4>, <0x506c0000 0x400>;
-               interrupts = <0 174 4>, <0 175 4>;
-               cache-unified;
-               cache-size = <(768 * 1024)>;
-               cache-sets = <256>;
-               cache-line-size = <128>;
-               cache-level = <2>;
-       };
+               serial2: serial@54006a00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006a00 0x40>;
+                       interrupts = <0 37 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart2>;
+                       clocks = <&peri_clk 2>;
+                       clock-frequency = <73728000>;
+               };
 
-       port0x: gpio@55000008 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000008 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial3: serial@54006b00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006b00 0x40>;
+                       interrupts = <0 177 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart3>;
+                       clocks = <&peri_clk 3>;
+                       clock-frequency = <73728000>;
+               };
 
-       port1x: gpio@55000010 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000010 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port0x: gpio@55000008 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000008 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port2x: gpio@55000018 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000018 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port1x: gpio@55000010 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000010 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port3x: gpio@55000020 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000020 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port2x: gpio@55000018 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000018 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port4: gpio@55000028 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000028 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port3x: gpio@55000020 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000020 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port5x: gpio@55000030 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000030 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port4: gpio@55000028 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000028 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port6x: gpio@55000038 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000038 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port5x: gpio@55000030 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000030 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port7x: gpio@55000040 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000040 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port6x: gpio@55000038 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000038 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port8x: gpio@55000048 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000048 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port7x: gpio@55000040 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000040 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port9x: gpio@55000050 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000050 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port8x: gpio@55000048 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000048 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port10x: gpio@55000058 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000058 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port9x: gpio@55000050 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000050 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port11x: gpio@55000060 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000060 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port10x: gpio@55000058 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000058 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port12x: gpio@55000068 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000068 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port11x: gpio@55000060 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000060 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port13x: gpio@55000070 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000070 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port12x: gpio@55000068 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000068 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port14x: gpio@55000078 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000078 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port13x: gpio@55000070 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000070 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port17x: gpio@550000a0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000a0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port14x: gpio@55000078 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000078 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port18x: gpio@550000a8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000a8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port17x: gpio@550000a0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000a0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port19x: gpio@550000b0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000b0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port18x: gpio@550000a8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000a8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port20x: gpio@550000b8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000b8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port19x: gpio@550000b0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000b0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port21x: gpio@550000c0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000c0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port20x: gpio@550000b8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000b8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port22x: gpio@550000c8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000c8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port21x: gpio@550000c0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000c0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port23x: gpio@550000d0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000d0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port22x: gpio@550000c8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000c8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port24x: gpio@550000d8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000d8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port23x: gpio@550000d0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000d0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port25x: gpio@550000e0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000e0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port24x: gpio@550000d8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000d8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port26x: gpio@550000e8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000e8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port25x: gpio@550000e0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000e0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port27x: gpio@550000f0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000f0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port26x: gpio@550000e8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000e8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port28x: gpio@550000f8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000f8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port27x: gpio@550000f0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000f0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port29x: gpio@55000100 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000100 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port28x: gpio@550000f8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000f8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port30x: gpio@55000108 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000108 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port29x: gpio@55000100 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000100 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c0: i2c@58780000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58780000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 41 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c0>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port30x: gpio@55000108 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000108 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c1: i2c@58781000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58781000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 42 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c1>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               i2c0: i2c@58780000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58780000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 41 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c0>;
+                       clocks = <&peri_clk 4>;
+                       clock-frequency = <100000>;
+               };
 
-       i2c2: i2c@58782000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58782000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 43 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c2>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               i2c1: i2c@58781000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58781000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 42 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c1>;
+                       clocks = <&peri_clk 5>;
+                       clock-frequency = <100000>;
+               };
 
-       i2c3: i2c@58783000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58783000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 44 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c3>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               i2c2: i2c@58782000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58782000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 43 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c2>;
+                       clocks = <&peri_clk 6>;
+                       clock-frequency = <100000>;
+               };
 
-       /* i2c4 does not exist */
+               i2c3: i2c@58783000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58783000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 44 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c3>;
+                       clocks = <&peri_clk 7>;
+                       clock-frequency = <100000>;
+               };
 
-       /* chip-internal connection for DMD */
-       i2c5: i2c@58785000 {
-               compatible = "socionext,uniphier-fi2c";
-               reg = <0x58785000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 25 4>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <400000>;
-       };
+               /* i2c4 does not exist */
+
+               /* chip-internal connection for DMD */
+               i2c5: i2c@58785000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       reg = <0x58785000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 25 4>;
+                       clocks = <&peri_clk 9>;
+                       clock-frequency = <400000>;
+               };
 
-       /* chip-internal connection for HDMI */
-       i2c6: i2c@58786000 {
-               compatible = "socionext,uniphier-fi2c";
-               reg = <0x58786000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 26 4>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <400000>;
-       };
+               /* chip-internal connection for HDMI */
+               i2c6: i2c@58786000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       reg = <0x58786000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 26 4>;
+                       clocks = <&peri_clk 10>;
+                       clock-frequency = <400000>;
+               };
 
-       sd: sdhc@5a400000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x5a400000 0x200>;
-               interrupts = <0 76 4>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_sd>;
-               pinctrl-1 = <&pinctrl_sd_1v8>;
-               clocks = <&mio_clk 0>;
-               reset-names = "host", "bridge";
-               resets = <&mio_rst 0>, <&mio_rst 3>;
-               bus-width = <4>;
-       };
+               system_bus: system-bus@58c00000 {
+                       compatible = "socionext,uniphier-system-bus";
+                       status = "disabled";
+                       reg = <0x58c00000 0x400>;
+                       #address-cells = <2>;
+                       #size-cells = <1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_system_bus>;
+               };
 
-       emmc: sdhc@5a500000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x5a500000 0x200>;
-               interrupts = <0 78 4>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_emmc>;
-               pinctrl-1 = <&pinctrl_emmc_1v8>;
-               clocks = <&mio_clk 1>;
-               reset-names = "host", "bridge", "hw-reset";
-               resets = <&mio_rst 1>, <&mio_rst 4>, <&mio_rst 6>;
-               bus-width = <8>;
-               non-removable;
-       };
+               smpctrl@59800000 {
+                       compatible = "socionext,uniphier-smpctrl";
+                       reg = <0x59801000 0x400>;
+               };
 
-       sd1: sdhc@5a600000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x5a600000 0x200>;
-               interrupts = <0 85 4>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_sd1>;
-               pinctrl-1 = <&pinctrl_sd1_1v8>;
-               clocks = <&mio_clk 2>;
-               resets = <&mio_rst 2>, <&mio_rst 5>;
-               bus-width = <4>;
-       };
+               mioctrl@59810000 {
+                       compatible = "socionext,uniphier-pro4-mioctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59810000 0x800>;
+                       u-boot,dm-pre-reloc;
+
+                       mio_clk: clock {
+                               compatible = "socionext,uniphier-pro4-mio-clock";
+                               #clock-cells = <1>;
+                       };
+
+                       mio_rst: reset {
+                               compatible = "socionext,uniphier-pro4-mio-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-       usb2: usb@5a800100 {
-               compatible = "socionext,uniphier-ehci", "generic-ehci";
-               status = "disabled";
-               reg = <0x5a800100 0x100>;
-               interrupts = <0 80 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb2>;
-               clocks = <&mio_clk 7>, <&mio_clk 8>, <&mio_clk 12>;
-               resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 8>,
-                        <&mio_rst 12>;
-       };
+               perictrl@59820000 {
+                       compatible = "socionext,uniphier-pro4-perictrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59820000 0x200>;
 
-       usb3: usb@5a810100 {
-               compatible = "socionext,uniphier-ehci", "generic-ehci";
-               status = "disabled";
-               reg = <0x5a810100 0x100>;
-               interrupts = <0 81 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb3>;
-               clocks = <&mio_clk 7>, <&mio_clk 9>, <&mio_clk 13>;
-               resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 9>,
-                        <&mio_rst 13>;
-       };
+                       peri_clk: clock {
+                               compatible = "socionext,uniphier-pro4-peri-clock";
+                               #clock-cells = <1>;
+                       };
 
-       aidet@5fc20000 {
-               compatible = "simple-mfd", "syscon";
-               reg = <0x5fc20000 0x200>;
-       };
+                       peri_rst: reset {
+                               compatible = "socionext,uniphier-pro4-peri-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-       usb0: usb@65a00000 {
-               compatible = "socionext,uniphier-xhci", "generic-xhci";
-               status = "disabled";
-               reg = <0x65a00000 0x100>;
-               interrupts = <0 134 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb0>;
-       };
+               sd: sdhc@5a400000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a400000 0x200>;
+                       interrupts = <0 76 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_sd>;
+                       pinctrl-1 = <&pinctrl_sd_1v8>;
+                       clocks = <&mio_clk 0>;
+                       reset-names = "host", "bridge";
+                       resets = <&mio_rst 0>, <&mio_rst 3>;
+                       bus-width = <4>;
+                       cap-sd-highspeed;
+                       sd-uhs-sdr12;
+                       sd-uhs-sdr25;
+                       sd-uhs-sdr50;
+               };
 
-       usb1: usb@65c00000 {
-               compatible = "socionext,uniphier-xhci", "generic-xhci";
-               status = "disabled";
-               reg = <0x65c00000 0x100>;
-               interrupts = <0 137 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb1>;
-       };
-};
+               emmc: sdhc@5a500000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a500000 0x200>;
+                       interrupts = <0 78 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_emmc>;
+                       pinctrl-1 = <&pinctrl_emmc_1v8>;
+                       clocks = <&mio_clk 1>;
+                       reset-names = "host", "bridge";
+                       resets = <&mio_rst 1>, <&mio_rst 4>;
+                       bus-width = <8>;
+                       non-removable;
+                       cap-mmc-highspeed;
+                       cap-mmc-hw-reset;
+               };
 
-&refclk {
-       clock-frequency = <25000000>;
-};
+               sd1: sdhc@5a600000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a600000 0x200>;
+                       interrupts = <0 85 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_sd1>;
+                       pinctrl-1 = <&pinctrl_sd1_1v8>;
+                       clocks = <&mio_clk 2>;
+                       resets = <&mio_rst 2>, <&mio_rst 5>;
+                       bus-width = <4>;
+                       cap-sd-highspeed;
+                       sd-uhs-sdr12;
+                       sd-uhs-sdr25;
+                       sd-uhs-sdr50;
+               };
 
-&serial0 {
-       clock-frequency = <73728000>;
-};
+               usb2: usb@5a800100 {
+                       compatible = "socionext,uniphier-ehci", "generic-ehci";
+                       status = "disabled";
+                       reg = <0x5a800100 0x100>;
+                       interrupts = <0 80 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb2>;
+                       clocks = <&mio_clk 7>, <&mio_clk 8>, <&mio_clk 12>;
+                       resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 8>,
+                                <&mio_rst 12>;
+               };
 
-&serial1 {
-       clock-frequency = <73728000>;
-};
+               usb3: usb@5a810100 {
+                       compatible = "socionext,uniphier-ehci", "generic-ehci";
+                       status = "disabled";
+                       reg = <0x5a810100 0x100>;
+                       interrupts = <0 81 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb3>;
+                       clocks = <&mio_clk 7>, <&mio_clk 9>, <&mio_clk 13>;
+                       resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 9>,
+                                <&mio_rst 13>;
+               };
 
-&serial2 {
-       clock-frequency = <73728000>;
-};
+               soc-glue@5f800000 {
+                       compatible = "socionext,uniphier-pro4-soc-glue",
+                                    "simple-mfd", "syscon";
+                       reg = <0x5f800000 0x2000>;
+                       u-boot,dm-pre-reloc;
 
-&serial3 {
-       clock-frequency = <73728000>;
-};
+                       pinctrl: pinctrl {
+                               compatible = "socionext,uniphier-pro4-pinctrl";
+                               u-boot,dm-pre-reloc;
+                       };
+               };
 
-&mio_clk {
-       compatible = "socionext,uniphier-pro4-mio-clock";
-};
+               aidet@5fc20000 {
+                       compatible = "simple-mfd", "syscon";
+                       reg = <0x5fc20000 0x200>;
+               };
 
-&mio_rst {
-       compatible = "socionext,uniphier-pro4-mio-reset";
-};
+               timer@60000200 {
+                       compatible = "arm,cortex-a9-global-timer";
+                       reg = <0x60000200 0x20>;
+                       interrupts = <1 11 0x304>;
+                       clocks = <&arm_timer_clk>;
+               };
 
-&peri_clk {
-       compatible = "socionext,uniphier-pro4-peri-clock";
-};
+               timer@60000600 {
+                       compatible = "arm,cortex-a9-twd-timer";
+                       reg = <0x60000600 0x20>;
+                       interrupts = <1 13 0x304>;
+                       clocks = <&arm_timer_clk>;
+               };
 
-&peri_rst {
-       compatible = "socionext,uniphier-pro4-peri-reset";
-};
+               intc: interrupt-controller@60001000 {
+                       compatible = "arm,cortex-a9-gic";
+                       reg = <0x60001000 0x1000>,
+                             <0x60000100 0x100>;
+                       #interrupt-cells = <3>;
+                       interrupt-controller;
+               };
 
-&pinctrl {
-       compatible = "socionext,uniphier-pro4-pinctrl";
-};
+               sysctrl@61840000 {
+                       compatible = "socionext,uniphier-pro4-sysctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x61840000 0x10000>;
 
-&sys_clk {
-       compatible = "socionext,uniphier-pro4-clock";
-};
+                       sys_clk: clock {
+                               compatible = "socionext,uniphier-pro4-clock";
+                               #clock-cells = <1>;
+                       };
 
-&sys_rst {
-       compatible = "socionext,uniphier-pro4-reset";
+                       sys_rst: reset {
+                               compatible = "socionext,uniphier-pro4-reset";
+                               #reset-cells = <1>;
+                       };
+               };
+
+               usb0: usb@65b00000 {
+                       compatible = "socionext,uniphier-pro4-dwc3";
+                       status = "disabled";
+                       reg = <0x65b00000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb0>;
+                       dwc3@65a00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x65a00000 0x10000>;
+                               interrupts = <0 134 4>;
+                               tx-fifo-resize;
+                       };
+               };
+
+               usb1: usb@65d00000 {
+                       compatible = "socionext,uniphier-pro4-dwc3";
+                       status = "disabled";
+                       reg = <0x65d00000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb1>;
+                       dwc3@65c00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x65c00000 0x10000>;
+                               interrupts = <0 137 4>;
+                               tx-fifo-resize;
+                       };
+               };
+
+               nand: nand@68000000 {
+                       compatible = "socionext,denali-nand-v5a";
+                       status = "disabled";
+                       reg-names = "nand_data", "denali_reg";
+                       reg = <0x68000000 0x20>, <0x68100000 0x1000>;
+                       interrupts = <0 65 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_nand>;
+                       clocks = <&sys_clk 2>;
+                       nand-ecc-strength = <8>;
+               };
+       };
 };
+
+/include/ "uniphier-pinctrl.dtsi"
index 97edc89a9cc89916ed1950312f91fda28d4ae134..68866e16df8e502cb050ed71c012e3f5e68eec99 100644 (file)
@@ -7,7 +7,7 @@
  * SPDX-License-Identifier:    GPL-2.0+        X11
  */
 
-/include/ "uniphier-common32.dtsi"
+/include/ "skeleton.dtsi"
 
 / {
        compatible = "socionext,uniphier-pro5";
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <0>;
+                       clocks = <&sys_clk 32>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       operating-points-v2 = <&cpu_opp>;
                };
 
                cpu@1 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <1>;
+                       clocks = <&sys_clk 32>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       operating-points-v2 = <&cpu_opp>;
                };
        };
 
+       cpu_opp: opp_table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp@100000000 {
+                       opp-hz = /bits/ 64 <100000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@116667000 {
+                       opp-hz = /bits/ 64 <116667000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@150000000 {
+                       opp-hz = /bits/ 64 <150000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@175000000 {
+                       opp-hz = /bits/ 64 <175000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@200000000 {
+                       opp-hz = /bits/ 64 <200000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@233334000 {
+                       opp-hz = /bits/ 64 <233334000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@300000000 {
+                       opp-hz = /bits/ 64 <300000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@350000000 {
+                       opp-hz = /bits/ 64 <350000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@400000000 {
+                       opp-hz = /bits/ 64 <400000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@466667000 {
+                       opp-hz = /bits/ 64 <466667000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@600000000 {
+                       opp-hz = /bits/ 64 <600000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@700000000 {
+                       opp-hz = /bits/ 64 <700000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@800000000 {
+                       opp-hz = /bits/ 64 <800000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@933334000 {
+                       opp-hz = /bits/ 64 <933334000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@1200000000 {
+                       opp-hz = /bits/ 64 <1200000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@1400000000 {
+                       opp-hz = /bits/ 64 <1400000000>;
+                       clock-latency-ns = <300>;
+               };
+       };
+
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
        clocks {
-               arm_timer_clk: arm_timer_clk {
-                       #clock-cells = <0>;
+               refclk: ref {
                        compatible = "fixed-clock";
-                       clock-frequency = <50000000>;
+                       #clock-cells = <0>;
+                       clock-frequency = <20000000>;
                };
 
-               i2c_clk: i2c_clk {
+               arm_timer_clk: arm_timer_clk {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <50000000>;
                };
        };
-};
 
-&soc {
-       l2: l2-cache@500c0000 {
-               compatible = "socionext,uniphier-system-cache";
-               reg = <0x500c0000 0x2000>, <0x503c0100 0x8>, <0x506c0000 0x400>;
-               interrupts = <0 190 4>, <0 191 4>;
-               cache-unified;
-               cache-size = <(2 * 1024 * 1024)>;
-               cache-sets = <512>;
-               cache-line-size = <128>;
-               cache-level = <2>;
-               next-level-cache = <&l3>;
-       };
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+               interrupt-parent = <&intc>;
+               u-boot,dm-pre-reloc;
+
+               l2: l2-cache@500c0000 {
+                       compatible = "socionext,uniphier-system-cache";
+                       reg = <0x500c0000 0x2000>, <0x503c0100 0x8>,
+                             <0x506c0000 0x400>;
+                       interrupts = <0 190 4>, <0 191 4>;
+                       cache-unified;
+                       cache-size = <(2 * 1024 * 1024)>;
+                       cache-sets = <512>;
+                       cache-line-size = <128>;
+                       cache-level = <2>;
+                       next-level-cache = <&l3>;
+               };
 
-       l3: l3-cache@500c8000 {
-               compatible = "socionext,uniphier-system-cache";
-               reg = <0x500c8000 0x2000>, <0x503c8100 0x8>, <0x506c8000 0x400>;
-               interrupts = <0 174 4>, <0 175 4>;
-               cache-unified;
-               cache-size = <(2 * 1024 * 1024)>;
-               cache-sets = <512>;
-               cache-line-size = <256>;
-               cache-level = <3>;
-       };
+               l3: l3-cache@500c8000 {
+                       compatible = "socionext,uniphier-system-cache";
+                       reg = <0x500c8000 0x2000>, <0x503c8100 0x8>,
+                             <0x506c8000 0x400>;
+                       interrupts = <0 174 4>, <0 175 4>;
+                       cache-unified;
+                       cache-size = <(2 * 1024 * 1024)>;
+                       cache-sets = <512>;
+                       cache-line-size = <256>;
+                       cache-level = <3>;
+               };
 
-       port0x: gpio@55000008 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000008 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial0: serial@54006800 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006800 0x40>;
+                       interrupts = <0 33 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart0>;
+                       clocks = <&peri_clk 0>;
+                       clock-frequency = <73728000>;
+               };
 
-       port1x: gpio@55000010 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000010 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial1: serial@54006900 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006900 0x40>;
+                       interrupts = <0 35 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart1>;
+                       clocks = <&peri_clk 1>;
+                       clock-frequency = <73728000>;
+               };
 
-       port2x: gpio@55000018 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000018 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial2: serial@54006a00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006a00 0x40>;
+                       interrupts = <0 37 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart2>;
+                       clocks = <&peri_clk 2>;
+                       clock-frequency = <73728000>;
+               };
 
-       port3x: gpio@55000020 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000020 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial3: serial@54006b00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006b00 0x40>;
+                       interrupts = <0 177 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart3>;
+                       clocks = <&peri_clk 3>;
+                       clock-frequency = <73728000>;
+               };
 
-       port4: gpio@55000028 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000028 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port0x: gpio@55000008 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000008 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port5x: gpio@55000030 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000030 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port1x: gpio@55000010 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000010 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port6x: gpio@55000038 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000038 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port2x: gpio@55000018 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000018 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port7x: gpio@55000040 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000040 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port3x: gpio@55000020 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000020 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port8x: gpio@55000048 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000048 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port4: gpio@55000028 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000028 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port9x: gpio@55000050 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000050 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port5x: gpio@55000030 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000030 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port10x: gpio@55000058 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000058 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port6x: gpio@55000038 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000038 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port11x: gpio@55000060 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000060 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port7x: gpio@55000040 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000040 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port12x: gpio@55000068 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000068 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port8x: gpio@55000048 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000048 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port13x: gpio@55000070 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000070 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port9x: gpio@55000050 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000050 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port14x: gpio@55000078 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000078 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port10x: gpio@55000058 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000058 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port17x: gpio@550000a0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000a0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port11x: gpio@55000060 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000060 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port18x: gpio@550000a8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000a8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port12x: gpio@55000068 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000068 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port19x: gpio@550000b0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000b0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port13x: gpio@55000070 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000070 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port20x: gpio@550000b8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000b8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port14x: gpio@55000078 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000078 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port21x: gpio@550000c0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000c0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port17x: gpio@550000a0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000a0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port22x: gpio@550000c8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000c8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port18x: gpio@550000a8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000a8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port23x: gpio@550000d0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000d0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port19x: gpio@550000b0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000b0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port24x: gpio@550000d8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000d8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port20x: gpio@550000b8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000b8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port25x: gpio@550000e0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000e0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port21x: gpio@550000c0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000c0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port26x: gpio@550000e8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000e8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port22x: gpio@550000c8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000c8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port27x: gpio@550000f0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000f0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port23x: gpio@550000d0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000d0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port28x: gpio@550000f8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000f8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port24x: gpio@550000d8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000d8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port29x: gpio@55000100 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000100 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port25x: gpio@550000e0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000e0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port30x: gpio@55000108 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000108 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port26x: gpio@550000e8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000e8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c0: i2c@58780000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58780000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 41 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c0>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port27x: gpio@550000f0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000f0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c1: i2c@58781000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58781000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 42 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c1>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port28x: gpio@550000f8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000f8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c2: i2c@58782000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58782000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 43 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c2>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port29x: gpio@55000100 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000100 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c3: i2c@58783000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58783000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 44 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c3>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port30x: gpio@55000108 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000108 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       /* i2c4 does not exist */
+               i2c0: i2c@58780000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58780000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 41 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c0>;
+                       clocks = <&peri_clk 4>;
+                       clock-frequency = <100000>;
+               };
 
-       /* chip-internal connection for DMD */
-       i2c5: i2c@58785000 {
-               compatible = "socionext,uniphier-fi2c";
-               reg = <0x58785000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 25 4>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <400000>;
-       };
+               i2c1: i2c@58781000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58781000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 42 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c1>;
+                       clocks = <&peri_clk 5>;
+                       clock-frequency = <100000>;
+               };
 
-       /* chip-internal connection for HDMI */
-       i2c6: i2c@58786000 {
-               compatible = "socionext,uniphier-fi2c";
-               reg = <0x58786000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 26 4>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <400000>;
-       };
+               i2c2: i2c@58782000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58782000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 43 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c2>;
+                       clocks = <&peri_clk 6>;
+                       clock-frequency = <100000>;
+               };
 
-       aidet@5fc20000 {
-               compatible = "simple-mfd", "syscon";
-               reg = <0x5fc20000 0x200>;
-       };
+               i2c3: i2c@58783000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58783000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 44 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c3>;
+                       clocks = <&peri_clk 7>;
+                       clock-frequency = <100000>;
+               };
 
-       emmc: sdhc@68400000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x68400000 0x800>;
-               interrupts = <0 78 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_emmc>;
-               clocks = <&mio_clk 1>;
-               reset-names = "host", "hw-reset";
-               resets = <&mio_rst 1>, <&mio_rst 6>;
-               bus-width = <8>;
-               non-removable;
-       };
+               /* i2c4 does not exist */
+
+               /* chip-internal connection for DMD */
+               i2c5: i2c@58785000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       reg = <0x58785000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 25 4>;
+                       clocks = <&peri_clk 9>;
+                       clock-frequency = <400000>;
+               };
 
-       sd: sdhc@68800000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x68800000 0x800>;
-               interrupts = <0 76 4>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_sd>;
-               pinctrl-1 = <&pinctrl_sd_1v8>;
-               clocks = <&mio_clk 0>;
-               reset-names = "host";
-               resets = <&mio_rst 0>;
-               bus-width = <4>;
-       };
+               /* chip-internal connection for HDMI */
+               i2c6: i2c@58786000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       reg = <0x58786000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 26 4>;
+                       clocks = <&peri_clk 10>;
+                       clock-frequency = <400000>;
+               };
 
-       usb0: usb@65a00000 {
-               compatible = "socionext,uniphier-xhci", "generic-xhci";
-               status = "disabled";
-               reg = <0x65a00000 0x100>;
-               interrupts = <0 134 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb0>;
-       };
+               system_bus: system-bus@58c00000 {
+                       compatible = "socionext,uniphier-system-bus";
+                       status = "disabled";
+                       reg = <0x58c00000 0x400>;
+                       #address-cells = <2>;
+                       #size-cells = <1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_system_bus>;
+               };
 
-       usb1: usb@65c00000 {
-               compatible = "socionext,uniphier-xhci", "generic-xhci";
-               status = "disabled";
-               reg = <0x65c00000 0x100>;
-               interrupts = <0 137 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb1>, <&pinctrl_usb2>;
-       };
-};
+               smpctrl@59800000 {
+                       compatible = "socionext,uniphier-smpctrl";
+                       reg = <0x59801000 0x400>;
+               };
 
-&refclk {
-       clock-frequency = <20000000>;
-};
+               sdctrl@59810000 {
+                       compatible = "socionext,uniphier-pro5-sdctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59810000 0x800>;
+                       u-boot,dm-pre-reloc;
+
+                       sd_clk: clock {
+                               compatible = "socionext,uniphier-pro5-sd-clock";
+                               #clock-cells = <1>;
+                       };
+
+                       sd_rst: reset {
+                               compatible = "socionext,uniphier-pro5-sd-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-&serial0 {
-       clock-frequency = <73728000>;
-};
+               perictrl@59820000 {
+                       compatible = "socionext,uniphier-pro5-perictrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59820000 0x200>;
 
-&serial1 {
-       clock-frequency = <73728000>;
-};
+                       peri_clk: clock {
+                               compatible = "socionext,uniphier-pro5-peri-clock";
+                               #clock-cells = <1>;
+                       };
 
-&serial2 {
-       clock-frequency = <73728000>;
-};
+                       peri_rst: reset {
+                               compatible = "socionext,uniphier-pro5-peri-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-&serial3 {
-       clock-frequency = <73728000>;
-};
+               soc-glue@5f800000 {
+                       compatible = "socionext,uniphier-pro5-soc-glue",
+                                    "simple-mfd", "syscon";
+                       reg = <0x5f800000 0x2000>;
+                       u-boot,dm-pre-reloc;
 
-&mio_clk {
-       compatible = "socionext,uniphier-pro5-mio-clock";
-};
+                       pinctrl: pinctrl {
+                               compatible = "socionext,uniphier-pro5-pinctrl";
+                               u-boot,dm-pre-reloc;
+                       };
+               };
 
-&mio_rst {
-       compatible = "socionext,uniphier-pro5-mio-reset";
-};
+               aidet@5fc20000 {
+                       compatible = "simple-mfd", "syscon";
+                       reg = <0x5fc20000 0x200>;
+               };
 
-&peri_clk {
-       compatible = "socionext,uniphier-pro5-peri-clock";
-};
+               timer@60000200 {
+                       compatible = "arm,cortex-a9-global-timer";
+                       reg = <0x60000200 0x20>;
+                       interrupts = <1 11 0x304>;
+                       clocks = <&arm_timer_clk>;
+               };
 
-&peri_rst {
-       compatible = "socionext,uniphier-pro5-peri-reset";
-};
+               timer@60000600 {
+                       compatible = "arm,cortex-a9-twd-timer";
+                       reg = <0x60000600 0x20>;
+                       interrupts = <1 13 0x304>;
+                       clocks = <&arm_timer_clk>;
+               };
 
-&pinctrl {
-       compatible = "socionext,uniphier-pro5-pinctrl";
-};
+               intc: interrupt-controller@60001000 {
+                       compatible = "arm,cortex-a9-gic";
+                       reg = <0x60001000 0x1000>,
+                             <0x60000100 0x100>;
+                       #interrupt-cells = <3>;
+                       interrupt-controller;
+               };
 
-&sys_clk {
-       compatible = "socionext,uniphier-pro5-clock";
-};
+               sysctrl@61840000 {
+                       compatible = "socionext,uniphier-pro5-sysctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x61840000 0x10000>;
+
+                       sys_clk: clock {
+                               compatible = "socionext,uniphier-pro5-clock";
+                               #clock-cells = <1>;
+                       };
+
+                       sys_rst: reset {
+                               compatible = "socionext,uniphier-pro5-reset";
+                               #reset-cells = <1>;
+                       };
+               };
+
+               usb0: usb@65b00000 {
+                       compatible = "socionext,uniphier-pro5-dwc3";
+                       status = "disabled";
+                       reg = <0x65b00000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb0>;
+                       dwc3@65a00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x65a00000 0x10000>;
+                               interrupts = <0 134 4>;
+                               tx-fifo-resize;
+                       };
+               };
 
-&sys_rst {
-       compatible = "socionext,uniphier-pro5-reset";
+               usb1: usb@65d00000 {
+                       compatible = "socionext,uniphier-pro5-dwc3";
+                       status = "disabled";
+                       reg = <0x65d00000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb1>, <&pinctrl_usb2>;
+                       dwc3@65c00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x65c00000 0x10000>;
+                               interrupts = <0 137 4>;
+                               tx-fifo-resize;
+                       };
+               };
+
+               nand: nand@68000000 {
+                       compatible = "socionext,denali-nand-v5b";
+                       status = "disabled";
+                       reg-names = "nand_data", "denali_reg";
+                       reg = <0x68000000 0x20>, <0x68100000 0x1000>;
+                       interrupts = <0 65 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_nand>;
+                       clocks = <&sys_clk 2>;
+                       nand-ecc-strength = <8>;
+               };
+
+               emmc: sdhc@68400000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x68400000 0x800>;
+                       interrupts = <0 78 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_emmc>;
+                       clocks = <&sd_clk 1>;
+                       reset-names = "host";
+                       resets = <&sd_rst 1>;
+                       bus-width = <8>;
+                       non-removable;
+                       cap-mmc-highspeed;
+                       cap-mmc-hw-reset;
+                       no-3-3-v;
+               };
+
+               sd: sdhc@68800000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x68800000 0x800>;
+                       interrupts = <0 76 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_sd>;
+                       pinctrl-1 = <&pinctrl_sd_1v8>;
+                       clocks = <&sd_clk 0>;
+                       reset-names = "host";
+                       resets = <&sd_rst 0>;
+                       bus-width = <4>;
+                       cap-sd-highspeed;
+                       sd-uhs-sdr12;
+                       sd-uhs-sdr25;
+                       sd-uhs-sdr50;
+               };
+       };
 };
+
+/include/ "uniphier-pinctrl.dtsi"
index a98e758f031902c012e9b8f41970179a8fb38551..0a6d46cb140de7da2be3bca82be9abde0e71e52c 100644 (file)
@@ -71,7 +71,7 @@
        u-boot,dm-pre-reloc;
 };
 
-&mio_clk {
+&sd_clk {
        u-boot,dm-pre-reloc;
 };
 
index 78a52a8f18f16f5baf810aa8017a207347b630e1..770edca6ce31ef3467c67304822f7dec4fa93b6c 100644 (file)
@@ -55,7 +55,7 @@
        u-boot,dm-pre-reloc;
 };
 
-&mio_clk {
+&sd_clk {
        u-boot,dm-pre-reloc;
 };
 
index b64107b3dd4af1a61f779d3d5fd3374c3b29800b..da62070b74b509283a92ca791ce974548d9c0f0e 100644 (file)
@@ -7,7 +7,7 @@
  * SPDX-License-Identifier:    GPL-2.0+        X11
  */
 
-/include/ "uniphier-common32.dtsi"
+/include/ "skeleton.dtsi"
 
 / {
        compatible = "socionext,uniphier-pxs2";
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <0>;
+                       clocks = <&sys_clk 32>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       operating-points-v2 = <&cpu_opp>;
                };
 
                cpu@1 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <1>;
+                       clocks = <&sys_clk 32>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       operating-points-v2 = <&cpu_opp>;
                };
 
                cpu@2 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <2>;
+                       clocks = <&sys_clk 32>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       operating-points-v2 = <&cpu_opp>;
                };
 
                cpu@3 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <3>;
+                       clocks = <&sys_clk 32>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       operating-points-v2 = <&cpu_opp>;
                };
        };
 
+       cpu_opp: opp_table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp@100000000 {
+                       opp-hz = /bits/ 64 <100000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@150000000 {
+                       opp-hz = /bits/ 64 <150000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@200000000 {
+                       opp-hz = /bits/ 64 <200000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@300000000 {
+                       opp-hz = /bits/ 64 <300000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@400000000 {
+                       opp-hz = /bits/ 64 <400000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@600000000 {
+                       opp-hz = /bits/ 64 <600000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@800000000 {
+                       opp-hz = /bits/ 64 <800000000>;
+                       clock-latency-ns = <300>;
+               };
+               opp@1200000000 {
+                       opp-hz = /bits/ 64 <1200000000>;
+                       clock-latency-ns = <300>;
+               };
+       };
+
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
        clocks {
+               refclk: ref {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-frequency = <25000000>;
+               };
+
                arm_timer_clk: arm_timer_clk {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <50000000>;
                };
        };
-};
 
-&soc {
-       l2: l2-cache@500c0000 {
-               compatible = "socionext,uniphier-system-cache";
-               reg = <0x500c0000 0x2000>, <0x503c0100 0x4>, <0x506c0000 0x400>;
-               interrupts = <0 174 4>, <0 175 4>, <0 190 4>, <0 191 4>;
-               cache-unified;
-               cache-size = <(1280 * 1024)>;
-               cache-sets = <512>;
-               cache-line-size = <128>;
-               cache-level = <2>;
-       };
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+               interrupt-parent = <&intc>;
+               u-boot,dm-pre-reloc;
+
+               l2: l2-cache@500c0000 {
+                       compatible = "socionext,uniphier-system-cache";
+                       reg = <0x500c0000 0x2000>, <0x503c0100 0x8>,
+                             <0x506c0000 0x400>;
+                       interrupts = <0 174 4>, <0 175 4>, <0 190 4>, <0 191 4>;
+                       cache-unified;
+                       cache-size = <(1280 * 1024)>;
+                       cache-sets = <512>;
+                       cache-line-size = <128>;
+                       cache-level = <2>;
+               };
 
-       port0x: gpio@55000008 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000008 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial0: serial@54006800 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006800 0x40>;
+                       interrupts = <0 33 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart0>;
+                       clocks = <&peri_clk 0>;
+                       clock-frequency = <88900000>;
+               };
 
-       port1x: gpio@55000010 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000010 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial1: serial@54006900 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006900 0x40>;
+                       interrupts = <0 35 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart1>;
+                       clocks = <&peri_clk 1>;
+                       clock-frequency = <88900000>;
+               };
 
-       port2x: gpio@55000018 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000018 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial2: serial@54006a00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006a00 0x40>;
+                       interrupts = <0 37 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart2>;
+                       clocks = <&peri_clk 2>;
+                       clock-frequency = <88900000>;
+               };
 
-       port3x: gpio@55000020 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000020 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial3: serial@54006b00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006b00 0x40>;
+                       interrupts = <0 177 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart3>;
+                       clocks = <&peri_clk 3>;
+                       clock-frequency = <88900000>;
+               };
 
-       port4: gpio@55000028 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000028 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port0x: gpio@55000008 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000008 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port5x: gpio@55000030 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000030 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port1x: gpio@55000010 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000010 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port6x: gpio@55000038 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000038 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port2x: gpio@55000018 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000018 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port7x: gpio@55000040 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000040 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port3x: gpio@55000020 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000020 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port8x: gpio@55000048 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000048 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port4: gpio@55000028 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000028 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port9x: gpio@55000050 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000050 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port5x: gpio@55000030 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000030 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port10x: gpio@55000058 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000058 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port6x: gpio@55000038 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000038 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port12x: gpio@55000068 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000068 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port7x: gpio@55000040 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000040 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port13x: gpio@55000070 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000070 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port8x: gpio@55000048 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000048 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port14x: gpio@55000078 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000078 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port9x: gpio@55000050 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000050 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port15x: gpio@55000080 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000080 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port10x: gpio@55000058 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000058 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port16x: gpio@55000088 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000088 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port12x: gpio@55000068 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000068 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port17x: gpio@550000a0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000a0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port13x: gpio@55000070 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000070 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port18x: gpio@550000a8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000a8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port14x: gpio@55000078 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000078 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port19x: gpio@550000b0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000b0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port15x: gpio@55000080 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000080 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port20x: gpio@550000b8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000b8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port16x: gpio@55000088 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000088 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port21x: gpio@550000c0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000c0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port17x: gpio@550000a0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000a0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port22x: gpio@550000c8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000c8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port18x: gpio@550000a8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000a8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port23x: gpio@550000d0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000d0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port19x: gpio@550000b0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000b0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port24x: gpio@550000d8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000d8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port20x: gpio@550000b8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000b8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port25x: gpio@550000e0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000e0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port21x: gpio@550000c0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000c0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port26x: gpio@550000e8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000e8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port22x: gpio@550000c8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000c8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port27x: gpio@550000f0 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000f0 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port23x: gpio@550000d0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000d0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port28x: gpio@550000f8 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x550000f8 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port24x: gpio@550000d8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000d8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c0: i2c@58780000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58780000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 41 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c0>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port25x: gpio@550000e0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000e0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c1: i2c@58781000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58781000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 42 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c1>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port26x: gpio@550000e8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000e8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c2: i2c@58782000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58782000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c2>;
-               interrupts = <0 43 4>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port27x: gpio@550000f0 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000f0 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c3: i2c@58783000 {
-               compatible = "socionext,uniphier-fi2c";
-               status = "disabled";
-               reg = <0x58783000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 44 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c3>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <100000>;
-       };
+               port28x: gpio@550000f8 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x550000f8 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       /* chip-internal connection for DMD */
-       i2c4: i2c@58784000 {
-               compatible = "socionext,uniphier-fi2c";
-               reg = <0x58784000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 45 4>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <400000>;
-       };
+               i2c0: i2c@58780000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58780000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 41 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c0>;
+                       clocks = <&i2c_clk>;
+                       clock-frequency = <100000>;
+               };
 
-       /* chip-internal connection for STM */
-       i2c5: i2c@58785000 {
-               compatible = "socionext,uniphier-fi2c";
-               reg = <0x58785000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 25 4>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <400000>;
-       };
+               i2c1: i2c@58781000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58781000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 42 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c1>;
+                       clocks = <&i2c_clk>;
+                       clock-frequency = <100000>;
+               };
 
-       /* chip-internal connection for HDMI */
-       i2c6: i2c@58786000 {
-               compatible = "socionext,uniphier-fi2c";
-               reg = <0x58786000 0x80>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 26 4>;
-               clocks = <&i2c_clk>;
-               clock-frequency = <400000>;
-       };
+               i2c2: i2c@58782000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58782000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 43 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c2>;
+                       clocks = <&i2c_clk>;
+                       clock-frequency = <100000>;
+               };
 
-       emmc: sdhc@5a000000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x5a000000 0x800>;
-               interrupts = <0 78 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_emmc>;
-               clocks = <&mio_clk 1>;
-               reset-names = "host", "hw-reset";
-               resets = <&mio_rst 1>, <&mio_rst 6>;
-               bus-width = <8>;
-               non-removable;
-       };
+               i2c3: i2c@58783000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       status = "disabled";
+                       reg = <0x58783000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 44 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c3>;
+                       clocks = <&i2c_clk>;
+                       clock-frequency = <100000>;
+               };
 
-       sd: sdhc@5a400000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x5a400000 0x800>;
-               interrupts = <0 76 4>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_sd>;
-               pinctrl-1 = <&pinctrl_sd_1v8>;
-               clocks = <&mio_clk 0>;
-               reset-names = "host";
-               resets = <&mio_rst 0>;
-               bus-width = <4>;
-       };
+               /* chip-internal connection for DMD */
+               i2c4: i2c@58784000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       reg = <0x58784000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 45 4>;
+                       clocks = <&i2c_clk>;
+                       clock-frequency = <400000>;
+               };
 
-       aidet@5fc20000 {
-               compatible = "simple-mfd", "syscon";
-               reg = <0x5fc20000 0x200>;
-       };
+               /* chip-internal connection for STM */
+               i2c5: i2c@58785000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       reg = <0x58785000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 25 4>;
+                       clocks = <&i2c_clk>;
+                       clock-frequency = <400000>;
+               };
 
-       usb0: usb@65a00000 {
-               compatible = "socionext,uniphier-xhci", "generic-xhci";
-               status = "disabled";
-               reg = <0x65a00000 0x100>;
-               interrupts = <0 134 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb0>, <&pinctrl_usb2>;
-       };
+               /* chip-internal connection for HDMI */
+               i2c6: i2c@58786000 {
+                       compatible = "socionext,uniphier-fi2c";
+                       reg = <0x58786000 0x80>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 26 4>;
+                       clocks = <&i2c_clk>;
+                       clock-frequency = <400000>;
+               };
 
-       usb1: usb@65c00000 {
-               compatible = "socionext,uniphier-xhci", "generic-xhci";
-               status = "disabled";
-               reg = <0x65c00000 0x100>;
-               interrupts = <0 137 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb1>, <&pinctrl_usb3>;
-       };
-};
+               system_bus: system-bus@58c00000 {
+                       compatible = "socionext,uniphier-system-bus";
+                       status = "disabled";
+                       reg = <0x58c00000 0x400>;
+                       #address-cells = <2>;
+                       #size-cells = <1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_system_bus>;
+               };
 
-&refclk {
-       clock-frequency = <25000000>;
-};
+               smpctrl@59800000 {
+                       compatible = "socionext,uniphier-smpctrl";
+                       reg = <0x59801000 0x400>;
+               };
 
-&serial0 {
-       clock-frequency = <88900000>;
-};
+               sdctrl@59810000 {
+                       compatible = "socionext,uniphier-pxs2-sdctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59810000 0x800>;
+                       u-boot,dm-pre-reloc;
+
+                       sd_clk: clock {
+                               compatible = "socionext,uniphier-pxs2-sd-clock";
+                               #clock-cells = <1>;
+                       };
+
+                       sd_rst: reset {
+                               compatible = "socionext,uniphier-pxs2-sd-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-&serial1 {
-       clock-frequency = <88900000>;
-};
+               perictrl@59820000 {
+                       compatible = "socionext,uniphier-pxs2-perictrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59820000 0x200>;
 
-&serial2 {
-       clock-frequency = <88900000>;
-};
+                       peri_clk: clock {
+                               compatible = "socionext,uniphier-pxs2-peri-clock";
+                               #clock-cells = <1>;
+                       };
 
-&serial3 {
-       clock-frequency = <88900000>;
-};
+                       peri_rst: reset {
+                               compatible = "socionext,uniphier-pxs2-peri-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-&mio_clk {
-       compatible = "socionext,uniphier-pxs2-mio-clock";
-};
+               emmc: sdhc@5a000000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a000000 0x800>;
+                       interrupts = <0 78 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_emmc>;
+                       clocks = <&sd_clk 1>;
+                       reset-names = "host";
+                       resets = <&sd_rst 1>;
+                       bus-width = <8>;
+                       non-removable;
+                       cap-mmc-highspeed;
+                       cap-mmc-hw-reset;
+                       no-3-3-v;
+               };
 
-&mio_rst {
-       compatible = "socionext,uniphier-pxs2-mio-reset";
-};
+               sd: sdhc@5a400000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a400000 0x800>;
+                       interrupts = <0 76 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_sd>;
+                       pinctrl-1 = <&pinctrl_sd_1v8>;
+                       clocks = <&sd_clk 0>;
+                       reset-names = "host";
+                       resets = <&sd_rst 0>;
+                       bus-width = <4>;
+                       cap-sd-highspeed;
+                       sd-uhs-sdr12;
+                       sd-uhs-sdr25;
+                       sd-uhs-sdr50;
+               };
 
-&peri_clk {
-       compatible = "socionext,uniphier-pxs2-peri-clock";
-};
+               soc-glue@5f800000 {
+                       compatible = "socionext,uniphier-pxs2-soc-glue",
+                                    "simple-mfd", "syscon";
+                       reg = <0x5f800000 0x2000>;
+                       u-boot,dm-pre-reloc;
 
-&peri_rst {
-       compatible = "socionext,uniphier-pxs2-peri-reset";
-};
+                       pinctrl: pinctrl {
+                               compatible = "socionext,uniphier-pxs2-pinctrl";
+                               u-boot,dm-pre-reloc;
+                       };
+               };
 
-&pinctrl {
-       compatible = "socionext,uniphier-pxs2-pinctrl";
-};
+               aidet@5fc20000 {
+                       compatible = "simple-mfd", "syscon";
+                       reg = <0x5fc20000 0x200>;
+               };
 
-&sys_clk {
-       compatible = "socionext,uniphier-pxs2-clock";
-};
+               timer@60000200 {
+                       compatible = "arm,cortex-a9-global-timer";
+                       reg = <0x60000200 0x20>;
+                       interrupts = <1 11 0xf04>;
+                       clocks = <&arm_timer_clk>;
+               };
+
+               timer@60000600 {
+                       compatible = "arm,cortex-a9-twd-timer";
+                       reg = <0x60000600 0x20>;
+                       interrupts = <1 13 0xf04>;
+                       clocks = <&arm_timer_clk>;
+               };
+
+               intc: interrupt-controller@60001000 {
+                       compatible = "arm,cortex-a9-gic";
+                       reg = <0x60001000 0x1000>,
+                             <0x60000100 0x100>;
+                       #interrupt-cells = <3>;
+                       interrupt-controller;
+               };
+
+               sysctrl@61840000 {
+                       compatible = "socionext,uniphier-pxs2-sysctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x61840000 0x4000>;
+
+                       sys_clk: clock {
+                               compatible = "socionext,uniphier-pxs2-clock";
+                               #clock-cells = <1>;
+                       };
 
-&sys_rst {
-       compatible = "socionext,uniphier-pxs2-reset";
+                       sys_rst: reset {
+                               compatible = "socionext,uniphier-pxs2-reset";
+                               #reset-cells = <1>;
+                       };
+               };
+
+               usb0: usb@65b00000 {
+                       compatible = "socionext,uniphier-pxs2-dwc3";
+                       status = "disabled";
+                       reg = <0x65b00000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb0>, <&pinctrl_usb2>;
+                       dwc3@65a00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x65a00000 0x10000>;
+                               interrupts = <0 134 4>;
+                               tx-fifo-resize;
+                       };
+               };
+
+               usb1: usb@65d00000 {
+                       compatible = "socionext,uniphier-pxs2-dwc3";
+                       status = "disabled";
+                       reg = <0x65d00000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb1>, <&pinctrl_usb3>;
+                       dwc3@65c00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x65c00000 0x10000>;
+                               interrupts = <0 137 4>;
+                               tx-fifo-resize;
+                       };
+               };
+
+               nand: nand@68000000 {
+                       compatible = "socionext,denali-nand-v5b";
+                       status = "disabled";
+                       reg-names = "nand_data", "denali_reg";
+                       reg = <0x68000000 0x20>, <0x68100000 0x1000>;
+                       interrupts = <0 65 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_nand>;
+                       clocks = <&sys_clk 2>;
+                       nand-ecc-strength = <8>;
+               };
+       };
 };
+
+/include/ "uniphier-pinctrl.dtsi"
index f5c54875348a7811a0afb0b6b86aee322c65d46c..919cbff9de798cf306a562f64cbb62e01d58c230 100644 (file)
                        compatible = "fixed-clock";
                        clock-frequency = <50000000>;
                };
-
-               iobus_clk: iobus_clk {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
-                       clock-frequency = <100000000>;
-               };
        };
 
        soc {
                        interrupts = <0 41 1>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_i2c0>;
-                       clocks = <&iobus_clk>;
+                       clocks = <&sys_clk 1>;
                        clock-frequency = <100000>;
                };
 
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 42 1>;
-                       clocks = <&iobus_clk>;
+                       clocks = <&sys_clk 1>;
                        clock-frequency = <100000>;
                };
 
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 43 1>;
-                       clocks = <&iobus_clk>;
+                       clocks = <&sys_clk 1>;
                        clock-frequency = <100000>;
                };
 
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 44 1>;
-                       clocks = <&iobus_clk>;
+                       clocks = <&sys_clk 1>;
                        clock-frequency = <100000>;
                };
 
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <0 45 1>;
-                       clocks = <&iobus_clk>;
+                       clocks = <&sys_clk 1>;
                        clock-frequency = <400000>;
                };
 
                        pinctrl-0 = <&pinctrl_emmc>;
                        pinctrl-1 = <&pinctrl_emmc_1v8>;
                        clocks = <&mio_clk 1>;
+                       reset-names = "host", "bridge";
                        resets = <&mio_rst 1>, <&mio_rst 4>;
                        bus-width = <8>;
                        non-removable;
+                       cap-mmc-highspeed;
+                       cap-mmc-hw-reset;
                };
 
                sd: sdhc@5a500000 {
                        pinctrl-0 = <&pinctrl_sd>;
                        pinctrl-1 = <&pinctrl_sd_1v8>;
                        clocks = <&mio_clk 0>;
+                       reset-names = "host", "bridge";
                        resets = <&mio_rst 0>, <&mio_rst 3>;
                        bus-width = <4>;
+                       cap-sd-highspeed;
+                       sd-uhs-sdr12;
+                       sd-uhs-sdr25;
+                       sd-uhs-sdr50;
                };
 
                usb0: usb@5a800100 {
                };
 
                soc-glue@5f800000 {
-                       compatible = "simple-mfd", "syscon";
+                       compatible = "socionext,uniphier-sld3-soc-glue",
+                                    "simple-mfd", "syscon";
                        reg = <0x5f800000 0x2000>;
                        u-boot,dm-pre-reloc;
 
                };
 
                sysctrl@f1840000 {
-                       compatible = "socionext,uniphier-sysctrl",
+                       compatible = "socionext,uniphier-sld3-sysctrl",
                                     "simple-mfd", "syscon";
                        reg = <0xf1840000 0x4000>;
 
                };
 
                nand: nand@f8000000 {
-                       compatible = "denali,denali-nand-dt";
-                       reg = <0xf8000000 0x20>, <0xf8100000 0x1000>;
+                       compatible = "socionext,denali-nand-v5a";
+                       status = "disabled";
                        reg-names = "nand_data", "denali_reg";
+                       reg = <0xf8000000 0x20>, <0xf8100000 0x1000>;
+                       interrupts = <0 65 4>;
+                       clocks = <&sys_clk 2>;
+                       nand-ecc-strength = <8>;
                };
        };
 };
index b8f6d674095778cffd63a1d26750ee330291f876..5550bb8257c3e14b7f11dd05fb7980629838b145 100644 (file)
@@ -7,7 +7,7 @@
  * SPDX-License-Identifier:    GPL-2.0+        X11
  */
 
-/include/ "uniphier-common32.dtsi"
+/include/ "skeleton.dtsi"
 
 / {
        compatible = "socionext,uniphier-sld8";
                };
        };
 
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
        clocks {
-               arm_timer_clk: arm_timer_clk {
-                       #clock-cells = <0>;
+               refclk: ref {
                        compatible = "fixed-clock";
-                       clock-frequency = <50000000>;
+                       #clock-cells = <0>;
+                       clock-frequency = <25000000>;
                };
 
-               iobus_clk: iobus_clk {
+               arm_timer_clk: arm_timer_clk {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
-                       clock-frequency = <100000000>;
+                       clock-frequency = <50000000>;
                };
        };
-};
 
-&soc {
-       l2: l2-cache@500c0000 {
-               compatible = "socionext,uniphier-system-cache";
-               reg = <0x500c0000 0x2000>, <0x503c0100 0x4>, <0x506c0000 0x400>;
-               interrupts = <0 174 4>, <0 175 4>;
-               cache-unified;
-               cache-size = <(256 * 1024)>;
-               cache-sets = <256>;
-               cache-line-size = <128>;
-               cache-level = <2>;
-       };
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+               interrupt-parent = <&intc>;
+               u-boot,dm-pre-reloc;
+
+               l2: l2-cache@500c0000 {
+                       compatible = "socionext,uniphier-system-cache";
+                       reg = <0x500c0000 0x2000>, <0x503c0100 0x4>,
+                             <0x506c0000 0x400>;
+                       interrupts = <0 174 4>, <0 175 4>;
+                       cache-unified;
+                       cache-size = <(256 * 1024)>;
+                       cache-sets = <256>;
+                       cache-line-size = <128>;
+                       cache-level = <2>;
+               };
 
-       port0x: gpio@55000008 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000008 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial0: serial@54006800 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006800 0x40>;
+                       interrupts = <0 33 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart0>;
+                       clocks = <&peri_clk 0>;
+                       clock-frequency = <80000000>;
+               };
 
-       port1x: gpio@55000010 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000010 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial1: serial@54006900 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006900 0x40>;
+                       interrupts = <0 35 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart1>;
+                       clocks = <&peri_clk 1>;
+                       clock-frequency = <80000000>;
+               };
 
-       port2x: gpio@55000018 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000018 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial2: serial@54006a00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006a00 0x40>;
+                       interrupts = <0 37 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart2>;
+                       clocks = <&peri_clk 2>;
+                       clock-frequency = <80000000>;
+               };
 
-       port3x: gpio@55000020 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000020 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               serial3: serial@54006b00 {
+                       compatible = "socionext,uniphier-uart";
+                       status = "disabled";
+                       reg = <0x54006b00 0x40>;
+                       interrupts = <0 29 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_uart3>;
+                       clocks = <&peri_clk 3>;
+                       clock-frequency = <80000000>;
+               };
 
-       port4: gpio@55000028 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000028 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port0x: gpio@55000008 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000008 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port5x: gpio@55000030 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000030 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port1x: gpio@55000010 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000010 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port6x: gpio@55000038 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000038 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port2x: gpio@55000018 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000018 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port7x: gpio@55000040 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000040 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port3x: gpio@55000020 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000020 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port8x: gpio@55000048 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000048 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port4: gpio@55000028 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000028 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port9x: gpio@55000050 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000050 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port5x: gpio@55000030 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000030 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port10x: gpio@55000058 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000058 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port6x: gpio@55000038 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000038 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port11x: gpio@55000060 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000060 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port7x: gpio@55000040 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000040 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port12x: gpio@55000068 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000068 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port8x: gpio@55000048 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000048 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port13x: gpio@55000070 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000070 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port9x: gpio@55000050 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000050 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port14x: gpio@55000078 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000078 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port10x: gpio@55000058 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000058 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       port16x: gpio@55000088 {
-               compatible = "socionext,uniphier-gpio";
-               reg = <0x55000088 0x8>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
+               port11x: gpio@55000060 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000060 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c0: i2c@58400000 {
-               compatible = "socionext,uniphier-i2c";
-               status = "disabled";
-               reg = <0x58400000 0x40>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 41 1>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c0>;
-               clocks = <&iobus_clk>;
-               clock-frequency = <100000>;
-       };
+               port12x: gpio@55000068 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000068 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c1: i2c@58480000 {
-               compatible = "socionext,uniphier-i2c";
-               status = "disabled";
-               reg = <0x58480000 0x40>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 42 1>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c1>;
-               clocks = <&iobus_clk>;
-               clock-frequency = <100000>;
-       };
+               port13x: gpio@55000070 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000070 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       /* chip-internal connection for DMD */
-       i2c2: i2c@58500000 {
-               compatible = "socionext,uniphier-i2c";
-               reg = <0x58500000 0x40>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 43 1>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c2>;
-               clocks = <&iobus_clk>;
-               clock-frequency = <400000>;
-       };
+               port14x: gpio@55000078 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000078 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       i2c3: i2c@58580000 {
-               compatible = "socionext,uniphier-i2c";
-               status = "disabled";
-               reg = <0x58580000 0x40>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               interrupts = <0 44 1>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_i2c3>;
-               clocks = <&iobus_clk>;
-               clock-frequency = <100000>;
-       };
+               port16x: gpio@55000088 {
+                       compatible = "socionext,uniphier-gpio";
+                       reg = <0x55000088 0x8>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+               };
 
-       sd: sdhc@5a400000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               reg = <0x5a400000 0x200>;
-               interrupts = <0 76 4>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_sd>;
-               pinctrl-1 = <&pinctrl_sd_1v8>;
-               clocks = <&mio_clk 0>;
-               reset-names = "host", "bridge";
-               resets = <&mio_rst 0>, <&mio_rst 3>;
-               bus-width = <4>;
-       };
+               i2c0: i2c@58400000 {
+                       compatible = "socionext,uniphier-i2c";
+                       status = "disabled";
+                       reg = <0x58400000 0x40>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 41 1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c0>;
+                       clocks = <&peri_clk 4>;
+                       clock-frequency = <100000>;
+               };
 
-       emmc: sdhc@5a500000 {
-               compatible = "socionext,uniphier-sdhc";
-               status = "disabled";
-               interrupts = <0 78 4>;
-               reg = <0x5a500000 0x200>;
-               pinctrl-names = "default", "1.8v";
-               pinctrl-0 = <&pinctrl_emmc>;
-               pinctrl-1 = <&pinctrl_emmc_1v8>;
-               clocks = <&mio_clk 1>;
-               reset-names = "host", "bridge", "hw-reset";
-               resets = <&mio_rst 1>, <&mio_rst 4>, <&mio_rst 6>;
-               bus-width = <8>;
-               non-removable;
-       };
+               i2c1: i2c@58480000 {
+                       compatible = "socionext,uniphier-i2c";
+                       status = "disabled";
+                       reg = <0x58480000 0x40>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 42 1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c1>;
+                       clocks = <&peri_clk 5>;
+                       clock-frequency = <100000>;
+               };
 
-       usb0: usb@5a800100 {
-               compatible = "socionext,uniphier-ehci", "generic-ehci";
-               status = "disabled";
-               reg = <0x5a800100 0x100>;
-               interrupts = <0 80 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb0>;
-               clocks = <&mio_clk 7>, <&mio_clk 8>, <&mio_clk 12>;
-               resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 8>,
-                        <&mio_rst 12>;
-       };
+               /* chip-internal connection for DMD */
+               i2c2: i2c@58500000 {
+                       compatible = "socionext,uniphier-i2c";
+                       reg = <0x58500000 0x40>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 43 1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c2>;
+                       clocks = <&peri_clk 6>;
+                       clock-frequency = <400000>;
+               };
 
-       usb1: usb@5a810100 {
-               compatible = "socionext,uniphier-ehci", "generic-ehci";
-               status = "disabled";
-               reg = <0x5a810100 0x100>;
-               interrupts = <0 81 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb1>;
-               clocks = <&mio_clk 7>, <&mio_clk 9>, <&mio_clk 13>;
-               resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 9>,
-                        <&mio_rst 13>;
-       };
+               i2c3: i2c@58580000 {
+                       compatible = "socionext,uniphier-i2c";
+                       status = "disabled";
+                       reg = <0x58580000 0x40>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       interrupts = <0 44 1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_i2c3>;
+                       clocks = <&peri_clk 7>;
+                       clock-frequency = <100000>;
+               };
 
-       usb2: usb@5a820100 {
-               compatible = "socionext,uniphier-ehci", "generic-ehci";
-               status = "disabled";
-               reg = <0x5a820100 0x100>;
-               interrupts = <0 82 4>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&pinctrl_usb2>;
-               clocks = <&mio_clk 7>, <&mio_clk 10>, <&mio_clk 14>;
-               resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 10>,
-                        <&mio_rst 14>;
-       };
+               system_bus: system-bus@58c00000 {
+                       compatible = "socionext,uniphier-system-bus";
+                       status = "disabled";
+                       reg = <0x58c00000 0x400>;
+                       #address-cells = <2>;
+                       #size-cells = <1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_system_bus>;
+               };
 
-       aidet@61830000 {
-               compatible = "simple-mfd", "syscon";
-               reg = <0x61830000 0x200>;
-       };
-};
+               smpctrl@59800000 {
+                       compatible = "socionext,uniphier-smpctrl";
+                       reg = <0x59801000 0x400>;
+               };
 
-&refclk {
-       clock-frequency = <25000000>;
-};
+               mioctrl@59810000 {
+                       compatible = "socionext,uniphier-sld8-mioctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59810000 0x800>;
 
-&serial0 {
-       clock-frequency = <80000000>;
-};
+                       mio_clk: clock {
+                               compatible = "socionext,uniphier-sld8-mio-clock";
+                               #clock-cells = <1>;
+                       };
 
-&serial1 {
-       clock-frequency = <80000000>;
-};
+                       mio_rst: reset {
+                               compatible = "socionext,uniphier-sld8-mio-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-&serial2 {
-       clock-frequency = <80000000>;
-};
+               perictrl@59820000 {
+                       compatible = "socionext,uniphier-sld8-perictrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x59820000 0x200>;
 
-&serial3 {
-       interrupts = <0 29 4>;
-       clock-frequency = <80000000>;
-};
+                       peri_clk: clock {
+                               compatible = "socionext,uniphier-sld8-peri-clock";
+                               #clock-cells = <1>;
+                       };
 
-&mio_clk {
-       compatible = "socionext,uniphier-sld8-mio-clock";
-};
+                       peri_rst: reset {
+                               compatible = "socionext,uniphier-sld8-peri-reset";
+                               #reset-cells = <1>;
+                       };
+               };
 
-&mio_rst {
-       compatible = "socionext,uniphier-sld8-mio-reset";
-};
+               sd: sdhc@5a400000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a400000 0x200>;
+                       interrupts = <0 76 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_sd>;
+                       pinctrl-1 = <&pinctrl_sd_1v8>;
+                       clocks = <&mio_clk 0>;
+                       reset-names = "host", "bridge";
+                       resets = <&mio_rst 0>, <&mio_rst 3>;
+                       bus-width = <4>;
+                       cap-sd-highspeed;
+                       sd-uhs-sdr12;
+                       sd-uhs-sdr25;
+                       sd-uhs-sdr50;
+               };
 
-&peri_clk {
-       compatible = "socionext,uniphier-sld8-peri-clock";
-};
+               emmc: sdhc@5a500000 {
+                       compatible = "socionext,uniphier-sdhc";
+                       status = "disabled";
+                       reg = <0x5a500000 0x200>;
+                       interrupts = <0 78 4>;
+                       pinctrl-names = "default", "1.8v";
+                       pinctrl-0 = <&pinctrl_emmc>;
+                       pinctrl-1 = <&pinctrl_emmc_1v8>;
+                       clocks = <&mio_clk 1>;
+                       reset-names = "host", "bridge";
+                       resets = <&mio_rst 1>, <&mio_rst 4>;
+                       bus-width = <8>;
+                       non-removable;
+                       cap-mmc-highspeed;
+                       cap-mmc-hw-reset;
+               };
 
-&peri_rst {
-       compatible = "socionext,uniphier-sld8-peri-reset";
-};
+               usb0: usb@5a800100 {
+                       compatible = "socionext,uniphier-ehci", "generic-ehci";
+                       status = "disabled";
+                       reg = <0x5a800100 0x100>;
+                       interrupts = <0 80 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb0>;
+                       clocks = <&mio_clk 7>, <&mio_clk 8>, <&mio_clk 12>;
+                       resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 8>,
+                                <&mio_rst 12>;
+               };
 
-&pinctrl {
-       compatible = "socionext,uniphier-sld8-pinctrl";
-};
+               usb1: usb@5a810100 {
+                       compatible = "socionext,uniphier-ehci", "generic-ehci";
+                       status = "disabled";
+                       reg = <0x5a810100 0x100>;
+                       interrupts = <0 81 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb1>;
+                       clocks = <&mio_clk 7>, <&mio_clk 9>, <&mio_clk 13>;
+                       resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 9>,
+                                <&mio_rst 13>;
+               };
 
-&sys_clk {
-       compatible = "socionext,uniphier-sld8-clock";
-};
+               usb2: usb@5a820100 {
+                       compatible = "socionext,uniphier-ehci", "generic-ehci";
+                       status = "disabled";
+                       reg = <0x5a820100 0x100>;
+                       interrupts = <0 82 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usb2>;
+                       clocks = <&mio_clk 7>, <&mio_clk 10>, <&mio_clk 14>;
+                       resets = <&sys_rst 8>, <&mio_rst 7>, <&mio_rst 10>,
+                                <&mio_rst 14>;
+               };
+
+               soc-glue@5f800000 {
+                       compatible = "socionext,uniphier-sld8-soc-glue",
+                                    "simple-mfd", "syscon";
+                       reg = <0x5f800000 0x2000>;
+                       u-boot,dm-pre-reloc;
+
+                       pinctrl: pinctrl {
+                               compatible = "socionext,uniphier-sld8-pinctrl";
+                               u-boot,dm-pre-reloc;
+                       };
+               };
+
+               timer@60000200 {
+                       compatible = "arm,cortex-a9-global-timer";
+                       reg = <0x60000200 0x20>;
+                       interrupts = <1 11 0x104>;
+                       clocks = <&arm_timer_clk>;
+               };
 
-&sys_rst {
-       compatible = "socionext,uniphier-sld8-reset";
+               timer@60000600 {
+                       compatible = "arm,cortex-a9-twd-timer";
+                       reg = <0x60000600 0x20>;
+                       interrupts = <1 13 0x104>;
+                       clocks = <&arm_timer_clk>;
+               };
+
+               intc: interrupt-controller@60001000 {
+                       compatible = "arm,cortex-a9-gic";
+                       reg = <0x60001000 0x1000>,
+                             <0x60000100 0x100>;
+                       #interrupt-cells = <3>;
+                       interrupt-controller;
+               };
+
+               aidet@61830000 {
+                       compatible = "simple-mfd", "syscon";
+                       reg = <0x61830000 0x200>;
+               };
+
+               sysctrl@61840000 {
+                       compatible = "socionext,uniphier-sld8-sysctrl",
+                                    "simple-mfd", "syscon";
+                       reg = <0x61840000 0x10000>;
+
+                       sys_clk: clock {
+                               compatible = "socionext,uniphier-sld8-clock";
+                               #clock-cells = <1>;
+                       };
+
+                       sys_rst: reset {
+                               compatible = "socionext,uniphier-sld8-reset";
+                               #reset-cells = <1>;
+                       };
+               };
+
+               nand: nand@68000000 {
+                       compatible = "socionext,denali-nand-v5a";
+                       status = "disabled";
+                       reg-names = "nand_data", "denali_reg";
+                       reg = <0x68000000 0x20>, <0x68100000 0x1000>;
+                       interrupts = <0 65 4>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_nand>;
+                       clocks = <&sys_clk 2>;
+                       nand-ecc-strength = <8>;
+               };
+       };
 };
+
+/include/ "uniphier-pinctrl.dtsi"
diff --git a/arch/arm/include/asm/arch-armada8k/cache_llc.h b/arch/arm/include/asm/arch-armada8k/cache_llc.h
new file mode 100644 (file)
index 0000000..8f97e6d
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2016 Marvell International Ltd.
+ *
+ * SPDX-License-Identifier:    GPL-2.0
+ * https://spdx.org/licenses
+ */
+
+#ifndef _CACHE_LLC_H_
+#define _CACHE_LLC_H_
+
+/* Armada-7K/8K last level cache */
+
+#define MVEBU_A8K_REGS_BASE_MSB                0xf000
+#define LLC_BASE_ADDR                  0x8000
+#define LLC_CACHE_SYNC                 0x700
+#define LLC_CACHE_SYNC_COMPLETE                0x730
+#define LLC_FLUSH_BY_WAY               0x7fc
+#define LLC_WAY_MASK                   0xffffffff
+#define LLC_CACHE_SYNC_MASK            0x1
+
+#endif /* _CACHE_LLC_H_ */
diff --git a/arch/arm/include/asm/arch-armada8k/soc-info.h b/arch/arm/include/asm/arch-armada8k/soc-info.h
new file mode 100644 (file)
index 0000000..bae3995
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (C) 2016 Marvell International Ltd.
+ *
+ * SPDX-License-Identifier:    GPL-2.0
+ * https://spdx.org/licenses
+ */
+
+#ifndef _SOC_INFO_H_
+#define _SOC_INFO_H_
+
+/* Pin Ctrl driver definitions */
+#define BITS_PER_PIN           4
+#define PIN_FUNC_MASK          ((1 << BITS_PER_PIN) - 1)
+#define PIN_REG_SHIFT          3
+#define PIN_FIELD_MASK         ((1 << PIN_REG_SHIFT) - 1)
+
+#endif /* _SOC_INFO_H_ */
index d684a077303618870423ca431e216b61abf85d45..b3cfd89a4b65d70c54398910f6050a89d331a55b 100644 (file)
@@ -18,6 +18,7 @@
 #define CONFIG_SYS_CCI400_ADDR                 (CONFIG_SYS_IMMR + 0x00180000)
 #define CONFIG_SYS_GIC400_ADDR                 (CONFIG_SYS_IMMR + 0x00400000)
 #define CONFIG_SYS_IFC_ADDR                    (CONFIG_SYS_IMMR + 0x00530000)
+#define SYS_FSL_QSPI_ADDR                      (CONFIG_SYS_IMMR + 0x00550000)
 #define CONFIG_SYS_FSL_ESDHC_ADDR              (CONFIG_SYS_IMMR + 0x00560000)
 #define CONFIG_SYS_FSL_CSU_ADDR                        (CONFIG_SYS_IMMR + 0x00510000)
 #define CONFIG_SYS_FSL_GUTS_ADDR               (CONFIG_SYS_IMMR + 0x00ee0000)
index 2df56f7a5b20adb9b18369d816ff7b652c8cdcff..e18dcbdd0900348281a9042d4ff16d637020cc90 100644 (file)
@@ -19,6 +19,7 @@
 #define CONFIG_SYS_FSL_CH3_CLK_GRPA_ADDR       (CONFIG_SYS_IMMR + 0x00300000)
 #define CONFIG_SYS_FSL_CH3_CLK_GRPB_ADDR       (CONFIG_SYS_IMMR + 0x00310000)
 #define CONFIG_SYS_FSL_CH3_CLK_CTRL_ADDR       (CONFIG_SYS_IMMR + 0x00370000)
+#define SYS_FSL_QSPI_ADDR                      (CONFIG_SYS_IMMR + 0x010c0000)
 #define CONFIG_SYS_FSL_ESDHC_ADDR              (CONFIG_SYS_IMMR + 0x01140000)
 #define CONFIG_SYS_IFC_ADDR                    (CONFIG_SYS_IMMR + 0x01240000)
 #define CONFIG_SYS_NS16550_COM1                        (CONFIG_SYS_IMMR + 0x011C0500)
index b00decec6d45c40331ad2512060638bc212414a6..9a46340deb318a5457cdf3c32946a115fad61ed8 100644 (file)
@@ -1171,6 +1171,7 @@ struct emif_regs {
        u32 sdram_tim1;
        u32 sdram_tim2;
        u32 sdram_tim3;
+       u32 ocp_config;
        u32 read_idle_ctrl;
        u32 zq_config;
        u32 temp_alert_config;
index 7733936be540f032082c5f4922545f83ed237188..40476dc421db03d11850edfa7c2f818621eb477a 100644 (file)
@@ -83,8 +83,8 @@ config TARGET_DB_88F6820_AMC
        bool "Support DB-88F6820-AMC"
        select 88F6820
 
-config TARGET_MVEBU_DB_88F7040
-       bool "Support DB-88F7040 Armada 7040"
+config TARGET_MVEBU_ARMADA_8K
+       bool "Support Armada 7k/8k platforms"
        select ARMADA_8K
 
 config TARGET_DB_MV784MP_GP
@@ -111,7 +111,7 @@ config SYS_BOARD
        default "db-88f6720" if TARGET_DB_88F6720
        default "db-88f6820-gp" if TARGET_DB_88F6820_GP
        default "db-88f6820-amc" if TARGET_DB_88F6820_AMC
-       default "mvebu_db-88f7040" if TARGET_MVEBU_DB_88F7040
+       default "mvebu_armada-8k" if TARGET_MVEBU_ARMADA_8K
        default "db-mv784mp-gp" if TARGET_DB_MV784MP_GP
        default "ds414" if TARGET_DS414
        default "maxbcm" if TARGET_MAXBCM
@@ -123,7 +123,7 @@ config SYS_CONFIG_NAME
        default "db-88f6720" if TARGET_DB_88F6720
        default "db-88f6820-gp" if TARGET_DB_88F6820_GP
        default "db-88f6820-amc" if TARGET_DB_88F6820_AMC
-       default "mvebu_db-88f7040" if TARGET_MVEBU_DB_88F7040
+       default "mvebu_armada-8k" if TARGET_MVEBU_ARMADA_8K
        default "db-mv784mp-gp" if TARGET_DB_MV784MP_GP
        default "ds414" if TARGET_DS414
        default "maxbcm" if TARGET_MAXBCM
@@ -135,7 +135,7 @@ config SYS_VENDOR
        default "Marvell" if TARGET_DB_88F6720
        default "Marvell" if TARGET_DB_88F6820_GP
        default "Marvell" if TARGET_DB_88F6820_AMC
-       default "Marvell" if TARGET_MVEBU_DB_88F7040
+       default "Marvell" if TARGET_MVEBU_ARMADA_8K
        default "solidrun" if TARGET_CLEARFOG
        default "Synology" if TARGET_DS414
 
index 7055a81de32279cb7a18b8ec541e6e6629e11ae1..8f026559c2f94d02dda4d531ddd7fcfc0668863b 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+/*
+ * Not all memory is mapped in the MMU. So we need to restrict the
+ * memory size so that U-Boot does not try to access it. Also, the
+ * internal registers are located at 0xf000.0000 - 0xffff.ffff.
+ * Currently only 2GiB are mapped for system memory. This is what
+ * we pass to the U-Boot subsystem here.
+ */
+#define USABLE_RAM_SIZE                0x80000000
+
+ulong board_get_usable_ram_top(ulong total_size)
+{
+       if (gd->ram_size > USABLE_RAM_SIZE)
+               return USABLE_RAM_SIZE;
+
+       return gd->ram_size;
+}
+
 /*
  * On ARMv8, MBus is not configured in U-Boot. To enable compilation
  * of the already implemented drivers, lets add a dummy version of
@@ -109,12 +126,20 @@ int arch_early_init_r(void)
 {
        struct udevice *dev;
        int ret;
-
-       /* Call the comphy code via the MISC uclass driver */
-       ret = uclass_get_device(UCLASS_MISC, 0, &dev);
-       if (ret) {
-               debug("COMPHY init failed: %d\n", ret);
-               return -ENODEV;
+       int i;
+
+       /*
+        * Loop over all MISC uclass drivers to call the comphy code
+        * and init all CP110 devices enabled in the DT
+        */
+       i = 0;
+       while (1) {
+               /* Call the comphy code via the MISC uclass driver */
+               ret = uclass_get_device(UCLASS_MISC, i++, &dev);
+
+               /* We're done, once no further CP110 device is found */
+               if (ret)
+                       break;
        }
 
        /* Cause the SATA device to do its early init */
index 84c69d90e73f1b5840ed738da824b04c72c9c3de..0facf14942df62d39ecc52e773b36341b37ae5e2 100644 (file)
@@ -5,3 +5,4 @@
 #
 
 obj-y = cpu.o
+obj-y += cache_llc.o
diff --git a/arch/arm/mach-mvebu/armada8k/cache_llc.S b/arch/arm/mach-mvebu/armada8k/cache_llc.S
new file mode 100644 (file)
index 0000000..71aecb2
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2016 Marvell International Ltd.
+ *
+ * SPDX-License-Identifier:    GPL-2.0
+ * https://spdx.org/licenses
+ */
+
+#include <asm/arch-armada8k/cache_llc.h>
+#include <linux/linkage.h>
+
+/*
+ * int __asm_flush_l3_dcache
+ *
+ * flush Armada-8K last level cache.
+ *
+ */
+ENTRY(__asm_flush_l3_dcache)
+       /* flush cache */
+       mov     x0, #LLC_BASE_ADDR
+       add     x0, x0, #LLC_FLUSH_BY_WAY
+       movk    x0, #MVEBU_A8K_REGS_BASE_MSB, lsl #16
+       mov     w1, #LLC_WAY_MASK
+       str     w1, [x0]
+       /* sync cache */
+       mov     x0, #LLC_BASE_ADDR
+       add     x0, x0, #LLC_CACHE_SYNC
+       movk    x0, #MVEBU_A8K_REGS_BASE_MSB, lsl #16
+       str     wzr, [x0]
+       /* check that cache sync completed */
+       mov     x0, #LLC_BASE_ADDR
+       add     x0, x0, #LLC_CACHE_SYNC_COMPLETE
+       movk    x0, #MVEBU_A8K_REGS_BASE_MSB, lsl #16
+1:     ldr     w1, [x0]
+       and     w1, w1, #LLC_CACHE_SYNC_MASK
+       cbnz    w1, 1b
+       /* return success */
+       mov     x0, #0
+       ret
+ENDPROC(__asm_flush_l3_dcache)
index 036430c46c909941da9a7c102f8a9035394b4550..2719d68e076fa27bb024e465456c143dd7473fae 100644 (file)
@@ -39,13 +39,29 @@ static struct mm_region mvebu_mem_map[] = {
                         PTE_BLOCK_NON_SHARE
        },
        {
-               /* SRAM, MMIO regions - CP110 region */
+               /* SRAM, MMIO regions - CP110 master region */
                .phys = 0xf2000000UL,
                .virt = 0xf2000000UL,
                .size = 0x02000000UL,   /* 32MiB internal registers */
                .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
                         PTE_BLOCK_NON_SHARE
        },
+       {
+               /* SRAM, MMIO regions - CP110 slave region */
+               .phys = 0xf4000000UL,
+               .virt = 0xf4000000UL,
+               .size = 0x02000000UL,   /* 32MiB internal registers */
+               .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+                        PTE_BLOCK_NON_SHARE
+       },
+       {
+               /* PCI regions */
+               .phys = 0xf8000000UL,
+               .virt = 0xf8000000UL,
+               .size = 0x08000000UL,   /* 128MiB PCI space (master & slave) */
+               .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+                        PTE_BLOCK_NON_SHARE
+       },
        {
                /* List terminator */
                0,
index 6acf30c5db00fe4e363a0fe449e1193cc8306643..690487e7c38b5a5581eee9479b50c162ed396a17 100644 (file)
@@ -180,6 +180,10 @@ void config_sdram(const struct emif_regs *regs, int nr)
        writel(regs->ref_ctrl, &emif_reg[nr]->emif_sdram_ref_ctrl);
        writel(regs->ref_ctrl, &emif_reg[nr]->emif_sdram_ref_ctrl_shdw);
        writel(regs->sdram_config, &emif_reg[nr]->emif_sdram_config);
+
+       /* Write REG_COS_COUNT_1, REG_COS_COUNT_2, and REG_PR_OLD_COUNT. */
+       if (regs->ocp_config)
+               writel(regs->ocp_config, &emif_reg[nr]->emif_l3_config);
 }
 
 /**
index d91b8bbcebc56c7dbd0622e1938d3d50e9b2dbb7..6991af877522ebe88a81cc4a88b03c1d0137b057 100644 (file)
@@ -74,6 +74,10 @@ config TARGET_SOCFPGA_TERASIC_DE0_NANO
        bool "Terasic DE0-Nano-Atlas (Cyclone V)"
        select TARGET_SOCFPGA_CYCLONE5
 
+config TARGET_SOCFPGA_TERASIC_DE1_SOC
+       bool "Terasic DE1-SoC (Cyclone V)"
+       select TARGET_SOCFPGA_CYCLONE5
+
 config TARGET_SOCFPGA_TERASIC_SOCKIT
        bool "Terasic SoCkit (Cyclone V)"
        select TARGET_SOCFPGA_CYCLONE5
@@ -84,6 +88,7 @@ config SYS_BOARD
        default "arria5-socdk" if TARGET_SOCFPGA_ARRIA5_SOCDK
        default "cyclone5-socdk" if TARGET_SOCFPGA_CYCLONE5_SOCDK
        default "de0-nano-soc" if TARGET_SOCFPGA_TERASIC_DE0_NANO
+       default "de1-soc" if TARGET_SOCFPGA_TERASIC_DE1_SOC
        default "is1" if TARGET_SOCFPGA_IS1
        default "mcvevk" if TARGET_SOCFPGA_DENX_MCVEVK
        default "sockit" if TARGET_SOCFPGA_TERASIC_SOCKIT
@@ -98,6 +103,7 @@ config SYS_VENDOR
        default "ebv" if TARGET_SOCFPGA_EBV_SOCRATES
        default "samtec" if TARGET_SOCFPGA_SAMTEC_VINING_FPGA
        default "terasic" if TARGET_SOCFPGA_TERASIC_DE0_NANO
+       default "terasic" if TARGET_SOCFPGA_TERASIC_DE1_SOC
        default "terasic" if TARGET_SOCFPGA_TERASIC_SOCKIT
 
 config SYS_SOC
@@ -107,6 +113,7 @@ config SYS_CONFIG_NAME
        default "socfpga_arria5_socdk" if TARGET_SOCFPGA_ARRIA5_SOCDK
        default "socfpga_cyclone5_socdk" if TARGET_SOCFPGA_CYCLONE5_SOCDK
        default "socfpga_de0_nano_soc" if TARGET_SOCFPGA_TERASIC_DE0_NANO
+       default "socfpga_de1_soc" if TARGET_SOCFPGA_TERASIC_DE1_SOC
        default "socfpga_is1" if TARGET_SOCFPGA_IS1
        default "socfpga_mcvevk" if TARGET_SOCFPGA_DENX_MCVEVK
        default "socfpga_sockit" if TARGET_SOCFPGA_TERASIC_SOCKIT
diff --git a/arch/arm/mach-socfpga/include/mach/boot0.h b/arch/arm/mach-socfpga/include/mach/boot0.h
new file mode 100644 (file)
index 0000000..aaada31
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Specialty padding for the Altera SoCFPGA preloader image
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __BOOT0_H
+#define __BOOT0_H
+
+#ifdef CONFIG_SPL_BUILD
+#define ARM_SOC_BOOT0_HOOK                                             \
+       .balignl 64,0xf33db33f;                                         \
+                                                                       \
+       .word   0x1337c0d3;     /* SoCFPGA preloader validation word */ \
+       .word   0xc01df00d;     /* Version, flags, length */            \
+       .word   0xcafec0d3;     /* Checksum, zero-pad */                \
+       nop;                                                            \
+                                                                       \
+       b reset;                /* SoCFPGA jumps here */                \
+       nop;                                                            \
+       nop;                                                            \
+       nop;
+#else
+#define ARM_SOC_BOOT0_HOOK
+#endif
+
+
+#endif /* __BOOT0_H */
index 1148a713113748f32f8c2d93d216a4974b1769e1..785a0d5ea21769a4e0de1903ff3ffd0f54c70bb2 100755 (executable)
@@ -1,5 +1,13 @@
 #!/bin/sh
 
+#
+# helper function to convert from DOS to Unix, if necessary, and handle
+# lines ending in '\'.
+#
+fix_newlines_in_macros() {
+       sed -n ':next;s/\r$//;/[^\\]\\$/ {N;s/\\\n//;b next};p' $1
+}
+
 #
 # Process iocsr_config_*.[ch]
 # $1:  SoC type
@@ -27,14 +35,16 @@ process_iocsr_config() {
 EOF
 
        # Retrieve the scan chain lengths
-       grep 'CONFIG_HPS_IOCSR_SCANCHAIN[0-9]\+_LENGTH'                 \
-               ${in_bsp_dir}/generated/iocsr_config_${soc}.h | tr -d "()"
+       fix_newlines_in_macros \
+               ${in_bsp_dir}/generated/iocsr_config_${soc}.h |
+       grep 'CONFIG_HPS_IOCSR_SCANCHAIN[0-9]\+_LENGTH' | tr -d "()"
 
        echo ""
 
        # Retrieve the scan chain config and zap the ad-hoc length encoding
-       sed -n '/^const/ !b; :next {/^const/ s/(.*)//;p;n;b next}'      \
-               ${in_bsp_dir}/generated/iocsr_config_${soc}.c
+       fix_newlines_in_macros \
+               ${in_bsp_dir}/generated/iocsr_config_${soc}.c |
+       sed -n '/^const/ !b; :next {/^const/ s/(.*)//;p;n;b next}'
 
        cat << EOF
 
@@ -69,8 +79,9 @@ process_pinmux_config() {
 EOF
 
        # Retrieve the pinmux config and zap the ad-hoc length encoding
-       sed -n '/^unsigned/ !b; :next {/^unsigned/ {s/\[.*\]/[]/;s/unsigned long/const u8/};p;n;b next}' \
-               ${in_bsp_dir}/generated/pinmux_config_${soc}.c
+       fix_newlines_in_macros \
+               ${in_bsp_dir}/generated/pinmux_config_${soc}.c |
+       sed -n '/^unsigned/ !b; :next {/^unsigned/ {s/\[.*\]/[]/;s/unsigned long/const u8/};p;n;b next}'
 
        cat << EOF
 
@@ -105,8 +116,9 @@ process_pll_config() {
 EOF
 
        # Retrieve the pll config and zap parenthesis
-       sed -n '/CONFIG_HPS/ !b; :next {/CONFIG_HPS/ s/[()]//g;/endif/ b;p;n;b next}' \
-               ${in_bsp_dir}/generated/pll_config.h
+       fix_newlines_in_macros \
+               ${in_bsp_dir}/generated/pll_config.h |
+       sed -n '/CONFIG_HPS/ !b; :next {/CONFIG_HPS/ s/[()]//g;/endif/ b;p;n;b next}'
 
        cat << EOF
 
@@ -149,32 +161,37 @@ EOF
 
        echo "/* SDRAM configuration */"
        # Retrieve the sdram config, zap broken lines and zap parenthesis
-       sed -n "/\\\\$/ {N;s/ \\\\\n/\t/};p"            \
+       fix_newlines_in_macros \
                ${in_bsp_dir}/generated/sdram/sdram_config.h |
+       sed -n "/\\\\$/ {N;s/ \\\\\n/\t/};p" |
        sed -n '/CONFIG_HPS/ !b; :next {/CONFIG_HPS/ s/[()]//g;/endif/ b;p;n;b next}' |
                sort -u | grep_sdram_config
 
        echo ""
        echo "/* Sequencer auto configuration */"
-       sed -n "/__RW_MGR/ {s/__//;s/ \+\([^ ]\+\)$/\t\1/p}"            \
+       fix_newlines_in_macros \
                ${in_qts_dir}/hps_isw_handoff/*/sequencer_auto.h |
+       sed -n "/__RW_MGR/ {s/__//;s/ \+\([^ ]\+\)$/\t\1/p}" |
                sort -u | grep_sdram_config
 
        echo ""
        echo "/* Sequencer defines configuration */"
-       sed -n "/^#define [^_]/ {s/__//;s/ \+\([^ ]\+\)$/\t\1/p}"       \
+       fix_newlines_in_macros \
                ${in_qts_dir}/hps_isw_handoff/*/sequencer_defines.h |
+       sed -n "/^#define [^_]/ {s/__//;s/ \+\([^ ]\+\)$/\t\1/p}" |
                sort -u | grep_sdram_config
 
        echo ""
        echo "/* Sequencer ac_rom_init configuration */"
-       sed -n '/^const.*\[/ !b; :next {/^const.*\[/ {N;s/\n//;s/alt_u32/u32/;s/\[.*\]/[]/};/endif/ b;p;n;b next}'\
-               ${in_qts_dir}/hps_isw_handoff/*/sequencer_auto_ac_init.c
+       fix_newlines_in_macros \
+               ${in_qts_dir}/hps_isw_handoff/*/sequencer_auto_ac_init.c |
+       sed -n '/^const.*\[/ !b; :next {/^const.*\[/ {N;s/\n//;s/alt_u32/u32/;s/\[.*\]/[]/};/endif/ b;p;n;b next}'
 
        echo ""
        echo "/* Sequencer inst_rom_init configuration */"
-       sed -n '/^const.*\[/ !b; :next {/^const.*\[/ {N;s/\n//;s/alt_u32/u32/;s/\[.*\]/[]/};/endif/ b;p;n;b next}'\
-               ${in_qts_dir}/hps_isw_handoff/*/sequencer_auto_inst_init.c
+       fix_newlines_in_macros \
+               ${in_qts_dir}/hps_isw_handoff/*/sequencer_auto_inst_init.c |
+       sed -n '/^const.*\[/ !b; :next {/^const.*\[/ {N;s/\n//;s/alt_u32/u32/;s/\[.*\]/[]/};/endif/ b;p;n;b next}'
 
        cat << EOF
 
index 0f8ead980cdc03a30765f330cd46be402a7310ee..aa114937485d6b9f664ced277100713c6b854cdb 100644 (file)
@@ -142,7 +142,7 @@ static int spl_board_load_image(struct spl_image_info *spl_image,
 
        return 0;
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_BOARD, spl_board_load_image);
+SPL_LOAD_IMAGE_METHOD("FEL", 0, BOOT_DEVICE_BOARD, spl_board_load_image);
 #endif
 
 void s_init(void)
@@ -247,15 +247,6 @@ u32 spl_boot_device(void)
        return -1;              /* Never reached */
 }
 
-/*
- * Properly announce BOOT_DEVICE_BOARD as "FEL".
- * Overrides weak function from common/spl/spl.c
- */
-void spl_board_announce_boot_device(void)
-{
-       printf("FEL");
-}
-
 /* No confirmation data available in SPL yet. Hardcode bootmode */
 u32 spl_boot_mode(const u32 boot_device)
 {
index 854ab056dad4abcac5d0b976b5deb706db44f38c..a6b668656bd02d4202c7eaab113c6b2ac6bc50da 100644 (file)
 
 #include "../soc-info.h"
 
-void spl_board_announce_boot_device(void)
-{
-       printf("eMMC");
-}
-
 struct uniphier_romfunc_table {
        void *mmc_send_cmd;
        void *mmc_card_blockaddr;
@@ -127,4 +122,4 @@ static int spl_board_load_image(struct spl_image_info *spl_image,
 
        return 0;
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_BOARD, spl_board_load_image);
+SPL_LOAD_IMAGE_METHOD("eMMC", 0, BOOT_DEVICE_BOARD, spl_board_load_image);
index b8c0f59e171368ae40abb0269713063158172729..ecbe1016174f3f0f9e0c96c4098ff20868411df9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2016 Socionext Inc.
  *
- * based on commit a7a36122aa072fe1bb06e02b73b3634b7a6c555a of Diag
+ * based on commit 5e1cb0f1caeabc6c99469dd997cb6b4f46834443 of Diag
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
@@ -264,8 +264,8 @@ static int ddrphy_ip_dq_shift_val[DRAM_BOARD_NR][DRAM_CH_NR][32] = {
 static void ddrphy_select_lane(void __iomem *phy_base, unsigned int lane,
                               unsigned int bit)
 {
-       WARN_ON(lane >= (1 << PHY_LANE_SEL_LANE_WIDTH));
-       WARN_ON(bit >= (1 << PHY_LANE_SEL_BIT_WIDTH));
+       WARN_ON(lane >= 1 << PHY_LANE_SEL_LANE_WIDTH);
+       WARN_ON(bit >= 1 << PHY_LANE_SEL_BIT_WIDTH);
 
        writel((bit << PHY_LANE_SEL_BIT_SHIFT) |
               (lane << PHY_LANE_SEL_LANE_SHIFT),
index 3d4b50456b65e254785f3becbe21847e08113708..e607ac9c3ba4b62e54411f1932fad947348d3c18 100644 (file)
@@ -1,5 +1,7 @@
 /*
- * Copyright (C) 2011-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
+ * Copyright (C) 2011-2015 Panasonic Corporation
+ * Copyright (C) 2016      Socionext Inc.
+ *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
@@ -14,7 +16,7 @@
 
 int memconf_init(const struct uniphier_board_data *bd)
 {
-       u32 tmp = 0;
+       u32 tmp;
        unsigned long size_per_word;
 
        tmp = readl(SG_MEMCONF);
index c2402a8bda2bfdd32b95171a16d919ecfacfa653..d1b6699a6a1d96981c7788f358141f90e80d0c05 100644 (file)
@@ -45,7 +45,9 @@
 #include <nand.h>
 #include <errno.h>
 #endif
-
+#ifndef CONFIG_ARCH_QEMU_E500
+#include <fsl_ddr.h>
+#endif
 #include "../../../../drivers/block/fsl_sata.h"
 #ifdef CONFIG_U_QE
 #include <fsl_qe.h>
@@ -947,6 +949,10 @@ int cpu_init_r(void)
 
 #endif /* CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE */
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A009942
+       erratum_a009942_check_cpo();
+#endif
+
 #ifdef CONFIG_FMAN_ENET
        fman_enet_init();
 #endif
index 4877b759815658777a8611b6c8af56aced16d58f..603d6aeadc315db7428f8361529efaf3c92e0c6e 100644 (file)
 #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_ERRATUM_A_004934
 #define CONFIG_SYS_FSL_ERRATUM_A005871
 #define CONFIG_SYS_FSL_ERRATUM_A006379
 #define CONFIG_SYS_FSL_ERRATUM_A007186
 #define CONFIG_SYS_FSL_TBCLK_DIV       16
 #define CONFIG_SYS_FSL_PCIE_COMPAT     "fsl,qoriq-pcie-v2.4"
 #define CONFIG_SYS_FSL_USB1_PHY_ENABLE
-#define CONFIG_SYS_FSL_ERRATUM_A_004934
 #define CONFIG_SYS_FSL_ERRATUM_A005871
 #define CONFIG_SYS_FSL_ERRATUM_A006379
 #define CONFIG_SYS_FSL_ERRATUM_A007186
index 1ad7fb6c60e8641878684490e909cea1030e81cb..7cc76d4cf1f344ad1e897879a9784dabb2920fbc 100644 (file)
@@ -25,19 +25,6 @@ u32 spl_boot_device(void)
        return BOOT_DEVICE_BOARD;
 }
 
-void spl_board_announce_boot_device(void)
-{
-       char fname[256];
-       int ret;
-
-       ret = os_find_u_boot(fname, sizeof(fname));
-       if (ret) {
-               printf("(%s not found, error %d)\n", fname, ret);
-               return;
-       }
-       printf("%s\n", fname);
-}
-
 static int spl_board_load_image(struct spl_image_info *spl_image,
                                struct spl_boot_device *bootdev)
 {
@@ -45,13 +32,15 @@ static int spl_board_load_image(struct spl_image_info *spl_image,
        int ret;
 
        ret = os_find_u_boot(fname, sizeof(fname));
-       if (ret)
+       if (ret) {
+               printf("(%s not found, error %d)\n", fname, ret);
                return ret;
+       }
 
        /* Hopefully this will not return */
        return os_spl_to_uboot(fname);
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_BOARD, spl_board_load_image);
+SPL_LOAD_IMAGE_METHOD("sandbox", 0, BOOT_DEVICE_BOARD, spl_board_load_image);
 
 void spl_board_init(void)
 {
diff --git a/board/Marvell/mvebu_armada-8k/MAINTAINERS b/board/Marvell/mvebu_armada-8k/MAINTAINERS
new file mode 100644 (file)
index 0000000..e0b965d
--- /dev/null
@@ -0,0 +1,7 @@
+MVEBU_ARMADA_8K BOARD
+M:     Stefan Roese <sr@denx.de>
+S:     Maintained
+F:     board/Marvell/mvebu_armada-8k/
+F:     include/configs/mvebu_armada-8k.h
+F:     configs/mvebu_db-88f7040_defconfig
+F:     configs/mvebu_db-88f8040_defconfig
diff --git a/board/Marvell/mvebu_armada-8k/board.c b/board/Marvell/mvebu_armada-8k/board.c
new file mode 100644 (file)
index 0000000..7d1b5d9
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2016 Stefan Roese <sr@denx.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <i2c.h>
+#include <asm/io.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/soc.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Information specific to the DB-88F7040 eval board. We strive to use
+ * DT for such platform specfic configurations. At some point, this
+ * might be removed here and implemented via DT.
+ */
+/* IO expander I2C device */
+#define I2C_IO_EXP_ADDR                0x21
+#define I2C_IO_CFG_REG_0       0x6
+#define I2C_IO_DATA_OUT_REG_0  0x2
+/* VBus enable */
+#define I2C_IO_REG_0_USB_H0_OFF        0
+#define I2C_IO_REG_0_USB_H1_OFF        1
+#define I2C_IO_REG_VBUS                ((1 << I2C_IO_REG_0_USB_H0_OFF) | \
+                                (1 << I2C_IO_REG_0_USB_H1_OFF))
+/* Current limit */
+#define I2C_IO_REG_0_USB_H0_CL 4
+#define I2C_IO_REG_0_USB_H1_CL 5
+#define I2C_IO_REG_CL          ((1 << I2C_IO_REG_0_USB_H0_CL) | \
+                                (1 << I2C_IO_REG_0_USB_H1_CL))
+
+static int usb_enabled = 0;
+
+/* Board specific xHCI dis-/enable code */
+
+/*
+ * Set USB VBUS signals (via I2C IO expander/GPIO) as output and set
+ * output value as disabled
+ *
+ * Set USB Current Limit signals (via I2C IO expander/GPIO) as output
+ * and set output value as enabled
+ */
+int board_xhci_config(void)
+{
+       struct udevice *dev;
+       int ret;
+       u8 buf[8];
+
+       if (of_machine_is_compatible("marvell,armada7040-db")) {
+               /* Configure IO exander PCA9555: 7bit address 0x21 */
+               ret = i2c_get_chip_for_busnum(0, I2C_IO_EXP_ADDR, 1, &dev);
+               if (ret) {
+                       printf("Cannot find PCA9555: %d\n", ret);
+                       return 0;
+               }
+
+               /*
+                * Read configuration (direction) and set VBUS pin as output
+                * (reset pin = output)
+                */
+               ret = dm_i2c_read(dev, I2C_IO_CFG_REG_0, buf, 1);
+               if (ret) {
+                       printf("Failed to read IO expander value via I2C\n");
+                       return -EIO;
+               }
+               buf[0] &= ~I2C_IO_REG_VBUS;
+               buf[0] &= ~I2C_IO_REG_CL;
+               ret = dm_i2c_write(dev, I2C_IO_CFG_REG_0, buf, 1);
+               if (ret) {
+                       printf("Failed to set IO expander via I2C\n");
+                       return -EIO;
+               }
+
+               /* Read output value and configure it */
+               ret = dm_i2c_read(dev, I2C_IO_DATA_OUT_REG_0, buf, 1);
+               if (ret) {
+                       printf("Failed to read IO expander value via I2C\n");
+                       return -EIO;
+               }
+               buf[0] &= ~I2C_IO_REG_VBUS;
+               buf[0] |= I2C_IO_REG_CL;
+               ret = dm_i2c_write(dev, I2C_IO_DATA_OUT_REG_0, buf, 1);
+               if (ret) {
+                       printf("Failed to set IO expander via I2C\n");
+                       return -EIO;
+               }
+
+               mdelay(500); /* required delay to let output value settle */
+       }
+
+       return 0;
+}
+
+int board_xhci_enable(void)
+{
+       struct udevice *dev;
+       int ret;
+       u8 buf[8];
+
+       if (of_machine_is_compatible("marvell,armada7040-db")) {
+               /*
+                * This function enables all USB ports simultaniously,
+                * it only needs to get called once
+                */
+               if (usb_enabled)
+                       return 0;
+
+               /* Configure IO exander PCA9555: 7bit address 0x21 */
+               ret = i2c_get_chip_for_busnum(0, I2C_IO_EXP_ADDR, 1, &dev);
+               if (ret) {
+                       printf("Cannot find PCA9555: %d\n", ret);
+                       return 0;
+               }
+
+               /* Read VBUS output value */
+               ret = dm_i2c_read(dev, I2C_IO_DATA_OUT_REG_0, buf, 1);
+               if (ret) {
+                       printf("Failed to read IO expander value via I2C\n");
+                       return -EIO;
+               }
+
+               /* Enable VBUS power: Set output value of VBUS pin as enabled */
+               buf[0] |= I2C_IO_REG_VBUS;
+               ret = dm_i2c_write(dev, I2C_IO_DATA_OUT_REG_0, buf, 1);
+               if (ret) {
+                       printf("Failed to set IO expander via I2C\n");
+                       return -EIO;
+               }
+
+               mdelay(500); /* required delay to let output value settle */
+               usb_enabled = 1;
+       }
+
+       return 0;
+}
+
+int board_early_init_f(void)
+{
+       /* Nothing to do (yet), perhaps later some pin-muxing etc */
+
+       return 0;
+}
+
+int board_init(void)
+{
+       /* adress of boot parameters */
+       gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
+
+       return 0;
+}
+
+int board_late_init(void)
+{
+       /* Pre-configure the USB ports (overcurrent, VBus) */
+       board_xhci_config();
+
+       return 0;
+}
diff --git a/board/Marvell/mvebu_db-88f7040/MAINTAINERS b/board/Marvell/mvebu_db-88f7040/MAINTAINERS
deleted file mode 100644 (file)
index 820461b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-MVEBU_DB_88F7040 BOARD
-M:     Stefan Roese <sr@denx.de>
-S:     Maintained
-F:     board/Marvell/mvebu_db-88f7040/
-F:     include/configs/mvebu_db-88f7040.h
-F:     configs/mvebu_db-88f7040_defconfig
diff --git a/board/Marvell/mvebu_db-88f7040/board.c b/board/Marvell/mvebu_db-88f7040/board.c
deleted file mode 100644 (file)
index 48bd55c..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2016 Stefan Roese <sr@denx.de>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <i2c.h>
-#include <asm/io.h>
-#include <asm/arch/cpu.h>
-#include <asm/arch/soc.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/* IO expander I2C device */
-#define I2C_IO_EXP_ADDR                0x21
-#define I2C_IO_CFG_REG_0       0x6
-#define I2C_IO_DATA_OUT_REG_0  0x2
-/* VBus enable */
-#define I2C_IO_REG_0_USB_H0_OFF        0
-#define I2C_IO_REG_0_USB_H1_OFF        1
-#define I2C_IO_REG_VBUS                ((1 << I2C_IO_REG_0_USB_H0_OFF) | \
-                                (1 << I2C_IO_REG_0_USB_H1_OFF))
-/* Current limit */
-#define I2C_IO_REG_0_USB_H0_CL 4
-#define I2C_IO_REG_0_USB_H1_CL 5
-#define I2C_IO_REG_CL          ((1 << I2C_IO_REG_0_USB_H0_CL) | \
-                                (1 << I2C_IO_REG_0_USB_H1_CL))
-
-static int usb_enabled = 0;
-
-/* Board specific xHCI dis-/enable code */
-
-/*
- * Set USB VBUS signals (via I2C IO expander/GPIO) as output and set
- * output value as disabled
- *
- * Set USB Current Limit signals (via I2C IO expander/GPIO) as output
- * and set output value as enabled
- */
-int board_xhci_config(void)
-{
-       struct udevice *dev;
-       int ret;
-       u8 buf[8];
-
-       /* Configure IO exander PCA9555: 7bit address 0x21 */
-       ret = i2c_get_chip_for_busnum(0, I2C_IO_EXP_ADDR, 1, &dev);
-       if (ret) {
-               printf("Cannot find PCA9555: %d\n", ret);
-               return 0;
-       }
-
-       /*
-        * Read configuration (direction) and set VBUS pin as output
-        * (reset pin = output)
-        */
-       ret = dm_i2c_read(dev, I2C_IO_CFG_REG_0, buf, 1);
-       if (ret) {
-               printf("Failed to read IO expander value via I2C\n");
-               return -EIO;
-       }
-       buf[0] &= ~I2C_IO_REG_VBUS;
-       buf[0] &= ~I2C_IO_REG_CL;
-       ret = dm_i2c_write(dev, I2C_IO_CFG_REG_0, buf, 1);
-       if (ret) {
-               printf("Failed to set IO expander via I2C\n");
-               return -EIO;
-       }
-
-       /* Read output value and configure it */
-       ret = dm_i2c_read(dev, I2C_IO_DATA_OUT_REG_0, buf, 1);
-       if (ret) {
-               printf("Failed to read IO expander value via I2C\n");
-               return -EIO;
-       }
-       buf[0] &= ~I2C_IO_REG_VBUS;
-       buf[0] |= I2C_IO_REG_CL;
-       ret = dm_i2c_write(dev, I2C_IO_DATA_OUT_REG_0, buf, 1);
-       if (ret) {
-               printf("Failed to set IO expander via I2C\n");
-               return -EIO;
-       }
-
-       mdelay(500); /* required delay to let output value settle */
-
-       return 0;
-}
-
-int board_xhci_enable(void)
-{
-       struct udevice *dev;
-       int ret;
-       u8 buf[8];
-
-       /*
-        * This function enables all USB ports simultaniously,
-        * it only needs to get called once
-        */
-       if (usb_enabled)
-               return 0;
-
-       /* Configure IO exander PCA9555: 7bit address 0x21 */
-       ret = i2c_get_chip_for_busnum(0, I2C_IO_EXP_ADDR, 1, &dev);
-       if (ret) {
-               printf("Cannot find PCA9555: %d\n", ret);
-               return 0;
-       }
-
-       /* Read VBUS output value */
-       ret = dm_i2c_read(dev, I2C_IO_DATA_OUT_REG_0, buf, 1);
-       if (ret) {
-               printf("Failed to read IO expander value via I2C\n");
-               return -EIO;
-       }
-
-       /* Enable VBUS power: Set output value of VBUS pin as enabled */
-       buf[0] |= I2C_IO_REG_VBUS;
-       ret = dm_i2c_write(dev, I2C_IO_DATA_OUT_REG_0, buf, 1);
-       if (ret) {
-               printf("Failed to set IO expander via I2C\n");
-               return -EIO;
-       }
-
-       mdelay(500); /* required delay to let output value settle */
-       usb_enabled = 1;
-
-       return 0;
-}
-
-int board_early_init_f(void)
-{
-       /* Nothing to do (yet), perhaps later some pin-muxing etc */
-
-       return 0;
-}
-
-int board_init(void)
-{
-       /* adress of boot parameters */
-       gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
-
-       return 0;
-}
-
-int board_late_init(void)
-{
-       /* Pre-configure the USB ports (overcurrent, VBus) */
-       board_xhci_config();
-
-       return 0;
-}
index ba35b3647fab05f8657a92cf545d4daa7aa4da4f..873ec2be2d92be9870aca052b75561a5a0de59ce 100644 (file)
@@ -1,5 +1,5 @@
 SOCFPGA BOARD
-M:     Dinh Nguyen <dinguyen@opensource.altera.com>
+M:     Dinh Nguyen <dinguyen@kernel.org>
 M:     Chin-Liang See <clsee@altera.com>
 S:     Maintained
 F:     board/altera/arria5-socdk/
index 6374d592ac8dac18fd21764146366469c26a568f..ecf1d04f768a568b8fe213357ab77478ad56e20a 100644 (file)
@@ -1,5 +1,5 @@
 SOCFPGA BOARD
-M:     Dinh Nguyen <dinguyen@opensource.altera.com>
+M:     Dinh Nguyen <dinguyen@kernel.org>
 M:     Chin-Liang See <clsee@altera.com>
 S:     Maintained
 F:     board/altera/cyclone5-socdk/
index 4eb38a73c901050761cced88c6498e4b2260d88e..79078d237b44731ecf8b49efe4459c10fa002df8 100644 (file)
@@ -22,7 +22,7 @@
 #include <spl.h>
 #include <fsl_devdis.h>
 #include <fsl_validate.h>
-
+#include <fsl_ddr.h>
 #include "../common/sleep.h"
 #include "../common/qixis.h"
 #include "ls1021aqds_qixis.h"
@@ -433,7 +433,9 @@ int board_init(void)
 #ifdef CONFIG_SYS_FSL_ERRATUM_A010315
        erratum_a010315();
 #endif
-
+#ifdef CONFIG_SYS_FSL_ERRATUM_A009942
+       erratum_a009942_check_cpo();
+#endif
        major = get_soc_major_rev();
        if (major == SOC_MAJOR_VER_1_0) {
                /* Set CCI-400 control override register to
index 30dd481a26db8c1a170a67b79b418747d2887924..ec850d2f9144b12255b9f40e2be96424cf08efa7 100644 (file)
@@ -3,4 +3,7 @@ M:      Paul Burton <paul.burton@imgtec.com>
 S:     Maintained
 F:     board/imgtec/boston/
 F:     include/configs/boston.h
-F:     configs/boston_defconfig
+F:     configs/boston32r2_defconfig
+F:     configs/boston32r2el_defconfig
+F:     configs/boston64r2_defconfig
+F:     configs/boston64r2el_defconfig
index a0b3284992d76e38324c7f69139e1856a5a365ad..052ec67b14f5f559b01e2a99c8b905bbfec3c6ee 100644 (file)
@@ -3,5 +3,7 @@ M:      Paul Burton <paul.burton@imgtec.com>
 S:     Maintained
 F:     board/imgtec/malta/
 F:     include/configs/malta.h
+F:     configs/malta64_defconfig
+F:     configs/malta64el_defconfig
 F:     configs/malta_defconfig
 F:     configs/maltael_defconfig
index f6e37a24b34eff79f560421c132e1d442fb1e79a..ad788a6dba142a68301c66393825f726dd2bcfe2 100644 (file)
@@ -1,6 +1,6 @@
 CALIMAIN BOARD
-M:     Manfred Rudigier <manfred.rudigier@omicron.at>
-M:     Christian Riesch <christian.riesch@omicron.at>
+M:     Manfred Rudigier <manfred.rudigier@omicronenergy.com>
+M:     Christoph Rüdisser <christoph.ruedisser@omicronenergy.com>
 S:     Maintained
 F:     board/omicron/calimain/
 F:     include/configs/calimain.h
index 77d0a4e837f0072eae4d12707ca014ef3c8fe9bc..203136fb970de3fb7c93b6276a7076e4c8161d06 100644 (file)
@@ -101,6 +101,7 @@ void set_board_info(void)
 #ifdef CONFIG_LCD_MENU
 static int power_key_pressed(u32 reg)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        struct pmic *pmic;
        u32 status;
        u32 mask;
@@ -123,6 +124,9 @@ static int power_key_pressed(u32 reg)
                return 0;
 
        return !!(status & mask);
+#else
+       return 0;
+#endif
 }
 
 static int key_pressed(int key)
index e8329bba6cbbfbe2b10d97e80373a38dde22918f..b066832e5fa0425191d47744392c43f505d30f00 100644 (file)
@@ -45,11 +45,15 @@ void i2c_init_board(void)
 
 int power_init_board(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        /*
         * For PMIC the I2C bus is named as I2C5, but it is connected
         * to logical I2C adapter 0
         */
        return pmic_init(I2C_0);
+#else
+       return 0;
+#endif
 }
 
 int dram_init(void)
@@ -142,6 +146,7 @@ int board_mmc_init(bd_t *bis)
 #ifdef CONFIG_USB_GADGET
 static int s5pc1xx_phy_control(int on)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int ret;
        static int status;
        struct pmic *p = pmic_get("MAX8998_PMIC");
@@ -173,7 +178,7 @@ static int s5pc1xx_phy_control(int on)
                status = 0;
        }
        udelay(10000);
-
+#endif
        return 0;
 }
 
index 66a54d436ded8182c8d6a53b8d02bca93f43980d..7200c2ee0b1e2a51075f2c53335e8780bf399be3 100644 (file)
@@ -53,6 +53,7 @@ int exynos_init(void)
 
 void i2c_init_board(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int err;
 
        /* I2C_5 -> PMIC */
@@ -67,8 +68,10 @@ void i2c_init_board(void)
        gpio_request(EXYNOS4_GPIO_Y41, "i2c_data");
        gpio_direction_output(EXYNOS4_GPIO_Y40, 1);
        gpio_direction_output(EXYNOS4_GPIO_Y41, 1);
+#endif
 }
 
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
 static void trats_low_power_mode(void)
 {
        struct exynos4_clock *clk =
@@ -273,11 +276,14 @@ static int pmic_init_max8997(void)
                puts("MAX8997 PMIC setting error!\n");
                return -1;
        }
+
        return 0;
 }
+#endif
 
 int exynos_power_init(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int chrg, ret;
        struct power_battery *pb;
        struct pmic *p_fg, *p_chrg, *p_muic, *p_bat;
@@ -341,6 +347,7 @@ int exynos_power_init(void)
 
        if (pb->bat->state == CHARGE && chrg == CHARGER_USB)
                puts("CHARGE Battery !\n");
+#endif
 
        return 0;
 }
@@ -384,6 +391,7 @@ static void check_hw_revision(void)
 #ifdef CONFIG_USB_GADGET
 static int s5pc210_phy_control(int on)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int ret = 0;
        u32 val = 0;
        struct pmic *p = pmic_get("MAX8997_PMIC");
@@ -415,6 +423,7 @@ static int s5pc210_phy_control(int on)
                puts("MAX8997 LDO setting error!\n");
                return -1;
        }
+#endif
 
        return 0;
 }
@@ -435,11 +444,16 @@ int board_usb_init(int index, enum usb_init_type init)
 
 int g_dnl_board_usb_cable_connected(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        struct pmic *muic = pmic_get("MAX8997_MUIC");
        if (!muic)
                return 0;
 
        return !!muic->chrg->chrg_type(muic);
+#else
+       return false;
+#endif
+
 }
 #endif
 
@@ -552,6 +566,7 @@ void exynos_reset_lcd(void)
 
 int lcd_power(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int ret = 0;
        struct pmic *p = pmic_get("MAX8997_PMIC");
        if (!p)
@@ -569,12 +584,13 @@ int lcd_power(void)
                puts("MAX8997 LDO setting error!\n");
                return -1;
        }
-
+#endif
        return 0;
 }
 
 int mipi_power(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int ret = 0;
        struct pmic *p = pmic_get("MAX8997_PMIC");
        if (!p)
@@ -592,7 +608,7 @@ int mipi_power(void)
                puts("MAX8997 LDO setting error!\n");
                return -1;
        }
-
+#endif
        return 0;
 }
 
index 7b28ae8cc72c8adc7e20e8ad3ae8f66b823d14ca..150503ec15888321ad842459bc2435498d4cc7aa 100644 (file)
@@ -151,8 +151,6 @@ int exynos_early_init_f(void)
        return 0;
 }
 
-static int pmic_init_max77686(void);
-
 int exynos_init(void)
 {
        struct exynos4_power *pwr =
@@ -176,6 +174,7 @@ int exynos_init(void)
 
 int exynos_power_init(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int chrg;
        struct power_battery *pb;
        struct pmic *p_chrg, *p_muic, *p_fg, *p_bat;
@@ -236,13 +235,14 @@ int exynos_power_init(void)
 
        if (pb->bat->state == CHARGE && chrg == CHARGER_USB)
                puts("CHARGE Battery !\n");
-
+#endif
        return 0;
 }
 
 #ifdef CONFIG_USB_GADGET
 static int s5pc210_phy_control(int on)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int ret = 0;
        unsigned int val;
        struct pmic *p, *p_pmic, *p_muic;
@@ -299,7 +299,7 @@ static int s5pc210_phy_control(int on)
 
        if (ret)
                return -1;
-
+#endif
        return 0;
 }
 
@@ -319,14 +319,19 @@ int board_usb_init(int index, enum usb_init_type init)
 
 int g_dnl_board_usb_cable_connected(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        struct pmic *muic = pmic_get("MAX77693_MUIC");
        if (!muic)
                return 0;
 
        return !!muic->chrg->chrg_type(muic);
+#else
+       return false;
+#endif
 }
 #endif
 
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
 static int pmic_init_max77686(void)
 {
        struct pmic *p = pmic_get("MAX77686_PMIC");
@@ -379,6 +384,7 @@ static int pmic_init_max77686(void)
 
        return 0;
 }
+#endif
 
 /*
  * LCD
@@ -387,18 +393,21 @@ static int pmic_init_max77686(void)
 #ifdef CONFIG_LCD
 int mipi_power(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        struct pmic *p = pmic_get("MAX77686_PMIC");
 
        /* LDO8 VMIPI_1.0V_AP */
        max77686_set_ldo_mode(p, 8, OPMODE_ON);
        /* LDO10 VMIPI_1.8V_AP */
        max77686_set_ldo_mode(p, 10, OPMODE_ON);
+#endif
 
        return 0;
 }
 
 void exynos_lcd_power_on(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        struct pmic *p = pmic_get("MAX77686_PMIC");
 
        /* LCD_2.2V_EN: GPC0[1] */
@@ -410,6 +419,7 @@ void exynos_lcd_power_on(void)
        pmic_probe(p);
        max77686_set_ldo_voltage(p, 25, 3100000);
        max77686_set_ldo_mode(p, 25, OPMODE_LPM);
+#endif
 }
 
 void exynos_reset_lcd(void)
index 81e35b6f7590308c612d358249819464c002678d..c3946ee89105ccab933c09c7417bae2047b32038 100644 (file)
@@ -38,10 +38,9 @@ static int get_hwrev(void)
        return board_rev & 0xFF;
 }
 
-static void init_pmic_lcd(void);
-
 int exynos_power_init(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int ret;
 
        /*
@@ -53,7 +52,7 @@ int exynos_power_init(void)
                return ret;
 
        init_pmic_lcd();
-
+#endif
        return 0;
 }
 
@@ -84,6 +83,7 @@ static unsigned short get_adc_value(int channel)
 
 static int adc_power_control(int on)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int ret;
        struct pmic *p = pmic_get("MAX8998_PMIC");
        if (!p)
@@ -97,6 +97,9 @@ static int adc_power_control(int on)
                              MAX8998_LDO4, !!on);
 
        return ret;
+#else
+       return 0;
+#endif
 }
 
 static unsigned int get_hw_revision(void)
@@ -144,6 +147,7 @@ static void check_hw_revision(void)
 #ifdef CONFIG_USB_GADGET
 static int s5pc210_phy_control(int on)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        int ret = 0;
        struct pmic *p = pmic_get("MAX8998_PMIC");
        if (!p)
@@ -175,7 +179,7 @@ static int s5pc210_phy_control(int on)
                puts("MAX8998 LDO setting error!\n");
                return -1;
        }
-
+#endif
        return 0;
 }
 
@@ -201,6 +205,7 @@ int exynos_early_init_f(void)
        return 0;
 }
 
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
 static void init_pmic_lcd(void)
 {
        unsigned char val;
@@ -248,6 +253,7 @@ static void init_pmic_lcd(void)
        if (ret)
                puts("LCD pmic initialisation error!\n");
 }
+#endif
 
 void exynos_cfg_lcd_gpio(void)
 {
@@ -304,6 +310,7 @@ void exynos_reset_lcd(void)
 
 void exynos_lcd_power_on(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        struct pmic *p = pmic_get("MAX8998_PMIC");
 
        if (!p)
@@ -314,6 +321,7 @@ void exynos_lcd_power_on(void)
 
        pmic_set_output(p, MAX8998_REG_ONOFF3, MAX8998_LDO17, LDO_ON);
        pmic_set_output(p, MAX8998_REG_ONOFF2, MAX8998_LDO7, LDO_ON);
+#endif
 }
 
 void exynos_cfg_ldo(void)
@@ -328,8 +336,9 @@ void exynos_enable_ldo(unsigned int onoff)
 
 int exynos_init(void)
 {
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        char buf[16];
-
+#endif
        gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210;
 
        switch (get_hwrev()) {
@@ -354,13 +363,14 @@ int exynos_init(void)
                break;
        }
 
+#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
        /* Request soft I2C gpios */
        strcpy(buf, "soft_i2c_scl");
        gpio_request(CONFIG_SOFT_I2C_GPIO_SCL, buf);
 
        strcpy(buf, "soft_i2c_sda");
        gpio_request(CONFIG_SOFT_I2C_GPIO_SDA, buf);
-
+#endif
        check_hw_revision();
        printf("HW Revision:\t0x%x\n", board_rev);
 
index 351c4569718cc8df909d2b2c86935b4959165292..7f4cf1e7f54befce7e5737f1d680135bae56d767 100644 (file)
@@ -1,5 +1,5 @@
 SOCFPGA ATLAS BOARD
-M:     Dinh Nguyen <dinguyen@opensource.altera.com>
+M:     Dinh Nguyen <dinguyen@kernel.org>
 S:     Maintained
 F:     include/configs/socfpga_de0_nano_soc.h
 F:     configs/socfpga_de0_nano_soc_defconfig
diff --git a/board/terasic/de1-soc/MAINTAINERS b/board/terasic/de1-soc/MAINTAINERS
new file mode 100644 (file)
index 0000000..bd7a8d5
--- /dev/null
@@ -0,0 +1,5 @@
+DE1-SoC BOARD
+M:     Anatolij Gustschin <agust@denx.de>
+S:     Maintained
+F:     include/configs/socfpga_de1_soc.h
+F:     configs/socfpga_de1_soc_defconfig
diff --git a/board/terasic/de1-soc/Makefile b/board/terasic/de1-soc/Makefile
new file mode 100644 (file)
index 0000000..86f9b78
--- /dev/null
@@ -0,0 +1,9 @@
+#
+# (C) Copyright 2001-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+# (C) Copyright 2010, Thomas Chou <thomas@wytron.com.tw>
+#
+# SPDX-License-Identifier:     GPL-2.0+
+#
+
+obj-y  := socfpga.o
diff --git a/board/terasic/de1-soc/qts/iocsr_config.h b/board/terasic/de1-soc/qts/iocsr_config.h
new file mode 100644 (file)
index 0000000..3ca1968
--- /dev/null
@@ -0,0 +1,660 @@
+/*
+ * Altera SoCFPGA IOCSR configuration
+ *
+ * SPDX-License-Identifier:    BSD-3-Clause
+ */
+
+#ifndef __SOCFPGA_IOCSR_CONFIG_H__
+#define __SOCFPGA_IOCSR_CONFIG_H__
+
+#define CONFIG_HPS_IOCSR_SCANCHAIN0_LENGTH     764
+#define CONFIG_HPS_IOCSR_SCANCHAIN1_LENGTH     1719
+#define CONFIG_HPS_IOCSR_SCANCHAIN2_LENGTH     955
+#define CONFIG_HPS_IOCSR_SCANCHAIN3_LENGTH     16766
+
+const unsigned long iocsr_scan_chain0_table[] = {
+       0x00000000,
+       0x00000000,
+       0x0FF00000,
+       0xC0000000,
+       0x0000003F,
+       0x00008000,
+       0x00060180,
+       0x18060000,
+       0x18000000,
+       0x00018060,
+       0x00000000,
+       0x00004000,
+       0x000300C0,
+       0x0C030000,
+       0x0C000000,
+       0x00000030,
+       0x0000C030,
+       0x00002000,
+       0x00020000,
+       0x06018000,
+       0x06000000,
+       0x00000018,
+       0x00006018,
+       0x00001000,
+};
+
+const unsigned long iocsr_scan_chain1_table[] = {
+       0x00100000,
+       0x300C0000,
+       0x300000C0,
+       0x000000C0,
+       0x000300C0,
+       0x00008000,
+       0x00060180,
+       0x20000000,
+       0x00000000,
+       0x00000080,
+       0x00020000,
+       0x00004000,
+       0x000300C0,
+       0x10000000,
+       0x0C000000,
+       0x00000030,
+       0x0000C030,
+       0x00002000,
+       0x06018060,
+       0x06018000,
+       0x01FE0000,
+       0xF8000000,
+       0x00000007,
+       0x00001000,
+       0x0000C030,
+       0x0300C000,
+       0x03000000,
+       0x0000300C,
+       0x0000300C,
+       0x00000800,
+       0x00000000,
+       0x00000000,
+       0x01800000,
+       0x00000006,
+       0x00002000,
+       0x00000400,
+       0x00000000,
+       0x00C03000,
+       0x00000003,
+       0x00000000,
+       0x00000000,
+       0x00000200,
+       0x00601806,
+       0x00000000,
+       0x80600000,
+       0x80000601,
+       0x00000601,
+       0x00000100,
+       0x00300C03,
+       0xC0300C00,
+       0xC0300000,
+       0xC0000300,
+       0x000C0300,
+       0x00000080,
+};
+
+const unsigned long iocsr_scan_chain2_table[] = {
+       0x300C0300,
+       0x00000000,
+       0x0FF00000,
+       0x00000000,
+       0x000300C0,
+       0x00008000,
+       0x00080000,
+       0x18060000,
+       0x18000000,
+       0x00018060,
+       0x00020000,
+       0x00004000,
+       0x200300C0,
+       0x10000000,
+       0x00000000,
+       0x00000040,
+       0x00010000,
+       0x00002000,
+       0x10018060,
+       0x06018000,
+       0x06000000,
+       0x00010018,
+       0x00006018,
+       0x00001000,
+       0x0000C030,
+       0x00000000,
+       0x03000000,
+       0x0000800C,
+       0x00C0300C,
+       0x00000800,
+};
+
+const unsigned long iocsr_scan_chain3_table[] = {
+       0x0C420D80,
+       0x082000FF,
+       0x0A804001,
+       0x07900000,
+       0x08020000,
+       0x00100000,
+       0x0A800000,
+       0x07900000,
+       0x08020000,
+       0x00100000,
+       0xC8800000,
+       0x00003001,
+       0x00C00722,
+       0x00000000,
+       0x00000021,
+       0x82000004,
+       0x05400000,
+       0x03C80000,
+       0x04010000,
+       0x00080000,
+       0x05400000,
+       0x03C80000,
+       0x05400000,
+       0x03C80000,
+       0xE4400000,
+       0x00001800,
+       0x00600391,
+       0x800E4400,
+       0x00000001,
+       0x40000002,
+       0x02A00000,
+       0x01E40000,
+       0x02A00000,
+       0x01E40000,
+       0x02A00000,
+       0x01E40000,
+       0x02A00000,
+       0x01E40000,
+       0x72200000,
+       0x80000C00,
+       0x003001C8,
+       0xC0072200,
+       0x1C880000,
+       0x20000300,
+       0x00040000,
+       0x50670000,
+       0x00000010,
+       0x24590000,
+       0x00001000,
+       0xA0000034,
+       0x0D000001,
+       0x40680208,
+       0x41034051,
+       0x02081A00,
+       0x802080D0,
+       0x34010406,
+       0x01A02490,
+       0x080D0000,
+       0x51406802,
+       0x00410340,
+       0xD000001A,
+       0x06802080,
+       0x10040000,
+       0x00200000,
+       0x10040000,
+       0x00200000,
+       0x15000000,
+       0x0F200000,
+       0x15000000,
+       0x0F200000,
+       0x01FE0000,
+       0x00000000,
+       0x01800E44,
+       0x00391000,
+       0x007F8006,
+       0x00000000,
+       0x0A800001,
+       0x07900000,
+       0x0A800000,
+       0x07900000,
+       0x0A800000,
+       0x07900000,
+       0x08020000,
+       0x00100000,
+       0xC8800000,
+       0x00003001,
+       0x00C00722,
+       0x00000FF0,
+       0x72200000,
+       0x80000C00,
+       0x05400000,
+       0x02480000,
+       0x04000000,
+       0x00080000,
+       0x05400000,
+       0x03C80000,
+       0x05400000,
+       0x03C80000,
+       0x6A1C0000,
+       0x00001800,
+       0x00600391,
+       0x800E4400,
+       0x1A870001,
+       0x40000600,
+       0x02A00040,
+       0x01E40000,
+       0x02A00000,
+       0x01E40000,
+       0x02A00000,
+       0x01E40000,
+       0x02A00000,
+       0x01E40000,
+       0x72200000,
+       0x80000C00,
+       0x003001C8,
+       0xC0072200,
+       0x1C880000,
+       0x20000300,
+       0x00040000,
+       0x50670000,
+       0x00000010,
+       0x24590000,
+       0x00001000,
+       0xA0000034,
+       0x0D000001,
+       0x40680C30,
+       0x49034010,
+       0x12481A02,
+       0x802080D0,
+       0x34051406,
+       0x01A00040,
+       0x080D0002,
+       0x51406802,
+       0x02490340,
+       0xD012481A,
+       0x06802080,
+       0x10040000,
+       0x00200000,
+       0x10040000,
+       0x00200000,
+       0x15000000,
+       0x0F200000,
+       0x15000000,
+       0x0F200000,
+       0x01FE0000,
+       0x00000000,
+       0x01800E44,
+       0x00391000,
+       0x007F8006,
+       0x00000000,
+       0x99300001,
+       0x34343400,
+       0xAA0D4000,
+       0x01C3A800,
+       0xAA0D4000,
+       0x01C3A800,
+       0xAA0D4000,
+       0x01C3A800,
+       0x00040100,
+       0x00000800,
+       0x00000000,
+       0x00001208,
+       0x00482000,
+       0x01000000,
+       0x00000000,
+       0x00410482,
+       0x0006A000,
+       0x0001B400,
+       0x00020000,
+       0x00000400,
+       0x0002A000,
+       0x0001E400,
+       0x5506A000,
+       0x00E1D400,
+       0x00000000,
+       0xC880090C,
+       0x00003001,
+       0x90400000,
+       0x00000000,
+       0x2020C243,
+       0x2A835000,
+       0x0070EA00,
+       0x2A835000,
+       0x0070EA00,
+       0x2A835000,
+       0x0070EA00,
+       0x00010040,
+       0x00000200,
+       0x00000000,
+       0x00000482,
+       0x00120800,
+       0x00002000,
+       0x80000000,
+       0x00104120,
+       0x00000200,
+       0xAC0D5F80,
+       0xFFFFFFFF,
+       0x14F3690D,
+       0x1A041414,
+       0x00D00000,
+       0x18864000,
+       0x49247A06,
+       0xE3CF23DA,
+       0xF796591E,
+       0x0344E388,
+       0x821A0000,
+       0x0000D000,
+       0x01040680,
+       0xD271C47A,
+       0x1EE3CF23,
+       0x88F79659,
+       0x000344E3,
+       0x00080200,
+       0x00001000,
+       0x00080200,
+       0x00001000,
+       0x000A8000,
+       0x00075000,
+       0x541A8000,
+       0x03875001,
+       0x10000000,
+       0x00000000,
+       0x0080C000,
+       0x41000000,
+       0x00003FC2,
+       0x00820000,
+       0xAA0D4000,
+       0x01C3A800,
+       0xAA0D4000,
+       0x01C3A800,
+       0xAA0D4000,
+       0x01C3A800,
+       0x00040100,
+       0x00000800,
+       0x00000000,
+       0x00001208,
+       0x00482000,
+       0x00008000,
+       0x00000000,
+       0x00410482,
+       0x0006A000,
+       0x0001B400,
+       0x00020000,
+       0x00000400,
+       0x00020080,
+       0x00000400,
+       0x5506A000,
+       0x00E1D400,
+       0x00000000,
+       0x0000090C,
+       0x00000010,
+       0x90400000,
+       0x00000000,
+       0x2020C243,
+       0x2A835000,
+       0x0070EA00,
+       0x2A835000,
+       0x0070EA00,
+       0x2A835000,
+       0x0070EA00,
+       0x00015000,
+       0x0000F200,
+       0x00000000,
+       0x00000482,
+       0x00120800,
+       0x00600391,
+       0x80000000,
+       0x00104120,
+       0x00000200,
+       0xAC0D5F80,
+       0xFFFFFFFF,
+       0x14F3690D,
+       0x1A041414,
+       0x00D00000,
+       0x18864000,
+       0x49247A06,
+       0xA3CF23DA,
+       0xF796591E,
+       0x0344E388,
+       0x821A028A,
+       0x0000D000,
+       0x00000680,
+       0xD271C47A,
+       0x1EA2CB23,
+       0x88F79A69,
+       0x000344E3,
+       0x00080200,
+       0x00001000,
+       0x00080200,
+       0x00001000,
+       0x000A8000,
+       0x00075000,
+       0x541A8000,
+       0x03875001,
+       0x10000000,
+       0x00000000,
+       0x0080C000,
+       0x41000000,
+       0x04000002,
+       0x00820000,
+       0xAA0D4000,
+       0x01C3A800,
+       0xAA0D4000,
+       0x01C3A800,
+       0xAA0D4000,
+       0x01C3A800,
+       0x00040100,
+       0x00000800,
+       0x00000000,
+       0x00001208,
+       0x00482000,
+       0x00008000,
+       0x00000000,
+       0x00410482,
+       0x0006A000,
+       0x0001B400,
+       0x00020000,
+       0x00000400,
+       0x0002A000,
+       0x0001E400,
+       0x5506A000,
+       0x00E1D400,
+       0x00000000,
+       0xC880090C,
+       0x00003001,
+       0x90400000,
+       0x00000000,
+       0x2020C243,
+       0x2A835000,
+       0x0070EA00,
+       0x2A835000,
+       0x0070EA00,
+       0x2A835000,
+       0x0070EA00,
+       0x00010040,
+       0x00000200,
+       0x00000000,
+       0x00000482,
+       0x00120800,
+       0x00002000,
+       0x80000000,
+       0x00104120,
+       0x00000200,
+       0xAC0D5F80,
+       0xFFFFFFFF,
+       0x14F3690D,
+       0x1A041414,
+       0x00D00000,
+       0x04864000,
+       0x69A47A01,
+       0x9228A3D6,
+       0xF456591E,
+       0x03549248,
+       0x821A0000,
+       0x0000D000,
+       0x00000680,
+       0xD669A47A,
+       0x1EE3CF23,
+       0x48F45659,
+       0x00035492,
+       0x00080200,
+       0x00001000,
+       0x00080200,
+       0x00001000,
+       0x000A8000,
+       0x00075000,
+       0x541A8000,
+       0x03875001,
+       0x10000000,
+       0x00000000,
+       0x0080C000,
+       0x41000000,
+       0x04000002,
+       0x00820000,
+       0xAA0D4000,
+       0x01C3A800,
+       0xAA0D4000,
+       0x01C3A800,
+       0xAA0D4000,
+       0x01C3A800,
+       0x00040100,
+       0x00000800,
+       0x00000000,
+       0x00001208,
+       0x00482000,
+       0x00008000,
+       0x00000000,
+       0x00410482,
+       0x0006A000,
+       0x0001B400,
+       0x00020000,
+       0x00000400,
+       0x00020080,
+       0x00000400,
+       0x5506A000,
+       0x00E1D400,
+       0x00000000,
+       0x0000090C,
+       0x00000010,
+       0x90400000,
+       0x00000000,
+       0x2020C243,
+       0x2A835000,
+       0x0070EA00,
+       0x2A835000,
+       0x0070EA00,
+       0x2A835000,
+       0x0070EA00,
+       0x00010040,
+       0x00000200,
+       0x00000000,
+       0x00000482,
+       0x00120800,
+       0x00400000,
+       0x80000000,
+       0x00104120,
+       0x00000200,
+       0xAC0D5F80,
+       0xFFFFFFFF,
+       0x14F1690D,
+       0x1A041414,
+       0x00D00000,
+       0x08864000,
+       0x71C47A02,
+       0xA2CB23D2,
+       0xF796591E,
+       0x0344A288,
+       0x821A0000,
+       0x0000D000,
+       0x00000680,
+       0xDA49247A,
+       0x1EE3CF23,
+       0x88F79659,
+       0x000344E3,
+       0x00080200,
+       0x00001000,
+       0x00080200,
+       0x00001000,
+       0x000A8000,
+       0x00075000,
+       0x541A8000,
+       0x03875001,
+       0x10000000,
+       0x00000000,
+       0x0080C000,
+       0x41000000,
+       0x04000002,
+       0x00820000,
+       0x00489800,
+       0x801A1A1A,
+       0x00000200,
+       0x80000004,
+       0x00000200,
+       0x80000004,
+       0x00000200,
+       0x80000004,
+       0x00000200,
+       0x00000004,
+       0x00040000,
+       0x10000000,
+       0x00000000,
+       0x00000040,
+       0x00010000,
+       0x40002000,
+       0x00000100,
+       0x40000002,
+       0x00000100,
+       0x40000002,
+       0x00000100,
+       0x40000002,
+       0x00000100,
+       0x00000002,
+       0x00020000,
+       0x08000000,
+       0x00000000,
+       0x00000020,
+       0x00008000,
+       0x20001000,
+       0x00000080,
+       0x20000001,
+       0x00000080,
+       0x20000001,
+       0x00000080,
+       0x20000001,
+       0x00000080,
+       0x00000001,
+       0x00010000,
+       0x04000000,
+       0x00FF0000,
+       0x00000000,
+       0x00004000,
+       0x00000800,
+       0xC0000001,
+       0x00041419,
+       0x40000000,
+       0x04000816,
+       0x000D0000,
+       0x00006800,
+       0x00000340,
+       0xD000001A,
+       0x06800000,
+       0x00340000,
+       0x0001A000,
+       0x00000D00,
+       0x40000068,
+       0x1A000003,
+       0x00D00000,
+       0x00068000,
+       0x00003400,
+       0x000001A0,
+       0x00000401,
+       0x00000008,
+       0x00000401,
+       0x00000008,
+       0x00000401,
+       0x00000008,
+       0x00000401,
+       0x80000008,
+       0x0000007F,
+       0x20000000,
+       0x00000000,
+       0xE0000080,
+       0x0000001F,
+       0x00004000,
+};
+
+
+#endif /* __SOCFPGA_IOCSR_CONFIG_H__ */
diff --git a/board/terasic/de1-soc/qts/pinmux_config.h b/board/terasic/de1-soc/qts/pinmux_config.h
new file mode 100644 (file)
index 0000000..9a83e85
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+ * Altera SoCFPGA PinMux configuration
+ *
+ * SPDX-License-Identifier:    BSD-3-Clause
+ */
+
+#ifndef __SOCFPGA_PINMUX_CONFIG_H__
+#define __SOCFPGA_PINMUX_CONFIG_H__
+
+const u8 sys_mgr_init_table[] = {
+       0, /* EMACIO0 */
+       2, /* EMACIO1 */
+       2, /* EMACIO2 */
+       2, /* EMACIO3 */
+       2, /* EMACIO4 */
+       2, /* EMACIO5 */
+       2, /* EMACIO6 */
+       2, /* EMACIO7 */
+       2, /* EMACIO8 */
+       0, /* EMACIO9 */
+       2, /* EMACIO10 */
+       2, /* EMACIO11 */
+       2, /* EMACIO12 */
+       2, /* EMACIO13 */
+       0, /* EMACIO14 */
+       0, /* EMACIO15 */
+       0, /* EMACIO16 */
+       0, /* EMACIO17 */
+       0, /* EMACIO18 */
+       0, /* EMACIO19 */
+       3, /* FLASHIO0 */
+       0, /* FLASHIO1 */
+       3, /* FLASHIO2 */
+       3, /* FLASHIO3 */
+       0, /* FLASHIO4 */
+       0, /* FLASHIO5 */
+       0, /* FLASHIO6 */
+       0, /* FLASHIO7 */
+       0, /* FLASHIO8 */
+       3, /* FLASHIO9 */
+       3, /* FLASHIO10 */
+       3, /* FLASHIO11 */
+       0, /* GENERALIO0 */
+       1, /* GENERALIO1 */
+       1, /* GENERALIO2 */
+       1, /* GENERALIO3 */
+       1, /* GENERALIO4 */
+       0, /* GENERALIO5 */
+       0, /* GENERALIO6 */
+       1, /* GENERALIO7 */
+       1, /* GENERALIO8 */
+       0, /* GENERALIO9 */
+       0, /* GENERALIO10 */
+       0, /* GENERALIO11 */
+       0, /* GENERALIO12 */
+       0, /* GENERALIO13 */
+       0, /* GENERALIO14 */
+       1, /* GENERALIO15 */
+       1, /* GENERALIO16 */
+       1, /* GENERALIO17 */
+       1, /* GENERALIO18 */
+       0, /* GENERALIO19 */
+       0, /* GENERALIO20 */
+       0, /* GENERALIO21 */
+       0, /* GENERALIO22 */
+       0, /* GENERALIO23 */
+       0, /* GENERALIO24 */
+       0, /* GENERALIO25 */
+       0, /* GENERALIO26 */
+       0, /* GENERALIO27 */
+       0, /* GENERALIO28 */
+       0, /* GENERALIO29 */
+       0, /* GENERALIO30 */
+       0, /* GENERALIO31 */
+       2, /* MIXED1IO0 */
+       2, /* MIXED1IO1 */
+       2, /* MIXED1IO2 */
+       2, /* MIXED1IO3 */
+       2, /* MIXED1IO4 */
+       2, /* MIXED1IO5 */
+       2, /* MIXED1IO6 */
+       2, /* MIXED1IO7 */
+       2, /* MIXED1IO8 */
+       2, /* MIXED1IO9 */
+       2, /* MIXED1IO10 */
+       2, /* MIXED1IO11 */
+       2, /* MIXED1IO12 */
+       2, /* MIXED1IO13 */
+       0, /* MIXED1IO14 */
+       3, /* MIXED1IO15 */
+       3, /* MIXED1IO16 */
+       3, /* MIXED1IO17 */
+       3, /* MIXED1IO18 */
+       3, /* MIXED1IO19 */
+       3, /* MIXED1IO20 */
+       0, /* MIXED1IO21 */
+       0, /* MIXED2IO0 */
+       0, /* MIXED2IO1 */
+       0, /* MIXED2IO2 */
+       0, /* MIXED2IO3 */
+       0, /* MIXED2IO4 */
+       0, /* MIXED2IO5 */
+       0, /* MIXED2IO6 */
+       0, /* MIXED2IO7 */
+       0, /* GPLINMUX48 */
+       0, /* GPLINMUX49 */
+       0, /* GPLINMUX50 */
+       0, /* GPLINMUX51 */
+       0, /* GPLINMUX52 */
+       0, /* GPLINMUX53 */
+       0, /* GPLINMUX54 */
+       0, /* GPLINMUX55 */
+       0, /* GPLINMUX56 */
+       0, /* GPLINMUX57 */
+       0, /* GPLINMUX58 */
+       0, /* GPLINMUX59 */
+       0, /* GPLINMUX60 */
+       0, /* GPLINMUX61 */
+       0, /* GPLINMUX62 */
+       0, /* GPLINMUX63 */
+       0, /* GPLINMUX64 */
+       0, /* GPLINMUX65 */
+       0, /* GPLINMUX66 */
+       0, /* GPLINMUX67 */
+       0, /* GPLINMUX68 */
+       0, /* GPLINMUX69 */
+       0, /* GPLINMUX70 */
+       1, /* GPLMUX0 */
+       1, /* GPLMUX1 */
+       1, /* GPLMUX2 */
+       1, /* GPLMUX3 */
+       1, /* GPLMUX4 */
+       1, /* GPLMUX5 */
+       1, /* GPLMUX6 */
+       1, /* GPLMUX7 */
+       1, /* GPLMUX8 */
+       1, /* GPLMUX9 */
+       1, /* GPLMUX10 */
+       1, /* GPLMUX11 */
+       1, /* GPLMUX12 */
+       1, /* GPLMUX13 */
+       1, /* GPLMUX14 */
+       1, /* GPLMUX15 */
+       1, /* GPLMUX16 */
+       1, /* GPLMUX17 */
+       1, /* GPLMUX18 */
+       1, /* GPLMUX19 */
+       1, /* GPLMUX20 */
+       1, /* GPLMUX21 */
+       1, /* GPLMUX22 */
+       1, /* GPLMUX23 */
+       1, /* GPLMUX24 */
+       1, /* GPLMUX25 */
+       1, /* GPLMUX26 */
+       1, /* GPLMUX27 */
+       1, /* GPLMUX28 */
+       1, /* GPLMUX29 */
+       1, /* GPLMUX30 */
+       1, /* GPLMUX31 */
+       1, /* GPLMUX32 */
+       1, /* GPLMUX33 */
+       1, /* GPLMUX34 */
+       1, /* GPLMUX35 */
+       1, /* GPLMUX36 */
+       1, /* GPLMUX37 */
+       1, /* GPLMUX38 */
+       1, /* GPLMUX39 */
+       1, /* GPLMUX40 */
+       1, /* GPLMUX41 */
+       1, /* GPLMUX42 */
+       1, /* GPLMUX43 */
+       1, /* GPLMUX44 */
+       1, /* GPLMUX45 */
+       1, /* GPLMUX46 */
+       1, /* GPLMUX47 */
+       1, /* GPLMUX48 */
+       1, /* GPLMUX49 */
+       1, /* GPLMUX50 */
+       1, /* GPLMUX51 */
+       1, /* GPLMUX52 */
+       1, /* GPLMUX53 */
+       1, /* GPLMUX54 */
+       1, /* GPLMUX55 */
+       1, /* GPLMUX56 */
+       1, /* GPLMUX57 */
+       1, /* GPLMUX58 */
+       1, /* GPLMUX59 */
+       1, /* GPLMUX60 */
+       1, /* GPLMUX61 */
+       1, /* GPLMUX62 */
+       1, /* GPLMUX63 */
+       1, /* GPLMUX64 */
+       1, /* GPLMUX65 */
+       1, /* GPLMUX66 */
+       1, /* GPLMUX67 */
+       1, /* GPLMUX68 */
+       1, /* GPLMUX69 */
+       1, /* GPLMUX70 */
+       0, /* NANDUSEFPGA */
+       0, /* UART0USEFPGA */
+       0, /* RGMII1USEFPGA */
+       0, /* SPIS0USEFPGA */
+       0, /* CAN0USEFPGA */
+       0, /* I2C0USEFPGA */
+       0, /* SDMMCUSEFPGA */
+       0, /* QSPIUSEFPGA */
+       0, /* SPIS1USEFPGA */
+       0, /* RGMII0USEFPGA */
+       0, /* UART1USEFPGA */
+       0, /* CAN1USEFPGA */
+       0, /* USB1USEFPGA */
+       0, /* I2C3USEFPGA */
+       0, /* I2C2USEFPGA */
+       0, /* I2C1USEFPGA */
+       0, /* SPIM1USEFPGA */
+       0, /* USB0USEFPGA */
+       0 /* SPIM0USEFPGA */
+};
+#endif /* __SOCFPGA_PINMUX_CONFIG_H__ */
diff --git a/board/terasic/de1-soc/qts/pll_config.h b/board/terasic/de1-soc/qts/pll_config.h
new file mode 100644 (file)
index 0000000..543b8ea
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Altera SoCFPGA Clock and PLL configuration
+ *
+ * SPDX-License-Identifier:    BSD-3-Clause
+ */
+
+#ifndef __SOCFPGA_PLL_CONFIG_H__
+#define __SOCFPGA_PLL_CONFIG_H__
+
+#define CONFIG_HPS_DBCTRL_STAYOSC1 1
+
+#define CONFIG_HPS_MAINPLLGRP_VCO_DENOM 0
+#define CONFIG_HPS_MAINPLLGRP_VCO_NUMER 63
+#define CONFIG_HPS_MAINPLLGRP_MPUCLK_CNT 0
+#define CONFIG_HPS_MAINPLLGRP_MAINCLK_CNT 0
+#define CONFIG_HPS_MAINPLLGRP_DBGATCLK_CNT 0
+#define CONFIG_HPS_MAINPLLGRP_MAINQSPICLK_CNT 3
+#define CONFIG_HPS_MAINPLLGRP_MAINNANDSDMMCCLK_CNT 511
+#define CONFIG_HPS_MAINPLLGRP_CFGS2FUSER0CLK_CNT 15
+#define CONFIG_HPS_MAINPLLGRP_MAINDIV_L3MPCLK 1
+#define CONFIG_HPS_MAINPLLGRP_MAINDIV_L3SPCLK 1
+#define CONFIG_HPS_MAINPLLGRP_MAINDIV_L4MPCLK 1
+#define CONFIG_HPS_MAINPLLGRP_MAINDIV_L4SPCLK 1
+#define CONFIG_HPS_MAINPLLGRP_DBGDIV_DBGATCLK 0
+#define CONFIG_HPS_MAINPLLGRP_DBGDIV_DBGCLK 1
+#define CONFIG_HPS_MAINPLLGRP_TRACEDIV_TRACECLK 0
+#define CONFIG_HPS_MAINPLLGRP_L4SRC_L4MP 1
+#define CONFIG_HPS_MAINPLLGRP_L4SRC_L4SP 1
+
+#define CONFIG_HPS_PERPLLGRP_VCO_DENOM 0
+#define CONFIG_HPS_PERPLLGRP_VCO_NUMER 39
+#define CONFIG_HPS_PERPLLGRP_VCO_PSRC 0
+#define CONFIG_HPS_PERPLLGRP_EMAC0CLK_CNT 511
+#define CONFIG_HPS_PERPLLGRP_EMAC1CLK_CNT 3
+#define CONFIG_HPS_PERPLLGRP_PERQSPICLK_CNT 511
+#define CONFIG_HPS_PERPLLGRP_PERNANDSDMMCCLK_CNT 4
+#define CONFIG_HPS_PERPLLGRP_PERBASECLK_CNT 4
+#define CONFIG_HPS_PERPLLGRP_S2FUSER1CLK_CNT 511
+#define CONFIG_HPS_PERPLLGRP_DIV_USBCLK 0
+#define CONFIG_HPS_PERPLLGRP_DIV_SPIMCLK 0
+#define CONFIG_HPS_PERPLLGRP_DIV_CAN0CLK 4
+#define CONFIG_HPS_PERPLLGRP_DIV_CAN1CLK 4
+#define CONFIG_HPS_PERPLLGRP_GPIODIV_GPIODBCLK 6249
+#define CONFIG_HPS_PERPLLGRP_SRC_SDMMC 2
+#define CONFIG_HPS_PERPLLGRP_SRC_NAND 2
+#define CONFIG_HPS_PERPLLGRP_SRC_QSPI 1
+
+#define CONFIG_HPS_SDRPLLGRP_VCO_DENOM 0
+#define CONFIG_HPS_SDRPLLGRP_VCO_NUMER 31
+#define CONFIG_HPS_SDRPLLGRP_VCO_SSRC 0
+#define CONFIG_HPS_SDRPLLGRP_DDRDQSCLK_CNT 1
+#define CONFIG_HPS_SDRPLLGRP_DDRDQSCLK_PHASE 0
+#define CONFIG_HPS_SDRPLLGRP_DDR2XDQSCLK_CNT 0
+#define CONFIG_HPS_SDRPLLGRP_DDR2XDQSCLK_PHASE 0
+#define CONFIG_HPS_SDRPLLGRP_DDRDQCLK_CNT 1
+#define CONFIG_HPS_SDRPLLGRP_DDRDQCLK_PHASE 4
+#define CONFIG_HPS_SDRPLLGRP_S2FUSER2CLK_CNT 5
+#define CONFIG_HPS_SDRPLLGRP_S2FUSER2CLK_PHASE 0
+
+#define CONFIG_HPS_CLK_OSC1_HZ 25000000
+#define CONFIG_HPS_CLK_OSC2_HZ 25000000
+#define CONFIG_HPS_CLK_F2S_SDR_REF_HZ 0
+#define CONFIG_HPS_CLK_F2S_PER_REF_HZ 0
+#define CONFIG_HPS_CLK_MAINVCO_HZ 1600000000
+#define CONFIG_HPS_CLK_PERVCO_HZ 1000000000
+#define CONFIG_HPS_CLK_SDRVCO_HZ 800000000
+#define CONFIG_HPS_CLK_OSC1_HZ 25000000
+#define CONFIG_HPS_CLK_OSC2_HZ 25000000
+#define CONFIG_HPS_CLK_F2S_SDR_REF_HZ 0
+#define CONFIG_HPS_CLK_F2S_PER_REF_HZ 0
+#define CONFIG_HPS_CLK_MAINVCO_HZ 1600000000
+#define CONFIG_HPS_CLK_PERVCO_HZ 1000000000
+#define CONFIG_HPS_CLK_EMAC0_HZ 1953125
+#define CONFIG_HPS_CLK_EMAC1_HZ 250000000
+#define CONFIG_HPS_CLK_USBCLK_HZ 200000000
+#define CONFIG_HPS_CLK_NAND_HZ 50000000
+#define CONFIG_HPS_CLK_SDMMC_HZ 200000000
+#define CONFIG_HPS_CLK_QSPI_HZ 400000000
+#define CONFIG_HPS_CLK_SPIM_HZ 200000000
+#define CONFIG_HPS_CLK_CAN0_HZ 12500000
+#define CONFIG_HPS_CLK_CAN1_HZ 12500000
+#define CONFIG_HPS_CLK_GPIODB_HZ 32000
+#define CONFIG_HPS_CLK_L4_MP_HZ 100000000
+#define CONFIG_HPS_CLK_L4_SP_HZ 100000000
+
+#define CONFIG_HPS_ALTERAGRP_MPUCLK 1
+#define CONFIG_HPS_ALTERAGRP_MAINCLK 3
+#define CONFIG_HPS_ALTERAGRP_DBGATCLK 3
+
+
+#endif /* __SOCFPGA_PLL_CONFIG_H__ */
diff --git a/board/terasic/de1-soc/qts/sdram_config.h b/board/terasic/de1-soc/qts/sdram_config.h
new file mode 100644 (file)
index 0000000..171a1ad
--- /dev/null
@@ -0,0 +1,344 @@
+/*
+ * Altera SoCFPGA SDRAM configuration
+ *
+ * SPDX-License-Identifier:    BSD-3-Clause
+ */
+
+#ifndef __SOCFPGA_SDRAM_CONFIG_H__
+#define __SOCFPGA_SDRAM_CONFIG_H__
+
+/* SDRAM configuration */
+#define CONFIG_HPS_SDR_CTRLCFG_CPORTRDWR_CPORTRDWR             0x5A56A
+#define CONFIG_HPS_SDR_CTRLCFG_CPORTRMAP_CPORTRMAP             0xB00088
+#define CONFIG_HPS_SDR_CTRLCFG_CPORTWIDTH_CPORTWIDTH           0x44555
+#define CONFIG_HPS_SDR_CTRLCFG_CPORTWMAP_CPORTWMAP             0x2C011000
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_ADDRORDER               0
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_DQSTRKEN                        0
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_ECCCORREN               0
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_ECCEN                   0
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_MEMBL                   8
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_MEMTYPE                 2
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_NODMPINS                        0
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_REORDEREN               1
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLCFG_STARVELIMIT             10
+#define CONFIG_HPS_SDR_CTRLCFG_CTRLWIDTH_CTRLWIDTH             2
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMADDRW_BANKBITS              3
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMADDRW_COLBITS               10
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMADDRW_CSBITS                        1
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMADDRW_ROWBITS               15
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMDEVWIDTH_DEVWIDTH           8
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMIFWIDTH_IFWIDTH             32
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMINTR_INTREN                 0
+#define CONFIG_HPS_SDR_CTRLCFG_EXTRATIME1_CFG_EXTRA_CTL_CLK_RD_TO_WR 0
+#define CONFIG_HPS_SDR_CTRLCFG_EXTRATIME1_CFG_EXTRA_CTL_CLK_RD_TO_WR_BC 0
+#define CONFIG_HPS_SDR_CTRLCFG_EXTRATIME1_CFG_EXTRA_CTL_CLK_RD_TO_WR_DIFF_CHIP 0
+#define CONFIG_HPS_SDR_CTRLCFG_LOWPWREQ_SELFRFSHMASK           3
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMODT_READ                    0
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMODT_WRITE                   1
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING1_AL                  0
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING1_TCL                 7
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING1_TCWL                        7
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING1_TFAW                        18
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING1_TRFC                        120
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING1_TRRD                        3
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING2_IF_TRCD             6
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING2_IF_TREFI            3120
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING2_IF_TRP              6
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING2_IF_TWR              6
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING2_IF_TWTR             4
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING3_TCCD                        4
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING3_TMRD                        4
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING3_TRAS                        15
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING3_TRC                 20
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING3_TRTP                        3
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING4_PWRDOWNEXIT         3
+#define CONFIG_HPS_SDR_CTRLCFG_DRAMTIMING4_SELFRFSHEXIT                200
+#define CONFIG_HPS_SDR_CTRLCFG_FIFOCFG_INCSYNC                 0
+#define CONFIG_HPS_SDR_CTRLCFG_FIFOCFG_SYNCMODE                        0
+#define CONFIG_HPS_SDR_CTRLCFG_FPGAPORTRST                     0x0
+#define CONFIG_HPS_SDR_CTRLCFG_LOWPWRTIMING_AUTOPDCYCLES       0
+#define CONFIG_HPS_SDR_CTRLCFG_LOWPWRTIMING_CLKDISABLECYCLES   8
+#define CONFIG_HPS_SDR_CTRLCFG_MPPACING_0_THRESHOLD1_31_0      0x20820820
+#define CONFIG_HPS_SDR_CTRLCFG_MPPACING_1_THRESHOLD1_59_32     0x8208208
+#define CONFIG_HPS_SDR_CTRLCFG_MPPACING_1_THRESHOLD2_3_0       0
+#define CONFIG_HPS_SDR_CTRLCFG_MPPACING_2_THRESHOLD2_35_4      0x41041041
+#define CONFIG_HPS_SDR_CTRLCFG_MPPACING_3_THRESHOLD2_59_36     0x410410
+#define CONFIG_HPS_SDR_CTRLCFG_MPPRIORITY_USERPRIORITY         0x3FFD1088
+#define CONFIG_HPS_SDR_CTRLCFG_MPTHRESHOLDRST_0_THRESHOLDRSTCYCLES_31_0 0x01010101
+#define CONFIG_HPS_SDR_CTRLCFG_MPTHRESHOLDRST_1_THRESHOLDRSTCYCLES_63_32 0x01010101
+#define CONFIG_HPS_SDR_CTRLCFG_MPTHRESHOLDRST_2_THRESHOLDRSTCYCLES_79_64 0x0101
+#define CONFIG_HPS_SDR_CTRLCFG_MPWIEIGHT_0_STATICWEIGHT_31_0   0x21084210
+#define CONFIG_HPS_SDR_CTRLCFG_MPWIEIGHT_1_STATICWEIGHT_49_32  0x1EF84
+#define CONFIG_HPS_SDR_CTRLCFG_MPWIEIGHT_1_SUMOFWEIGHT_13_0    0x2020
+#define CONFIG_HPS_SDR_CTRLCFG_MPWIEIGHT_2_SUMOFWEIGHT_45_14   0x0
+#define CONFIG_HPS_SDR_CTRLCFG_MPWIEIGHT_3_SUMOFWEIGHT_63_46   0xF800
+#define CONFIG_HPS_SDR_CTRLCFG_PHYCTRL_PHYCTRL_0               0x200
+#define CONFIG_HPS_SDR_CTRLCFG_PORTCFG_AUTOPCHEN               0
+#define CONFIG_HPS_SDR_CTRLCFG_RFIFOCMAP_RFIFOCMAP             0x760210
+#define CONFIG_HPS_SDR_CTRLCFG_STATICCFG_MEMBL                 2
+#define CONFIG_HPS_SDR_CTRLCFG_STATICCFG_USEECCASDATA          0
+#define CONFIG_HPS_SDR_CTRLCFG_WFIFOCMAP_WFIFOCMAP             0x980543
+
+/* Sequencer auto configuration */
+#define RW_MGR_ACTIVATE_0_AND_1        0x0D
+#define RW_MGR_ACTIVATE_0_AND_1_WAIT1  0x0E
+#define RW_MGR_ACTIVATE_0_AND_1_WAIT2  0x10
+#define RW_MGR_ACTIVATE_1      0x0F
+#define RW_MGR_CLEAR_DQS_ENABLE        0x49
+#define RW_MGR_GUARANTEED_READ 0x4C
+#define RW_MGR_GUARANTEED_READ_CONT    0x54
+#define RW_MGR_GUARANTEED_WRITE        0x18
+#define RW_MGR_GUARANTEED_WRITE_WAIT0  0x1B
+#define RW_MGR_GUARANTEED_WRITE_WAIT1  0x1F
+#define RW_MGR_GUARANTEED_WRITE_WAIT2  0x19
+#define RW_MGR_GUARANTEED_WRITE_WAIT3  0x1D
+#define RW_MGR_IDLE    0x00
+#define RW_MGR_IDLE_LOOP1      0x7B
+#define RW_MGR_IDLE_LOOP2      0x7A
+#define RW_MGR_INIT_RESET_0_CKE_0      0x6F
+#define RW_MGR_INIT_RESET_1_CKE_0      0x74
+#define RW_MGR_LFSR_WR_RD_BANK_0       0x22
+#define RW_MGR_LFSR_WR_RD_BANK_0_DATA  0x25
+#define RW_MGR_LFSR_WR_RD_BANK_0_DQS   0x24
+#define RW_MGR_LFSR_WR_RD_BANK_0_NOP   0x23
+#define RW_MGR_LFSR_WR_RD_BANK_0_WAIT  0x32
+#define RW_MGR_LFSR_WR_RD_BANK_0_WL_1  0x21
+#define RW_MGR_LFSR_WR_RD_DM_BANK_0    0x36
+#define RW_MGR_LFSR_WR_RD_DM_BANK_0_DATA       0x39
+#define RW_MGR_LFSR_WR_RD_DM_BANK_0_DQS        0x38
+#define RW_MGR_LFSR_WR_RD_DM_BANK_0_NOP        0x37
+#define RW_MGR_LFSR_WR_RD_DM_BANK_0_WAIT       0x46
+#define RW_MGR_LFSR_WR_RD_DM_BANK_0_WL_1       0x35
+#define RW_MGR_MRS0_DLL_RESET  0x02
+#define RW_MGR_MRS0_DLL_RESET_MIRR     0x08
+#define RW_MGR_MRS0_USER       0x07
+#define RW_MGR_MRS0_USER_MIRR  0x0C
+#define RW_MGR_MRS1    0x03
+#define RW_MGR_MRS1_MIRR       0x09
+#define RW_MGR_MRS2    0x04
+#define RW_MGR_MRS2_MIRR       0x0A
+#define RW_MGR_MRS3    0x05
+#define RW_MGR_MRS3_MIRR       0x0B
+#define RW_MGR_PRECHARGE_ALL   0x12
+#define RW_MGR_READ_B2B        0x59
+#define RW_MGR_READ_B2B_WAIT1  0x61
+#define RW_MGR_READ_B2B_WAIT2  0x6B
+#define RW_MGR_REFRESH_ALL     0x14
+#define RW_MGR_RETURN  0x01
+#define RW_MGR_SGLE_READ       0x7D
+#define RW_MGR_ZQCL    0x06
+
+/* Sequencer defines configuration */
+#define AFI_RATE_RATIO 1
+#define CALIB_LFIFO_OFFSET     8
+#define CALIB_VFIFO_OFFSET     6
+#define ENABLE_SUPER_QUICK_CALIBRATION 0
+#define IO_DELAY_PER_DCHAIN_TAP        25
+#define IO_DELAY_PER_DQS_EN_DCHAIN_TAP 25
+#define IO_DELAY_PER_OPA_TAP   312
+#define IO_DLL_CHAIN_LENGTH    8
+#define IO_DQDQS_OUT_PHASE_MAX 0
+#define IO_DQS_EN_DELAY_MAX    31
+#define IO_DQS_EN_DELAY_OFFSET 0
+#define IO_DQS_EN_PHASE_MAX    7
+#define IO_DQS_IN_DELAY_MAX    31
+#define IO_DQS_IN_RESERVE      4
+#define IO_DQS_OUT_RESERVE     4
+#define IO_IO_IN_DELAY_MAX     31
+#define IO_IO_OUT1_DELAY_MAX   31
+#define IO_IO_OUT2_DELAY_MAX   0
+#define IO_SHIFT_DQS_EN_WHEN_SHIFT_DQS 0
+#define MAX_LATENCY_COUNT_WIDTH        5
+#define READ_VALID_FIFO_SIZE   16
+#define REG_FILE_INIT_SEQ_SIGNATURE    0x5555048d
+#define RW_MGR_MEM_ADDRESS_MIRRORING   0
+#define RW_MGR_MEM_DATA_MASK_WIDTH     4
+#define RW_MGR_MEM_DATA_WIDTH  32
+#define RW_MGR_MEM_DQ_PER_READ_DQS     8
+#define RW_MGR_MEM_DQ_PER_WRITE_DQS    8
+#define RW_MGR_MEM_IF_READ_DQS_WIDTH   4
+#define RW_MGR_MEM_IF_WRITE_DQS_WIDTH  4
+#define RW_MGR_MEM_NUMBER_OF_CS_PER_DIMM       1
+#define RW_MGR_MEM_NUMBER_OF_RANKS     1
+#define RW_MGR_MEM_VIRTUAL_GROUPS_PER_READ_DQS 1
+#define RW_MGR_MEM_VIRTUAL_GROUPS_PER_WRITE_DQS        1
+#define RW_MGR_TRUE_MEM_DATA_MASK_WIDTH        4
+#define TINIT_CNTR0_VAL        99
+#define TINIT_CNTR1_VAL        32
+#define TINIT_CNTR2_VAL        32
+#define TRESET_CNTR0_VAL       99
+#define TRESET_CNTR1_VAL       99
+#define TRESET_CNTR2_VAL       10
+
+/* Sequencer ac_rom_init configuration */
+const u32 ac_rom_init[] = {
+       0x20700000,
+       0x20780000,
+       0x10080431,
+       0x10080530,
+       0x10090044,
+       0x100a0010,
+       0x100b0000,
+       0x10380400,
+       0x10080449,
+       0x100804c8,
+       0x100a0024,
+       0x10090008,
+       0x100b0000,
+       0x30780000,
+       0x38780000,
+       0x30780000,
+       0x10680000,
+       0x106b0000,
+       0x10280400,
+       0x10480000,
+       0x1c980000,
+       0x1c9b0000,
+       0x1c980008,
+       0x1c9b0008,
+       0x38f80000,
+       0x3cf80000,
+       0x38780000,
+       0x18180000,
+       0x18980000,
+       0x13580000,
+       0x135b0000,
+       0x13580008,
+       0x135b0008,
+       0x33780000,
+       0x10580008,
+       0x10780000
+};
+
+/* Sequencer inst_rom_init configuration */
+const u32 inst_rom_init[] = {
+       0x80000,
+       0x80680,
+       0x8180,
+       0x8200,
+       0x8280,
+       0x8300,
+       0x8380,
+       0x8100,
+       0x8480,
+       0x8500,
+       0x8580,
+       0x8600,
+       0x8400,
+       0x800,
+       0x8680,
+       0x880,
+       0xa680,
+       0x80680,
+       0x900,
+       0x80680,
+       0x980,
+       0xa680,
+       0x8680,
+       0x80680,
+       0xb68,
+       0xcce8,
+       0xae8,
+       0x8ce8,
+       0xb88,
+       0xec88,
+       0xa08,
+       0xac88,
+       0x80680,
+       0xce00,
+       0xcd80,
+       0xe700,
+       0xc00,
+       0x20ce0,
+       0x20ce0,
+       0x20ce0,
+       0x20ce0,
+       0xd00,
+       0x680,
+       0x680,
+       0x680,
+       0x680,
+       0x60e80,
+       0x61080,
+       0x61080,
+       0x61080,
+       0xa680,
+       0x8680,
+       0x80680,
+       0xce00,
+       0xcd80,
+       0xe700,
+       0xc00,
+       0x30ce0,
+       0x30ce0,
+       0x30ce0,
+       0x30ce0,
+       0xd00,
+       0x680,
+       0x680,
+       0x680,
+       0x680,
+       0x70e80,
+       0x71080,
+       0x71080,
+       0x71080,
+       0xa680,
+       0x8680,
+       0x80680,
+       0x1158,
+       0x6d8,
+       0x80680,
+       0x1168,
+       0x7e8,
+       0x7e8,
+       0x87e8,
+       0x40fe8,
+       0x410e8,
+       0x410e8,
+       0x410e8,
+       0x1168,
+       0x7e8,
+       0x7e8,
+       0xa7e8,
+       0x80680,
+       0x40e88,
+       0x41088,
+       0x41088,
+       0x41088,
+       0x40f68,
+       0x410e8,
+       0x410e8,
+       0x410e8,
+       0xa680,
+       0x40fe8,
+       0x410e8,
+       0x410e8,
+       0x410e8,
+       0x41008,
+       0x41088,
+       0x41088,
+       0x41088,
+       0x1100,
+       0xc680,
+       0x8680,
+       0xe680,
+       0x80680,
+       0x0,
+       0x8000,
+       0xa000,
+       0xc000,
+       0x80000,
+       0x80,
+       0x8080,
+       0xa080,
+       0xc080,
+       0x80080,
+       0x9180,
+       0x8680,
+       0xa680,
+       0x80680,
+       0x40f08,
+       0x80680
+};
+
+#endif /* __SOCFPGA_SDRAM_CONFIG_H__ */
diff --git a/board/terasic/de1-soc/socfpga.c b/board/terasic/de1-soc/socfpga.c
new file mode 100644 (file)
index 0000000..0d29e44
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ *  Copyright (C) 2012 Altera Corporation <www.altera.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+#include <common.h>
+#include <spl.h>
+
+void board_boot_order(u32 *spl_boot_list)
+{
+       spl_boot_list[0] = spl_boot_device();
+
+       switch (spl_boot_list[0]) {
+       case BOOT_DEVICE_MMC1:
+               spl_boot_list[0] = BOOT_DEVICE_MMC1;
+               spl_boot_list[1] = BOOT_DEVICE_UART;
+               break;
+       }
+}
index 111ed3556cc3c603107e796209c23ea7399b3873..8eaf3e9a5c95023246387bc8fb1b9f615a839088 100644 (file)
@@ -109,6 +109,16 @@ static const struct emif_regs ddr2_emif_reg_data = {
        .emif_ddr_phy_ctlr_1 = MT47H128M16RT25E_EMIF_READ_LATENCY,
 };
 
+static const struct emif_regs ddr2_evm_emif_reg_data = {
+       .sdram_config = MT47H128M16RT25E_EMIF_SDCFG,
+       .ref_ctrl = MT47H128M16RT25E_EMIF_SDREF,
+       .sdram_tim1 = MT47H128M16RT25E_EMIF_TIM1,
+       .sdram_tim2 = MT47H128M16RT25E_EMIF_TIM2,
+       .sdram_tim3 = MT47H128M16RT25E_EMIF_TIM3,
+       .ocp_config = EMIF_OCP_CONFIG_AM335X_EVM,
+       .emif_ddr_phy_ctlr_1 = MT47H128M16RT25E_EMIF_READ_LATENCY,
+};
+
 static const struct ddr_data ddr3_data = {
        .datardsratio0 = MT41J128MJT125_RD_DQS,
        .datawdsratio0 = MT41J128MJT125_WR_DQS,
@@ -198,6 +208,7 @@ static struct emif_regs ddr3_beagleblack_emif_reg_data = {
        .sdram_tim1 = MT41K256M16HA125E_EMIF_TIM1,
        .sdram_tim2 = MT41K256M16HA125E_EMIF_TIM2,
        .sdram_tim3 = MT41K256M16HA125E_EMIF_TIM3,
+       .ocp_config = EMIF_OCP_CONFIG_BEAGLEBONE_BLACK,
        .zq_config = MT41K256M16HA125E_ZQ_CFG,
        .emif_ddr_phy_ctlr_1 = MT41K256M16HA125E_EMIF_READ_LATENCY,
 };
@@ -208,6 +219,7 @@ static struct emif_regs ddr3_evm_emif_reg_data = {
        .sdram_tim1 = MT41J512M8RH125_EMIF_TIM1,
        .sdram_tim2 = MT41J512M8RH125_EMIF_TIM2,
        .sdram_tim3 = MT41J512M8RH125_EMIF_TIM3,
+       .ocp_config = EMIF_OCP_CONFIG_AM335X_EVM,
        .zq_config = MT41J512M8RH125_ZQ_CFG,
        .emif_ddr_phy_ctlr_1 = MT41J512M8RH125_EMIF_READ_LATENCY |
                                PHY_EN_DYN_PWRDN,
@@ -486,6 +498,9 @@ void sdram_init(void)
                config_ddr(400, &ioregs_evmsk, &ddr3_icev2_data,
                           &ddr3_icev2_cmd_ctrl_data, &ddr3_icev2_emif_reg_data,
                           0);
+       else if (board_is_gp_evm())
+               config_ddr(266, &ioregs, &ddr2_data,
+                          &ddr2_cmd_ctrl_data, &ddr2_evm_emif_reg_data, 0);
        else
                config_ddr(266, &ioregs, &ddr2_data,
                           &ddr2_cmd_ctrl_data, &ddr2_emif_reg_data, 0);
index 9776df79592825fdfec53caa42f1dfd16e317f58..48c139a817d52cca651bdf6720426c2f94af48dd 100644 (file)
 #ifndef _BOARD_H_
 #define _BOARD_H_
 
+/**
+ * AM335X (EMIF_4D) EMIF REG_COS_COUNT_1, REG_COS_COUNT_2, and
+ * REG_PR_OLD_COUNT values to avoid LCDC DMA FIFO underflows and Frame
+ * Synchronization Lost errors. The values are the biggest that work
+ * reliably with offered video modes and the memory subsystem on the
+ * boards. These register have are briefly documented in "7.3.3.5.2
+ * Command Starvation" section of AM335x TRM. The REG_COS_COUNT_1 and
+ * REG_COS_COUNT_2 do not have any effect on current versions of
+ * AM335x.
+ */
+#define EMIF_OCP_CONFIG_BEAGLEBONE_BLACK       0x00141414
+#define EMIF_OCP_CONFIG_AM335X_EVM             0x003d3d3d
+
 static inline int board_is_bone(void)
 {
        return board_ti_is("A335BONE");
index 797d7a4c0c200f571b25af5a44f4406672fbd8ab..5f2d4dfab8c5aa103743f10a5d4d03f1fad9cc5d 100644 (file)
@@ -55,6 +55,9 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define SYSINFO_BOARD_NAME_MAX_LEN     45
 
+#define TPS65903X_PRIMARY_SECONDARY_PAD2       0xFB
+#define TPS65903X_PAD2_POWERHOLD_MASK          0x20
+
 const struct omap_sysinfo sysinfo = {
        "Board: UNKNOWN(BeagleBoard X15?) REV UNKNOWN\n"
 };
@@ -457,6 +460,7 @@ int board_init(void)
 int board_late_init(void)
 {
        setup_board_eeprom_env();
+       u8 val;
 
        /*
         * DEV_CTRL.DEV_ON = 1 please - else palmas switches off in 8 seconds
@@ -471,6 +475,18 @@ int board_late_init(void)
        if (get_device_type() == HS_DEVICE)
                setenv("boot_fit", "1");
 
+       /*
+        * Set the GPIO7 Pad to POWERHOLD. This has higher priority
+        * over DEV_CTRL.DEV_ON bit. This can be reset in case of
+        * PMIC Power off. So to be on the safer side set it back
+        * to POWERHOLD mode irrespective of the current state.
+        */
+       palmas_i2c_read_u8(TPS65903X_CHIP_P1, TPS65903X_PRIMARY_SECONDARY_PAD2,
+                          &val);
+       val = val | TPS65903X_PAD2_POWERHOLD_MASK;
+       palmas_i2c_write_u8(TPS65903X_CHIP_P1, TPS65903X_PRIMARY_SECONDARY_PAD2,
+                           val);
+
        return 0;
 }
 
index 6e7ca9196d22dde2a641b75d37e25002437575a8..a5dba94e5e01138036ec2745180235764f244701 100644 (file)
@@ -123,8 +123,10 @@ int __maybe_unused ti_i2c_eeprom_am_get(int bus_addr, int dev_addr)
        struct ti_common_eeprom *ep;
 
        ep = TI_EEPROM_DATA;
+#ifndef CONFIG_SPL_BUILD
        if (ep->header == TI_EEPROM_HEADER_MAGIC)
-               goto already_read;
+               return 0; /* EEPROM has already been read */
+#endif
 
        /* Initialize with a known bad marker for i2c fails.. */
        ep->header = TI_DEAD_EEPROM_MAGIC;
@@ -157,7 +159,6 @@ int __maybe_unused ti_i2c_eeprom_am_get(int bus_addr, int dev_addr)
        memcpy(ep->mac_addr, am_ep.mac_addr,
               TI_EEPROM_HDR_NO_OF_MAC_ADDR * TI_EEPROM_HDR_ETH_ALEN);
 
-already_read:
        return 0;
 }
 
@@ -168,8 +169,10 @@ int __maybe_unused ti_i2c_eeprom_dra7_get(int bus_addr, int dev_addr)
        struct ti_common_eeprom *ep;
 
        ep = TI_EEPROM_DATA;
+#ifndef CONFIG_SPL_BUILD
        if (ep->header == DRA7_EEPROM_HEADER_MAGIC)
-               goto already_read;
+               return 0; /* EEPROM has already been read */
+#endif
 
        /* Initialize with a known bad marker for i2c fails.. */
        ep->header = TI_DEAD_EEPROM_MAGIC;
@@ -202,7 +205,6 @@ int __maybe_unused ti_i2c_eeprom_dra7_get(int bus_addr, int dev_addr)
        strlcpy(ep->config, dra7_ep.config, TI_EEPROM_HDR_CONFIG_LEN + 1);
        ti_eeprom_string_cleanup(ep->config);
 
-already_read:
        return 0;
 }
 
index 27056e195a9b768b92d0d3cbed2bd7b30b0fd7a8..d3b1f1564f3cd75344eeccb1aee3fd3c23d013c8 100644 (file)
@@ -39,6 +39,7 @@ DECLARE_GLOBAL_DATA_PTR;
 /* GPIO that controls power to DDR on EVM-SK */
 #define GPIO_DDR_VTT_EN                7
 #define DIP_S1                 44
+#define MPCIE_SW               100
 
 static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
 
@@ -330,6 +331,11 @@ int ft_board_setup(void *blob, bd_t *bd)
        return 0;
 }
 
+static struct module_pin_mux pcie_sw_pin_mux[] = {
+       {OFFSET(mii1_rxdv), (MODE(7) | PULLUDEN )},     /* GPIO3_4 */
+       {-1},
+};
+
 static struct module_pin_mux dip_pin_mux[] = {
        {OFFSET(gpmc_ad12), (MODE(7) | RXACTIVE )},     /* GPIO1_12 */
        {OFFSET(gpmc_ad13), (MODE(7)  | RXACTIVE )},    /* GPIO1_13 */
@@ -355,6 +361,18 @@ int board_late_init(void)
                        baltos_set_console();
                }
        }
+
+       /* turn power for the mPCIe slot */
+       configure_module_pin_mux(pcie_sw_pin_mux);
+       if (gpio_request(MPCIE_SW, "mpcie_sw")) {
+               printf("failed to export GPIO %d\n", MPCIE_SW);
+               return -ENODEV;
+       }
+       if (gpio_direction_output(MPCIE_SW, 1)) {
+               printf("failed to set GPIO %d direction\n", MPCIE_SW);
+               return -ENODEV;
+       }
+
        setenv("board_name", model);
 #endif
 
@@ -415,7 +433,6 @@ int board_eth_init(bd_t *bis)
        int rv, n = 0;
        uint8_t mac_addr[6];
        uint32_t mac_hi, mac_lo;
-       __maybe_unused struct am335x_baseboard_id header;
 
        /*
         * Note here that we're using CPSW1 since that has a 1Gbit PHY while
index bcdb6485d21c0bfabe22d6f491d7aaabd1fef302..40ddd90651fe34f2981a9f84b44bca7ee80ada77 100644 (file)
 #ifndef _BOARD_H_
 #define _BOARD_H_
 
-/*
- * TI AM335x parts define a system EEPROM that defines certain sub-fields.
- * We use these fields to in turn see what board we are on, and what
- * that might require us to set or not set.
- */
-#define HDR_NO_OF_MAC_ADDR     3
-#define HDR_ETH_ALEN           6
-#define HDR_NAME_LEN           8
-
-struct am335x_baseboard_id {
-       unsigned int  magic;
-       char name[HDR_NAME_LEN];
-       char version[4];
-       char serial[12];
-       char config[32];
-       char mac_addr[HDR_NO_OF_MAC_ADDR][HDR_ETH_ALEN];
-};
-
 typedef struct _BSP_VS_HWPARAM    // v1.0
 {
        uint32_t Magic;
@@ -41,37 +23,6 @@ typedef struct _BSP_VS_HWPARAM    // v1.0
        uint8_t MAC3[6];        // WL1271 WLAN
 } __attribute__ ((packed)) BSP_VS_HWPARAM;
 
-static inline int board_is_bone(struct am335x_baseboard_id *header)
-{
-       return !strncmp(header->name, "A335BONE", HDR_NAME_LEN);
-}
-
-static inline int board_is_bone_lt(struct am335x_baseboard_id *header)
-{
-       return !strncmp(header->name, "A335BNLT", HDR_NAME_LEN);
-}
-
-static inline int board_is_evm_sk(struct am335x_baseboard_id *header)
-{
-       return !strncmp("A335X_SK", header->name, HDR_NAME_LEN);
-}
-
-static inline int board_is_idk(struct am335x_baseboard_id *header)
-{
-       return !strncmp(header->config, "SKU#02", 6);
-}
-
-static inline int board_is_gp_evm(struct am335x_baseboard_id *header)
-{
-       return !strncmp("A33515BB", header->name, HDR_NAME_LEN);
-}
-
-static inline int board_is_evm_15_or_later(struct am335x_baseboard_id *header)
-{
-       return (board_is_gp_evm(header) &&
-               strncmp("1.5", header->version, 3) <= 0);
-}
-
 /*
  * 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
@@ -79,12 +30,6 @@ static inline int board_is_evm_15_or_later(struct am335x_baseboard_id *header)
  * 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_i2c1_pin_mux(void);
 void enable_board_pin_mux(void);
 #endif
index 8783b25b5f3237194afd23abc0508e811425bcae..94410ae35e6ad86248d5aefad440f65ae5582a7f 100644 (file)
@@ -27,36 +27,6 @@ static struct module_pin_mux uart0_pin_mux[] = {
        {-1},
 };
 
-static struct module_pin_mux uart1_pin_mux[] = {
-       {OFFSET(uart1_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)},  /* UART1_RXD */
-       {OFFSET(uart1_txd), (MODE(0) | PULLUDEN)},              /* UART1_TXD */
-       {-1},
-};
-
-static struct module_pin_mux uart2_pin_mux[] = {
-       {OFFSET(spi0_sclk), (MODE(1) | PULLUP_EN | RXACTIVE)},  /* UART2_RXD */
-       {OFFSET(spi0_d0), (MODE(1) | PULLUDEN)},                /* UART2_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 uart4_pin_mux[] = {
-       {OFFSET(gpmc_wait0), (MODE(6) | PULLUP_EN | RXACTIVE)}, /* UART4_RXD */
-       {OFFSET(gpmc_wpn), (MODE(6) | PULLUDEN)},               /* UART4_TXD */
-       {-1},
-};
-
-static struct module_pin_mux uart5_pin_mux[] = {
-       {OFFSET(lcd_data9), (MODE(4) | PULLUP_EN | RXACTIVE)},  /* UART5_RXD */
-       {OFFSET(lcd_data8), (MODE(4) | PULLUDEN)},              /* UART5_TXD */
-       {-1},
-};
-
 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 */
@@ -68,14 +38,6 @@ static struct module_pin_mux mmc0_pin_mux[] = {
        {-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 i2c1_pin_mux[] = {
        {OFFSET(spi0_d1), (MODE(2) | RXACTIVE |
                        PULLUDEN | SLEWCTRL)},  /* I2C_DATA */
@@ -144,36 +106,6 @@ void enable_uart0_pin_mux(void)
        configure_module_pin_mux(uart0_pin_mux);
 }
 
-void enable_uart1_pin_mux(void)
-{
-       configure_module_pin_mux(uart1_pin_mux);
-}
-
-void enable_uart2_pin_mux(void)
-{
-       configure_module_pin_mux(uart2_pin_mux);
-}
-
-void enable_uart3_pin_mux(void)
-{
-       configure_module_pin_mux(uart3_pin_mux);
-}
-
-void enable_uart4_pin_mux(void)
-{
-       configure_module_pin_mux(uart4_pin_mux);
-}
-
-void enable_uart5_pin_mux(void)
-{
-       configure_module_pin_mux(uart5_pin_mux);
-}
-
-void enable_i2c0_pin_mux(void)
-{
-       configure_module_pin_mux(i2c0_pin_mux);
-}
-
 void enable_i2c1_pin_mux(void)
 {
        configure_module_pin_mux(i2c1_pin_mux);
@@ -181,7 +113,6 @@ void enable_i2c1_pin_mux(void)
 
 void enable_board_pin_mux()
 {
-       /* Baltos */
        configure_module_pin_mux(i2c1_pin_mux);
        configure_module_pin_mux(gpio0_7_pin_mux);
        configure_module_pin_mux(rgmii2_pin_mux);
index 586a6456e4f3597e74fef347e3ffbb1841d62abe..bffa7134f7513bf46e8f98623e5637bda0b8c24a 100644 (file)
@@ -653,6 +653,9 @@ config CMD_QFW
          This provides access to the QEMU firmware interface.  The main
          feature is to allow easy loading of files passed to qemu-system
          via -kernel / -initrd
+
+source "cmd/mvebu/Kconfig"
+
 endmenu
 
 config CMD_BOOTSTAGE
index 9c9a9d112b0db745fd798e880a8e6559fbcd5148..34bc5448b9382fcb35fe9781bb30743db79ca463 100644 (file)
@@ -163,3 +163,5 @@ obj-$(CONFIG_CMD_BLOB) += blob.o
 
 # core command
 obj-y += nvedit.o
+
+obj-$(CONFIG_ARCH_MVEBU) += mvebu/
diff --git a/cmd/mvebu/Kconfig b/cmd/mvebu/Kconfig
new file mode 100644 (file)
index 0000000..ad10a57
--- /dev/null
@@ -0,0 +1,52 @@
+menu "MVEBU commands"
+depends on ARCH_MVEBU
+
+config CMD_MVEBU_BUBT
+       bool "bubt"
+       default n
+       help
+         bubt - Burn a u-boot image to flash
+         For details about bubt command please see the documentation
+         in doc/mvebu/cmd/bubt.txt
+
+choice
+       prompt "Flash for image"
+       default MVEBU_SPI_BOOT
+
+config MVEBU_NAND_BOOT
+       bool "NAND flash boot"
+       depends on NAND_PXA3XX
+       help
+         Enable boot from NAND flash.
+         Allow usage of NAND flash as a target for "bubt" command
+         For details about bubt command please see the documentation
+         in doc/mvebu/cmd/bubt.txt
+
+config MVEBU_SPI_BOOT
+       bool "SPI flash boot"
+       depends on SPI_FLASH
+       help
+         Enable boot from SPI flash.
+         Allow usage of SPI flash as a target for "bubt" command
+         For details about bubt command please see the documentation
+         in doc/mvebu/cmd/bubt.txt
+
+config MVEBU_MMC_BOOT
+       bool "eMMC flash boot"
+       depends on MVEBU_MMC
+       help
+         Enable boot from eMMC boot partition
+         Allow usage of eMMC/SD device as a target for "bubt" command
+         For details about bubt command please see the documentation
+         in doc/mvebu/cmd/bubt.txt
+
+endchoice
+
+config MVEBU_UBOOT_DFLT_NAME
+       string "Default image name for bubt command"
+       default "flash-image.bin"
+       help
+         This option should contain a default file name to be used with
+         MVEBU "bubt" command if the source file name is omitted
+
+endmenu
diff --git a/cmd/mvebu/Makefile b/cmd/mvebu/Makefile
new file mode 100644 (file)
index 0000000..03de53e
--- /dev/null
@@ -0,0 +1,8 @@
+#
+# Copyright (C) 2016 Marvell International Ltd.
+#
+# SPDX-License-Identifier:     GPL-2.0
+# https://spdx.org/licenses
+
+
+obj-$(CONFIG_CMD_MVEBU_BUBT) += bubt.o
diff --git a/cmd/mvebu/bubt.c b/cmd/mvebu/bubt.c
new file mode 100644 (file)
index 0000000..1cbfcf0
--- /dev/null
@@ -0,0 +1,767 @@
+/*
+ * Copyright (C) 2016 Marvell International Ltd.
+ *
+ * SPDX-License-Identifier:    GPL-2.0
+ * https://spdx.org/licenses
+ */
+
+#include <config.h>
+#include <common.h>
+#include <command.h>
+#include <vsprintf.h>
+#include <errno.h>
+#include <dm.h>
+
+#include <spi_flash.h>
+#include <spi.h>
+#include <nand.h>
+#include <usb.h>
+#include <fs.h>
+#include <mmc.h>
+#include <u-boot/sha1.h>
+#include <u-boot/sha256.h>
+
+#ifndef CONFIG_SYS_MMC_ENV_DEV
+#define CONFIG_SYS_MMC_ENV_DEV 0
+#endif
+
+#if defined(CONFIG_ARMADA_8K)
+#define MAIN_HDR_MAGIC         0xB105B002
+
+struct mvebu_image_header {
+       u32     magic;                  /*  0-3  */
+       u32     prolog_size;            /*  4-7  */
+       u32     prolog_checksum;        /*  8-11 */
+       u32     boot_image_size;        /* 12-15 */
+       u32     boot_image_checksum;    /* 16-19 */
+       u32     rsrvd0;                 /* 20-23 */
+       u32     load_addr;              /* 24-27 */
+       u32     exec_addr;              /* 28-31 */
+       u8      uart_cfg;               /*  32   */
+       u8      baudrate;               /*  33   */
+       u8      ext_count;              /*  34   */
+       u8      aux_flags;              /*  35   */
+       u32     io_arg_0;               /* 36-39 */
+       u32     io_arg_1;               /* 40-43 */
+       u32     io_arg_2;               /* 43-47 */
+       u32     io_arg_3;               /* 48-51 */
+       u32     rsrvd1;                 /* 52-55 */
+       u32     rsrvd2;                 /* 56-59 */
+       u32     rsrvd3;                 /* 60-63 */
+};
+#elif defined(CONFIG_ARMADA_3700)      /* A3700 */
+#define HASH_SUM_LEN           16
+#define IMAGE_VERSION_3_6_0    0x030600
+#define IMAGE_VERSION_3_5_0    0x030500
+
+struct common_tim_data {
+       u32     version;
+       u32     identifier;
+       u32     trusted;
+       u32     issue_date;
+       u32     oem_unique_id;
+       u32     reserved[5];            /* Reserve 20 bytes */
+       u32     boot_flash_sign;
+       u32     num_images;
+       u32     num_keys;
+       u32     size_of_reserved;
+};
+
+struct mvebu_image_info {
+       u32     image_id;
+       u32     next_image_id;
+       u32     flash_entry_addr;
+       u32     load_addr;
+       u32     image_size;
+       u32     image_size_to_hash;
+       u32     hash_algorithm_id;
+       u32     hash[HASH_SUM_LEN];     /* Reserve 512 bits for the hash */
+       u32     partition_number;
+       u32     enc_algorithm_id;
+       u32     encrypt_start_offset;
+       u32     encrypt_size;
+};
+#endif /* CONFIG_ARMADA_XXX */
+
+struct bubt_dev {
+       char name[8];
+       size_t (*read)(const char *file_name);
+       int (*write)(size_t image_size);
+       int (*active)(void);
+};
+
+static ulong get_load_addr(void)
+{
+       const char *addr_str;
+       unsigned long addr;
+
+       addr_str = getenv("loadaddr");
+       if (addr_str)
+               addr = simple_strtoul(addr_str, NULL, 16);
+       else
+               addr = CONFIG_SYS_LOAD_ADDR;
+
+       return addr;
+}
+
+/********************************************************************
+ *     eMMC services
+ ********************************************************************/
+#ifdef CONFIG_DM_MMC
+static int mmc_burn_image(size_t image_size)
+{
+       struct mmc      *mmc;
+       lbaint_t        start_lba;
+       lbaint_t        blk_count;
+       ulong           blk_written;
+       int             err;
+       const u8        mmc_dev_num = CONFIG_SYS_MMC_ENV_DEV;
+
+       mmc = find_mmc_device(mmc_dev_num);
+       if (!mmc) {
+               printf("No SD/MMC/eMMC card found\n");
+               return -ENOMEDIUM;
+       }
+
+       err = mmc_init(mmc);
+       if (err) {
+               printf("%s(%d) init failed\n", IS_SD(mmc) ? "SD" : "MMC",
+                      mmc_dev_num);
+               return err;
+       }
+
+#ifdef CONFIG_SYS_MMC_ENV_PART
+       if (mmc->part_num != CONFIG_SYS_MMC_ENV_PART) {
+               err = mmc_switch_part(mmc_dev_num, CONFIG_SYS_MMC_ENV_PART);
+               if (err) {
+                       printf("MMC partition switch failed\n");
+                       return err;
+               }
+       }
+#endif
+
+       /* SD reserves LBA-0 for MBR and boots from LBA-1,
+        * MMC/eMMC boots from LBA-0
+        */
+       start_lba = IS_SD(mmc) ? 1 : 0;
+       blk_count = image_size / mmc->block_dev.blksz;
+       if (image_size % mmc->block_dev.blksz)
+               blk_count += 1;
+
+       blk_written = mmc->block_dev.block_write(mmc_dev_num,
+                                               start_lba, blk_count,
+                                               (void *)get_load_addr());
+       if (blk_written != blk_count) {
+               printf("Error - written %#lx blocks\n", blk_written);
+               return -ENOSPC;
+       }
+       printf("Done!\n");
+
+#ifdef CONFIG_SYS_MMC_ENV_PART
+       if (mmc->part_num != CONFIG_SYS_MMC_ENV_PART)
+               mmc_switch_part(mmc_dev_num, mmc->part_num);
+#endif
+
+       return 0;
+}
+
+static size_t mmc_read_file(const char *file_name)
+{
+       loff_t          act_read = 0;
+       int             rc;
+       struct mmc      *mmc;
+       const u8        mmc_dev_num = CONFIG_SYS_MMC_ENV_DEV;
+
+       mmc = find_mmc_device(mmc_dev_num);
+       if (!mmc) {
+               printf("No SD/MMC/eMMC card found\n");
+               return 0;
+       }
+
+       if (mmc_init(mmc)) {
+               printf("%s(%d) init failed\n", IS_SD(mmc) ? "SD" : "MMC",
+                      mmc_dev_num);
+               return 0;
+       }
+
+       /* Load from data partition (0) */
+       if (fs_set_blk_dev("mmc", "0", FS_TYPE_ANY)) {
+               printf("Error: MMC 0 not found\n");
+               return 0;
+       }
+
+       /* Perfrom file read */
+       rc = fs_read(file_name, get_load_addr(), 0, 0, &act_read);
+       if (rc)
+               return 0;
+
+       return act_read;
+}
+
+static int is_mmc_active(void)
+{
+       return 1;
+}
+#else /* CONFIG_DM_MMC */
+static int mmc_burn_image(size_t image_size)
+{
+       return -ENODEV;
+}
+
+static size_t mmc_read_file(const char *file_name)
+{
+       return 0;
+}
+
+static int is_mmc_active(void)
+{
+       return 0;
+}
+#endif /* CONFIG_DM_MMC */
+
+/********************************************************************
+ *     SPI services
+ ********************************************************************/
+#ifdef CONFIG_SPI_FLASH
+static int spi_burn_image(size_t image_size)
+{
+       int ret;
+       struct spi_flash *flash;
+       u32 erase_bytes;
+
+       /* Probe the SPI bus to get the flash device */
+       flash = spi_flash_probe(CONFIG_ENV_SPI_BUS,
+                               CONFIG_ENV_SPI_CS,
+                               CONFIG_SF_DEFAULT_SPEED,
+                               CONFIG_SF_DEFAULT_MODE);
+       if (!flash) {
+               printf("Failed to probe SPI Flash\n");
+               return -ENOMEDIUM;
+       }
+
+#ifdef CONFIG_SPI_FLASH_PROTECTION
+       spi_flash_protect(flash, 0);
+#endif
+       erase_bytes = image_size +
+               (flash->erase_size - image_size % flash->erase_size);
+       printf("Erasing %d bytes (%d blocks) at offset 0 ...",
+              erase_bytes, erase_bytes / flash->erase_size);
+       ret = spi_flash_erase(flash, 0, erase_bytes);
+       if (ret)
+               printf("Error!\n");
+       else
+               printf("Done!\n");
+
+       printf("Writing %d bytes from 0x%lx to offset 0 ...",
+              (int)image_size, get_load_addr());
+       ret = spi_flash_write(flash, 0, image_size, (void *)get_load_addr());
+       if (ret)
+               printf("Error!\n");
+       else
+               printf("Done!\n");
+
+#ifdef CONFIG_SPI_FLASH_PROTECTION
+       spi_flash_protect(flash, 1);
+#endif
+
+       return ret;
+}
+
+static int is_spi_active(void)
+{
+       return 1;
+}
+
+#else /* CONFIG_SPI_FLASH */
+static int spi_burn_image(size_t image_size)
+{
+       return -ENODEV;
+}
+
+static int is_spi_active(void)
+{
+       return 0;
+}
+#endif /* CONFIG_SPI_FLASH */
+
+/********************************************************************
+ *     NAND services
+ ********************************************************************/
+#ifdef CONFIG_CMD_NAND
+static int nand_burn_image(size_t image_size)
+{
+       int ret, block_size;
+       nand_info_t *nand;
+       int dev = nand_curr_device;
+
+       if ((dev < 0) || (dev >= CONFIG_SYS_MAX_NAND_DEVICE) ||
+           (!nand_info[dev].name)) {
+               puts("\nno devices available\n");
+               return -ENOMEDIUM;
+       }
+       nand = &nand_info[dev];
+       block_size = nand->erasesize;
+
+       /* Align U-Boot size to currently used blocksize */
+       image_size = ((image_size + (block_size - 1)) & (~(block_size - 1)));
+
+       /* Erase the U-BOOT image space */
+       printf("Erasing 0x%x - 0x%x:...", 0, (int)image_size);
+       ret = nand_erase(nand, 0, image_size);
+       if (ret) {
+               printf("Error!\n");
+               goto error;
+       }
+       printf("Done!\n");
+
+       /* Write the image to flash */
+       printf("Writing image:...");
+       printf("&image_size = 0x%p\n", (void *)&image_size);
+       ret = nand_write(nand, 0, &image_size, (void *)get_load_addr());
+       if (ret)
+               printf("Error!\n");
+       else
+               printf("Done!\n");
+
+error:
+       return ret;
+}
+
+static int is_nand_active(void)
+{
+       return 1;
+}
+
+#else /* CONFIG_CMD_NAND */
+static int nand_burn_image(size_t image_size)
+{
+       return -ENODEV;
+}
+
+static int is_nand_active(void)
+{
+       return 0;
+}
+#endif /* CONFIG_CMD_NAND */
+
+/********************************************************************
+ *     USB services
+ ********************************************************************/
+#if defined(CONFIG_USB_STORAGE) && defined(CONFIG_BLK)
+static size_t usb_read_file(const char *file_name)
+{
+       loff_t act_read = 0;
+       struct udevice *dev;
+       int rc;
+
+       usb_stop();
+
+       if (usb_init() < 0) {
+               printf("Error: usb_init failed\n");
+               return 0;
+       }
+
+       /* Try to recognize storage devices immediately */
+       blk_first_device(IF_TYPE_USB, &dev);
+       if (!dev) {
+               printf("Error: USB storage device not found\n");
+               return 0;
+       }
+
+       /* Always load from usb 0 */
+       if (fs_set_blk_dev("usb", "0", FS_TYPE_ANY)) {
+               printf("Error: USB 0 not found\n");
+               return 0;
+       }
+
+       /* Perfrom file read */
+       rc = fs_read(file_name, get_load_addr(), 0, 0, &act_read);
+       if (rc)
+               return 0;
+
+       return act_read;
+}
+
+static int is_usb_active(void)
+{
+       return 1;
+}
+
+#else /* defined(CONFIG_USB_STORAGE) && defined (CONFIG_BLK) */
+static size_t usb_read_file(const char *file_name)
+{
+       return 0;
+}
+
+static int is_usb_active(void)
+{
+       return 0;
+}
+#endif /* defined(CONFIG_USB_STORAGE) && defined (CONFIG_BLK) */
+
+/********************************************************************
+ *     Network services
+ ********************************************************************/
+#ifdef CONFIG_CMD_NET
+static size_t tftp_read_file(const char *file_name)
+{
+       /* update global variable load_addr before tftp file from network */
+       load_addr = get_load_addr();
+       return net_loop(TFTPGET);
+}
+
+static int is_tftp_active(void)
+{
+       return 1;
+}
+
+#else
+static size_t tftp_read_file(const char *file_name)
+{
+       return 0;
+}
+
+static int is_tftp_active(void)
+{
+       return 0;
+}
+#endif /* CONFIG_CMD_NET */
+
+enum bubt_devices {
+       BUBT_DEV_NET = 0,
+       BUBT_DEV_USB,
+       BUBT_DEV_MMC,
+       BUBT_DEV_SPI,
+       BUBT_DEV_NAND,
+
+       BUBT_MAX_DEV
+};
+
+struct bubt_dev bubt_devs[BUBT_MAX_DEV] = {
+       {"tftp", tftp_read_file, NULL, is_tftp_active},
+       {"usb",  usb_read_file,  NULL, is_usb_active},
+       {"mmc",  mmc_read_file,  mmc_burn_image, is_mmc_active},
+       {"spi",  NULL, spi_burn_image,  is_spi_active},
+       {"nand", NULL, nand_burn_image, is_nand_active},
+};
+
+static int bubt_write_file(struct bubt_dev *dst, size_t image_size)
+{
+       if (!dst->write) {
+               printf("Error: Write not supported on device %s\n", dst->name);
+               return -ENOTSUPP;
+       }
+
+       return dst->write(image_size);
+}
+
+#if defined(CONFIG_ARMADA_8K)
+u32 do_checksum32(u32 *start, int32_t len)
+{
+       u32 sum = 0;
+       u32 *startp = start;
+
+       do {
+               sum += *startp;
+               startp++;
+               len -= 4;
+       } while (len > 0);
+
+       return sum;
+}
+
+static int check_image_header(void)
+{
+       struct mvebu_image_header *hdr =
+                       (struct mvebu_image_header *)get_load_addr();
+       u32 header_len = hdr->prolog_size;
+       u32 checksum;
+       u32 checksum_ref = hdr->prolog_checksum;
+
+       /*
+        * For now compare checksum, and magic. Later we can
+        * verify more stuff on the header like interface type, etc
+        */
+       if (hdr->magic != MAIN_HDR_MAGIC) {
+               printf("ERROR: Bad MAGIC 0x%08x != 0x%08x\n",
+                      hdr->magic, MAIN_HDR_MAGIC);
+               return -ENOEXEC;
+       }
+
+       /* The checksum value is discarded from checksum calculation */
+       hdr->prolog_checksum = 0;
+
+       checksum = do_checksum32((u32 *)hdr, header_len);
+       if (checksum != checksum_ref) {
+               printf("Error: Bad Image checksum. 0x%x != 0x%x\n",
+                      checksum, checksum_ref);
+               return -ENOEXEC;
+       }
+
+       /* Restore the checksum before writing */
+       hdr->prolog_checksum = checksum_ref;
+       printf("Image checksum...OK!\n");
+
+       return 0;
+}
+#elif defined(CONFIG_ARMADA_3700) /* Armada 3700 */
+static int check_image_header(void)
+{
+       struct common_tim_data *hdr = (struct common_tim_data *)get_load_addr();
+       int image_num;
+       u8 hash_160_output[SHA1_SUM_LEN];
+       u8 hash_256_output[SHA256_SUM_LEN];
+       sha1_context hash1_text;
+       sha256_context hash256_text;
+       u8 *hash_output;
+       u32 hash_algorithm_id;
+       u32 image_size_to_hash;
+       u32 flash_entry_addr;
+       u32 *hash_value;
+       u32 internal_hash[HASH_SUM_LEN];
+       const u8 *buff;
+       u32 num_of_image = hdr->num_images;
+       u32 version = hdr->version;
+       u32 trusted = hdr->trusted;
+
+       /* bubt checksum validation only supports nontrusted images */
+       if (trusted == 1) {
+               printf("bypass image validation, ");
+               printf("only untrusted image is supported now\n");
+               return 0;
+       }
+       /* only supports image version 3.5 and 3.6 */
+       if (version != IMAGE_VERSION_3_5_0 && version != IMAGE_VERSION_3_6_0) {
+               printf("Error: Unsupported Image version = 0x%08x\n", version);
+               return -ENOEXEC;
+       }
+       /* validate images hash value */
+       for (image_num = 0; image_num < num_of_image; image_num++) {
+               struct mvebu_image_info *info =
+                               (struct mvebu_image_info *)(get_load_addr() +
+                               sizeof(struct common_tim_data) +
+                               image_num * sizeof(struct mvebu_image_info));
+               hash_algorithm_id = info->hash_algorithm_id;
+               image_size_to_hash = info->image_size_to_hash;
+               flash_entry_addr = info->flash_entry_addr;
+               hash_value = info->hash;
+               buff = (const u8 *)(get_load_addr() + flash_entry_addr);
+
+               if (image_num == 0) {
+                       /*
+                        * The first image includes hash values in its content.
+                        * For hash calculation, we need to save the original
+                        * hash values to a local variable that will be
+                        * copied back for comparsion and set all zeros to
+                        * the orignal hash values for calculating new value.
+                        * First image original format :
+                        * x...x (datum1) x...x(orig. hash values) x...x(datum2)
+                        * Replaced first image format :
+                        * x...x (datum1) 0...0(hash values) x...x(datum2)
+                        */
+                       memcpy(internal_hash, hash_value,
+                              sizeof(internal_hash));
+                       memset(hash_value, 0, sizeof(internal_hash));
+               }
+               if (image_size_to_hash == 0) {
+                       printf("Warning: Image_%d hash checksum is disabled, ",
+                              image_num);
+                       printf("skip the image validation.\n");
+                       continue;
+               }
+               switch (hash_algorithm_id) {
+               case SHA1_SUM_LEN:
+                       sha1_starts(&hash1_text);
+                       sha1_update(&hash1_text, buff, image_size_to_hash);
+                       sha1_finish(&hash1_text, hash_160_output);
+                       hash_output = hash_160_output;
+                       break;
+               case SHA256_SUM_LEN:
+                       sha256_starts(&hash256_text);
+                       sha256_update(&hash256_text, buff, image_size_to_hash);
+                       sha256_finish(&hash256_text, hash_256_output);
+                       hash_output = hash_256_output;
+                       break;
+               default:
+                       printf("Error: Unsupported hash_algorithm_id = %d\n",
+                              hash_algorithm_id);
+                       return -ENOEXEC;
+               }
+               if (image_num == 0)
+                       memcpy(hash_value, internal_hash,
+                              sizeof(internal_hash));
+               if (memcmp(hash_value, hash_output, hash_algorithm_id) != 0) {
+                       printf("Error: Image_%d checksum is not correct\n",
+                              image_num);
+                       return -ENOEXEC;
+               }
+       }
+       printf("Image checksum...OK!\n");
+
+       return 0;
+}
+
+#else /* Not ARMADA? */
+static int check_image_header(void)
+{
+       printf("bubt cmd does not support this SoC device or family!\n");
+       return -ENOEXEC;
+}
+#endif
+
+static int bubt_verify(size_t image_size)
+{
+       int err;
+
+       /* Check a correct image header exists */
+       err = check_image_header();
+       if (err) {
+               printf("Error: Image header verification failed\n");
+               return err;
+       }
+
+       return 0;
+}
+
+static int bubt_read_file(struct bubt_dev *src)
+{
+       size_t image_size;
+
+       if (!src->read) {
+               printf("Error: Read not supported on device \"%s\"\n",
+                      src->name);
+               return 0;
+       }
+
+       image_size = src->read(net_boot_file_name);
+       if (image_size <= 0) {
+               printf("Error: Failed to read file %s from %s\n",
+                      net_boot_file_name, src->name);
+               return 0;
+       }
+
+       return image_size;
+}
+
+static int bubt_is_dev_active(struct bubt_dev *dev)
+{
+       if (!dev->active) {
+               printf("Device \"%s\" not supported by U-BOOT image\n",
+                      dev->name);
+               return 0;
+       }
+
+       if (!dev->active()) {
+               printf("Device \"%s\" is inactive\n", dev->name);
+               return 0;
+       }
+
+       return 1;
+}
+
+struct bubt_dev *find_bubt_dev(char *dev_name)
+{
+       int dev;
+
+       for (dev = 0; dev < BUBT_MAX_DEV; dev++) {
+               if (strcmp(bubt_devs[dev].name, dev_name) == 0)
+                       return &bubt_devs[dev];
+       }
+
+       return 0;
+}
+
+#define DEFAULT_BUBT_SRC "tftp"
+
+#ifndef DEFAULT_BUBT_DST
+#ifdef CONFIG_MVEBU_SPI_BOOT
+#define DEFAULT_BUBT_DST "spi"
+#elif defined(CONFIG_MVEBU_NAND_BOOT)
+#define DEFAULT_BUBT_DST "nand"
+#elif defined(CONFIG_MVEBU_MMC_BOOT)
+#define DEFAULT_BUBT_DST "mmc"
+else
+#define DEFAULT_BUBT_DST "error"
+#endif
+#endif /* DEFAULT_BUBT_DST */
+
+int do_bubt_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       struct bubt_dev *src, *dst;
+       size_t image_size;
+       char src_dev_name[8];
+       char dst_dev_name[8];
+       char *name;
+       int  err;
+
+       if (argc < 2)
+               copy_filename(net_boot_file_name,
+                             CONFIG_MVEBU_UBOOT_DFLT_NAME,
+                             sizeof(net_boot_file_name));
+       else
+               copy_filename(net_boot_file_name, argv[1],
+                             sizeof(net_boot_file_name));
+
+       if (argc >= 3) {
+               strncpy(dst_dev_name, argv[2], 8);
+       } else {
+               name = DEFAULT_BUBT_DST;
+               strncpy(dst_dev_name, name, 8);
+       }
+
+       if (argc >= 4)
+               strncpy(src_dev_name, argv[3], 8);
+       else
+               strncpy(src_dev_name, DEFAULT_BUBT_SRC, 8);
+
+       /* Figure out the destination device */
+       dst = find_bubt_dev(dst_dev_name);
+       if (!dst) {
+               printf("Error: Unknown destination \"%s\"\n", dst_dev_name);
+               return -EINVAL;
+       }
+
+       if (!bubt_is_dev_active(dst))
+               return -ENODEV;
+
+       /* Figure out the source device */
+       src = find_bubt_dev(src_dev_name);
+       if (!src) {
+               printf("Error: Unknown source \"%s\"\n", src_dev_name);
+               return 1;
+       }
+
+       if (!bubt_is_dev_active(src))
+               return -ENODEV;
+
+       printf("Burning U-BOOT image \"%s\" from \"%s\" to \"%s\"\n",
+              net_boot_file_name, src->name, dst->name);
+
+       image_size = bubt_read_file(src);
+       if (!image_size)
+               return -EIO;
+
+       err = bubt_verify(image_size);
+       if (err)
+               return err;
+
+       err = bubt_write_file(dst, image_size);
+       if (err)
+               return err;
+
+       return 0;
+}
+
+U_BOOT_CMD(
+       bubt, 4, 0, do_bubt_cmd,
+       "Burn a u-boot image to flash",
+       "[file-name] [destination [source]]\n"
+       "\t-file-name     The image file name to burn. Default = flash-image.bin\n"
+       "\t-destination   Flash to burn to [spi, nand, mmc]. Default = active boot device\n"
+       "\t-source        The source to load image from [tftp, usb, mmc]. Default = tftp\n"
+       "Examples:\n"
+       "\tbubt - Burn flash-image.bin from tftp to active boot device\n"
+       "\tbubt flash-image-new.bin nand - Burn flash-image-new.bin from tftp to NAND flash\n"
+       "\tbubt backup-flash-image.bin mmc usb - Burn backup-flash-image.bin from usb to MMC\n"
+
+);
index 2f4978af9fe30203ad25f160444acce2937bbf40..7993c1a09955af490d10ac846981d3dab8a3bc88 100644 (file)
--- a/cmd/pci.c
+++ b/cmd/pci.c
@@ -92,6 +92,77 @@ static void pci_show_regs(pci_dev_t dev, struct pci_reg_info *regs)
 }
 #endif
 
+#ifdef CONFIG_DM_PCI
+int pci_bar_show(struct udevice *dev)
+{
+       u8 header_type;
+       int bar_cnt, bar_id, mem_type;
+       bool is_64, is_io;
+       u32 base_low, base_high;
+       u32 size_low, size_high;
+       u64 base, size;
+       u32 reg_addr;
+       int prefetchable;
+
+       dm_pci_read_config8(dev, PCI_HEADER_TYPE, &header_type);
+
+       if (header_type == PCI_HEADER_TYPE_CARDBUS) {
+               printf("CardBus doesn't support BARs\n");
+               return -ENOSYS;
+       }
+
+       bar_cnt = (header_type == PCI_HEADER_TYPE_NORMAL) ? 6 : 2;
+
+       printf("ID   Base                Size                Width  Type\n");
+       printf("----------------------------------------------------------\n");
+
+       bar_id = 0;
+       reg_addr = PCI_BASE_ADDRESS_0;
+       while (bar_cnt) {
+               dm_pci_read_config32(dev, reg_addr, &base_low);
+               dm_pci_write_config32(dev, reg_addr, 0xffffffff);
+               dm_pci_read_config32(dev, reg_addr, &size_low);
+               dm_pci_write_config32(dev, reg_addr, base_low);
+               reg_addr += 4;
+
+               base = base_low & ~0xf;
+               size = size_low & ~0xf;
+               base_high = 0x0;
+               size_high = 0xffffffff;
+               is_64 = 0;
+               prefetchable = base_low & PCI_BASE_ADDRESS_MEM_PREFETCH;
+               is_io = base_low & PCI_BASE_ADDRESS_SPACE_IO;
+               mem_type = base_low & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
+
+               if (mem_type == PCI_BASE_ADDRESS_MEM_TYPE_64) {
+                       dm_pci_read_config32(dev, reg_addr, &base_high);
+                       dm_pci_write_config32(dev, reg_addr, 0xffffffff);
+                       dm_pci_read_config32(dev, reg_addr, &size_high);
+                       dm_pci_write_config32(dev, reg_addr, base_high);
+                       bar_cnt--;
+                       reg_addr += 4;
+                       is_64 = 1;
+               }
+
+               base = base | ((u64)base_high << 32);
+               size = size | ((u64)size_high << 32);
+
+               if ((!is_64 && size_low) || (is_64 && size)) {
+                       size = ~size + 1;
+                       printf(" %d   %#016llx  %#016llx  %d     %s   %s\n",
+                              bar_id, base, size, is_64 ? 64 : 32,
+                              is_io ? "I/O" : "MEM",
+                              prefetchable ? "Prefetchable" : "");
+               }
+
+               bar_id++;
+               bar_cnt--;
+       }
+
+       return 0;
+}
+#endif
+
 static struct pci_reg_info regs_start[] = {
        { "vendor ID", PCI_SIZE_16, PCI_VENDOR_ID },
        { "device ID", PCI_SIZE_16, PCI_DEVICE_ID },
@@ -573,6 +644,9 @@ static int do_pci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                if (argc > 4)
                        value = simple_strtoul(argv[4], NULL, 16);
        case 'h':               /* header */
+#ifdef CONFIG_DM_PCI
+       case 'b':               /* bars */
+#endif
                if (argc < 3)
                        goto usage;
                if ((bdf = get_pci_dev(argv[2])) == -1)
@@ -641,6 +715,11 @@ static int do_pci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                ret = pci_cfg_write(dev, addr, size, value);
 #endif
                break;
+#ifdef CONFIG_DM_PCI
+
+       case 'b':               /* bars */
+               return pci_bar_show(dev);
+#endif
        default:
                ret = CMD_RET_USAGE;
                break;
@@ -663,6 +742,10 @@ static char pci_help_text[] =
 #endif
        "pci header b.d.f\n"
        "    - show header of PCI device 'bus.device.function'\n"
+#ifdef CONFIG_DM_PCI
+       "pci bar b.d.f\n"
+       "    - show BARs base and size for device b.d.f'\n"
+#endif
        "pci display[.b, .w, .l] b.d.f [address] [# of objects]\n"
        "    - display PCI configuration space (CFG)\n"
        "pci next[.b, .w, .l] b.d.f address\n"
index 9bcbd09ff380516f0a5ad042f68c8b47e3670f8d..f7df834e32844b13a9af111d5e6f3d42fb168edb 100644 (file)
@@ -221,10 +221,10 @@ static int spl_ram_load_image(struct spl_image_info *spl_image,
        return 0;
 }
 #if defined(CONFIG_SPL_RAM_DEVICE)
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_RAM, spl_ram_load_image);
+SPL_LOAD_IMAGE_METHOD("RAM", 0, BOOT_DEVICE_RAM, spl_ram_load_image);
 #endif
 #if defined(CONFIG_SPL_DFU_SUPPORT)
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_DFU, spl_ram_load_image);
+SPL_LOAD_IMAGE_METHOD("USB DFU", 0, BOOT_DEVICE_DFU, spl_ram_load_image);
 #endif
 #endif
 
@@ -269,87 +269,6 @@ __weak void board_boot_order(u32 *spl_boot_list)
        spl_boot_list[0] = spl_boot_device();
 }
 
-#ifdef CONFIG_SPL_BOARD_LOAD_IMAGE
-__weak void spl_board_announce_boot_device(void) { }
-#endif
-
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
-struct boot_device_name {
-       u32 boot_dev;
-       const char *name;
-};
-
-struct boot_device_name boot_name_table[] = {
-#ifdef CONFIG_SPL_RAM_DEVICE
-       { BOOT_DEVICE_RAM, "RAM" },
-#endif
-#ifdef CONFIG_SPL_MMC_SUPPORT
-       { BOOT_DEVICE_MMC1, "MMC1" },
-       { BOOT_DEVICE_MMC2, "MMC2" },
-       { BOOT_DEVICE_MMC2_2, "MMC2_2" },
-#endif
-#ifdef CONFIG_SPL_NAND_SUPPORT
-       { BOOT_DEVICE_NAND, "NAND" },
-#endif
-#ifdef CONFIG_SPL_ONENAND_SUPPORT
-       { BOOT_DEVICE_ONENAND, "OneNAND" },
-#endif
-#ifdef CONFIG_SPL_NOR_SUPPORT
-       { BOOT_DEVICE_NOR, "NOR" },
-#endif
-#ifdef CONFIG_SPL_YMODEM_SUPPORT
-       { BOOT_DEVICE_UART, "UART" },
-#endif
-#if defined(CONFIG_SPL_SPI_SUPPORT) || defined(CONFIG_SPL_SPI_FLASH_SUPPORT)
-       { BOOT_DEVICE_SPI, "SPI" },
-#endif
-#ifdef CONFIG_SPL_ETH_SUPPORT
-#ifdef CONFIG_SPL_ETH_DEVICE
-       { BOOT_DEVICE_CPGMAC, "eth device" },
-#else
-       { BOOT_DEVICE_CPGMAC, "net" },
-#endif
-#endif
-#ifdef CONFIG_SPL_USBETH_SUPPORT
-       { BOOT_DEVICE_USBETH, "USB eth" },
-#endif
-#ifdef CONFIG_SPL_USB_SUPPORT
-       { BOOT_DEVICE_USB, "USB" },
-#endif
-#ifdef CONFIG_SPL_DFU_SUPPORT
-       { BOOT_DEVICE_DFU, "USB DFU" },
-#endif
-#ifdef CONFIG_SPL_SATA_SUPPORT
-       { BOOT_DEVICE_SATA, "SATA" },
-#endif
-       /* Keep this entry last */
-       { BOOT_DEVICE_NONE, "unknown boot device" },
-};
-
-static void announce_boot_device(u32 boot_device)
-{
-       int i;
-
-       puts("Trying to boot from ");
-
-#ifdef CONFIG_SPL_BOARD_LOAD_IMAGE
-       if (boot_device == BOOT_DEVICE_BOARD) {
-               spl_board_announce_boot_device();
-               puts("\n");
-               return;
-       }
-#endif
-       for (i = 0; i < ARRAY_SIZE(boot_name_table) - 1; i++) {
-               if (boot_name_table[i].boot_dev == boot_device)
-                       break;
-       }
-
-       printf("%s\n", boot_name_table[i].name);
-}
-#else
-static inline void announce_boot_device(u32 boot_device) { }
-#endif
-
 static struct spl_image_loader *spl_ll_find_loader(uint boot_device)
 {
        struct spl_image_loader *drv =
@@ -367,19 +286,44 @@ static struct spl_image_loader *spl_ll_find_loader(uint boot_device)
        return NULL;
 }
 
-static int spl_load_image(struct spl_image_info *spl_image, u32 boot_device)
+static int spl_load_image(struct spl_image_info *spl_image,
+                         struct spl_image_loader *loader)
 {
        struct spl_boot_device bootdev;
-       struct spl_image_loader *loader = spl_ll_find_loader(boot_device);
 
-       bootdev.boot_device = boot_device;
+       bootdev.boot_device = loader->boot_device;
        bootdev.boot_device_name = NULL;
-       if (loader)
-               return loader->load_image(spl_image, &bootdev);
 
+       return loader->load_image(spl_image, &bootdev);
+}
+
+/**
+ * boot_from_devices() - Try loading an booting U-Boot from a list of devices
+ *
+ * @spl_image: Place to put the image details if successful
+ * @spl_boot_list: List of boot devices to try
+ * @count: Number of elements in spl_boot_list
+ * @return 0 if OK, -ve on error
+ */
+static int boot_from_devices(struct spl_image_info *spl_image,
+                            u32 spl_boot_list[], int count)
+{
+       int i;
+
+       for (i = 0; i < count && spl_boot_list[i] != BOOT_DEVICE_NONE; i++) {
+               struct spl_image_loader *loader;
+
+               loader = spl_ll_find_loader(spl_boot_list[i]);
 #if defined(CONFIG_SPL_SERIAL_SUPPORT) && defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
-       puts("SPL: Unsupported Boot Device!\n");
+               if (loader)
+                       printf("Trying to boot from %s", loader->name);
+               else
+                       puts("SPL: Unsupported Boot Device!\n");
 #endif
+               if (loader && !spl_load_image(spl_image, loader))
+                       return 0;
+       }
+
        return -ENODEV;
 }
 
@@ -393,7 +337,6 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
                BOOT_DEVICE_NONE,
        };
        struct spl_image_info spl_image;
-       int i;
 
        debug(">>spl:board_init_r()\n");
 
@@ -420,15 +363,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
 
        memset(&spl_image, '\0', sizeof(spl_image));
        board_boot_order(spl_boot_list);
-       for (i = 0; i < ARRAY_SIZE(spl_boot_list) &&
-                       spl_boot_list[i] != BOOT_DEVICE_NONE; i++) {
-               announce_boot_device(spl_boot_list[i]);
-               if (!spl_load_image(&spl_image, spl_boot_list[i]))
-                       break;
-       }
 
-       if (i == ARRAY_SIZE(spl_boot_list) ||
-           spl_boot_list[i] == BOOT_DEVICE_NONE) {
+       if (boot_from_devices(&spl_image, spl_boot_list,
+                             ARRAY_SIZE(spl_boot_list))) {
                puts("SPL: failed to boot from all boot devices\n");
                hang();
        }
index 58b061f76baadd720f67f444c1e5812996502813..85e3de8f23053a7d93ca36f3514a3f77a162356d 100644 (file)
@@ -245,13 +245,13 @@ static int spl_mmc_do_fs_boot(struct spl_image_info *spl_image, struct mmc *mmc)
 #endif
 #ifdef CONFIG_SPL_EXT_SUPPORT
        if (!spl_start_uboot()) {
-               err = spl_load_image_ext_os(spl_image, &mmc->block_dev,
+               err = spl_load_image_ext_os(spl_image, mmc_get_blk_desc(mmc),
                        CONFIG_SYS_MMCSD_FS_BOOT_PARTITION);
                if (!err)
                        return err;
        }
 #ifdef CONFIG_SPL_FS_LOAD_PAYLOAD_NAME
-       err = spl_load_image_ext(spl_image, &mmc->block_dev,
+       err = spl_load_image_ext(spl_image, mmc_get_blk_desc(mmc),
                                 CONFIG_SYS_MMCSD_FS_BOOT_PARTITION,
                                 CONFIG_SPL_FS_LOAD_PAYLOAD_NAME);
        if (!err)
@@ -355,6 +355,6 @@ int spl_mmc_load_image(struct spl_image_info *spl_image,
        return err;
 }
 
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_MMC1, spl_mmc_load_image);
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_MMC2, spl_mmc_load_image);
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_MMC2_2, spl_mmc_load_image);
+SPL_LOAD_IMAGE_METHOD("MMC1", 0, BOOT_DEVICE_MMC1, spl_mmc_load_image);
+SPL_LOAD_IMAGE_METHOD("MMC2", 0, BOOT_DEVICE_MMC2, spl_mmc_load_image);
+SPL_LOAD_IMAGE_METHOD("MMC2_2", 0, BOOT_DEVICE_MMC2_2, spl_mmc_load_image);
index d1abda6e4ce1f555defbf3463bcda9b767b13d00..cd39f9be9d3caa0fea49f5e6ece7255f1ddbbd69 100644 (file)
@@ -151,4 +151,4 @@ static int spl_nand_load_image(struct spl_image_info *spl_image,
 }
 #endif
 /* Use priorty 1 so that Ubi can override this */
-SPL_LOAD_IMAGE_METHOD(1, BOOT_DEVICE_NAND, spl_nand_load_image);
+SPL_LOAD_IMAGE_METHOD("NAND", 1, BOOT_DEVICE_NAND, spl_nand_load_image);
index f4b4bc483397fc6104922f56de014c5408e2435c..0fba0172ea4d78c9a70e829c1e89e50bef4312f3 100644 (file)
@@ -51,7 +51,8 @@ int spl_net_load_image_cpgmac(struct spl_image_info *spl_image,
 
        return spl_net_load_image(spl_image, bootdev);
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_CPGMAC, spl_net_load_image_cpgmac);
+SPL_LOAD_IMAGE_METHOD("eth device", 0, BOOT_DEVICE_CPGMAC,
+                     spl_net_load_image_cpgmac);
 #endif
 
 #ifdef CONFIG_SPL_USBETH_SUPPORT
@@ -62,5 +63,5 @@ int spl_net_load_image_usb(struct spl_image_info *spl_image,
 
        return spl_net_load_image(spl_image, bootdev);
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_USBETH, spl_net_load_image_usb);
+SPL_LOAD_IMAGE_METHOD("USB eth", 0, BOOT_DEVICE_USBETH, spl_net_load_image_usb);
 #endif
index 6bfa399bacef083ab5ff6c83eec70b140d2918ae..d07ca84382468278e066f69598b6c490f3b68661 100644 (file)
@@ -71,4 +71,4 @@ static int spl_nor_load_image(struct spl_image_info *spl_image,
 
        return 0;
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_NOR, spl_nor_load_image);
+SPL_LOAD_IMAGE_METHOD("NOR", 0, BOOT_DEVICE_NOR, spl_nor_load_image);
index f076e2c7c8846902c526ad3481c0d923e98af5bd..fc98e9cbe5806bbe376bb09993747dd2e540924d 100644 (file)
@@ -36,4 +36,5 @@ static int spl_onenand_load_image(struct spl_image_info *spl_image,
        return 0;
 }
 /* Use priorty 1 so that Ubi can override this */
-SPL_LOAD_IMAGE_METHOD(1, BOOT_DEVICE_ONENAND, spl_onenand_load_image);
+SPL_LOAD_IMAGE_METHOD("OneNAND", 1, BOOT_DEVICE_ONENAND,
+                     spl_onenand_load_image);
index a3c07cd9cee2a3e6f15fc62da49f9583b9337545..5476206131debb3e51e85fe36734b8813442be2d 100644 (file)
@@ -57,4 +57,4 @@ static int spl_sata_load_image(struct spl_image_info *spl_image,
 
        return 0;
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_SATA, spl_sata_load_image);
+SPL_LOAD_IMAGE_METHOD("SATA", 0, BOOT_DEVICE_SATA, spl_sata_load_image);
index 78b8cd16bb8361f50ff7a160c8bb2a95febbede1..cd1d6b285ef02a6cac36defcc485c899b5b2db8f 100644 (file)
@@ -125,4 +125,4 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
        return err;
 }
 /* Use priorty 1 so that boards can override this */
-SPL_LOAD_IMAGE_METHOD(1, BOOT_DEVICE_SPI, spl_spi_load_image);
+SPL_LOAD_IMAGE_METHOD("SPI", 1, BOOT_DEVICE_SPI, spl_spi_load_image);
index c03910bb40809fa39462cf11d9b8a868f86101c7..24633f4766e56172b06a7c74c1e030303a647e7f 100644 (file)
@@ -78,5 +78,5 @@ out:
        return ret;
 }
 /* Use priorty 0 so that Ubi will override NAND and ONENAND methods */
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_NAND, spl_ubi_load_image);
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_ONENAND, spl_ubi_load_image);
+SPL_LOAD_IMAGE_METHOD("NAND", 0, BOOT_DEVICE_NAND, spl_ubi_load_image);
+SPL_LOAD_IMAGE_METHOD("OneNAND", 0, BOOT_DEVICE_ONENAND, spl_ubi_load_image);
index e37966ed6cefb9a71c281ec9c1939a6231b6840a..567a4505056a674343ff35d891f949a86c76988a 100644 (file)
@@ -65,4 +65,4 @@ static int spl_usb_load_image(struct spl_image_info *spl_image,
 
        return 0;
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_USB, spl_usb_load_image);
+SPL_LOAD_IMAGE_METHOD("USB", 0, BOOT_DEVICE_USB, spl_usb_load_image);
index 957894dccbf22486e32c581a6d9aabd86bb56228..ff8085b795e61b82544d6c8eda3cd1ce6d64d366 100644 (file)
@@ -132,4 +132,4 @@ end_stream:
        printf("Loaded %d bytes\n", size);
        return 0;
 }
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_UART, spl_ymodem_load_image);
+SPL_LOAD_IMAGE_METHOD("UART", 0, BOOT_DEVICE_UART, spl_ymodem_load_image);
index 2b1d6958b64f9193b6aeb9489c4230c769747866..c20c42ea7b89a16d50a7d5366c8e65760a9943fc 100644 (file)
@@ -3,6 +3,9 @@ CONFIG_OMAP54XX=y
 CONFIG_TI_SECURE_DEVICE=y
 # CONFIG_SPL_NAND_SUPPORT is not set
 CONFIG_TARGET_AM57XX_EVM=y
+CONFIG_TI_SECURE_EMIF_REGION_START=0xbe000000
+CONFIG_TI_SECURE_EMIF_TOTAL_REGION_SIZE=0x02000000
+CONFIG_TI_SECURE_EMIF_PROTECTED_REGION_SIZE=0x01c00000
 CONFIG_SPL_SPI_FLASH_SUPPORT=y
 CONFIG_SPL_SPI_SUPPORT=y
 CONFIG_SPL_STACK_R_ADDR=0x82000000
index e350d9f466af1fb35d0993d817ac22fd4cb23a8d..b890a06ef353454dd4533ea6d5a2970b2961ea0c 100644 (file)
@@ -4,6 +4,9 @@ CONFIG_SYS_MALLOC_F_LEN=0x2000
 CONFIG_TI_SECURE_DEVICE=y
 # CONFIG_SPL_NAND_SUPPORT is not set
 CONFIG_TARGET_DRA7XX_EVM=y
+CONFIG_TI_SECURE_EMIF_REGION_START=0xbe000000
+CONFIG_TI_SECURE_EMIF_TOTAL_REGION_SIZE=0x02000000
+CONFIG_TI_SECURE_EMIF_PROTECTED_REGION_SIZE=0x01c00000
 CONFIG_SPL_SPI_FLASH_SUPPORT=y
 CONFIG_SPL_SPI_SUPPORT=y
 CONFIG_SPL_STACK_R_ADDR=0x82000000
index 1f3d487dcb32616e2615aeed6448f2aced90c0f8..c83b2ebafd726b4bea88e9be00c7b8b12febb7a9 100644 (file)
@@ -34,3 +34,4 @@ CONFIG_USB=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_STORAGE=y
+CONFIG_QSPI_AHB_INIT=y
index c0514aedb0b4d28c4e141b23acb6ba647ed78605..27bccd1227634dd221f845e7252380cc66b52b8c 100644 (file)
@@ -38,3 +38,4 @@ CONFIG_USB=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_STORAGE=y
+CONFIG_QSPI_AHB_INIT=y
index 13c9f2107d9be83a55f5c428d03b89252b34b76f..459682dc5a102886f4f4a0f2c1f91b11fcd3e29e 100644 (file)
@@ -38,3 +38,4 @@ CONFIG_USB=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_DWC3=y
 CONFIG_USB_STORAGE=y
+CONFIG_QSPI_AHB_INIT=y
index 8508c09336808f62843abe89d5417bb60ff5f2a0..fa173739fb4513f945d0241da92eaf2d09825ccc 100644 (file)
@@ -24,3 +24,4 @@ CONFIG_SPI_FLASH=y
 CONFIG_SYS_NS16550=y
 CONFIG_DM_SPI=y
 CONFIG_FSL_QSPI=y
+CONFIG_QSPI_AHB_INIT=y
index 81152cd7832563516419f8aef16e4228f429d453..a2bb97a9bab912f69809bca37a5135bf031e41c2 100644 (file)
@@ -1,8 +1,9 @@
 CONFIG_ARM=y
 CONFIG_ARCH_MVEBU=y
 CONFIG_SYS_MALLOC_F_LEN=0x2000
-CONFIG_TARGET_MVEBU_DB_88F7040=y
+CONFIG_TARGET_MVEBU_ARMADA_8K=y
 CONFIG_DEFAULT_DEVICE_TREE="armada-7040-db"
+CONFIG_SMBIOS_PRODUCT_NAME=""
 CONFIG_AHCI=y
 # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
 CONFIG_SYS_CONSOLE_INFO_QUIET=y
@@ -26,6 +27,7 @@ CONFIG_CMD_EXT4=y
 CONFIG_CMD_EXT4_WRITE=y
 CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
+CONFIG_CMD_MVEBU_BUBT=y
 CONFIG_BLOCK_CACHE=y
 CONFIG_DM_I2C=y
 CONFIG_SYS_I2C_MVTWSI=y
@@ -35,6 +37,9 @@ CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_PHYLIB=y
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_PCIE_DW_MVEBU=y
 CONFIG_MVEBU_COMPHY_SUPPORT=y
 # CONFIG_SPL_SERIAL_PRESENT is not set
 CONFIG_DEBUG_UART=y
@@ -48,3 +53,6 @@ CONFIG_DM_USB=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_STORAGE=y
+CONFIG_SMBIOS_MANUFACTURER=""
+CONFIG_PINCTRL=y
+CONFIG_HUSH_PARSER=y
diff --git a/configs/mvebu_db-88f8040_defconfig b/configs/mvebu_db-88f8040_defconfig
new file mode 100644 (file)
index 0000000..1e92e9f
--- /dev/null
@@ -0,0 +1,58 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MVEBU=y
+CONFIG_SYS_MALLOC_F_LEN=0x2000
+CONFIG_TARGET_MVEBU_ARMADA_8K=y
+CONFIG_DEFAULT_DEVICE_TREE="armada-8040-db"
+CONFIG_SMBIOS_PRODUCT_NAME=""
+CONFIG_AHCI=y
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+CONFIG_SYS_CONSOLE_INFO_QUIET=y
+# CONFIG_DISPLAY_CPUINFO is not set
+# CONFIG_DISPLAY_BOARDINFO is not set
+# CONFIG_CMD_IMLS is not set
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_SF=y
+CONFIG_CMD_SPI=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_USB=y
+# CONFIG_CMD_FPGA is not set
+# CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_TFTPPUT=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_CMD_MVEBU_BUBT=y
+CONFIG_BLOCK_CACHE=y
+CONFIG_DM_I2C=y
+CONFIG_SYS_I2C_MVTWSI=y
+CONFIG_MISC=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_MACRONIX=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_PHYLIB=y
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_PCIE_DW_MVEBU=y
+CONFIG_MVEBU_COMPHY_SUPPORT=y
+# CONFIG_SPL_SERIAL_PRESENT is not set
+CONFIG_DEBUG_UART=y
+CONFIG_DEBUG_UART_BASE=0xf0512000
+CONFIG_DEBUG_UART_CLOCK=200000000
+CONFIG_DEBUG_UART_SHIFT=2
+CONFIG_DEBUG_UART_ANNOUNCE=y
+CONFIG_SYS_NS16550=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_STORAGE=y
+CONFIG_SMBIOS_MANUFACTURER=""
+CONFIG_PINCTRL=y
+CONFIG_HUSH_PARSER=y
index 3005ffda073b7cd7ed294409988e0fc26c9a3dc6..18843d26e7f904cf3184a2718dd1f22ead25d32c 100644 (file)
@@ -2,6 +2,7 @@ CONFIG_ARM=y
 CONFIG_OMAP54XX=y
 # CONFIG_SPL_NAND_SUPPORT is not set
 CONFIG_TARGET_OMAP5_UEVM=y
+CONFIG_ARMV7_LPAE=y
 CONFIG_SYS_CONSOLE_INFO_QUIET=y
 CONFIG_VERSION_VARIABLE=y
 CONFIG_SPL=y
index 52681c92d022e98c7d205ca65b72e3fe43bda336..d030ffafc39589bebb54efe37df4cd5d834c9135 100644 (file)
@@ -13,6 +13,7 @@ CONFIG_SPL=y
 CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0xb5
 CONFIG_HUSH_PARSER=y
 CONFIG_SYS_PROMPT="U-Boot > "
+CONFIG_CMD_BOOTZ=y
 # CONFIG_CMD_IMLS is not set
 CONFIG_CMD_ASKENV=y
 # CONFIG_CMD_FLASH is not set
index 0d91ec1c4d31e9f319591a53c535509d48664ec1..7b9826ad61dc6c740f8b3187d6369962763876f1 100644 (file)
@@ -37,3 +37,4 @@ CONFIG_USB_GADGET_DOWNLOAD=y
 CONFIG_G_DNL_MANUFACTURER="Samsung"
 CONFIG_G_DNL_VENDOR_NUM=0x04e8
 CONFIG_G_DNL_PRODUCT_NUM=0x6601
+CONFIG_DM_I2C=y
diff --git a/configs/socfpga_de1_soc_defconfig b/configs/socfpga_de1_soc_defconfig
new file mode 100644 (file)
index 0000000..d8a3b82
--- /dev/null
@@ -0,0 +1,50 @@
+CONFIG_ARM=y
+CONFIG_ARCH_SOCFPGA=y
+CONFIG_SYS_MALLOC_F_LEN=0x2000
+# CONFIG_SPL_SPI_SUPPORT is not set
+CONFIG_TARGET_SOCFPGA_TERASIC_DE1_SOC=y
+CONFIG_SPL_STACK_R_ADDR=0x00800000
+CONFIG_SPL_YMODEM_SUPPORT=y
+CONFIG_DEFAULT_DEVICE_TREE="socfpga_cyclone5_de1_soc"
+CONFIG_FIT=y
+CONFIG_SYS_CONSOLE_IS_IN_ENV=y
+CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
+CONFIG_SYS_CONSOLE_ENV_OVERWRITE=y
+CONFIG_VERSION_VARIABLE=y
+# CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_SPL=y
+CONFIG_SPL_SYS_MALLOC_SIMPLE=y
+CONFIG_SPL_STACK_R=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_GREPENV=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SPI=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_SPL_DM=y
+CONFIG_DM_GPIO=y
+CONFIG_DWAPB_GPIO=y
+CONFIG_SYS_I2C_DW=y
+CONFIG_DM_MMC=y
+CONFIG_DM_ETH=y
+CONFIG_ETH_DESIGNWARE=y
+CONFIG_SYS_NS16550=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_STORAGE=y
+CONFIG_USE_TINY_PRINTF=y
+# CONFIG_EFI_LOADER is not set
index c0ac5ac048cdcbade2599494b39af976ae79cbf7..d8199f84a78fe4d020fecd80a6ce81ee9679c6fe 100644 (file)
@@ -6,6 +6,7 @@ CONFIG_ARCH_UNIPHIER_LD11=y
 CONFIG_MICRO_SUPPORT_CARD=y
 CONFIG_SYS_TEXT_BASE=0x84000000
 CONFIG_DEFAULT_DEVICE_TREE="uniphier-ld11-ref"
+# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
 CONFIG_SPL_NOR_SUPPORT=y
 CONFIG_HUSH_PARSER=y
 # CONFIG_CMD_XIMG is not set
index 3e802d3e0841068c2a4f5799764c8ed5a6c93385..449093a3fb22560d1e433610a435570fc2bdc06e 100644 (file)
@@ -6,6 +6,7 @@ CONFIG_ARCH_UNIPHIER_LD20=y
 CONFIG_MICRO_SUPPORT_CARD=y
 CONFIG_SYS_TEXT_BASE=0x84000000
 CONFIG_DEFAULT_DEVICE_TREE="uniphier-ld20-ref"
+# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
 CONFIG_SPL_NOR_SUPPORT=y
 CONFIG_HUSH_PARSER=y
 # CONFIG_CMD_XIMG is not set
index b141561ab3ad44ac0db494efb06d2f3130dc11d2..8391a0aea85bc9d597f1fe3c794dcb620a4e6f3d 100644 (file)
@@ -8,6 +8,7 @@ CONFIG_ARCH_UNIPHIER_LD4_SLD8=y
 CONFIG_MICRO_SUPPORT_CARD=y
 CONFIG_SYS_TEXT_BASE=0x84000000
 CONFIG_DEFAULT_DEVICE_TREE="uniphier-ld4-ref"
+# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
 CONFIG_SPL_NOR_SUPPORT=y
 CONFIG_HUSH_PARSER=y
 CONFIG_CMD_BOOTZ=y
index f71ef56019d1b1ec843d1d79ef1c6967c5cb82f9..c8a7573ace9043e4db74ef2f5d69f625b6d4835c 100644 (file)
@@ -7,6 +7,7 @@ CONFIG_SPL_SERIAL_SUPPORT=y
 CONFIG_MICRO_SUPPORT_CARD=y
 CONFIG_SYS_TEXT_BASE=0x84000000
 CONFIG_DEFAULT_DEVICE_TREE="uniphier-pro4-ref"
+# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
 CONFIG_SPL_NOR_SUPPORT=y
 CONFIG_HUSH_PARSER=y
 CONFIG_CMD_BOOTZ=y
index ba3867f06ac9bfffd3e26b2404680ddfe2baa5a0..560b11b7be63f9c0651aa42d073ef7e30eb89579 100644 (file)
@@ -8,6 +8,7 @@ CONFIG_ARCH_UNIPHIER_PRO5_PXS2_LD6B=y
 CONFIG_MICRO_SUPPORT_CARD=y
 CONFIG_SYS_TEXT_BASE=0x84000000
 CONFIG_DEFAULT_DEVICE_TREE="uniphier-pxs2-vodka"
+# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
 CONFIG_SPL_NOR_SUPPORT=y
 CONFIG_HUSH_PARSER=y
 CONFIG_CMD_BOOTZ=y
index 3568f7a635e7233fcf3e5aaebfc89a8986f8783b..7e30acc4f5e1bca2010edc1cbd01999d3d3b8ac3 100644 (file)
@@ -8,6 +8,7 @@ CONFIG_ARCH_UNIPHIER_SLD3=y
 CONFIG_MICRO_SUPPORT_CARD=y
 CONFIG_SYS_TEXT_BASE=0x84000000
 CONFIG_DEFAULT_DEVICE_TREE="uniphier-sld3-ref"
+# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
 CONFIG_SPL_NOR_SUPPORT=y
 CONFIG_HUSH_PARSER=y
 CONFIG_CMD_BOOTZ=y
diff --git a/doc/device-tree-bindings/pinctrl/marvell,armada-apn806-pinctrl.txt b/doc/device-tree-bindings/pinctrl/marvell,armada-apn806-pinctrl.txt
new file mode 100644 (file)
index 0000000..51f2f2c
--- /dev/null
@@ -0,0 +1,25 @@
+       Functions of Armada APN806 pin controller
+       Function 0x0 for any MPP ID activates GPIO pin mode
+----------------------------------------------------------------------
+MPP#   0x1                     0x2             0x3             0x4
+----------------------------------------------------------------------
+0      SDIO_CLK                -               SPI0_CLK        -
+1      SDIO_CMD                -               SPI0_MISO       -
+2      SDIO_D[0]               -               SPI0_MOSI       -
+3      SDIO_D[1]               -               SPI0_CS0n       -
+4      SDIO_D[2]               -               I2C0_SDA        SPI0_CS1n
+5      SDIO_D[3]               -               I2C0_SCK        -
+6      SDIO_DS                 -               -               -
+7      SDIO_D[4]               -               UART1_RXD       -
+8      SDIO_D[5]               -               UART1_TXD       -
+9      SDIO_D[6]               -               SPI0_CS1n       -
+10     SDIO_D[7]               -               -               -
+11     -                       -               UART0_TXD       -
+12     SDIO_CARD_PW_OFF        SDIO_HW_RST     -               -
+13     -                       -               -               -
+14     -                       -               -               -
+15     -                       -               -               -
+16     -                       -               -               -
+17     -                       -               -               -
+18     -                       -               -               -
+19     -                       -               UART0_RXD       -
diff --git a/doc/device-tree-bindings/pinctrl/marvell,armada-cp110-pinctrl.txt b/doc/device-tree-bindings/pinctrl/marvell,armada-cp110-pinctrl.txt
new file mode 100644 (file)
index 0000000..3adcf3a
--- /dev/null
@@ -0,0 +1,270 @@
+       Functions of Armada CP110 pin controller
+       Function 0x0 for any MPP ID activates GPIO pin mode
+       Function 0xc for any MPP ID activates DEBUG_BUS pin mode
+-------------------------------------------------------------------------------
+MPP#   0x1                     0x2             0x3             0x4
+-------------------------------------------------------------------------------
+0      DEV_ALE[1]              AU_I2SMCLK      GE0_RXD[3]      TDM_PCLK
+1      DEV_ALE[0]              AU_I2SDO_SPDIFO GE0_RXD[2]      TDM_DRX
+2      DEV_AD[15]              AU_I2SEXTCLK    GE0_RXD[1]      TDM_DTX
+3      DEV_AD[14]              AU_I2SLRCLK     GE0_RXD[0]      TDM_FSYNC
+4      DEV_AD[13]              AU_I2SBCLK      GE0_RXCTL       TDM_RSTn
+5      DEV_AD[12]              AU_I2SDI        GE0_RXCLK       TDM_INTn
+6      DEV_AD[11]              -               GE0_TXD[3]      SPI0_CSn[2]
+7      DEV_AD[10]              -               GE0_TXD[2]      SPI0_CSn[1]
+8      DEV_AD[9]               -               GE0_TXD[1]      SPI0_CSn[0]
+9      DEV_AD[8]               -               GE0_TXD[0]      SPI0_MOSI
+10     DEV_READYn              -               GE0_TXCTL       SPI0_MISO
+11     DEV_WEn[1]              -               GE0_TXCLKOUT    SPI0_CLK
+12     DEV_CLK_OUT             NF_RBn[1]       SPI1_CSn[1]     GE0_RXCLK
+13     DEV_BURSTn              NF_RBn[0]       SPI1_MISO       GE0_RXCTL
+14     DEV_BOOTCSn             DEV_CSn[0]      SPI1_CSn[0]     SPI0_CSn[3]
+15     DEV_AD[7]               -               SPI1_MOSI       -
+16     DEV_AD[6]               -               SPI1_CLK        -
+17     DEV_AD[5]               -               -               GE0_TXD[3]
+18     DEV_AD[4]               -               -               GE0_TXD[2]
+19     DEV_AD[3]               -               -               GE0_TXD[1]
+20     DEV_AD[2]               -               -               GE0_TXD[0]
+21     DEV_AD[1]               -               -               GE0_TXCTL
+22     DEV_AD[0]               -               -               GE0_TXCLKOUT
+23     DEV_A[1]                -               -               -
+24     DEV_A[0]                -               -               -
+25     DEV_OEn -               -               -               -
+26     DEV_WEn[0]              -               -               -
+27     DEV_CSn[0]              SPI1_MISO       MSS_GPIO[4]     GE0_RXD[3]
+28     DEV_CSn[1]              SPI1_CSn[0]     MSS_GPIO[5]     GE0_RXD[2]
+29     DEV_CSn[2]              SPI1_MOSI       MSS_GPIO[6]     GE0_RXD[1]
+30     DEV_CSn[3]              SPI1_CLK        MSS_GPIO[7]     GE0_RXD[0]
+31     DEV_A[2]                -               MSS_GPIO[4]     -
+32     MII_COL                 MII_TXERR       MSS_SPI_MISO    TDM_DRX
+33     MII_TXCLK               SDIO_PWR1[0]    MSS_SPI_CSn     TDM_FSYNC
+34     MII_RXERR               SDIO_PWR1[1]    MSS_SPI_MOSI    TDM_DTX
+35     SATA1_PRESENT_ACTIVEn   TWSI1_SDA       MSS_SPI_CLK     TDM_PCLK
+36     SYNCE2_CLK              TWSI1_SCK       PTP_CLK         SYNCE1_CLK
+37     UART2_RXD               TWSI0_SCK       PTP_PCLK_OUT    TDM_INTn
+38     UART2_TXD               TWSI0_SDA       PTP_PULSE       TDM_RSTn
+39     SDIO_WR_PROTECT         -       -       AU_I2SBCLK      PTP_CLK
+40     SDIO_PWR1[1]            SYNCE1_CLK      MSS_TWSI_SDA    AU_I2SDO_SPDIFO
+41     SDIO_PWR1[0]            SDIO_BUS_PWR    MSS_TWSI_SCK    AU_I2SLRCLK
+42     SDIO_V18_EN             SDIO_WR_PROTECT SYNCE2_CLK      AU_I2SMCLK
+43     SDIO_CARD_DETECT        -               SYNCE1_CLK      AU_I2SEXTCLK
+44     GE1_TXD[2]              -               -               -
+45     GE1_TXD[3]              -               -               -
+46     GE1_TXD[1]              -               -               -
+47     GE1_TXD[0]              -               -               -
+48     GE1_TXCTL_MII_TXEN      -               -               -
+49     GE1_TXCLKOUT            MII_CRS         -               -
+50     GE1_RXCLK               MSS_TWSI_SDA    -               -
+51     GE1_RXD[0]              MSS_TWSI_SCK    -               -
+52     GE1_RXD[1]              SYNCE1_CLK      -               SYNCE2_CLK
+53     GE1_RXD[2]              -               PTP_CLK         -
+54     GE1_RXD[3]              SYNCE2_CLK      PTP_PCLK_OUT    SYNCE1_CLK
+55     GE1_RXCTL_MII_RXDV      -               PTP_PULSE       -
+56     -                       -               -               TDM_DRX
+57     -                       MSS_TWSI_SDA    PTP_PCLK_OUT    TDM_INTn
+58     -                       MSS_TWSI_SCK    PTP_CLK         TDM_RSTn
+59     MSS_GPIO[7]             SYNCE2_CLK      -               TDM_FSYNC
+60     MSS_GPIO[6]             -               PTP_PULSE       TDM_DTX
+61     MSS_GPIO[5]             -               PTP_CLK         TDM_PCLK
+62     MSS_GPIO[4]             SYNCE1_CLK      PTP_PCLK_OUT    -
+
+-------------------------------------------------------------------------------
+MPP#   0x5                     0x6                     0x7
+-------------------------------------------------------------------------------
+0      -                       PTP_PULSE               MSS_TWSI_SDA
+1      -                       PTP_CLK                 MSS_TWSI_SCK
+2      MSS_UART_RXD            PTP_PCLK_OUT            TWSI1_SCK
+3      MSS_UART_TXD            PCIe_RSTOUTn            TWSI1_SDA
+4      MSS_UART_RXD            UART1_CTS               PCIe0_CLKREQ
+5      MSS_UART_TXD            UART1_RTS               PCIe1_CLKREQ
+6      AU_I2SEXTCLK            SATA1_PRESENT_ACTIVEn   PCIe2_CLKREQ
+7      SPI1_CSn[1]             SATA0_PRESENT_ACTIVEn   LED_DATA
+8      SPI1_CSn[0]             UART0_CTS               LED_STB
+9      SPI1_MOSI               -                       PCIe_RSTOUTn
+10     SPI1_MISO               UART0_CTS               SATA1_PRESENT_ACTIVEn
+11     SPI1_CLK                UART0_RTS               LED_CLK
+12     -                       -                       -
+13     -                       -                       -
+14     AU_I2SEXTCLK            SPI0_MISO               SATA0_PRESENT_ACTIVEn
+15     -                       SPI0_MOSI               -
+16     -                       -                       -
+17     -                       -                       -
+18     -                       -                       -
+19     -                       -                       -
+20     -                       -                       -
+21     -                       -                       -
+22     -                       -                       -
+23     AU_I2SMCLK              -                       -
+24     AU_I2SLRCLK             -                       -
+25     AU_I2SDO_SPDIFO         -                       -
+26     AU_I2SBCLK              -                       -
+27     SPI0_CSn[4]             -                       -
+28     SPI0_CSn[5]             PCIe2_CLKREQ            PTP_PULSE
+29     SPI0_CSn[6]             PCIe1_CLKREQ            PTP_CLK
+30     SPI0_CSn[7]             PCIe0_CLKREQ            PTP_PCLK_OUT
+31     -                       PCIe_RSTOUTn            -
+32     AU_I2SEXTCLK            AU_I2SDI                GE_MDIO
+33     AU_I2SMCLK              SDIO_BUS_PWR            -
+34     AU_I2SLRCLK             SDIO_WR_PROTECT         GE_MDC
+35     AU_I2SDO_SPDIFO         SDIO_CARD_DETECT        XG_MDIO
+36     AU_I2SBCLK              SATA0_PRESENT_ACTIVEn   XG_MDC
+37     MSS_TWSI_SCK            SATA1_PRESENT_ACTIVEn   GE_MDC
+38     MSS_TWSI_SDA            SATA0_PRESENT_ACTIVEn   GE_MDIO
+39     SPI0_CSn[1]             -                       -
+40     PTP_PCLK_OUT            SPI0_CLK                UART1_TXD
+41     PTP_PULSE               SPI0_MOSI               UART1_RXD
+42     MSS_UART_TXD            SPI0_MISO               UART1_CTS
+43     MSS_UART_RXD            SPI0_CSn[0]             UART1_RTS
+44     -                       -                       UART0_RTS
+45     -                       -                       UART0_TXD
+46     -                       -                       UART1_RTS
+47     SPI1_CLK                -                       UART1_TXD
+48     SPI1_MOSI               -                       -
+49     SPI1_MISO               -                       UART1_RXD
+50     SPI1_CSn[0]             UART2_TXD               UART0_RXD
+51     SPI1_CSn[1]             UART2_RXD               UART0_CTS
+52     SPI1_CSn[2]             -                       UART1_CTS
+53     SPI1_CSn[3]             -                       UART1_RXD
+54     -                       -                       -
+55     -                       -                       -
+56     AU_I2SDO_SPDIFO         SPI0_CLK                UART1_RXD
+57     AU_I2SBCLK              SPI0_MOSI               UART1_TXD
+58     AU_I2SDI                SPI0_MISO               UART1_CTS
+59     AU_I2SLRCLK             SPI0_CSn[0]             UART0_CTS
+60     AU_I2SMCLK              SPI0_CSn[1]             UART0_RTS
+61     AU_I2SEXTCLK            SPI0_CSn[2]             UART0_TXD
+62     SATA1_PRESENT_ACTIVEn   SPI0_CSn[3]             UART0_RXD
+
+-------------------------------------------------------------------------------
+MPP#   0x8                     0x9                     0xA
+-------------------------------------------------------------------------------
+0      UART0_RXD               SATA0_PRESENT_ACTIVEn   GE_MDIO
+1      UART0_TXD               SATA1_PRESENT_ACTIVEn   GE_MDC
+2      UART1_RXD               SATA0_PRESENT_ACTIVEn   XG_MDC
+3      UART1_TXD               SATA1_PRESENT_ACTIVEn   XG_MDIO
+4      UART3_RXD               -                       GE_MDC
+5      UART3_TXD               -                       GE_MDIO
+6      UART0_RXD               PTP_PULSE               -
+7      UART0_TXD               PTP_CLK                 -
+8      UART2_RXD               PTP_PCLK_OUT            SYNCE1_CLK
+9      -                       -                       SYNCE2_CLK
+10     -                       -                       -
+11     UART2_TXD               SATA0_PRESENT_ACTIVEn   -
+12     -                       -                       -
+13     MSS_SPI_MISO            -                       -
+14     MSS_SPI_CSn             -                       -
+15     MSS_SPI_MOSI            -                       -
+16     MSS_SPI_CLK             -                       -
+17     -                       -                       -
+18     -                       -                       -
+19     -                       -                       -
+20     -                       -                       -
+21     -                       -                       -
+22     -                       -                       -
+23     -                       -                       -
+24     -                       -                       -
+25     -                       -                       -
+26     -                       -                       -
+27     GE_MDIO                 SATA0_PRESENT_ACTIVEn   UART0_RTS
+28     GE_MDC                  SATA1_PRESENT_ACTIVEn   UART0_CTS
+29     MSS_TWSI_SDA            SATA0_PRESENT_ACTIVEn   UART0_RXD
+30     MSS_TWSI_SCK            SATA1_PRESENT_ACTIVEn   UART0_TXD
+31     GE_MDC                  -                       -
+32     SDIO_V18_EN             PCIe1_CLKREQ            MSS_GPIO[0]
+33     XG_MDIO                 PCIe2_CLKREQ            MSS_GPIO[1]
+34     -                       PCIe0_CLKREQ            MSS_GPIO[2]
+35     GE_MDIO                 PCIe_RSTOUTn            MSS_GPIO[3]
+36     GE_MDC                  PCIe2_CLKREQ            MSS_GPIO[5]
+37     XG_MDC                  PCIe1_CLKREQ            MSS_GPIO[6]
+38     XG_MDIO                 AU_I2SEXTCLK            MSS_GPIO[7]
+39     SATA1_PRESENT_ACTIVEn                           MSS_GPIO[0]
+40     GE_MDIO                 SATA0_PRESENT_ACTIVEn   MSS_GPIO[1]
+41     GE_MDC                  SATA1_PRESENT_ACTIVEn   MSS_GPIO[2]
+42     XG_MDC                  SATA0_PRESENT_ACTIVEn   MSS_GPIO[4]
+43     XG_MDIO                 SATA1_PRESENT_ACTIVEn   MSS_GPIO[5]
+44     -                       -                       -
+45     -                       PCIe_RSTOUTn            -
+46     -                       -                       -
+47     GE_MDC                  CLKOUT                  -
+48     XG_MDC                  -                       -
+49     GE_MDIO                 PCIe0_CLKREQ            SDIO_V18_EN
+50     XG_MDIO                 -                       SDIO_PWR1[1]
+51     -                       -                       SDIO_PWR1[0]
+52     LED_CLK                 PCIe_RSTOUTn            PCIe0_CLKREQ
+53     LED_STB                 -                       -
+54     LED_DATA                -                       SDIO_HW_RST
+55     -                       -                       SDIO_LED
+56     -                       SATA1_PRESENT_ACTIVEn   -
+57     -                       SATA0_PRESENT_ACTIVEn   -
+58     LED_CLK                 -                       -
+59     LED_STB                 UART1_TXD               -
+60     LED_DATA                UART1_RXD               -
+61     UART2_TXD               SATA1_PRESENT_ACTIVEn   GE_MDIO
+62     UART2_RXD               SATA0_PRESENT_ACTIVEn   GE_MDC
+
+-------------------------------------------------------------------------------
+MPP#   0xB                     0xD                     0xE
+-------------------------------------------------------------------------------
+0      -                       -                       -
+1      -                       -                       -
+2      -                       -                       -
+3      -                       -                       -
+4      -                       -                       -
+5      -                       -                       -
+6      -                       -                       -
+7      -                       -                       -
+8      -                       -                       -
+9      -                       -                       -
+10     -                       -                       -
+11     -                       CLKOUT_MPP_11           -
+12     -                       -                       -
+13     -                       -                       -
+14     -                       -                       -
+15     PTP_PULSE_CP2CP         SAR_IN[5]               -
+16     -                       SAR_IN[3]               -
+17     -                       SAR_IN[6]               -
+18     PTP_CLK_CP2CP           SAR_IN[11]              -
+19     WAKEUP_OUT_CP2CP        SAR_IN[7]               -
+20     -                       SAR_IN[9]               -
+21     SEI_IN_CP2CP            SAR_IN[8]               -
+22     WAKEUP_IN_CP2CP         SAR_IN[10]              -
+23     LINK_RD_IN_CP2CP        SAR_IN[4]               -
+24     -                       -                       -
+25     -                       CLKOUT_MPP_25           -
+26     -                       SAR_IN[0]               -
+27     REI_IN_CP2CP            SAR_IN[1]               -
+28     LED_DATA                SAR_IN[2]               -
+29     LED_STB                 AVS_FB_IN_CP2CP         -
+30     LED_CLK                 SAR_IN[13]              -
+31     -                       -                       -
+32     -                       SAR_CP2CP_OUT[0]        -
+33     -                       SAR_CP2CP_OUT[1]        -
+34     -                       SAR_CP2CP_OUT[2]        -
+35     -                       SAR_CP2CP_OUT[3]        -
+36     -                       CLKIN                   -
+37     LINK_RD_OUT_CP2CP       SAR_CP2CP_OUT[4]        -
+38     PTP_PULSE_CP2CP         SAR_CP2CP_OUT[5]        -
+39     -                       AVS_FB_OUT_CP2CP        -
+40     -                       -                       -
+41     REI_OUT_CP2CP           -                       -
+42     -                       SAR_CP2CP_OUT[9]        -
+43     WAKEUP_OUT_CP2CP        SAR_CP2CP_OUT[10]       -
+44     PTP_CLK_CP2CP           SAR_CP2CP_OUT[11]       -
+45     -                       SAR_CP2CP_OUT[6]        -
+46     -                       SAR_CP2CP_OUT[13]       -
+47     -                       -                       -
+48     WAKEUP_IN_CP2CP         SAR_CP2CP_OUT[7]        -
+49     SEI_OUT_CP2CP           SAR_CP2CP_OUT[8]        -
+50     -                       -                       -
+51     -                       -                       -
+52     -                       -                       -
+53     SDIO_LED                -                       -
+54     SDIO_WR_PROTECT         -                       -
+55     SDIO_CARD_DETECT        -                       -
+56     -                       -                       SDIO0_CLK
+57     -                       -                       SDIO0_CMD
+58     -                       -                       SDIO0_D[0]
+59     -                       -                       SDIO0_D[1]
+60     -                       -                       SDIO0_D[2]
+61     -                       -                       SDIO0_D[3]
+62     -                       -                       -
diff --git a/doc/device-tree-bindings/pinctrl/marvell,mvebu-pinctrl.txt b/doc/device-tree-bindings/pinctrl/marvell,mvebu-pinctrl.txt
new file mode 100644 (file)
index 0000000..5f86c0a
--- /dev/null
@@ -0,0 +1,113 @@
+The pinctrl driver enables Marvell Armada 8K SoCs to configure the multi-purpose
+pins (mpp) to a specific function.
+A Marvell SoC pin configuration node is a node of a group of pins which can
+be used for a specific device or function. Each node requires one or more
+mpp pins or group of pins and a mpp function common to all pins.
+
+Required properties for the pinctrl driver:
+- compatible:  "marvell,mvebu-pinctrl",
+               "marvell,armada-ap806-pinctrl",
+               "marvell,a70x0-pinctrl",
+               "marvell,a80x0-cp0-pinctrl",
+               "marvell,a80x0-cp1-pinctrl"
+- bank-name:   A string defining the pinc controller bank name
+- reg:                 A pair of values defining the pin controller base address
+               and the address space
+- pin-count:   Numeric value defining the amount of multi purpose pins
+               included in this bank
+- max-func:    Numeric value defining the maximum function value for
+               pins in this bank
+- pin-func:    Array of pin function values for every pin in the bank.
+               When the function value for a specific pin equal 0xFF,
+               the pin configuration is skipped and a default function
+               value is used for this pin.
+
+The A8K is a hybrid SoC that contains several silicon dies interconnected in
+a single package. Each such die may have a separate pin controller.
+
+Example:
+/ {
+       ap806 {
+               config-space {
+                       pinctl: pinctl@6F4000 {
+                               compatible = "marvell,mvebu-pinctrl",
+                                            "marvell,armada-ap806-pinctrl";
+                               bank-name ="apn-806";
+                               reg = <0x6F4000 0x10>;
+                               pin-count = <20>;
+                               max-func = <3>;
+                               /* MPP Bus:
+                                * SPI0 [0-3]
+                                * I2C0 [4-5]
+                                * UART0 [11,19]
+                                */
+                                         /* 0 1 2 3 4 5 6 7 8 9 */
+                               pin-func = < 3 3 3 3 3 3 0 0 0 0
+                                            0 3 0 0 0 0 0 0 0 3>;
+                       };
+               };
+       };
+
+       cp110-master {
+               config-space {
+                       cpm_pinctl: pinctl@44000 {
+                               compatible = "marvell,mvebu-pinctrl",
+                                            "marvell,a70x0-pinctrl",
+                                            "marvell,a80x0-cp0-pinctrl";
+                               bank-name ="cp0-110";
+                               reg = <0x440000 0x20>;
+                               pin-count = <63>;
+                               max-func = <0xf>;
+                               /* MPP Bus:
+                                * [0-31] = 0xff: Keep default CP0_shared_pins:
+                                * [11] CLKOUT_MPP_11 (out)
+                                * [23] LINK_RD_IN_CP2CP (in)
+                                * [25] CLKOUT_MPP_25 (out)
+                                * [29] AVS_FB_IN_CP2CP (in)
+                                * [32,34] SMI
+                                * [31]    GPIO: push button/Wake
+                                * [35-36] GPIO
+                                * [37-38] I2C
+                                * [40-41] SATA[0/1]_PRESENT_ACTIVEn
+                                * [42-43] XSMI
+                                * [44-55] RGMII1
+                                * [56-62] SD
+                                */
+                                       /*   0    1    2    3    4    5    6    7    8    9 */
+                               pin-func = < 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                                            0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                                            0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                                            0xff 0    7    0    7    0    0    2    2    0
+                                            0    0    8    8    1    1    1    1    1    1
+                                            1    1    1    1    1    1    0xE  0xE  0xE  0xE
+                                            0xE  0xE  0xE>;
+                       };
+               };
+       };
+
+       cp110-slave {
+               config-space {
+                       cps_pinctl: pinctl@44000 {
+                               compatible = "marvell,mvebu-pinctrl",
+                                            "marvell,a80x0-cp1-pinctrl";
+                               bank-name ="cp1-110";
+                               reg = <0x440000 0x20>;
+                               pin-count = <63>;
+                               max-func = <0xf>;
+                               /* MPP Bus:
+                                * [0-11]  RGMII0
+                                * [27,31] GE_MDIO/MDC
+                                * [32-62] = 0xff: Keep default CP1_shared_pins:
+                                */
+                                       /*   0    1    2    3    4    5    6    7    8    9 */
+                               pin-func = < 0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3
+                                            0x3  0x3  0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                                            0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x8  0xff 0xff
+                                            0xff 0x8  0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                                            0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                                            0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
+                                            0xff 0xff 0xff>;
+                       };
+               };
+       };
+}
diff --git a/doc/driver-model/i2c-howto.txt b/doc/driver-model/i2c-howto.txt
new file mode 100644 (file)
index 0000000..605d3ef
--- /dev/null
@@ -0,0 +1,56 @@
+How to port a serial driver to driver model
+===========================================
+
+Over half of the I2C drivers have been converted as at November 2016. These
+ones remain:
+
+   adi_i2c
+   davinci_i2c
+   fti2c010
+   ihs_i2c
+   kona_i2c
+   lpc32xx_i2c
+   pca9564_i2c
+   ppc4xx_i2c
+   rcar_i2c
+   sh_i2c
+   sh_sh7734_i2c
+   soft_i2c
+   tsi108_i2c
+   zynq_i2c
+
+The deadline for this work is the end of June 2017. If no one steps
+forward to convert these, at some point there may come a patch to remove them!
+
+Here is a suggested approach for converting your I2C driver over to driver
+model. Please feel free to update this file with your ideas and suggestions.
+
+- #ifdef out all your own I2C driver code (#ifndef CONFIG_DM_I2C)
+- Define CONFIG_DM_I2C for your board, vendor or architecture
+- If the board does not already use driver model, you need CONFIG_DM also
+- Your board should then build, but will not work fully since there will be
+    no I2C driver
+- Add the U_BOOT_DRIVER piece at the end (e.g. copy tegra_i2c.c for example)
+- Add a private struct for the driver data - avoid using static variables
+- Implement each of the driver methods, perhaps by calling your old methods
+- You may need to adjust the function parameters so that the old and new
+    implementations can share most of the existing code
+- If you convert all existing users of the driver, remove the pre-driver-model
+    code
+
+In terms of patches a conversion series typically has these patches:
+- clean up / prepare the driver for conversion
+- add driver model code
+- convert at least one existing board to use driver model serial
+- (if no boards remain that don't use driver model) remove the old code
+
+This may be a good time to move your board to use device tree also. Mostly
+this involves these steps:
+
+- define CONFIG_OF_CONTROL and CONFIG_OF_SEPARATE
+- add your device tree files to arch/<arch>/dts
+- update the Makefile there
+- Add stdout-path to your /chosen device tree node if it is not already there
+- build and get u-boot-dtb.bin so you can test it
+- Your drivers can now use device tree
+- For device tree in SPL, define CONFIG_SPL_OF_CONTROL
index b78e194ea89893560eb515a0f067f9b1311cdfd3..ec6a7dbb82cf1e43bef51dc5f63c71fc3e7b5d4a 100644 (file)
@@ -19,6 +19,7 @@ alias alisonwang     Alison Wang <alison.wang@freescale.com>
 alias angelo_ts      Angelo Dureghello <angelo@sysam.it>
 alias bmeng          Bin Meng <bmeng.cn@gmail.com>
 alias danielschwierzeck Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
+alias dinh          Dinh Nguyen <dinguyen@kernel.org>
 alias galak          Kumar Gala <galak@kernel.crashing.org>
 alias hs             Heiko Schocher <hs@denx.de>
 alias ijc            Ian Campbell <ijc+uboot@hellion.org.uk>
@@ -70,7 +71,7 @@ alias s3c            samsung
 alias s5pc           samsung
 alias samsung        uboot, prom
 alias snapdragon     uboot, mateusz
-alias socfpga        uboot, marex, Dinh Nguyen <dinguyen@opensource.altera.com>
+alias socfpga        uboot, marex, dinh
 alias sunxi          uboot, jagan, maxime
 alias tegra          uboot, sjg, Tom Warren <twarren@nvidia.com>, Stephen Warren <swarren@nvidia.com>
 alias tegra2         tegra
diff --git a/doc/mvebu/cmd/bubt.txt b/doc/mvebu/cmd/bubt.txt
new file mode 100644 (file)
index 0000000..6f9f525
--- /dev/null
@@ -0,0 +1,64 @@
+BUBT (Burn ATF) command
+--------------------------
+Bubt command is used to burn a new ATF image to flash device.
+
+The bubt command gets the following parameters: ATF file name, destination device and source device.
+bubt [file-name] [destination [source]]
+       - file-name             Image file name to burn. default = flash-image.bin
+       - destination           Flash to burn to [spi, nand, mmc]. default = active flash
+       - source                Source to load image from [tftp, usb]. default = tftp
+
+Examples:
+       bubt                            - Burn flash-image.bin from tftp to active flash
+       bubt latest-spi.bin nand        - Burn latest-spi.bin from tftp to NAND flash
+
+Notes:
+- For the TFTP interface set serverip and ipaddr.
+- To burn image to SD/eMMC device, the target is defined
+  by parameters CONFIG_SYS_MMC_ENV_DEV and CONFIG_SYS_MMC_ENV_PART.
+
+Bubt command details (burn image step by-step)
+----------------------------------------------
+This section describes bubt command flow:
+
+1. Fetch the requested ATF image from an available interface (USB/SD/SATA/XDB, etc.)
+   into the DRAM, and place it at <load_address>
+   Example: when using the FAT file system on USB flash device:
+   # usb reset
+   # fatls usb 0 (see files in device)
+   # fatload usb 0 <load_address> <file_name>
+
+2. Erase the target device:
+       - NAND:         # nand erase 0 100000
+       - SPI:          # sf probe 0
+                       # sf erase 0 100000
+       - SD/eMMC:      # mmc dev <dev_id> <boot_partition>
+
+Notes:
+- The eMMC has 2 boot partitions (BOOT0 and BOOT1) and a user data partition (DATA).
+  The boot partitions are numbered as partition 1 and 2 in MMC driver.
+  Number 0 is used for user data partition and should not be utilized for storing
+  boot images and U-Boot environment in RAW mode since it will break file system
+  structures usually located here.
+  The default boot partition is BOOT0. It is selected by the following parameter:
+  CONFIG_SYS_MMC_ENV_PART=1
+  Valid values for this parameter are 1 for BOOT0 and 2 for BOOT1.
+  Please never use partition number 0 here!
+  The eMMC has 2 boot partitions (BOOT0 and BOOT1) and a user data partition (DATA).
+  The boot partitions are numbered as partition 1 and 2 in MMC driver.
+  Number 0 is used for user data partition and should not be utilized for storing
+  boot images and U-Boot environment in RAW mode since it will break file system
+  structures usually located here.
+  The default boot partition is BOOT0. It is selected by the following parameter:
+  CONFIG_SYS_MMC_ENV_PART=1
+  Valid values for this parameter are 1 for BOOT0 and 2 for BOOT1.
+  Please never use partition number 0 here!
+- The partition number is ignored if the target device is SD card.
+- The boot image offset starts at block 0 for eMMC and block 1 for SD devices.
+  The block 0 on SD devices is left for MBR storage.
+
+3. Write the ATF image:
+       - NAND:         # nand write <load_address> 0 <ATF Size>
+       - SPI:          # sf write <load_address> 0 <ATF Size>
+       - SD/eMMC:      # mmc write <load_address> [0|1] <ATF Size>/<block_size>
+
index 414d2dc464f1e71741abd672ecd2d4dd20ba90fd..78e3da442d0fed830bcb416ef37a2aa99562b140 100644 (file)
@@ -572,6 +572,7 @@ static int mv_ata_exec_ata_cmd(int port, struct sata_fis_h2d *cfis,
        struct mv_priv *priv = (struct mv_priv *)sata_dev_desc[port].priv;
        struct crqb *req;
        int slot;
+       u32 start;
 
        if (len >= 64 * 1024) {
                printf("We only support <64K transfers for now\n");
@@ -628,7 +629,9 @@ static int mv_ata_exec_ata_cmd(int port, struct sata_fis_h2d *cfis,
                CRQB_SECTCOUNT_COUNT_EXP_MASK;
 
        /* Flush data */
-       flush_dcache_range((u32)req, (u32)req + sizeof(*req));
+       start = (u32)req & ~(ARCH_DMA_MINALIGN - 1);
+       flush_dcache_range(start,
+                          start + ALIGN(sizeof(*req), ARCH_DMA_MINALIGN));
 
        /* Trigger operation */
        slot = get_next_reqip(port);
@@ -643,8 +646,11 @@ static int mv_ata_exec_ata_cmd(int port, struct sata_fis_h2d *cfis,
        process_responses(port);
 
        /* Invalidate data on read */
-       if (buffer && len)
-               invalidate_dcache_range((u32)buffer, (u32)buffer + len);
+       if (buffer && len) {
+               start = (u32)buffer & ~(ARCH_DMA_MINALIGN - 1);
+               invalidate_dcache_range(start,
+                                       start + ALIGN(len, ARCH_DMA_MINALIGN));
+       }
 
        return len;
 }
index 32b09679e2ec4fa9a24ad88ab03ddf9c4cb59fe8..f7e87b8ee9d2532bca6ae971f3ead304b99d09ba 100644 (file)
@@ -5,14 +5,14 @@
  */
 
 /*
- * Generic driver for Freescale DDR/DDR2/DDR3 memory controller.
+ * Generic driver for Freescale DDR/DDR2/DDR3/DDR4 memory controller.
  * Based on code from spd_sdram.c
  * Author: James Yang [at freescale.com]
  */
 
 #include <common.h>
 #include <fsl_ddr_sdram.h>
-
+#include <fsl_errata.h>
 #include <fsl_ddr.h>
 #include <fsl_immap.h>
 #include <asm/io.h>
@@ -2306,6 +2306,38 @@ compute_fsl_memctl_config_regs(const unsigned int ctrl_num,
        unsigned int ip_rev = 0;
        unsigned int unq_mrs_en = 0;
        int cs_en = 1;
+#ifdef CONFIG_SYS_FSL_ERRATUM_A009942
+       unsigned int ddr_freq;
+#endif
+#if (defined(CONFIG_SYS_FSL_ERRATUM_A008378) && \
+       defined(CONFIG_SYS_FSL_DDRC_GEN4)) || \
+       defined(CONFIG_SYS_FSL_ERRATUM_A009942)
+       struct ccsr_ddr __iomem *ddrc;
+
+       switch (ctrl_num) {
+       case 0:
+               ddrc = (void *)CONFIG_SYS_FSL_DDR_ADDR;
+               break;
+#if defined(CONFIG_SYS_FSL_DDR2_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 1)
+       case 1:
+               ddrc = (void *)CONFIG_SYS_FSL_DDR2_ADDR;
+               break;
+#endif
+#if defined(CONFIG_SYS_FSL_DDR3_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 2)
+       case 2:
+               ddrc = (void *)CONFIG_SYS_FSL_DDR3_ADDR;
+               break;
+#endif
+#if defined(CONFIG_SYS_FSL_DDR4_ADDR) && (CONFIG_NUM_DDR_CONTROLLERS > 3)
+       case 3:
+               ddrc = (void *)CONFIG_SYS_FSL_DDR4_ADDR;
+               break;
+#endif
+       default:
+               printf("%s unexpected ctrl_num = %u\n", __func__, ctrl_num);
+               return 1;
+       }
+#endif
 
        memset(ddr, 0, sizeof(fsl_ddr_cfg_regs_t));
 
@@ -2526,5 +2558,105 @@ compute_fsl_memctl_config_regs(const unsigned int ctrl_num,
                ddr->debug[2] |= 0x00000200;    /* set bit 22 */
 #endif
 
+#if defined(CONFIG_SYS_FSL_ERRATUM_A008378) && defined(CONFIG_SYS_FSL_DDRC_GEN4)
+       /* Erratum applies when accumulated ECC is used, or DBI is enabled */
+#define IS_ACC_ECC_EN(v) ((v) & 0x4)
+#define IS_DBI(v) ((((v) >> 12) & 0x3) == 0x2)
+       if (has_erratum_a008378()) {
+               if (IS_ACC_ECC_EN(ddr->ddr_sdram_cfg) ||
+                   IS_DBI(ddr->ddr_sdram_cfg_3)) {
+                       ddr->debug[28] = ddr_in32(&ddrc->debug[28]);
+                       ddr->debug[28] |= (0x9 << 20);
+               }
+       }
+#endif
+
+#ifdef CONFIG_SYS_FSL_ERRATUM_A009942
+       ddr_freq = get_ddr_freq(ctrl_num) / 1000000;
+       ddr->debug[28] |= ddr_in32(&ddrc->debug[28]);
+       ddr->debug[28] &= 0xff0fff00;
+       if (ddr_freq <= 1333)
+               ddr->debug[28] |= 0x0080006a;
+       else if (ddr_freq <= 1600)
+               ddr->debug[28] |= 0x0070006f;
+       else if (ddr_freq <= 1867)
+               ddr->debug[28] |= 0x00700076;
+       else if (ddr_freq <= 2133)
+               ddr->debug[28] |= 0x0060007b;
+       if (popts->cpo_sample)
+               ddr->debug[28] = (ddr->debug[28] & 0xffffff00) |
+                                 popts->cpo_sample;
+#endif
+
        return check_fsl_memctl_config_regs(ddr);
 }
+
+#ifdef CONFIG_SYS_FSL_ERRATUM_A009942
+/*
+ * This additional workaround of A009942 checks the condition to determine if
+ * the CPO value set by the existing A009942 workaround needs to be updated.
+ * If need, print a warning to prompt user reconfigure DDR debug_29[24:31] with
+ * expected optimal value, the optimal value is highly board dependent.
+ */
+void erratum_a009942_check_cpo(void)
+{
+       struct ccsr_ddr __iomem *ddr =
+               (struct ccsr_ddr __iomem *)(CONFIG_SYS_FSL_DDR_ADDR);
+       u32 cpo, cpo_e, cpo_o, cpo_target, cpo_optimal;
+       u32 cpo_min = ddr_in32(&ddr->debug[9]) >> 24;
+       u32 cpo_max = cpo_min;
+       u32 sdram_cfg, i, tmp, lanes, ddr_type;
+       bool update_cpo = false, has_ecc = false;
+
+       sdram_cfg = ddr_in32(&ddr->sdram_cfg);
+       if (sdram_cfg & SDRAM_CFG_32_BE)
+               lanes = 4;
+       else if (sdram_cfg & SDRAM_CFG_16_BE)
+               lanes = 2;
+       else
+               lanes = 8;
+
+       if (sdram_cfg & SDRAM_CFG_ECC_EN)
+               has_ecc = true;
+
+       /* determine the maximum and minimum CPO values */
+       for (i = 9; i < 9 + lanes / 2; i++) {
+               cpo = ddr_in32(&ddr->debug[i]);
+               cpo_e = cpo >> 24;
+               cpo_o = (cpo >> 8) & 0xff;
+               tmp = min(cpo_e, cpo_o);
+               if (tmp < cpo_min)
+                       cpo_min = tmp;
+               tmp = max(cpo_e, cpo_o);
+               if (tmp > cpo_max)
+                       cpo_max = tmp;
+       }
+
+       if (has_ecc) {
+               cpo = ddr_in32(&ddr->debug[13]);
+               cpo = cpo >> 24;
+               if (cpo < cpo_min)
+                       cpo_min = cpo;
+               if (cpo > cpo_max)
+                       cpo_max = cpo;
+       }
+
+       cpo_target = ddr_in32(&ddr->debug[28]) & 0xff;
+       cpo_optimal = ((cpo_max + cpo_min) >> 1) + 0x27;
+       debug("cpo_optimal = 0x%x, cpo_target = 0x%x\n", cpo_optimal,
+             cpo_target);
+       debug("cpo_max = 0x%x, cpo_min = 0x%x\n", cpo_max, cpo_min);
+
+       ddr_type = (sdram_cfg & SDRAM_CFG_SDRAM_TYPE_MASK) >>
+                   SDRAM_CFG_SDRAM_TYPE_SHIFT;
+       if (ddr_type == SDRAM_TYPE_DDR4)
+               update_cpo = (cpo_min + 0x3b) < cpo_target ? true : false;
+       else if (ddr_type == SDRAM_TYPE_DDR3)
+               update_cpo = (cpo_min + 0x3f) < cpo_target ? true : false;
+
+       if (update_cpo) {
+               printf("WARN: pls set popts->cpo_sample = 0x%x ", cpo_optimal);
+               printf("in <board>/ddr.c to optimize cpo\n");
+       }
+}
+#endif
index 042af09770f4623f0bd3abd271c9cdf3a968db94..dadcb3abc39b81450b54a3c11e1046aa53c63589 100644 (file)
@@ -47,13 +47,9 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 {
        unsigned int i, bus_width;
        struct ccsr_ddr __iomem *ddr;
-       u32 temp_sdram_cfg;
+       u32 temp32;
        u32 total_gb_size_per_controller;
        int timeout;
-#if defined(CONFIG_SYS_FSL_ERRATUM_A008511) || \
-       defined(CONFIG_SYS_FSL_ERRATUM_A009801)
-       u32 temp32;
-#endif
 
 #ifdef CONFIG_SYS_FSL_ERRATUM_A008511
        u32 mr6;
@@ -61,11 +57,6 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
        u32 vref_seq2[3] = {0xc0, 0xf0, 0x70};  /* for range 2 */
        u32 *vref_seq = vref_seq1;
 #endif
-#if defined(CONFIG_SYS_FSL_ERRATUM_A009942) | \
-       defined(CONFIG_SYS_FSL_ERRATUM_A010165)
-       ulong ddr_freq;
-       u32 tmp;
-#endif
 #ifdef CONFIG_FSL_DDR_BIST
        u32 mtcr, err_detect, err_sbe;
        u32 cs0_bnds, cs1_bnds, cs2_bnds, cs3_bnds, cs0_config;
@@ -73,7 +64,6 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 #ifdef CONFIG_FSL_DDR_BIST
        char buffer[CONFIG_SYS_CBSIZE];
 #endif
-
        switch (ctrl_num) {
        case 0:
                ddr = (void *)CONFIG_SYS_FSL_DDR_ADDR;
@@ -230,16 +220,6 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
                        ddr_out32(&ddr->debug[i], regs->debug[i]);
                }
        }
-#ifdef CONFIG_SYS_FSL_ERRATUM_A008378
-       /* Erratum applies when accumulated ECC is used, or DBI is enabled */
-#define IS_ACC_ECC_EN(v) ((v) & 0x4)
-#define IS_DBI(v) ((((v) >> 12) & 0x3) == 0x2)
-       if (has_erratum_a008378()) {
-               if (IS_ACC_ECC_EN(regs->ddr_sdram_cfg) ||
-                   IS_DBI(regs->ddr_sdram_cfg_3))
-                       ddr_setbits32(&ddr->debug[28], 0x9 << 20);
-       }
-#endif
 
 #ifdef CONFIG_SYS_FSL_ERRATUM_A008511
        /* Part 1 of 2 */
@@ -277,24 +257,11 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
        ddr_out32(&ddr->debug[25], temp32);
 #endif
 
-#ifdef CONFIG_SYS_FSL_ERRATUM_A009942
-       ddr_freq = get_ddr_freq(ctrl_num) / 1000000;
-       tmp = ddr_in32(&ddr->debug[28]);
-       if (ddr_freq <= 1333)
-               ddr_out32(&ddr->debug[28], tmp | 0x0080006a);
-       else if (ddr_freq <= 1600)
-               ddr_out32(&ddr->debug[28], tmp | 0x0070006f);
-       else if (ddr_freq <= 1867)
-               ddr_out32(&ddr->debug[28], tmp | 0x00700076);
-       else if (ddr_freq <= 2133)
-               ddr_out32(&ddr->debug[28], tmp | 0x0060007b);
-#endif
-
 #ifdef CONFIG_SYS_FSL_ERRATUM_A010165
-       ddr_freq = get_ddr_freq(ctrl_num) / 1000000;
-       if ((ddr_freq > 1900) && (ddr_freq < 2300)) {
-               tmp = ddr_in32(&ddr->debug[28]);
-               ddr_out32(&ddr->debug[28], tmp | 0x000a0000);
+       temp32 = get_ddr_freq(ctrl_num) / 1000000;
+       if ((temp32 > 1900) && (temp32 < 2300)) {
+               temp32 = ddr_in32(&ddr->debug[28]);
+               ddr_out32(&ddr->debug[28], temp32 | 0x000a0000);
        }
 #endif
        /*
@@ -312,9 +279,9 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 
 step2:
        /* Set, but do not enable the memory */
-       temp_sdram_cfg = regs->ddr_sdram_cfg;
-       temp_sdram_cfg &= ~(SDRAM_CFG_MEM_EN);
-       ddr_out32(&ddr->sdram_cfg, temp_sdram_cfg);
+       temp32 = regs->ddr_sdram_cfg;
+       temp32 &= ~(SDRAM_CFG_MEM_EN);
+       ddr_out32(&ddr->sdram_cfg, temp32);
 
        /*
         * 500 painful micro-seconds must elapse between
@@ -329,18 +296,18 @@ step2:
 #ifdef CONFIG_DEEP_SLEEP
        if (is_warm_boot()) {
                /* enter self-refresh */
-               temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
-               temp_sdram_cfg |= SDRAM_CFG2_FRC_SR;
-               ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
+               temp32 = ddr_in32(&ddr->sdram_cfg_2);
+               temp32 |= SDRAM_CFG2_FRC_SR;
+               ddr_out32(&ddr->sdram_cfg_2, temp32);
                /* do board specific memory setup */
                board_mem_sleep_setup();
 
-               temp_sdram_cfg = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
+               temp32 = (ddr_in32(&ddr->sdram_cfg) | SDRAM_CFG_BI);
        } else
 #endif
-               temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg) & ~SDRAM_CFG_BI;
+               temp32 = ddr_in32(&ddr->sdram_cfg) & ~SDRAM_CFG_BI;
        /* Let the controller go */
-       ddr_out32(&ddr->sdram_cfg, temp_sdram_cfg | SDRAM_CFG_MEM_EN);
+       ddr_out32(&ddr->sdram_cfg, temp32 | SDRAM_CFG_MEM_EN);
        mb();
        isb();
 
@@ -483,9 +450,9 @@ step2:
 #ifdef CONFIG_DEEP_SLEEP
        if (is_warm_boot()) {
                /* exit self-refresh */
-               temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg_2);
-               temp_sdram_cfg &= ~SDRAM_CFG2_FRC_SR;
-               ddr_out32(&ddr->sdram_cfg_2, temp_sdram_cfg);
+               temp32 = ddr_in32(&ddr->sdram_cfg_2);
+               temp32 &= ~SDRAM_CFG2_FRC_SR;
+               ddr_out32(&ddr->sdram_cfg_2, temp32);
        }
 #endif
 
index 653b7f0c770c965f0e31f84271c478d441413d06..1bfb9d4097ced8f0bb1f604649a1773b554fe0e0 100644 (file)
@@ -174,9 +174,6 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
                        out_be32(&ddr->debug[i], regs->debug[i]);
                }
        }
-#ifdef CONFIG_SYS_FSL_ERRATUM_A_004934
-       out_be32(&ddr->debug[28], 0x30003000);
-#endif
 
 #ifdef CONFIG_SYS_FSL_ERRATUM_DDR_A003474
        out_be32(&ddr->debug[12], 0x00000015);
index 2987081991e5f3318f21431a247891c3a59f6b84..7c86198863c4b59c3762ae9065c7a0caaa833c2e 100644 (file)
@@ -34,7 +34,7 @@ obj-$(CONFIG_SYS_I2C_OMAP34XX) += omap24xx_i2c.o
 obj-$(CONFIG_SYS_I2C_PPC4XX) += ppc4xx_i2c.o
 obj-$(CONFIG_SYS_I2C_RCAR) += rcar_i2c.o
 obj-$(CONFIG_SYS_I2C_ROCKCHIP) += rk_i2c.o
-obj-$(CONFIG_SYS_I2C_S3C24X0) += s3c24x0_i2c.o
+obj-$(CONFIG_SYS_I2C_S3C24X0) += s3c24x0_i2c.o exynos_hs_i2c.o
 obj-$(CONFIG_SYS_I2C_SANDBOX) += sandbox_i2c.o i2c-emul-uclass.o
 obj-$(CONFIG_SYS_I2C_SH) += sh_i2c.o
 obj-$(CONFIG_SYS_I2C_SOFT) += soft_i2c.o
index f0c084132a8d31be56b8a446c64a42afd25dbb38..d340639e1a00830104ef002b074430340c23a11f 100644 (file)
@@ -4,6 +4,9 @@
  * Copyright (c) 2006-2014 Analog Devices Inc.
  *
  * Licensed under the GPL-2 or later.
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index 9ca99c4abd0b04d345c8251aef0203a3abc4c082..c5bd38c67b88934dc7f29b3a7291ef99a21e71dd 100644 (file)
@@ -7,6 +7,9 @@
  * --------------------------------------------------------
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
diff --git a/drivers/i2c/exynos_hs_i2c.c b/drivers/i2c/exynos_hs_i2c.c
new file mode 100644 (file)
index 0000000..9521aeb
--- /dev/null
@@ -0,0 +1,561 @@
+/*
+ * Copyright (c) 2016, Google Inc
+ *
+ * (C) Copyright 2002
+ * David Mueller, ELSOFT AG, d.mueller@elsoft.ch
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <i2c.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/pinmux.h>
+#include "s3c24x0_i2c.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* HSI2C-specific register description */
+
+/* I2C_CTL Register bits */
+#define HSI2C_FUNC_MODE_I2C            (1u << 0)
+#define HSI2C_MASTER                   (1u << 3)
+#define HSI2C_RXCHON                   (1u << 6)       /* Write/Send */
+#define HSI2C_TXCHON                   (1u << 7)       /* Read/Receive */
+#define HSI2C_SW_RST                   (1u << 31)
+
+/* I2C_FIFO_CTL Register bits */
+#define HSI2C_RXFIFO_EN                        (1u << 0)
+#define HSI2C_TXFIFO_EN                        (1u << 1)
+#define HSI2C_TXFIFO_TRIGGER_LEVEL     (0x20 << 16)
+#define HSI2C_RXFIFO_TRIGGER_LEVEL     (0x20 << 4)
+
+/* I2C_TRAILING_CTL Register bits */
+#define HSI2C_TRAILING_COUNT           (0xff)
+
+/* I2C_INT_EN Register bits */
+#define HSI2C_TX_UNDERRUN_EN           (1u << 2)
+#define HSI2C_TX_OVERRUN_EN            (1u << 3)
+#define HSI2C_RX_UNDERRUN_EN           (1u << 4)
+#define HSI2C_RX_OVERRUN_EN            (1u << 5)
+#define HSI2C_INT_TRAILING_EN          (1u << 6)
+#define HSI2C_INT_I2C_EN               (1u << 9)
+
+#define HSI2C_INT_ERROR_MASK   (HSI2C_TX_UNDERRUN_EN |\
+                                HSI2C_TX_OVERRUN_EN  |\
+                                HSI2C_RX_UNDERRUN_EN |\
+                                HSI2C_RX_OVERRUN_EN  |\
+                                HSI2C_INT_TRAILING_EN)
+
+/* I2C_CONF Register bits */
+#define HSI2C_AUTO_MODE                        (1u << 31)
+#define HSI2C_10BIT_ADDR_MODE          (1u << 30)
+#define HSI2C_HS_MODE                  (1u << 29)
+
+/* I2C_AUTO_CONF Register bits */
+#define HSI2C_READ_WRITE               (1u << 16)
+#define HSI2C_STOP_AFTER_TRANS         (1u << 17)
+#define HSI2C_MASTER_RUN               (1u << 31)
+
+/* I2C_TIMEOUT Register bits */
+#define HSI2C_TIMEOUT_EN               (1u << 31)
+
+/* I2C_TRANS_STATUS register bits */
+#define HSI2C_MASTER_BUSY              (1u << 17)
+#define HSI2C_SLAVE_BUSY               (1u << 16)
+#define HSI2C_TIMEOUT_AUTO             (1u << 4)
+#define HSI2C_NO_DEV                   (1u << 3)
+#define HSI2C_NO_DEV_ACK               (1u << 2)
+#define HSI2C_TRANS_ABORT              (1u << 1)
+#define HSI2C_TRANS_SUCCESS            (1u << 0)
+#define HSI2C_TRANS_ERROR_MASK (HSI2C_TIMEOUT_AUTO |\
+                                HSI2C_NO_DEV | HSI2C_NO_DEV_ACK |\
+                                HSI2C_TRANS_ABORT)
+#define HSI2C_TRANS_FINISHED_MASK (HSI2C_TRANS_ERROR_MASK | HSI2C_TRANS_SUCCESS)
+
+
+/* I2C_FIFO_STAT Register bits */
+#define HSI2C_RX_FIFO_EMPTY            (1u << 24)
+#define HSI2C_RX_FIFO_FULL             (1u << 23)
+#define HSI2C_TX_FIFO_EMPTY            (1u << 8)
+#define HSI2C_TX_FIFO_FULL             (1u << 7)
+#define HSI2C_RX_FIFO_LEVEL(x)         (((x) >> 16) & 0x7f)
+#define HSI2C_TX_FIFO_LEVEL(x)         ((x) & 0x7f)
+
+#define HSI2C_SLV_ADDR_MAS(x)          ((x & 0x3ff) << 10)
+
+#define HSI2C_TIMEOUT_US 10000 /* 10 ms, finer granularity */
+
+/*
+ * Wait for transfer completion.
+ *
+ * This function reads the interrupt status register waiting for the INT_I2C
+ * bit to be set, which indicates copletion of a transaction.
+ *
+ * @param i2c: pointer to the appropriate register bank
+ *
+ * @return: I2C_OK in case of successful completion, I2C_NOK_TIMEOUT in case
+ *          the status bits do not get set in time, or an approrpiate error
+ *          value in case of transfer errors.
+ */
+static int hsi2c_wait_for_trx(struct exynos5_hsi2c *i2c)
+{
+       int i = HSI2C_TIMEOUT_US;
+
+       while (i-- > 0) {
+               u32 int_status = readl(&i2c->usi_int_stat);
+
+               if (int_status & HSI2C_INT_I2C_EN) {
+                       u32 trans_status = readl(&i2c->usi_trans_status);
+
+                       /* Deassert pending interrupt. */
+                       writel(int_status, &i2c->usi_int_stat);
+
+                       if (trans_status & HSI2C_NO_DEV_ACK) {
+                               debug("%s: no ACK from device\n", __func__);
+                               return I2C_NACK;
+                       }
+                       if (trans_status & HSI2C_NO_DEV) {
+                               debug("%s: no device\n", __func__);
+                               return I2C_NOK;
+                       }
+                       if (trans_status & HSI2C_TRANS_ABORT) {
+                               debug("%s: arbitration lost\n", __func__);
+                               return I2C_NOK_LA;
+                       }
+                       if (trans_status & HSI2C_TIMEOUT_AUTO) {
+                               debug("%s: device timed out\n", __func__);
+                               return I2C_NOK_TOUT;
+                       }
+                       return I2C_OK;
+               }
+               udelay(1);
+       }
+       debug("%s: transaction timeout!\n", __func__);
+       return I2C_NOK_TOUT;
+}
+
+static int hsi2c_get_clk_details(struct s3c24x0_i2c_bus *i2c_bus)
+{
+       struct exynos5_hsi2c *hsregs = i2c_bus->hsregs;
+       ulong clkin;
+       unsigned int op_clk = i2c_bus->clock_frequency;
+       unsigned int i = 0, utemp0 = 0, utemp1 = 0;
+       unsigned int t_ftl_cycle;
+
+#if (defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
+       clkin = get_i2c_clk();
+#else
+       clkin = get_PCLK();
+#endif
+       /* FPCLK / FI2C =
+        * (CLK_DIV + 1) * (TSCLK_L + TSCLK_H + 2) + 8 + 2 * FLT_CYCLE
+        * uTemp0 = (CLK_DIV + 1) * (TSCLK_L + TSCLK_H + 2)
+        * uTemp1 = (TSCLK_L + TSCLK_H + 2)
+        * uTemp2 = TSCLK_L + TSCLK_H
+        */
+       t_ftl_cycle = (readl(&hsregs->usi_conf) >> 16) & 0x7;
+       utemp0 = (clkin / op_clk) - 8 - 2 * t_ftl_cycle;
+
+       /* CLK_DIV max is 256 */
+       for (i = 0; i < 256; i++) {
+               utemp1 = utemp0 / (i + 1);
+               if ((utemp1 < 512) && (utemp1 > 4)) {
+                       i2c_bus->clk_cycle = utemp1 - 2;
+                       i2c_bus->clk_div = i;
+                       return 0;
+               }
+       }
+       return -EINVAL;
+}
+
+static void hsi2c_ch_init(struct s3c24x0_i2c_bus *i2c_bus)
+{
+       struct exynos5_hsi2c *hsregs = i2c_bus->hsregs;
+       unsigned int t_sr_release;
+       unsigned int n_clkdiv;
+       unsigned int t_start_su, t_start_hd;
+       unsigned int t_stop_su;
+       unsigned int t_data_su, t_data_hd;
+       unsigned int t_scl_l, t_scl_h;
+       u32 i2c_timing_s1;
+       u32 i2c_timing_s2;
+       u32 i2c_timing_s3;
+       u32 i2c_timing_sla;
+
+       n_clkdiv = i2c_bus->clk_div;
+       t_scl_l = i2c_bus->clk_cycle / 2;
+       t_scl_h = i2c_bus->clk_cycle / 2;
+       t_start_su = t_scl_l;
+       t_start_hd = t_scl_l;
+       t_stop_su = t_scl_l;
+       t_data_su = t_scl_l / 2;
+       t_data_hd = t_scl_l / 2;
+       t_sr_release = i2c_bus->clk_cycle;
+
+       i2c_timing_s1 = t_start_su << 24 | t_start_hd << 16 | t_stop_su << 8;
+       i2c_timing_s2 = t_data_su << 24 | t_scl_l << 8 | t_scl_h << 0;
+       i2c_timing_s3 = n_clkdiv << 16 | t_sr_release << 0;
+       i2c_timing_sla = t_data_hd << 0;
+
+       writel(HSI2C_TRAILING_COUNT, &hsregs->usi_trailing_ctl);
+
+       /* Clear to enable Timeout */
+       clrsetbits_le32(&hsregs->usi_timeout, HSI2C_TIMEOUT_EN, 0);
+
+       /* set AUTO mode */
+       writel(readl(&hsregs->usi_conf) | HSI2C_AUTO_MODE, &hsregs->usi_conf);
+
+       /* Enable completion conditions' reporting. */
+       writel(HSI2C_INT_I2C_EN, &hsregs->usi_int_en);
+
+       /* Enable FIFOs */
+       writel(HSI2C_RXFIFO_EN | HSI2C_TXFIFO_EN, &hsregs->usi_fifo_ctl);
+
+       /* Currently operating in Fast speed mode. */
+       writel(i2c_timing_s1, &hsregs->usi_timing_fs1);
+       writel(i2c_timing_s2, &hsregs->usi_timing_fs2);
+       writel(i2c_timing_s3, &hsregs->usi_timing_fs3);
+       writel(i2c_timing_sla, &hsregs->usi_timing_sla);
+}
+
+/* SW reset for the high speed bus */
+static void exynos5_i2c_reset(struct s3c24x0_i2c_bus *i2c_bus)
+{
+       struct exynos5_hsi2c *i2c = i2c_bus->hsregs;
+       u32 i2c_ctl;
+
+       /* Set and clear the bit for reset */
+       i2c_ctl = readl(&i2c->usi_ctl);
+       i2c_ctl |= HSI2C_SW_RST;
+       writel(i2c_ctl, &i2c->usi_ctl);
+
+       i2c_ctl = readl(&i2c->usi_ctl);
+       i2c_ctl &= ~HSI2C_SW_RST;
+       writel(i2c_ctl, &i2c->usi_ctl);
+
+       /* Initialize the configure registers */
+       hsi2c_ch_init(i2c_bus);
+}
+
+/*
+ * Poll the appropriate bit of the fifo status register until the interface is
+ * ready to process the next byte or timeout expires.
+ *
+ * In addition to the FIFO status register this function also polls the
+ * interrupt status register to be able to detect unexpected transaction
+ * completion.
+ *
+ * When FIFO is ready to process the next byte, this function returns I2C_OK.
+ * If in course of polling the INT_I2C assertion is detected, the function
+ * returns I2C_NOK. If timeout happens before any of the above conditions is
+ * met - the function returns I2C_NOK_TOUT;
+
+ * @param i2c: pointer to the appropriate i2c register bank.
+ * @param rx_transfer: set to True if the receive transaction is in progress.
+ * @return: as described above.
+ */
+static unsigned hsi2c_poll_fifo(struct exynos5_hsi2c *i2c, bool rx_transfer)
+{
+       u32 fifo_bit = rx_transfer ? HSI2C_RX_FIFO_EMPTY : HSI2C_TX_FIFO_FULL;
+       int i = HSI2C_TIMEOUT_US;
+
+       while (readl(&i2c->usi_fifo_stat) & fifo_bit) {
+               if (readl(&i2c->usi_int_stat) & HSI2C_INT_I2C_EN) {
+                       /*
+                        * There is a chance that assertion of
+                        * HSI2C_INT_I2C_EN and deassertion of
+                        * HSI2C_RX_FIFO_EMPTY happen simultaneously. Let's
+                        * give FIFO status priority and check it one more
+                        * time before reporting interrupt. The interrupt will
+                        * be reported next time this function is called.
+                        */
+                       if (rx_transfer &&
+                           !(readl(&i2c->usi_fifo_stat) & fifo_bit))
+                               break;
+                       return I2C_NOK;
+               }
+               if (!i--) {
+                       debug("%s: FIFO polling timeout!\n", __func__);
+                       return I2C_NOK_TOUT;
+               }
+               udelay(1);
+       }
+       return I2C_OK;
+}
+
+/*
+ * Preapre hsi2c transaction, either read or write.
+ *
+ * Set up transfer as described in section 27.5.1.2 'I2C Channel Auto Mode' of
+ * the 5420 UM.
+ *
+ * @param i2c: pointer to the appropriate i2c register bank.
+ * @param chip: slave address on the i2c bus (with read/write bit exlcuded)
+ * @param len: number of bytes expected to be sent or received
+ * @param rx_transfer: set to true for receive transactions
+ * @param: issue_stop: set to true if i2c stop condition should be generated
+ *         after this transaction.
+ * @return: I2C_NOK_TOUT in case the bus remained busy for HSI2C_TIMEOUT_US,
+ *          I2C_OK otherwise.
+ */
+static int hsi2c_prepare_transaction(struct exynos5_hsi2c *i2c,
+                                    u8 chip,
+                                    u16 len,
+                                    bool rx_transfer,
+                                    bool issue_stop)
+{
+       u32 conf;
+
+       conf = len | HSI2C_MASTER_RUN;
+
+       if (issue_stop)
+               conf |= HSI2C_STOP_AFTER_TRANS;
+
+       /* Clear to enable Timeout */
+       writel(readl(&i2c->usi_timeout) & ~HSI2C_TIMEOUT_EN, &i2c->usi_timeout);
+
+       /* Set slave address */
+       writel(HSI2C_SLV_ADDR_MAS(chip), &i2c->i2c_addr);
+
+       if (rx_transfer) {
+               /* i2c master, read transaction */
+               writel((HSI2C_RXCHON | HSI2C_FUNC_MODE_I2C | HSI2C_MASTER),
+                      &i2c->usi_ctl);
+
+               /* read up to len bytes, stop after transaction is finished */
+               writel(conf | HSI2C_READ_WRITE, &i2c->usi_auto_conf);
+       } else {
+               /* i2c master, write transaction */
+               writel((HSI2C_TXCHON | HSI2C_FUNC_MODE_I2C | HSI2C_MASTER),
+                      &i2c->usi_ctl);
+
+               /* write up to len bytes, stop after transaction is finished */
+               writel(conf, &i2c->usi_auto_conf);
+       }
+
+       /* Reset all pending interrupt status bits we care about, if any */
+       writel(HSI2C_INT_I2C_EN, &i2c->usi_int_stat);
+
+       return I2C_OK;
+}
+
+/*
+ * Wait while i2c bus is settling down (mostly stop gets completed).
+ */
+static int hsi2c_wait_while_busy(struct exynos5_hsi2c *i2c)
+{
+       int i = HSI2C_TIMEOUT_US;
+
+       while (readl(&i2c->usi_trans_status) & HSI2C_MASTER_BUSY) {
+               if (!i--) {
+                       debug("%s: bus busy\n", __func__);
+                       return I2C_NOK_TOUT;
+               }
+               udelay(1);
+       }
+       return I2C_OK;
+}
+
+static int hsi2c_write(struct exynos5_hsi2c *i2c,
+                      unsigned char chip,
+                      unsigned char addr[],
+                      unsigned char alen,
+                      unsigned char data[],
+                      unsigned short len,
+                      bool issue_stop)
+{
+       int i, rv = 0;
+
+       if (!(len + alen)) {
+               /* Writes of zero length not supported in auto mode. */
+               debug("%s: zero length writes not supported\n", __func__);
+               return I2C_NOK;
+       }
+
+       rv = hsi2c_prepare_transaction
+               (i2c, chip, len + alen, false, issue_stop);
+       if (rv != I2C_OK)
+               return rv;
+
+       /* Move address, if any, and the data, if any, into the FIFO. */
+       for (i = 0; i < alen; i++) {
+               rv = hsi2c_poll_fifo(i2c, false);
+               if (rv != I2C_OK) {
+                       debug("%s: address write failed\n", __func__);
+                       goto write_error;
+               }
+               writel(addr[i], &i2c->usi_txdata);
+       }
+
+       for (i = 0; i < len; i++) {
+               rv = hsi2c_poll_fifo(i2c, false);
+               if (rv != I2C_OK) {
+                       debug("%s: data write failed\n", __func__);
+                       goto write_error;
+               }
+               writel(data[i], &i2c->usi_txdata);
+       }
+
+       rv = hsi2c_wait_for_trx(i2c);
+
+ write_error:
+       if (issue_stop) {
+               int tmp_ret = hsi2c_wait_while_busy(i2c);
+               if (rv == I2C_OK)
+                       rv = tmp_ret;
+       }
+
+       writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */
+       return rv;
+}
+
+static int hsi2c_read(struct exynos5_hsi2c *i2c,
+                     unsigned char chip,
+                     unsigned char addr[],
+                     unsigned char alen,
+                     unsigned char data[],
+                     unsigned short len)
+{
+       int i, rv, tmp_ret;
+       bool drop_data = false;
+
+       if (!len) {
+               /* Reads of zero length not supported in auto mode. */
+               debug("%s: zero length read adjusted\n", __func__);
+               drop_data = true;
+               len = 1;
+       }
+
+       if (alen) {
+               /* Internal register adress needs to be written first. */
+               rv = hsi2c_write(i2c, chip, addr, alen, NULL, 0, false);
+               if (rv != I2C_OK)
+                       return rv;
+       }
+
+       rv = hsi2c_prepare_transaction(i2c, chip, len, true, true);
+
+       if (rv != I2C_OK)
+               return rv;
+
+       for (i = 0; i < len; i++) {
+               rv = hsi2c_poll_fifo(i2c, true);
+               if (rv != I2C_OK)
+                       goto read_err;
+               if (drop_data)
+                       continue;
+               data[i] = readl(&i2c->usi_rxdata);
+       }
+
+       rv = hsi2c_wait_for_trx(i2c);
+
+ read_err:
+       tmp_ret = hsi2c_wait_while_busy(i2c);
+       if (rv == I2C_OK)
+               rv = tmp_ret;
+
+       writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */
+       return rv;
+}
+
+static int exynos_hs_i2c_xfer(struct udevice *dev, struct i2c_msg *msg,
+                             int nmsgs)
+{
+       struct s3c24x0_i2c_bus *i2c_bus = dev_get_priv(dev);
+       struct exynos5_hsi2c *hsregs = i2c_bus->hsregs;
+       int ret;
+
+       for (; nmsgs > 0; nmsgs--, msg++) {
+               if (msg->flags & I2C_M_RD) {
+                       ret = hsi2c_read(hsregs, msg->addr, 0, 0, msg->buf,
+                                        msg->len);
+               } else {
+                       ret = hsi2c_write(hsregs, msg->addr, 0, 0, msg->buf,
+                                         msg->len, true);
+               }
+               if (ret) {
+                       exynos5_i2c_reset(i2c_bus);
+                       return -EREMOTEIO;
+               }
+       }
+
+       return 0;
+}
+
+static int s3c24x0_i2c_set_bus_speed(struct udevice *dev, unsigned int speed)
+{
+       struct s3c24x0_i2c_bus *i2c_bus = dev_get_priv(dev);
+
+       i2c_bus->clock_frequency = speed;
+
+       if (hsi2c_get_clk_details(i2c_bus))
+               return -EFAULT;
+       hsi2c_ch_init(i2c_bus);
+
+       return 0;
+}
+
+static int s3c24x0_i2c_probe(struct udevice *dev, uint chip, uint chip_flags)
+{
+       struct s3c24x0_i2c_bus *i2c_bus = dev_get_priv(dev);
+       uchar buf[1];
+       int ret;
+
+       buf[0] = 0;
+
+       /*
+        * What is needed is to send the chip address and verify that the
+        * address was <ACK>ed (i.e. there was a chip at that address which
+        * drove the data line low).
+        */
+       ret = hsi2c_read(i2c_bus->hsregs, chip, 0, 0, buf, 1);
+
+       return ret != I2C_OK;
+}
+
+static int s3c_i2c_ofdata_to_platdata(struct udevice *dev)
+{
+       const void *blob = gd->fdt_blob;
+       struct s3c24x0_i2c_bus *i2c_bus = dev_get_priv(dev);
+       int node;
+
+       node = dev->of_offset;
+
+       i2c_bus->hsregs = (struct exynos5_hsi2c *)dev_get_addr(dev);
+
+       i2c_bus->id = pinmux_decode_periph_id(blob, node);
+
+       i2c_bus->clock_frequency = fdtdec_get_int(blob, node,
+                                                 "clock-frequency", 100000);
+       i2c_bus->node = node;
+       i2c_bus->bus_num = dev->seq;
+
+       exynos_pinmux_config(i2c_bus->id, PINMUX_FLAG_HS_MODE);
+
+       i2c_bus->active = true;
+
+       return 0;
+}
+
+static const struct dm_i2c_ops exynos_hs_i2c_ops = {
+       .xfer           = exynos_hs_i2c_xfer,
+       .probe_chip     = s3c24x0_i2c_probe,
+       .set_bus_speed  = s3c24x0_i2c_set_bus_speed,
+};
+
+static const struct udevice_id exynos_hs_i2c_ids[] = {
+       { .compatible = "samsung,exynos5-hsi2c" },
+       { }
+};
+
+U_BOOT_DRIVER(hs_i2c) = {
+       .name   = "i2c_s3c_hs",
+       .id     = UCLASS_I2C,
+       .of_match = exynos_hs_i2c_ids,
+       .ofdata_to_platdata = s3c_i2c_ofdata_to_platdata,
+       .priv_auto_alloc_size = sizeof(struct s3c24x0_i2c_bus),
+       .ops    = &exynos_hs_i2c_ops,
+};
index 68d9a429129a6a5c0a69349f4bd153b45f0c969f..b35d0d2d9c53f1338527c7ea6b04ab61b675100c 100644 (file)
@@ -5,6 +5,9 @@
  * Dante Su <dantesu@faraday-tech.com>
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index b05c15f8cb0bd197dddee11b3b6f0c06d8e29f67..29612e69fe1bee0c487fea88a31dd5039abd1798 100644 (file)
@@ -3,6 +3,9 @@
  * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.de
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index 1228ef34e5a58e0f99a9d591090f48f99911593c..26ee202880eea861373af4e5e5211db425703dc4 100644 (file)
@@ -2,6 +2,9 @@
  * Copyright 2013 Broadcom Corporation.
  *
  * SPDX-License-Identifier:      GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index 3e842e714a4bf8146f3802ea79d7778364de45e2..b0167ab3dcee69ba8df1d303058bf15ec5061a59 100644 (file)
@@ -5,6 +5,9 @@
  * Written-by: Albert ARIBAUD - 3ADEV <albert.aribaud@3adev.fr>
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index 313288dd112b0e8c3e6f1c553019697ec0346785..4ed0923e62ef15c258f278a8eb8e9fdb91fa8ea3 100644 (file)
@@ -12,6 +12,9 @@
  * Bugs:
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index df8888550bb0e2010db25362ca9695b4ac7a293e..8a38d11fb9f42489e4d5566c271adf1a8f06795b 100644 (file)
@@ -8,6 +8,9 @@
  * Bill Hunter,  Wave 7 Optics, williamhunter@mediaone.net
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index 90ad116a982e7c10618280b33b47a8057eab9445..bfba443f6275bbab7e2dcdd6f00cda0b1ee78a12 100644 (file)
@@ -5,6 +5,9 @@
  * Copyright (C) 2013 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
  *
  * SPDX-License-Identifier: GPL-2.0
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index eab49d09bab341a1fe39f7f7418ce23015d925d3..2ece9f419591be3459b392442e316479cbce1372 100644 (file)
 #include <i2c.h>
 #include "s3c24x0_i2c.h"
 
-#define        I2C_WRITE       0
-#define I2C_READ       1
-
-#define I2C_OK         0
-#define I2C_NOK                1
-#define I2C_NACK       2
-#define I2C_NOK_LA     3       /* Lost arbitration */
-#define I2C_NOK_TOUT   4       /* time out */
-
-/* HSI2C specific register description */
-
-/* I2C_CTL Register bits */
-#define HSI2C_FUNC_MODE_I2C            (1u << 0)
-#define HSI2C_MASTER                   (1u << 3)
-#define HSI2C_RXCHON                   (1u << 6)       /* Write/Send */
-#define HSI2C_TXCHON                   (1u << 7)       /* Read/Receive */
-#define HSI2C_SW_RST                   (1u << 31)
-
-/* I2C_FIFO_CTL Register bits */
-#define HSI2C_RXFIFO_EN                        (1u << 0)
-#define HSI2C_TXFIFO_EN                        (1u << 1)
-#define HSI2C_TXFIFO_TRIGGER_LEVEL     (0x20 << 16)
-#define HSI2C_RXFIFO_TRIGGER_LEVEL     (0x20 << 4)
-
-/* I2C_TRAILING_CTL Register bits */
-#define HSI2C_TRAILING_COUNT           (0xff)
-
-/* I2C_INT_EN Register bits */
-#define HSI2C_TX_UNDERRUN_EN           (1u << 2)
-#define HSI2C_TX_OVERRUN_EN            (1u << 3)
-#define HSI2C_RX_UNDERRUN_EN           (1u << 4)
-#define HSI2C_RX_OVERRUN_EN            (1u << 5)
-#define HSI2C_INT_TRAILING_EN          (1u << 6)
-#define HSI2C_INT_I2C_EN               (1u << 9)
-
-#define HSI2C_INT_ERROR_MASK   (HSI2C_TX_UNDERRUN_EN |\
-                                HSI2C_TX_OVERRUN_EN  |\
-                                HSI2C_RX_UNDERRUN_EN |\
-                                HSI2C_RX_OVERRUN_EN  |\
-                                HSI2C_INT_TRAILING_EN)
-
-/* I2C_CONF Register bits */
-#define HSI2C_AUTO_MODE                        (1u << 31)
-#define HSI2C_10BIT_ADDR_MODE          (1u << 30)
-#define HSI2C_HS_MODE                  (1u << 29)
-
-/* I2C_AUTO_CONF Register bits */
-#define HSI2C_READ_WRITE               (1u << 16)
-#define HSI2C_STOP_AFTER_TRANS         (1u << 17)
-#define HSI2C_MASTER_RUN               (1u << 31)
-
-/* I2C_TIMEOUT Register bits */
-#define HSI2C_TIMEOUT_EN               (1u << 31)
-
-/* I2C_TRANS_STATUS register bits */
-#define HSI2C_MASTER_BUSY              (1u << 17)
-#define HSI2C_SLAVE_BUSY               (1u << 16)
-#define HSI2C_TIMEOUT_AUTO             (1u << 4)
-#define HSI2C_NO_DEV                   (1u << 3)
-#define HSI2C_NO_DEV_ACK               (1u << 2)
-#define HSI2C_TRANS_ABORT              (1u << 1)
-#define HSI2C_TRANS_SUCCESS            (1u << 0)
-#define HSI2C_TRANS_ERROR_MASK (HSI2C_TIMEOUT_AUTO |\
-                                HSI2C_NO_DEV | HSI2C_NO_DEV_ACK |\
-                                HSI2C_TRANS_ABORT)
-#define HSI2C_TRANS_FINISHED_MASK (HSI2C_TRANS_ERROR_MASK | HSI2C_TRANS_SUCCESS)
-
-
-/* I2C_FIFO_STAT Register bits */
-#define HSI2C_RX_FIFO_EMPTY            (1u << 24)
-#define HSI2C_RX_FIFO_FULL             (1u << 23)
-#define HSI2C_TX_FIFO_EMPTY            (1u << 8)
-#define HSI2C_TX_FIFO_FULL             (1u << 7)
-#define HSI2C_RX_FIFO_LEVEL(x)         (((x) >> 16) & 0x7f)
-#define HSI2C_TX_FIFO_LEVEL(x)         ((x) & 0x7f)
-
-#define HSI2C_SLV_ADDR_MAS(x)          ((x & 0x3ff) << 10)
-
-/* S3C I2C Controller bits */
-#define I2CSTAT_BSY    0x20    /* Busy bit */
-#define I2CSTAT_NACK   0x01    /* Nack bit */
-#define I2CCON_ACKGEN  0x80    /* Acknowledge generation */
-#define I2CCON_IRPND   0x10    /* Interrupt pending bit */
-#define I2C_MODE_MT    0xC0    /* Master Transmit Mode */
-#define I2C_MODE_MR    0x80    /* Master Receive Mode */
-#define I2C_START_STOP 0x20    /* START / STOP */
-#define I2C_TXRX_ENA   0x10    /* I2C Tx/Rx enable */
-
-#define I2C_TIMEOUT_MS 10              /* 10 ms */
-
-#define        HSI2C_TIMEOUT_US 10000 /* 10 ms, finer granularity */
-
-
-/* To support VCMA9 boards and other who dont define max_i2c_num */
-#ifndef CONFIG_MAX_I2C_NUM
-#define CONFIG_MAX_I2C_NUM 1
-#endif
-
 DECLARE_GLOBAL_DATA_PTR;
 
-/*
- * For SPL boot some boards need i2c before SDRAM is initialised so force
- * variables to live in SRAM
- */
-#ifdef CONFIG_SYS_I2C
-static struct s3c24x0_i2c_bus i2c_bus[CONFIG_MAX_I2C_NUM]
-                       __attribute__((section(".data")));
-#endif
-
-enum exynos_i2c_type {
-       EXYNOS_I2C_STD,
-       EXYNOS_I2C_HS,
-};
-
-#ifdef CONFIG_SYS_I2C
-/**
- * Get a pointer to the given bus index
- *
- * @bus_idx: Bus index to look up
- * @return pointer to bus, or NULL if invalid or not available
- */
-static struct s3c24x0_i2c_bus *get_bus(unsigned int bus_idx)
-{
-       if (bus_idx < ARRAY_SIZE(i2c_bus)) {
-               struct s3c24x0_i2c_bus *bus;
-
-               bus = &i2c_bus[bus_idx];
-               if (bus->active)
-                       return bus;
-       }
-
-       debug("Undefined bus: %d\n", bus_idx);
-       return NULL;
-}
-#endif
-
-#if !(defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
-static int GetI2CSDA(void)
-{
-       struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio();
-
-#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
-       return (readl(&gpio->gpedat) & 0x8000) >> 15;
-#endif
-#ifdef CONFIG_S3C2400
-       return (readl(&gpio->pgdat) & 0x0020) >> 5;
-#endif
-}
-
-static void SetI2CSCL(int x)
-{
-       struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio();
-
-#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
-       writel((readl(&gpio->gpedat) & ~0x4000) |
-                                       (x & 1) << 14, &gpio->gpedat);
-#endif
-#ifdef CONFIG_S3C2400
-       writel((readl(&gpio->pgdat) & ~0x0040) | (x & 1) << 6, &gpio->pgdat);
-#endif
-}
-#endif
-
 /*
  * Wait til the byte transfer is completed.
  *
@@ -209,79 +48,11 @@ static int WaitForXfer(struct s3c24x0_i2c *i2c)
        return I2C_NOK_TOUT;
 }
 
-/*
- * Wait for transfer completion.
- *
- * This function reads the interrupt status register waiting for the INT_I2C
- * bit to be set, which indicates copletion of a transaction.
- *
- * @param i2c: pointer to the appropriate register bank
- *
- * @return: I2C_OK in case of successful completion, I2C_NOK_TIMEOUT in case
- *          the status bits do not get set in time, or an approrpiate error
- *          value in case of transfer errors.
- */
-static int hsi2c_wait_for_trx(struct exynos5_hsi2c *i2c)
-{
-       int i = HSI2C_TIMEOUT_US;
-
-       while (i-- > 0) {
-               u32 int_status = readl(&i2c->usi_int_stat);
-
-               if (int_status & HSI2C_INT_I2C_EN) {
-                       u32 trans_status = readl(&i2c->usi_trans_status);
-
-                       /* Deassert pending interrupt. */
-                       writel(int_status, &i2c->usi_int_stat);
-
-                       if (trans_status & HSI2C_NO_DEV_ACK) {
-                               debug("%s: no ACK from device\n", __func__);
-                               return I2C_NACK;
-                       }
-                       if (trans_status & HSI2C_NO_DEV) {
-                               debug("%s: no device\n", __func__);
-                               return I2C_NOK;
-                       }
-                       if (trans_status & HSI2C_TRANS_ABORT) {
-                               debug("%s: arbitration lost\n", __func__);
-                               return I2C_NOK_LA;
-                       }
-                       if (trans_status & HSI2C_TIMEOUT_AUTO) {
-                               debug("%s: device timed out\n", __func__);
-                               return I2C_NOK_TOUT;
-                       }
-                       return I2C_OK;
-               }
-               udelay(1);
-       }
-       debug("%s: transaction timeout!\n", __func__);
-       return I2C_NOK_TOUT;
-}
-
 static void read_write_byte(struct s3c24x0_i2c *i2c)
 {
        clrbits_le32(&i2c->iiccon, I2CCON_IRPND);
 }
 
-#ifdef CONFIG_SYS_I2C
-static struct s3c24x0_i2c *get_base_i2c(int bus)
-{
-#ifdef CONFIG_EXYNOS4
-       struct s3c24x0_i2c *i2c = (struct s3c24x0_i2c *)(samsung_get_base_i2c()
-                                                       + (EXYNOS4_I2C_SPACING
-                                                       * bus));
-       return i2c;
-#elif defined CONFIG_EXYNOS5
-       struct s3c24x0_i2c *i2c = (struct s3c24x0_i2c *)(samsung_get_base_i2c()
-                                                       + (EXYNOS5_I2C_SPACING
-                                                       * bus));
-       return i2c;
-#else
-       return s3c24x0_get_base_i2c();
-#endif
-}
-#endif
-
 static void i2c_ch_init(struct s3c24x0_i2c *i2c, int speed, int slaveadd)
 {
        ulong freq, pres = 16, div;
@@ -309,438 +80,14 @@ static void i2c_ch_init(struct s3c24x0_i2c *i2c, int speed, int slaveadd)
        writel(I2C_MODE_MT | I2C_TXRX_ENA, &i2c->iicstat);
 }
 
-static int hsi2c_get_clk_details(struct s3c24x0_i2c_bus *i2c_bus)
-{
-       struct exynos5_hsi2c *hsregs = i2c_bus->hsregs;
-       ulong clkin;
-       unsigned int op_clk = i2c_bus->clock_frequency;
-       unsigned int i = 0, utemp0 = 0, utemp1 = 0;
-       unsigned int t_ftl_cycle;
-
-#if (defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
-       clkin = get_i2c_clk();
-#else
-       clkin = get_PCLK();
-#endif
-       /* FPCLK / FI2C =
-        * (CLK_DIV + 1) * (TSCLK_L + TSCLK_H + 2) + 8 + 2 * FLT_CYCLE
-        * uTemp0 = (CLK_DIV + 1) * (TSCLK_L + TSCLK_H + 2)
-        * uTemp1 = (TSCLK_L + TSCLK_H + 2)
-        * uTemp2 = TSCLK_L + TSCLK_H
-        */
-       t_ftl_cycle = (readl(&hsregs->usi_conf) >> 16) & 0x7;
-       utemp0 = (clkin / op_clk) - 8 - 2 * t_ftl_cycle;
-
-       /* CLK_DIV max is 256 */
-       for (i = 0; i < 256; i++) {
-               utemp1 = utemp0 / (i + 1);
-               if ((utemp1 < 512) && (utemp1 > 4)) {
-                       i2c_bus->clk_cycle = utemp1 - 2;
-                       i2c_bus->clk_div = i;
-                       return 0;
-               }
-       }
-       return -EINVAL;
-}
-
-static void hsi2c_ch_init(struct s3c24x0_i2c_bus *i2c_bus)
-{
-       struct exynos5_hsi2c *hsregs = i2c_bus->hsregs;
-       unsigned int t_sr_release;
-       unsigned int n_clkdiv;
-       unsigned int t_start_su, t_start_hd;
-       unsigned int t_stop_su;
-       unsigned int t_data_su, t_data_hd;
-       unsigned int t_scl_l, t_scl_h;
-       u32 i2c_timing_s1;
-       u32 i2c_timing_s2;
-       u32 i2c_timing_s3;
-       u32 i2c_timing_sla;
-
-       n_clkdiv = i2c_bus->clk_div;
-       t_scl_l = i2c_bus->clk_cycle / 2;
-       t_scl_h = i2c_bus->clk_cycle / 2;
-       t_start_su = t_scl_l;
-       t_start_hd = t_scl_l;
-       t_stop_su = t_scl_l;
-       t_data_su = t_scl_l / 2;
-       t_data_hd = t_scl_l / 2;
-       t_sr_release = i2c_bus->clk_cycle;
-
-       i2c_timing_s1 = t_start_su << 24 | t_start_hd << 16 | t_stop_su << 8;
-       i2c_timing_s2 = t_data_su << 24 | t_scl_l << 8 | t_scl_h << 0;
-       i2c_timing_s3 = n_clkdiv << 16 | t_sr_release << 0;
-       i2c_timing_sla = t_data_hd << 0;
-
-       writel(HSI2C_TRAILING_COUNT, &hsregs->usi_trailing_ctl);
-
-       /* Clear to enable Timeout */
-       clrsetbits_le32(&hsregs->usi_timeout, HSI2C_TIMEOUT_EN, 0);
-
-       /* set AUTO mode */
-       writel(readl(&hsregs->usi_conf) | HSI2C_AUTO_MODE, &hsregs->usi_conf);
-
-       /* Enable completion conditions' reporting. */
-       writel(HSI2C_INT_I2C_EN, &hsregs->usi_int_en);
-
-       /* Enable FIFOs */
-       writel(HSI2C_RXFIFO_EN | HSI2C_TXFIFO_EN, &hsregs->usi_fifo_ctl);
-
-       /* Currently operating in Fast speed mode. */
-       writel(i2c_timing_s1, &hsregs->usi_timing_fs1);
-       writel(i2c_timing_s2, &hsregs->usi_timing_fs2);
-       writel(i2c_timing_s3, &hsregs->usi_timing_fs3);
-       writel(i2c_timing_sla, &hsregs->usi_timing_sla);
-}
-
-/* SW reset for the high speed bus */
-static void exynos5_i2c_reset(struct s3c24x0_i2c_bus *i2c_bus)
-{
-       struct exynos5_hsi2c *i2c = i2c_bus->hsregs;
-       u32 i2c_ctl;
-
-       /* Set and clear the bit for reset */
-       i2c_ctl = readl(&i2c->usi_ctl);
-       i2c_ctl |= HSI2C_SW_RST;
-       writel(i2c_ctl, &i2c->usi_ctl);
-
-       i2c_ctl = readl(&i2c->usi_ctl);
-       i2c_ctl &= ~HSI2C_SW_RST;
-       writel(i2c_ctl, &i2c->usi_ctl);
-
-       /* Initialize the configure registers */
-       hsi2c_ch_init(i2c_bus);
-}
-
-#ifdef CONFIG_SYS_I2C
-static void s3c24x0_i2c_init(struct i2c_adapter *adap, int speed, int slaveadd)
-{
-       struct s3c24x0_i2c *i2c;
-       struct s3c24x0_i2c_bus *bus;
-#if !(defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
-       struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio();
-#endif
-       ulong start_time = get_timer(0);
-
-       i2c = get_base_i2c(adap->hwadapnr);
-       bus = &i2c_bus[adap->hwadapnr];
-       if (!bus)
-               return;
-
-       /*
-        * In case the previous transfer is still going, wait to give it a
-        * chance to finish.
-        */
-       while (readl(&i2c->iicstat) & I2CSTAT_BSY) {
-               if (get_timer(start_time) > I2C_TIMEOUT_MS) {
-                       printf("%s: I2C bus busy for %p\n", __func__,
-                              &i2c->iicstat);
-                       return;
-               }
-       }
-
-#if !(defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
-       int i;
-
-       if ((readl(&i2c->iicstat) & I2CSTAT_BSY) || GetI2CSDA() == 0) {
-#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
-               ulong old_gpecon = readl(&gpio->gpecon);
-#endif
-#ifdef CONFIG_S3C2400
-               ulong old_gpecon = readl(&gpio->pgcon);
-#endif
-               /* bus still busy probably by (most) previously interrupted
-                  transfer */
-
-#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
-               /* set I2CSDA and I2CSCL (GPE15, GPE14) to GPIO */
-               writel((readl(&gpio->gpecon) & ~0xF0000000) | 0x10000000,
-                      &gpio->gpecon);
-#endif
-#ifdef CONFIG_S3C2400
-               /* set I2CSDA and I2CSCL (PG5, PG6) to GPIO */
-               writel((readl(&gpio->pgcon) & ~0x00003c00) | 0x00001000,
-                      &gpio->pgcon);
-#endif
-
-               /* toggle I2CSCL until bus idle */
-               SetI2CSCL(0);
-               udelay(1000);
-               i = 10;
-               while ((i > 0) && (GetI2CSDA() != 1)) {
-                       SetI2CSCL(1);
-                       udelay(1000);
-                       SetI2CSCL(0);
-                       udelay(1000);
-                       i--;
-               }
-               SetI2CSCL(1);
-               udelay(1000);
-
-               /* restore pin functions */
-#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
-               writel(old_gpecon, &gpio->gpecon);
-#endif
-#ifdef CONFIG_S3C2400
-               writel(old_gpecon, &gpio->pgcon);
-#endif
-       }
-#endif /* #if !(defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5) */
-
-       i2c_ch_init(i2c, speed, slaveadd);
-
-       bus->active = true;
-       bus->regs = i2c;
-}
-#endif /* CONFIG_SYS_I2C */
-
-/*
- * Poll the appropriate bit of the fifo status register until the interface is
- * ready to process the next byte or timeout expires.
- *
- * In addition to the FIFO status register this function also polls the
- * interrupt status register to be able to detect unexpected transaction
- * completion.
- *
- * When FIFO is ready to process the next byte, this function returns I2C_OK.
- * If in course of polling the INT_I2C assertion is detected, the function
- * returns I2C_NOK. If timeout happens before any of the above conditions is
- * met - the function returns I2C_NOK_TOUT;
-
- * @param i2c: pointer to the appropriate i2c register bank.
- * @param rx_transfer: set to True if the receive transaction is in progress.
- * @return: as described above.
- */
-static unsigned hsi2c_poll_fifo(struct exynos5_hsi2c *i2c, bool rx_transfer)
-{
-       u32 fifo_bit = rx_transfer ? HSI2C_RX_FIFO_EMPTY : HSI2C_TX_FIFO_FULL;
-       int i = HSI2C_TIMEOUT_US;
-
-       while (readl(&i2c->usi_fifo_stat) & fifo_bit) {
-               if (readl(&i2c->usi_int_stat) & HSI2C_INT_I2C_EN) {
-                       /*
-                        * There is a chance that assertion of
-                        * HSI2C_INT_I2C_EN and deassertion of
-                        * HSI2C_RX_FIFO_EMPTY happen simultaneously. Let's
-                        * give FIFO status priority and check it one more
-                        * time before reporting interrupt. The interrupt will
-                        * be reported next time this function is called.
-                        */
-                       if (rx_transfer &&
-                           !(readl(&i2c->usi_fifo_stat) & fifo_bit))
-                               break;
-                       return I2C_NOK;
-               }
-               if (!i--) {
-                       debug("%s: FIFO polling timeout!\n", __func__);
-                       return I2C_NOK_TOUT;
-               }
-               udelay(1);
-       }
-       return I2C_OK;
-}
-
-/*
- * Preapre hsi2c transaction, either read or write.
- *
- * Set up transfer as described in section 27.5.1.2 'I2C Channel Auto Mode' of
- * the 5420 UM.
- *
- * @param i2c: pointer to the appropriate i2c register bank.
- * @param chip: slave address on the i2c bus (with read/write bit exlcuded)
- * @param len: number of bytes expected to be sent or received
- * @param rx_transfer: set to true for receive transactions
- * @param: issue_stop: set to true if i2c stop condition should be generated
- *         after this transaction.
- * @return: I2C_NOK_TOUT in case the bus remained busy for HSI2C_TIMEOUT_US,
- *          I2C_OK otherwise.
- */
-static int hsi2c_prepare_transaction(struct exynos5_hsi2c *i2c,
-                                    u8 chip,
-                                    u16 len,
-                                    bool rx_transfer,
-                                    bool issue_stop)
-{
-       u32 conf;
-
-       conf = len | HSI2C_MASTER_RUN;
-
-       if (issue_stop)
-               conf |= HSI2C_STOP_AFTER_TRANS;
-
-       /* Clear to enable Timeout */
-       writel(readl(&i2c->usi_timeout) & ~HSI2C_TIMEOUT_EN, &i2c->usi_timeout);
-
-       /* Set slave address */
-       writel(HSI2C_SLV_ADDR_MAS(chip), &i2c->i2c_addr);
-
-       if (rx_transfer) {
-               /* i2c master, read transaction */
-               writel((HSI2C_RXCHON | HSI2C_FUNC_MODE_I2C | HSI2C_MASTER),
-                      &i2c->usi_ctl);
-
-               /* read up to len bytes, stop after transaction is finished */
-               writel(conf | HSI2C_READ_WRITE, &i2c->usi_auto_conf);
-       } else {
-               /* i2c master, write transaction */
-               writel((HSI2C_TXCHON | HSI2C_FUNC_MODE_I2C | HSI2C_MASTER),
-                      &i2c->usi_ctl);
-
-               /* write up to len bytes, stop after transaction is finished */
-               writel(conf, &i2c->usi_auto_conf);
-       }
-
-       /* Reset all pending interrupt status bits we care about, if any */
-       writel(HSI2C_INT_I2C_EN, &i2c->usi_int_stat);
-
-       return I2C_OK;
-}
-
-/*
- * Wait while i2c bus is settling down (mostly stop gets completed).
- */
-static int hsi2c_wait_while_busy(struct exynos5_hsi2c *i2c)
-{
-       int i = HSI2C_TIMEOUT_US;
-
-       while (readl(&i2c->usi_trans_status) & HSI2C_MASTER_BUSY) {
-               if (!i--) {
-                       debug("%s: bus busy\n", __func__);
-                       return I2C_NOK_TOUT;
-               }
-               udelay(1);
-       }
-       return I2C_OK;
-}
-
-static int hsi2c_write(struct exynos5_hsi2c *i2c,
-                      unsigned char chip,
-                      unsigned char addr[],
-                      unsigned char alen,
-                      unsigned char data[],
-                      unsigned short len,
-                      bool issue_stop)
-{
-       int i, rv = 0;
-
-       if (!(len + alen)) {
-               /* Writes of zero length not supported in auto mode. */
-               debug("%s: zero length writes not supported\n", __func__);
-               return I2C_NOK;
-       }
-
-       rv = hsi2c_prepare_transaction
-               (i2c, chip, len + alen, false, issue_stop);
-       if (rv != I2C_OK)
-               return rv;
-
-       /* Move address, if any, and the data, if any, into the FIFO. */
-       for (i = 0; i < alen; i++) {
-               rv = hsi2c_poll_fifo(i2c, false);
-               if (rv != I2C_OK) {
-                       debug("%s: address write failed\n", __func__);
-                       goto write_error;
-               }
-               writel(addr[i], &i2c->usi_txdata);
-       }
-
-       for (i = 0; i < len; i++) {
-               rv = hsi2c_poll_fifo(i2c, false);
-               if (rv != I2C_OK) {
-                       debug("%s: data write failed\n", __func__);
-                       goto write_error;
-               }
-               writel(data[i], &i2c->usi_txdata);
-       }
-
-       rv = hsi2c_wait_for_trx(i2c);
-
- write_error:
-       if (issue_stop) {
-               int tmp_ret = hsi2c_wait_while_busy(i2c);
-               if (rv == I2C_OK)
-                       rv = tmp_ret;
-       }
-
-       writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */
-       return rv;
-}
-
-static int hsi2c_read(struct exynos5_hsi2c *i2c,
-                     unsigned char chip,
-                     unsigned char addr[],
-                     unsigned char alen,
-                     unsigned char data[],
-                     unsigned short len)
-{
-       int i, rv, tmp_ret;
-       bool drop_data = false;
-
-       if (!len) {
-               /* Reads of zero length not supported in auto mode. */
-               debug("%s: zero length read adjusted\n", __func__);
-               drop_data = true;
-               len = 1;
-       }
-
-       if (alen) {
-               /* Internal register adress needs to be written first. */
-               rv = hsi2c_write(i2c, chip, addr, alen, NULL, 0, false);
-               if (rv != I2C_OK)
-                       return rv;
-       }
-
-       rv = hsi2c_prepare_transaction(i2c, chip, len, true, true);
-
-       if (rv != I2C_OK)
-               return rv;
-
-       for (i = 0; i < len; i++) {
-               rv = hsi2c_poll_fifo(i2c, true);
-               if (rv != I2C_OK)
-                       goto read_err;
-               if (drop_data)
-                       continue;
-               data[i] = readl(&i2c->usi_rxdata);
-       }
-
-       rv = hsi2c_wait_for_trx(i2c);
-
- read_err:
-       tmp_ret = hsi2c_wait_while_busy(i2c);
-       if (rv == I2C_OK)
-               rv = tmp_ret;
-
-       writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */
-       return rv;
-}
-
-#ifdef CONFIG_SYS_I2C
-static unsigned int s3c24x0_i2c_set_bus_speed(struct i2c_adapter *adap,
-                                             unsigned int speed)
-#else
 static int s3c24x0_i2c_set_bus_speed(struct udevice *dev, unsigned int speed)
-#endif
 {
-       struct s3c24x0_i2c_bus *i2c_bus;
+       struct s3c24x0_i2c_bus *i2c_bus = dev_get_priv(dev);
 
-#ifdef CONFIG_SYS_I2C
-       i2c_bus = get_bus(adap->hwadapnr);
-       if (!i2c_bus)
-               return -EFAULT;
-#else
-       i2c_bus = dev_get_priv(dev);
-#endif
        i2c_bus->clock_frequency = speed;
 
-       if (i2c_bus->is_highspeed) {
-               if (hsi2c_get_clk_details(i2c_bus))
-                       return -EFAULT;
-               hsi2c_ch_init(i2c_bus);
-       } else {
-               i2c_ch_init(i2c_bus->regs, i2c_bus->clock_frequency,
-                           CONFIG_SYS_I2C_S3C24X0_SLAVE);
-       }
+       i2c_ch_init(i2c_bus->regs, i2c_bus->clock_frequency,
+                   CONFIG_SYS_I2C_S3C24X0_SLAVE);
 
        return 0;
 }
@@ -857,23 +204,12 @@ bailout:
        return result;
 }
 
-#ifdef CONFIG_SYS_I2C
-static int s3c24x0_i2c_probe(struct i2c_adapter *adap, uchar chip)
-#else
 static int s3c24x0_i2c_probe(struct udevice *dev, uint chip, uint chip_flags)
-#endif
 {
-       struct s3c24x0_i2c_bus *i2c_bus;
+       struct s3c24x0_i2c_bus *i2c_bus = dev_get_priv(dev);
        uchar buf[1];
        int ret;
 
-#ifdef CONFIG_SYS_I2C
-       i2c_bus = get_bus(adap->hwadapnr);
-       if (!i2c_bus)
-               return -EFAULT;
-#else
-       i2c_bus = dev_get_priv(dev);
-#endif
        buf[0] = 0;
 
        /*
@@ -881,433 +217,11 @@ static int s3c24x0_i2c_probe(struct udevice *dev, uint chip, uint chip_flags)
         * address was <ACK>ed (i.e. there was a chip at that address which
         * drove the data line low).
         */
-       if (i2c_bus->is_highspeed) {
-               ret = hsi2c_read(i2c_bus->hsregs,
-                               chip, 0, 0, buf, 1);
-       } else {
-               ret = i2c_transfer(i2c_bus->regs,
-                               I2C_READ, chip << 1, 0, 0, buf, 1);
-       }
+       ret = i2c_transfer(i2c_bus->regs, I2C_READ, chip << 1, 0, 0, buf, 1);
 
        return ret != I2C_OK;
 }
 
-#ifdef CONFIG_SYS_I2C
-static int s3c24x0_i2c_read(struct i2c_adapter *adap, uchar chip, uint addr,
-                           int alen, uchar *buffer, int len)
-{
-       struct s3c24x0_i2c_bus *i2c_bus;
-       uchar xaddr[4];
-       int ret;
-
-       i2c_bus = get_bus(adap->hwadapnr);
-       if (!i2c_bus)
-               return -EFAULT;
-
-       if (alen > 4) {
-               debug("I2C read: addr len %d not supported\n", alen);
-               return -EADDRNOTAVAIL;
-       }
-
-       if (alen > 0) {
-               xaddr[0] = (addr >> 24) & 0xFF;
-               xaddr[1] = (addr >> 16) & 0xFF;
-               xaddr[2] = (addr >> 8) & 0xFF;
-               xaddr[3] = addr & 0xFF;
-       }
-
-#ifdef CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW
-       /*
-        * EEPROM chips that implement "address overflow" are ones
-        * like Catalyst 24WC04/08/16 which has 9/10/11 bits of
-        * address and the extra bits end up in the "chip address"
-        * bit slots. This makes a 24WC08 (1Kbyte) chip look like
-        * four 256 byte chips.
-        *
-        * Note that we consider the length of the address field to
-        * still be one byte because the extra address bits are
-        * hidden in the chip address.
-        */
-       if (alen > 0)
-               chip |= ((addr >> (alen * 8)) &
-                        CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW);
-#endif
-       if (i2c_bus->is_highspeed)
-               ret = hsi2c_read(i2c_bus->hsregs, chip, &xaddr[4 - alen],
-                                alen, buffer, len);
-       else
-               ret = i2c_transfer(i2c_bus->regs, I2C_READ, chip << 1,
-                               &xaddr[4 - alen], alen, buffer, len);
-
-       if (ret) {
-               if (i2c_bus->is_highspeed)
-                       exynos5_i2c_reset(i2c_bus);
-               debug("I2c read failed %d\n", ret);
-               return -EIO;
-       }
-       return 0;
-}
-
-static int s3c24x0_i2c_write(struct i2c_adapter *adap, uchar chip, uint addr,
-                        int alen, uchar *buffer, int len)
-{
-       struct s3c24x0_i2c_bus *i2c_bus;
-       uchar xaddr[4];
-       int ret;
-
-       i2c_bus = get_bus(adap->hwadapnr);
-       if (!i2c_bus)
-               return -EFAULT;
-
-       if (alen > 4) {
-               debug("I2C write: addr len %d not supported\n", alen);
-               return -EINVAL;
-       }
-
-       if (alen > 0) {
-               xaddr[0] = (addr >> 24) & 0xFF;
-               xaddr[1] = (addr >> 16) & 0xFF;
-               xaddr[2] = (addr >> 8) & 0xFF;
-               xaddr[3] = addr & 0xFF;
-       }
-#ifdef CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW
-       /*
-        * EEPROM chips that implement "address overflow" are ones
-        * like Catalyst 24WC04/08/16 which has 9/10/11 bits of
-        * address and the extra bits end up in the "chip address"
-        * bit slots. This makes a 24WC08 (1Kbyte) chip look like
-        * four 256 byte chips.
-        *
-        * Note that we consider the length of the address field to
-        * still be one byte because the extra address bits are
-        * hidden in the chip address.
-        */
-       if (alen > 0)
-               chip |= ((addr >> (alen * 8)) &
-                        CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW);
-#endif
-       if (i2c_bus->is_highspeed)
-               ret = hsi2c_write(i2c_bus->hsregs, chip, &xaddr[4 - alen],
-                                 alen, buffer, len, true);
-       else
-               ret = i2c_transfer(i2c_bus->regs, I2C_WRITE, chip << 1,
-                               &xaddr[4 - alen], alen, buffer, len);
-
-       if (ret != 0) {
-               if (i2c_bus->is_highspeed)
-                       exynos5_i2c_reset(i2c_bus);
-               return 1;
-       } else {
-               return 0;
-       }
-}
-
-#if CONFIG_IS_ENABLED(OF_CONTROL)
-static void process_nodes(const void *blob, int node_list[], int count,
-                        int is_highspeed)
-{
-       struct s3c24x0_i2c_bus *bus;
-       int i, flags;
-
-       for (i = 0; i < count; i++) {
-               int node = node_list[i];
-
-               if (node <= 0)
-                       continue;
-
-               bus = &i2c_bus[i];
-               bus->active = true;
-               bus->is_highspeed = is_highspeed;
-
-               if (is_highspeed) {
-                       flags = PINMUX_FLAG_HS_MODE;
-                       bus->hsregs = (struct exynos5_hsi2c *)
-                                       fdtdec_get_addr(blob, node, "reg");
-               } else {
-                       flags = 0;
-                       bus->regs = (struct s3c24x0_i2c *)
-                                       fdtdec_get_addr(blob, node, "reg");
-               }
-
-               bus->id = pinmux_decode_periph_id(blob, node);
-               bus->clock_frequency = fdtdec_get_int(blob, node,
-                                               "clock-frequency",
-                                               CONFIG_SYS_I2C_S3C24X0_SPEED);
-               bus->node = node;
-               bus->bus_num = i;
-               exynos_pinmux_config(bus->id, flags);
-
-               /* Mark position as used */
-               node_list[i] = -1;
-       }
-}
-
-void board_i2c_init(const void *blob)
-{
-       int node_list[CONFIG_MAX_I2C_NUM];
-       int count;
-
-       /* First get the normal i2c ports */
-       count = fdtdec_find_aliases_for_id(blob, "i2c",
-               COMPAT_SAMSUNG_S3C2440_I2C, node_list,
-               CONFIG_MAX_I2C_NUM);
-       process_nodes(blob, node_list, count, 0);
-
-       /* Now look for high speed i2c ports */
-       count = fdtdec_find_aliases_for_id(blob, "i2c",
-               COMPAT_SAMSUNG_EXYNOS5_I2C, node_list,
-               CONFIG_MAX_I2C_NUM);
-       process_nodes(blob, node_list, count, 1);
-}
-
-int i2c_get_bus_num_fdt(int node)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(i2c_bus); i++) {
-               if (node == i2c_bus[i].node)
-                       return i;
-       }
-
-       debug("%s: Can't find any matched I2C bus\n", __func__);
-       return -EINVAL;
-}
-
-int i2c_reset_port_fdt(const void *blob, int node)
-{
-       struct s3c24x0_i2c_bus *i2c_bus;
-       int bus;
-
-       bus = i2c_get_bus_num_fdt(node);
-       if (bus < 0) {
-               debug("could not get bus for node %d\n", node);
-               return bus;
-       }
-
-       i2c_bus = get_bus(bus);
-       if (!i2c_bus) {
-               debug("get_bus() failed for node %d\n", node);
-               return -EFAULT;
-       }
-
-       if (i2c_bus->is_highspeed) {
-               if (hsi2c_get_clk_details(i2c_bus))
-                       return -EINVAL;
-               hsi2c_ch_init(i2c_bus);
-       } else {
-               i2c_ch_init(i2c_bus->regs, i2c_bus->clock_frequency,
-                           CONFIG_SYS_I2C_S3C24X0_SLAVE);
-       }
-
-       return 0;
-}
-#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */
-
-#ifdef CONFIG_EXYNOS5
-static void exynos_i2c_init(struct i2c_adapter *adap, int speed, int slaveaddr)
-{
-       /* This will override the speed selected in the fdt for that port */
-       debug("i2c_init(speed=%u, slaveaddr=0x%x)\n", speed, slaveaddr);
-       if (i2c_set_bus_speed(speed))
-               error("i2c_init: failed to init bus for speed = %d", speed);
-}
-#endif /* CONFIG_EXYNOS5 */
-
-/*
- * Register s3c24x0 i2c adapters
- */
-#if defined(CONFIG_EXYNOS5420)
-U_BOOT_I2C_ADAP_COMPLETE(i2c00, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 0)
-U_BOOT_I2C_ADAP_COMPLETE(i2c01, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 1)
-U_BOOT_I2C_ADAP_COMPLETE(i2c02, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 2)
-U_BOOT_I2C_ADAP_COMPLETE(i2c03, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 3)
-U_BOOT_I2C_ADAP_COMPLETE(i2c04, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 4)
-U_BOOT_I2C_ADAP_COMPLETE(i2c05, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 5)
-U_BOOT_I2C_ADAP_COMPLETE(i2c06, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 6)
-U_BOOT_I2C_ADAP_COMPLETE(i2c07, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 7)
-U_BOOT_I2C_ADAP_COMPLETE(i2c08, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 8)
-U_BOOT_I2C_ADAP_COMPLETE(i2c09, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 9)
-U_BOOT_I2C_ADAP_COMPLETE(i2c10, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 10)
-#elif defined(CONFIG_EXYNOS5250)
-U_BOOT_I2C_ADAP_COMPLETE(i2c00, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 0)
-U_BOOT_I2C_ADAP_COMPLETE(i2c01, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 1)
-U_BOOT_I2C_ADAP_COMPLETE(i2c02, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 2)
-U_BOOT_I2C_ADAP_COMPLETE(i2c03, exynos_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 3)
-U_BOOT_I2C_ADAP_COMPLETE(i2c04, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 4)
-U_BOOT_I2C_ADAP_COMPLETE(i2c05, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 5)
-U_BOOT_I2C_ADAP_COMPLETE(i2c06, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 6)
-U_BOOT_I2C_ADAP_COMPLETE(i2c07, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 7)
-U_BOOT_I2C_ADAP_COMPLETE(i2c08, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 8)
-U_BOOT_I2C_ADAP_COMPLETE(i2c09, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 9)
-U_BOOT_I2C_ADAP_COMPLETE(s3c10, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 10)
-#elif defined(CONFIG_EXYNOS4)
-U_BOOT_I2C_ADAP_COMPLETE(i2c00, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 0)
-U_BOOT_I2C_ADAP_COMPLETE(i2c01, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 1)
-U_BOOT_I2C_ADAP_COMPLETE(i2c02, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 2)
-U_BOOT_I2C_ADAP_COMPLETE(i2c03, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 3)
-U_BOOT_I2C_ADAP_COMPLETE(i2c04, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 4)
-U_BOOT_I2C_ADAP_COMPLETE(i2c05, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 5)
-U_BOOT_I2C_ADAP_COMPLETE(i2c06, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 6)
-U_BOOT_I2C_ADAP_COMPLETE(i2c07, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 7)
-U_BOOT_I2C_ADAP_COMPLETE(i2c08, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 8)
-#else
-U_BOOT_I2C_ADAP_COMPLETE(s3c0, s3c24x0_i2c_init, s3c24x0_i2c_probe,
-                       s3c24x0_i2c_read, s3c24x0_i2c_write,
-                       s3c24x0_i2c_set_bus_speed,
-                       CONFIG_SYS_I2C_S3C24X0_SPEED,
-                       CONFIG_SYS_I2C_S3C24X0_SLAVE, 0)
-#endif
-#endif /* CONFIG_SYS_I2C */
-
-#ifdef CONFIG_DM_I2C
-static int exynos_hs_i2c_xfer(struct udevice *dev, struct i2c_msg *msg,
-                             int nmsgs)
-{
-       struct s3c24x0_i2c_bus *i2c_bus = dev_get_priv(dev);
-       struct exynos5_hsi2c *hsregs = i2c_bus->hsregs;
-       int ret;
-
-       for (; nmsgs > 0; nmsgs--, msg++) {
-               if (msg->flags & I2C_M_RD) {
-                       ret = hsi2c_read(hsregs, msg->addr, 0, 0, msg->buf,
-                                        msg->len);
-               } else {
-                       ret = hsi2c_write(hsregs, msg->addr, 0, 0, msg->buf,
-                                         msg->len, true);
-               }
-               if (ret) {
-                       exynos5_i2c_reset(i2c_bus);
-                       return -EREMOTEIO;
-               }
-       }
-
-       return 0;
-}
-
 static int s3c24x0_do_msg(struct s3c24x0_i2c_bus *i2c_bus, struct i2c_msg *msg,
                          int seq)
 {
@@ -1390,18 +304,11 @@ static int s3c_i2c_ofdata_to_platdata(struct udevice *dev)
 {
        const void *blob = gd->fdt_blob;
        struct s3c24x0_i2c_bus *i2c_bus = dev_get_priv(dev);
-       int node, flags;
+       int node;
 
-       i2c_bus->is_highspeed = dev_get_driver_data(dev);
        node = dev->of_offset;
 
-       if (i2c_bus->is_highspeed) {
-               flags = PINMUX_FLAG_HS_MODE;
-               i2c_bus->hsregs = (struct exynos5_hsi2c *)dev_get_addr(dev);
-       } else {
-               flags = 0;
-               i2c_bus->regs = (struct s3c24x0_i2c *)dev_get_addr(dev);
-       }
+       i2c_bus->regs = (struct s3c24x0_i2c *)dev_get_addr(dev);
 
        i2c_bus->id = pinmux_decode_periph_id(blob, node);
 
@@ -1410,7 +317,7 @@ static int s3c_i2c_ofdata_to_platdata(struct udevice *dev)
        i2c_bus->node = node;
        i2c_bus->bus_num = dev->seq;
 
-       exynos_pinmux_config(i2c_bus->id, flags);
+       exynos_pinmux_config(i2c_bus->id, 0);
 
        i2c_bus->active = true;
 
@@ -1424,7 +331,7 @@ static const struct dm_i2c_ops s3c_i2c_ops = {
 };
 
 static const struct udevice_id s3c_i2c_ids[] = {
-       { .compatible = "samsung,s3c2440-i2c", .data = EXYNOS_I2C_STD },
+       { .compatible = "samsung,s3c2440-i2c" },
        { }
 };
 
@@ -1436,28 +343,3 @@ U_BOOT_DRIVER(i2c_s3c) = {
        .priv_auto_alloc_size = sizeof(struct s3c24x0_i2c_bus),
        .ops    = &s3c_i2c_ops,
 };
-
-/*
- * TODO(sjg@chromium.org): Move this to a separate file when everything uses
- * driver model
- */
-static const struct dm_i2c_ops exynos_hs_i2c_ops = {
-       .xfer           = exynos_hs_i2c_xfer,
-       .probe_chip     = s3c24x0_i2c_probe,
-       .set_bus_speed  = s3c24x0_i2c_set_bus_speed,
-};
-
-static const struct udevice_id exynos_hs_i2c_ids[] = {
-       { .compatible = "samsung,exynos5-hsi2c", .data = EXYNOS_I2C_HS },
-       { }
-};
-
-U_BOOT_DRIVER(hs_i2c) = {
-       .name   = "i2c_s3c_hs",
-       .id     = UCLASS_I2C,
-       .of_match = exynos_hs_i2c_ids,
-       .ofdata_to_platdata = s3c_i2c_ofdata_to_platdata,
-       .priv_auto_alloc_size = sizeof(struct s3c24x0_i2c_bus),
-       .ops    = &exynos_hs_i2c_ops,
-};
-#endif /* CONFIG_DM_I2C */
index 1ae73d27777a786566d3d9267187d65184f90685..aa10fc73cd7ef9961057652c9b6f788c4ee48e5f 100644 (file)
@@ -59,4 +59,26 @@ struct s3c24x0_i2c_bus {
        unsigned clk_cycle;
        unsigned clk_div;
 };
+
+#define        I2C_WRITE       0
+#define I2C_READ       1
+
+#define I2C_OK         0
+#define I2C_NOK                1
+#define I2C_NACK       2
+#define I2C_NOK_LA     3       /* Lost arbitration */
+#define I2C_NOK_TOUT   4       /* time out */
+
+/* S3C I2C Controller bits */
+#define I2CSTAT_BSY    0x20    /* Busy bit */
+#define I2CSTAT_NACK   0x01    /* Nack bit */
+#define I2CCON_ACKGEN  0x80    /* Acknowledge generation */
+#define I2CCON_IRPND   0x10    /* Interrupt pending bit */
+#define I2C_MODE_MT    0xC0    /* Master Transmit Mode */
+#define I2C_MODE_MR    0x80    /* Master Receive Mode */
+#define I2C_START_STOP 0x20    /* START / STOP */
+#define I2C_TXRX_ENA   0x10    /* I2C Tx/Rx enable */
+
+#define I2C_TIMEOUT_MS 10              /* 10 ms */
+
 #endif /* _S3C24X0_I2C_H */
index e7e96921d21d6efa7ab56e6ccceb41d5f918d4ef..ef797252198c7ad342308166e0e8d64adea6c0c0 100644 (file)
@@ -3,6 +3,9 @@
  * Copyright (C) 2011, 2013 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index 6c2f221fed6ee71ab95ea1eefb13ce8812f230f9..1c12fb8c4f7b73003861a355d0dea3007e126956 100644 (file)
@@ -3,6 +3,9 @@
  * Copyright (C) 2012 Renesas Solutions Corp.
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index 05bf4d476d15d86a9bdcc300ce795a488553f46d..c102a1ab10a1109964c976908fc1e027a3e145be 100644 (file)
@@ -11,6 +11,9 @@
  * This has been changed substantially by Gerald Van Baren, Custom IDEAS,
  * vanbaren@cideas.com.  It was heavily influenced by LiMon, written by
  * Neil Russell.
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index c0779079ab7eaa45cef16674064f84c8ab08870b..90292d287137ecddaf1d19a82c64b424f31e74c8 100644 (file)
@@ -3,6 +3,9 @@
  * Author: Alex Bounine
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <config.h>
index 2f6b364a7d378f43987246d0aaf2f73c650eab25..85be58fee2daa40d07b89cb9e5c89b8e701425c8 100644 (file)
@@ -8,6 +8,9 @@
  * Copyright (c) 2012-2013 Xilinx, Michal Simek
  *
  * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * NOTE: This driver should be converted to driver model before June 2017.
+ * Please see doc/driver-model/i2c-howto.txt for instructions.
  */
 
 #include <common.h>
index 75023149a4d3749e3526b315104c93a7df43be00..e70064c677186cbb44fce787fa59d3369ffcc598 100644 (file)
@@ -284,4 +284,4 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
        return 0;
 }
 /* Use priorty 0 to override the default if it happens to be linked in */
-SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_SPI, spl_spi_load_image);
+SPL_LOAD_IMAGE_METHOD("sunxi SPI" 0, BOOT_DEVICE_SPI, spl_spi_load_image);
index eb8e93618f27614aad40287f0ad794e2273c977b..bf5f89b61ac6c791336531c0a253ae13af868b25 100644 (file)
@@ -45,9 +45,12 @@ static void dtsec_configure_serdes(struct fm_eth *priv)
 
 qsgmii_loop:
        /* SGMII IF mode + AN enable only for 1G SGMII, not for 2.5G */
-       value = PHY_SGMII_IF_MODE_SGMII;
-       if (!sgmii_2500)
-               value |= PHY_SGMII_IF_MODE_AN;
+       if (sgmii_2500)
+               value = PHY_SGMII_CR_PHY_RESET |
+                       PHY_SGMII_IF_SPEED_GIGABIT |
+                       PHY_SGMII_IF_MODE_SGMII;
+       else
+               value = PHY_SGMII_IF_MODE_SGMII | PHY_SGMII_IF_MODE_AN;
 
        memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0x14, value);
 
@@ -55,15 +58,24 @@ qsgmii_loop:
        value = PHY_SGMII_DEV_ABILITY_SGMII;
        memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0x4, value);
 
-       /* Adjust link timer for SGMII  -
-       1.6 ms in units of 8 ns = 2 * 10^5 = 0x30d40 */
-       memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0x13, 0x3);
-       memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0x12, 0xd40);
+       if (sgmii_2500) {
+               /* Adjust link timer for 2.5G SGMII,
+                * 1.6 ms in units of 3.2 ns:
+                * 1.6ms / 3.2ns = 5 * 10^5 = 0x7a120.
+                */
+               memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0x13, 0x0007);
+               memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0x12, 0xa120);
+       } else {
+               /* Adjust link timer for SGMII,
+                * 1.6 ms in units of 8 ns:
+                * 1.6ms / 8ns = 2 * 10^5 = 0x30d40.
+                */
+               memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0x13, 0x0003);
+               memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0x12, 0x0d40);
+       }
 
        /* Restart AN */
-       value = PHY_SGMII_CR_DEF_VAL;
-       if (!sgmii_2500)
-               value |= PHY_SGMII_CR_RESET_AN;
+       value = PHY_SGMII_CR_DEF_VAL | PHY_SGMII_CR_RESET_AN;
        memac_mdio_write(&bus, i, MDIO_DEVAD_NONE, 0, value);
 
        if ((priv->enet_if == PHY_INTERFACE_MODE_QSGMII) && (i < 3)) {
@@ -391,6 +403,7 @@ static int fm_eth_startup(struct fm_eth *fm_eth)
 
        /* For some reason we need to set SPEED_100 */
        if (((fm_eth->enet_if == PHY_INTERFACE_MODE_SGMII) ||
+            (fm_eth->enet_if == PHY_INTERFACE_MODE_SGMII_2500) ||
             (fm_eth->enet_if == PHY_INTERFACE_MODE_QSGMII)) &&
              mac->set_if_mode)
                mac->set_if_mode(mac, fm_eth->enet_if, SPEED_100);
index 81a64bf656a2a21e35f024e4295667c95ecfa5fa..1b5779ceceb01d1995495ba95a34b9e0abd8036e 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_SGMII_2500:
        case PHY_INTERFACE_MODE_QSGMII:
                if_mode &= ~IF_MODE_MASK;
                if_mode |= (IF_MODE_GMII);
index 28a14018835b175469233385af7546e0ac3ceddd..7163fa257f4c5ad5f9476a862fe5b267f8684d33 100644 (file)
@@ -300,10 +300,11 @@ static int ksz9021_of_config(struct phy_device *phydev)
        };
        int i, ret = 0;
 
-       for (i = 0; i < ARRAY_SIZE(ofcfg); i++)
+       for (i = 0; i < ARRAY_SIZE(ofcfg); i++) {
                ret = ksz90x1_of_config_group(phydev, &(ofcfg[i]));
                if (ret)
                        return ret;
+       }
 
        return 0;
 }
@@ -408,10 +409,11 @@ static int ksz9031_of_config(struct phy_device *phydev)
        };
        int i, ret = 0;
 
-       for (i = 0; i < ARRAY_SIZE(ofcfg); i++)
+       for (i = 0; i < ARRAY_SIZE(ofcfg); i++) {
                ret = ksz90x1_of_config_group(phydev, &(ofcfg[i]));
                if (ret)
                        return ret;
+       }
 
        return 0;
 }
index 7a99cb023401581a117d85976f5bf9635568c083..635acf5844e3e73c89b751a6f820b6949fb6affb 100644 (file)
@@ -9,13 +9,16 @@
  */
 #include <config.h>
 #include <common.h>
+#include <linux/bitops.h>
 #include <phy.h>
 
+#define PHY_RTL8211x_FORCE_MASTER BIT(1)
+
 #define PHY_AUTONEGOTIATE_TIMEOUT 5000
 
 /* RTL8211x 1000BASE-T Control Register */
-#define MIIM_RTL8211x_CTRL1000T_MSCE (1 << 12);
-#define MIIM_RTL8211X_CTRL1000T_MASTER (1 << 11);
+#define MIIM_RTL8211x_CTRL1000T_MSCE BIT(12);
+#define MIIM_RTL8211x_CTRL1000T_MASTER BIT(11);
 
 /* RTL8211x PHY Status Register */
 #define MIIM_RTL8211x_PHY_STATUS       0x11
 #define MIIM_RTL8211F_TX_DELAY         0x100
 #define MIIM_RTL8211F_LCR              0x10
 
+static int rtl8211b_probe(struct phy_device *phydev)
+{
+#ifdef CONFIG_RTL8211X_PHY_FORCE_MASTER
+       phydev->flags |= PHY_RTL8211x_FORCE_MASTER;
+#endif
+
+       return 0;
+}
+
 /* RealTek RTL8211x */
 static int rtl8211x_config(struct phy_device *phydev)
 {
@@ -58,14 +70,17 @@ static int rtl8211x_config(struct phy_device *phydev)
         */
        phy_write(phydev, MDIO_DEVAD_NONE, MIIM_RTL8211x_PHY_INER,
                  MIIM_RTL8211x_PHY_INTR_DIS);
-#ifdef CONFIG_RTL8211X_PHY_FORCE_MASTER
-       unsigned int reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000);
-       /* force manual master/slave configuration */
-       reg |= MIIM_RTL8211x_CTRL1000T_MSCE;
-       /* force master mode */
-       reg |= MIIM_RTL8211X_CTRL1000T_MASTER;
-       phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, reg);
-#endif
+
+       if (phydev->flags & PHY_RTL8211x_FORCE_MASTER) {
+               unsigned int reg;
+
+               reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000);
+               /* force manual master/slave configuration */
+               reg |= MIIM_RTL8211x_CTRL1000T_MSCE;
+               /* force master mode */
+               reg |= MIIM_RTL8211x_CTRL1000T_MASTER;
+               phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, reg);
+       }
        /* read interrupt status just to clear it */
        phy_read(phydev, MDIO_DEVAD_NONE, MIIM_RTL8211x_PHY_INER);
 
@@ -248,6 +263,7 @@ static struct phy_driver RTL8211B_driver = {
        .uid = 0x1cc912,
        .mask = 0xffffff,
        .features = PHY_GBIT_FEATURES,
+       .probe = &rtl8211b_probe,
        .config = &rtl8211x_config,
        .startup = &rtl8211x_startup,
        .shutdown = &genphy_shutdown,
index 2635b821e9679f5b938e26fa500b7f11a852aab1..a077b98d8c451e5279fdc378feafa15d7b263f01 100644 (file)
@@ -30,9 +30,8 @@
 #define MIIM_CIS8204_SLEDCON_INIT      0x1115
 
 /* Vitesse VSC8601 Extended PHY Control Register 1 */
-#define MIIM_VSC8601_EPHY_CON          0x17
-#define MIIM_VSC8601_EPHY_CON_INIT_SKEW        0x1120
-#define MIIM_VSC8601_SKEW_CTRL         0x1c
+#define MII_VSC8601_EPHY_CTL           0x17
+#define MII_VSC8601_EPHY_CTL_RGMII_SKEW        (1 << 8)
 
 #define PHY_EXT_PAGE_ACCESS    0x1f
 #define PHY_EXT_PAGE_ACCESS_GENERAL    0x10
@@ -142,26 +141,32 @@ static int cis8204_config(struct phy_device *phydev)
 }
 
 /* Vitesse VSC8601 */
+/* This adds a skew for both TX and RX clocks, so the skew should only be
+ * applied to "rgmii-id" interfaces. It may not work as expected
+ * on "rgmii-txid", "rgmii-rxid" or "rgmii" interfaces. */
+static int vsc8601_add_skew(struct phy_device *phydev)
+{
+       int ret;
+
+       ret = phy_read(phydev, MDIO_DEVAD_NONE, MII_VSC8601_EPHY_CTL);
+       if (ret < 0)
+               return ret;
+
+       ret |= MII_VSC8601_EPHY_CTL_RGMII_SKEW;
+       return phy_write(phydev, MDIO_DEVAD_NONE, MII_VSC8601_EPHY_CTL, ret);
+}
+
 static int vsc8601_config(struct phy_device *phydev)
 {
-       /* Configure some basic stuff */
-#ifdef CONFIG_SYS_VSC8601_SKEWFIX
-       phy_write(phydev, MDIO_DEVAD_NONE, MIIM_VSC8601_EPHY_CON,
-                       MIIM_VSC8601_EPHY_CON_INIT_SKEW);
-#if defined(CONFIG_SYS_VSC8601_SKEW_TX) && defined(CONFIG_SYS_VSC8601_SKEW_RX)
-       phy_write(phydev, MDIO_DEVAD_NONE, PHY_EXT_PAGE_ACCESS, 1);
-#define VSC8101_SKEW \
-       ((CONFIG_SYS_VSC8601_SKEW_TX << 14) \
-       | (CONFIG_SYS_VSC8601_SKEW_RX << 12))
-       phy_write(phydev, MDIO_DEVAD_NONE, MIIM_VSC8601_SKEW_CTRL,
-                       VSC8101_SKEW);
-       phy_write(phydev, MDIO_DEVAD_NONE, PHY_EXT_PAGE_ACCESS, 0);
-#endif
-#endif
+       int ret = 0;
 
-       genphy_config_aneg(phydev);
+       if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
+               ret = vsc8601_add_skew(phydev);
 
-       return 0;
+       if (ret < 0)
+               return ret;
+
+       return genphy_config_aneg(phydev);
 }
 
 static int vsc8574_config(struct phy_device *phydev)
index b8376b4f47bf315b542d9e050a3cffb45d8f4dd0..ff2c37006edc94578e3119027269743b3ef1bbe0 100644 (file)
@@ -33,6 +33,16 @@ config PCI_PNP
        help
          Enable PCI memory and I/O space resource allocation and assignment.
 
+config PCIE_DW_MVEBU
+       bool "Enable Armada-8K PCIe driver (DesignWare core)"
+       default n
+       depends on DM_PCI
+       depends on ARMADA_8K
+       help
+         Say Y here if you want to enable PCIe controller support on
+         Armada-8K SoCs. The PCIe controller on Armada-8K is based on
+         DesignWare hardware.
+
 config PCI_SANDBOX
        bool "Sandbox PCI support"
        depends on SANDBOX && DM_PCI
index 9583e91ceb07e51370ed0f6f05d2676a869f5e05..86717a4fc36a31f9179714e7a04f0a6ec04f4eff 100644 (file)
@@ -30,5 +30,6 @@ obj-$(CONFIG_SH7780_PCI) +=pci_sh7780.o
 obj-$(CONFIG_PCI_TEGRA) += pci_tegra.o
 obj-$(CONFIG_TSI108_PCI) += tsi108_pci.o
 obj-$(CONFIG_WINBOND_83C553) += w83c553f.o
+obj-$(CONFIG_PCIE_DW_MVEBU) += pcie_dw_mvebu.o
 obj-$(CONFIG_PCIE_LAYERSCAPE) += pcie_layerscape.o
 obj-$(CONFIG_PCI_XILINX) += pcie_xilinx.o
diff --git a/drivers/pci/pcie_dw_mvebu.c b/drivers/pci/pcie_dw_mvebu.c
new file mode 100644 (file)
index 0000000..17fa024
--- /dev/null
@@ -0,0 +1,535 @@
+/*
+ * Copyright (C) 2015 Marvell International Ltd.
+ *
+ * Copyright (C) 2016 Stefan Roese <sr@denx.de>
+ *
+ * Based on:
+ *   - drivers/pci/pcie_imx.c
+ *   - drivers/pci/pci_mvebu.c
+ *   - drivers/pci/pcie_xilinx.c
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <pci.h>
+#include <asm/io.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* PCI Config space registers */
+#define PCIE_CONFIG_BAR0               0x10
+#define PCIE_LINK_STATUS_REG           0x80
+#define PCIE_LINK_STATUS_SPEED_OFF     16
+#define PCIE_LINK_STATUS_SPEED_MASK    (0xf << PCIE_LINK_STATUS_SPEED_OFF)
+#define PCIE_LINK_STATUS_WIDTH_OFF     20
+#define PCIE_LINK_STATUS_WIDTH_MASK    (0xf << PCIE_LINK_STATUS_WIDTH_OFF)
+
+/* Resizable bar capability registers */
+#define RESIZABLE_BAR_CAP              0x250
+#define RESIZABLE_BAR_CTL0             0x254
+#define RESIZABLE_BAR_CTL1             0x258
+
+/* iATU registers */
+#define PCIE_ATU_VIEWPORT              0x900
+#define PCIE_ATU_REGION_INBOUND                (0x1 << 31)
+#define PCIE_ATU_REGION_OUTBOUND       (0x0 << 31)
+#define PCIE_ATU_REGION_INDEX1         (0x1 << 0)
+#define PCIE_ATU_REGION_INDEX0         (0x0 << 0)
+#define PCIE_ATU_CR1                   0x904
+#define PCIE_ATU_TYPE_MEM              (0x0 << 0)
+#define PCIE_ATU_TYPE_IO               (0x2 << 0)
+#define PCIE_ATU_TYPE_CFG0             (0x4 << 0)
+#define PCIE_ATU_TYPE_CFG1             (0x5 << 0)
+#define PCIE_ATU_CR2                   0x908
+#define PCIE_ATU_ENABLE                        (0x1 << 31)
+#define PCIE_ATU_BAR_MODE_ENABLE       (0x1 << 30)
+#define PCIE_ATU_LOWER_BASE            0x90C
+#define PCIE_ATU_UPPER_BASE            0x910
+#define PCIE_ATU_LIMIT                 0x914
+#define PCIE_ATU_LOWER_TARGET          0x918
+#define PCIE_ATU_BUS(x)                        (((x) & 0xff) << 24)
+#define PCIE_ATU_DEV(x)                        (((x) & 0x1f) << 19)
+#define PCIE_ATU_FUNC(x)               (((x) & 0x7) << 16)
+#define PCIE_ATU_UPPER_TARGET          0x91C
+
+#define PCIE_LINK_CAPABILITY           0x7C
+#define PCIE_LINK_CTL_2                        0xA0
+#define TARGET_LINK_SPEED_MASK         0xF
+#define LINK_SPEED_GEN_1               0x1
+#define LINK_SPEED_GEN_2               0x2
+#define LINK_SPEED_GEN_3               0x3
+
+#define PCIE_GEN3_RELATED              0x890
+#define GEN3_EQU_DISABLE               (1 << 16)
+#define GEN3_ZRXDC_NON_COMP            (1 << 0)
+
+#define PCIE_GEN3_EQU_CTRL             0x8A8
+#define GEN3_EQU_EVAL_2MS_DISABLE      (1 << 5)
+
+#define PCIE_ROOT_COMPLEX_MODE_MASK    (0xF << 4)
+
+#define PCIE_LINK_UP_TIMEOUT_MS                100
+
+#define PCIE_GLOBAL_CONTROL            0x8000
+#define PCIE_APP_LTSSM_EN              (1 << 2)
+#define PCIE_DEVICE_TYPE_OFFSET                (4)
+#define PCIE_DEVICE_TYPE_MASK          (0xF)
+#define PCIE_DEVICE_TYPE_EP            (0x0) /* Endpoint */
+#define PCIE_DEVICE_TYPE_LEP           (0x1) /* Legacy endpoint */
+#define PCIE_DEVICE_TYPE_RC            (0x4) /* Root complex */
+
+#define PCIE_GLOBAL_STATUS             0x8008
+#define PCIE_GLB_STS_RDLH_LINK_UP      (1 << 1)
+#define PCIE_GLB_STS_PHY_LINK_UP       (1 << 9)
+
+#define PCIE_ARCACHE_TRC               0x8050
+#define PCIE_AWCACHE_TRC               0x8054
+#define ARCACHE_SHAREABLE_CACHEABLE    0x3511
+#define AWCACHE_SHAREABLE_CACHEABLE    0x5311
+
+#define LINK_SPEED_GEN_1                0x1
+#define LINK_SPEED_GEN_2                0x2
+#define LINK_SPEED_GEN_3                0x3
+
+/**
+ * struct pcie_dw_mvebu - MVEBU DW PCIe controller state
+ *
+ * @ctrl_base: The base address of the register space
+ * @cfg_base: The base address of the configuration space
+ * @cfg_size: The size of the configuration space which is needed
+ *            as it gets written into the PCIE_ATU_LIMIT register
+ * @first_busno: This driver supports multiple PCIe controllers.
+ *               first_busno stores the bus number of the PCIe root-port
+ *               number which may vary depending on the PCIe setup
+ *               (PEX switches etc).
+ */
+struct pcie_dw_mvebu {
+       void *ctrl_base;
+       void *cfg_base;
+       fdt_size_t cfg_size;
+       int first_busno;
+};
+
+static int pcie_dw_get_link_speed(const void *regs_base)
+{
+       return (readl(regs_base + PCIE_LINK_STATUS_REG) &
+               PCIE_LINK_STATUS_SPEED_MASK) >> PCIE_LINK_STATUS_SPEED_OFF;
+}
+
+static int pcie_dw_get_link_width(const void *regs_base)
+{
+       return (readl(regs_base + PCIE_LINK_STATUS_REG) &
+               PCIE_LINK_STATUS_WIDTH_MASK) >> PCIE_LINK_STATUS_WIDTH_OFF;
+}
+
+/**
+ * set_cfg_address() - Configure the PCIe controller config space access
+ *
+ * @pcie: Pointer to the PCI controller state
+ * @d: PCI device to access
+ * @where: Offset in the configuration space
+ *
+ * Configures the PCIe controller to access the configuration space of
+ * a specific PCIe device and returns the address to use for this
+ * access.
+ *
+ * Return: Address that can be used to access the configation space
+ *         of the requested device / offset
+ */
+static uintptr_t set_cfg_address(struct pcie_dw_mvebu *pcie,
+                                pci_dev_t d, uint where)
+{
+       uintptr_t va_address;
+
+       /*
+        * Region #0 is used for Outbound CFG space access.
+        * Direction = Outbound
+        * Region Index = 0
+        */
+       writel(0, pcie->ctrl_base + PCIE_ATU_VIEWPORT);
+
+       if (PCI_BUS(d) == (pcie->first_busno + 1))
+               /* For local bus, change TLP Type field to 4. */
+               writel(PCIE_ATU_TYPE_CFG0, pcie->ctrl_base + PCIE_ATU_CR1);
+       else
+               /* Otherwise, change TLP Type field to 5. */
+               writel(PCIE_ATU_TYPE_CFG1, pcie->ctrl_base + PCIE_ATU_CR1);
+
+       if (PCI_BUS(d) == pcie->first_busno) {
+               /* Accessing root port configuration space. */
+               va_address = (uintptr_t)pcie->ctrl_base;
+       } else {
+               writel(d << 8, pcie->ctrl_base + PCIE_ATU_LOWER_TARGET);
+               va_address = (uintptr_t)pcie->cfg_base;
+       }
+
+       va_address += where & ~0x3;
+
+       return va_address;
+}
+
+/**
+ * pcie_dw_addr_valid() - Check for valid bus address
+ *
+ * @d: The PCI device to access
+ * @first_busno: Bus number of the PCIe controller root complex
+ *
+ * Return 1 (true) if the PCI device can be accessed by this controller.
+ *
+ * Return: 1 on valid, 0 on invalid
+ */
+static int pcie_dw_addr_valid(pci_dev_t d, int first_busno)
+{
+       if ((PCI_BUS(d) == first_busno) && (PCI_DEV(d) > 0))
+               return 0;
+       if ((PCI_BUS(d) == first_busno + 1) && (PCI_DEV(d) > 0))
+               return 0;
+
+       return 1;
+}
+
+/**
+ * pcie_dw_mvebu_read_config() - Read from configuration space
+ *
+ * @bus: Pointer to the PCI bus
+ * @bdf: Identifies the PCIe device to access
+ * @offset: The offset into the device's configuration space
+ * @valuep: A pointer at which to store the read value
+ * @size: Indicates the size of access to perform
+ *
+ * Read a value of size @size from offset @offset within the configuration
+ * space of the device identified by the bus, device & function numbers in @bdf
+ * on the PCI bus @bus.
+ *
+ * Return: 0 on success
+ */
+static int pcie_dw_mvebu_read_config(struct udevice *bus, pci_dev_t bdf,
+                                    uint offset, ulong *valuep,
+                                    enum pci_size_t size)
+{
+       struct pcie_dw_mvebu *pcie = dev_get_priv(bus);
+       uintptr_t va_address;
+       ulong value;
+
+       debug("PCIE CFG read:  (b,d,f)=(%2d,%2d,%2d) ",
+             PCI_BUS(bdf), PCI_DEV(bdf), PCI_FUNC(bdf));
+
+       if (!pcie_dw_addr_valid(bdf, pcie->first_busno)) {
+               debug("- out of range\n");
+               *valuep = pci_get_ff(size);
+               return 0;
+       }
+
+       va_address = set_cfg_address(pcie, bdf, offset);
+
+       value = readl(va_address);
+
+       debug("(addr,val)=(0x%04x, 0x%08lx)\n", offset, value);
+       *valuep = pci_conv_32_to_size(value, offset, size);
+
+       return 0;
+}
+
+/**
+ * pcie_dw_mvebu_write_config() - Write to configuration space
+ *
+ * @bus: Pointer to the PCI bus
+ * @bdf: Identifies the PCIe device to access
+ * @offset: The offset into the device's configuration space
+ * @value: The value to write
+ * @size: Indicates the size of access to perform
+ *
+ * Write the value @value of size @size from offset @offset within the
+ * configuration space of the device identified by the bus, device & function
+ * numbers in @bdf on the PCI bus @bus.
+ *
+ * Return: 0 on success
+ */
+static int pcie_dw_mvebu_write_config(struct udevice *bus, pci_dev_t bdf,
+                                     uint offset, ulong value,
+                                     enum pci_size_t size)
+{
+       struct pcie_dw_mvebu *pcie = dev_get_priv(bus);
+       uintptr_t va_address;
+       ulong old;
+
+       debug("PCIE CFG write: (b,d,f)=(%2d,%2d,%2d) ",
+             PCI_BUS(bdf), PCI_DEV(bdf), PCI_FUNC(bdf));
+       debug("(addr,val)=(0x%04x, 0x%08lx)\n", offset, value);
+
+       if (!pcie_dw_addr_valid(bdf, pcie->first_busno)) {
+               debug("- out of range\n");
+               return 0;
+       }
+
+       va_address = set_cfg_address(pcie, bdf, offset);
+
+       old = readl(va_address);
+       value = pci_conv_size_to_32(old, value, offset, size);
+       writel(value, va_address);
+
+       return 0;
+}
+
+/**
+ * pcie_dw_configure() - Configure link capabilities and speed
+ *
+ * @regs_base: A pointer to the PCIe controller registers
+ * @cap_speed: The capabilities and speed to configure
+ *
+ * Configure the link capabilities and speed in the PCIe root complex.
+ */
+static void pcie_dw_configure(const void *regs_base, u32 cap_speed)
+{
+       /*
+        * TODO (shadi@marvell.com, sr@denx.de):
+        * Need to read the serdes speed from the dts and according to it
+        * configure the PCIe gen
+        */
+
+       /* Set link to GEN 3 */
+       clrsetbits_le32(regs_base + PCIE_LINK_CTL_2,
+                       TARGET_LINK_SPEED_MASK, cap_speed);
+       clrsetbits_le32(regs_base + PCIE_LINK_CAPABILITY,
+                       TARGET_LINK_SPEED_MASK, cap_speed);
+       setbits_le32(regs_base + PCIE_GEN3_EQU_CTRL, GEN3_EQU_EVAL_2MS_DISABLE);
+}
+
+/**
+ * is_link_up() - Return the link state
+ *
+ * @regs_base: A pointer to the PCIe controller registers
+ *
+ * Return: 1 (true) for active line and 0 (false) for no link
+ */
+static int is_link_up(const void *regs_base)
+{
+       u32 mask = PCIE_GLB_STS_RDLH_LINK_UP | PCIE_GLB_STS_PHY_LINK_UP;
+       u32 reg;
+
+       reg = readl(regs_base + PCIE_GLOBAL_STATUS);
+       if ((reg & mask) == mask)
+               return 1;
+
+       return 0;
+}
+
+/**
+ * wait_link_up() - Wait for the link to come up
+ *
+ * @regs_base: A pointer to the PCIe controller registers
+ *
+ * Return: 1 (true) for active line and 0 (false) for no link (timeout)
+ */
+static int wait_link_up(const void *regs_base)
+{
+       unsigned long timeout;
+
+       timeout = get_timer(0) + PCIE_LINK_UP_TIMEOUT_MS;
+       while (!is_link_up(regs_base)) {
+               if (get_timer(0) > timeout)
+                       return 0;
+       };
+
+       return 1;
+}
+
+/**
+ * pcie_dw_mvebu_pcie_link_up() - Configure the PCIe root port
+ *
+ * @regs_base: A pointer to the PCIe controller registers
+ * @cap_speed: The capabilities and speed to configure
+ *
+ * Configure the PCIe controller root complex depending on the
+ * requested link capabilities and speed.
+ *
+ * Return: 1 (true) for active line and 0 (false) for no link
+ */
+static int pcie_dw_mvebu_pcie_link_up(const void *regs_base, u32 cap_speed)
+{
+       if (!is_link_up(regs_base)) {
+               /* Disable LTSSM state machine to enable configuration */
+               clrbits_le32(regs_base + PCIE_GLOBAL_CONTROL,
+                            PCIE_APP_LTSSM_EN);
+       }
+
+       clrsetbits_le32(regs_base + PCIE_GLOBAL_CONTROL,
+                       PCIE_DEVICE_TYPE_MASK << PCIE_DEVICE_TYPE_OFFSET,
+                       PCIE_DEVICE_TYPE_RC << PCIE_DEVICE_TYPE_OFFSET);
+
+       /* Set the PCIe master AXI attributes */
+       writel(ARCACHE_SHAREABLE_CACHEABLE, regs_base + PCIE_ARCACHE_TRC);
+       writel(AWCACHE_SHAREABLE_CACHEABLE, regs_base + PCIE_AWCACHE_TRC);
+
+       /* DW pre link configurations */
+       pcie_dw_configure(regs_base, cap_speed);
+
+       if (!is_link_up(regs_base)) {
+               /* Configuration done. Start LTSSM */
+               setbits_le32(regs_base + PCIE_GLOBAL_CONTROL,
+                            PCIE_APP_LTSSM_EN);
+       }
+
+       /* Check that link was established */
+       if (!wait_link_up(regs_base))
+               return 0;
+
+       /*
+        * Link can be established in Gen 1. still need to wait
+        * till MAC nagaotiation is completed
+        */
+       udelay(100);
+
+       return 1;
+}
+
+/**
+ * pcie_dw_regions_setup() - iATU region setup
+ *
+ * @pcie: Pointer to the PCI controller state
+ *
+ * Configure the iATU regions in the PCIe controller for outbound access.
+ */
+static void pcie_dw_regions_setup(struct pcie_dw_mvebu *pcie)
+{
+       /*
+        * Region #0 is used for Outbound CFG space access.
+        * Direction = Outbound
+        * Region Index = 0
+        */
+       writel(0, pcie->ctrl_base + PCIE_ATU_VIEWPORT);
+
+       writel((u32)(uintptr_t)pcie->cfg_base, pcie->ctrl_base
+              + PCIE_ATU_LOWER_BASE);
+       writel(0, pcie->ctrl_base + PCIE_ATU_UPPER_BASE);
+       writel((u32)(uintptr_t)pcie->cfg_base + pcie->cfg_size,
+              pcie->ctrl_base + PCIE_ATU_LIMIT);
+
+       writel(0, pcie->ctrl_base + PCIE_ATU_LOWER_TARGET);
+       writel(0, pcie->ctrl_base + PCIE_ATU_UPPER_TARGET);
+       writel(PCIE_ATU_TYPE_CFG0, pcie->ctrl_base + PCIE_ATU_CR1);
+       writel(PCIE_ATU_ENABLE, pcie->ctrl_base + PCIE_ATU_CR2);
+}
+
+/**
+ * pcie_dw_set_host_bars() - Configure the host BARs
+ *
+ * @regs_base: A pointer to the PCIe controller registers
+ *
+ * Configure the host BARs of the PCIe controller root port so that
+ * PCI(e) devices may access the system memory.
+ */
+static void pcie_dw_set_host_bars(const void *regs_base)
+{
+       u32 size = gd->ram_size;
+       u64 max_size;
+       u32 reg;
+       u32 bar0;
+
+       /* Verify the maximal BAR size */
+       reg = readl(regs_base + RESIZABLE_BAR_CAP);
+       max_size = 1ULL << (5 + (reg + (1 << 4)));
+
+       if (size > max_size) {
+               size = max_size;
+               printf("Warning: PCIe BARs can't map all DRAM space\n");
+       }
+
+       /* Set the BAR base and size towards DDR */
+       bar0 = CONFIG_SYS_SDRAM_BASE & ~0xf;
+       bar0 |= PCI_BASE_ADDRESS_MEM_TYPE_32;
+       writel(CONFIG_SYS_SDRAM_BASE, regs_base + PCIE_CONFIG_BAR0);
+
+       reg = ((size >> 20) - 1) << 12;
+       writel(size, regs_base + RESIZABLE_BAR_CTL0);
+}
+
+/**
+ * pcie_dw_mvebu_probe() - Probe the PCIe bus for active link
+ *
+ * @dev: A pointer to the device being operated on
+ *
+ * Probe for an active link on the PCIe bus and configure the controller
+ * to enable this port.
+ *
+ * Return: 0 on success, else -ENODEV
+ */
+static int pcie_dw_mvebu_probe(struct udevice *dev)
+{
+       struct pcie_dw_mvebu *pcie = dev_get_priv(dev);
+       struct udevice *ctlr = pci_get_controller(dev);
+       struct pci_controller *hose = dev_get_uclass_priv(ctlr);
+
+       pcie->first_busno = dev->seq;
+
+       /* Don't register host if link is down */
+       if (!pcie_dw_mvebu_pcie_link_up(pcie->ctrl_base, LINK_SPEED_GEN_3)) {
+               printf("PCIE-%d: Link down\n", dev->seq);
+               return -ENODEV;
+       }
+
+       printf("PCIE-%d: Link up (Gen%d-x%d, Bus%d)\n", dev->seq,
+              pcie_dw_get_link_speed(pcie->ctrl_base),
+              pcie_dw_get_link_width(pcie->ctrl_base), hose->first_busno);
+
+       pcie_dw_regions_setup(pcie);
+
+       /* Set the CLASS_REV of RC CFG header to PCI_CLASS_BRIDGE_PCI */
+       clrsetbits_le32(pcie->ctrl_base + PCI_CLASS_REVISION,
+                       0xffff << 16, PCI_CLASS_BRIDGE_PCI << 16);
+
+       pcie_dw_set_host_bars(pcie->ctrl_base);
+
+       return 0;
+}
+
+/**
+ * pcie_dw_mvebu_ofdata_to_platdata() - Translate from DT to device state
+ *
+ * @dev: A pointer to the device being operated on
+ *
+ * Translate relevant data from the device tree pertaining to device @dev into
+ * state that the driver will later make use of. This state is stored in the
+ * device's private data structure.
+ *
+ * Return: 0 on success, else -EINVAL
+ */
+static int pcie_dw_mvebu_ofdata_to_platdata(struct udevice *dev)
+{
+       struct pcie_dw_mvebu *pcie = dev_get_priv(dev);
+
+       /* Get the controller base address */
+       pcie->ctrl_base = (void *)dev_get_addr_index(dev, 0);
+       if ((fdt_addr_t)pcie->ctrl_base == FDT_ADDR_T_NONE)
+               return -EINVAL;
+
+       /* Get the config space base address and size */
+       pcie->cfg_base = (void *)dev_get_addr_size_index(dev, 1,
+                                                        &pcie->cfg_size);
+       if ((fdt_addr_t)pcie->cfg_base == FDT_ADDR_T_NONE)
+               return -EINVAL;
+
+       return 0;
+}
+
+static const struct dm_pci_ops pcie_dw_mvebu_ops = {
+       .read_config    = pcie_dw_mvebu_read_config,
+       .write_config   = pcie_dw_mvebu_write_config,
+};
+
+static const struct udevice_id pcie_dw_mvebu_ids[] = {
+       { .compatible = "marvell,armada8k-pcie" },
+       { }
+};
+
+U_BOOT_DRIVER(pcie_dw_mvebu) = {
+       .name                   = "pcie_dw_mvebu",
+       .id                     = UCLASS_PCI,
+       .of_match               = pcie_dw_mvebu_ids,
+       .ops                    = &pcie_dw_mvebu_ops,
+       .ofdata_to_platdata     = pcie_dw_mvebu_ofdata_to_platdata,
+       .probe                  = pcie_dw_mvebu_probe,
+       .priv_auto_alloc_size   = sizeof(struct pcie_dw_mvebu),
+};
index df5b7d507ecf75270ab5e03ee1dcd9e7cca2b45d..0a156925794b38039cde62955b8d9d695dd1e0ee 100644 (file)
@@ -69,7 +69,7 @@
        (0x3 << DFX_DEV_GEN_PCIE_CLK_SRC_OFFSET)
 
 #define MAX_LANE_OPTIONS                       10
-#define MAX_UTMI_PHY_COUNT                     2
+#define MAX_UTMI_PHY_COUNT                     3
 
 struct comphy_mux_options {
        u32 type;
index 651397d8161d0ea4fc5f40db9702c0e057779678..bc2508bb7e0372137ee7b861e00189c08f4ef27a 100644 (file)
@@ -112,6 +112,7 @@ static int comphy_probe(struct udevice *dev)
        struct comphy_map comphy_map_data[MAX_LANE_OPTIONS];
        int subnode;
        int lane;
+       int last_idx = 0;
 
        /* Save base addresses for later use */
        chip_cfg->comphy_base_addr = (void *)dev_get_addr_index(dev, 0);
@@ -178,10 +179,20 @@ static int comphy_probe(struct udevice *dev)
        /* PHY power UP sequence */
        chip_cfg->ptr_comphy_chip_init(chip_cfg, comphy_map_data);
        /* PHY print SerDes status */
+       if (of_machine_is_compatible("marvell,armada8040"))
+               printf("Comphy chip #%d:\n", chip_cfg->comphy_index);
        comphy_print(chip_cfg, comphy_map_data);
 
-       /* Initialize dedicated PHYs (not muxed SerDes lanes) */
-       comphy_dedicated_phys_init();
+       /*
+        * Only run the dedicated PHY init code once, in the last PHY init call
+        */
+       if (of_machine_is_compatible("marvell,armada8040"))
+               last_idx = 1;
+
+       if (chip_cfg->comphy_index == last_idx) {
+               /* Initialize dedicated PHYs (not muxed SerDes lanes) */
+               comphy_dedicated_phys_init();
+       }
 
        return 0;
 }
index 12be3cfe0b8aaf5d86b330b810fb7bb2043d4fd2..efcb4c0003a68935e777d3fcca4bb90cbc7ef4d0 100644 (file)
@@ -181,5 +181,6 @@ source "drivers/pinctrl/meson/Kconfig"
 source "drivers/pinctrl/nxp/Kconfig"
 source "drivers/pinctrl/uniphier/Kconfig"
 source "drivers/pinctrl/exynos/Kconfig"
+source "drivers/pinctrl/mvebu/Kconfig"
 
 endmenu
index f28b5c18f6874e778ed1e71ba998899a562a1676..512112af649e1027ce1982d6038b388991e2a225 100644 (file)
@@ -15,3 +15,4 @@ obj-$(CONFIG_PINCTRL_UNIPHIER)        += uniphier/
 obj-$(CONFIG_PIC32_PINCTRL)    += pinctrl_pic32.o
 obj-$(CONFIG_PINCTRL_EXYNOS)   += exynos/
 obj-$(CONFIG_PINCTRL_MESON)    += meson/
+obj-$(CONFIG_PINCTRL_MVEBU)    += mvebu/
diff --git a/drivers/pinctrl/mvebu/Kconfig b/drivers/pinctrl/mvebu/Kconfig
new file mode 100644 (file)
index 0000000..cf9c299
--- /dev/null
@@ -0,0 +1,7 @@
+config PINCTRL_MVEBU
+       depends on ARCH_MVEBU
+       bool
+       default y
+       help
+          Support pin multiplexing and pin configuration control on
+          Marvell's Armada-8K SoC.
diff --git a/drivers/pinctrl/mvebu/Makefile b/drivers/pinctrl/mvebu/Makefile
new file mode 100644 (file)
index 0000000..f4f7864
--- /dev/null
@@ -0,0 +1,7 @@
+#
+# Copyright (C) 2016 Marvell International Ltd.
+#
+# SPDX-License-Identifier:     GPL-2.0
+# https://spdx.org/licenses
+
+obj-$(CONFIG_PINCTRL_MVEBU)    += pinctrl-mvebu.o
diff --git a/drivers/pinctrl/mvebu/pinctrl-mvebu.c b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
new file mode 100644 (file)
index 0000000..b077639
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2016 Marvell International Ltd.
+ *
+ * SPDX-License-Identifier:    GPL-2.0
+ * https://spdx.org/licenses
+ */
+
+#include <common.h>
+#include <config.h>
+#include <fdtdec.h>
+#include <errno.h>
+#include <dm.h>
+#include <dm/pinctrl.h>
+#include <dm/root.h>
+#include <asm/system.h>
+#include <asm/io.h>
+#include <asm/arch-armada8k/soc-info.h>
+#include "pinctrl-mvebu.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * mvebu_pinctrl_set_state: configure pin functions.
+ * @dev: the pinctrl device to be configured.
+ * @config: the state to be configured.
+ * @return: 0 in success
+ */
+int mvebu_pinctrl_set_state(struct udevice *dev, struct udevice *config)
+{
+       const void *blob = gd->fdt_blob;
+       int node = config->of_offset;
+       struct mvebu_pinctrl_priv *priv;
+       u32 pin_arr[MVEBU_MAX_PINS_PER_BANK];
+       u32 function;
+       int i, pin_count;
+
+       priv = dev_get_priv(dev);
+
+       pin_count = fdtdec_get_int_array_count(blob, node,
+                                              "marvell,pins",
+                                              pin_arr,
+                                              MVEBU_MAX_PINS_PER_BANK);
+       if (pin_count <= 0) {
+               debug("Failed reading pins array for pinconfig %s (%d)\n",
+                     config->name, pin_count);
+               return -EINVAL;
+       }
+
+       function = fdtdec_get_int(blob, node, "marvell,function", 0xff);
+
+       for (i = 0; i < pin_count; i++) {
+       int reg_offset;
+       int field_offset;
+               int pin = pin_arr[i];
+
+               if (function > priv->max_func) {
+                       debug("Illegal function %d for pinconfig %s\n",
+                             function, config->name);
+                       return -EINVAL;
+               }
+
+               /* Calculate register address and bit in register */
+               reg_offset   = priv->reg_direction * 4 *
+                                       (pin >> (PIN_REG_SHIFT));
+               field_offset = (BITS_PER_PIN) * (pin & PIN_FIELD_MASK);
+
+               clrsetbits_le32(priv->base_reg + reg_offset,
+                               PIN_FUNC_MASK << field_offset,
+                               (function & PIN_FUNC_MASK) << field_offset);
+       }
+
+       return 0;
+}
+
+/*
+ * mvebu_pinctrl_set_state_all: configure the entire bank pin functions.
+ * @dev: the pinctrl device to be configured.
+ * @config: the state to be configured.
+ * @return: 0 in success
+ */
+static int mvebu_pinctrl_set_state_all(struct udevice *dev,
+                                      struct udevice *config)
+{
+       const void *blob = gd->fdt_blob;
+       int node = config->of_offset;
+       struct mvebu_pinctrl_priv *priv;
+       u32 func_arr[MVEBU_MAX_PINS_PER_BANK];
+       int pin, err;
+
+       priv = dev_get_priv(dev);
+
+       err = fdtdec_get_int_array(blob, node, "pin-func",
+                                  func_arr, priv->pin_cnt);
+       if (err) {
+               debug("Failed reading pin functions for bank %s\n",
+                     priv->bank_name);
+               return -EINVAL;
+       }
+
+       for (pin = 0; pin < priv->pin_cnt; pin++) {
+               int reg_offset;
+               int field_offset;
+               u32 func = func_arr[pin];
+
+               /* Bypass pins with function 0xFF */
+               if (func == 0xff) {
+                       debug("Warning: pin %d value is not modified ", pin);
+                       debug("(kept as default)\n");
+                       continue;
+               } else if (func > priv->max_func) {
+                       debug("Illegal function %d for pin %d\n", func, pin);
+                       return -EINVAL;
+               }
+
+               /* Calculate register address and bit in register */
+               reg_offset   = priv->reg_direction * 4 *
+                                       (pin >> (PIN_REG_SHIFT));
+               field_offset = (BITS_PER_PIN) * (pin & PIN_FIELD_MASK);
+
+               clrsetbits_le32(priv->base_reg + reg_offset,
+                               PIN_FUNC_MASK << field_offset,
+                               (func & PIN_FUNC_MASK) << field_offset);
+       }
+
+       return 0;
+}
+
+int mvebu_pinctl_probe(struct udevice *dev)
+{
+       const void *blob = gd->fdt_blob;
+       int node = dev->of_offset;
+       struct mvebu_pinctrl_priv *priv;
+
+       priv = dev_get_priv(dev);
+       if (!priv) {
+               debug("%s: Failed to get private\n", __func__);
+               return -EINVAL;
+       }
+
+       priv->base_reg = dev_get_addr_ptr(dev);
+       if (priv->base_reg == (void *)FDT_ADDR_T_NONE) {
+               debug("%s: Failed to get base address\n", __func__);
+               return -EINVAL;
+       }
+
+       priv->pin_cnt   = fdtdec_get_int(blob, node, "pin-count",
+                                       MVEBU_MAX_PINS_PER_BANK);
+       priv->max_func  = fdtdec_get_int(blob, node, "max-func",
+                                        MVEBU_MAX_FUNC);
+       priv->bank_name = fdt_getprop(blob, node, "bank-name", NULL);
+
+       priv->reg_direction = 1;
+       if (fdtdec_get_bool(blob, node, "reverse-reg"))
+               priv->reg_direction = -1;
+
+       return mvebu_pinctrl_set_state_all(dev, dev);
+}
+
+static struct pinctrl_ops mvebu_pinctrl_ops = {
+       .set_state      = mvebu_pinctrl_set_state
+};
+
+static const struct udevice_id mvebu_pinctrl_ids[] = {
+       { .compatible = "marvell,mvebu-pinctrl" },
+       { .compatible = "marvell,armada-ap806-pinctrl" },
+       { .compatible = "marvell,a70x0-pinctrl" },
+       { .compatible = "marvell,a80x0-cp0-pinctrl" },
+       { .compatible = "marvell,a80x0-cp1-pinctrl" },
+       { }
+};
+
+U_BOOT_DRIVER(pinctrl_mvebu) = {
+       .name           = "mvebu_pinctrl",
+       .id             = UCLASS_PINCTRL,
+       .of_match       = mvebu_pinctrl_ids,
+       .priv_auto_alloc_size = sizeof(struct mvebu_pinctrl_priv),
+       .ops            = &mvebu_pinctrl_ops,
+       .probe          = mvebu_pinctl_probe
+};
diff --git a/drivers/pinctrl/mvebu/pinctrl-mvebu.h b/drivers/pinctrl/mvebu/pinctrl-mvebu.h
new file mode 100644 (file)
index 0000000..1a1d3ef
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2016 Marvell International Ltd.
+ *
+ * SPDX-License-Identifier:    GPL-2.0
+ * https://spdx.org/licenses
+ */
+
+ #ifndef __PINCTRL_MVEBU_H_
+ #define __PINCTRL_MVEBU_H_
+
+ #define MVEBU_MAX_PINCTL_BANKS                4
+ #define MVEBU_MAX_PINS_PER_BANK       100
+ #define MVEBU_MAX_FUNC                        0xF
+
+/*
+ * struct mvebu_pin_bank_data: mvebu-pinctrl bank data
+ * @base_reg: controller base address for this bank
+ * @pin_cnt:  number of pins included in this bank
+ * @max_func: maximum configurable function value for pins in this bank
+ * @reg_direction:
+ * @bank_name: the pin's bank name
+ */
+struct mvebu_pinctrl_priv {
+       void            *base_reg;
+       uint            pin_cnt;
+       uint            max_func;
+       int             reg_direction;
+       const char      *bank_name;
+};
+
+#endif /* __PINCTRL_MVEBU_H_ */
index 0dc3dd8117058b8c0c016ca0ad23d55c98d141b7..6069c935c12e6e2fe95e0a0f3c303507d3c199c5 100644 (file)
@@ -138,6 +138,10 @@ bool has_erratum_a005697(void)
        case SVR_9131:
        case SVR_9132:
                return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
+#endif
+#ifdef ONFIG_ARM64
+       case SVR_LS1012A:
+               return IS_SVR_REV(svr, 1, 0);
 #endif
        }
        return false;
index 070aadfa2063a7ee9c40238085f145e87b7b73b4..ed441f32433a2defd053e3d79ab40942ce67d04f 100644 (file)
@@ -9,6 +9,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <malloc.h>
+#include <memalign.h>
 #include <usb.h>
 #include <usb/lin_gadget_compat.h>
 #include <linux/mii.h>
@@ -71,17 +72,25 @@ static const struct r8152_version const r8152_versions[] = {
 static
 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
 {
-       return usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0),
-                              RTL8152_REQ_GET_REGS, RTL8152_REQT_READ,
-                              value, index, data, size, 500);
+       ALLOC_CACHE_ALIGN_BUFFER(void *, tmp, size);
+       int ret;
+
+       ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0),
+               RTL8152_REQ_GET_REGS, RTL8152_REQT_READ,
+               value, index, tmp, size, 500);
+       memcpy(data, tmp, size);
+       return ret;
 }
 
 static
 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
 {
+       ALLOC_CACHE_ALIGN_BUFFER(void *, tmp, size);
+
+       memcpy(tmp, data, size);
        return usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0),
                               RTL8152_REQ_SET_REGS, RTL8152_REQT_WRITE,
-                              value, index, data, size, 500);
+                              value, index, tmp, size, 500);
 }
 
 int generic_ocp_read(struct r8152 *tp, u16 index, u16 size,
@@ -1216,7 +1225,8 @@ static int r8152_send_common(struct ueth_data *ueth, void *packet, int length)
        u32 opts1, opts2 = 0;
        int err;
        int actual_len;
-       unsigned char msg[PKTSIZE + sizeof(struct tx_desc)];
+       ALLOC_CACHE_ALIGN_BUFFER(uint8_t, msg,
+                                PKTSIZE + sizeof(struct tx_desc));
        struct tx_desc *tx_desc = (struct tx_desc *)msg;
 
        debug("** %s(), len %d\n", __func__, length);
@@ -1257,7 +1267,7 @@ static int r8152_recv(struct eth_device *eth)
 {
        struct ueth_data *dev = (struct ueth_data *)eth->priv;
 
-       static unsigned char  recv_buf[RTL8152_AGG_BUF_SZ];
+       ALLOC_CACHE_ALIGN_BUFFER(uint8_t, recv_buf, RTL8152_AGG_BUF_SZ);
        unsigned char *pkt_ptr;
        int err;
        int actual_len;
index 361fccebf728c1c0a8cabdb269649ac89e88b0e9..63daaa6759918f316a8679a307bd7268724c9e07 100644 (file)
@@ -7,12 +7,15 @@
  */
 
 #include <common.h>
+#include <dm.h>
 #include <errno.h>
 #include <pci.h>
 #include <usb.h>
 
 #include "xhci.h"
 
+#ifndef CONFIG_DM_USB
+
 /*
  * Create the appropriate control structures to manage a new XHCI host
  * controller.
@@ -58,3 +61,81 @@ int xhci_hcd_init(int index, struct xhci_hccr **ret_hccr,
 void xhci_hcd_stop(int index)
 {
 }
+
+#else
+
+struct xhci_pci_priv {
+       struct xhci_ctrl ctrl;  /* Needs to come first in this struct! */
+};
+
+static void xhci_pci_init(struct udevice *dev, struct xhci_hccr **ret_hccr,
+                         struct xhci_hcor **ret_hcor)
+{
+       struct xhci_hccr *hccr;
+       struct xhci_hcor *hcor;
+       u32 cmd;
+
+       hccr = (struct xhci_hccr *)dm_pci_map_bar(dev,
+                       PCI_BASE_ADDRESS_0, PCI_REGION_MEM);
+       hcor = (struct xhci_hcor *)((uintptr_t) hccr +
+                       HC_LENGTH(xhci_readl(&hccr->cr_capbase)));
+
+       debug("XHCI-PCI init hccr 0x%x and hcor 0x%x hc_length %d\n",
+             (u32)hccr, (u32)hcor,
+             (u32)HC_LENGTH(xhci_readl(&hccr->cr_capbase)));
+
+       *ret_hccr = hccr;
+       *ret_hcor = hcor;
+
+       /* enable busmaster */
+       dm_pci_read_config32(dev, PCI_COMMAND, &cmd);
+       cmd |= PCI_COMMAND_MASTER;
+       dm_pci_write_config32(dev, PCI_COMMAND, cmd);
+}
+
+static int xhci_pci_probe(struct udevice *dev)
+{
+       struct xhci_hccr *hccr;
+       struct xhci_hcor *hcor;
+
+       xhci_pci_init(dev, &hccr, &hcor);
+
+       return xhci_register(dev, hccr, hcor);
+}
+
+static int xhci_pci_remove(struct udevice *dev)
+{
+       int ret;
+
+       ret = xhci_deregister(dev);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+static const struct udevice_id xhci_pci_ids[] = {
+       { .compatible = "xhci-pci" },
+       { }
+};
+
+U_BOOT_DRIVER(xhci_pci) = {
+       .name   = "xhci_pci",
+       .id     = UCLASS_USB,
+       .probe = xhci_pci_probe,
+       .remove = xhci_pci_remove,
+       .of_match = xhci_pci_ids,
+       .ops    = &xhci_usb_ops,
+       .platdata_auto_alloc_size = sizeof(struct usb_platdata),
+       .priv_auto_alloc_size = sizeof(struct xhci_pci_priv),
+       .flags  = DM_FLAG_ALLOC_PRIV_DMA,
+};
+
+static struct pci_device_id xhci_pci_supported[] = {
+       { PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_XHCI, ~0) },
+       {},
+};
+
+U_BOOT_PCI_DEVICE(xhci_pci, xhci_pci_supported);
+
+#endif /* CONFIG_DM_USB */
index 8efd513f324763830f63c2c070bbdeab6d758198..06f5ceb008deb4054e9fbbc3bbf0d42b7b1ad652 100644 (file)
        "optargs=\0" \
        "mmcdev=0\0" \
        "mmcroot=/dev/mmcblk0p2 ro\0" \
+       "usbroot=/dev/sda2 ro\0" \
        "mmcrootfstype=ext4 rootwait\0" \
+       "usbrootfstype=ext4 rootwait\0" \
        "rootpath=/export/rootfs\0" \
        "nfsopts=nolock\0" \
        "static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}" \
                "${mtdparts} " \
                "root=${mmcroot} " \
                "rootfstype=${mmcrootfstype}\0" \
+       "usbargs=setenv bootargs console=${console} " \
+               "${optargs} " \
+               "${mtdparts} " \
+               "root=${usbroot} " \
+               "rootfstype=${usbrootfstype}\0" \
        "spiroot=/dev/mtdblock4 rw\0" \
        "spirootfstype=jffs2\0" \
        "spisrcaddr=0xe0000\0" \
                "ip=dhcp\0" \
        "bootenv=uEnv.txt\0" \
        "loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \
+       "usbloadbootenv=load usb 0:1 ${loadaddr} ${bootenv}\0" \
        "importbootenv=echo Importing environment from mmc ...; " \
                "env import -t $loadaddr $filesize\0" \
+       "usbimportbootenv=echo Importing environment from USB ...; " \
+               "env import -t $loadaddr $filesize\0" \
        "ramargs=setenv bootargs console=${console} " \
                "${optargs} " \
                "root=${ramroot} " \
                "rootfstype=${ramrootfstype}\0" \
        "loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \
        "loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \
+       "usbloadimage=load usb 0:1 ${loadaddr} kernel-fit.itb\0" \
        "loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}\0" \
+       "usbloados=run usbargs; " \
+               "bootm ${loadaddr}#conf${board_name}; " \
+               "if test $? -ne 0; then " \
+                       "echo Using default FIT configuration; " \
+                       "bootm ${loadaddr}; " \
+               "fi;\0" \
        "mmcloados=run mmcargs; " \
                "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
                        "if run loadfdt; then " \
                "else " \
                        "bootz; " \
                "fi;\0" \
+       "usbboot=usb reset; " \
+               "if usb storage; then " \
+                       "echo USB drive found;" \
+                       "if run usbloadbootenv; then " \
+                               "echo Loaded environment from ${bootenv};" \
+                               "run usbimportbootenv;" \
+                       "fi;" \
+                       "if test -n $uenvcmd; then " \
+                               "echo Running uenvcmd ...;" \
+                               "run uenvcmd;" \
+                       "fi;" \
+                       "if run usbloadimage; then " \
+                               "run usbloados;" \
+                       "fi;" \
+               "fi;\0" \
        "mmcboot=mmc dev ${mmcdev}; " \
                "if mmc rescan; then " \
                        "echo SD/MMC found on device ${mmcdev};" \
 
 #define CONFIG_BOOTCOMMAND \
        "run findfdt; " \
+       "run usbboot;" \
        "run mmcboot;" \
        "setenv mmcdev 1; " \
        "setenv bootpart 1:2; " \
similarity index 94%
rename from include/configs/mvebu_db-88f7040.h
rename to include/configs/mvebu_armada-8k.h
index 6feb8d7eca87302db6e356a6cfe5612b01f56246..8ab5bbee7d8096d9a4eec4af537702d9a84d6cce 100644 (file)
@@ -4,8 +4,8 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
-#ifndef _CONFIG_MVEBU_DB_88F7040_H
-#define _CONFIG_MVEBU_DB_88F7040_H
+#ifndef _CONFIG_MVEBU_ARMADA_8K_H
+#define _CONFIG_MVEBU_ARMADA_8K_H
 
 /*
  * High Level Configuration Options (easy to change)
 #define CONFIG_CMD_PART
 #define CONFIG_PARTITION_UUIDS
 
-#endif /* _CONFIG_MVEBU_DB_88F7040_H */
+/*
+ * PCI configuration
+ */
+#ifdef CONFIG_PCIE_DW_MVEBU
+#define CONFIG_E1000
+#define CONFIG_CMD_PCI
+#endif
+
+#endif /* _CONFIG_MVEBU_ARMADA_8K_H */
index 9e11f7dc95c342f19a86a249a2c48c405ce2ab19..8119fb21844eeed8ce9d190cbf9253b373929295 100644 (file)
@@ -75,7 +75,7 @@
 #define CONFIG_SYS_DA850_PLL1_PLLDIV2  0x8001
 #define CONFIG_SYS_DA850_PLL1_PLLDIV3  0x8003
 
-#define CONFIG_SYS_DA850_PLL0_PLLM     24
+#define CONFIG_SYS_DA850_PLL0_PLLM     37
 #define CONFIG_SYS_DA850_PLL1_PLLM     21
 
 /*
 #undef CONFIG_SYS_NAND_HW_ECC
 #define CONFIG_SYS_MAX_NAND_DEVICE     1 /* Max number of NAND devices */
 #define CONFIG_SYS_NAND_HW_ECC_OOBFIRST
+#define CONFIG_NAND_6BYTES_OOB_FREE_10BYTES_ECC
 #define CONFIG_SYS_NAND_5_ADDR_CYCLE
 #define CONFIG_SYS_NAND_PAGE_SIZE      (2 << 10)
 #define CONFIG_SYS_NAND_BLOCK_SIZE     (128 << 10)
-#define CONFIG_SYS_NAND_U_BOOT_SIZE    0x200 /*0x60000*/
+#define CONFIG_SYS_NAND_U_BOOT_SIZE    SZ_512K
 #define CONFIG_SYS_NAND_U_BOOT_DST     0xc1080000
 #define CONFIG_SYS_NAND_U_BOOT_START   CONFIG_SYS_NAND_U_BOOT_DST
 #define CONFIG_SYS_NAND_U_BOOT_RELOC_SP        (CONFIG_SYS_NAND_U_BOOT_DST - \
                                        CONFIG_SYS_MALLOC_LEN -       \
                                        GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_NAND_ECCPOS         {                               \
-                               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, 58, \
-                               59, 60, 61, 62, 63 }
+                               6, 7, 8, 9, 10, 11, 12, 13, 14, 15,     \
+                               22, 23, 24, 25, 26, 27, 28, 29, 30, 31, \
+                               38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \
+                               54, 55, 56, 57, 58, 59, 60, 61, 62, 63 }
 #define CONFIG_SYS_NAND_PAGE_COUNT     64
 #define CONFIG_SYS_NAND_BAD_BLOCK_POS  0
 #define CONFIG_SYS_NAND_ECCSIZE                512
  */
 #define CONFIG_MISC_INIT_R
 #define CONFIG_BOARD_EARLY_INIT_F
-#define CONFIG_BOOTFILE                "uImage" /* Boot file name */
+#define CONFIG_BOOTFILE                "zImage" /* Boot file name */
 #define CONFIG_SYS_CBSIZE      1024 /* Console I/O Buffer Size */
 #define CONFIG_SYS_PBSIZE      (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
 #define CONFIG_SYS_MAXARGS     16 /* max number of command args */
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "fdtaddr=0xc0600000\0" \
        "fdtfile=da850-lcdk.dtb\0" \
-       "fdtboot=bootm 0xc0700000 - ${fdtaddr};\0" \
+       "fdtboot=bootz 0xc0700000 - ${fdtaddr};\0" \
        "mmcboot=" \
                "if fatload mmc 0 0xc0600000 boot.scr; then " \
                        "source 0xc0600000; " \
                "else " \
-                       "fatload mmc 0 0xc0700000 uImage; " \
+                       "fatload mmc 0 0xc0700000 " \
+                               __stringify(CONFIG_BOOTFILE) "; " \
                        "fatload mmc 0 ${fdtaddr} ${fdtfile}; " \
                        "run fdtboot; " \
                "fi;\0" \
        "spiboot=" \
                "sf probe 0; " \
                "sf read 0xc0700000 0x80000 0x220000; " \
-               "bootm 0xc0700000;\0"
+               "bootz 0xc0700000;\0"
 
 /*
  * U-Boot commands
index 124cca392acb4e8158b2444ede0a16e4976293d4..6a5425a679370f508f39e906d9ad2ab1a3036255 100644 (file)
 
 #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR - 0x1000000)
 
-#define CONFIG_POWER
-#define CONFIG_POWER_I2C
-#define CONFIG_POWER_MAX8998
-
-#include <asm/arch/gpio.h>
-/*
- * I2C Settings
- */
-#define CONFIG_SOFT_I2C_GPIO_SCL S5PC110_GPIO_J43
-#define CONFIG_SOFT_I2C_GPIO_SDA S5PC110_GPIO_J40
-
-#define CONFIG_SYS_I2C
-#define CONFIG_SYS_I2C_SOFT            /* I2C bit-banged */
-#define CONFIG_SYS_I2C_SOFT_SPEED      50000
-#define CONFIG_SYS_I2C_SOFT_SLAVE      0x7F
-#define CONFIG_I2C_MULTI_BUS
-#define CONFIG_SYS_I2C_INIT_BOARD
-
-#define CONFIG_SYS_MAX_I2C_BUS 7
 #define CONFIG_USB_GADGET_DWC2_OTG_PHY
 #define CONFIG_USB_FUNCTION_MASS_STORAGE
 
index 0210c5bb72c64ae90812ca35ce95d181935250f6..1bfefe9dff39bf69abf1bb2562d628ad46a18a80 100644 (file)
 #define CONFIG_SAMSUNG_ONENAND
 #define CONFIG_SYS_ONENAND_BASE                0x0C000000
 
-#include <asm/arch/gpio.h>
-/*
- * I2C Settings
- */
-#define CONFIG_SOFT_I2C_GPIO_SCL EXYNOS4_GPIO_B7
-#define CONFIG_SOFT_I2C_GPIO_SDA EXYNOS4_GPIO_B6
-
-#define CONFIG_SYS_I2C
-#define CONFIG_SYS_I2C_SOFT            /* I2C bit-banged */
-#define CONFIG_SYS_I2C_SOFT_SPEED      50000
-#define CONFIG_SYS_I2C_SOFT_SLAVE      0
-#define CONFIG_SOFT_I2C_READ_REPEATED_START
-#define CONFIG_I2C_MULTI_BUS
-#define CONFIG_SYS_MAX_I2C_BUS 7
-
-#define CONFIG_POWER
-#define CONFIG_POWER_I2C
-#define CONFIG_POWER_MAX8998
-
 #define CONFIG_USB_GADGET_DWC2_OTG_PHY
 
 /*
diff --git a/include/configs/socfpga_de1_soc.h b/include/configs/socfpga_de1_soc.h
new file mode 100644 (file)
index 0000000..deec647
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 Marek Vasut <marex@denx.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+#ifndef __CONFIG_TERASIC_DE1_SOC_H__
+#define __CONFIG_TERASIC_DE1_SOC_H__
+
+#include <asm/arch/base_addr_ac5.h>
+
+/* U-Boot Commands */
+#define CONFIG_SYS_NO_FLASH
+#define CONFIG_DOS_PARTITION
+#define CONFIG_FAT_WRITE
+#define CONFIG_HW_WATCHDOG
+
+/* Memory configurations */
+#define PHYS_SDRAM_1_SIZE              0x40000000      /* 1GiB */
+
+/* Booting Linux */
+#define CONFIG_BOOTFILE                "fitImage"
+#define CONFIG_BOOTARGS                "console=ttyS0," __stringify(CONFIG_BAUDRATE)
+#define CONFIG_BOOTCOMMAND     "run mmcload; run mmcboot"
+#define CONFIG_LOADADDR                0x01000000
+#define CONFIG_SYS_LOAD_ADDR   CONFIG_LOADADDR
+
+/* Ethernet on SoC (EMAC) */
+#if defined(CONFIG_CMD_NET)
+#define CONFIG_PHY_MICREL
+#define CONFIG_PHY_MICREL_KSZ9021
+#endif
+
+#define CONFIG_ENV_IS_IN_MMC
+
+/* Extra Environment */
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "loadaddr=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
+       "ramboot=setenv bootargs " CONFIG_BOOTARGS ";" \
+               "bootm ${loadaddr} - ${fdtaddr}\0" \
+       "bootimage=zImage\0" \
+       "fdtaddr=100\0" \
+       "fdtimage=socfpga.dtb\0" \
+       "bootm ${loadaddr} - ${fdtaddr}\0" \
+       "mmcroot=/dev/mmcblk0p2\0" \
+       "mmcboot=setenv bootargs " CONFIG_BOOTARGS \
+               " root=${mmcroot} rw rootwait;" \
+               "bootz ${loadaddr} - ${fdtaddr}\0" \
+       "mmcload=mmc rescan;" \
+               "load mmc 0:1 ${loadaddr} ${bootimage};" \
+               "load mmc 0:1 ${fdtaddr} ${fdtimage}\0" \
+
+/* The rest of the configuration is shared */
+#include <configs/socfpga_common.h>
+
+#define CONFIG_SPL_ABORT_ON_RAW_IMAGE
+
+#endif /* __CONFIG_TERASIC_DE1_SOC_H__ */
index a26d6632f27974173859915715dd8aeb02e386da..a771ddb27c5ba7aae11532fa6117c23bc3b218d7 100644 (file)
 /* GPT */
 #define CONFIG_RANDOM_UUID
 
-/* I2C */
-#include <asm/arch/gpio.h>
-
-#define CONFIG_SYS_I2C
-#define CONFIG_SYS_I2C_S3C24X0
-#define CONFIG_SYS_I2C_S3C24X0_SPEED   100000
-#define CONFIG_SYS_I2C_S3C24X0_SLAVE   0xFE
-#define CONFIG_MAX_I2C_NUM             8
-#define CONFIG_SYS_I2C_SOFT            /* I2C bit-banged */
-#define CONFIG_SYS_I2C_SOFT_SPEED      50000
-#define CONFIG_SYS_I2C_SOFT_SLAVE      0x7F
-#define CONFIG_SOFT_I2C_READ_REPEATED_START
-#define CONFIG_SYS_I2C_INIT_BOARD
-
-/* I2C FG */
-#define CONFIG_SOFT_I2C_GPIO_SCL EXYNOS4_GPIO_Y41
-#define CONFIG_SOFT_I2C_GPIO_SDA EXYNOS4_GPIO_Y40
-
-/* POWER */
-#define CONFIG_POWER
-#define CONFIG_POWER_I2C
-#define CONFIG_POWER_MAX8997
-
-#define CONFIG_POWER_FG
-#define CONFIG_POWER_FG_MAX17042
-#define CONFIG_POWER_MUIC
-#define CONFIG_POWER_MUIC_MAX8997
-#define CONFIG_POWER_BATTERY
-#define CONFIG_POWER_BATTERY_TRATS
-
 /* Security subsystem - enable hw_rand() */
 #define CONFIG_EXYNOS_ACE_SHA
 #define CONFIG_LIB_HW_RAND
index 1633c67dd1ac2727f9f202c4aa511d9f09f05de3..1cd3e14235397d2d24ec4237ebb54664db83e0fd 100644 (file)
 /* GPT */
 #define CONFIG_RANDOM_UUID
 
-/* I2C */
-#include <asm/arch/gpio.h>
-
-#define CONFIG_SYS_I2C
-#define CONFIG_SYS_I2C_S3C24X0
-#define CONFIG_SYS_I2C_S3C24X0_SPEED   100000
-#define CONFIG_SYS_I2C_S3C24X0_SLAVE   0
-#define CONFIG_MAX_I2C_NUM             8
-#define CONFIG_SYS_I2C_SOFT
-#define CONFIG_SYS_I2C_SOFT_SPEED      50000
-#define CONFIG_SYS_I2C_SOFT_SLAVE      0x00
-#define I2C_SOFT_DECLARATIONS2
-#define CONFIG_SYS_I2C_SOFT_SPEED_2     50000
-#define CONFIG_SYS_I2C_SOFT_SLAVE_2     0x00
-#define CONFIG_SOFT_I2C_READ_REPEATED_START
-#define CONFIG_SYS_I2C_INIT_BOARD
-
-#ifndef __ASSEMBLY__
-int get_soft_i2c_scl_pin(void);
-int get_soft_i2c_sda_pin(void);
-#endif
-#define CONFIG_SOFT_I2C_GPIO_SCL       get_soft_i2c_scl_pin()
-#define CONFIG_SOFT_I2C_GPIO_SDA       get_soft_i2c_sda_pin()
-
-/* POWER */
-#define CONFIG_POWER
-#define CONFIG_POWER_I2C
-#define CONFIG_POWER_MAX77686
-#define CONFIG_POWER_PMIC_MAX77693
-#define CONFIG_POWER_MUIC_MAX77693
-#define CONFIG_POWER_FG_MAX77693
-#define CONFIG_POWER_BATTERY_TRATS2
-
 /* Security subsystem - enable hw_rand() */
 #define CONFIG_EXYNOS_ACE_SHA
 #define CONFIG_LIB_HW_RAND
index 3351acdd7aed4b9715f83b2f3b9d8e78aeee3d86..0c3be0e2e02a8336754b7b62af759251b1633047 100644 (file)
@@ -138,4 +138,6 @@ int fsl_ddr_get_dimm_params(dimm_params_t *pdimm,
 void update_spd_address(unsigned int ctrl_num,
                        unsigned int slot,
                        unsigned int *addr);
+
+void erratum_a009942_check_cpo(void);
 #endif
index 36bd9d7c934a7a299a147a5c0c0d29bb15d8aa60..1404c5793607089c519c8d8f6dfe0fc9ef18fe57 100644 (file)
@@ -374,7 +374,8 @@ typedef struct memctl_options_s {
        unsigned int additive_latency_override_value;
 
        unsigned int clk_adjust;                /* */
-       unsigned int cpo_override;
+       unsigned int cpo_override;              /* override timing_cfg_2[CPO]*/
+       unsigned int cpo_sample;                /* optimize debug_29[24:31] */
        unsigned int write_data_delay;          /* DQS adjust */
 
        unsigned int cswl_override;
index bed2a40bb274efdd24740209f4fa2fdb1d1db803..431c2a0cccc0df262324cbd4c32413d111b98703 100644 (file)
@@ -226,6 +226,7 @@ struct memac {
 #define PHY_SGMII_CR_PHY_RESET      0x8000
 #define PHY_SGMII_CR_RESET_AN       0x0200
 #define PHY_SGMII_CR_DEF_VAL        0x1140
+#define PHY_SGMII_IF_SPEED_GIGABIT  0x0008
 #define PHY_SGMII_DEV_ABILITY_SGMII 0x4001
 #define PHY_SGMII_IF_MODE_AN        0x0002
 #define PHY_SGMII_IF_MODE_SGMII     0x0001
index c727eb76d4276fe636e27789b9ce8fa8f6109333..6e746b2046120a4cf2b6139e348c7373e6f6e3dc 100644 (file)
@@ -152,10 +152,14 @@ struct spl_boot_device {
 /**
  * Holds information about a way of loading an SPL image
  *
+ * @name: User-friendly name for this method (e.g. "MMC")
  * @boot_device: Boot device that this loader supports
  * @load_image: Function to call to load image
  */
 struct spl_image_loader {
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+       const char *name;
+#endif
        uint boot_device;
        /**
         * load_image() - Load an SPL image
@@ -172,16 +176,25 @@ struct spl_image_loader {
        ll_entry_declare(struct spl_image_loader, __name, spl_image_loader)
 
 /*
- * __priority is the priority of this method, 0 meaning it will be the top
+ * _priority is the priority of this method, 0 meaning it will be the top
  * choice for this device, 9 meaning it is the bottom choice.
- * __boot_device is the BOOT_DEVICE_... value
- * __method is the load_image function to call
+ * _boot_device is the BOOT_DEVICE_... value
+ * _method is the load_image function to call
  */
-#define SPL_LOAD_IMAGE_METHOD(__priority, __boot_device, __method) \
-       SPL_LOAD_IMAGE(__method ## __priority ## __boot_device) = { \
-               .boot_device = __boot_device, \
-               .load_image = __method, \
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+#define SPL_LOAD_IMAGE_METHOD(_name, _priority, _boot_device, _method) \
+       SPL_LOAD_IMAGE(_method ## _priority ## _boot_device) = { \
+               .name = _name, \
+               .boot_device = _boot_device, \
+               .load_image = _method, \
        }
+#else
+#define SPL_LOAD_IMAGE_METHOD(_name, _priority, _boot_device, _method) \
+       SPL_LOAD_IMAGE(_method ## _priority ## _boot_device) = { \
+               .boot_device = _boot_device, \
+               .load_image = _method, \
+       }
+#endif
 
 /* SPL FAT image functions */
 int spl_load_image_fat(struct spl_image_info *spl_image,
index 43876e7a302499fed65ac33ef0afdbc09f2376b9..b47132b02a60f4441bcf1205213da6a08324163f 100644 (file)
@@ -225,16 +225,26 @@ static int zynqimage_check_image_types(uint8_t type)
 static void zynqimage_parse_initparams(struct zynq_header *zynqhdr,
        const char *filename)
 {
-       /* Expect a table of register-value pairs, e.g. "0x12345678 0x4321" */
-       FILE *fp = fopen(filename, "r");
+       FILE *fp;
        struct zynq_reginit reginit;
        unsigned int reg_count = 0;
-       int r;
+       int r, err;
+       struct stat path_stat;
 
+       /* Expect a table of register-value pairs, e.g. "0x12345678 0x4321" */
+       fp = fopen(filename, "r");
        if (!fp) {
                fprintf(stderr, "Cannot open initparams file: %s\n", filename);
                exit(1);
        }
+
+       err = fstat(fileno(fp), &path_stat);
+       if (err)
+               return;
+
+       if (!S_ISREG(path_stat.st_mode))
+               return;
+
        do {
                r = fscanf(fp, "%x %x", &reginit.address, &reginit.data);
                if (r == 2) {
index 202faea07295a39efde8d5e70775aa0656917630..60d8ed23b4a1ca1eda75a261e391578e931e958e 100644 (file)
@@ -240,19 +240,23 @@ static void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr,
        FILE *fp;
        struct zynqmp_reginit reginit;
        unsigned int reg_count = 0;
-       int r;
+       int r, err;
        struct stat path_stat;
 
-       stat(filename, &path_stat);
-       if (!S_ISREG(path_stat.st_mode))
-               return;
-
        /* Expect a table of register-value pairs, e.g. "0x12345678 0x4321" */
        fp = fopen(filename, "r");
        if (!fp) {
                fprintf(stderr, "Cannot open initparams file: %s\n", filename);
                exit(1);
        }
+
+       err = fstat(fileno(fp), &path_stat);
+       if (err)
+               return;
+
+       if (!S_ISREG(path_stat.st_mode))
+               return;
+
        do {
                r = fscanf(fp, "%x %x", &reginit.address, &reginit.data);
                if (r == 2) {