All of lore.kernel.org
 help / color / mirror / Atom feed
From: cbostic@linux.vnet.ibm.com (Christopher Bostic)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 23/23] drivers/fsi: Use asynchronous slave mode
Date: Thu, 11 May 2017 16:01:00 -0500	[thread overview]
Message-ID: <20170511210101.78409-24-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170511210101.78409-1-cbostic@linux.vnet.ibm.com>

From: Jeremy Kerr <jk@ozlabs.org>

For slaves that are behind a software-clocked master, we want FSI CFAMs
to run asynchronously to the FSI clock, so set up our slaves to be in
async mode.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Christopher Bostic <cbostic@linux.vnet.ibm.com>
---
 drivers/fsi/fsi-core.c        | 22 +++++++++++++++++++++-
 drivers/fsi/fsi-master-gpio.c |  1 +
 drivers/fsi/fsi-master.h      |  2 ++
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index 6e7d778..f19f87a 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -49,6 +49,7 @@
 #define FSI_SMODE		0x0	/* R/W: Mode register */
 #define FSI_SISC		0x8	/* R/W: Interrupt condition */
 #define FSI_SSTAT		0x14	/* R  : Slave status */
+#define FSI_LLMODE		0x100	/* R/W: Link layer mode register */
 
 /*
  * SMODE fields
@@ -64,6 +65,11 @@
 #define FSI_SMODE_LBCRR_SHIFT	8		/* Clk ratio shift */
 #define FSI_SMODE_LBCRR_MASK	0xf		/* Clk ratio mask */
 
+/*
+ * LLMODE fields
+ */
+#define FSI_LLMODE_ASYNC	0x1
+
 #define FSI_SLAVE_SIZE_23b		0x800000
 
 static DEFINE_IDA(master_ida);
@@ -553,8 +559,8 @@ static void fsi_slave_release(struct device *dev)
 
 static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id)
 {
+	uint32_t chip_id, llmode;
 	struct fsi_slave *slave;
-	uint32_t chip_id;
 	uint8_t crc;
 	int rc;
 
@@ -590,6 +596,20 @@ static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id)
 		return -ENODEV;
 	}
 
+	/* If we're behind a master that doesn't provide a self-running bus
+	 * clock, put the slave into async mode
+	 */
+	if (master->flags & FSI_MASTER_FLAG_SWCLOCK) {
+		llmode = cpu_to_be32(FSI_LLMODE_ASYNC);
+		rc = fsi_master_write(master, link, id,
+				FSI_SLAVE_BASE + FSI_LLMODE,
+				&llmode, sizeof(llmode));
+		if (rc)
+			dev_warn(&master->dev,
+				"can't set llmode on slave:%02x:%02x %d\n",
+				link, id, rc);
+	}
+
 	/* We can communicate with a slave; create the slave device and
 	 * register.
 	 */
diff --git a/drivers/fsi/fsi-master-gpio.c b/drivers/fsi/fsi-master-gpio.c
index a5d6e70..ae26187 100644
--- a/drivers/fsi/fsi-master-gpio.c
+++ b/drivers/fsi/fsi-master-gpio.c
@@ -554,6 +554,7 @@ static int fsi_master_gpio_probe(struct platform_device *pdev)
 	master->gpio_mux = gpio;
 
 	master->master.n_links = 1;
+	master->master.flags = FSI_MASTER_FLAG_SWCLOCK;
 	master->master.read = fsi_master_gpio_read;
 	master->master.write = fsi_master_gpio_write;
 	master->master.term = fsi_master_gpio_term;
diff --git a/drivers/fsi/fsi-master.h b/drivers/fsi/fsi-master.h
index 7764b00..12f7b11 100644
--- a/drivers/fsi/fsi-master.h
+++ b/drivers/fsi/fsi-master.h
@@ -19,6 +19,8 @@
 
 #include <linux/device.h>
 
