Use generic request_firmware_into_buf_via_script() instead of local
implementation of similar functionality. This reduces code duplication.

Signed-off-by: Marek Vasut <[email protected]>
---
Cc: Nobuhiro Iwamatsu <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: [email protected]
---
 drivers/pci/Kconfig         |  1 +
 drivers/pci/pci-rcar-gen4.c | 67 ++++++++++++-------------------------
 2 files changed, 23 insertions(+), 45 deletions(-)

diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
index 9ffccc3a80b..2b2ccdf4745 100644
--- a/drivers/pci/Kconfig
+++ b/drivers/pci/Kconfig
@@ -396,6 +396,7 @@ config PCI_RCAR_GEN4
        depends on RCAR_GEN4
        select DM_RESET
        select DM_GPIO
+       select FW_LOADER
        select PCIE_DW_COMMON
        help
          Say Y here if you want to enable PCIe controller support on
diff --git a/drivers/pci/pci-rcar-gen4.c b/drivers/pci/pci-rcar-gen4.c
index 8c5c8095c73..34561406641 100644
--- a/drivers/pci/pci-rcar-gen4.c
+++ b/drivers/pci/pci-rcar-gen4.c
@@ -19,6 +19,7 @@
 #include <dm.h>
 #include <dm/device_compat.h>
 #include <env.h>
+#include <fw_loader.h>
 #include <log.h>
 #include <reset.h>
 
@@ -75,6 +76,7 @@
 
 #define RCAR_GEN4_PCIE_FIRMWARE_NAME           "rcar_gen4_pcie.bin"
 #define RCAR_GEN4_PCIE_FIRMWARE_BASE_ADDR      0xc000
+#define RCAR_GEN4_PCIE_FIRMWARE_SIZE           0x8000
 
 #define PCIE_T_PVPERL_MS                       100
 
@@ -107,7 +109,7 @@ struct rcar_gen4_pcie {
        u32                     max_link_speed;
        u32                     num_lanes;
        u16                     *firmware;
-       u32                     firmware_size;
+       size_t                  firmware_size;
 };
 
 /* Common */
@@ -362,56 +364,31 @@ static int rcar_gen4_pcie_host_init(struct udevice *dev)
 
 static int rcar_gen4_pcie_load_firmware(struct rcar_gen4_pcie *rcar)
 {
-       ulong addr, size;
        int ret;
 
-       /*
-        * Run user specified firmware loading script, which loads the
-        * firmware from whichever location the user decides it should
-        * load the firmware from, by whatever means the user decides.
-        */
-       ret = run_command_list("run renesas_rcar_gen4_load_firmware", -1, 0);
-       if (ret) {
-               printf("Firmware loading script 
'renesas_rcar_gen4_load_firmware' not defined or failed.\n");
-               goto fail;
-       }
-
-       /* Find out where the firmware got loaded and how long it is. */
-       addr = env_get_hex("renesas_rcar_gen4_load_firmware_addr", 0);
-       size = env_get_hex("renesas_rcar_gen4_load_firmware_size", 0);
-
-       /*
-        * Clear the variables set by the firmware loading script, as
-        * their content would become stale once this function exits.
-        */
-       env_set("renesas_rcar_gen4_load_firmware_addr", NULL);
-       env_set("renesas_rcar_gen4_load_firmware_size", NULL);
-
-       if (!addr || !size) {
-               printf("Firmware address (%lx) or size (%lx) are invalid.\n", 
addr, size);
-               goto fail;
-       }
-
-       /* Create local copy of the loaded firmware. */
-       rcar->firmware = (u16 *)memdup((void *)addr, size);
+       rcar->firmware = calloc(1, RCAR_GEN4_PCIE_FIRMWARE_SIZE);
        if (!rcar->firmware)
                return -ENOMEM;
 
-       rcar->firmware_size = size;
-
-       return 0;
+       ret = request_firmware_into_buf_via_script(rcar->firmware,
+                                                  RCAR_GEN4_PCIE_FIRMWARE_SIZE,
+                                                  
"renesas_rcar_gen4_load_firmware",
+                                                  &rcar->firmware_size);
+       if (ret) {
+               free(rcar->firmware);
+
+               printf("Define 'renesas_rcar_gen4_load_firmware' script which 
loads the R-Car\n"
+                      "Gen4 PCIe controller firmware from storage into memory 
and sets these\n"
+                      "two environment variables:\n"
+                      "  renesas_rcar_gen4_load_firmware_addr ... address of 
firmware in memory\n"
+                      "  renesas_rcar_gen4_load_firmware_size ... length of 
firmware in bytes\n"
+                      "\n"
+                      "Example:\n"
+                      "  => env set renesas_rcar_gen4_load_firmware 'env set 
renesas_rcar_gen4_load_firmware_addr 0x54000000 && load mmc 0:1 
${renesas_rcar_gen4_load_firmware_addr} lib/firmware/rcar_gen4_pcie.bin && env 
set renesas_rcar_gen4_load_firmware_size ${filesize}'\n"
+                      );
+       }
 
-fail:
-       printf("Define 'renesas_rcar_gen4_load_firmware' script which loads the 
R-Car\n"
-              "Gen4 PCIe controller firmware from storage into memory and sets 
these\n"
-              "two environment variables:\n"
-              "  renesas_rcar_gen4_load_firmware_addr ... address of firmware 
in memory\n"
-              "  renesas_rcar_gen4_load_firmware_size ... length of firmware 
in bytes\n"
-              "\n"
-              "Example:\n"
-              "  => env set renesas_rcar_gen4_load_firmware 'env set 
renesas_rcar_gen4_load_firmware_addr 0x54000000 && load mmc 0:1 
${renesas_rcar_gen4_load_firmware_addr} lib/firmware/rcar_gen4_pcie.bin && env 
set renesas_rcar_gen4_load_firmware_size ${filesize}'\n"
-              );
-       return -EINVAL;
+       return ret;
 }
 
 /**
-- 
2.53.0

Reply via email to