Merge tag 'u-boot-imx-20190129' of git://git.denx.de/u-boot-imx
authorTom Rini <trini@konsulko.com>
Wed, 30 Jan 2019 12:22:12 +0000 (07:22 -0500)
committerTom Rini <trini@konsulko.com>
Wed, 30 Jan 2019 12:22:12 +0000 (07:22 -0500)
For 2019.04

105 files changed:
MAINTAINERS
Makefile
README
arch/arc/include/asm/cache.h
arch/arc/lib/cpu.c
arch/arm/cpu/arm1136/u-boot-spl.lds
arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
arch/arm/cpu/arm926ejs/orion5x/u-boot-spl.lds
arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
arch/arm/cpu/armv7/sunxi/u-boot-spl.lds
arch/arm/cpu/armv8/u-boot-spl.lds
arch/arm/cpu/u-boot-spl.lds
arch/arm/dts/dragonboard820c-uboot.dtsi
arch/arm/dts/dragonboard820c.dts
arch/arm/dts/hi3798cv200-poplar.dts
arch/arm/dts/hi3798cv200.dtsi
arch/arm/dts/poplar-pinctrl.dtsi [new file with mode: 0644]
arch/arm/include/asm/arch-hi3798cv200/dwmmc.h [deleted file]
arch/arm/include/asm/arch-hi3798cv200/hi3798cv200.h
arch/arm/mach-at91/arm926ejs/u-boot-spl.lds
arch/arm/mach-at91/armv7/u-boot-spl.lds
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/am33xx/Kconfig
arch/arm/mach-omap2/boot-common.c
arch/arm/mach-omap2/u-boot-spl.lds
arch/arm/mach-rockchip/Kconfig
arch/arm/mach-rockchip/rk3288/u-boot-tpl.lds [deleted file]
arch/arm/mach-rockchip/rk3368/u-boot-tpl.lds [deleted file]
arch/arm/mach-snapdragon/Makefile
arch/arm/mach-snapdragon/clock-apq8096.c
arch/arm/mach-snapdragon/include/mach/sysmap-apq8096.h
arch/arm/mach-snapdragon/pinctrl-apq8096.c [new file with mode: 0644]
arch/arm/mach-snapdragon/pinctrl-snapdragon.c
arch/arm/mach-snapdragon/pinctrl-snapdragon.h
arch/arm/mach-stm32mp/config.mk
arch/arm/mach-zynq/u-boot-spl.lds
arch/arm/mach-zynqmp/spl.c
arch/mips/cpu/u-boot-spl.lds
arch/powerpc/cpu/mpc85xx/u-boot-spl.lds
arch/x86/cpu/u-boot-spl.lds
board/Barix/ipam390/u-boot-spl-ipam390.lds
board/davinci/da8xxevm/u-boot-spl-da850evm.lds
board/hisilicon/poplar/poplar.c
board/samsung/common/exynos-uboot-spl.lds
cmd/ximg.c
common/Makefile
common/cli.c
common/spl/Kconfig
common/spl/Makefile
common/spl/spl_ram.c
configs/apalis_imx6_defconfig
configs/apalis_imx6_nospl_com_defconfig
configs/apalis_imx6_nospl_it_defconfig
configs/bcm968380gerg_ram_defconfig
configs/chiliboard_defconfig
configs/colibri_imx6_defconfig
configs/colibri_imx6_nospl_defconfig
configs/dragonboard820c_defconfig
configs/emsdp_defconfig
configs/iot_devkit_defconfig
configs/sama5d3_xplained_mmc_defconfig
configs/tb100_defconfig
drivers/Makefile
drivers/dfu/Makefile
drivers/misc/i2c_eeprom.c
drivers/mmc/fsl_esdhc.c
drivers/mmc/hi6220_dw_mmc.c
drivers/mmc/mtk-sd.c
drivers/pinctrl/meson/Kconfig
drivers/pinctrl/meson/pinctrl-meson-axg-pmx.c
drivers/pinctrl/meson/pinctrl-meson-gx-pmx.c
drivers/pinctrl/meson/pinctrl-meson.c
drivers/pinctrl/meson/pinctrl-meson.h
drivers/serial/serial_arc.c
drivers/usb/gadget/Makefile
env/Kconfig
env/common.c
env/env.c
include/configs/C29XPCIE.h
include/configs/P1010RDB.h
include/configs/P1022DS.h
include/configs/apalis_imx6.h
include/configs/axs10x.h
include/configs/colibri_imx6.h
include/configs/dra7xx_evm.h
include/configs/emsdp.h
include/configs/hsdk.h
include/configs/iot_devkit.h
include/configs/nsim.h
include/configs/p1_p2_rdb_pc.h
include/configs/tb100.h
include/configs/ti_omap5_common.h
include/configs/xilinx_zynqmp.h
include/dfu.h
include/dt-bindings/clock/histb-clock.h
include/dt-bindings/pinctrl/hisi.h [new file with mode: 0644]
include/fsl_esdhc.h
include/lmb.h
lib/hashtable.c
lib/lmb.c
net/tftp.c
scripts/Makefile.spl
scripts/config_whitelist.txt
test/lib/lmb.c
tools/dtoc/test_dtoc.py

index 7f3d0cb1f620d0409a1449f4a9896de863bfdf06..6c0e4232c823a8e7ca8c23e275e2dddb8b26e260 100644 (file)
@@ -267,7 +267,7 @@ M:  Christophe Kerello <christophe.kerello@st.com>
 M:     Patrice Chotard <patrice.chotard@st.com>
 L:     uboot-stm32@st-md-mailman.stormreply.com (moderated for non-subscribers)
 S:     Maintained
-F:     arch/arm/mach-stm32mp
+F:     arch/arm/mach-stm32mp/
 F:     drivers/clk/clk_stm32mp1.c
 F:     drivers/i2c/stm32f7_i2c.c
 F:     drivers/misc/stm32mp_fuse.c
index f3867cb017041359c931e968986cb1938421ea59..9ca414e68d4d3970492cf3d8d9a328ef6240f693 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1795,7 +1795,7 @@ distclean: mrproper
                -o -name '.*.rej' -o -name '*%' -o -name 'core' \
                -o -name '*.pyc' \) \
                -type f -print | xargs rm -f
-       @rm -f boards.cfg
+       @rm -f boards.cfg CHANGELOG
 
 backup:
        F=`basename $(srctree)` ; cd .. ; \
diff --git a/README b/README
index aed6b96b57ec3fecca99271aa250a0f7e4131a12..da033dc66f2969b6ce78e97f183c5d2f668d3cff 100644 (file)
--- a/README
+++ b/README
@@ -1146,9 +1146,6 @@ The following options need to be configured:
                CONFIG_DFU_OVER_USB
                This enables the USB portion of the DFU USB class
 
-               CONFIG_DFU_MMC
-               This enables support for exposing (e)MMC devices via DFU.
-
                CONFIG_DFU_NAND
                This enables support for exposing NAND devices via DFU.
 
index 1604cd0b3e73b77a91420e89e6cc5361f8209063..0fdcf2d2dd5b67848cf5c99eccabaedf183e985c 100644 (file)
@@ -16,6 +16,9 @@
  */
 #define ARCH_DMA_MINALIGN      128
 
+/* CONFIG_SYS_CACHELINE_SIZE is used a lot in drivers */
+#define CONFIG_SYS_CACHELINE_SIZE      ARCH_DMA_MINALIGN
+
 #if defined(ARC_MMU_ABSENT)
 #define CONFIG_ARC_MMU_VER 0
 #elif defined(CONFIG_ARC_MMU_V2)
index 07daaa8d155156f157e62d0794d62f7b9d0ebf70..01cca95d5b1854cd07029fd978b3cdc8f67beffa 100644 (file)
@@ -87,7 +87,7 @@ const char *arc_em_version(int arcver, char *name, int name_len)
        bool xymem = ARC_FEATURE_EXISTS(ARC_AUX_XY_BUILD);
        int i;
 
