linux-kernel.vger.kernel.org archive mirror
 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 v4 10/23] drivers/fsi: Add device read/write/peek API
Date: Wed, 29 Mar 2017 12:43:27 -0500	[thread overview]
Message-ID: <20170329174340.89109-11-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170329174340.89109-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-03-29 17:44 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-29 17:43 [PATCH v4 00/23] FSI device driver implementation Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 01/23] drivers/fsi: Add fsi master definition Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 02/23] drivers/fsi: Add slave definition Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 03/23] drivers/fsi: Add empty master scan Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 04/23] drivers/fsi: Add crc4 helpers Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 05/23] drivers/fsi: Add slave & master read/write APIs Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 06/23] drivers/fsi: Set up links for slave communication Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 07/23] drivers/fsi: Implement slave initialisation Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 08/23] drivers/fsi: Set slave SMODE to init communication Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 09/23] drivers/fsi: scan slaves & register devices Christopher Bostic
2017-03-29 17:43 ` Christopher Bostic [this message]
2017-03-29 17:43 ` [PATCH v4 11/23] drivers/fsi: Add master unscan Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 12/23] drivers/fsi: Add documentation for GPIO bindings Christopher Bostic
2017-04-03 15:24   ` Rob Herring
2017-03-29 17:43 ` [PATCH v4 13/23] drivers/fsi: Add client driver register utilities Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 14/23] drivers/fsi: Add sysfs files for FSI master & slave accesses Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 15/23] drivers/fsi: expose direct-access slave API Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 16/23] drivers/fsi: Add tracepoints for low-level operations Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 17/23] drivers/fsi: Add error handling for slave communication errors Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 18/23] drivers/fsi: Document FSI master sysfs files in ABI Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 19/23] drivers/fsi: Add GPIO based FSI master Christopher Bostic
2017-03-30  5:48   ` Joel Stanley
2017-03-30 18:15     ` Christopher Bostic
2017-03-30 20:50       ` Benjamin Herrenschmidt
2017-04-04 17:32         ` Christopher Bostic
2017-04-04 22:19           ` Benjamin Herrenschmidt
2017-04-05  1:24             ` Christopher Bostic
2017-04-09 21:22             ` Christopher Bostic
2017-04-09 21:41               ` Benjamin Herrenschmidt
2017-04-09 21:53                 ` Benjamin Herrenschmidt
2017-04-09 21:55                   ` Benjamin Herrenschmidt
2017-03-30 22:57       ` Joel Stanley
2017-03-29 17:43 ` [PATCH v4 20/23] drivers/fsi/gpio: Add tracepoints for GPIO master Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 21/23] drivers/fsi: Add SCOM FSI client device driver Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 22/23] drivers/fsi: Add hub master support Christopher Bostic
2017-03-29 17:43 ` [PATCH v4 23/23] drivers/fsi: Use asynchronous slave mode 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=20170329174340.89109-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).