All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhiqiang Hou <B48286-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
To: <linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Cc: <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	<B21284-KZfg59tc24xl57MIdRCFDg@public.gmane.org>,
	Hou Zhiqiang <B48286-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Subject: [PATCH 3/3] spi/fsl-espi: Add the 4Byte address width device support
Date: Sun, 10 May 2015 22:47:33 +0800	[thread overview]
Message-ID: <1431269253-22890-3-git-send-email-B48286@freescale.com> (raw)
In-Reply-To: <1431269253-22890-1-git-send-email-B48286-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

From: Hou Zhiqiang <B48286-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

Get the address width information from the spi_message to correct the
address to operate.

when the one-time transfer length exceed the max limited length of eSPI
controller 0xFFFF, for the subsequent transfer, the address to operate
need to be corrected.

Signed-off-by: Hou Zhiqiang <B48286-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/spi/spi-fsl-espi.c | 32 +++++++++++++++++++++++---------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c
index d0a73a0..59931d3 100644
--- a/drivers/spi/spi-fsl-espi.c
+++ b/drivers/spi/spi-fsl-espi.c
@@ -250,19 +250,31 @@ static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)
 	return mpc8xxx_spi->count;
 }
 
-static inline void fsl_espi_addr2cmd(unsigned int addr, u8 *cmd)
+static inline void fsl_espi_addr2cmd(unsigned int addr, u8 *cmd, u8 addr_width)
 {
 	if (cmd) {
-		cmd[1] = (u8)(addr >> 16);
-		cmd[2] = (u8)(addr >> 8);
-		cmd[3] = (u8)(addr >> 0);
+		if (addr_width == 3) {
+			cmd[1] = (u8)(addr >> 16);
+			cmd[2] = (u8)(addr >> 8);
+			cmd[3] = (u8)(addr >> 0);
+		} else if (addr_width == 4) {
+			cmd[1] = (u8)(addr >> 24);
+			cmd[2] = (u8)(addr >> 16);
+			cmd[3] = (u8)(addr >> 8);
+			cmd[4] = (u8)(addr >> 0);
+		}
 	}
 }
 
-static inline unsigned int fsl_espi_cmd2addr(u8 *cmd)
+static inline unsigned int fsl_espi_cmd2addr(u8 *cmd, u8 addr_width)
 {
-	if (cmd)
-		return cmd[1] << 16 | cmd[2] << 8 | cmd[3] << 0;
+	if (cmd) {
+		if (addr_width == 3)
+			return cmd[1] << 16 | cmd[2] << 8 | cmd[3] << 0;
+		else if (addr_width == 4)
+			return cmd[1] << 24 | cmd[2] << 16
+				| cmd[3] << 8 | cmd[4] << 0;
+	}
 
 	return 0;
 }
@@ -367,7 +379,9 @@ static void fsl_espi_rw_trans(struct spi_message *m,
 	unsigned int trans_len;
 	unsigned int addr;
 	int i, pos, loop;
+	u8 addr_width;
 
+	addr_width = m->addr_width;
 	local_buf = kzalloc(SPCOM_TRANLEN_MAX, GFP_KERNEL);
 	if (!local_buf) {
 		espi_trans->status = -ENOMEM;
@@ -388,9 +402,9 @@ static void fsl_espi_rw_trans(struct spi_message *m,
 		}
 
 		if (pos > 0) {
-			addr = fsl_espi_cmd2addr(local_buf);
+			addr = fsl_espi_cmd2addr(local_buf, addr_width);
 			addr += pos;
-			fsl_espi_addr2cmd(addr, local_buf);
+			fsl_espi_addr2cmd(addr, local_buf, addr_width);
 		}
 
 		espi_trans->n_tx = n_tx;
-- 
2.1.0.27.g96db324

--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2015-05-10 14:47 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-10 14:47 [PATCH 1/3] spi: Add addr_width field to struct spi_message Zhiqiang Hou
     [not found] ` <1431269253-22890-1-git-send-email-B48286-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-05-10 14:47   ` [PATCH 2/3] mtd: m25p80: Initialize the addr_width field of spi_message Zhiqiang Hou
2015-05-10 14:47   ` Zhiqiang Hou [this message]
     [not found]     ` <1431269253-22890-3-git-send-email-B48286-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-05-11  7:45       ` [PATCH 3/3] spi/fsl-espi: Add the 4Byte address width device support Geert Uytterhoeven
2015-05-11  7:43   ` [PATCH 1/3] spi: Add addr_width field to struct spi_message Geert Uytterhoeven
     [not found]     ` <CAMuHMdUakeDgLZ4hXe0DBu97Xx4eiC9K_Qfc-imkDBrDBXNs6A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-11 16:17       ` Mark Brown
2015-05-12  8:06       ` Hou Zhiqiang
     [not found]         ` <CY1PR0301MB0780A4057DBB4DEBC45A631F8BDA0-YrwGdl+PljnwWZenWrSUgZwN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>
2015-05-12  8:11           ` Geert Uytterhoeven
     [not found]             ` <CAMuHMdUzkr6_evPD5y-gaH=rtEgyZ+bHAddD+UmpTssQXZry1g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-12  8:27               ` Hou Zhiqiang
     [not found]                 ` <CY1PR0301MB078056CF0855A97334FD96458BDA0-YrwGdl+PljnwWZenWrSUgZwN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>
2015-05-12  8:57                   ` Geert Uytterhoeven
     [not found]                     ` <CAMuHMdXFY_W6Rd37rNeNUnztZ=8xUcZBS3=eLQwK52N6byGgBg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-12 10:23                       ` Mark Brown

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=1431269253-22890-3-git-send-email-B48286@freescale.com \
    --to=b48286-kzfg59tc24xl57midrcfdg@public.gmane.org \
    --cc=B21284-KZfg59tc24xl57MIdRCFDg@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.