-       for (i = 0; i++ < sizeof(em_versions) / sizeof(struct em_template_t);) {
+       for (i = 0; i < sizeof(em_versions) / sizeof(struct em_template_t); i++) {
                if (em_versions[i].cache == cache &&
                    em_versions[i].dsp == dsp &&
                    em_versions[i].xymem == xymem) {
@@ -147,7 +147,7 @@ const char *arc_hs_version(int arcver, char *name, int name_len)
        bool dual_issue = arcver == 0x54 ? true : false;
        int i;
 
-       for (i = 0; i++ < sizeof(hs_versions) / sizeof(struct hs_template_t);) {
+       for (i = 0; i < sizeof(hs_versions) / sizeof(struct hs_template_t); i++) {
                if (hs_versions[i].cache == cache &&
                    hs_versions[i].mmu == mmu &&
                    hs_versions[i].dual_issue == dual_issue &&
index 881275adef51b617d5c94aea9df90388aa819bd7..f83988fd7e6a1182e991ef2d76e037d8598ea053 100644 (file)
@@ -8,8 +8,8 @@
  *     Aneesh V <aneesh@ti.com>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,\
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
index ffc70ce86bfd78ac971997c24e9c752020d24f59..7e20448f81080469d50e45b9a7e28268a94a1bf7 100644 (file)
@@ -15,7 +15,7 @@ OUTPUT_ARCH(arm)
 ENTRY(_start)
 SECTIONS
 {
-       . = CONFIG_SPL_TEXT_BASE;
+       . = IMAGE_TEXT_BASE;
 
        . = ALIGN(4);
        .text   :
index fbdb1d7e77a4cf7ab26f771a247c1874f7916f3b..a537fe02954bbb9a862a209d74b7d37ed9eee7d4 100644 (file)
@@ -16,8 +16,8 @@
  * Texas Instruments, <www.ti.com>
  *     Aneesh V <aneesh@ti.com>
  */
-MEMORY { .nor : ORIGIN = CONFIG_SPL_TEXT_BASE,\
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .nor : ORIGIN = IMAGE_TEXT_BASE,\
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .bss : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
index 569704c317e9f8964d507b77278ce1adbe118361..0964a9742e4c4b7451a744b0dc8e270e1503482d 100644 (file)
@@ -12,8 +12,8 @@
  * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,\
+               LENGTH = IMAGE_MAX_SIZE }
 
 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
 OUTPUT_ARCH(arm)
index 5d7f3f578beff86ada546ddac950ec2e66363561..942c29fc959dfaac8ac0105307fe55012b715756 100644 (file)
@@ -13,8 +13,8 @@
  * Texas Instruments, <www.ti.com>
  *     Aneesh V <aneesh@ti.com>
  */
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,\
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
index 4e48da56be8985ff7a9d27a13c39defe0e6fe2f2..ccbf359bd11d7951d37f589787caa21a877b03f8 100644 (file)
@@ -11,8 +11,8 @@
  *     Aneesh V <aneesh@ti.com>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR,
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
index 9d1333176b54ed748435c3bb808192b64339bc67..a2aa93a7357d7b6b8442c479dd848172cbb38418 100644 (file)
@@ -78,8 +78,8 @@ SECTIONS
        .ARM.exidx : { *(.ARM.exidx*) }
 }
 
-#if defined(CONFIG_SPL_MAX_SIZE)
-ASSERT(__image_copy_end - __image_copy_start < (CONFIG_SPL_MAX_SIZE), \
+#if defined(IMAGE_MAX_SIZE)
+ASSERT(__image_copy_end - __image_copy_start < (IMAGE_MAX_SIZE), \
        "SPL image too big");
 #endif
 
index d60aa04494d24fbe61abdab808f6011ece0dc6d5..8610d7ec37c120cc4cbbc3e364dc32dcb17f811f 100644 (file)
        soc {
                u-boot,dm-pre-reloc;
 
+               qcom,tlmm@1010000 {
+                       u-boot,dm-pre-reloc;
+
+                       uart {
+                               u-boot,dm-pre-reloc;
+                       };
+               };
+
                clock-controller@300000 {
                        u-boot,dm-pre-reloc;
                };
 
                serial@75b0000 {
                        u-boot,dm-pre-reloc;
-                       };
                };
+       };
 };
 
 &pm8994_pon {
index ffad8e0e0ab2cc3cf3f2de74a55dcbb8229e80dd..1114ddd7d3b489ea6787e9ddad7e929bea4e221e 100644 (file)
@@ -8,6 +8,7 @@
 /dts-v1/;
 
 #include "skeleton64.dtsi"
+#include <dt-bindings/pinctrl/pinctrl-snapdragon.h>
 
 / {
        model = "Qualcomm Technologies, Inc. DB820c";
@@ -16,7 +17,7 @@
        #size-cells = <2>;
 
        aliases {
-               serial0 = &blsp2_uart1;
+               serial0 = &blsp2_uart2;
        };
 
        chosen {
                        reg = <0x300000 0x90000>;
                };
 
-               blsp2_uart1: serial@75b0000 {
+               pinctrl: qcom,tlmm@1010000 {
+                       compatible = "qcom,tlmm-apq8096";
+                       reg = <0x1010000 0x400000>;
+
+                       blsp8_uart: uart {
+                               function = "blsp_uart8";
+                               pins = "GPIO_4", "GPIO_5";
+                               drive-strength = <DRIVE_STRENGTH_8MA>;
+                               bias-disable;
+                       };
+               };
+
+               blsp2_uart2: serial@75b0000 {
                        compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
                        reg = <0x75b0000 0x1000>;
                        clock = <&gcc 4>;
+                       pinctrl-names = "uart";
+                       pinctrl-0 = <&blsp8_uart>;
                };
 
                sdhc2: sdhci@74a4900 {
-                        compatible = "qcom,sdhci-msm-v4";
-                        reg = <0x74a4900 0x314>, <0x74a4000 0x800>;
-                        index = <0x0>;
-                        bus-width = <4>;
-                        clock = <&gcc 0>;
+                       compatible = "qcom,sdhci-msm-v4";
+                       reg = <0x74a4900 0x314>, <0x74a4000 0x800>;
+                       index = <0x0>;
+                       bus-width = <4>;
+                       clock = <&gcc 0>;
                        clock-frequency = <200000000>;
                 };
 
index 964326eae89b67c5d32998c2023784f1b092f577..606ba55c7dfd57f46786ead15680138bfb530c92 100644 (file)
@@ -1,14 +1,17 @@
-// SPDX-License-Identifier: GPL-2.0
 /*
  * DTS File for HiSilicon Poplar Development Board
  *
  * Copyright (c) 2016-2017 HiSilicon Technologies Co., Ltd.
+ *
+ * Released under the GPLv2 only.
+ * SPDX-License-Identifier: GPL-2.0
  */
 
 /dts-v1/;
 
 #include <dt-bindings/gpio/gpio.h>
 #include "hi3798cv200.dtsi"
+#include "poplar-pinctrl.dtsi"
 
 / {
        model = "HiSilicon Poplar Development Board";
                reg = <0x0 0x0 0x0 0x80000000>;
        };
 
+       firmware {
+               optee {
+                       compatible = "linaro,optee-tz";
+                       method = "smc";
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
 
                        default-state = "off";
                };
        };
+
+       reg_pcie: regulator-pcie {
+               compatible = "regulator-fixed";
+               regulator-name = "3V3_PCIE0";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio6 7 0>;
+               enable-active-high;
+       };
+};
+
+&ehci {
+       status = "okay";
+};
+
+&emmc {
+       pinctrl-names = "default";
+       pinctrl-0 = <&emmc_pins_1 &emmc_pins_2
+                    &emmc_pins_3 &emmc_pins_4>;
+       fifo-depth = <256>;
+       clock-frequency = <200000000>;
+       cap-mmc-highspeed;
+       mmc-ddr-1_8v;
+       mmc-hs200-1_8v;
+       non-removable;
+       bus-width = <8>;
+       status = "okay";
 };
 
 &gmac1 {
 
 &gpio1 {
        status = "okay";
-       gpio-line-names = "LS-GPIO-E",  "",
+       gpio-line-names = "GPIO-E",     "",
                          "",           "",
-                         "",           "LS-GPIO-F",
-                         "",           "LS-GPIO-J";
+                         "",           "GPIO-F",
+                         "",           "GPIO-J";
 };
 
 &gpio2 {
        status = "okay";
-       gpio-line-names = "LS-GPIO-H",  "LS-GPIO-I",
-                         "LS-GPIO-L",  "LS-GPIO-G",
-                         "LS-GPIO-K",  "",
+       gpio-line-names = "GPIO-H",     "GPIO-I",
+                         "GPIO-L",     "GPIO-G",
+                         "GPIO-K",     "",
                          "",           "";
 };
 
        status = "okay";
        gpio-line-names = "",           "",
                          "",           "",
-                         "LS-GPIO-C",  "",
-                         "",           "LS-GPIO-B";
+                         "GPIO-C",     "",
+                         "",           "GPIO-B";
 };
 
 &gpio4 {
        status = "okay";
        gpio-line-names = "",           "",
                          "",           "",
-                         "",           "LS-GPIO-D",
+                         "",           "GPIO-D",
                          "",           "";
 };
 
        status = "okay";
        gpio-line-names = "",           "USER-LED-1",
                          "USER-LED-2", "",
-                         "",           "LS-GPIO-A",
+                         "",           "GPIO-A",
                          "",           "";
 };
 
        status = "okay";
 };
 
+&ohci {
+       status = "okay";
+};
+
+&pcie {
+       reset-gpios = <&gpio4 4 GPIO_ACTIVE_HIGH>;
+       vpcie-supply = <&reg_pcie>;
+       status = "okay";
+};
+
+&sd0 {
+       bus-width = <4>;
+       cap-sd-highspeed;
+       status = "okay";
+};
+
 &spi0 {
        status = "okay";
        label = "LS-SPI0";
index 8b9c5ad05a19ae50a3a29fd435087802835237f2..7c0fddd7c8cfe97c1e8e26d77379ba8bdea8a0bc 100644 (file)
@@ -1,12 +1,16 @@
-// SPDX-License-Identifier: GPL-2.0
 /*
  * DTS File for HiSilicon Hi3798cv200 SoC.
  *
  * Copyright (c) 2016-2017 HiSilicon Technologies Co., Ltd.
+ *
+ * Released under the GPLv2 only.
+ * SPDX-License-Identifier: GPL-2.0
  */
 
 #include <dt-bindings/clock/histb-clock.h>
+#include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/phy/phy.h>
 #include <dt-bindings/reset/ti-syscon.h>
 
 / {
                        #reset-cells = <2>;
                };
 
+               perictrl: peripheral-controller@8a20000 {
+                       compatible = "hisilicon,hi3798cv200-perictrl", "syscon",
+                                    "simple-mfd";
+                       reg = <0x8a20000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x0 0x8a20000 0x1000>;
+
+                       usb2_phy1: usb2-phy@120 {
+                               compatible = "hisilicon,hi3798cv200-usb2-phy";
+                               reg = <0x120 0x4>;
+                               clocks = <&crg HISTB_USB2_PHY1_REF_CLK>;
+                               resets = <&crg 0xbc 4>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               usb2_phy1_port0: phy@0 {
+                                       reg = <0>;
+                                       #phy-cells = <0>;
+                                       resets = <&crg 0xbc 8>;
+                               };
+
+                               usb2_phy1_port1: phy@1 {
+                                       reg = <1>;
+                                       #phy-cells = <0>;
+                                       resets = <&crg 0xbc 9>;
+                               };
+                       };
+
+                       usb2_phy2: usb2-phy@124 {
+                               compatible = "hisilicon,hi3798cv200-usb2-phy";
+                               reg = <0x124 0x4>;
+                               clocks = <&crg HISTB_USB2_PHY2_REF_CLK>;
+                               resets = <&crg 0xbc 6>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               usb2_phy2_port0: phy@0 {
+                                       reg = <0>;
+                                       #phy-cells = <0>;
+                                       resets = <&crg 0xbc 10>;
+                               };
+                       };
+
+                       combphy0: phy@850 {
+                               compatible = "hisilicon,hi3798cv200-combphy";
+                               reg = <0x850 0x8>;
+                               #phy-cells = <1>;
+                               clocks = <&crg HISTB_COMBPHY0_CLK>;
+                               resets = <&crg 0x188 4>;
+                               assigned-clocks = <&crg HISTB_COMBPHY0_CLK>;
+                               assigned-clock-rates = <100000000>;
+                               hisilicon,fixed-mode = <PHY_TYPE_USB3>;
+                       };
+
+                       combphy1: phy@858 {
+                               compatible = "hisilicon,hi3798cv200-combphy";
+                               reg = <0x858 0x8>;
+                               #phy-cells = <1>;
+                               clocks = <&crg HISTB_COMBPHY1_CLK>;
+                               resets = <&crg 0x188 12>;
+                               assigned-clocks = <&crg HISTB_COMBPHY1_CLK>;
+                               assigned-clock-rates = <100000000>;
+                               hisilicon,mode-select-bits = <0x0008 11 (0x3 << 11)>;
+                       };
+               };
+
+               pmx0: pinconf@8a21000 {
+                       compatible = "pinconf-single";
+                       reg = <0x8a21000 0x180>;
+                       pinctrl-single,register-width = <32>;
+                       pinctrl-single,function-mask = <7>;
+                       pinctrl-single,gpio-range = <
+                               &range 0  8 2  /* GPIO 0 */
+                               &range 8  1 0  /* GPIO 1 */
+                               &range 9  4 2
+                               &range 13 1 0
+                               &range 14 1 1
+                               &range 15 1 0
+                               &range 16 5 0  /* GPIO 2 */
+                               &range 21 3 1
+                               &range 24 4 1  /* GPIO 3 */
+                               &range 28 2 2
+                               &range 86 1 1
+                               &range 87 1 0
+                               &range 30 4 2  /* GPIO 4 */
+                               &range 34 3 0
+                               &range 37 1 2
+                               &range 38 3 2  /* GPIO 6 */
+                               &range 41 5 0
+                               &range 46 8 1  /* GPIO 7 */
+                               &range 54 8 1  /* GPIO 8 */
+                               &range 64 7 1  /* GPIO 9 */
+                               &range 71 1 0
+                               &range 72 6 1  /* GPIO 10 */
+                               &range 78 1 0
+                               &range 79 1 1
+                               &range 80 6 1  /* GPIO 11 */
+                               &range 70 2 1
+                               &range 88 8 0  /* GPIO 12 */
+                       >;
+
+                       range: gpio-range {
+                               #pinctrl-single,gpio-range-cells = <3>;
+                       };
+               };
+
                uart0: serial@8b00000 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x8b00000 0x1000>;
                        status = "disabled";
                };
 
-               emmc: mmc@9830000 {
+               sd0: mmc@9820000 {
                        compatible = "snps,dw-mshc";
+                       reg = <0x9820000 0x10000>;
+                       interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg HISTB_SDIO0_CIU_CLK>,
+                                <&crg HISTB_SDIO0_BIU_CLK>;
+                       clock-names = "ciu", "biu";
+                       resets = <&crg 0x9c 4>;
+                       reset-names = "reset";
+                       status = "disabled";
+               };
+
+               emmc: mmc@9830000 {
+                       compatible = "hisilicon,hi3798cv200-dw-mshc";
                        reg = <0x9830000 0x10000>;
                        interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&crg HISTB_MMC_CIU_CLK>,
-                                <&crg HISTB_MMC_BIU_CLK>;
-                       clock-names = "ciu", "biu";
+                                <&crg HISTB_MMC_BIU_CLK>,
+                                <&crg HISTB_MMC_SAMPLE_CLK>,
+                                <&crg HISTB_MMC_DRV_CLK>;
+                       clock-names = "ciu", "biu", "ciu-sample", "ciu-drive";
+                       resets = <&crg 0xa0 4>;
+                       reset-names = "reset";
+                       status = "disabled";
                };
 
                gpio0: gpio@8b20000 {
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 0 8>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <
+                               &pmx0 0 8 1
+                               &pmx0 1 9 4
+                               &pmx0 5 13 1
+                               &pmx0 6 14 1
+                               &pmx0 7 15 1
+                       >;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 16 5 &pmx0 5 21 3>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <
+                               &pmx0 0 24 4
+                               &pmx0 4 28 2
+                               &pmx0 6 86 1
+                               &pmx0 7 87 1
+                       >;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 30 4 &pmx0 4 34 3 &pmx0 7 37 1>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 38 3 &pmx0 0 41 5>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 46 8>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 54 8>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 64 7 &pmx0 71 1>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 72 6 &pmx0 6 78 1 &pmx0 7 79 1>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 80 6 &pmx0 6 70 2>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        #gpio-cells = <2>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx0 0 88 8>;
                        clocks = <&crg HISTB_APB_CLK>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                        clocks = <&sysctrl HISTB_IR_CLK>;
                        status = "disabled";
                };
+
+               pcie: pcie@9860000 {
+                       compatible = "hisilicon,hi3798cv200-pcie";
+                       reg = <0x9860000 0x1000>,
+                             <0x0 0x2000>,
+                             <0x2000000 0x01000000>;
+                       reg-names = "control", "rc-dbi", "config";
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       device_type = "pci";
+                       bus-range = <0 15>;
+                       num-lanes = <1>;
+                       ranges = <0x81000000 0x0 0x00000000 0x4f00000 0x0 0x100000
+                                 0x82000000 0x0 0x3000000 0x3000000 0x0 0x01f00000>;
+                       interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "msi";
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic 0 131 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg HISTB_PCIE_AUX_CLK>,
+                                <&crg HISTB_PCIE_PIPE_CLK>,
+                                <&crg HISTB_PCIE_SYS_CLK>,
+                                <&crg HISTB_PCIE_BUS_CLK>;
+                       clock-names = "aux", "pipe", "sys", "bus";
+                       resets = <&crg 0x18c 6>, <&crg 0x18c 5>, <&crg 0x18c 4>;
+                       reset-names = "soft", "sys", "bus";
+                       phys = <&combphy1 PHY_TYPE_PCIE>;
+                       phy-names = "phy";
+                       status = "disabled";
+               };
+
+               ohci: ohci@9880000 {
+                       compatible = "generic-ohci";
+                       reg = <0x9880000 0x10000>;
+                       interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg HISTB_USB2_BUS_CLK>,
+                                <&crg HISTB_USB2_12M_CLK>,
+                                <&crg HISTB_USB2_48M_CLK>;
+                       clock-names = "bus", "clk12", "clk48";
+                       resets = <&crg 0xb8 12>;
+                       reset-names = "bus";
+                       phys = <&usb2_phy1_port0>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
+
+               ehci: ehci@9890000 {
+                       compatible = "generic-ehci";
+                       reg = <0x9890000 0x10000>;
+                       interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg HISTB_USB2_BUS_CLK>,
+                                <&crg HISTB_USB2_PHY_CLK>,
+                                <&crg HISTB_USB2_UTMI_CLK>;
+                       clock-names = "bus", "phy", "utmi";
+                       resets = <&crg 0xb8 12>,
+                                <&crg 0xb8 16>,
+                                <&crg 0xb8 13>;
+                       reset-names = "bus", "phy", "utmi";
+                       phys = <&usb2_phy1_port0>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
        };
 };
diff --git a/arch/arm/dts/poplar-pinctrl.dtsi b/arch/arm/dts/poplar-pinctrl.dtsi
new file mode 100644 (file)
index 0000000..7bb19e4
--- /dev/null
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Pinctrl dts file for HiSilicon Poplar board
+ *
+ * Copyright (c) 2016-2018 HiSilicon Technologies Co., Ltd.
+ */
+
+#include <dt-bindings/pinctrl/hisi.h>
+
+/* value, enable bits, disable bits, mask */
+#define PINCTRL_PULLDOWN(value, enable, disable, mask) \
+       (value << 13) (enable << 13) (disable << 13) (mask << 13)
+#define PINCTRL_PULLUP(value, enable, disable, mask) \
+       (value << 12) (enable << 12) (disable << 12) (mask << 12)
+#define PINCTRL_SLEW_RATE(value, mask)   (value << 8) (mask << 8)
+#define PINCTRL_DRV_STRENGTH(value, mask) (value << 4) (mask << 4)
+
+&pmx0 {
+       emmc_pins_1: emmc-pins-1 {
+               pinctrl-single,pins = <
+                       0x000 MUX_M2
+                       0x004 MUX_M2
+                       0x008 MUX_M2
+                       0x00c MUX_M2
+                       0x010 MUX_M2
+                       0x014 MUX_M2
+                       0x018 MUX_M2
+                       0x01c MUX_M2
+                       0x024 MUX_M2
+               >;
+               pinctrl-single,bias-pulldown = <
+                       PINCTRL_PULLDOWN(0, 1, 0, 1)
+               >;
+               pinctrl-single,bias-pullup = <
+                       PINCTRL_PULLUP(0, 1, 0, 1)
+               >;
+               pinctrl-single,slew-rate = <
+                       PINCTRL_SLEW_RATE(1, 1)
+               >;
+               pinctrl-single,drive-strength = <
+                       PINCTRL_DRV_STRENGTH(0xb, 0xf)
+               >;
+       };
+
+       emmc_pins_2: emmc-pins-2 {
+               pinctrl-single,pins = <
+                       0x028 MUX_M2
+               >;
+               pinctrl-single,bias-pulldown = <
+                       PINCTRL_PULLDOWN(0, 1, 0, 1)
+               >;
+               pinctrl-single,bias-pullup = <
+                       PINCTRL_PULLUP(0, 1, 0, 1)
+               >;
+               pinctrl-single,slew-rate = <
+                       PINCTRL_SLEW_RATE(1, 1)
+               >;
+               pinctrl-single,drive-strength = <
+                       PINCTRL_DRV_STRENGTH(0x9, 0xf)
+               >;
+       };
+
+       emmc_pins_3: emmc-pins-3 {
+               pinctrl-single,pins = <
+                       0x02c MUX_M2
+               >;
+               pinctrl-single,bias-pulldown = <
+                       PINCTRL_PULLDOWN(0, 1, 0, 1)
+               >;
+               pinctrl-single,bias-pullup = <
+                       PINCTRL_PULLUP(0, 1, 0, 1)
+               >;
+               pinctrl-single,slew-rate = <
+                       PINCTRL_SLEW_RATE(1, 1)
+               >;
+               pinctrl-single,drive-strength = <
+                       PINCTRL_DRV_STRENGTH(3, 3)
+               >;
+       };
+
+       emmc_pins_4: emmc-pins-4 {
+               pinctrl-single,pins = <
+                       0x030 MUX_M2
+               >;
+               pinctrl-single,bias-pulldown = <
+                       PINCTRL_PULLDOWN(1, 1, 0, 1)
+               >;
+               pinctrl-single,bias-pullup = <
+                       PINCTRL_PULLUP(0, 1, 0, 1)
+               >;
+               pinctrl-single,slew-rate = <
+                       PINCTRL_SLEW_RATE(1, 1)
+               >;
+               pinctrl-single,drive-strength = <
+                       PINCTRL_DRV_STRENGTH(3, 3)
+               >;
+       };
+};
diff --git a/arch/arm/include/asm/arch-hi3798cv200/dwmmc.h b/arch/arm/include/asm/arch-hi3798cv200/dwmmc.h
deleted file mode 100644 (file)
index d08c20b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * (C) Copyright 2017 Linaro
- * Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
- */
-
-#ifndef _HI3798cv200_DWMMC_H_
-#define _HI3798cv200_DWMMC_H_
-
-int hi6220_dwmci_add_port(int index, u32 regbase, int bus_width);
-
-#endif /* _HI3798cv200_DWMMC_H_ */
index bb221e17e0ed9efa82774ebfedc1734b518f4cdd..b98b45cc817b7f3dce2cc3a373c5f2ae7bba74d1 100644 (file)
@@ -11,7 +11,6 @@
 #define REG_BASE_CRG                   0xF8A22000
 
 /* DEVICES */
-#define REG_BASE_MCI                   0xF9830000
 #define REG_BASE_UART0                 0xF8B00000
 #define HIOTG_BASE_ADDR                        0xF98C0000
 
index b714e93b3b219cc8c885aa37268d29e03fabbb6e..f18b17dc931c39a5bdba15d0ae8a628de78ab858 100644 (file)
@@ -4,8 +4,8 @@
  *                   Bo Shen <voice.shen@atmel.com>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE, \
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE, \
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
@@ -49,8 +49,8 @@ SECTIONS
        } >.sdram
 }
 
-#if defined(CONFIG_SPL_MAX_SIZE)
-ASSERT(__image_copy_end - __start < (CONFIG_SPL_MAX_SIZE), \
+#if defined(IMAGE_MAX_SIZE)
+ASSERT(__image_copy_end - __start < (IMAGE_MAX_SIZE), \
        "SPL image too big");
 #endif
 
index 22237cffc92f1ecaa3833cbd5c949d84022a91db..950ea55d7c4ef6120da2e8a66bf680da06140f17 100644 (file)
@@ -11,8 +11,8 @@
  *         Bo Shen <voice.shen@atmel.com>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE, \
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE, \
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
index 58e545a45b4d7c5e8579cbae2c3f58d746526068..d9bdcb355a17b1efc49eab245e848a6e5c26b356 100644 (file)
@@ -167,6 +167,21 @@ config TI_SECURE_EMIF_PROTECTED_REGION_SIZE
          using hardware memory firewalls. This value must be smaller than the
          TI_SECURE_EMIF_TOTAL_REGION_SIZE value.
 
+if AM43XX || AM33XX || OMAP54XX
+config ISW_ENTRY_ADDR
+       hex "Address in memory or XIP address of bootloader entry point"
+       default 0x402F4000 if AM43XX
+       default 0x402F0400 if AM33XX
+       default 0x40301350 if OMAP54XX
+       help
+         After any reset, the boot ROM searches the boot media for a valid
+         boot image. For non-XIP devices, the ROM then copies the image into
+         internal memory. For all boot modes, after the ROM processes the
+         boot image it eventually computes the entry point address depending
+         on the device type (secure/non-secure), boot media (xip/non-xip) and
+         image headers.
+endif
+
 source "arch/arm/mach-omap2/omap3/Kconfig"
 
 source "arch/arm/mach-omap2/omap4/Kconfig"
index 57284c4ae122946f8e8aa52f9dc205e8928d82d3..4f15346c86b847475b164c2628776a735d121d82 100644 (file)
@@ -275,21 +275,6 @@ config SPL_RTC_DDR_SUPPORT
 endif
 
 if AM43XX || AM33XX
-config ISW_ENTRY_ADDR
-       hex "Address in memory or XIP flash of bootloader entry point"
-       default 0x402F4000 if AM43XX
-       default 0x402F0400 if AM33XX
-       help
-         After any reset, the boot ROM on the AM43XX SOC
-         searches the boot media for a valid boot image.
-         For non-XIP devices, the ROM then copies the
-         image into internal memory.
-         For all boot modes, after the ROM processes the
-         boot image it eventually computes the entry
-         point address depending on the device type
-         (secure/non-secure), boot media (xip/non-xip) and
-         image headers.
-
 config PUB_ROM_DATA_SIZE
        hex "Size in bytes of the L3 SRAM reserved by ROM to store data"
        default 0x8400
index 176d4f67cbbf6d5933e790f499db634d7604d395..2db19227b92104c72b166c4bed73ca595275880b 100644 (file)
@@ -108,7 +108,7 @@ void save_omap_boot_params(void)
                        sys_boot_device = 1;
                        break;
 #endif
-#if defined(BOOT_DEVICE_DFU) && !defined(CONFIG_SPL_DFU_SUPPORT)
+#if defined(BOOT_DEVICE_DFU) && !defined(CONFIG_SPL_DFU)
                case BOOT_DEVICE_DFU:
                        sys_boot_device = 1;
                        break;
index a1289f6a74409e2ba87eaa3de9f99efdb3f2d2df..88d81f9b98d61cfdf562e077f7666800d71dadaf 100644 (file)
@@ -8,8 +8,8 @@
  *     Aneesh V <aneesh@ti.com>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,\
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
index 6dc8e3a017ad8d64b8e805737aa34e81234f721a..8e9d88c3f9fa0d6ff866ffc53963ce95add8b6c1 100644 (file)
@@ -75,12 +75,12 @@ config ROCKCHIP_RK3288
 
 if ROCKCHIP_RK3288
 
-config TPL_LDSCRIPT
-       default "arch/arm/mach-rockchip/rk3288/u-boot-tpl.lds"
-
 config TPL_TEXT_BASE
        default 0xff704000
 
+config TPL_MAX_SIZE
+       default 32768
+
 endif
 
 config ROCKCHIP_RK3328
@@ -117,9 +117,6 @@ config ROCKCHIP_RK3368
 
 if ROCKCHIP_RK3368
 
-config TPL_LDSCRIPT
-       default "arch/arm/mach-rockchip/rk3368/u-boot-tpl.lds"
-
 config TPL_TEXT_BASE
         default 0xff8c1000
 
diff --git a/arch/arm/mach-rockchip/rk3288/u-boot-tpl.lds b/arch/arm/mach-rockchip/rk3288/u-boot-tpl.lds
deleted file mode 100644 (file)
index 2e55989..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Copyright (C) 2018 Jagan Teki <jagan@amarulasolutions.com>
- */
-
-#undef CONFIG_SPL_TEXT_BASE
-#define CONFIG_SPL_TEXT_BASE   CONFIG_TPL_TEXT_BASE
-
-#include "../../cpu/u-boot-spl.lds"
diff --git a/arch/arm/mach-rockchip/rk3368/u-boot-tpl.lds b/arch/arm/mach-rockchip/rk3368/u-boot-tpl.lds
deleted file mode 100644 (file)
index 7ba35b6..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
- */
-
-#undef CONFIG_SPL_TEXT_BASE
-#define CONFIG_SPL_TEXT_BASE CONFIG_TPL_TEXT_BASE
-
-#undef CONFIG_SPL_MAX_SIZE
-#define CONFIG_SPL_MAX_SIZE CONFIG_TPL_MAX_SIZE
-
-#include "../../cpu/armv8/u-boot-spl.lds"
index 2d9408360021e9e8ca44de3d155fc0e17ab153ab..709919fce4c125b492eaa0d79fa39c4f29d563d8 100644 (file)
@@ -6,8 +6,9 @@ obj-$(CONFIG_TARGET_DRAGONBOARD820C) += clock-apq8096.o
 obj-$(CONFIG_TARGET_DRAGONBOARD820C) += sysmap-apq8096.o
 obj-$(CONFIG_TARGET_DRAGONBOARD410C) += clock-apq8016.o
 obj-$(CONFIG_TARGET_DRAGONBOARD410C) += sysmap-apq8016.o
-obj-$(CONFIG_TARGET_DRAGONBOARD410C) += pinctrl-apq8016.o
-obj-$(CONFIG_TARGET_DRAGONBOARD410C) += pinctrl-snapdragon.o
 obj-y += misc.o
 obj-y += clock-snapdragon.o
 obj-y += dram.o
+obj-y += pinctrl-snapdragon.o
+obj-y += pinctrl-apq8016.o
+obj-y += pinctrl-apq8096.o
index 628c38785b6e24fac7998975061646f524eb5a7c..e5011be8f2e2086340c2f0208d2110bf89aa1e0c 100644 (file)
@@ -34,6 +34,12 @@ static const struct pll_vote_clk gpll0_vote_clk = {
        .vote_bit = APCS_GPLL_ENA_VOTE_GPLL0,
 };
 
+static struct vote_clk gcc_blsp2_ahb_clk = {
+       .cbcr_reg = BLSP2_AHB_CBCR,
+       .ena_vote = APCS_CLOCK_BRANCH_ENA_VOTE,
+       .vote_bit = BIT(15),
+};
+
 static int clk_init_sdc(struct msm_clk_priv *priv, uint rate)
 {
        int div = 3;
@@ -47,6 +53,32 @@ static int clk_init_sdc(struct msm_clk_priv *priv, uint rate)
        return rate;
 }
 
+static const struct bcr_regs uart2_regs = {
+       .cfg_rcgr = BLSP2_UART2_APPS_CFG_RCGR,
+       .cmd_rcgr = BLSP2_UART2_APPS_CMD_RCGR,
+       .M = BLSP2_UART2_APPS_M,
+       .N = BLSP2_UART2_APPS_N,
+       .D = BLSP2_UART2_APPS_D,
+};
+
+static int clk_init_uart(struct msm_clk_priv *priv)
+{
+       /* Enable AHB clock */
+       clk_enable_vote_clk(priv->base, &gcc_blsp2_ahb_clk);
+
+       /* 7372800 uart block clock @ GPLL0 */
+       clk_rcg_set_rate_mnd(priv->base, &uart2_regs, 1, 192, 15625,
+                            CFG_CLK_SRC_GPLL0);
+
+       /* Vote for gpll0 clock */
+       clk_enable_gpll0(priv->base, &gpll0_vote_clk);
+
+       /* Enable core clk */
+       clk_enable_cbc(priv->base + BLSP2_UART2_APPS_CBCR);
+
+       return 0;
+}
+
 ulong msm_set_rate(struct clk *clk, ulong rate)
 {
        struct msm_clk_priv *priv = dev_get_priv(clk->dev);
@@ -55,6 +87,8 @@ ulong msm_set_rate(struct clk *clk, ulong rate)
        case 0: /* SDC1 */
                return clk_init_sdc(priv, rate);
                break;
+       case 4: /*UART2*/
+               return clk_init_uart(priv);
        default:
                return 0;
        }
index 14febb6487ffc08099ca347222133df21ead1662..36a902bd92900dc6aa666f58febe59f14df12cdd 100644 (file)
@@ -15,6 +15,7 @@
 /* Clocks: (from CLK_CTL_BASE)  */
 #define GPLL0_STATUS                   (0x0000)
 #define APCS_GPLL_ENA_VOTE             (0x52000)
+#define APCS_CLOCK_BRANCH_ENA_VOTE     (0x52004)
 
 #define SDCC2_BCR                      (0x14000) /* block reset */
 #define SDCC2_APPS_CBCR                        (0x14004) /* branch control */
 #define SDCC2_N                                (0x1401C)
 #define SDCC2_D                                (0x14020)
 
+#define BLSP2_AHB_CBCR                 (0x25004)
+#define BLSP2_UART2_APPS_CBCR          (0x29004)
+#define BLSP2_UART2_APPS_CMD_RCGR      (0x2900C)
+#define BLSP2_UART2_APPS_CFG_RCGR      (0x29010)
+#define BLSP2_UART2_APPS_M             (0x29014)
+#define BLSP2_UART2_APPS_N             (0x29018)
+#define BLSP2_UART2_APPS_D             (0x2901C)
+
 #endif
diff --git a/arch/arm/mach-snapdragon/pinctrl-apq8096.c b/arch/arm/mach-snapdragon/pinctrl-apq8096.c
new file mode 100644 (file)
index 0000000..20a71c3
--- /dev/null
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Qualcomm APQ8096 pinctrl
+ *
+ * (C) Copyright 2019 Ramon Fried <ramon.fried@gmail.com>
+ *
+ */
+
+#include "pinctrl-snapdragon.h"
+#include <common.h>
+
+#define MAX_PIN_NAME_LEN 32
+static char pin_name[MAX_PIN_NAME_LEN];
+static const char * const msm_pinctrl_pins[] = {
+       "SDC1_CLK",
+       "SDC1_CMD",
+       "SDC1_DATA",
+       "SDC2_CLK",
+       "SDC2_CMD",
+       "SDC2_DATA",
+       "SDC1_RCLK",
+};
+
+static const struct pinctrl_function msm_pinctrl_functions[] = {
+       {"blsp_uart8", 2},
+};
+
+static const char *apq8096_get_function_name(struct udevice *dev,
+                                            unsigned int selector)
+{
+       return msm_pinctrl_functions[selector].name;
+}
+
+static const char *apq8096_get_pin_name(struct udevice *dev,
+                                       unsigned int selector)
+{
+       if (selector < 150) {
+               snprintf(pin_name, MAX_PIN_NAME_LEN, "GPIO_%u", selector);
+               return pin_name;
+       } else {
+               return msm_pinctrl_pins[selector - 150];
+       }
+}
+
+static unsigned int apq8096_get_function_mux(unsigned int selector)
+{
+       return msm_pinctrl_functions[selector].val;
+}
+
+struct msm_pinctrl_data apq8096_data = {
+       .pin_count = 157,
+       .functions_count = ARRAY_SIZE(msm_pinctrl_functions),
+       .get_function_name = apq8096_get_function_name,
+       .get_function_mux = apq8096_get_function_mux,
+       .get_pin_name = apq8096_get_pin_name,
+};
index 5365ccdb70c64b05b8fc0c79b05b0cb23526b384..9ba8fdd7293a1b6a31f04b3d28e3d270d3d5f949 100644 (file)
@@ -22,7 +22,7 @@ struct msm_pinctrl_priv {
 #define TLMM_GPIO_PULL_MASK GENMASK(1, 0)
 #define TLMM_FUNC_SEL_MASK GENMASK(5, 2)
 #define TLMM_DRV_STRENGTH_MASK GENMASK(8, 6)
-#define TLMM_GPIO_ENABLE BIT(9)
+#define TLMM_GPIO_DISABLE BIT(9)
 
 static const struct pinconf_param msm_conf_params[] = {
        { "drive-strength", PIN_CONFIG_DRIVE_STRENGTH, 3 },
@@ -74,7 +74,7 @@ static int msm_pinmux_set(struct udevice *dev, unsigned int pin_selector,
        struct msm_pinctrl_priv *priv = dev_get_priv(dev);
 
        clrsetbits_le32(priv->base + GPIO_CONFIG_OFFSET(pin_selector),
-                       TLMM_FUNC_SEL_MASK | TLMM_GPIO_ENABLE,
+                       TLMM_FUNC_SEL_MASK | TLMM_GPIO_DISABLE,
                        priv->data->get_function_mux(func_selector) << 2);
        return 0;
 }
@@ -113,8 +113,8 @@ static struct pinctrl_ops msm_pinctrl_ops = {
 };
 
 static const struct udevice_id msm_pinctrl_ids[] = {
-       { .compatible = "qcom,tlmm-msm8916", .data = (ulong)&apq8016_data },
        { .compatible = "qcom,tlmm-apq8016", .data = (ulong)&apq8016_data },
+       { .compatible = "qcom,tlmm-apq8096", .data = (ulong)&apq8096_data },
        { }
 };
 
index c47d988af4ce6807db0c2c1ebf45570bca6ef291..24f8863f59b5e4bedb66633e859042083edbea0f 100644 (file)
@@ -26,5 +26,6 @@ struct pinctrl_function {
 };
 
 extern struct msm_pinctrl_data apq8016_data;
+extern struct msm_pinctrl_data apq8096_data;
 
 #endif
index cde5850e9343500414a5f3d480644c882e5a0261..f371aac75bde48fd3025908ced7fb300ed1542fd 100644 (file)
@@ -3,7 +3,7 @@
 # Copyright (C) 2018, STMicroelectronics - All Rights Reserved
 #
 
-ALL-$(CONFIG_SPL_BUILD) += spl/u-boot-spl.stm32
+ALL-$(CONFIG_SPL_BUILD) += u-boot-spl.stm32
 
 MKIMAGEFLAGS_u-boot-spl.stm32 = -T stm32image -a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE)
 
@@ -11,3 +11,6 @@ spl/u-boot-spl.stm32: MKIMAGEOUTPUT = spl/u-boot-spl.stm32.log
 
 spl/u-boot-spl.stm32: spl/u-boot-spl.bin FORCE
        $(call if_changed,mkimage)
+
+u-boot-spl.stm32 : spl/u-boot-spl.stm32
+       $(call if_changed,copy)
index 080c6bf06d0652ff73fd7b0c5232ce7b38dc77ef..106d2e390ba8b096898e4ac95a29cea454c12ca2 100644 (file)
@@ -7,8 +7,8 @@
  * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,\
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
index 01f31d0f0ed2f831aff8d8ebbe9d0c4fd3760d5f..fb3955c93fdc175b334d56554fc0e3e9baa062c7 100644 (file)
@@ -93,7 +93,7 @@ u32 spl_boot_device(void)
        case EMMC_MODE:
                return BOOT_DEVICE_MMC1;
 #endif
-#ifdef CONFIG_SPL_DFU_SUPPORT
+#ifdef CONFIG_SPL_DFU
        case USB_MODE:
                return BOOT_DEVICE_DFU;
 #endif
index be194d314b649a0d07bb19f6201df8cc844b389e..d08d6222c4ab8d6859767104b3a1a03f9a998899 100644 (file)
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 
-MEMORY { .spl_mem : ORIGIN = CONFIG_SPL_TEXT_BASE, \
-               LENGTH = CONFIG_SPL_MAX_SIZE }
+MEMORY { .spl_mem : ORIGIN = IMAGE_TEXT_BASE, \
+               LENGTH = IMAGE_MAX_SIZE }
 MEMORY { .bss_mem : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
                LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
 
index 6dc8d9913b23b5aafd7f388b85b1df1f5dd901b9..27a5fe6306a397ba8da9b6eeff197874d722efef 100644 (file)
@@ -18,7 +18,7 @@ PHDRS
 #endif
 SECTIONS
 {
-       . = CONFIG_SPL_TEXT_BASE;
+       . = IMAGE_TEXT_BASE;
        .text : {
                *(.text*)
        }
index 574d992aaa98dd618be3d86bfabd3ae6f030e12d..4e656dc4e5a7b544f174b32ab7eeda3a4eb674fb 100644 (file)
@@ -15,7 +15,7 @@ SECTIONS
        /DISCARD/ : { *(.u_boot_list_2_cmd_*) }
 #endif
 
-       . = CONFIG_SPL_TEXT_BASE;       /* Location of bootcode in flash */
+       . = IMAGE_TEXT_BASE;    /* Location of bootcode in flash */
        __text_start = .;
        .text  : { *(.text*); }
 
index cf13e0a41cd36cbe83f61ee07f5e4ab8ea752484..06ed3fa89f8157f8b34b82f494bd75cbde3150b0 100644 (file)
@@ -7,7 +7,7 @@
  * Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,\
                LENGTH = CONFIG_SPL_MAX_FOOTPRINT }
 
 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
index f5462f88b1eb120ef17c21632622dbe9dec9abf8..7b5fab7756cb524ee545a14555cd266d83a9b499 100644 (file)
@@ -7,7 +7,7 @@
  * Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de>
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,\
                LENGTH = CONFIG_SPL_MAX_FOOTPRINT }
 
 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
index 155dfbb401f1239bedb5807db263ca84b0346d25..77948445e261f89bf33762f62f9cfab24da2abf0 100644 (file)
@@ -9,7 +9,6 @@
 #include <asm/io.h>
 #include <dm/platform_data/serial_pl01x.h>
 #include <asm/arch/hi3798cv200.h>
-#include <asm/arch/dwmmc.h>
 #include <asm/armv8/mmu.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -155,17 +154,6 @@ static void usb2_phy_init(void)
        udelay(200);
 }
 
-int board_mmc_init(bd_t *bis)
-{
-       int ret;
-
-       ret = hi6220_dwmci_add_port(0, REG_BASE_MCI, 8);
-       if (ret)
-               printf("mmc init error (%d)\n", ret);
-
-       return ret;
-}
-
 #if defined(CONFIG_USB_GADGET) && defined(CONFIG_USB_GADGET_DWC2_OTG)
 #include <usb.h>
 #include <usb/dwc2_udc.h>
index 0d4be426b69b6b50bb2e9b8cc1400f637ec75ff9..5b32f7feb817ee8ff44d222610016f693477a123 100644 (file)
@@ -8,7 +8,7 @@
  * Based on arch/arm/cpu/armv7/omap-common/u-boot-spl.lds
  */
 
-MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE, \
+MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE, \
                LENGTH = CONFIG_SPL_MAX_FOOTPRINT }
 
 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
index 6880c747f5b7c28f7f068b96a1790d039cad1eda..8572a67a0063e224bf5381dd66ddcc61b49836ce 100644 (file)
@@ -143,7 +143,7 @@ do_imgextract(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
                        return 1;
                }
 
-               if (fit_image_check_comp(fit_hdr, noffset, IH_COMP_NONE)
+               if (!fit_image_check_comp(fit_hdr, noffset, IH_COMP_NONE)
                    && (argc < 4)) {
                        printf("Must specify load address for %s command "
                                "with compressed image\n",
index 0de60b3ced2c626d737791af326f286719c67c2a..ad390d083ac7c23a70d8c5d8e58cca1bba67b983 100644 (file)
@@ -64,10 +64,9 @@ obj-$(CONFIG_$(SPL_TPL_)BOOTSTAGE) += bootstage.o
 obj-$(CONFIG_$(SPL_TPL_)BLOBLIST) += bloblist.o
 
 ifdef CONFIG_SPL_BUILD
-ifdef CONFIG_SPL_DFU_SUPPORT
+ifdef CONFIG_SPL_DFU
 obj-$(CONFIG_DFU_OVER_USB) += dfu.o
 endif
-obj-$(CONFIG_SPL_DFU_SUPPORT) += cli_hush.o
 obj-$(CONFIG_SPL_HASH_SUPPORT) += hash.o
 obj-$(CONFIG_TPL_HASH_SUPPORT) += hash.o
 obj-$(CONFIG_SPL_YMODEM_SUPPORT) += xyzModem.o
index 51b8d5f85cbb4fa57b46129d13f3de837a897c70..fea8f8004c3e1f1acc8fbc0179f4dbb15a17c86b 100644 (file)
@@ -27,7 +27,7 @@ DECLARE_GLOBAL_DATA_PTR;
  */
 int run_command(const char *cmd, int flag)
 {
-#ifndef CONFIG_HUSH_PARSER
+#if !CONFIG_IS_ENABLED(HUSH_PARSER)
        /*
         * cli_run_command can return 0 or 1 for success, so clean up
         * its result.
index d175bb6cffe8021bf7af60ef208e05585b0e9119..54b0dc34f59515bffb0a9e4584fc9dbb97e48c4f 100644 (file)
@@ -794,7 +794,7 @@ config SPL_USB_ETHER
          since the network stack uses a number of environment variables.
          See also SPL_NET_SUPPORT and SPL_ETH_SUPPORT.
 
-config SPL_DFU_SUPPORT
+config SPL_DFU
        bool "Support DFU (Device Firmware Upgrade)"
        select SPL_HASH_SUPPORT
        select SPL_DFU_NO_RESET
@@ -809,11 +809,11 @@ config SPL_DFU_SUPPORT
 
 choice
        bool "DFU device selection"
-       depends on SPL_DFU_SUPPORT
+       depends on SPL_DFU
 
 config SPL_DFU_RAM
        bool "RAM device"
-       depends on SPL_DFU_SUPPORT && SPL_RAM_SUPPORT
+       depends on SPL_DFU && SPL_RAM_SUPPORT
        help
         select RAM/DDR memory device for loading binary images
         (u-boot/kernel) to the selected device partition using
@@ -911,6 +911,8 @@ config TPL_BOARD_INIT
 config TPL_LDSCRIPT
         string "Linker script for the TPL stage"
        depends on TPL
+       default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARM64
+       default "arch/$(ARCH)/cpu/u-boot-spl.lds"
        help
          The TPL stage will usually require a different linker-script
          (as it runs from a different memory region) than the regular
index a130a5be4b0e6609981bea8ff1f0dc862bb0fb48..6f8d7599ae18239f0b7602c9fc64e9feb84b2cdc 100644 (file)
@@ -26,7 +26,7 @@ obj-$(CONFIG_$(SPL_TPL_)USB_SUPPORT) += spl_usb.o
 obj-$(CONFIG_$(SPL_TPL_)FAT_SUPPORT) += spl_fat.o
 obj-$(CONFIG_$(SPL_TPL_)EXT_SUPPORT) += spl_ext.o
 obj-$(CONFIG_$(SPL_TPL_)SATA_SUPPORT) += spl_sata.o
-obj-$(CONFIG_$(SPL_TPL_)DFU_SUPPORT) += spl_dfu.o
+obj-$(CONFIG_$(SPL_TPL_)DFU) += spl_dfu.o
 obj-$(CONFIG_$(SPL_TPL_)SPI_LOAD) += spl_spi.o
 obj-$(CONFIG_$(SPL_TPL_)RAM_SUPPORT) += spl_ram.o
 obj-$(CONFIG_$(SPL_TPL_)USB_SDP_SUPPORT) += spl_sdp.o
index 5fcc3b1504bbc1b74f9d8451ef0b0befecb1f8cc..954e91a0045cacf0d287acedb5add9549133ff87 100644 (file)
@@ -35,7 +35,7 @@ static int spl_ram_load_image(struct spl_image_info *spl_image,
 
        header = (struct image_header *)CONFIG_SPL_LOAD_FIT_ADDRESS;
 
-#if CONFIG_IS_ENABLED(DFU_SUPPORT)
+#if CONFIG_IS_ENABLED(DFU)
        if (bootdev->boot_device == BOOT_DEVICE_DFU)
                spl_dfu_cmd(0, "dfu_alt_info_ram", "ram", "0");
 #endif
@@ -76,7 +76,7 @@ static int spl_ram_load_image(struct spl_image_info *spl_image,
 #if CONFIG_IS_ENABLED(RAM_DEVICE)
 SPL_LOAD_IMAGE_METHOD("RAM", 0, BOOT_DEVICE_RAM, spl_ram_load_image);
 #endif
-#if CONFIG_IS_ENABLED(DFU_SUPPORT)
+#if CONFIG_IS_ENABLED(DFU)
 SPL_LOAD_IMAGE_METHOD("DFU", 0, BOOT_DEVICE_DFU, spl_ram_load_image);
 #endif
 
index 2605142345dcf7d6e8e4b6ec234c451ee0368ebd..86dabd37360e9b2fb070b8df6d4582dca36f6cb1 100644 (file)
@@ -54,6 +54,7 @@ CONFIG_CMD_FS_GENERIC=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
 CONFIG_DWC_AHSATA=y
+CONFIG_DFU_MMC=y
 CONFIG_FSL_ESDHC=y
 CONFIG_PHYLIB=y
 CONFIG_PHY_MICREL=y
index 39fee49032cdc1465eba9808a5566c61952b4982..b6ab5285c2a23b44253a3a6eccfc6c493a7d7a18 100644 (file)
@@ -43,6 +43,7 @@ CONFIG_CMD_FS_GENERIC=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
 CONFIG_DWC_AHSATA=y
+CONFIG_DFU_MMC=y
 CONFIG_FSL_ESDHC=y
 CONFIG_PHYLIB=y
 CONFIG_PHY_MICREL=y
index d5424ead5aa59cff16146bf9416ef46ce4be0a25..c972b11eb5b61d7b04040f9555f8976e614e867a 100644 (file)
@@ -43,6 +43,7 @@ CONFIG_CMD_FS_GENERIC=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
 CONFIG_DWC_AHSATA=y
+CONFIG_DFU_MMC=y
 CONFIG_FSL_ESDHC=y
 CONFIG_PHYLIB=y
 CONFIG_PHY_MICREL=y
index fdecc0f5c27192c577b42fecc596d3af719b0c59..848d898ddfa17121d819ccf733f60d3dc6df0fbf 100644 (file)
@@ -34,8 +34,6 @@ CONFIG_DM_GPIO=y
 CONFIG_LED=y
 CONFIG_LED_BCM6328=y
 CONFIG_LED_BLINK=y
-CONFIG_SPI_FLASH=y
-# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
 CONFIG_PHY=y
 CONFIG_BCM6368_USBH_PHY=y
 CONFIG_PINCTRL=y
index 02eb324811c46be3bf9b0ed1e15bb2221c8f39fb..ceba006e0c588dab79d25a9f9e2dbbb1e8ca733b 100644 (file)
@@ -42,6 +42,7 @@ CONFIG_DM_ETH=y
 CONFIG_MII=y
 CONFIG_DRIVER_TI_CPSW=y
 CONFIG_SPI=y
+CONFIG_DM_SPI=y
 CONFIG_OMAP3_SPI=y
 CONFIG_TIMER=y
 CONFIG_OMAP_TIMER=y
index a92923bc54d76323ef4ece8e79bb7af765039ae5..207228135458d709d0518956c7dbdfb3efd167a3 100644 (file)
@@ -53,6 +53,7 @@ CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
+CONFIG_DFU_MMC=y
 CONFIG_FSL_ESDHC=y
 CONFIG_PHYLIB=y
 CONFIG_PHY_MICREL=y
index bc8a4a2dd2e99eebf81616b10691ccdbc788cf26..5e9490bc42180f847c5aef33627c9004102bb3bf 100644 (file)
@@ -42,6 +42,7 @@ CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
+CONFIG_DFU_MMC=y
 CONFIG_FSL_ESDHC=y
 CONFIG_PHYLIB=y
 CONFIG_PHY_MICREL=y
index b2b59e122bb1a68432067f9a27740e23c2d8cc73..9008658985398143c3cd7a53eed0ba966aabc537 100644 (file)
@@ -31,6 +31,8 @@ CONFIG_PM8916_GPIO=y
 CONFIG_DM_MMC=y
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_MSM=y
+CONFIG_PINCTRL=y
+CONFIG_PINCONF=y
 CONFIG_DM_PMIC=y
 CONFIG_PMIC_PM8916=y
 CONFIG_MSM_SERIAL=y
index 273334b05d213f5e62c5463509b329db0d95d2be..64281d0529dff38c8823beb8fb17dd57c0b98bda 100644 (file)
@@ -3,6 +3,7 @@ CONFIG_ISA_ARCV2=y
 CONFIG_CPU_ARCEM6=y
 CONFIG_TARGET_EMSDP=y
 CONFIG_SYS_TEXT_BASE=0x00000000
+CONFIG_ENV_SIZE=0x1000
 CONFIG_SYS_CLK_FREQ=40000000
 # CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
 CONFIG_VERSION_VARIABLE=y
index 1b6dd9e55ad20c14656c6c86105b9f3b57bfe821..24bbe3fc5df305748bbb94b36ce093d1b3f9e868 100644 (file)
@@ -5,6 +5,7 @@ CONFIG_SYS_ICACHE_OFF=y
 CONFIG_SYS_DCACHE_OFF=y
 CONFIG_TARGET_IOT_DEVKIT=y
 CONFIG_SYS_TEXT_BASE=0x00000000
+CONFIG_ENV_SIZE=0x1000
 CONFIG_SYS_CLK_FREQ=16000000
 CONFIG_LOCALVERSION="-iotdk-1.0"
 # CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
index 778e395c5b1a42c2f02022e353b089bef0e2704c..3f3d2c917ff7e93fe4760b0d555b24fbfd0deedf 100644 (file)
@@ -77,6 +77,7 @@ CONFIG_USB=y
 CONFIG_DM_USB=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_STORAGE=y
+CONFIG_CMD_FS_GENERIC=y
 CONFIG_W1=y
 CONFIG_W1_GPIO=y
 CONFIG_W1_EEPROM=y
index f30053d4deefcef72605638310df58ca40af9b8c..e3837d92e7fabe7271411e52f18d26406e35a4eb 100644 (file)
@@ -1,6 +1,7 @@
 CONFIG_ARC=y
 CONFIG_TARGET_TB100=y
 CONFIG_SYS_TEXT_BASE=0x84000000
+CONFIG_ENV_SIZE=0x800
 CONFIG_SYS_CLK_FREQ=500000000
 CONFIG_BOOTDELAY=3
 CONFIG_USE_BOOTARGS=y
index 4105864e2b64713221f9f2ad32dd0ada9ba15efe..eca023ac04da848c090c1b6257f2aec83996acc8 100644 (file)
@@ -2,6 +2,7 @@
 
 obj-$(CONFIG_$(SPL_TPL_)CLK) += clk/
 obj-$(CONFIG_$(SPL_TPL_)DM) += core/
+obj-$(CONFIG_$(SPL_TPL_)DFU) += dfu/
 obj-$(CONFIG_$(SPL_TPL_)GPIO_SUPPORT) += gpio/
 obj-$(CONFIG_$(SPL_TPL_)DRIVERS_MISC_SUPPORT) += misc/ sysreset/ firmware/
 obj-$(CONFIG_$(SPL_TPL_)I2C_SUPPORT) += i2c/
@@ -50,7 +51,6 @@ obj-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += usb/musb-new/
 obj-$(CONFIG_SPL_USB_GADGET) += usb/gadget/
 obj-$(CONFIG_SPL_USB_GADGET) += usb/common/
 obj-$(CONFIG_SPL_USB_GADGET) += usb/gadget/udc/
-obj-$(CONFIG_SPL_DFU_SUPPORT) += dfu/
 obj-$(CONFIG_SPL_WATCHDOG_SUPPORT) += watchdog/
 obj-$(CONFIG_SPL_USB_HOST_SUPPORT) += usb/host/
 obj-$(CONFIG_OMAP_USB_PHY) += usb/phy/
@@ -86,7 +86,6 @@ obj-y += misc/
 obj-$(CONFIG_MMC) += mmc/
 obj-$(CONFIG_NVME) += nvme/
 obj-y += pcmcia/
-obj-y += dfu/
 obj-$(CONFIG_X86) += pch/
 obj-y += phy/allwinner/
 obj-y += phy/marvell/
index 56f9b0c5f49d55164ce4f39141ec0f16304c47ca..4164f342acc702fde160550893eb1d4ef91d9962 100644 (file)
@@ -3,9 +3,9 @@
 # Copyright (C) 2012 Samsung Electronics
 # Lukasz Majewski <l.majewski@samsung.com>
 
-obj-$(CONFIG_DFU) += dfu.o
-obj-$(CONFIG_DFU_MMC) += dfu_mmc.o
-obj-$(CONFIG_DFU_NAND) += dfu_nand.o
-obj-$(CONFIG_DFU_RAM) += dfu_ram.o
-obj-$(CONFIG_DFU_SF) += dfu_sf.o
-obj-$(CONFIG_DFU_TFTP) += dfu_tftp.o
+obj-$(CONFIG_$(SPL_)DFU) += dfu.o
+obj-$(CONFIG_$(SPL_)DFU_MMC) += dfu_mmc.o
+obj-$(CONFIG_$(SPL_)DFU_NAND) += dfu_nand.o
+obj-$(CONFIG_$(SPL_)DFU_RAM) += dfu_ram.o
+obj-$(CONFIG_$(SPL_)DFU_SF) += dfu_sf.o
+obj-$(CONFIG_$(SPL_)DFU_TFTP) += dfu_tftp.o
index 243e7ae5abfbb5c7989f0c2f22da7b47a4fd9fee..29ad87c1d7b4b865e8c8170e8f83541f4da5ccd4 100644 (file)
@@ -69,6 +69,7 @@ static const struct udevice_id i2c_eeprom_std_ids[] = {
        { .compatible = "atmel,24c01a", .data = 3 },
        { .compatible = "atmel,24c02", .data = 3 },
        { .compatible = "atmel,24c04", .data = 4 },
+       { .compatible = "atmel,24c08", .data = 4 },
        { .compatible = "atmel,24c08a", .data = 4 },
        { .compatible = "atmel,24c16a", .data = 4 },
        { .compatible = "atmel,24mac402", .data = 4 },
index 2fa61c4259b51ba6fb502d1a96ae39cd020cf204..21fa2ab1d46868c618558445c63c3eafbd65a9fd 100644 (file)
@@ -384,6 +384,25 @@ static void check_and_invalidate_dcache_range
        invalidate_dcache_range(start, end);
 }
 
+#ifdef CONFIG_MCF5441x
+/*
+ * Swaps 32-bit words to little-endian byte order.
+ */
+static inline void sd_swap_dma_buff(struct mmc_data *data)
+{
+       int i, size = data->blocksize >> 2;
+       u32 *buffer = (u32 *)data->dest;
+       u32 sw;
+
+       while (data->blocks--) {
+               for (i = 0; i < size; i++) {
+                       sw = __sw32(*buffer);
+                       *buffer++ = sw;
+               }
+       }
+}
+#endif
+
 /*
  * Sends a command out on the bus.  Takes the mmc pointer,
  * a command pointer, and an optional data pointer.
@@ -546,8 +565,12 @@ static int esdhc_send_cmd_common(struct fsl_esdhc_priv *priv, struct mmc *mmc,
                 * cache-fill during the DMA operations such as the
                 * speculative pre-fetching etc.
                 */
-               if (data->flags & MMC_DATA_READ)
+               if (data->flags & MMC_DATA_READ) {
                        check_and_invalidate_dcache_range(cmd, data);
+#ifdef CONFIG_MCF5441x
+                       sd_swap_dma_buff(data);
+#endif
+               }
 #endif
        }
 
@@ -1029,8 +1052,12 @@ static int esdhc_init_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
        /* Disable the BRR and BWR bits in IRQSTAT */
        esdhc_clrbits32(&regs->irqstaten, IRQSTATEN_BRR | IRQSTATEN_BWR);
 
+#ifdef CONFIG_MCF5441x
+       esdhc_write32(&regs->proctl, PROCTL_INIT | PROCTL_D3CD);
+#else
        /* Put the PROCTL reg back to the default */
        esdhc_write32(&regs->proctl, PROCTL_INIT);
+#endif
 
        /* Set timout to the maximum value */
        esdhc_clrsetbits32(&regs->sysctl, SYSCTL_TIMEOUT_MASK, 14 << 16);
@@ -1138,6 +1165,11 @@ static int fsl_esdhc_init(struct fsl_esdhc_priv *priv,
        if (ret)
                return ret;
 
+#ifdef CONFIG_MCF5441x
+       /* ColdFire, using SDHC_DATA[3] for card detection */
+       esdhc_write32(&regs->proctl, PROCTL_INIT | PROCTL_D3CD);
+#endif
+
 #ifndef CONFIG_FSL_USDHC
        esdhc_setbits32(&regs->sysctl, SYSCTL_PEREN | SYSCTL_HCKEN
                                | SYSCTL_IPGEN | SYSCTL_CKEN);
@@ -1162,6 +1194,15 @@ static int fsl_esdhc_init(struct fsl_esdhc_priv *priv,
        voltage_caps = 0;
        caps = esdhc_read32(&regs->hostcapblt);
 
+#ifdef CONFIG_MCF5441x
+       /*
+        * MCF5441x RM declares in more points that sdhc clock speed must
+        * never exceed 25 Mhz. From this, the HS bit needs to be disabled
+        * from host capabilities.
+        */
+       caps &= ~ESDHC_HOSTCAPBLT_HSS;
+#endif
+
 #ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC135
        caps = caps & ~(ESDHC_HOSTCAPBLT_SRS |
                        ESDHC_HOSTCAPBLT_VS18 | ESDHC_HOSTCAPBLT_VS30);
index cc58aff38cc415db07f6330111a040251a8c5ebc..effd1e4c7c849fa43095ebeb47c7ab0d305696b1 100644 (file)
@@ -77,6 +77,7 @@ static int hi6220_dwmmc_bind(struct udevice *dev)
 
 static const struct udevice_id hi6220_dwmmc_ids[] = {
        { .compatible = "hisilicon,hi6220-dw-mshc" },
+       { .compatible = "hisilicon,hi3798cv200-dw-mshc" },
        { }
 };
 
index 0741a525c01cf068ae934ec2276e4732ba2fc41e..d3f07783688596c0850968350a956a7b346e3b21 100644 (file)
@@ -269,7 +269,7 @@ struct msdc_host {
        bool builtin_cd;
 
        /* card detection / write protection GPIOs */
-#ifdef CONFIG_DM_GPIO
+#if IS_ENABLED(DM_GPIO)
        struct gpio_desc gpio_wp;
        struct gpio_desc gpio_cd;
 #endif
@@ -554,6 +554,14 @@ static int msdc_pio_read(struct msdc_host *host, u8 *ptr, u32 size)
                        break;
                }
 
+               chksz = min(size, (u32)MSDC_FIFO_SIZE);
+
+               if (msdc_fifo_rx_bytes(host) >= chksz) {
+                       msdc_fifo_read(host, ptr, chksz);
+                       ptr += chksz;
+                       size -= chksz;
+               }
+
                if (status & MSDC_INT_XFER_COMPL) {
                        if (size) {
                                pr_err("data not fully read\n");
@@ -562,15 +570,7 @@ static int msdc_pio_read(struct msdc_host *host, u8 *ptr, u32 size)
 
                        break;
                }
-
-               chksz = min(size, (u32)MSDC_FIFO_SIZE);
-
-               if (msdc_fifo_rx_bytes(host) >= chksz) {
-                       msdc_fifo_read(host, ptr, chksz);
-                       ptr += chksz;
-                       size -= chksz;
-               }
-       }
+}
 
        return ret;
 }
@@ -849,7 +849,7 @@ static int msdc_ops_get_cd(struct udevice *dev)
                return !(val & MSDC_PS_CDSTS);
        }
 
-#ifdef CONFIG_DM_GPIO
+#if IS_ENABLED(DM_GPIO)
        if (!host->gpio_cd.dev)
                return 1;
 
@@ -861,9 +861,9 @@ static int msdc_ops_get_cd(struct udevice *dev)
 
 static int msdc_ops_get_wp(struct udevice *dev)
 {
+#if IS_ENABLED(DM_GPIO)
        struct msdc_host *host = dev_get_priv(dev);
 
-#ifdef CONFIG_DM_GPIO
        if (!host->gpio_wp.dev)
                return 0;
 
@@ -1332,7 +1332,7 @@ static int msdc_ofdata_to_platdata(struct udevice *dev)
        if (ret < 0)
                return ret;
 
-#ifdef CONFIG_DM_GPIO
+#if IS_ENABLED(DM_GPIO)
        gpio_request_by_name(dev, "wp-gpios", 0, &host->gpio_wp, GPIOD_IS_IN);
        gpio_request_by_name(dev, "cd-gpios", 0, &host->gpio_cd, GPIOD_IS_IN);
 #endif
index ee820a57a0e0b6aa2f570dab65c60eba2c492aab..162642d7289bc3cbeb25bb7af9b17347b97d8f56 100644 (file)
@@ -2,6 +2,7 @@ if ARCH_MESON
 
 config PINCTRL_MESON
        select PINCTRL_GENERIC
+       select PINCONF
        bool
 
 config PINCTRL_MESON_GX_PMX
index c82413d08f34d3041e5d0a937436be84866caf5a..f23b188f2f3f372250eebd629fccda886e0dcd7c 100644 (file)
@@ -93,6 +93,12 @@ static int meson_axg_pinmux_group_set(struct udevice *dev,
        return 0;
 }
 
+const struct pinconf_param meson_axg_pinconf_params[] = {
+       { "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 },
+       { "bias-pull-up", PIN_CONFIG_BIAS_PULL_UP, 1 },
+       { "bias-pull-down", PIN_CONFIG_BIAS_PULL_DOWN, 1 },
+};
+
 const struct pinctrl_ops meson_axg_pinctrl_ops = {
        .get_groups_count = meson_pinctrl_get_groups_count,
        .get_group_name = meson_pinctrl_get_group_name,
@@ -100,6 +106,10 @@ const struct pinctrl_ops meson_axg_pinctrl_ops = {
        .get_function_name = meson_pinmux_get_function_name,
        .pinmux_group_set = meson_axg_pinmux_group_set,
        .set_state = pinctrl_generic_set_state,
+       .pinconf_params = meson_axg_pinconf_params,
+       .pinconf_num_params = ARRAY_SIZE(meson_axg_pinconf_params),
+       .pinconf_set = meson_pinconf_set,
+       .pinconf_group_set = meson_pinconf_group_set,
 };
 
 static int meson_axg_gpio_request(struct udevice *dev,
index fc1538ea719eaed04062f25beb56b1abdd16b705..cf72576b6ce2f7c8dee7abda566806222a33d9e2 100644 (file)
@@ -72,6 +72,12 @@ static int meson_gx_pinmux_group_set(struct udevice *dev,
        return 0;
 }
 
+const struct pinconf_param meson_gx_pinconf_params[] = {
+       { "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 },
+       { "bias-pull-up", PIN_CONFIG_BIAS_PULL_UP, 1 },
+       { "bias-pull-down", PIN_CONFIG_BIAS_PULL_DOWN, 1 },
+};
+
 const struct pinctrl_ops meson_gx_pinctrl_ops = {
        .get_groups_count = meson_pinctrl_get_groups_count,
        .get_group_name = meson_pinctrl_get_group_name,
@@ -79,6 +85,10 @@ const struct pinctrl_ops meson_gx_pinctrl_ops = {
        .get_function_name = meson_pinmux_get_function_name,
        .pinmux_group_set = meson_gx_pinmux_group_set,
        .set_state = pinctrl_generic_set_state,
+       .pinconf_params = meson_gx_pinconf_params,
+       .pinconf_num_params = ARRAY_SIZE(meson_gx_pinconf_params),
+       .pinconf_set = meson_pinconf_set,
+       .pinconf_group_set = meson_pinconf_group_set,
 };
 
 static const struct dm_gpio_ops meson_gx_gpio_ops = {
index b539749752c8420659870b6bd23c093fb9a85777..fa3d78858a9e0f615021509f26ca0e75a31a1693 100644 (file)
@@ -57,7 +57,7 @@ static int meson_gpio_calc_reg_and_bit(struct udevice *dev, unsigned int offset,
                                       enum meson_reg_type reg_type,
                                       unsigned int *reg, unsigned int *bit)
 {
-       struct meson_pinctrl *priv = dev_get_priv(dev->parent);
+       struct meson_pinctrl *priv = dev_get_priv(dev);
        struct meson_bank *bank = NULL;
        struct meson_reg_desc *desc;
        unsigned int pin;
@@ -89,7 +89,8 @@ int meson_gpio_get(struct udevice *dev, unsigned int offset)
        unsigned int reg, bit;
        int ret;
 
-       ret = meson_gpio_calc_reg_and_bit(dev, offset, REG_IN, &reg, &bit);
+       ret = meson_gpio_calc_reg_and_bit(dev->parent, offset, REG_IN, &reg,
+                                         &bit);
        if (ret)
                return ret;
 
@@ -102,7 +103,8 @@ int meson_gpio_set(struct udevice *dev, unsigned int offset, int value)
        unsigned int reg, bit;
        int ret;
 
-       ret = meson_gpio_calc_reg_and_bit(dev, offset, REG_OUT, &reg, &bit);
+       ret = meson_gpio_calc_reg_and_bit(dev->parent, offset, REG_OUT, &reg,
+                                         &bit);
        if (ret)
                return ret;
 
@@ -117,7 +119,8 @@ int meson_gpio_get_direction(struct udevice *dev, unsigned int offset)
        unsigned int reg, bit, val;
        int ret;
 
-       ret = meson_gpio_calc_reg_and_bit(dev, offset, REG_DIR, &reg, &bit);
+       ret = meson_gpio_calc_reg_and_bit(dev->parent, offset, REG_DIR, &reg,
+                                         &bit);
        if (ret)
                return ret;
 
@@ -132,7 +135,8 @@ int meson_gpio_direction_input(struct udevice *dev, unsigned int offset)
        unsigned int reg, bit;
        int ret;
 
-       ret = meson_gpio_calc_reg_and_bit(dev, offset, REG_DIR, &reg, &bit);
+       ret = meson_gpio_calc_reg_and_bit(dev->parent, offset, REG_DIR, &reg,
+                                         &bit);
        if (ret)
                return ret;
 
@@ -148,13 +152,15 @@ int meson_gpio_direction_output(struct udevice *dev,
        unsigned int reg, bit;
        int ret;
 
-       ret = meson_gpio_calc_reg_and_bit(dev, offset, REG_DIR, &reg, &bit);
+       ret = meson_gpio_calc_reg_and_bit(dev->parent, offset, REG_DIR, &reg,
+                                         &bit);
        if (ret)
                return ret;
 
        clrbits_le32(priv->reg_gpio + reg, BIT(bit));
 
-       ret = meson_gpio_calc_reg_and_bit(dev, offset, REG_OUT, &reg, &bit);
+       ret = meson_gpio_calc_reg_and_bit(dev->parent, offset, REG_OUT, &reg,
+                                         &bit);
        if (ret)
                return ret;
 
@@ -163,6 +169,72 @@ int meson_gpio_direction_output(struct udevice *dev,
        return 0;
 }
 
+static int meson_pinconf_bias_set(struct udevice *dev, unsigned int pin,
+                                 unsigned int param)
+{
+       struct meson_pinctrl *priv = dev_get_priv(dev);
+       unsigned int offset = pin - priv->data->pin_base;
+       unsigned int reg, bit;
+       int ret;
+
+       ret = meson_gpio_calc_reg_and_bit(dev, offset, REG_PULLEN, &reg, &bit);
+       if (ret)
+               return ret;
+
+       if (param == PIN_CONFIG_BIAS_DISABLE) {
+               clrsetbits_le32(priv->reg_pullen + reg, BIT(bit), 0);
+               return 0;
+       }
+
+       /* othewise, enable the bias and select level */
+       clrsetbits_le32(priv->reg_pullen + reg, BIT(bit), 1);
+       ret = meson_gpio_calc_reg_and_bit(dev, offset, REG_PULL, &reg, &bit);
+       if (ret)
+               return ret;
+
+       clrsetbits_le32(priv->reg_pull + reg, BIT(bit),
+                       param == PIN_CONFIG_BIAS_PULL_UP);
+
+       return 0;
+}
+
+int meson_pinconf_set(struct udevice *dev, unsigned int pin,
+                     unsigned int param, unsigned int arg)
+{
+       int ret;
+
+       switch (param) {
+       case PIN_CONFIG_BIAS_DISABLE:
+       case PIN_CONFIG_BIAS_PULL_UP:
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+               ret = meson_pinconf_bias_set(dev, pin, param);
+               break;
+
+       default:
+               dev_err(dev, "unsupported configuration parameter %u\n", param);
+               return -EINVAL;
+       }
+
+       return ret;
+}
+
+int meson_pinconf_group_set(struct udevice *dev,
+                           unsigned int group_selector,
+                           unsigned int param, unsigned int arg)
+{
+       struct meson_pinctrl *priv = dev_get_priv(dev);
+       struct meson_pmx_group *grp = &priv->data->groups[group_selector];
+       int i, ret;
+
+       for (i = 0; i < grp->num_pins; i++) {
+               ret = meson_pinconf_set(dev, grp->pins[i], param, arg);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+
 int meson_gpio_probe(struct udevice *dev)
 {
        struct meson_pinctrl *priv = dev_get_priv(dev->parent);
@@ -240,6 +312,21 @@ int meson_pinctrl_probe(struct udevice *dev)
                return -EINVAL;
        }
        priv->reg_gpio = (void __iomem *)addr;
+
+       addr = parse_address(gpio, "pull", na, ns);
+       if (addr == FDT_ADDR_T_NONE) {
+               debug("pull address not found\n");
+               return -EINVAL;
+       }
+       priv->reg_pull = (void __iomem *)addr;
+
+       addr = parse_address(gpio, "pull-enable", na, ns);
+       /* Use pull region if pull-enable one is not present */
+       if (addr == FDT_ADDR_T_NONE)
+               priv->reg_pullen = priv->reg_pull;
+       else
+               priv->reg_pullen = (void __iomem *)addr;
+
        priv->data = (struct meson_pinctrl_data *)dev_get_driver_data(dev);
 
        /* Lookup GPIO driver */
index bdee721fc0070b56249045c65b2332c3465c0fb6..28085a7495d461b3edf947c92e0db07199d5241a 100644 (file)
@@ -39,6 +39,8 @@ struct meson_pinctrl {
        struct meson_pinctrl_data *data;
        void __iomem *reg_mux;
        void __iomem *reg_gpio;
+       void __iomem *reg_pull;
+       void __iomem *reg_pullen;
 };
 
 /**
@@ -130,4 +132,10 @@ int meson_gpio_direction_output(struct udevice *dev, unsigned int offset,
                                int value);
 int meson_gpio_probe(struct udevice *dev);
 
+int meson_pinconf_set(struct udevice *dev, unsigned int pin,
+                     unsigned int param, unsigned int arg);
+int meson_pinconf_group_set(struct udevice *dev,
+                           unsigned int group_selector,
+                           unsigned int param, unsigned int arg);
+
 #endif /* __PINCTRL_MESON_H__ */
index 980b38d2a1ca7f54796f69c8daad47ba8d4a698b..70dbc6d6b53f50eaaceba28d47e528fa95363fac 100644 (file)
@@ -126,6 +126,7 @@ U_BOOT_DRIVER(serial_arc) = {
        .id     = UCLASS_SERIAL,
        .of_match = arc_serial_ids,
        .ofdata_to_platdata = arc_serial_ofdata_to_platdata,
+       .platdata_auto_alloc_size = sizeof(struct arc_serial_platdata),
        .probe = arc_serial_probe,
        .ops    = &arc_serial_ops,
 };
index 01e2b3abf29525bc9e0c6afd264687ce1c587690..70f3bf43e7e16ab236e6fd2a0058c995f48ff86b 100644 (file)
@@ -8,7 +8,7 @@ obj-$(CONFIG_USB_ETHER) += epautoconf.o config.o usbstring.o
 
 ifdef CONFIG_SPL_BUILD
 obj-$(CONFIG_SPL_USB_GADGET) += g_dnl.o
-obj-$(CONFIG_SPL_DFU_SUPPORT) += f_dfu.o
+obj-$(CONFIG_SPL_DFU) += f_dfu.o
 obj-$(CONFIG_SPL_USB_SDP_SUPPORT) += f_sdp.o
 endif
 
index 9011109b47b781f30220f1c8b8296ac3d32de2f8..c22cbbdadcb6cae865685356a5873b8d03474c0d 100644 (file)
@@ -431,7 +431,7 @@ config ENV_EXT4_FILE
          It's a string of the EXT4 file name. This file use to store the
          environment (explicit path to the file)
 
-if ARCH_ROCKCHIP || ARCH_SUNXI || ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL
+if ARCH_ROCKCHIP || ARCH_SUNXI || ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL || ARC
 
 config ENV_OFFSET
        hex "Environment Offset"
@@ -441,6 +441,7 @@ config ENV_OFFSET
        default 0x88000 if ARCH_SUNXI
        default 0xE0000 if ARCH_ZYNQ
        default 0x1E00000 if ARCH_ZYNQMP
+       default 0 if ARC
        help
          Offset from the start of the device (or partition)
 
@@ -449,6 +450,7 @@ config ENV_SIZE
        default 0x40000 if ENV_IS_IN_SPI_FLASH && ARCH_ZYNQMP
        default 0x20000 if ARCH_SUNXI || ARCH_ZYNQ
        default 0x8000 if ARCH_ROCKCHIP || ARCH_ZYNQMP || ARCH_VERSAL
+       default 0x4000 if ARC
        help
          Size of the environment storage area
 
index d1a6a5286013a6669f1b8c69e1fa4425a941714e..324502ed82924576c21ebc09e79e6c5c168b3bd2 100644 (file)
@@ -115,7 +115,7 @@ int env_import(const char *buf, int check)
 
                if (crc32(0, ep->data, ENV_SIZE) != crc) {
                        set_default_env("bad CRC", 0);
-                       return -EIO;
+                       return -ENOMSG; /* needed for env_load() */
                }
        }
 
@@ -169,7 +169,7 @@ int env_import_redund(const char *buf1, int buf1_read_fail,
 
        if (!crc1_ok && !crc2_ok) {
                set_default_env("bad CRC", 0);
-               return -EIO;
+               return -ENOMSG; /* needed for env_load() */
        } else if (crc1_ok && !crc2_ok) {
                gd->env_valid = ENV_VALID;
        } else if (!crc1_ok && crc2_ok) {
index 003509d34240fcc3355c1c3901405eda49b1f508..4b417b90a2912c201f201514e840d644f03e45e7 100644 (file)
--- a/env/env.c
+++ b/env/env.c
@@ -177,6 +177,7 @@ int env_get_char(int index)
 int env_load(void)
 {
        struct env_driver *drv;
+       int best_prio = -1;
        int prio;
 
        for (prio = 0; (drv = env_driver_lookup(ENVOP_LOAD, prio)); prio++) {
@@ -195,20 +196,32 @@ int env_load(void)
                 * one message.
                 */
                ret = drv->load();
-               if (ret) {
-                       debug("Failed (%d)\n", ret);
-               } else {
+               if (!ret) {
                        printf("OK\n");
                        return 0;
+               } else if (ret == -ENOMSG) {
+                       /* Handle "bad CRC" case */
+                       if (best_prio == -1)
+                               best_prio = prio;
+               } else {
+                       debug("Failed (%d)\n", ret);
                }
        }
 
        /*
         * In case of invalid environment, we set the 'default' env location
-        * to the highest priority. In this way, next calls to env_save()
-        * will restore the environment at the right place.
+        * to the best choice, i.e.:
+        *   1. Environment location with bad CRC, if such location was found
+        *   2. Otherwise use the location with highest priority
+        *
+        * This way, next calls to env_save() will restore the environment
+        * at the right place.
         */
-       env_get_location(ENVOP_LOAD, 0);
+       if (best_prio >= 0)
+               debug("Selecting environment with bad CRC\n");
+       else
+               best_prio = 0;
+       env_get_location(ENVOP_LOAD, best_prio);
 
        return -ENODEV;
 }
index caeb34cf0ab893c7c36d57e1a1cc7592969ea854..ebf44b5529c3b921d07e4ccd4c9f21c44bc1dbcc 100644 (file)
@@ -23,7 +23,7 @@
 #define CONFIG_TPL_DRIVERS_MISC_SUPPORT
 #define CONFIG_SPL_COMMON_INIT_DDR
 #define CONFIG_SPL_MAX_SIZE            (128 << 10)
-#define CONFIG_SPL_TEXT_BASE           0xf8f81000
+#define CONFIG_TPL_TEXT_BASE           0xf8f81000
 #define CONFIG_SYS_MPC85XX_NO_RESETVEC
 #define CONFIG_SYS_NAND_U_BOOT_SIZE    (832 << 10)
 #define CONFIG_SYS_NAND_U_BOOT_DST     (0x11000000)
@@ -50,7 +50,9 @@
 #define CONFIG_RESET_VECTOR_ADDRESS    0xeffffffc
 #endif
 
-#ifdef CONFIG_SPL_BUILD
+#ifdef CONFIG_TPL_BUILD
+#define CONFIG_SYS_MONITOR_BASE        CONFIG_TPL_TEXT_BASE
+#elif defined(CONFIG_SPL_BUILD)
 #define CONFIG_SYS_MONITOR_BASE        CONFIG_SPL_TEXT_BASE
 #else
 #define CONFIG_SYS_MONITOR_BASE        CONFIG_SYS_TEXT_BASE    /* start of monitor */
index 18f70f04af5f779046a2171cd824c8725d9c531b..134ffe52714fb20ff283512b74d180b3d85de9f8 100644 (file)
@@ -78,7 +78,7 @@
 #define CONFIG_SPL_NAND_INIT
 #define CONFIG_SPL_COMMON_INIT_DDR
 #define CONFIG_SPL_MAX_SIZE            (128 << 10)
-#define CONFIG_SPL_TEXT_BASE           0xD0001000
+#define CONFIG_TPL_TEXT_BASE           0xD0001000
 #define CONFIG_SYS_MPC85XX_NO_RESETVEC
 #define CONFIG_SYS_NAND_U_BOOT_SIZE    (576 << 10)
 #define CONFIG_SYS_NAND_U_BOOT_DST     (0x11000000)
 #define CONFIG_RESET_VECTOR_ADDRESS    0xeffffffc
 #endif
 
-#ifdef CONFIG_SPL_BUILD
+#ifdef CONFIG_TPL_BUILD
+#define CONFIG_SYS_MONITOR_BASE        CONFIG_TPL_TEXT_BASE
+#elif defined(CONFIG_SPL_BUILD)
 #define CONFIG_SYS_MONITOR_BASE        CONFIG_SPL_TEXT_BASE
 #else
 #define CONFIG_SYS_MONITOR_BASE        CONFIG_SYS_TEXT_BASE    /* start of monitor */
index eeb19a9fa68a7399b2ed091181deefc0a4f0092e..3ccfeca890bc97ce753aec633580b5c2526c08f5 100644 (file)
@@ -58,7 +58,7 @@
 #define CONFIG_SPL_NAND_INIT
 #define CONFIG_SPL_COMMON_INIT_DDR
 #define CONFIG_SPL_MAX_SIZE            (128 << 10)
-#define CONFIG_SPL_TEXT_BASE           0xf8f81000
+#define CONFIG_TPL_TEXT_BASE           0xf8f81000
 #define CONFIG_SYS_MPC85XX_NO_RESETVEC
 #define CONFIG_SYS_NAND_U_BOOT_SIZE    (832 << 10)
 #define CONFIG_SYS_NAND_U_BOOT_DST     (0x11000000)
 #define CONFIG_SYS_MAX_FLASH_SECT      1024
 
 #ifndef CONFIG_SYS_MONITOR_BASE
-#ifdef CONFIG_SPL_BUILD
+#ifdef CONFIG_TPL_BUILD
+#define CONFIG_SYS_MONITOR_BASE                CONFIG_TPL_TEXT_BASE
+#elif defined(CONFIG_SPL_BUILD)
 #define CONFIG_SYS_MONITOR_BASE                CONFIG_SPL_TEXT_BASE
 #else
 #define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_TEXT_BASE    /* start of monitor */
index 135b3c9584d37dd9c9f05dde34644e68f7164efc..ba4e96da505f7885bcc28b20401de3652f3fc1ca 100644 (file)
 #define CONFIG_USBD_HS
 
 #define CONFIG_USB_GADGET_MASS_STORAGE
-/* USB DFU */
-#define CONFIG_DFU_MMC
-
-/* Miscellaneous commands */
 
 /* Framebuffer and LCD */
 #define CONFIG_VIDEO_IPUV3
index bd1c9025c62f2f66ad2a0242ae9f00a985fd5b67..e128d1c08baf8030490cc4412b557dc605c7b35d 100644 (file)
@@ -45,7 +45,6 @@
 /*
  * UART configuration
  */
-#define CONFIG_DW_SERIAL
 #define CONFIG_SYS_NS16550_SERIAL
 #define CONFIG_SYS_NS16550_CLK         33333333
 #define CONFIG_SYS_NS16550_MEM32
@@ -63,7 +62,6 @@
 /*
  * Environment settings
  */
-#define CONFIG_ENV_SIZE                        SZ_16K
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "upgrade=if mmc rescan && " \
                "fatload mmc 0:1 ${loadaddr} u-boot-update.img && " \
index 7eb87cada6fe1b86fb1924e731d68f2bbc28cc4b..2d40ceb24e96db2c29319b3ea23343e0236b2bfc 100644 (file)
 #define CONFIG_USBD_HS
 
 #define CONFIG_USB_GADGET_MASS_STORAGE
-/* USB DFU */
-#define CONFIG_DFU_MMC
-
-/* Miscellaneous commands */
 
 /* Framebuffer and LCD */
 #define CONFIG_VIDEO_IPUV3
index 2d8758db7541c55f10991cfbab6299e6309987b0..f36a9c3e08cecf2653de5fed8b3b6593043f047a 100644 (file)
@@ -53,7 +53,7 @@
 
 #ifdef CONFIG_SPL_BUILD
 #undef CONFIG_CMD_BOOTD
-#ifdef CONFIG_SPL_DFU_SUPPORT
+#ifdef CONFIG_SPL_DFU
 #define CONFIG_SPL_LOAD_FIT_ADDRESS 0x80200000
 #define DFUARGS \
        "dfu_bufsiz=0x10000\0" \
index e6b246914885cdb622e353b2e5e4223c3d082d0b..a872d48154a4eff49747a911757314efb36f302e 100644 (file)
@@ -21,7 +21,6 @@
 /*
  * Environment
  */
-#define CONFIG_ENV_SIZE                        SZ_4K
 #define CONFIG_BOOTFILE                        "app.bin"
 #define CONFIG_LOADADDR                        CONFIG_SYS_LOAD_ADDR
 
index 2ec2fd12a18ca05b0c35301616270860ff04f5b2..9af1d12701cad6184213577d23b5069132696fdb 100644 (file)
@@ -40,7 +40,6 @@
 /*
  * UART configuration
  */
-#define CONFIG_DW_SERIAL
 #define CONFIG_SYS_NS16550_SERIAL
 #define CONFIG_SYS_NS16550_CLK         33330000
 #define CONFIG_SYS_NS16550_MEM32
@@ -58,8 +57,6 @@
 /*
  * Environment settings
  */
-#define CONFIG_ENV_SIZE                        SZ_16K
-
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "upgrade=if mmc rescan && " \
                "fatload mmc 0:1 ${loadaddr} u-boot-update.scr && " \
index cd1309d4b9848224004275bdafeef7564b313aeb..1ba69d9a5d0de6019ea11fb6c6b7cd7667042074 100644 (file)
@@ -74,7 +74,6 @@
 /*
  * Environment
  */
-#define CONFIG_ENV_SIZE                        SZ_4K
 #define CONFIG_BOOTFILE                        "app.bin"
 #define CONFIG_LOADADDR                        CONFIG_SYS_LOAD_ADDR
 
index c3f34a91e433d57a126bd0f90a14ddd0a35a87f4..61217bbe7956d2c7757301a2251e5823b99aa6b6 100644 (file)
 #define CONFIG_SYS_BOOTM_LEN           SZ_32M
 #define CONFIG_SYS_LOAD_ADDR           0x82000000
 
-/*
- * Environment settings
- */
-#define CONFIG_ENV_SIZE                        SZ_512
-#define CONFIG_ENV_OFFSET              0
-
 /*
  * Environment configuration
  */
index 459ecf328f20853ab0b46c78cef8ac08527b9c81..0e1f9836a6485bc297c6b0bf992a820ecff06860 100644 (file)
 #define CONFIG_SPL_NAND_INIT
 #define CONFIG_SPL_COMMON_INIT_DDR
 #define CONFIG_SPL_MAX_SIZE            (128 << 10)
-#define CONFIG_SPL_TEXT_BASE           0xf8f81000
+#define CONFIG_TPL_TEXT_BASE           0xf8f81000
 #define CONFIG_SYS_MPC85XX_NO_RESETVEC
 #define CONFIG_SYS_NAND_U_BOOT_SIZE    (832 << 10)
 #define CONFIG_SYS_NAND_U_BOOT_DST     (0x11000000)
 #endif
 
 #ifndef CONFIG_SYS_MONITOR_BASE
-#ifdef CONFIG_SPL_BUILD
+#ifdef CONFIG_TPL_BUILD
+#define CONFIG_SYS_MONITOR_BASE        CONFIG_TPL_TEXT_BASE
+#elif defined(CONFIG_SPL_BUILD)
 #define CONFIG_SYS_MONITOR_BASE        CONFIG_SPL_TEXT_BASE
 #else
 #define CONFIG_SYS_MONITOR_BASE        CONFIG_SYS_TEXT_BASE    /* start of monitor */
index 96e5b6315c5e039124a0b53a8baf954099efe974..a761c373352c83786a52aed1af02da5643a75a58 100644 (file)
  * Command line configuration
  */
 
-/*
- * Environment settings
- */
-#define CONFIG_ENV_SIZE                        SZ_2K
-#define CONFIG_ENV_OFFSET              0
-
 /*
  * Environment configuration
  */
index 8bf4a6b7e9f4c2467433a87fc3a41d4ecf75a8d3..ba57c40182cca7aa3739d1d84e9753dc9c3c565e 100644 (file)
@@ -81,7 +81,7 @@
  * RAM from address 0x40301350 (0x40300000+0x1000(reserved)+0x350(cert)).
  */
 #define TI_OMAP5_SECURE_BOOT_RESV_SRAM_SZ      0x1000
-#define CONFIG_SPL_TEXT_BASE   0x40301350
+#define CONFIG_SPL_TEXT_BASE   CONFIG_ISW_ENTRY_ADDR
 /* If no specific start address is specified then the secure EMIF
  * region will be placed at the end of the DDR space. In order to prevent
  * the main u-boot relocation from clobbering that memory and causing a
index 0ab32611cee9bc71f4215fbf44f6b8c6ac35f735..7a9b06ec4c8308e9c3ffc1edeb2874a0872cfeca 100644 (file)
 #endif
 
 /* SPL can't handle all huge variables - define just DFU */
-#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_DFU_SUPPORT)
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_DFU)
 #undef CONFIG_EXTRA_ENV_SETTINGS
 # define CONFIG_EXTRA_ENV_SETTINGS \
        "dfu_alt_info_ram=uboot.bin ram 0x8000000 0x1000000;" \
 # define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME       "u-boot.img"
 #endif
 
-#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_DFU_SUPPORT)
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_DFU)
 # undef CONFIG_CMD_BOOTD
 # define CONFIG_SPL_ENV_SUPPORT
 # define CONFIG_SPL_HASH_SUPPORT
index fbe978abdc26735f977195c1a0250d1aae4cf17d..9340a900a2f82b5e73d805d24321cdd8d358447f 100644 (file)
@@ -202,7 +202,7 @@ static inline void dfu_set_defer_flush(struct dfu_entity *dfu)
 int dfu_write_from_mem_addr(struct dfu_entity *dfu, void *buf, int size);
 
 /* Device specific */
-#ifdef CONFIG_DFU_MMC
+#if CONFIG_IS_ENABLED(DFU_MMC)
 extern int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *devstr, char *s);
 #else
 static inline int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *devstr,
@@ -213,7 +213,7 @@ static inline int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *devstr,
 }
 #endif
 
-#ifdef CONFIG_DFU_NAND
+#if CONFIG_IS_ENABLED(DFU_NAND)
 extern int dfu_fill_entity_nand(struct dfu_entity *dfu, char *devstr, char *s);
 #else
 static inline int dfu_fill_entity_nand(struct dfu_entity *dfu, char *devstr,
@@ -224,7 +224,7 @@ static inline int dfu_fill_entity_nand(struct dfu_entity *dfu, char *devstr,
 }
 #endif
 
-#ifdef CONFIG_DFU_RAM
+#if CONFIG_IS_ENABLED(DFU_RAM)
 extern int dfu_fill_entity_ram(struct dfu_entity *dfu, char *devstr, char *s);
 #else
 static inline int dfu_fill_entity_ram(struct dfu_entity *dfu, char *devstr,
@@ -235,7 +235,7 @@ static inline int dfu_fill_entity_ram(struct dfu_entity *dfu, char *devstr,
 }
 #endif
 
-#ifdef CONFIG_DFU_SF
+#if CONFIG_IS_ENABLED(DFU_SF)
 extern int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *s);
 #else
 static inline int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr,
@@ -259,7 +259,7 @@ static inline int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr,
  *
  * @return 0 on success, otherwise error code
  */
-#ifdef CONFIG_DFU_TFTP
+#if CONFIG_IS_ENABLED(DFU_TFTP)
 int dfu_tftp_write(char *dfu_entity_name, unsigned int addr, unsigned int len,
                   char *interface, char *devstring);
 #else
index 181c0f070f7c91f0e305c6e10cadb9d8908415ce..136de24733bea37fe1cbce30740a804acbf884b3 100644 (file)
 #define HISTB_OSC_CLK                  0
 #define HISTB_APB_CLK                  1
 #define HISTB_AHB_CLK                  2
-#define HISTB_UART1_CLK                3
-#define HISTB_UART2_CLK                4
-#define HISTB_UART3_CLK                5
-#define HISTB_I2C0_CLK         6
-#define HISTB_I2C1_CLK         7
-#define HISTB_I2C2_CLK         8
-#define HISTB_I2C3_CLK         9
-#define HISTB_I2C4_CLK         10
-#define HISTB_I2C5_CLK         11
-#define HISTB_SPI0_CLK         12
-#define HISTB_SPI1_CLK         13
-#define HISTB_SPI2_CLK         14
+#define HISTB_UART1_CLK                        3
+#define HISTB_UART2_CLK                        4
+#define HISTB_UART3_CLK                        5
+#define HISTB_I2C0_CLK                 6
+#define HISTB_I2C1_CLK                 7
+#define HISTB_I2C2_CLK                 8
+#define HISTB_I2C3_CLK                 9
+#define HISTB_I2C4_CLK                 10
+#define HISTB_I2C5_CLK                 11
+#define HISTB_SPI0_CLK                 12
+#define HISTB_SPI1_CLK                 13
+#define HISTB_SPI2_CLK                 14
 #define HISTB_SCI_CLK                  15
 #define HISTB_FMC_CLK                  16
 #define HISTB_MMC_BIU_CLK              17
@@ -43,7 +43,7 @@
 #define HISTB_SDIO0_BIU_CLK            21
 #define HISTB_SDIO0_CIU_CLK            22
 #define HISTB_SDIO0_DRV_CLK            23
-#define HISTB_SDIO0_SAMPLE_CLK 24
+#define HISTB_SDIO0_SAMPLE_CLK         24
 #define HISTB_PCIE_AUX_CLK             25
 #define HISTB_PCIE_PIPE_CLK            26
 #define HISTB_PCIE_SYS_CLK             27
 #define HISTB_ETH1_MAC_CLK             31
 #define HISTB_ETH1_MACIF_CLK           32
 #define HISTB_COMBPHY1_CLK             33
-
+#define HISTB_USB2_BUS_CLK             34
+#define HISTB_USB2_PHY_CLK             35
+#define HISTB_USB2_UTMI_CLK            36
+#define HISTB_USB2_12M_CLK             37
+#define HISTB_USB2_48M_CLK             38
+#define HISTB_USB2_OTG_UTMI_CLK                39
+#define HISTB_USB2_PHY1_REF_CLK                40
+#define HISTB_USB2_PHY2_REF_CLK                41
+#define HISTB_COMBPHY0_CLK             42
+#define HISTB_USB3_BUS_CLK             43
+#define HISTB_USB3_UTMI_CLK            44
+#define HISTB_USB3_PIPE_CLK            45
+#define HISTB_USB3_SUSPEND_CLK         46
+#define HISTB_USB3_BUS_CLK1            47
+#define HISTB_USB3_UTMI_CLK1           48
+#define HISTB_USB3_PIPE_CLK1           49
+#define HISTB_USB3_SUSPEND_CLK1                50
 
 /* clocks provided by mcu CRG */
-#define HISTB_MCE_CLK  1
-#define HISTB_IR_CLK   2
-#define HISTB_TIMER01_CLK      3
-#define HISTB_LEDC_CLK 4
-#define HISTB_UART0_CLK        5
-#define HISTB_LSADC_CLK        6
+#define HISTB_MCE_CLK                  1
+#define HISTB_IR_CLK                   2
+#define HISTB_TIMER01_CLK              3
+#define HISTB_LEDC_CLK                 4
+#define HISTB_UART0_CLK                        5
+#define HISTB_LSADC_CLK                        6
 
 #endif /* __DTS_HISTB_CLOCK_H */
diff --git a/include/dt-bindings/pinctrl/hisi.h b/include/dt-bindings/pinctrl/hisi.h
new file mode 100644 (file)
index 0000000..0359bfd
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * This header provides constants for hisilicon pinctrl bindings.
+ *
+ * Copyright (c) 2015 Hisilicon Limited.
+ * Copyright (c) 2015 Linaro Limited.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _DT_BINDINGS_PINCTRL_HISI_H
+#define _DT_BINDINGS_PINCTRL_HISI_H
+
+/* iomg bit definition */
+#define MUX_M0         0
+#define MUX_M1         1
+#define MUX_M2         2
+#define MUX_M3         3
+#define MUX_M4         4
+#define MUX_M5         5
+#define MUX_M6         6
+#define MUX_M7         7
+
+/* iocg bit definition */
+#define PULL_MASK      (3)
+#define PULL_DIS       (0)
+#define PULL_UP                (1 << 0)
+#define PULL_DOWN      (1 << 1)
+
+/* drive strength definition */
+#define DRIVE_MASK     (7 << 4)
+#define DRIVE1_02MA    (0 << 4)
+#define DRIVE1_04MA    (1 << 4)
+#define DRIVE1_08MA    (2 << 4)
+#define DRIVE1_10MA    (3 << 4)
+#define DRIVE2_02MA    (0 << 4)
+#define DRIVE2_04MA    (1 << 4)
+#define DRIVE2_08MA    (2 << 4)
+#define DRIVE2_10MA    (3 << 4)
+#define DRIVE3_04MA    (0 << 4)
+#define DRIVE3_08MA    (1 << 4)
+#define DRIVE3_12MA    (2 << 4)
+#define DRIVE3_16MA    (3 << 4)
+#define DRIVE3_20MA    (4 << 4)
+#define DRIVE3_24MA    (5 << 4)
+#define DRIVE3_32MA    (6 << 4)
+#define DRIVE3_40MA    (7 << 4)
+#define DRIVE4_02MA    (0 << 4)
+#define DRIVE4_04MA    (2 << 4)
+#define DRIVE4_08MA    (4 << 4)
+#define DRIVE4_10MA    (6 << 4)
+
+/* drive strength definition for hi3660 */
+#define DRIVE6_MASK    (15 << 4)
+#define DRIVE6_04MA    (0 << 4)
+#define DRIVE6_12MA    (4 << 4)
+#define DRIVE6_19MA    (8 << 4)
+#define DRIVE6_27MA    (10 << 4)
+#define DRIVE6_32MA    (15 << 4)
+#define DRIVE7_02MA    (0 << 4)
+#define DRIVE7_04MA    (1 << 4)
+#define DRIVE7_06MA    (2 << 4)
+#define DRIVE7_08MA    (3 << 4)
+#define DRIVE7_10MA    (4 << 4)
+#define DRIVE7_12MA    (5 << 4)
+#define DRIVE7_14MA    (6 << 4)
+#define DRIVE7_16MA    (7 << 4)
+#endif
index acd8dd06f87a55501c37b866509711a53fe2ad74..8dbd5249a7fd960b43cbee6b609392c55d1ad8df 100644 (file)
 #define PROCTL_INIT            0x00000020
 #define PROCTL_DTW_4           0x00000002
 #define PROCTL_DTW_8           0x00000004
+#define PROCTL_D3CD            0x00000008
 
 #define CMDARG                 0x0002e008
 
index 1bb003e35e877cbe5bcb8acdd6ec50e9ed21149c..e87c0b0ada0fc969a767848cf3ae82af7d85d12c 100644 (file)
@@ -40,7 +40,7 @@ extern phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong ali
                              phys_addr_t max_addr);
 extern phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base,
                                  phys_size_t size);
-extern phys_size_t lmb_get_unreserved_size(struct lmb *lmb, phys_addr_t addr);
+extern phys_size_t lmb_get_free_size(struct lmb *lmb, phys_addr_t addr);
 extern int lmb_is_reserved(struct lmb *lmb, phys_addr_t addr);
 extern long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size);
 
index 93028ed83b2677f9dd83d1f2a16abbcd9f3d2d37..50ff40a397431aac6abc5742352f6b63625f274a 100644 (file)
@@ -542,9 +542,8 @@ static int match_string(int flag, const char *str, const char *pat, void *priv)
        case H_MATCH_REGEX:
                {
                        struct slre *slrep = (struct slre *)priv;
-                       struct cap caps[slrep->num_caps + 2];
 
-                       if (slre_match(slrep, str, strlen(str), caps))
+                       if (slre_match(slrep, str, strlen(str), NULL))
                                return 1;
                }
                break;
index 3407705fa7030029baf97d03cf5beec1eb9187c5..7aff2c248fe2942841d764833f925182aa196e0f 100644 (file)
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -20,28 +20,28 @@ void lmb_dump_all(struct lmb *lmb)
        debug("    memory.cnt              = 0x%lx\n", lmb->memory.cnt);
        debug("    memory.size             = 0x%llx\n",
              (unsigned long long)lmb->memory.size);
-       for (i=0; i < lmb->memory.cnt ;i++) {
+       for (i = 0; i < lmb->memory.cnt; i++) {
                debug("    memory.reg[0x%lx].base   = 0x%llx\n", i,
-                       (long long unsigned)lmb->memory.region[i].base);
+                     (unsigned long long)lmb->memory.region[i].base);
                debug("            .size   = 0x%llx\n",
-                       (long long unsigned)lmb->memory.region[i].size);
+                     (unsigned long long)lmb->memory.region[i].size);
        }
 
        debug("\n    reserved.cnt          = 0x%lx\n",
                lmb->reserved.cnt);
        debug("    reserved.size           = 0x%llx\n",
-               (long long unsigned)lmb->reserved.size);
-       for (i=0; i < lmb->reserved.cnt ;i++) {
+               (unsigned long long)lmb->reserved.size);
+       for (i = 0; i < lmb->reserved.cnt; i++) {
                debug("    reserved.reg[0x%lx].base = 0x%llx\n", i,
-                       (long long unsigned)lmb->reserved.region[i].base);
+                     (unsigned long long)lmb->reserved.region[i].base);
                debug("              .size = 0x%llx\n",
-                       (long long unsigned)lmb->reserved.region[i].size);
+                     (unsigned long long)lmb->reserved.region[i].size);
        }
 #endif /* DEBUG */
 }
 
-static long lmb_addrs_overlap(phys_addr_t base1,
-               phys_size_t size1, phys_addr_t base2, phys_size_t size2)
+static long lmb_addrs_overlap(phys_addr_t base1, phys_size_t size1,
+                             phys_addr_t base2, phys_size_t size2)
 {
        const phys_addr_t base1_end = base1 + size1 - 1;
        const phys_addr_t base2_end = base2 + size2 - 1;
@@ -50,7 +50,7 @@ static long lmb_addrs_overlap(phys_addr_t base1,
 }
 
 static long lmb_addrs_adjacent(phys_addr_t base1, phys_size_t size1,
-               phys_addr_t base2, phys_size_t size2)
+                              phys_addr_t base2, phys_size_t size2)
 {
        if (base2 == base1 + size1)
                return 1;
@@ -60,8 +60,8 @@ static long lmb_addrs_adjacent(phys_addr_t base1, phys_size_t size1,
        return 0;
 }
 
-static long lmb_regions_adjacent(struct lmb_region *rgn,
-               unsigned long r1, unsigned long r2)
+static long lmb_regions_adjacent(struct lmb_region *rgn, unsigned long r1,
+                                unsigned long r2)
 {
        phys_addr_t base1 = rgn->region[r1].base;
        phys_size_t size1 = rgn->region[r1].size;
@@ -83,8 +83,8 @@ static void lmb_remove_region(struct lmb_region *rgn, unsigned long r)
 }
 
 /* Assumption: base addr of region 1 < base addr of region 2 */
-static void lmb_coalesce_regions(struct lmb_region *rgn,
-               unsigned long r1, unsigned long r2)
+static void lmb_coalesce_regions(struct lmb_region *rgn, unsigned long r1,
+                                unsigned long r2)
 {
        rgn->region[r1].size += rgn->region[r2].size;
        lmb_remove_region(rgn, r2);
@@ -125,7 +125,7 @@ static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t
        }
 
        /* First try and coalesce this LMB with another. */
-       for (i=0; i < rgn->cnt; i++) {
+       for (i = 0; i < rgn->cnt; i++) {
                phys_addr_t rgnbase = rgn->region[i].base;
                phys_size_t rgnsize = rgn->region[i].size;
 
@@ -133,14 +133,13 @@ static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t
                        /* Already have this region, so we're done */
                        return 0;
 
-               adjacent = lmb_addrs_adjacent(base,size,rgnbase,rgnsize);
-               if ( adjacent > 0 ) {
+               adjacent = lmb_addrs_adjacent(base, size, rgnbase, rgnsize);
+               if (adjacent > 0) {
                        rgn->region[i].base -= size;
                        rgn->region[i].size += size;
                        coalesced++;
                        break;
-               }
-               else if ( adjacent < 0 ) {
+               } else if (adjacent < 0) {
                        rgn->region[i].size += size;
                        coalesced++;
                        break;
@@ -150,8 +149,8 @@ static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t
                }
        }
 
-       if ((i < rgn->cnt-1) && lmb_regions_adjacent(rgn, i, i+1) ) {
-               lmb_coalesce_regions(rgn, i, i+1);
+       if ((i < rgn->cnt - 1) && lmb_regions_adjacent(rgn, i, i + 1)) {
+               lmb_coalesce_regions(rgn, i, i + 1);
                coalesced++;
        }
 
@@ -163,11 +162,11 @@ static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t
        /* Couldn't coalesce the LMB, so add it to the sorted table. */
        for (i = rgn->cnt-1; i >= 0; i--) {
                if (base < rgn->region[i].base) {
-                       rgn->region[i+1].base = rgn->region[i].base;
-                       rgn->region[i+1].size = rgn->region[i].size;
+                       rgn->region[i + 1].base = rgn->region[i].base;
+                       rgn->region[i + 1].size = rgn->region[i].size;
                } else {
-                       rgn->region[i+1].base = base;
-                       rgn->region[i+1].size = size;
+                       rgn->region[i + 1].base = base;
+                       rgn->region[i + 1].size = size;
                        break;
                }
        }
@@ -200,7 +199,7 @@ long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size)
        rgnbegin = rgnend = 0; /* supress gcc warnings */
 
        /* Find the region where (base, size) belongs to */
-       for (i=0; i < rgn->cnt; i++) {
+       for (i = 0; i < rgn->cnt; i++) {
                rgnbegin = rgn->region[i].base;
                rgnend = rgnbegin + rgn->region[i].size - 1;
 
@@ -251,12 +250,11 @@ static long lmb_overlaps_region(struct lmb_region *rgn, phys_addr_t base,
 {
        unsigned long i;
 
-       for (i=0; i < rgn->cnt; i++) {
+       for (i = 0; i < rgn->cnt; i++) {
                phys_addr_t rgnbase = rgn->region[i].base;
                phys_size_t rgnsize = rgn->region[i].size;
-               if ( lmb_addrs_overlap(base,size,rgnbase,rgnsize) ) {
+               if (lmb_addrs_overlap(base, size, rgnbase, rgnsize))
                        break;
-               }
        }
 
        return (i < rgn->cnt) ? i : -1;
@@ -275,7 +273,7 @@ phys_addr_t lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align, phys_
 
        if (alloc == 0)
                printf("ERROR: Failed to allocate 0x%lx bytes below 0x%lx.\n",
-                     (ulong)size, (ulong)max_addr);
+                      (ulong)size, (ulong)max_addr);
 
        return alloc;
 }
@@ -287,11 +285,11 @@ static phys_addr_t lmb_align_down(phys_addr_t addr, phys_size_t size)
 
 phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align, phys_addr_t max_addr)
 {
-       long i, j;
+       long i, rgn;
        phys_addr_t base = 0;
        phys_addr_t res_base;
 
-       for (i = lmb->memory.cnt-1; i >= 0; i--) {
+       for (i = lmb->memory.cnt - 1; i >= 0; i--) {
                phys_addr_t lmbbase = lmb->memory.region[i].base;
                phys_size_t lmbsize = lmb->memory.region[i].size;
 
@@ -309,15 +307,15 @@ phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align, phy
                        continue;
 
                while (base && lmbbase <= base) {
-                       j = lmb_overlaps_region(&lmb->reserved, base, size);
-                       if (j < 0) {
+                       rgn = lmb_overlaps_region(&lmb->reserved, base, size);
+                       if (rgn < 0) {
                                /* This area isn't reserved, take it */
                                if (lmb_add_region(&lmb->reserved, base,
                                                   size) < 0)
                                        return 0;
                                return base;
                        }
-                       res_base = lmb->reserved.region[j].base;
+                       res_base = lmb->reserved.region[rgn].base;
                        if (res_base < size)
                                break;
                        base = lmb_align_down(res_base - size, align);
@@ -332,18 +330,18 @@ phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align, phy
  */
 phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base, phys_size_t size)
 {
-       long j;
+       long rgn;
 
        /* Check if the requested address is in one of the memory regions */
-       j = lmb_overlaps_region(&lmb->memory, base, size);
-       if (j >= 0) {
+       rgn = lmb_overlaps_region(&lmb->memory, base, size);
+       if (rgn >= 0) {
                /*
                 * Check if the requested end address is in the same memory
                 * region we found.
                 */
-               if (lmb_addrs_overlap(lmb->memory.region[j].base,
-                                     lmb->memory.region[j].size, base + size -
-                                     1, 1)) {
+               if (lmb_addrs_overlap(lmb->memory.region[rgn].base,
+                                     lmb->memory.region[rgn].size,
+                                     base + size - 1, 1)) {
                        /* ok, reserve the memory */
                        if (lmb_reserve(lmb, base, size) >= 0)
                                return base;
@@ -353,14 +351,14 @@ phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base, phys_size_t size)
 }
 
 /* Return number of bytes from a given address that are free */
-phys_size_t lmb_get_unreserved_size(struct lmb *lmb, phys_addr_t addr)
+phys_size_t lmb_get_free_size(struct lmb *lmb, phys_addr_t addr)
 {
        int i;
-       long j;
+       long rgn;
 
        /* check if the requested address is in the memory regions */
-       j = lmb_overlaps_region(&lmb->memory, addr, 1);
-       if (j >= 0) {
+       rgn = lmb_overlaps_region(&lmb->memory, addr, 1);
+       if (rgn >= 0) {
                for (i = 0; i < lmb->reserved.cnt; i++) {
                        if (addr < lmb->reserved.region[i].base) {
                                /* first reserved range > requested address */
index 8fab6d2650f77c49b788c41f67d1b754b479c1df..eca801aa194eb7fb71b5ed8f1de31faaf12f3502 100644 (file)
@@ -609,7 +609,7 @@ static int tftp_init_load_addr(void)
        lmb_init_and_reserve(&lmb, gd->bd->bi_dram[0].start,
                             gd->bd->bi_dram[0].size, (void *)gd->fdt_blob);
 
-       max_size = lmb_get_unreserved_size(&lmb, load_addr);
+       max_size = lmb_get_free_size(&lmb, load_addr);
        if (!max_size)
                return -1;
 
index e5b604e2d269707be817dee527a685e970e4a1af..9d5921606e1d1b89aa4721553d7f857f671ab031 100644 (file)
@@ -147,6 +147,15 @@ LDPPFLAGS += \
        $(shell $(LD) --version | \
          sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
 
+# Turn various CONFIG symbols into IMAGE symbols for easy reuse of
+# the scripts between SPL and TPL.
+ifneq ($(CONFIG_$(SPL_TPL_)MAX_SIZE),)
+LDPPFLAGS += -DIMAGE_MAX_SIZE=$(CONFIG_$(SPL_TPL_)MAX_SIZE)
+endif
+ifneq ($(CONFIG_$(SPL_TPL_)TEXT_BASE),)
+LDPPFLAGS += -DIMAGE_TEXT_BASE=$(CONFIG_$(SPL_TPL_)TEXT_BASE)
+endif
+
 MKIMAGEOUTPUT ?= /dev/null
 
 quiet_cmd_mkimage = MKIMAGE $@
@@ -321,14 +330,9 @@ LDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL)
 # Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
 LDFLAGS_$(SPL_BIN) += $(call ld-option, --no-dynamic-linker)
 
-# First try the best-match (i.e. SPL_TEXT_BASE for SPL, TPL_TEXT_BASE for TPL)
+# Pick the best-match (i.e. SPL_TEXT_BASE for SPL, TPL_TEXT_BASE for TPL)
 ifneq ($(CONFIG_$(SPL_TPL_)TEXT_BASE),)
 LDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_$(SPL_TPL_)TEXT_BASE)
-else
-# And then fall back to just testing for SPL_TEXT_BASE, even if in TPL mode
-ifneq ($(CONFIG_SPL_TEXT_BASE),)
-LDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE)
-endif
 endif
 
 ifdef CONFIG_TARGET_SOCFPGA_ARRIA10
index 8c88031546bd121237b716ca128a89e59d1a047d..c05fc379645e584ebfe29b1ca241bed3c6044eae 100644 (file)
@@ -426,7 +426,6 @@ CONFIG_DW_ALTDESCRIPTOR
 CONFIG_DW_AXI_BURST_LEN
 CONFIG_DW_GMAC_DEFAULT_DMA_PBL
 CONFIG_DW_MAC_FORCE_THRESHOLD_MODE
-CONFIG_DW_SERIAL
 CONFIG_DW_UDC
 CONFIG_DW_WDT_BASE
 CONFIG_DW_WDT_CLOCK_KHZ
index 058d3c332bec31766c59656f4be541cf03bc0807..9a228523cc42b649bee8290338b438be580ec664 100644 (file)
@@ -560,31 +560,31 @@ static int test_get_unreserved_size(struct unit_test_state *uts,
                   alloc_addr_b, 0x10000, alloc_addr_c, 0x10000);
 
        /* check addresses in between blocks */
-       s = lmb_get_unreserved_size(&lmb, ram);
+       s = lmb_get_free_size(&lmb, ram);
        ut_asserteq(s, alloc_addr_a - ram);
-       s = lmb_get_unreserved_size(&lmb, ram + 0x10000);
+       s = lmb_get_free_size(&lmb, ram + 0x10000);
        ut_asserteq(s, alloc_addr_a - ram - 0x10000);
-       s = lmb_get_unreserved_size(&lmb, alloc_addr_a - 4);
+       s = lmb_get_free_size(&lmb, alloc_addr_a - 4);
        ut_asserteq(s, 4);
 
-       s = lmb_get_unreserved_size(&lmb, alloc_addr_a + 0x10000);
+       s = lmb_get_free_size(&lmb, alloc_addr_a + 0x10000);
        ut_asserteq(s, alloc_addr_b - alloc_addr_a - 0x10000);
-       s = lmb_get_unreserved_size(&lmb, alloc_addr_a + 0x20000);
+       s = lmb_get_free_size(&lmb, alloc_addr_a + 0x20000);
        ut_asserteq(s, alloc_addr_b - alloc_addr_a - 0x20000);
-       s = lmb_get_unreserved_size(&lmb, alloc_addr_b - 4);
+       s = lmb_get_free_size(&lmb, alloc_addr_b - 4);
        ut_asserteq(s, 4);
 
-       s = lmb_get_unreserved_size(&lmb, alloc_addr_c + 0x10000);
+       s = lmb_get_free_size(&lmb, alloc_addr_c + 0x10000);
        ut_asserteq(s, ram_end - alloc_addr_c - 0x10000);
-       s = lmb_get_unreserved_size(&lmb, alloc_addr_c + 0x20000);
+       s = lmb_get_free_size(&lmb, alloc_addr_c + 0x20000);
        ut_asserteq(s, ram_end - alloc_addr_c - 0x20000);
-       s = lmb_get_unreserved_size(&lmb, ram_end - 4);
+       s = lmb_get_free_size(&lmb, ram_end - 4);
        ut_asserteq(s, 4);
 
        return 0;
 }
 
-static int lib_test_lmb_get_unreserved_size(struct unit_test_state *uts)
+static int lib_test_lmb_get_free_size(struct unit_test_state *uts)
 {
        int ret;
 
@@ -597,5 +597,5 @@ static int lib_test_lmb_get_unreserved_size(struct unit_test_state *uts)
        return test_get_unreserved_size(uts, 0xE0000000);
 }
 
-DM_TEST(lib_test_lmb_get_unreserved_size,
+DM_TEST(lib_test_lmb_get_free_size,
        DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
index 11bead126070d275ed70ca9c0f0e717c67e9491d..cb6d6e7baf90b1fa6a838c301c5c0419f738fc68 100644 (file)
@@ -196,7 +196,7 @@ struct dtd_sandbox_spl_test_2 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_sandbox_spl_test dtv_spl_test = {
+static const struct dtd_sandbox_spl_test dtv_spl_test = {
 \t.bytearray\t\t= {0x6, 0x0, 0x0},
 \t.byteval\t\t= 0x5,
 \t.intval\t\t\t= 0x1,
@@ -214,7 +214,7 @@ U_BOOT_DEVICE(spl_test) = {
 \t.platdata_size\t= sizeof(dtv_spl_test),
 };
 
-static struct dtd_sandbox_spl_test dtv_spl_test2 = {
+static const struct dtd_sandbox_spl_test dtv_spl_test2 = {
 \t.bytearray\t\t= {0x1, 0x23, 0x34},
 \t.byteval\t\t= 0x8,
 \t.intval\t\t\t= 0x3,
@@ -230,7 +230,7 @@ U_BOOT_DEVICE(spl_test2) = {
 \t.platdata_size\t= sizeof(dtv_spl_test2),
 };
 
-static struct dtd_sandbox_spl_test dtv_spl_test3 = {
+static const struct dtd_sandbox_spl_test dtv_spl_test3 = {
 \t.stringarray\t\t= {"one", "", ""},
 };
 U_BOOT_DEVICE(spl_test3) = {
@@ -239,7 +239,7 @@ U_BOOT_DEVICE(spl_test3) = {
 \t.platdata_size\t= sizeof(dtv_spl_test3),
 };
 
-static struct dtd_sandbox_spl_test_2 dtv_spl_test4 = {
+static const struct dtd_sandbox_spl_test_2 dtv_spl_test4 = {
 };
 U_BOOT_DEVICE(spl_test4) = {
 \t.name\t\t= "sandbox_spl_test_2",
@@ -247,7 +247,7 @@ U_BOOT_DEVICE(spl_test4) = {
 \t.platdata_size\t= sizeof(dtv_spl_test4),
 };
 
-static struct dtd_sandbox_i2c_test dtv_i2c_at_0 = {
+static const struct dtd_sandbox_i2c_test dtv_i2c_at_0 = {
 };
 U_BOOT_DEVICE(i2c_at_0) = {
 \t.name\t\t= "sandbox_i2c_test",
@@ -255,7 +255,7 @@ U_BOOT_DEVICE(i2c_at_0) = {
 \t.platdata_size\t= sizeof(dtv_i2c_at_0),
 };
 
-static struct dtd_sandbox_pmic_test dtv_pmic_at_9 = {
+static const struct dtd_sandbox_pmic_test dtv_pmic_at_9 = {
 \t.low_power\t\t= true,
 \t.reg\t\t\t= {0x9, 0x0},
 };
@@ -287,7 +287,7 @@ struct dtd_target {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_target dtv_phandle_target = {
+static const struct dtd_target dtv_phandle_target = {
 \t.intval\t\t\t= 0x0,
 };
 U_BOOT_DEVICE(phandle_target) = {
@@ -296,7 +296,7 @@ U_BOOT_DEVICE(phandle_target) = {
 \t.platdata_size\t= sizeof(dtv_phandle_target),
 };
 
-static struct dtd_target dtv_phandle2_target = {
+static const struct dtd_target dtv_phandle2_target = {
 \t.intval\t\t\t= 0x1,
 };
 U_BOOT_DEVICE(phandle2_target) = {
@@ -305,7 +305,7 @@ U_BOOT_DEVICE(phandle2_target) = {
 \t.platdata_size\t= sizeof(dtv_phandle2_target),
 };
 
-static struct dtd_target dtv_phandle3_target = {
+static const struct dtd_target dtv_phandle3_target = {
 \t.intval\t\t\t= 0x2,
 };
 U_BOOT_DEVICE(phandle3_target) = {
@@ -314,7 +314,7 @@ U_BOOT_DEVICE(phandle3_target) = {
 \t.platdata_size\t= sizeof(dtv_phandle3_target),
 };
 
-static struct dtd_source dtv_phandle_source = {
+static const struct dtd_source dtv_phandle_source = {
 \t.clocks\t\t\t= {
 \t\t\t{&dtv_phandle_target, {}},
 \t\t\t{&dtv_phandle2_target, {11}},
@@ -327,7 +327,7 @@ U_BOOT_DEVICE(phandle_source) = {
 \t.platdata_size\t= sizeof(dtv_phandle_source),
 };
 
-static struct dtd_source dtv_phandle_source2 = {
+static const struct dtd_source dtv_phandle_source2 = {
 \t.clocks\t\t\t= {
 \t\t\t{&dtv_phandle_target, {}},},
 };
@@ -363,7 +363,7 @@ struct dtd_target {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_target dtv_phandle_target = {
+static const struct dtd_target dtv_phandle_target = {
 };
 U_BOOT_DEVICE(phandle_target) = {
 \t.name\t\t= "target",
@@ -371,7 +371,7 @@ U_BOOT_DEVICE(phandle_target) = {
 \t.platdata_size\t= sizeof(dtv_phandle_target),
 };
 
-static struct dtd_source dtv_phandle_source2 = {
+static const struct dtd_source dtv_phandle_source2 = {
 \t.clocks\t\t\t= {
 \t\t\t{&dtv_phandle_target, {}},},
 };
@@ -422,7 +422,7 @@ struct dtd_compat1 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_compat1 dtv_spl_test = {
+static const struct dtd_compat1 dtv_spl_test = {
 \t.intval\t\t\t= 0x1,
 };
 U_BOOT_DEVICE(spl_test) = {
@@ -456,7 +456,7 @@ struct dtd_test3 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_test1 dtv_test1 = {
+static const struct dtd_test1 dtv_test1 = {
 \t.reg\t\t\t= {0x1234, 0x5678},
 };
 U_BOOT_DEVICE(test1) = {
@@ -465,7 +465,7 @@ U_BOOT_DEVICE(test1) = {
 \t.platdata_size\t= sizeof(dtv_test1),
 };
 
-static struct dtd_test2 dtv_test2 = {
+static const struct dtd_test2 dtv_test2 = {
 \t.reg\t\t\t= {0x1234567890123456, 0x9876543210987654},
 };
 U_BOOT_DEVICE(test2) = {
@@ -474,7 +474,7 @@ U_BOOT_DEVICE(test2) = {
 \t.platdata_size\t= sizeof(dtv_test2),
 };
 
-static struct dtd_test3 dtv_test3 = {
+static const struct dtd_test3 dtv_test3 = {
 \t.reg\t\t\t= {0x1234567890123456, 0x9876543210987654, 0x2, 0x3},
 };
 U_BOOT_DEVICE(test3) = {
@@ -505,7 +505,7 @@ struct dtd_test2 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_test1 dtv_test1 = {
+static const struct dtd_test1 dtv_test1 = {
 \t.reg\t\t\t= {0x1234, 0x5678},
 };
 U_BOOT_DEVICE(test1) = {
@@ -514,7 +514,7 @@ U_BOOT_DEVICE(test1) = {
 \t.platdata_size\t= sizeof(dtv_test1),
 };
 
-static struct dtd_test2 dtv_test2 = {
+static const struct dtd_test2 dtv_test2 = {
 \t.reg\t\t\t= {0x12345678, 0x98765432, 0x2, 0x3},
 };
 U_BOOT_DEVICE(test2) = {
@@ -548,7 +548,7 @@ struct dtd_test3 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_test1 dtv_test1 = {
+static const struct dtd_test1 dtv_test1 = {
 \t.reg\t\t\t= {0x123400000000, 0x5678},
 };
 U_BOOT_DEVICE(test1) = {
@@ -557,7 +557,7 @@ U_BOOT_DEVICE(test1) = {
 \t.platdata_size\t= sizeof(dtv_test1),
 };
 
-static struct dtd_test2 dtv_test2 = {
+static const struct dtd_test2 dtv_test2 = {
 \t.reg\t\t\t= {0x1234567890123456, 0x98765432},
 };
 U_BOOT_DEVICE(test2) = {
@@ -566,7 +566,7 @@ U_BOOT_DEVICE(test2) = {
 \t.platdata_size\t= sizeof(dtv_test2),
 };
 
-static struct dtd_test3 dtv_test3 = {
+static const struct dtd_test3 dtv_test3 = {
 \t.reg\t\t\t= {0x1234567890123456, 0x98765432, 0x2, 0x3},
 };
 U_BOOT_DEVICE(test3) = {
@@ -600,7 +600,7 @@ struct dtd_test3 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_test1 dtv_test1 = {
+static const struct dtd_test1 dtv_test1 = {
 \t.reg\t\t\t= {0x1234, 0x567800000000},
 };
 U_BOOT_DEVICE(test1) = {
@@ -609,7 +609,7 @@ U_BOOT_DEVICE(test1) = {
 \t.platdata_size\t= sizeof(dtv_test1),
 };
 
-static struct dtd_test2 dtv_test2 = {
+static const struct dtd_test2 dtv_test2 = {
 \t.reg\t\t\t= {0x12345678, 0x9876543210987654},
 };
 U_BOOT_DEVICE(test2) = {
@@ -618,7 +618,7 @@ U_BOOT_DEVICE(test2) = {
 \t.platdata_size\t= sizeof(dtv_test2),
 };
 
-static struct dtd_test3 dtv_test3 = {
+static const struct dtd_test3 dtv_test3 = {
 \t.reg\t\t\t= {0x12345678, 0x9876543210987654, 0x2, 0x3},
 };
 U_BOOT_DEVICE(test3) = {
@@ -667,7 +667,7 @@ struct dtd_sandbox_spl_test {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static struct dtd_sandbox_spl_test dtv_spl_test = {
+static const struct dtd_sandbox_spl_test dtv_spl_test = {
 \t.intval\t\t\t= 0x1,
 };
 U_BOOT_DEVICE(spl_test) = {
@@ -676,7 +676,7 @@ U_BOOT_DEVICE(spl_test) = {
 \t.platdata_size\t= sizeof(dtv_spl_test),
 };
 
-static struct dtd_sandbox_spl_test dtv_spl_test2 = {
+static const struct dtd_sandbox_spl_test dtv_spl_test2 = {
 \t.intarray\t\t= 0x5,
 };
 U_BOOT_DEVICE(spl_test2) = {