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, Chris Bostic <cbostic@linux.vnet.ibm.com> Subject: [PATCH v6 07/23] drivers/fsi: Implement slave initialisation Date: Mon, 10 Apr 2017 14:46:50 -0500 [thread overview] Message-ID: <20170410194706.64280-8-cbostic@linux.vnet.ibm.com> (raw) In-Reply-To: <20170410194706.64280-1-cbostic@linux.vnet.ibm.com> From: Jeremy Kerr <jk@ozlabs.org> Implement fsi_slave_init: if we can read a chip ID, create fsi_slave devices and register with the driver core. Includes changes from Chris Bostic <cbostic@linux.vnet.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 | 66 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c index 6e1cfdf..c705ca2 100644 --- a/drivers/fsi/fsi-core.c +++ b/drivers/fsi/fsi-core.c @@ -17,9 +17,12 @@ #include <linux/fsi.h> #include <linux/idr.h> #include <linux/module.h> +#include <linux/slab.h> #include "fsi-master.h" +#define FSI_SLAVE_SIZE_23b 0x800000 + static DEFINE_IDA(master_ida); struct fsi_slave { @@ -114,11 +117,70 @@ static int fsi_slave_write(struct fsi_slave *slave, uint32_t addr, addr, val, size); } +static void fsi_slave_release(struct device *dev) +{ + struct fsi_slave *slave = to_fsi_slave(dev); + + kfree(slave); +} + static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id) { - /* todo: initialise slave device, perform engine scan */ + struct fsi_slave *slave; + uint32_t chip_id; + uint8_t crc; + int rc; + + /* Currently, we only support single slaves on a link, and use the + * full 23-bit address range + */ + if (id != 0) + return -EINVAL; + + rc = fsi_master_read(master, link, id, 0, &chip_id, sizeof(chip_id)); + if (rc) { + dev_warn(&master->dev, "can't read slave %02x:%02x %d\n", + link, id, rc); + return -ENODEV; + } + chip_id = be32_to_cpu(chip_id); + + crc = fsi_crc4(0, chip_id, 32); + if (crc) { + dev_warn(&master->dev, "slave %02x:%02x invalid chip id CRC!\n", + link, id); + return -EIO; + } + + dev_info(&master->dev, "fsi: found chip %08x at %02x:%02x:%02x\n", + chip_id, master->idx, link, id); + + /* We can communicate with a slave; create the slave device and + * register. + */ + slave = kzalloc(sizeof(*slave), GFP_KERNEL); + if (!slave) + return -ENOMEM; + + slave->master = master; + slave->dev.parent = &master->dev; + slave->dev.release = fsi_slave_release; + slave->link = link; + slave->id = id; + slave->size = FSI_SLAVE_SIZE_23b; + + dev_set_name(&slave->dev, "slave@%02x:%02x", link, id); + rc = device_register(&slave->dev); + if (rc < 0) { + dev_warn(&master->dev, "failed to create slave device: %d\n", + rc); + put_device(&slave->dev); + return rc; + } + + /* todo: perform engine scan */ - return -ENODEV; + return rc; } /* FSI master support */ -- 1.8.2.2
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 v6 07/23] drivers/fsi: Implement slave initialisation Date: Mon, 10 Apr 2017 14:46:50 -0500 [thread overview] Message-ID: <20170410194706.64280-8-cbostic@linux.vnet.ibm.com> (raw) In-Reply-To: <20170410194706.64280-1-cbostic@linux.vnet.ibm.com> From: Jeremy Kerr <jk@ozlabs.org> Implement fsi_slave_init: if we can read a chip ID, create fsi_slave devices and register with the driver core. Includes changes from Chris Bostic <cbostic@linux.vnet.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 | 66 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c index 6e1cfdf..c705ca2 100644 --- a/drivers/fsi/fsi-core.c +++ b/drivers/fsi/fsi-core.c @@ -17,9 +17,12 @@ #include <linux/fsi.h> #include <linux/idr.h> #include <linux/module.h> +#include <linux/slab.h> #include "fsi-master.h" +#define FSI_SLAVE_SIZE_23b 0x800000 + static DEFINE_IDA(master_ida); struct fsi_slave { @@ -114,11 +117,70 @@ static int fsi_slave_write(struct fsi_slave *slave, uint32_t addr, addr, val, size); } +static void fsi_slave_release(struct device *dev) +{ + struct fsi_slave *slave = to_fsi_slave(dev); + + kfree(slave); +} + static int fsi_slave_init(struct fsi_master *master, int link, uint8_t id) { - /* todo: initialise slave device, perform engine scan */ + struct fsi_slave *slave; + uint32_t chip_id; + uint8_t crc; + int rc; + + /* Currently, we only support single slaves on a link, and use the + * full 23-bit address range + */ + if (id != 0) + return -EINVAL; + + rc = fsi_master_read(master, link, id, 0, &chip_id, sizeof(chip_id)); + if (rc) { + dev_warn(&master->dev, "can't read slave %02x:%02x %d\n", + link, id, rc); + return -ENODEV; + } + chip_id = be32_to_cpu(chip_id); + + crc = fsi_crc4(0, chip_id, 32); + if (crc) { + dev_warn(&master->dev, "slave %02x:%02x invalid chip id CRC!\n", + link, id); + return -EIO; + } + + dev_info(&master->dev, "fsi: found chip %08x at %02x:%02x:%02x\n", + chip_id, master->idx, link, id); + + /* We can communicate with a slave; create the slave device and + * register. + */ + slave = kzalloc(sizeof(*slave), GFP_KERNEL); + if (!slave) + return -ENOMEM; + + slave->master = master; + slave->dev.parent = &master->dev; + slave->dev.release = fsi_slave_release; + slave->link = link; + slave->id = id; + slave->size = FSI_SLAVE_SIZE_23b; + + dev_set_name(&slave->dev, "slave@%02x:%02x", link, id); + rc = device_register(&slave->dev); + if (rc < 0) { + dev_warn(&master->dev, "failed to create slave device: %d\n", + rc); + put_device(&slave->dev); + return rc; + } + + /* todo: perform engine scan */ - return -ENODEV; + return rc; } /* FSI master support */ -- 1.8.2.2
next prev parent reply other threads:[~2017-04-10 19:48 UTC|newest] Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-04-10 19:46 [PATCH v6 00/23] FSI device driver implementation Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 01/23] drivers/fsi: Add fsi master definition Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 02/23] drivers/fsi: Add slave definition Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 03/23] drivers/fsi: Add empty master scan Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 04/23] drivers/fsi: Add crc4 helpers Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 05/23] drivers/fsi: Add slave & master read/write APIs Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 06/23] drivers/fsi: Set up links for slave communication Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic [this message] 2017-04-10 19:46 ` [PATCH v6 07/23] drivers/fsi: Implement slave initialisation Christopher Bostic 2017-05-02 6:24 ` Joel Stanley 2017-05-02 6:24 ` Joel Stanley 2017-05-02 6:24 ` Joel Stanley 2017-05-02 18:58 ` Christopher Bostic 2017-05-02 18:58 ` Christopher Bostic 2017-05-02 18:58 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 08/23] drivers/fsi: Set slave SMODE to init communication Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 09/23] drivers/fsi: scan slaves & register devices Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-05-10 7:30 ` Joel Stanley 2017-05-10 7:30 ` Joel Stanley 2017-05-10 18:24 ` Christopher Bostic 2017-05-10 18:24 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 10/23] drivers/fsi: Add device read/write/peek API Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-05-02 5:25 ` [v6,10/23] " Brad Bishop 2017-05-02 5:25 ` Brad Bishop 2017-05-02 5:25 ` Brad Bishop 2017-05-10 8:13 ` [PATCH v6 10/23] " Joel Stanley 2017-05-10 8:13 ` Joel Stanley 2017-05-10 18:38 ` Christopher Bostic 2017-05-10 18:38 ` Christopher Bostic 2017-05-10 18:38 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 11/23] drivers/fsi: Add master unscan Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-05-10 7:31 ` Joel Stanley 2017-05-10 7:31 ` Joel Stanley 2017-05-10 7:31 ` Joel Stanley 2017-05-10 18:33 ` Christopher Bostic 2017-05-10 18:33 ` Christopher Bostic 2017-05-10 18:33 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 12/23] drivers/fsi: Add documentation for GPIO bindings Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 13/23] drivers/fsi: Add client driver register utilities Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 14/23] drivers/fsi: Add sysfs files for FSI master & slave accesses Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 15/23] drivers/fsi: expose direct-access slave API Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:46 ` [PATCH v6 16/23] drivers/fsi: Add tracepoints for low-level operations Christopher Bostic 2017-04-10 19:46 ` Christopher Bostic 2017-04-10 19:47 ` [PATCH v6 17/23] drivers/fsi: Add error handling for slave communication errors Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-04-10 19:47 ` [PATCH v6 18/23] drivers/fsi: Document FSI master sysfs files in ABI Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-05-10 7:30 ` Joel Stanley 2017-05-10 7:30 ` Joel Stanley 2017-05-10 18:20 ` Christopher Bostic 2017-05-10 18:20 ` Christopher Bostic 2017-05-10 18:20 ` Christopher Bostic 2017-04-10 19:47 ` [PATCH v6 19/23] drivers/fsi: Add GPIO based FSI master Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-05-10 7:30 ` Joel Stanley 2017-05-10 7:30 ` Joel Stanley 2017-05-10 7:30 ` Joel Stanley 2017-05-10 18:15 ` Christopher Bostic 2017-05-10 18:15 ` Christopher Bostic 2017-05-10 18:15 ` Christopher Bostic 2017-05-11 1:58 ` Jeremy Kerr 2017-05-11 1:58 ` Jeremy Kerr 2017-05-11 1:58 ` Jeremy Kerr 2017-05-11 16:14 ` Christopher Bostic 2017-05-11 16:14 ` Christopher Bostic 2017-05-11 16:14 ` Christopher Bostic 2017-04-10 19:47 ` [PATCH v6 20/23] drivers/fsi/gpio: Add tracepoints for GPIO master Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-04-10 19:47 ` [PATCH v6 21/23] drivers/fsi: Add SCOM FSI client device driver Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-04-10 19:47 ` [PATCH v6 22/23] drivers/ fsi: Add hub master support Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-04-10 19:47 ` Christopher Bostic 2017-04-10 19:47 ` [PATCH v6 23/23] drivers/fsi: Use asynchronous slave mode Christopher Bostic 2017-04-10 19:47 ` 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=20170410194706.64280-8-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=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: linkBe 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.