summaryrefslogtreecommitdiff
path: root/drivers/spi
diff options
context:
space:
mode:
authorT Karthik Reddy <t.karthik.reddy@xilinx.com>2022-07-15 19:31:17 +0530
committerMichal Simek <michal.simek@amd.com>2022-07-26 09:34:21 +0200
commite09784728689de7949d4cdd559a9590e0bfcc702 (patch)
tree7b58c440768c63049f4fa327f30d3104a57c4b49 /drivers/spi
parent1acb70393f2719c70d92f52d91be2525fa1db679 (diff)
downloadu-boot-e09784728689de7949d4cdd559a9590e0bfcc702.tar.gz
u-boot-e09784728689de7949d4cdd559a9590e0bfcc702.tar.bz2
u-boot-e09784728689de7949d4cdd559a9590e0bfcc702.zip
spi: zynq_qspi: Use dummy buswidth in dummy byte calculation
Fix dummy bytes calculation incase of valid dummy bytes when dummy buswidth is > 1. Current dummy bytes calculation does not provide correct dummy values for dummy buswidth > 1. Signed-off-by: T Karthik Reddy <t.karthik.reddy@xilinx.com> Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma@xilinx.com> Link: https://lore.kernel.org/r/1657893679-20039-3-git-send-email-ashok.reddy.soma@xilinx.com Signed-off-by: Michal Simek <michal.simek@amd.com>
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/zynq_qspi.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/spi/zynq_qspi.c b/drivers/spi/zynq_qspi.c
index 066a0c6002..b138c3c38a 100644
--- a/drivers/spi/zynq_qspi.c
+++ b/drivers/spi/zynq_qspi.c
@@ -679,6 +679,7 @@ static int zynq_qspi_exec_op(struct spi_slave *slave,
const struct spi_mem_op *op)
{
int op_len, pos = 0, ret, i;
+ u32 dummy_bytes = 0;
unsigned int flag = 0;
const u8 *tx_buf = NULL;
u8 *rx_buf = NULL;
@@ -691,6 +692,11 @@ static int zynq_qspi_exec_op(struct spi_slave *slave,
}
op_len = op->cmd.nbytes + op->addr.nbytes + op->dummy.nbytes;
+ if (op->dummy.nbytes) {
+ op_len = op->cmd.nbytes + op->addr.nbytes +
+ op->dummy.nbytes / op->dummy.buswidth;
+ dummy_bytes = op->dummy.nbytes / op->dummy.buswidth;
+ }
u8 op_buf[op_len];
@@ -704,8 +710,8 @@ static int zynq_qspi_exec_op(struct spi_slave *slave,
pos += op->addr.nbytes;
}
- if (op->dummy.nbytes)
- memset(op_buf + pos, 0xff, op->dummy.nbytes);
+ if (dummy_bytes)
+ memset(op_buf + pos, 0xff, dummy_bytes);
/* 1st transfer: opcode + address + dummy cycles */
/* Make sure to set END bit if no tx or rx data messages follow */