[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230314094222.66916-1-nava.kishore.manne@amd.com>
Date: Tue, 14 Mar 2023 15:12:22 +0530
From: Nava kishore Manne <nava.kishore.manne@....com>
To: <mdf@...nel.org>, <hao.wu@...el.com>, <yilun.xu@...el.com>,
<trix@...hat.com>, <michal.simek@...inx.com>,
<linux-fpga@...r.kernel.org>,
<linux-arm-kernel@...ts.infradead.org>,
<linux-kernel@...r.kernel.org>
Subject: [PATCH] fpga: zynqmp: Make word align the configuration data
To avoid unwanted copies at firmware(PMUFW) this patch provides a fix
to align programmable logic(PL) configuration data if the data is not
word-aligned. To align the configuration data this patch adds a few
padding bytes and these additional padding bytes will not create any
functional impact on the PL configuration.
Signed-off-by: Nava kishore Manne <nava.kishore.manne@....com>
---
drivers/fpga/zynqmp-fpga.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/fpga/zynqmp-fpga.c b/drivers/fpga/zynqmp-fpga.c
index c60f20949c47..70a12dc6e15c 100644
--- a/drivers/fpga/zynqmp-fpga.c
+++ b/drivers/fpga/zynqmp-fpga.c
@@ -15,6 +15,9 @@
/* Constant Definitions */
#define IXR_FPGA_DONE_MASK BIT(3)
+#define DUMMY_PAD_BYTE 0xFF
+#define FPGA_WORD_SIZE 4
+
/**
* struct zynqmp_fpga_priv - Private data structure
* @dev: Device data structure
@@ -41,18 +44,26 @@ static int zynqmp_fpga_ops_write(struct fpga_manager *mgr,
const char *buf, size_t size)
{
struct zynqmp_fpga_priv *priv;
+ int word_align, ret, index;
dma_addr_t dma_addr;
u32 eemi_flags = 0;
char *kbuf;
- int ret;
priv = mgr->priv;
+ word_align = size % FPGA_WORD_SIZE;
+ if (word_align)
+ word_align = FPGA_WORD_SIZE - word_align;
+
+ size = size + word_align;
kbuf = dma_alloc_coherent(priv->dev, size, &dma_addr, GFP_KERNEL);
if (!kbuf)
return -ENOMEM;
- memcpy(kbuf, buf, size);
+ for (index = 0; index < word_align; index++)
+ kbuf[index] = DUMMY_PAD_BYTE;
+
+ memcpy(&kbuf[index], buf, size - index);
wmb(); /* ensure all writes are done before initiate FW call */
--
2.25.1
Powered by blists - more mailing lists