All of lore.kernel.org
 help / color / mirror / Atom feed
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,
	"Edward A . James" <eajames@us.ibm.com>,
	Chris Bostic <cbostic@linux.vnet.ibm.com>
Subject: [PATCH v5 10/23] drivers/fsi: Add device read/write/peek API
Date: Tue,  4 Apr 2017 21:05:54 -0500	[thread overview]
Message-ID: <20170405020607.79939-11-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170405020607.79939-1-cbostic@linux.vnet.ibm.com>

From: Jeremy Kerr <jk@ozlabs.org>

This change introduces the fsi device API: simple read, write and peek
accessors for the devices' address spaces.

Includes contributions from Chris Bostic <cbostic@linux.vnet.ibm.com>
and Edward A. James <eajames@us.ibm.com>.

Signed-off-by: Edward A. James <eajames@us.ibm.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Chris Bostic <cbostic@linux.vnet.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
 drivers/fsi/fsi-core.c | 33 +++++++++++++++++++++++++++++++++
 include/linux/fsi.h    |  7 ++++++-
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index a8faa89..4da0b030 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -32,6 +32,8 @@
 #define FSI_SLAVE_CONF_CRC_MASK		0x0000000f
 #define FSI_SLAVE_CONF_DATA_BITS	28
 
+#define FSI_PEEK_BASE			0x410
+
 static const int engine_page_size = 0x400;
 
 #define FSI_SLAVE_BASE			0x800
@@ -73,9 +75,40 @@ static int fsi_master_read(struct fsi_master *master, int link,
 		uint8_t slave_id, uint32_t addr, void *val, size_t size);
 static int fsi_master_write(struct fsi_master *master, int link,
 		uint8_t slave_id, uint32_t addr, const void *val, size_t size);
+static int fsi_slave_read(struct fsi_slave *slave, uint32_t addr,
+		void *val, size_t size);
+static int fsi_slave_write(struct fsi_slave *slave, uint32_t addr,
+		const void *val, size_t size);
 
 /* FSI endpoint-device support */
 