+#define FSI_MASTER_FLAG_SWCLOCK		0x1
+
 struct fsi_master {
 	struct device	dev;
 	int		idx;
-- 
1.8.2.2

WARNING: multiple messages have this Message-ID (diff)
From: Christopher Bostic <cbostic@linux.vnet.ibm.com>
To: robh+dt@kernel.org, mark.rutland@arm.com, linux@armlinux.org.uk,
	rostedt@goodmis.org, mingo@redhat.com,
	gregkh@linuxfoundation.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Cc: Jeremy Kerr <jk@ozlabs.org>,
	joel@jms.id.au, linux-kernel@vger.kernel.org, andrew@aj.id.au,
	alistair@popple.id.au, benh@kernel.crashing.org,
	Christopher Bostic <cbostic@linux.vnet.ibm.com>
Subject: [PATCH v7 23/23] drivers/fsi: Use asynchronous slave mode
Date: Thu, 11 May 2017 16:01:00 -0500	[thread overview]
Message-ID: <20170511210101.78409-24-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170511210101.78409-1-cbostic@linux.vnet.ibm.com>

From: Jeremy Kerr <jk@ozlabs.org>

For slaves that are behind a software-clocked master, we want FSI CFAMs
to run asynchronously to the FSI clock, so set up our slaves to be in
async mode.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Christopher Bostic <cbostic@linux.vnet.ibm.com>
---
 drivers/fsi/fsi-core.c        | 22 +++++++++++++++++++++-
 drivers/fsi/fsi-master-gpio.c |  1 +
 drivers/fsi/fsi-master.h      |  2 ++
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index 6e7d778..f19f87a 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -49,6 +49,7 @@
 #define FSI_SMODE		0x0	/* R/W: Mode register */
 #define FSI_SISC		0x8	/* R/W: Interrupt condition */
 #define FSI_SSTAT		0x14	/* R  : Slave status */
+#define FSI_LLMODE		0x100	/* R/W: Link layer mode register */
 
 /*
  * SMODE fields
@@ -64,6 +65,11 @@
 #define FSI_SMODE_LBCRR_SHIFT	8		/* Clk ratio shift */
 #define FSI_SMODE_LBCRR_MASK	0xf		/* Clk ratio mask */
 
+/*
+ * LLMODE fields
+ */
+#define FSI_LLMODE_ASYNC	0x1
+
 #define FSI_SLAVE_SIZE_23b		0x800000
 
 static DEFINE_IDA(master_ida);
@@ -553,8 +559,8 @@ static void fsi_slave_release(struct device *dev)
 
 static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id)
 {
+	uint32_t chip_id, llmode;
 	struct fsi_slave *slave;
-	uint32_t chip_id;
 	uint8_t crc;
 	int rc;
 
@@ -590,6 +596,20 @@ static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id)
 		return -ENODEV;
 	}
 
+	/* If we're behind a master that doesn't provide a self-running bus
+	 * clock, put the slave into async mode
+	 */
+	if (master->flags & FSI_MASTER_FLAG_SWCLOCK) {
+		llmode = cpu_to_be32(FSI_LLMODE_ASYNC);
+		rc = fsi_master_write(master, link, id,
+				FSI_SLAVE_BASE + FSI_LLMODE,
+				&llmode, sizeof(llmode));
+		if (rc)
+			dev_warn(&master->dev,
+				"can't set llmode on slave:%02x:%02x %d\n",
+				link, id, rc);
+	}
+
 	/* We can communicate with a slave; create the slave device and
 	 * register.
 	 */
diff --git a/drivers/fsi/fsi-master-gpio.c b/drivers/fsi/fsi-master-gpio.c
index a5d6e70..ae26187 100644
--- a/drivers/fsi/fsi-master-gpio.c
+++ b/drivers/fsi/fsi-master-gpio.c
@@ -554,6 +554,7 @@ static int fsi_master_gpio_probe(struct platform_device *pdev)
 	master->gpio_mux = gpio;
 
 	master->master.n_links = 1;
