]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
fpga: zynqmppl: Reuse invoke_smc routine
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Fri, 17 Feb 2017 10:46:01 +0000 (16:16 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 20 Feb 2017 14:53:09 +0000 (15:53 +0100)
Reuse invoke_smc() routine which is already defined
instead of duplicating same at multiple places.

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/cpu/armv8/zynqmp/cpu.c
arch/arm/include/asm/arch-zynqmp/sys_proto.h
drivers/fpga/zynqmppl.c

index 953185f529107fa159e30c02b82445ae7fb9c841..405ec9c9774a9e772dd6d184b6cc22d14141b274 100644 (file)
@@ -105,7 +105,6 @@ unsigned int zynqmp_get_silicon_version(void)
        return ZYNQMP_CSU_VERSION_SILICON;
 }
 
-#define PAYLOAD_ARG_CNT                5
 #define ZYNQMP_MMIO_READ       0xC2000014
 #define ZYNQMP_MMIO_WRITE      0xC2000013
 
index fb06f8d0d619a4744b8ee274ff5e17d2357e71bc..18ba745d8b64d1bb7ad549be78b1d886fed8ff54 100644 (file)
@@ -8,6 +8,8 @@
 #ifndef _ASM_ARCH_SYS_PROTO_H
 #define _ASM_ARCH_SYS_PROTO_H
 
+#define PAYLOAD_ARG_CNT                5
+
 #ifndef CONFIG_CLK_ZYNQMP
 /* Setup clk for network */
 static inline void zynq_slcr_gem_clk_setup(u32 gem_id, unsigned long clk_rate)
index 3e0edba9387ff3faf9148f48351e7b26d065fc9c..aa082e0be2c31b1257990d71a0916881cd338737 100644 (file)
@@ -10,6 +10,7 @@
 #include <common.h>
 #include <zynqmppl.h>
 #include <linux/sizes.h>
+#include <asm/arch/sys_proto.h>
 
 #define DUMMY_WORD     0xffffffff
 
@@ -191,25 +192,14 @@ static int zynqmp_validate_bitstream(xilinx_desc *desc, const void *buf,
        return 0;
 }
 
-static int invoke_smc(ulong id, ulong reg0, ulong reg1, ulong reg2)
-{
-       struct pt_regs regs;
-       regs.regs[0] = id;
-       regs.regs[1] = reg0;
-       regs.regs[2] = reg1;
-       regs.regs[3] = reg2;
-
-       smc_call(&regs);
-
-       return regs.regs[0];
-}
-
 static int zynqmp_load(xilinx_desc *desc, const void *buf, size_t bsize,
                     bitstream_type bstype)
 {
        u32 swap;
-       ulong bin_buf, flags;
+       ulong bin_buf;
        int ret;
+       u32 buf_lo, buf_hi;
+       u32 ret_payload[PAYLOAD_ARG_CNT];
 
        if (zynqmp_validate_bitstream(desc, buf, bsize, bsize, &swap))
                return FPGA_FAIL;
@@ -224,9 +214,10 @@ static int zynqmp_load(xilinx_desc *desc, const void *buf, size_t bsize,
        else
                bsize = bsize / 4;
 
-       flags = (u32)bsize | ((u64)bstype << 32);
-
-       ret = invoke_smc(ZYNQMP_SIP_SVC_PM_FPGA_LOAD, bin_buf, flags, 0);
+       buf_lo = (u32)bin_buf;
+       buf_hi = upper_32_bits(bin_buf);
+       ret = invoke_smc(ZYNQMP_SIP_SVC_PM_FPGA_LOAD, buf_lo, buf_hi, bsize,
+                        bstype, ret_payload);
        if (ret)
                debug("PL FPGA LOAD fail\n");
 
@@ -243,7 +234,8 @@ static int zynqmp_loads(xilinx_desc *desc, const void *buf, size_t bsize,
        ulong bitsize = bsize;
        ulong key_iv_size;
        int ret;
-       ulong flags;
+       u32 buf_lo, buf_hi;
+       u32 ret_payload[PAYLOAD_ARG_CNT];
 
        size_str = strchr(fpga_sec_info->keyaddr_size, ':');
        if (size_str) {
@@ -299,9 +291,10 @@ static int zynqmp_loads(xilinx_desc *desc, const void *buf, size_t bsize,
        debug("%s called!\n", __func__);
        flush_dcache_range((ulong)buf, (ulong)buf + bitsize + key_iv_size);
 
-       flags = (u32)bsize | ((u64)ZYNQMP_FPGA_FLAG_ENCRYPTED << 32);
-
-       ret = invoke_smc(ZYNQMP_SIP_SVC_PM_FPGA_LOAD, (ulong)buf, flags, 0);
+       buf_lo = (u32)(ulong)buf;
+       buf_hi = upper_32_bits((ulong)buf);
+       ret = invoke_smc(ZYNQMP_SIP_SVC_PM_FPGA_LOAD, buf_lo, buf_hi, bsize,
+                        ZYNQMP_FPGA_FLAG_ENCRYPTED, ret_payload);
        if (ret)
                debug("PL FPGA LOAD fail\n");