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 11/23] drivers/fsi: Add master unscan
Date: Thu, 11 May 2017 16:00:48 -0500	[thread overview]
Message-ID: <20170511210101.78409-12-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170511210101.78409-1-cbostic@linux.vnet.ibm.com>

Allow a master to undo a previous scan.  Should a master scan a bus
twice it will need to ensure it doesn't double register any
previously detected device.

Signed-off-by: Christopher Bostic <cbostic@linux.vnet.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
----
v7 - Unscan when unregistering master
   - Remove leading '__'s from function names
   - Return fail state for sysfs rescan file
---
 drivers/fsi/fsi-core.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index d7a6e76..fcb0c81 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -71,6 +71,7 @@ struct fsi_slave {
 	uint32_t		size;	/* size of slave address space */
 };
 
+#define to_fsi_master(d) container_of(d, struct fsi_master, dev)
 #define to_fsi_slave(d) container_of(d, struct fsi_slave, dev)
 
 static int fsi_master_read(struct fsi_master *master, int link,
@@ -488,6 +489,40 @@ static int fsi_master_scan(struct fsi_master *master)
 	return 0;
 }
 
+static int fsi_slave_remove_device(struct device *dev, void *arg)
+{
+	device_unregister(dev);
+	return 0;
+}
+
+static int fsi_master_remove_slave(struct device *dev, void *arg)
+{
+	device_for_each_child(dev, NULL, fsi_slave_remove_device);
+	device_unregister(dev);
+	return 0;
+}
+
+static void fsi_master_unscan(struct fsi_master *master)
+{
+	device_for_each_child(&master->dev, NULL, fsi_master_remove_slave);
+}
+
+static ssize_t master_rescan_store(struct device *dev,
+		struct device_attribute *attr, const char *buf, size_t count)
+{
+	struct fsi_master *master = to_fsi_master(dev);
+	int rc;
+
+	fsi_master_unscan(master);
+	rc = fsi_master_scan(master);
+	if (rc < 0)
+		return rc;
+
+	return count;
+}
+
+static DEVICE_ATTR(rescan, 0200, NULL, master_rescan_store);
+
 int fsi_master_register(struct fsi_master *master)
 {
 	int rc;
@@ -504,7 +539,15 @@ int fsi_master_register(struct fsi_master *master)
 		return rc;
 	}
 
+	rc = device_create_file(&master->dev, &dev_attr_rescan);
+	if (rc) {
+		device_unregister(&master->dev);
+		ida_simple_remove(&master_ida, master->idx);
+		return rc;
+	}
+
 	fsi_master_scan(master);
+
 	return 0;
 }
 EXPORT_SYMBOL_GPL(fsi_master_register);
@@ -516,6 +559,7 @@ void fsi_master_unregister(struct fsi_master *master)
 		master->idx = -1;
 	}
 
+	fsi_master_unscan(master);
 	device_unregister(&master->dev);
 }
 EXPORT_SYMBOL_GPL(fsi_master_unregister);
-- 
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: andrew@aj.id.au, alistair@popple.id.au,
	linux-kernel@vger.kernel.org,
	Christopher Bostic <cbostic@linux.vnet.ibm.com>,
	benh@kernel.crashing.org, joel@jms.id.au
Subject: [PATCH v7 11/23] drivers/fsi: Add master unscan
Date: Thu, 11 May 2017 16:00:48 -0500	[thread overview]
Message-ID: <20170511210101.78409-12-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170511210101.78409-1-cbostic@linux.vnet.ibm.com>

Allow a master to undo a previous scan.  Should a master scan a bus
twice it will need to ensure it doesn't double register any
previously detected device.

Signed-off-by: Christopher Bostic <cbostic@linux.vnet.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
----
v7 - Unscan when unregistering master
   - Remove leading '__'s from function names
   - Return fail state for sysfs rescan file
---
 drivers/fsi/fsi-core.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index d7a6e76..fcb0c81 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -71,6 +71,7 @@ struct fsi_slave {
 	uint32_t		size;	/* size of slave address space */
 };
 
+#define to_fsi_master(d) container_of(d, struct fsi_master, dev)
 #define to_fsi_slave(d) container_of(d, struct fsi_slave, dev)
 
 static int fsi_master_read(struct fsi_master *master, int link,
@@ -488,6 +489,40 @@ static int fsi_master_scan(struct fsi_master *master)
 	return 0;
 }
 
