From: Witold Sadowski <wsadowski@marvell.com>
To: <linux-kernel@vger.kernel.org>, <linux-spi@vger.kernel.org>,
<devicetree@vger.kernel.org>
Cc: <broonie@kernel.org>, <robh@kernel.org>,
<krzysztof.kozlowski+dt@linaro.org>, <conor+dt@kernel.org>,
<pthombar@cadence.com>, Witold Sadowski <wsadowski@marvell.com>
Subject: [PATCH 3/5] spi: cadence: Force single modebyte
Date: Fri, 29 Mar 2024 12:48:47 -0700 [thread overview]
Message-ID: <20240329194849.25554-4-wsadowski@marvell.com> (raw)
In-Reply-To: <20240329194849.25554-1-wsadowski@marvell.com>
During dummy-cycles xSPI will switch GPIO into Hi-Z mode.
To prevent unforeseen consequences of that behaviour, force send
single modebyte(0x00).
Modebyte will be send only if number of dummy-cycles is not equal
to 0. Code must also reduce dummycycle byte count by one - as one byte
is send as modebyte.
Signed-off-by: Witold Sadowski <wsadowski@marvell.com>
---
drivers/spi/spi-cadence-xspi.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/spi/spi-cadence-xspi.c b/drivers/spi/spi-cadence-xspi.c
index f570b2920b18..cce14473e88e 100644
--- a/drivers/spi/spi-cadence-xspi.c
+++ b/drivers/spi/spi-cadence-xspi.c
@@ -145,6 +145,9 @@
#define CDNS_XSPI_STIG_DONE_FLAG BIT(0)
#define CDNS_XSPI_TRD_STATUS 0x0104
+#define MODE_NO_OF_BYTES GENMASK(25, 24)
+#define MODEBYTES_COUNT 1
+
/* Helper macros for filling command registers */
#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_1(op, data_phase) ( \
FIELD_PREP(CDNS_XSPI_CMD_INSTR_TYPE, (data_phase) ? \
@@ -157,9 +160,10 @@
FIELD_PREP(CDNS_XSPI_CMD_P1_R2_ADDR3, ((op)->addr.val >> 24) & 0xFF) | \
FIELD_PREP(CDNS_XSPI_CMD_P1_R2_ADDR4, ((op)->addr.val >> 32) & 0xFF))
-#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op) ( \
+#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, modebytes) ( \
FIELD_PREP(CDNS_XSPI_CMD_P1_R3_ADDR5, ((op)->addr.val >> 40) & 0xFF) | \
FIELD_PREP(CDNS_XSPI_CMD_P1_R3_CMD, (op)->cmd.opcode) | \
+ FIELD_PREP(MODE_NO_OF_BYTES, modebytes) | \
FIELD_PREP(CDNS_XSPI_CMD_P1_R3_NUM_ADDR_BYTES, (op)->addr.nbytes))
#define CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_4(op, chipsel) ( \
@@ -173,12 +177,12 @@
#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_2(op) \
FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R2_DCNT_L, (op)->data.nbytes & 0xFFFF)
-#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op) ( \
+#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op, dummybytes) ( \
FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R3_DCNT_H, \
((op)->data.nbytes >> 16) & 0xffff) | \
FIELD_PREP(CDNS_XSPI_CMD_DSEQ_R3_NUM_OF_DUMMY, \
(op)->dummy.buswidth != 0 ? \
- (((op)->dummy.nbytes * 8) / (op)->dummy.buswidth) : \
+ (((dummybytes) * 8) / (op)->dummy.buswidth) : \
0))
#define CDNS_XSPI_CMD_FLD_DSEQ_CMD_4(op, chipsel) ( \
@@ -609,6 +613,7 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi,
u32 cmd_regs[6];
u32 cmd_status;
int ret;
+ int dummybytes = op->dummy.nbytes;
ret = cdns_xspi_wait_for_controller_idle(cdns_xspi);
if (ret < 0)
@@ -623,7 +628,12 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi,
memset(cmd_regs, 0, sizeof(cmd_regs));
cmd_regs[1] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_1(op, data_phase);
cmd_regs[2] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_2(op);
- cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op);
+ if (dummybytes != 0) {
+ cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, 1);
+ dummybytes--;
+ } else {
+ cmd_regs[3] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_3(op, 0);
+ }
cmd_regs[4] = CDNS_XSPI_CMD_FLD_P1_INSTR_CMD_4(op,
cdns_xspi->cur_cs);
@@ -633,7 +643,7 @@ static int cdns_xspi_send_stig_command(struct cdns_xspi_dev *cdns_xspi,
cmd_regs[0] = CDNS_XSPI_STIG_DONE_FLAG;
cmd_regs[1] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_1(op);
cmd_regs[2] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_2(op);
- cmd_regs[3] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op);
+ cmd_regs[3] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_3(op, dummybytes);
cmd_regs[4] = CDNS_XSPI_CMD_FLD_DSEQ_CMD_4(op,
cdns_xspi->cur_cs);
--
2.17.1
next prev parent reply other threads:[~2024-03-29 19:49 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-29 19:48 [PATCH 0/5] Support for Cadence xSPI Marvell modifications Witold Sadowski
2024-03-29 19:48 ` [PATCH 1/5] spi: cadence: Add new bindings documentation for Cadence XSPI Witold Sadowski
2024-03-29 21:09 ` Rob Herring
2024-03-30 11:32 ` Krzysztof Kozlowski
2024-04-29 7:48 ` Krzysztof Kozlowski
2024-03-31 10:43 ` kernel test robot
2024-03-29 19:48 ` [PATCH 2/5] spi: cadence: Add Marvell IP modification changes Witold Sadowski
2024-03-30 11:33 ` Krzysztof Kozlowski
2024-04-29 14:55 ` [EXTERNAL] " Witold Sadowski
2024-04-30 7:56 ` Krzysztof Kozlowski
2024-03-31 7:46 ` kernel test robot
2024-03-31 10:50 ` Krzysztof Kozlowski
2024-03-29 19:48 ` Witold Sadowski [this message]
2024-03-29 19:48 ` [PATCH 4/5] driver: spi: cadence: Add ACPI support Witold Sadowski
2024-03-30 11:36 ` Krzysztof Kozlowski
2024-03-31 7:35 ` kernel test robot
2024-03-29 19:48 ` [PATCH 5/5] cadence-xspi: Add xfer capabilities Witold Sadowski
2024-03-30 11:37 ` Krzysztof Kozlowski
2024-03-31 3:25 ` kernel test robot
2024-04-18 1:13 ` [PATCH v3 0/5] Marvell HW overlay support for Cadence xSPI Witold Sadowski
2024-04-18 1:13 ` [PATCH v3 1/5] spi: cadence: Ensure data lines set to low during dummy-cycle period Witold Sadowski
2024-04-18 1:13 ` [PATCH v3 2/5] spi: cadence: Add MRVL overlay bindings documentation for Cadence XSPI Witold Sadowski
2024-04-18 16:22 ` Conor Dooley
2024-04-29 14:47 ` [EXTERNAL] " Witold Sadowski
2024-04-29 21:33 ` Conor Dooley
2024-04-29 22:59 ` Witold Sadowski
2024-04-30 7:58 ` Krzysztof Kozlowski
2024-04-18 17:48 ` Krzysztof Kozlowski
2024-04-29 14:35 ` [EXTERNAL] " Witold Sadowski
2024-04-18 1:13 ` [PATCH v3 3/5] spi: cadence: Add Marvell xSPI IP overlay changes Witold Sadowski
2024-04-18 19:36 ` kernel test robot
2024-04-18 1:13 ` [PATCH v3 4/5] spi: cadence: Allow to read basic xSPI configuration from ACPI Witold Sadowski
2024-04-18 17:51 ` Krzysztof Kozlowski
2024-04-29 14:30 ` [EXTERNAL] " Witold Sadowski
2024-04-30 8:00 ` Krzysztof Kozlowski
2024-05-08 8:04 ` Witold Sadowski
2024-05-08 11:46 ` Mark Brown
2024-05-09 1:07 ` Witold Sadowski
2024-04-18 1:13 ` [PATCH v3 5/5] spi: cadence: Add MRVL overlay xfer operation support Witold Sadowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240329194849.25554-4-wsadowski@marvell.com \
--to=wsadowski@marvell.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=pthombar@cadence.com \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox