public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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


  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