+int fsi_device_read(struct fsi_device *dev, uint32_t addr, void *val,
+		size_t size)
+{
+	if (addr > dev->size || size > dev->size || addr > dev->size - size)
+		return -EINVAL;
+
+	return fsi_slave_read(dev->slave, dev->addr + addr, val, size);
+}
+EXPORT_SYMBOL_GPL(fsi_device_read);
+
+int fsi_device_write(struct fsi_device *dev, uint32_t addr, const void *val,
+		size_t size)
+{
+	if (addr > dev->size || size > dev->size || addr > dev->size - size)
+		return -EINVAL;
+
+	return fsi_slave_write(dev->slave, dev->addr + addr, val, size);
+}
+EXPORT_SYMBOL_GPL(fsi_device_write);
+
+int fsi_device_peek(struct fsi_device *dev, void *val)
+{
+	uint32_t addr = FSI_PEEK_BASE + ((dev->unit - 2) * sizeof(uint32_t));
+
+	return fsi_slave_read(dev->slave, addr, val, sizeof(uint32_t));
+}
+
 static void fsi_device_release(struct device *_device)
 {
 	struct fsi_device *device = to_fsi_dev(_device);
diff --git a/include/linux/fsi.h b/include/linux/fsi.h
index efa55ba..66bce48 100644
--- a/include/linux/fsi.h
+++ b/include/linux/fsi.h
@@ -27,6 +27,12 @@ struct fsi_device {
 	uint32_t		size;
 };
 
+extern int fsi_device_read(struct fsi_device *dev, uint32_t addr,
+		void *val, size_t size);
+extern int fsi_device_write(struct fsi_device *dev, uint32_t addr,
+		const void *val, size_t size);
+extern int fsi_device_peek(struct fsi_device *dev, void *val);
+
 struct fsi_device_id {
 	u8	engine_type;
 	u8	version;
@@ -40,7 +46,6 @@ struct fsi_device_id {
 #define FSI_DEVICE_VERSIONED(t, v) \
 	.engine_type = (t), .version = (v),
 
-
 struct fsi_driver {
 	struct device_driver		drv;
 	const struct fsi_device_id	*id_table;
-- 
1.8.2.2

WARNING: multiple messages have this Message-ID (diff)
From: Christopher Bostic <cbostic-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
To: robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	mark.rutland-5wv7dgnIgG8@public.gmane.org,
	linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org,
	rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org,
	mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Jeremy Kerr <jk-mnsaURCQ41sdnm+yROfE0A@public.gmane.org>,
	joel-U3u1mxZcP9KHXe+LvDLADg@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	andrew-zrmu5oMJ5Fs@public.gmane.org,
	alistair-Y4h6yKqj69EXC2x5gXVKYQ@public.gmane.org,
	benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org,
	"Edward A . James"
	<eajames-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>,
	Chris Bostic
	<cbostic-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Subject: [PATCH v5 10/23] drivers/fsi: Add device read/write/peek API
Date: Tue,  4 Apr 2017 21:05:54 -0500	[thread overview]
Message-ID: <20170405020607.79939-11-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170405020607.79939-1-cbostic-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>

From: Jeremy Kerr <jk-mnsaURCQ41sdnm+yROfE0A@public.gmane.org>

This change introduces the fsi device API: simple read, write and peek
accessors for the devices' address spaces.

Includes contributions from Chris Bostic <cbostic-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
and Edward A. James <eajames-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>.

Signed-off-by: Edward A. James <eajames-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Signed-off-by: Jeremy Kerr <jk-mnsaURCQ41sdnm+yROfE0A@public.gmane.org>
Signed-off-by: Chris Bostic <cbostic-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Signed-off-by: Joel Stanley <joel-U3u1mxZcP9KHXe+LvDLADg@public.gmane.org>
---
 drivers/fsi/fsi-core.c | 33 +++++++++++++++++++++++++++++++++
 include/linux/fsi.h    |  7 ++++++-
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index a8faa89..4da0b030 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -32,6 +32,8 @@
 #define FSI_SLAVE_CONF_CRC_MASK		0x0000000f
 #define FSI_SLAVE_CONF_DATA_BITS	28
 
+#define FSI_PEEK_BASE			0x410
+
 static const int engine_page_size = 0x400;
 
 #define FSI_SLAVE_BASE			0x800
@@ -73,9 +75,40 @@ static int fsi_master_read(struct fsi_master *master, int link,
 		uint8_t slave_id, uint32_t addr, void *val, size_t size);
 static int fsi_master_write(struct fsi_master *master, int link,
 		uint8_t slave_id, uint32_t addr, const void *val, size_t size);
+static int fsi_slave_read(struct fsi_slave *slave, uint32_t addr,
+		void *val, size_t size);
+static int fsi_slave_write(struct fsi_slave *slave, uint32_t addr,
+		const void *val, size_t size);
 
 /* FSI endpoint-device support */
 
+int fsi_device_read(struct fsi_device *dev, uint32_t addr, void *val,
+		size_t size)
+{
+	if (addr > dev->size || size > dev->size || addr > dev->size - size)
+		return -EINVAL;
+
+	return fsi_slave_read(dev->slave, dev->addr + addr, val, size);
+}
+EXPORT_SYMBOL_GPL(fsi_device_read);
+
+int fsi_device_write(struct fsi_device *dev, uint32_t addr, const void *val,
+		size_t size)
+{
+	if (addr > dev->size || size > dev->size || addr > dev->size - size)
+		return -EINVAL;
+
+	return fsi_slave_write(dev->slave, dev->addr + addr, val, size);
+}
+EXPORT_SYMBOL_GPL(fsi_device_write);
+
+int fsi_device_peek(struct fsi_device *dev, void *val)
+{
+	uint32_t addr = FSI_PEEK_BASE + ((dev->unit - 2) * sizeof(uint32_t));
+
+	return fsi_slave_read(dev->slave, addr, val, sizeof(uint32_t));
+}
+
 static void fsi_device_release(struct device *_device)
 {
 	struct fsi_device *device = to_fsi_dev(_device);
diff --git a/include/linux/fsi.h b/include/linux/fsi.h
index efa55ba..66bce48 100644
--- a/include/linux/fsi.h
+++ b/include/linux/fsi.h
@@ -27,6 +27,12 @@ struct fsi_device {
 	uint32_t		size;
 };
 
+extern int fsi_device_read(struct fsi_device *dev, uint32_t addr,
+		void *val, size_t size);
+extern int fsi_device_write(struct fsi_device *dev, uint32_t addr,
+		const void *val, size_t size);
+extern int fsi_device_peek(struct fsi_device *dev, void *val);
+
 struct fsi_device_id {
 	u8	engine_type;
 	u8	version;
@@ -40,7 +46,6 @@ struct fsi_device_id {
 #define FSI_DEVICE_VERSIONED(t, v) \
 	.engine_type = (t), .version = (v),
 
-
 struct fsi_driver {
 	struct device_driver		drv;
 	const struct fsi_device_id	*id_table;
-- 
1.8.2.2

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

WARNING: multiple messages have this Message-ID (diff)
From: cbostic@linux.vnet.ibm.com (Christopher Bostic)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 10/23] drivers/fsi: Add device read/write/peek API
Date: Tue,  4 Apr 2017 21:05:54 -0500	[thread overview]
Message-ID: <20170405020607.79939-11-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170405020607.79939-1-cbostic@linux.vnet.ibm.com>

From: Jeremy Kerr <jk@ozlabs.org>

This change introduces the fsi device API: simple read, write and peek
accessors for the devices' address spaces.

Includes contributions from Chris Bostic <cbostic@linux.vnet.ibm.com>
and Edward A. James <eajames@us.ibm.com>.

Signed-off-by: Edward A. James <eajames@us.ibm.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Chris Bostic <cbostic@linux.vnet.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
 drivers/fsi/fsi-core.c | 33 +++++++++++++++++++++++++++++++++
 include/linux/fsi.h    |  7 ++++++-
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index a8faa89..4da0b030 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -32,6 +32,8 @@
 #define FSI_SLAVE_CONF_CRC_MASK		0x0000000f
 #define FSI_SLAVE_CONF_DATA_BITS	28
 
+#define FSI_PEEK_BASE			0x410
+
 static const int engine_page_size = 0x400;
 
 #define FSI_SLAVE_BASE			0x800
@@ -73,9 +75,40 @@ static int fsi_master_read(struct fsi_master *master, int link,
 		uint8_t slave_id, uint32_t addr, void *val, size_t size);
 static int fsi_master_write(struct fsi_master *master, int link,
 		uint8_t slave_id, uint32_t addr, const void *val, size_t size);
+static int fsi_slave_read(struct fsi_slave *slave, uint32_t addr,
+		void *val, size_t size);
+static int fsi_slave_write(struct fsi_slave *slave, uint32_t addr,
+		const void *val, size_t size);
 
 /* FSI endpoint-device support */
 
+int fsi_device_read(struct fsi_device *dev, uint32_t addr, void *val,
+		size_t size)
+{
+	if (addr > dev->size || size > dev->size || addr > dev->size - size)
+		return -EINVAL;
+
+	return fsi_slave_read(dev->slave, dev->addr + addr, val, size);
+}
+EXPORT_SYMBOL_GPL(fsi_device_read);
+
+int fsi_device_write(struct fsi_device *dev, uint32_t addr, const void *val,
+		size_t size)
+{
+	if (addr > dev->size || size > dev->size || addr > dev->size - size)
+		return -EINVAL;
+
+	return fsi_slave_write(dev->slave, dev->addr + addr, val, size);
+}
+EXPORT_SYMBOL_GPL(fsi_device_write);
+
+int fsi_device_peek(struct fsi_device *dev, void *val)
+{
+	uint32_t addr = FSI_PEEK_BASE + ((dev->unit - 2) * sizeof(uint32_t));
+
+	return fsi_slave_read(dev->slave, addr, val, sizeof(uint32_t));
+}
+
 static void fsi_device_release(struct device *_device)
 {
 	struct fsi_device *device = to_fsi_dev(_device);
diff --git a/include/linux/fsi.h b/include/linux/fsi.h
index efa55ba..66bce48 100644
--- a/include/linux/fsi.h
+++ b/include/linux/fsi.h
@@ -27,6 +27,12 @@ struct fsi_device {
 	uint32_t		size;
 };
 
+extern int fsi_device_read(struct fsi_device *dev, uint32_t addr,
+		void *val, size_t size);
+extern int fsi_device_write(struct fsi_device *dev, uint32_t addr,
+		const void *val, size_t size);
+extern int fsi_device_peek(struct fsi_device *dev, void *val);
+
 struct fsi_device_id {
 	u8	engine_type;
 	u8	version;
@@ -40,7 +46,6 @@ struct fsi_device_id {
 #define FSI_DEVICE_VERSIONED(t, v) \
 	.engine_type = (t), .version = (v),
 
-
 struct fsi_driver {
 	struct device_driver		drv;
 	const struct fsi_device_id	*id_table;
-- 
1.8.2.2

  parent reply	other threads:[~2017-04-05  2:08 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-05  2:05 [PATCH v5 00/23] FSI device driver implementation Christopher Bostic
2017-04-05  2:05 ` Christopher Bostic
2017-04-05  2:05 ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 01/23] drivers/fsi: Add fsi master definition Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 02/23] drivers/fsi: Add slave definition Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 03/23] drivers/fsi: Add empty master scan Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 04/23] drivers/fsi: Add crc4 helpers Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 05/23] drivers/fsi: Add slave & master read/write APIs Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 06/23] drivers/fsi: Set up links for slave communication Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 07/23] drivers/fsi: Implement slave initialisation Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 08/23] drivers/fsi: Set slave SMODE to init communication Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 09/23] drivers/fsi: scan slaves & register devices Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` Christopher Bostic [this message]
2017-04-05  2:05   ` [PATCH v5 10/23] drivers/fsi: Add device read/write/peek API Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 11/23] drivers/fsi: Add master unscan Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 12/23] drivers/fsi: Add documentation for GPIO bindings Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 13/23] drivers/fsi: Add client driver register utilities Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 14/23] drivers/fsi: Add sysfs files for FSI master & slave accesses Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:05 ` [PATCH v5 15/23] drivers/fsi: expose direct-access slave API Christopher Bostic
2017-04-05  2:05   ` Christopher Bostic
2017-04-05  2:06 ` [PATCH v5 16/23] drivers/fsi: Add tracepoints for low-level operations Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06 ` [PATCH v5 17/23] drivers/fsi: Add error handling for slave communication errors Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06 ` [PATCH v5 18/23] drivers/fsi: Document FSI master sysfs files in ABI Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06 ` [PATCH v5 19/23] drivers/fsi: Add GPIO based FSI master Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05 16:35   ` Randy Dunlap
2017-04-05 16:35     ` Randy Dunlap
2017-04-05 16:35     ` Randy Dunlap
2017-04-09 21:04     ` Christopher Bostic
2017-04-09 21:04       ` Christopher Bostic
2017-04-09 21:04       ` Christopher Bostic
2017-04-05  2:06 ` [PATCH v5 20/23] drivers/fsi/gpio: Add tracepoints for GPIO master Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06 ` [PATCH v5 21/23] drivers/fsi: Add SCOM FSI client device driver Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05 16:35   ` Randy Dunlap
2017-04-05 16:35     ` Randy Dunlap
2017-04-05 16:35     ` Randy Dunlap
2017-04-09 21:06     ` Christopher Bostic
2017-04-09 21:06       ` Christopher Bostic
2017-04-09 21:06       ` Christopher Bostic
2017-04-05  2:06 ` [PATCH v5 22/23] drivers/fsi: Add hub master support Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05 16:36   ` Randy Dunlap
2017-04-05 16:36     ` Randy Dunlap
2017-04-05 16:36     ` Randy Dunlap
2017-04-09 21:07     ` Christopher Bostic
2017-04-09 21:07       ` Christopher Bostic
2017-04-09 21:07       ` Christopher Bostic
2017-04-05  2:06 ` [PATCH v5 23/23] drivers/fsi: Use asynchronous slave mode Christopher Bostic
2017-04-05  2:06   ` Christopher Bostic
2017-04-05  2:06   ` 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=20170405020607.79939-11-cbostic@linux.vnet.ibm.com \
    --to=cbostic@linux.vnet.ibm.com \
    --cc=alistair@popple.id.au \
    --cc=andrew@aj.id.au \
    --cc=benh@kernel.crashing.org \
    --cc=devicetree@vger.kernel.org \
    --cc=eajames@us.ibm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jk@ozlabs.org \
    --cc=joel@jms.id.au \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=robh+dt@kernel.org \
    --cc=rostedt@goodmis.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.