xilinx: zynqmp: synchronize firmware call return payload
authorIbai Erkiaga <ibai.erkiaga-elorza@xilinx.com>
Tue, 4 Aug 2020 22:17:26 +0000 (23:17 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Thu, 20 Aug 2020 07:49:20 +0000 (09:49 +0200)
Removes duplicated definition of PAYLOAD_ARG_CNT and define it in the
firmware driver. Additionally fixes payload buffer declarations without
macro usage

Signed-off-by: Ibai Erkiaga <ibai.erkiaga-elorza@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/mach-versal/include/mach/sys_proto.h
arch/arm/mach-zynqmp/include/mach/sys_proto.h
board/xilinx/versal/cmds.c
drivers/fpga/versalpl.c
include/zynqmp_firmware.h

index cfd480b..05934c2 100644 (file)
@@ -8,7 +8,5 @@ enum {
        TCM_SPLIT,
 };
 
-#define PAYLOAD_ARG_CNT        5U
-
 void tcm_init(u8 mode);
 void mem_map_fill(void);
index 2974ffb..4078f95 100644 (file)
@@ -7,8 +7,6 @@
 #ifndef _ASM_ARCH_SYS_PROTO_H
 #define _ASM_ARCH_SYS_PROTO_H
 
-#define PAYLOAD_ARG_CNT                5
-
 #define ZYNQMP_CSU_SILICON_VER_MASK    0xF
 #define KEY_PTR_LEN    32
 
index 981c80e..f5735d0 100644 (file)
@@ -16,7 +16,7 @@ static int do_versal_load_pdi(struct cmd_tbl *cmdtp, int flag, int argc,
                              char * const argv[])
 {
        u32 buf_lo, buf_hi;
-       u32 ret_payload[5];
+       u32 ret_payload[PAYLOAD_ARG_CNT];
        ulong addr, *pdi_buf;
        size_t len;
        int ret;
index 8e2ef4f..c44a7d3 100644 (file)
@@ -32,7 +32,7 @@ static int versal_load(xilinx_desc *desc, const void *buf, size_t bsize,
        ulong bin_buf;
        int ret;
        u32 buf_lo, buf_hi;
-       u32 ret_payload[5];
+       u32 ret_payload[PAYLOAD_ARG_CNT];
 
        bin_buf = versal_align_dma_buffer((ulong *)buf, bsize);
 
index 93d771e..2c44951 100644 (file)
@@ -77,6 +77,15 @@ enum pm_api_id {
 
 #define PMUFW_V1_0      ((1 << ZYNQMP_PM_VERSION_MAJOR_SHIFT) | 0)
 
+/*
+ * Return payload size
+ * Not every firmware call expects the same amount of return bytes, however the
+ * firmware driver always copies 5 bytes from RX buffer to the ret_payload
+ * buffer. Therefore allocating with this defined value is recommended to avoid
+ * overflows.
+ */
+#define PAYLOAD_ARG_CNT        5U
+
 unsigned int zynqmp_firmware_version(void);
 void zynqmp_pmufw_load_config_object(const void *cfg_obj, size_t size);
 int xilinx_pm_request(u32 api_id, u32 arg0, u32 arg1, u32 arg2,