arm64: zynqmp: probe firmware driver
authorIbai Erkiaga <ibai.erkiaga-elorza@xilinx.com>
Fri, 27 Sep 2019 10:37:04 +0000 (11:37 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 8 Oct 2019 07:55:11 +0000 (09:55 +0200)
Probe ZynqMP firmware driver on the board initialization phase and
ensure that firmware is in place to continue execution. The probing is
done on board_init so it can be used for both SPL and U-Boot proper.

Signed-off-by: Ibai Erkiaga <ibai.erkiaga-elorza@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/Kconfig
board/xilinx/zynqmp/zynqmp.c

index 0c41bc3e5b3836325e0a7a4b2037916e9d0954cb..90bcc8d64457e04bd997e0895fde8f26442d6dfd 100644 (file)
@@ -1057,9 +1057,12 @@ config ARCH_ZYNQMP
        select DM_SPI if SPI
        select DM_SPI_FLASH if DM_SPI
        select DM_USB if USB
+       select FIRMWARE
        select OF_CONTROL
        select SPL_BOARD_INIT if SPL
        select SPL_CLK if SPL
+       select SPL_DM_MAILBOX if SPL
+       select SPL_FIRMWARE if SPL
        select SPL_SEPARATE_BSS if SPL
        select SUPPORT_SPL
        select ZYNQMP_IPI
index 8a66d3e50aad12dd3e226e2a84973960babe5099..b94936474d7e3fa157e39ff605e156d89224747b 100644 (file)
@@ -318,18 +318,6 @@ static char *zynqmp_get_silicon_idcode_name(void)
 int board_early_init_f(void)
 {
        int ret = 0;
-#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_CLK_ZYNQMP)
-       u32 pm_api_version;
-
-       pm_api_version = zynqmp_firmware_version();
-       printf("PMUFW:\tv%d.%d\n",
-              pm_api_version >> ZYNQMP_PM_VERSION_MAJOR_SHIFT,
-              pm_api_version & ZYNQMP_PM_VERSION_MINOR_MASK);
-
-       if (pm_api_version < ZYNQMP_PM_VERSION)
-               panic("PMUFW version error. Expected: v%d.%d\n",
-                     ZYNQMP_PM_VERSION_MAJOR, ZYNQMP_PM_VERSION_MINOR);
-#endif
 
 #if defined(CONFIG_ZYNQMP_PSU_INIT_ENABLED)
        ret = psu_init();
@@ -340,6 +328,12 @@ int board_early_init_f(void)
 
 int board_init(void)
 {
+       struct udevice *dev;
+
+       uclass_get_device_by_name(UCLASS_FIRMWARE, "zynqmp-power", &dev);
+       if (!dev)
+               panic("PMU Firmware device not found - Enable it");
+
 #if defined(CONFIG_SPL_BUILD)
        /* Check *at build time* if the filename is an non-empty string */
        if (sizeof(CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE) > 1)