+	master->master.flags = FSI_MASTER_FLAG_SWCLOCK;
 	master->master.read = fsi_master_gpio_read;
 	master->master.write = fsi_master_gpio_write;
 	master->master.term = fsi_master_gpio_term;
diff --git a/drivers/fsi/fsi-master.h b/drivers/fsi/fsi-master.h
index 7764b00..12f7b11 100644
--- a/drivers/fsi/fsi-master.h
+++ b/drivers/fsi/fsi-master.h
@@ -19,6 +19,8 @@
 
 #include <linux/device.h>
 
+#define FSI_MASTER_FLAG_SWCLOCK		0x1
+
 struct fsi_master {
 	struct device	dev;
 	int		idx;
-- 
1.8.2.2

  parent reply	other threads:[~2017-05-11 21:01 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-11 21:00 [PATCH v7 00/23] FSI device driver implementation Christopher Bostic
2017-05-11 21:00 ` Christopher Bostic
2017-05-11 21:00 ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 01/23] drivers/fsi: Add fsi master definition Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 02/23] drivers/fsi: Add slave definition Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 03/23] drivers/fsi: Add empty master scan Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 04/23] lib: Add crc4 module Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 05/23] drivers/fsi: Add slave & master read/write APIs Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 06/23] drivers/fsi: Set up links for slave communication Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 07/23] drivers/fsi: Implement slave initialisation Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 08/23] drivers/fsi: Set slave SMODE to init communication Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 09/23] drivers/fsi: scan slaves & register devices Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 10/23] drivers/fsi: Add device read/write/peek API Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 11/23] drivers/fsi: Add master unscan Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 12/23] drivers/fsi: Add documentation for GPIO bindings Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 13/23] drivers/fsi: Add client driver register utilities Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 14/23] drivers/fsi: Add sysfs files for FSI master & slave accesses Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 15/23] drivers/fsi: expose direct-access slave API Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 16/23] drivers/fsi: Add tracepoints for low-level operations Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 17/23] drivers/fsi: Add error handling for slave Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 18/23] drivers/fsi: Document FSI master sysfs files in ABI Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 19/23] drivers/fsi: Add GPIO based FSI master Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 20/23] drivers/fsi/gpio: Add tracepoints for GPIO master Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 21/23] drivers/fsi: Add SCOM FSI client device driver Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:00 ` [PATCH v7 22/23] drivers/fsi: Add hub master support Christopher Bostic
2017-05-11 21:00   ` Christopher Bostic
2017-05-11 21:01 ` Christopher Bostic [this message]
2017-05-11 21:01   ` [PATCH v7 23/23] drivers/fsi: Use asynchronous slave mode Christopher Bostic
2017-05-31 17:17 ` [PATCH v7 00/23] FSI device driver implementation Christopher Bostic
2017-05-31 17:17   ` Christopher Bostic
2017-05-31 17:17   ` Christopher Bostic
2017-06-03 10:05   ` Greg KH
2017-06-03 10:05     ` Greg KH
2017-06-03 10:05     ` Greg KH
2017-06-03 21:25     ` Steven Rostedt
2017-06-03 21:25       ` Steven Rostedt
2017-06-03 21:25       ` Steven Rostedt
2017-06-05 19:21       ` Christopher Bostic
2017-06-05 19:21         ` Christopher Bostic
2017-06-05 19:21         ` Christopher Bostic
2017-06-05 19:20     ` Christopher Bostic
2017-06-05 19:20       ` Christopher Bostic
2017-06-05 19:20       ` Christopher Bostic

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=20170511210101.78409-24-cbostic@linux.vnet.ibm.com \
    --to=cbostic@linux.vnet.ibm.com \
    --cc=linux-arm-kernel@lists.infradead.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.