+static int fsi_slave_remove_device(struct device *dev, void *arg)
+{
+	device_unregister(dev);
+	return 0;
+}
+
+static int fsi_master_remove_slave(struct device *dev, void *arg)
+{
+	device_for_each_child(dev, NULL, fsi_slave_remove_device);
+	device_unregister(dev);
+	return 0;
+}
+
+static void fsi_master_unscan(struct fsi_master *master)
+{
+	device_for_each_child(&master->dev, NULL, fsi_master_remove_slave);
+}
+
+static ssize_t master_rescan_store(struct device *dev,
+		struct device_attribute *attr, const char *buf, size_t count)
+{
+	struct fsi_master *master = to_fsi_master(dev);
+	int rc;
+
+	fsi_master_unscan(master);
+	rc = fsi_master_scan(master);
+	if (rc < 0)
+		return rc;
+
+	return count;
+}
+
+static DEVICE_ATTR(rescan, 0200, NULL, master_rescan_store);
+
 int fsi_master_register(struct fsi_master *master)
 {
 	int rc;
@@ -504,7 +539,15 @@ int fsi_master_register(struct fsi_master *master)
 		return rc;
 	}
 
+	rc = device_create_file(&master->dev, &dev_attr_rescan);
+	if (rc) {
+		device_unregister(&master->dev);
+		ida_simple_remove(&master_ida, master->idx);
+		return rc;
+	}
+
 	fsi_master_scan(master);
+
 	return 0;
 }
 EXPORT_SYMBOL_GPL(fsi_master_register);
@@ -516,6 +559,7 @@ void fsi_master_unregister(struct fsi_master *master)
 		master->idx = -1;
 	}
 
+	fsi_master_unscan(master);
 	device_unregister(&master->dev);
 }
 EXPORT_SYMBOL_GPL(fsi_master_unregister);
-- 
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: Christopher Bostic <cbostic@linux.vnet.ibm.com>,
	joel@jms.id.au, linux-kernel@vger.kernel.org, andrew@aj.id.au,
	alistair@popple.id.au, benh@kernel.crashing.org
Subject: [PATCH v7 11/23] drivers/fsi: Add master unscan
Date: Thu, 11 May 2017 16:00:48 -0500	[thread overview]
Message-ID: <20170511210101.78409-12-cbostic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170511210101.78409-1-cbostic@linux.vnet.ibm.com>

Allow a master to undo a previous scan.  Should a master scan a bus
twice it will need to ensure it doesn't double register any
previously detected device.

Signed-off-by: Christopher Bostic <cbostic@linux.vnet.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
----
v7 - Unscan when unregistering master
   - Remove leading '__'s from function names
   - Return fail state for sysfs rescan file
---
 drivers/fsi/fsi-core.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index d7a6e76..fcb0c81 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -71,6 +71,7 @@ struct fsi_slave {
 	uint32_t		size;	/* size of slave address space */
 };
 
+#define to_fsi_master(d) container_of(d, struct fsi_master, dev)
 #define to_fsi_slave(d) container_of(d, struct fsi_slave, dev)
 
 static int fsi_master_read(struct fsi_master *master, int link,
@@ -488,6 +489,40 @@ static int fsi_master_scan(struct fsi_master *master)
 	return 0;
 }
 
+static int fsi_slave_remove_device(struct device *dev, void *arg)
+{
+	device_unregister(dev);
+	return 0;
+}
+
+static int fsi_master_remove_slave(struct device *dev, void *arg)
+{
+	device_for_each_child(dev, NULL, fsi_slave_remove_device);
+	device_unregister(dev);
+	return 0;
+}
+
+static void fsi_master_unscan(struct fsi_master *master)
+{
+	device_for_each_child(&master->dev, NULL, fsi_master_remove_slave);
+}
+
+static ssize_t master_rescan_store(struct device *dev,
+		struct device_attribute *attr, const char *buf, size_t count)
+{
+	struct fsi_master *master = to_fsi_master(dev);
+	int rc;
+
+	fsi_master_unscan(master);
+	rc = fsi_master_scan(master);
+	if (rc < 0)
+		return rc;
+
+	return count;
+}
+
+static DEVICE_ATTR(rescan, 0200, NULL, master_rescan_store);
+
 int fsi_master_register(struct fsi_master *master)
 {
 	int rc;
@@ -504,7 +539,15 @@ int fsi_master_register(struct fsi_master *master)
 		return rc;
 	}
 
+	rc = device_create_file(&master->dev, &dev_attr_rescan);
+	if (rc) {
+		device_unregister(&master->dev);
+		ida_simple_remove(&master_ida, master->idx);
+		return rc;
+	}
+
 	fsi_master_scan(master);
+
 	return 0;
 }
 EXPORT_SYMBOL_GPL(fsi_master_register);
@@ -516,6 +559,7 @@ void fsi_master_unregister(struct fsi_master *master)
 		master->idx = -1;
 	}
 
+	fsi_master_unscan(master);
 	device_unregister(&master->dev);
 }
 EXPORT_SYMBOL_GPL(fsi_master_unregister);
-- 
1.8.2.2

  parent reply	other threads:[~2017-05-11 21:00 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 ` Christopher Bostic [this message]
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 ` [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 ` [PATCH v7 23/23] drivers/fsi: Use asynchronous slave mode Christopher Bostic
2017-05-11 21:01   ` 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-12-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.