Merge tag 'arc-updates-for-2018.07-rc2' of git://git.denx.de/u-boot-arc
authorTom Rini <trini@konsulko.com>
Fri, 15 Jun 2018 13:38:16 +0000 (09:38 -0400)
committerTom Rini <trini@konsulko.com>
Fri, 15 Jun 2018 13:38:16 +0000 (09:38 -0400)
Here we just add a tool for HSDK flashable images preparation
together with extensive documentation for HSDK board.

This will help real-life users to update U-Boot on the board.

36 files changed:
arch/arm/cpu/armv8/fwcall.c
arch/arm/cpu/armv8/zynqmp/cpu.c
arch/arm/dts/Makefile
arch/arm/dts/zynq-zc702.dts
arch/arm/dts/zynq-zturn.dts
arch/arm/dts/zynqmp-mini-emmc.dts [deleted file]
arch/arm/dts/zynqmp-mini-emmc0.dts [new file with mode: 0644]
arch/arm/dts/zynqmp-mini-emmc1.dts [new file with mode: 0644]
arch/arm/dts/zynqmp-zcu100-revC.dts
arch/arm/dts/zynqmp-zcu102-revA.dts
arch/arm/dts/zynqmp-zcu106-revA.dts
arch/arm/dts/zynqmp-zcu111-revA.dts
arch/arm/mach-bcm283x/reset.c
board/xilinx/zynq/board.c
board/xilinx/zynqmp/zynqmp.c
cmd/bootefi.c
configs/xilinx_zynqmp_mini_emmc0_defconfig [new file with mode: 0644]
configs/xilinx_zynqmp_mini_emmc1_defconfig [new file with mode: 0644]
configs/xilinx_zynqmp_mini_emmc_defconfig [deleted file]
configs/xilinx_zynqmp_r5_defconfig
configs/xilinx_zynqmp_zcu102_rev1_0_defconfig
configs/xilinx_zynqmp_zcu102_revA_defconfig
configs/xilinx_zynqmp_zcu102_revB_defconfig
disk/part_efi.c
drivers/gpio/zynq_gpio.c
drivers/mmc/sdhci.c
drivers/mmc/zynq_sdhci.c
drivers/serial/serial_zynq.c
drivers/timer/cadence-ttc.c
include/configs/xilinx_zynqmp_zcu102.h
include/efi.h
include/pe.h
lib/efi_loader/efi_image_loader.c
lib/efi_loader/efi_runtime.c
scripts/Makefile.lib
scripts/Makefile.spl

index c5aa41a0e686e968fe46f685c9f4423402ea9352..0ba3dad8cc5e70f1640a5c9129ed898f588e04a9 100644 (file)
@@ -143,15 +143,12 @@ void __efi_runtime EFIAPI efi_reset_system(
                        efi_status_t reset_status,
                        unsigned long data_size, void *reset_data)
 {
-       switch (reset_type) {
-       case EFI_RESET_COLD:
-       case EFI_RESET_WARM:
-       case EFI_RESET_PLATFORM_SPECIFIC:
+       if (reset_type == EFI_RESET_COLD ||
+           reset_type == EFI_RESET_WARM ||
+           reset_type == EFI_RESET_PLATFORM_SPECIFIC) {
                psci_system_reset();
-               break;
-       case EFI_RESET_SHUTDOWN:
+       } else if (reset_type == EFI_RESET_SHUTDOWN) {
                psci_system_off();
-               break;
        }
 
        while (1) { }
index e122be59c747944cfc1b5b3e7a46bf7fdf10a1e0..1279dc8658a10c58204366bab9a26aa6cec3e101 100644 (file)
@@ -212,8 +212,12 @@ static int zynqmp_mmio_rawwrite(const u32 address,
 {
        u32 data;
        u32 value_local = value;
+       int ret;
+
+       ret = zynqmp_mmio_read(address, &data);
+       if (ret)
+               return ret;
 
-       zynqmp_mmio_read(address, &data);
        data &= ~mask;
        value_local &= mask;
        value_local |= data;
index 078c21b4010f003d403c8f52ef420d1493e15127..493652ea8c43256071b05ab92fb155ff60266188 100644 (file)
@@ -147,7 +147,8 @@ dtb-$(CONFIG_ARCH_ZYNQ) += \
        zynq-zturn.dtb \
        zynq-zybo.dtb
 dtb-$(CONFIG_ARCH_ZYNQMP) += \
-       zynqmp-mini-emmc.dtb                    \
+       zynqmp-mini-emmc0.dtb                   \
+       zynqmp-mini-emmc1.dtb                   \
        zynqmp-mini-nand.dtb                    \
        zynqmp-zcu100-revC.dtb                  \
        zynqmp-zcu102-revA.dtb                  \
index bb224662bb77771e413d97290980889e49dd6d2d..12e35618f8749be3935d154f359a37e048e6e6ef 100644 (file)
@@ -30,8 +30,6 @@
 
        gpio-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
                sw14 {
                        label = "sw14";
index 8aa384b59b7f4582ee62336469238afe15a53963..cc41efcb4631af36bab3cbfb7d21bd316d36089b 100644 (file)
@@ -49,8 +49,6 @@
 
        gpio-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
                K1 {
                        label = "K1";
diff --git a/arch/arm/dts/zynqmp-mini-emmc.dts b/arch/arm/dts/zynqmp-mini-emmc.dts
deleted file mode 100644 (file)
index e5b3c5f..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * dts file for Xilinx ZynqMP Mini Configuration
- *
- * (C) Copyright 2018, Xilinx, Inc.
- *
- * Siva Durga Prasad <siva.durga.paladugu@xilinx.com>
- */
-
-/dts-v1/;
-
-/ {
-       model = "ZynqMP MINI EMMC";
-       compatible = "xlnx,zynqmp";
-       #address-cells = <2>;
-       #size-cells = <2>;
-
-       aliases {
-               serial0 = &dcc;
-               mmc0 = &sdhci0;
-               mmc1 = &sdhci1;
-       };
-
-       chosen {
-               stdout-path = "serial0:115200n8";
-       };
-
-       memory@0 {
-               device_type = "memory";
-               reg = <0x0 0x0 0x0 0x20000000>;
-       };
-
-       dcc: dcc {
-               compatible = "arm,dcc";
-               status = "disabled";
-               u-boot,dm-pre-reloc;
-       };
-
-       amba: amba {
-               compatible = "simple-bus";
-               #address-cells = <2>;
-               #size-cells = <2>;
-               ranges;
-
-               sdhci0: sdhci@ff160000 {
-                       u-boot,dm-pre-reloc;
-                       compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a";
-                       status = "disabled";
-                       reg = <0x0 0xff160000 0x0 0x1000>;
-                       clock-names = "clk_xin", "clk_ahb";
-                       xlnx,device_id = <0>;
-               };
-
-               sdhci1: sdhci@ff170000 {
-                       u-boot,dm-pre-reloc;
-                       compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a";
-                       status = "disabled";
-                       reg = <0x0 0xff170000 0x0 0x1000>;
-                       clock-names = "clk_xin", "clk_ahb";
-                       xlnx,device_id = <1>;
-               };
-       };
-};
-
-&dcc {
-       status = "okay";
-};
-
-&sdhci0 {
-       status = "okay";
-};
-
-&sdhci1 {
-       status = "okay";
-};
diff --git a/arch/arm/dts/zynqmp-mini-emmc0.dts b/arch/arm/dts/zynqmp-mini-emmc0.dts
new file mode 100644 (file)
index 0000000..24dd1ab
--- /dev/null
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * dts file for Xilinx ZynqMP Mini Configuration
+ *
+ * (C) Copyright 2018, Xilinx, Inc.
+ *
+ * Siva Durga Prasad <siva.durga.paladugu@xilinx.com>
+ */
+
+/dts-v1/;
+
+/ {
+       model = "ZynqMP MINI EMMC";
+       compatible = "xlnx,zynqmp";
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       aliases {
+               serial0 = &dcc;
+               mmc0 = &sdhci0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@0 {
+               device_type = "memory";
+               reg = <0x0 0x0 0x0 0x20000000>;
+       };
+
+       dcc: dcc {
+               compatible = "arm,dcc";
+               status = "disabled";
+               u-boot,dm-pre-reloc;
+       };
+
+       clk_xin: clk_xin {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <200000000>;
+       };
+
+       amba: amba {
+               compatible = "simple-bus";
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               sdhci0: sdhci@ff160000 {
+                       u-boot,dm-pre-reloc;
+                       compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a";
+                       status = "disabled";
+                       reg = <0x0 0xff160000 0x0 0x1000>;
+                       clock-names = "clk_xin", "clk_ahb";
+                       xlnx,device_id = <0>;
+               };
+       };
+};
+
+&dcc {
+       status = "okay";
+};
+
+&sdhci0 {
+       status = "okay";
+};
diff --git a/arch/arm/dts/zynqmp-mini-emmc1.dts b/arch/arm/dts/zynqmp-mini-emmc1.dts
new file mode 100644 (file)
index 0000000..d1549b6
--- /dev/null
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * dts file for Xilinx ZynqMP Mini Configuration
+ *
+ * (C) Copyright 2018, Xilinx, Inc.
+ *
+ * Siva Durga Prasad <siva.durga.paladugu@xilinx.com>
+ */
+
+/dts-v1/;
+
+/ {
+       model = "ZynqMP MINI EMMC";
+       compatible = "xlnx,zynqmp";
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       aliases {
+               serial0 = &dcc;
+               mmc0 = &sdhci1;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@0 {
+               device_type = "memory";
+               reg = <0x0 0x0 0x0 0x20000000>;
+       };
+
+       dcc: dcc {
+               compatible = "arm,dcc";
+               status = "disabled";
+               u-boot,dm-pre-reloc;
+       };
+
+       clk_xin: clk_xin {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <200000000>;
+       };
+
+       amba: amba {
+               compatible = "simple-bus";
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               sdhci1: sdhci@ff170000 {
+                       u-boot,dm-pre-reloc;
+                       compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a";
+                       status = "disabled";
+                       reg = <0x0 0xff170000 0x0 0x1000>;
+                       clock-names = "clk_xin", "clk_xin";
+                       xlnx,device_id = <1>;
+               };
+       };
+};
+
+&dcc {
+       status = "okay";
+};
+
+&sdhci1 {
+       status = "okay";
+};
index c6aaa08a0042e671ccfc5f1b18fb5f4a75188a8a..6e575a063befbacfcaa8926f0daef2e16702dce7 100644 (file)
@@ -48,8 +48,6 @@
 
        gpio-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
                sw4 {
                        label = "sw4";
index b7c638bc9e5acd764baae7d90d601f40128c2464..ddc3fbae1f6d893f2f20801fb80425d2612ed858 100644 (file)
@@ -45,8 +45,6 @@
 
        gpio-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
                sw19 {
                        label = "sw19";
index bbcd26031de22dbceeb436c00fb8546618a1360d..a30268b7b11cb22b68eb0fdf38b9e6b1df3542d0 100644 (file)
@@ -45,8 +45,6 @@
 
        gpio-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
                sw19 {
                        label = "sw19";
index aa9055b7152a78314d8f65e761e7ccdbc196eec8..6c1a0f7a3b31e0f18d1884ee724f5a7631445d49 100644 (file)
@@ -45,8 +45,6 @@
 
        gpio-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
                sw19 {
                        label = "sw19";
index f8a17755e363ecc37049299784dca536498b2273..7712d4664ca2b3d6e8ce4e2da3f27e42a7e44dcc 100644 (file)
@@ -59,13 +59,11 @@ void __efi_runtime EFIAPI efi_reset_system(
 {
        u32 val;
 
-       switch (reset_type) {
-       case EFI_RESET_COLD:
-       case EFI_RESET_WARM:
-       case EFI_RESET_PLATFORM_SPECIFIC:
+       if (reset_type == EFI_RESET_COLD ||
+           reset_type == EFI_RESET_WARM ||
+           reset_type == EFI_RESET_PLATFORM_SPECIFIC) {
                reset_cpu(0);
-               break;
-       case EFI_RESET_SHUTDOWN:
+       } else if (reset_type == EFI_RESET_SHUTDOWN) {
                /*
                 * We set the watchdog hard reset bit here to distinguish this reset
                 * from the normal (full) reset. bootcode.bin will not reboot after a
@@ -76,7 +74,6 @@ void __efi_runtime EFIAPI efi_reset_system(
                val |= BCM2835_WDOG_RSTS_RASPBERRYPI_HALT;
                writel(val, &wdog_regs->rsts);
                reset_cpu(0);
-               break;
        }
 
        while (1) { }
index e4f86d187a73b9379ff64a24ff88ddf0b1ab75e1..1106f5c2a892d0dfd6cb8fc87dcf9fdf8d00373e 100644 (file)
@@ -9,6 +9,7 @@
 #include <fdtdec.h>
 #include <fpga.h>
 #include <mmc.h>
+#include <watchdog.h>
 #include <wdt.h>
 #include <zynqpl.h>
 #include <asm/arch/hardware.h>
index 080fb59ef7bdaa458cc7d2ad833a846f06a85066..81c10fcf8a00c6a227f1967e5d934a2cb2d58f7e 100644 (file)
@@ -596,6 +596,8 @@ int board_late_init(void)
 
        new_targets = calloc(1, strlen(mode) + env_targets_len + 2 +
                             bootseq_len);
+       if (!new_targets)
+               return -ENOMEM;
 
        if (bootseq >= 0)
                sprintf(new_targets, "%s%x %s", mode, bootseq,
index 707d159baca8c6e565fb8199486b921bed6d26f3..f55a40dc84cd05dc2f3cbb39583f9c70f7e5a68c 100644 (file)
@@ -263,6 +263,7 @@ static efi_status_t do_bootefi_exec(void *efi,
 {
        struct efi_loaded_image loaded_image_info = {};
        struct efi_object loaded_image_info_obj = {};
+       struct efi_object mem_obj = {};
        struct efi_device_path *memdp = NULL;
        efi_status_t ret;
 
@@ -279,6 +280,12 @@ static efi_status_t do_bootefi_exec(void *efi,
                /* actual addresses filled in after efi_load_pe() */
                memdp = efi_dp_from_mem(0, 0, 0);
                device_path = image_path = memdp;
+               efi_add_handle(&mem_obj);
+
+               ret = efi_add_protocol(mem_obj.handle, &efi_guid_device_path,
+                                      device_path);
+               if (ret != EFI_SUCCESS)
+                       goto exit;
        } else {
                assert(device_path && image_path);
        }
@@ -343,6 +350,8 @@ static efi_status_t do_bootefi_exec(void *efi,
 exit:
        /* image has returned, loaded-image obj goes *poof*: */
        list_del(&loaded_image_info_obj.link);
+       if (mem_obj.handle)
+               list_del(&mem_obj.link);
 
        return ret;
 }
diff --git a/configs/xilinx_zynqmp_mini_emmc0_defconfig b/configs/xilinx_zynqmp_mini_emmc0_defconfig
new file mode 100644 (file)
index 0000000..ffb9693
--- /dev/null
@@ -0,0 +1,49 @@
+CONFIG_ARM=y
+CONFIG_SYS_CONFIG_NAME="xilinx_zynqmp_mini_emmc"
+CONFIG_ARCH_ZYNQMP=y
+CONFIG_SYS_TEXT_BASE=0x10000
+# CONFIG_CMD_ZYNQMP is not set
+CONFIG_DEFAULT_DEVICE_TREE="zynqmp-mini-emmc0"
+CONFIG_ENV_VARS_UBOOT_CONFIG=y
+CONFIG_FIT=y
+CONFIG_BOOTDELAY=-1
+CONFIG_SUPPORT_RAW_INITRD=y
+# CONFIG_DISPLAY_CPUINFO is not set
+CONFIG_BOARD_EARLY_INIT_R=y
+# CONFIG_CMDLINE_EDITING is not set
+# CONFIG_AUTO_COMPLETE is not set
+CONFIG_SYS_PROMPT="ZynqMP> "
+# CONFIG_CMD_BDI is not set
+# CONFIG_CMD_CONSOLE is not set
+# CONFIG_CMD_BOOTD is not set
+# CONFIG_CMD_BOOTM is not set
+# CONFIG_CMD_BOOTI is not set
+# CONFIG_CMD_GO is not set
+# CONFIG_CMD_RUN is not set
+# CONFIG_CMD_IMI is not set
+# CONFIG_CMD_XIMG is not set
+# CONFIG_CMD_EXPORTENV is not set
+# CONFIG_CMD_IMPORTENV is not set
+# CONFIG_CMD_EDITENV is not set
+# CONFIG_CMD_SAVEENV is not set
+# CONFIG_CMD_ENV_EXISTS is not set
+# CONFIG_CMD_CRC32 is not set
+# CONFIG_CMD_DM is not set
+# CONFIG_CMD_FLASH is not set
+# CONFIG_CMD_LOADB is not set
+# CONFIG_CMD_LOADS is not set
+CONFIG_CMD_MMC=y
+# CONFIG_CMD_ECHO is not set
+# CONFIG_CMD_ITEST is not set
+# CONFIG_CMD_SOURCE is not set
+# CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_OF_EMBED=y
+# CONFIG_NET is not set
+# CONFIG_DM_WARN is not set
+# CONFIG_DM_DEVICE_REMOVE is not set
+CONFIG_DM_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_ZYNQ=y
+# CONFIG_EFI_LOADER is not set
diff --git a/configs/xilinx_zynqmp_mini_emmc1_defconfig b/configs/xilinx_zynqmp_mini_emmc1_defconfig
new file mode 100644 (file)
index 0000000..edca32d
--- /dev/null
@@ -0,0 +1,49 @@
+CONFIG_ARM=y
+CONFIG_SYS_CONFIG_NAME="xilinx_zynqmp_mini_emmc"
+CONFIG_ARCH_ZYNQMP=y
+CONFIG_SYS_TEXT_BASE=0x10000
+# CONFIG_CMD_ZYNQMP is not set
+CONFIG_DEFAULT_DEVICE_TREE="zynqmp-mini-emmc1"
+CONFIG_ENV_VARS_UBOOT_CONFIG=y
+CONFIG_FIT=y
+CONFIG_BOOTDELAY=-1
+CONFIG_SUPPORT_RAW_INITRD=y
+# CONFIG_DISPLAY_CPUINFO is not set
+CONFIG_BOARD_EARLY_INIT_R=y
+# CONFIG_CMDLINE_EDITING is not set
+# CONFIG_AUTO_COMPLETE is not set
+CONFIG_SYS_PROMPT="ZynqMP> "
+# CONFIG_CMD_BDI is not set
+# CONFIG_CMD_CONSOLE is not set
+# CONFIG_CMD_BOOTD is not set
+# CONFIG_CMD_BOOTM is not set
+# CONFIG_CMD_BOOTI is not set
+# CONFIG_CMD_GO is not set
+# CONFIG_CMD_RUN is not set
+# CONFIG_CMD_IMI is not set
+# CONFIG_CMD_XIMG is not set
+# CONFIG_CMD_EXPORTENV is not set
+# CONFIG_CMD_IMPORTENV is not set
+# CONFIG_CMD_EDITENV is not set
+# CONFIG_CMD_SAVEENV is not set
+# CONFIG_CMD_ENV_EXISTS is not set
+# CONFIG_CMD_CRC32 is not set
+# CONFIG_CMD_DM is not set
+# CONFIG_CMD_FLASH is not set
+# CONFIG_CMD_LOADB is not set
+# CONFIG_CMD_LOADS is not set
+CONFIG_CMD_MMC=y
+# CONFIG_CMD_ECHO is not set
+# CONFIG_CMD_ITEST is not set
+# CONFIG_CMD_SOURCE is not set
+# CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_OF_EMBED=y
+# CONFIG_NET is not set
+# CONFIG_DM_WARN is not set
+# CONFIG_DM_DEVICE_REMOVE is not set
+CONFIG_DM_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_ZYNQ=y
+# CONFIG_EFI_LOADER is not set
diff --git a/configs/xilinx_zynqmp_mini_emmc_defconfig b/configs/xilinx_zynqmp_mini_emmc_defconfig
deleted file mode 100644 (file)
index a1ab39e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-CONFIG_ARM=y
-CONFIG_SYS_CONFIG_NAME="xilinx_zynqmp_mini_emmc"
-CONFIG_ARCH_ZYNQMP=y
-CONFIG_SYS_TEXT_BASE=0x10000
-# CONFIG_CMD_ZYNQMP is not set
-CONFIG_DEFAULT_DEVICE_TREE="zynqmp-mini-emmc"
-CONFIG_ENV_VARS_UBOOT_CONFIG=y
-CONFIG_FIT=y
-CONFIG_BOOTDELAY=-1
-CONFIG_SUPPORT_RAW_INITRD=y
-# CONFIG_DISPLAY_CPUINFO is not set
-CONFIG_BOARD_EARLY_INIT_R=y
-# CONFIG_CMDLINE_EDITING is not set
-# CONFIG_AUTO_COMPLETE is not set
-CONFIG_SYS_PROMPT="ZynqMP> "
-# CONFIG_CMD_BDI is not set
-# CONFIG_CMD_CONSOLE is not set
-# CONFIG_CMD_BOOTD is not set
-# CONFIG_CMD_BOOTM is not set
-# CONFIG_CMD_BOOTI is not set
-# CONFIG_CMD_GO is not set
-# CONFIG_CMD_RUN is not set
-# CONFIG_CMD_IMI is not set
-# CONFIG_CMD_XIMG is not set
-# CONFIG_CMD_EXPORTENV is not set
-# CONFIG_CMD_IMPORTENV is not set
-# CONFIG_CMD_EDITENV is not set
-# CONFIG_CMD_SAVEENV is not set
-# CONFIG_CMD_ENV_EXISTS is not set
-# CONFIG_CMD_CRC32 is not set
-# CONFIG_CMD_DM is not set
-# CONFIG_CMD_FLASH is not set
-# CONFIG_CMD_LOADB is not set
-# CONFIG_CMD_LOADS is not set
-CONFIG_CMD_MMC=y
-# CONFIG_CMD_ECHO is not set
-# CONFIG_CMD_ITEST is not set
-# CONFIG_CMD_SOURCE is not set
-# CONFIG_CMD_SETEXPR is not set
-CONFIG_CMD_FAT=y
-CONFIG_CMD_FS_GENERIC=y
-CONFIG_OF_EMBED=y
-# CONFIG_NET is not set
-# CONFIG_DM_WARN is not set
-# CONFIG_DM_DEVICE_REMOVE is not set
-CONFIG_DM_MMC=y
-CONFIG_MMC_SDHCI=y
-# CONFIG_EFI_LOADER is not set
index 52b3f75902cf6f7c8d348cfaeab2ff66f5f01ac2..9e667ff7d58a6687b2fe7ac01922615fbe5707bc 100644 (file)
@@ -5,10 +5,12 @@ CONFIG_DEBUG_UART_BASE=0xff010000
 CONFIG_DEBUG_UART_CLOCK=100000000
 CONFIG_DEFAULT_DEVICE_TREE="zynqmp-r5"
 CONFIG_DEBUG_UART=y
+CONFIG_BOOTSTAGE=y
 # CONFIG_DISPLAY_CPUINFO is not set
 CONFIG_SYS_PROMPT="ZynqMP r5> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_BOOTSTAGE=y
 CONFIG_OF_EMBED=y
 CONFIG_DEBUG_UART_ZYNQ=y
 CONFIG_ZYNQ_SERIAL=y
index 9b0f9dfdc076e4537478fb0c987d3c4977824535..49a14d87a8e2ad86865f058027a657aa798ee20f 100644 (file)
@@ -35,6 +35,7 @@ CONFIG_CMD_GPIO=y
 CONFIG_CMD_GPT=y
 CONFIG_CMD_I2C=y
 CONFIG_CMD_MMC=y
+CONFIG_CMD_SDRAM=y
 CONFIG_CMD_USB=y
 CONFIG_CMD_TFTPPUT=y
 CONFIG_CMD_TIME=y
index 8def1c5ea921911234e390c187e5b157f0adc74d..05dad41acbb874e7e15b5f7eecc1e77fe29f0ad7 100644 (file)
@@ -34,6 +34,7 @@ CONFIG_CMD_GPIO=y
 CONFIG_CMD_GPT=y
 CONFIG_CMD_I2C=y
 CONFIG_CMD_MMC=y
+CONFIG_CMD_SDRAM=y
 CONFIG_CMD_USB=y
 CONFIG_CMD_TFTPPUT=y
 CONFIG_CMD_TIME=y
index 618f1ed36f3235831650b4f832f803cb08c8b228..b3711b43e8747d610e7b92f4600fffd0a0f5bfc7 100644 (file)
@@ -34,6 +34,7 @@ CONFIG_CMD_GPIO=y
 CONFIG_CMD_GPT=y
 CONFIG_CMD_I2C=y
 CONFIG_CMD_MMC=y
+CONFIG_CMD_SDRAM=y
 CONFIG_CMD_USB=y
 CONFIG_CMD_TFTPPUT=y
 CONFIG_CMD_TIME=y
index 5c1039f01304e4232d771fcb0fc2e8b87dc6fb72..2945892a24d225d910e16720295e88dd01b8666e 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+/*
+ * GUID for basic data partions.
+ */
+static const efi_guid_t partition_basic_data_guid = PARTITION_BASIC_DATA_GUID;
+
 #ifdef CONFIG_HAVE_BLOCK_DEVICE
 /**
  * efi_crc32() - EFI version of crc32 function
@@ -502,12 +507,12 @@ int gpt_fill_pte(struct blk_desc *dev_desc,
                } else {
                        /* default partition type GUID */
                        memcpy(bin_type_guid,
-                              &PARTITION_BASIC_DATA_GUID, 16);
+                              &partition_basic_data_guid, 16);
                }
 #else
                /* partition type GUID */
                memcpy(gpt_e[i].partition_type_guid.b,
-                       &PARTITION_BASIC_DATA_GUID, 16);
+                       &partition_basic_data_guid, 16);
 #endif
 
 #if CONFIG_IS_ENABLED(PARTITION_UUIDS)
index 96632946853b6c491cb4176f52c28099126b0f98..8d84e3fc1313e5147888003515fd156393add31b 100644 (file)
@@ -111,9 +111,9 @@ struct zynq_gpio_privdata {
 struct zynq_platform_data {
        const char *label;
        u16 ngpio;
-       int max_bank;
-       int bank_min[ZYNQMP_GPIO_MAX_BANK];
-       int bank_max[ZYNQMP_GPIO_MAX_BANK];
+       u32 max_bank;
+       u32 bank_min[ZYNQMP_GPIO_MAX_BANK];
+       u32 bank_max[ZYNQMP_GPIO_MAX_BANK];
 };
 
 static const struct zynq_platform_data zynqmp_gpio_def = {
@@ -165,7 +165,7 @@ static inline void zynq_gpio_get_bank_pin(unsigned int pin_num,
                                          struct udevice *dev)
 {
        struct zynq_gpio_privdata *priv = dev_get_priv(dev);
-       int bank;
+       u32 bank;
 
        for (bank = 0; bank < priv->p_data->max_bank; bank++) {
                if ((pin_num >= priv->p_data->bank_min[bank]) &&
@@ -188,7 +188,7 @@ static int gpio_is_valid(unsigned gpio, struct udevice *dev)
 {
        struct zynq_gpio_privdata *priv = dev_get_priv(dev);
 
-       return (gpio >= 0) && (gpio < priv->p_data->ngpio);
+       return gpio < priv->p_data->ngpio;
 }
 
 static int check_gpio(unsigned gpio, struct udevice *dev)
index 40e28abda67f4c0130c6cd85716a55061d0046b1..cdeba914f95cac4037eaf9b9eb521963f9048186 100644 (file)
@@ -161,8 +161,8 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
        /* We shouldn't wait for data inihibit for stop commands, even
           though they might use busy signaling */
        if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION ||
-           cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
-           cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200)
+           ((cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
+             cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200) && !data))
                mask &= ~SDHCI_DATA_INHIBIT;
 
        while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) {
@@ -184,8 +184,8 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
        sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS);
 
        mask = SDHCI_INT_RESPONSE;
-       if (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
-           cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200)
+       if ((cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
+            cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200) && !data)
                mask = SDHCI_INT_DATA_AVAIL;
 
        if (!(cmd->resp_type & MMC_RSP_PRESENT))
index 5b6d5256084c8dfad68e680bc6b6548c9dbe62f5..b05334dfc8d42efcf7ef1663b99381995eaf2137 100644 (file)
@@ -92,7 +92,7 @@ static int arasan_sdhci_execute_tuning(struct mmc *mmc, u8 opcode)
        u32 ctrl;
        struct sdhci_host *host;
        struct arasan_sdhci_priv *priv = dev_get_priv(mmc->dev);
-       u8 tuning_loop_counter = SDHCI_TUNING_LOOP_COUNT;
+       char tuning_loop_counter = SDHCI_TUNING_LOOP_COUNT;
        u8 deviceid;
 
        debug("%s\n", __func__);
index 3650af21573122e48d82685ec12622af8f9cc143..a191772ff0403240128475099c27d5609f661e54 100644 (file)
 #include <linux/compiler.h>
 #include <serial.h>
 
-#define ZYNQ_UART_SR_TXEMPTY   (1 << 3) /* TX FIFO empty */
-#define ZYNQ_UART_SR_TXACTIVE  (1 << 11)  /* TX active */
-#define ZYNQ_UART_SR_RXEMPTY   0x00000002 /* RX FIFO empty */
+DECLARE_GLOBAL_DATA_PTR;
 
-#define ZYNQ_UART_CR_TX_EN     0x00000010 /* TX enabled */
-#define ZYNQ_UART_CR_RX_EN     0x00000004 /* RX enabled */
-#define ZYNQ_UART_CR_TXRST     0x00000002 /* TX logic reset */
-#define ZYNQ_UART_CR_RXRST     0x00000001 /* RX logic reset */
+#define ZYNQ_UART_SR_TXACTIVE  BIT(11) /* TX active */
+#define ZYNQ_UART_SR_TXFULL    BIT(4) /* TX FIFO full */
+#define ZYNQ_UART_SR_RXEMPTY   BIT(1) /* RX FIFO empty */
+
+#define ZYNQ_UART_CR_TX_EN     BIT(4) /* TX enabled */
+#define ZYNQ_UART_CR_RX_EN     BIT(2) /* RX enabled */
+#define ZYNQ_UART_CR_TXRST     BIT(1) /* TX logic reset */
+#define ZYNQ_UART_CR_RXRST     BIT(0) /* RX logic reset */
 
 #define ZYNQ_UART_MR_PARITY_NONE       0x00000020  /* No parity mode */
 
@@ -93,7 +95,7 @@ static void _uart_zynq_serial_init(struct uart_zynq *regs)
 
 static int _uart_zynq_serial_putc(struct uart_zynq *regs, const char c)
 {
-       if (!(readl(&regs->channel_sts) & ZYNQ_UART_SR_TXEMPTY))
+       if (readl(&regs->channel_sts) & ZYNQ_UART_SR_TXFULL)
                return -EAGAIN;
 
        writel(c, &regs->tx_rx_fifo);
@@ -101,7 +103,7 @@ static int _uart_zynq_serial_putc(struct uart_zynq *regs, const char c)
        return 0;
 }
 
-int zynq_serial_setbrg(struct udevice *dev, int baudrate)
+static int zynq_serial_setbrg(struct udevice *dev, int baudrate)
 {
        struct zynq_uart_priv *priv = dev_get_priv(dev);
        unsigned long clock;
@@ -137,6 +139,10 @@ static int zynq_serial_probe(struct udevice *dev)
 {
        struct zynq_uart_priv *priv = dev_get_priv(dev);
 
+       /* No need to reinitialize the UART after relocation */
+       if (gd->flags & GD_FLG_RELOC)
+               return 0;
+
        _uart_zynq_serial_init(priv->regs);
 
        return 0;
index 3541e5c841278fa308697ef94876406ebd7f9634..4125a078b385d8d5c2b3f0ee55c4e79ae6804149 100644 (file)
@@ -31,6 +31,28 @@ struct cadence_ttc_priv {
        struct cadence_ttc_regs *regs;
 };
 
+#if CONFIG_IS_ENABLED(BOOTSTAGE)
+ulong timer_get_boot_us(void)
+{
+       u64 ticks = 0;
+       u32 rate = 1;
+       u64 us;
+       int ret;
+
+       ret = dm_timer_init();
+       if (!ret) {
+               /* The timer is available */
+               rate = timer_get_rate(gd->timer);
+               timer_get_count(gd->timer, &ticks);
+       } else {
+               return 0;
+       }
+
+       us = (ticks * 1000) / rate;
+       return us;
+}
+#endif
+
 static int cadence_ttc_get_count(struct udevice *dev, u64 *count)
 {
        struct cadence_ttc_priv *priv = dev_get_priv(dev);
index ca11b97c7c4c11c491c9223d1d1e98621369a758..ad6bc3d1bf119d86ce66bf8ba19d9749f5b90235 100644 (file)
@@ -39,6 +39,9 @@
 #define CONFIG_ZYNQ_EEPROM_BUS         5
 #define CONFIG_ZYNQ_GEM_EEPROM_ADDR    0x54
 
+#define CONFIG_SPD_EEPROM
+#define CONFIG_DDR_SPD
+
 #include <configs/xilinx_zynqmp.h>
 
 #endif /* __CONFIG_ZYNQMP_ZCU102_H */
index 98bddbac1ad1e653b492b1fd62360f7735c95185..e30a3c51c676f3777eb399de981cafd2ee6ffe80 100644 (file)
@@ -89,12 +89,11 @@ typedef u64 efi_virtual_addr_t;
 typedef void *efi_handle_t;
 
 #define EFI_GUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
-       ((efi_guid_t) \
        {{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, \
                ((a) >> 24) & 0xff, \
                (b) & 0xff, ((b) >> 8) & 0xff, \
                (c) & 0xff, ((c) >> 8) & 0xff, \
-               (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) } })
+               (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) } }
 
 /* Generic EFI table header */
 struct efi_table_hdr {
index d73eb142cb3a85a8de3584876e586cb9bd768b39..36e1908b7eafeb32c2032efcf49a0d3f4f48ad5c 100644 (file)
@@ -201,10 +201,13 @@ typedef struct _IMAGE_RELOCATION
 #define IMAGE_REL_BASED_MIPS_JMPADDR            5
 #define IMAGE_REL_BASED_ARM_MOV32A              5 /* yes, 5 too */
 #define IMAGE_REL_BASED_ARM_MOV32               5 /* yes, 5 too */
+#define IMAGE_REL_BASED_RISCV_HI20             5 /* yes, 5 too */
 #define IMAGE_REL_BASED_SECTION                 6
 #define IMAGE_REL_BASED_REL                     7
 #define IMAGE_REL_BASED_ARM_MOV32T              7 /* yes, 7 too */
 #define IMAGE_REL_BASED_THUMB_MOV32             7 /* yes, 7 too */
+#define IMAGE_REL_BASED_RISCV_LOW12I           7 /* yes, 7 too */
+#define IMAGE_REL_BASED_RISCV_LOW12S           8
 #define IMAGE_REL_BASED_MIPS_JMPADDR16          9
 #define IMAGE_REL_BASED_IA64_IMM64              9 /* yes, 9 too */
 #define IMAGE_REL_BASED_DIR64                   10
index 3cffe9ef46182dc0fe02bfbbb5e3303facea1563..ecdb77e5b6bfcdfb0a0e7bb5a472ef1c33be99d2 100644 (file)
@@ -126,6 +126,20 @@ static efi_status_t efi_loader_relocate(const IMAGE_BASE_RELOCATION *rel,
                        case IMAGE_REL_BASED_DIR64:
                                *x64 += (uint64_t)delta;
                                break;
+#ifdef __riscv
+                       case IMAGE_REL_BASED_RISCV_HI20:
+                               *x32 = ((*x32 & 0xfffff000) + (uint32_t)delta) |
+                                       (*x32 & 0x00000fff);
+                               break;
+                       case IMAGE_REL_BASED_RISCV_LOW12I:
+                       case IMAGE_REL_BASED_RISCV_LOW12S:
+                               /* We know that we're 4k aligned */
+                               if (delta & 0xfff) {
+                                       printf("Unsupported reloc offset\n");
+                                       return EFI_LOAD_ERROR;
+                               }
+                               break;
+#endif
                        default:
                                printf("Unknown Relocation off %x type %x\n",
                                       offset, type);
index 65f2bcf1401adaca95fc4a0335b0d21e12498d1f..4874eb602f79af93fd77d59bb311a89377e06c99 100644 (file)
@@ -28,6 +28,10 @@ static efi_status_t __efi_runtime EFIAPI efi_unimplemented(void);
 static efi_status_t __efi_runtime EFIAPI efi_device_error(void);
 static efi_status_t __efi_runtime EFIAPI efi_invalid_parameter(void);
 
+/*
+ * TODO(sjg@chromium.org): These defines and structs should come from the elf
+ * header for each arch (or a generic header) rather than being repeated here.
+ */
 #if defined(CONFIG_ARM64)
 #define R_RELATIVE     1027
 #define R_MASK         0xffffffffULL
index 2a7d73432d713d4fbc099ccb8ee58c6962a9c57a..f8c3fff1d151ee5ebf6024969465523c3ad165c8 100644 (file)
@@ -385,8 +385,14 @@ cmd_efi_ld = $(LD) -nostdlib -znocombreloc -T $(EFI_LDS_PATH) -shared \
 
 EFI_LDS_PATH = $(srctree)/arch/$(ARCH)/lib/$(EFI_LDS)
 
-$(obj)/%_efi.so: $(obj)/%.o arch/$(ARCH)/lib/$(EFI_CRT0) \
-               arch/$(ARCH)/lib/$(EFI_RELOC)
+$(obj)/efi_crt0.o: $(srctree)/arch/$(ARCH)/lib/$(EFI_CRT0:.o=.S)
+       $(call if_changed_dep,as_o_S)
+
+$(obj)/efi_reloc.o: $(srctree)/arch/$(ARCH)/lib/$(EFI_RELOC:.o=.c) $(recordmcount_source) FORCE
+       $(call cmd,force_checksrc)
+       $(call if_changed_rule,cc_o_c)
+
+$(obj)/%_efi.so: $(obj)/%.o $(obj)/efi_crt0.o $(obj)/efi_reloc.o
        $(call cmd,efi_ld)
 
 # ACPI
index ef018b5b4056f803cf2983166e6b6c6c6e856c18..252f13826d4c2520be38cf1c31bf5d09410d0be0 100644 (file)
@@ -167,8 +167,14 @@ ifdef CONFIG_ARCH_ZYNQ
 MKIMAGEFLAGS_boot.bin = -T zynqimage -R $(srctree)/$(CONFIG_BOOT_INIT_FILE)
 endif
 ifdef CONFIG_ARCH_ZYNQMP
+ifneq ($(CONFIG_PMUFW_INIT_FILE),"")
+spl/boot.bin: zynqmp-check-pmufw
+zynqmp-check-pmufw: FORCE
+       ( cd $(srctree) && test -r $(CONFIG_PMUFW_INIT_FILE) ) \
+               || ( echo "Cannot read $(CONFIG_PMUFW_INIT_FILE)" && false )
+endif
 MKIMAGEFLAGS_boot.bin = -T zynqmpimage -R $(srctree)/$(CONFIG_BOOT_INIT_FILE) \
-       -n $(srctree)/$(CONFIG_PMUFW_INIT_FILE)
+       -n "$(shell cd $(srctree); readlink -f $(CONFIG_PMUFW_INIT_FILE))"
 endif
 
 spl/boot.bin: $(obj)/u-boot-spl.bin FORCE