Linux ACPI
 help / color / mirror / Atom feed
* [PATCH v5 RESEND 0/4] Extend device_get_match_data() to struct bus_type
@ 2023-08-03 10:30 Biju Das
  2023-08-03 10:30 ` [PATCH v5 RESEND 1/4] drivers: fwnode: " Biju Das
  2023-08-03 12:13 ` [PATCH v5 RESEND 0/4] " Andy Shevchenko
  0 siblings, 2 replies; 9+ messages in thread
From: Biju Das @ 2023-08-03 10:30 UTC (permalink / raw)
  To: Andy Shevchenko, Daniel Scally, Heikki Krogerus, Sakari Ailus,
	Greg Kroah-Hartman, Rafael J. Wysocki
  Cc: Biju Das, linux-acpi, Dmitry Torokhov, Wolfram Sang,
	Geert Uytterhoeven, linux-i2c, linux-renesas-soc

This patch series extend device_get_match_data() to struct bus_type,
so that buses like I2C can get matched data.

v4->v5:
 * Added const struct device_driver variable 'drv' in i2c_device_get_match
   _data().
 * For code readability and maintenance perspective, added separate NULL
   check for drv and client variable and added comment for NULL check for
   drv variable.
 * Created separate patch for converting i2c_of_match_device_sysfs() to
   non-static.
 * Removed export symbol for i2c_of_match_device_sysfs().
 * Replaced 'dev->driver'->'drv'.
 * Replaced return value data->NULL to avoid (potentially) stale pointers,
   if there is no match.

v3->v4:
 * Documented corner case for device_get_match_data()
 * Dropped struct i2c_driver parameter from i2c_get_match_data_helper()
 * Split I2C sysfs handling in separate patch(patch#3)
 * Added space after of_device_id for i2c_of_match_device_sysfs()
 * Added const parameter for struct i2c_client, to prevent overriding it's
   pointer.
 * Moved declaration from public i2c.h->i2c-core.h
v2->v3:
 * Added Rb tag from Andy for patch#1.
 * Extended to support i2c_of_match_device() as suggested by Andy.
 * Changed i2c_of_match_device_sysfs() as non-static function as it is
   needed for i2c_device_get_match_data().
 * Added a TODO comment to use i2c_verify_client() when it accepts const
   pointer.
 * Added multiple returns to make code path for device_get_match_data()
   faster in i2c_get_match_data().
RFC v1->v2:
 * Replaced "Signed-off-by"->"Suggested-by" tag for Dmitry.
 * Documented device_get_match_data().
 * Added multiple returns to make code path for generic fwnode-based
   lookup faster.
 * Fixed build warnings reported by kernel test robot <lkp@intel.com>
 * Added const qualifier to return type and parameter struct i2c_driver
   in i2c_get_match_data_helper().
 * Added const qualifier to struct i2c_driver in i2c_get_match_data()
 * Dropped driver variable from i2c_device_get_match_data()
 * Replaced to_i2c_client with logic for assigning verify_client as it
   returns non const pointer.

Biju Das (4):
  drivers: fwnode: Extend device_get_match_data() to struct bus_type
  i2c: Add i2c_device_get_match_data() callback
  i2c: i2c-core-of: Convert i2c_of_match_device_sysfs() to non-static
  i2c: Extend i2c_device_get_match_data() to support i2c sysfs

 drivers/base/property.c     | 27 ++++++++++++++++-
 drivers/i2c/i2c-core-base.c | 60 ++++++++++++++++++++++++++++++-------
 drivers/i2c/i2c-core-of.c   |  4 +--
 drivers/i2c/i2c-core.h      |  9 ++++++
 include/linux/device/bus.h  |  3 ++
 5 files changed, 90 insertions(+), 13 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v5 RESEND 1/4] drivers: fwnode: Extend device_get_match_data() to struct bus_type
  2023-08-03 10:30 [PATCH v5 RESEND 0/4] Extend device_get_match_data() to struct bus_type Biju Das
@ 2023-08-03 10:30 ` Biju Das
  2023-08-03 12:00   ` Andy Shevchenko
  2023-08-03 12:13 ` [PATCH v5 RESEND 0/4] " Andy Shevchenko
  1 sibling, 1 reply; 9+ messages in thread
From: Biju Das @ 2023-08-03 10:30 UTC (permalink / raw)
  To: Andy Shevchenko, Daniel Scally, Heikki Krogerus, Sakari Ailus,
	Greg Kroah-Hartman, Rafael J. Wysocki
  Cc: Biju Das, linux-acpi, Dmitry Torokhov, Wolfram Sang,
	Geert Uytterhoeven, linux-renesas-soc

Extend device_get_match_data() to buses (for eg: I2C) by adding a
callback device_get_match_data() to struct bus_type() and call this method
as a fallback for generic fwnode based device_get_match_data().

Suggested-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v4->v5:
 * No change
v3->v4:
 * Documented corner case.
v2->v3:
 * Added Rb tag from Andy.
RFC v1-> v2:
 * Replaced "Signed-off-by"->"Suggested-by" tag for Dmitry.
 * Documented device_get_match_data().
 * Added multiple returns to make code path for generic fwnode-based
   lookup faster.
---
 drivers/base/property.c    | 27 ++++++++++++++++++++++++++-
 include/linux/device/bus.h |  3 +++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/drivers/base/property.c b/drivers/base/property.c
index 8c40abed7852..a3c188cf68bb 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1275,9 +1275,34 @@ int fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode,
 }
 EXPORT_SYMBOL(fwnode_graph_parse_endpoint);
 
+/**
+ * device_get_match_data - get match data from OF/ACPI/Bus match tables
+ * @dev: device to find the match data
+ *
+ * Find match data using generic fwnode-based lookup and if there is no
+ * match, call the bus->get_match_data() for finding match data.
+ *
+ * Return: a match data pointer or NULL if there is no match in the matching
+ * table.
+ *
+ * Besides the fact that some drivers abuse the device ID driver_data type
+ * and claim it to be integer, for the bus specific ID tables the driver_data
+ * may be defined as kernel_ulong_t. For these tables 0 is a valid response,
+ * but not for this function. It's recommended to convert those either to avoid
+ * 0 or use a real pointer to the predefined driver data.
+ */
 const void *device_get_match_data(const struct device *dev)
 {
-	return fwnode_call_ptr_op(dev_fwnode(dev), device_get_match_data, dev);
+	const void *data;
+
+	data = fwnode_call_ptr_op(dev_fwnode(dev), device_get_match_data, dev);
+	if (data)
+		return data;
+
+	if (dev->bus && dev->bus->get_match_data)
+		return dev->bus->get_match_data(dev);
+
+	return NULL;
 }
 EXPORT_SYMBOL_GPL(device_get_match_data);
 
diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h
index ae10c4322754..2e15b0ae5384 100644
--- a/include/linux/device/bus.h
+++ b/include/linux/device/bus.h
@@ -60,6 +60,7 @@ struct fwnode_handle;
  *			this bus.
  * @dma_cleanup:	Called to cleanup DMA configuration on a device on
  *			this bus.
+ * @get_match_data:	Called to get match data on a device on this bus.
  * @pm:		Power management operations of this bus, callback the specific
  *		device driver's pm-ops.
  * @iommu_ops:  IOMMU specific operations for this bus, used to attach IOMMU
@@ -102,6 +103,8 @@ struct bus_type {
 	int (*dma_configure)(struct device *dev);
 	void (*dma_cleanup)(struct device *dev);
 
+	const void *(*get_match_data)(const struct device *dev);
+
 	const struct dev_pm_ops *pm;
 
 	const struct iommu_ops *iommu_ops;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend device_get_match_data() to struct bus_type
  2023-08-03 10:30 ` [PATCH v5 RESEND 1/4] drivers: fwnode: " Biju Das
@ 2023-08-03 12:00   ` Andy Shevchenko
  2023-08-03 12:02     ` Sakari Ailus
  2023-08-03 12:05     ` Biju Das
  0 siblings, 2 replies; 9+ messages in thread
From: Andy Shevchenko @ 2023-08-03 12:00 UTC (permalink / raw)
  To: Biju Das
  Cc: Daniel Scally, Heikki Krogerus, Sakari Ailus, Greg Kroah-Hartman,
	Rafael J. Wysocki, linux-acpi, Dmitry Torokhov, Wolfram Sang,
	Geert Uytterhoeven, linux-renesas-soc

On Thu, Aug 03, 2023 at 11:30:59AM +0100, Biju Das wrote:
> Extend device_get_match_data() to buses (for eg: I2C) by adding a
> callback device_get_match_data() to struct bus_type() and call this method
> as a fallback for generic fwnode based device_get_match_data().

With this resend you were too fast to forgot Sakari's tag...

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend device_get_match_data() to struct bus_type
  2023-08-03 12:00   ` Andy Shevchenko
@ 2023-08-03 12:02     ` Sakari Ailus
  2023-08-03 12:07       ` Andy Shevchenko
  2023-08-03 12:13       ` Biju Das
  2023-08-03 12:05     ` Biju Das
  1 sibling, 2 replies; 9+ messages in thread
From: Sakari Ailus @ 2023-08-03 12:02 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Biju Das, Daniel Scally, Heikki Krogerus, Greg Kroah-Hartman,
	Rafael J. Wysocki, linux-acpi, Dmitry Torokhov, Wolfram Sang,
	Geert Uytterhoeven, linux-renesas-soc

On Thu, Aug 03, 2023 at 03:00:23PM +0300, Andy Shevchenko wrote:
> On Thu, Aug 03, 2023 at 11:30:59AM +0100, Biju Das wrote:
> > Extend device_get_match_data() to buses (for eg: I2C) by adding a
> > callback device_get_match_data() to struct bus_type() and call this method
> > as a fallback for generic fwnode based device_get_match_data().
> 
> With this resend you were too fast to forgot Sakari's tag...

I guess it arrived after the patches were resent?

-- 
Sakari Ailus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend device_get_match_data() to struct bus_type
  2023-08-03 12:00   ` Andy Shevchenko
  2023-08-03 12:02     ` Sakari Ailus
@ 2023-08-03 12:05     ` Biju Das
  2023-08-03 12:12       ` Andy Shevchenko
  1 sibling, 1 reply; 9+ messages in thread
From: Biju Das @ 2023-08-03 12:05 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Daniel Scally, Heikki Krogerus, Sakari Ailus, Greg Kroah-Hartman,
	Rafael J. Wysocki, linux-acpi@vger.kernel.org, Dmitry Torokhov,
	Wolfram Sang, Geert Uytterhoeven,
	linux-renesas-soc@vger.kernel.org

Hi Andy Shevchenko,

Thanks for the feedback.

> Subject: Re: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend
> device_get_match_data() to struct bus_type
> 
> On Thu, Aug 03, 2023 at 11:30:59AM +0100, Biju Das wrote:
> > Extend device_get_match_data() to buses (for eg: I2C) by adding a
> > callback device_get_match_data() to struct bus_type() and call this
> > method as a fallback for generic fwnode based device_get_match_data().
> 
> With this resend you were too fast to forgot Sakari's tag...

In my mailbox, I received Sakari's tag after sending RESEND patch series.
It may be some race situation with mailboxes.

Cheers,
Biju

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend device_get_match_data() to struct bus_type
  2023-08-03 12:02     ` Sakari Ailus
@ 2023-08-03 12:07       ` Andy Shevchenko
  2023-08-03 12:13       ` Biju Das
  1 sibling, 0 replies; 9+ messages in thread
From: Andy Shevchenko @ 2023-08-03 12:07 UTC (permalink / raw)
  To: Sakari Ailus
  Cc: Biju Das, Daniel Scally, Heikki Krogerus, Greg Kroah-Hartman,
	Rafael J. Wysocki, linux-acpi, Dmitry Torokhov, Wolfram Sang,
	Geert Uytterhoeven, linux-renesas-soc

On Thu, Aug 03, 2023 at 12:02:56PM +0000, Sakari Ailus wrote:
> On Thu, Aug 03, 2023 at 03:00:23PM +0300, Andy Shevchenko wrote:
> > On Thu, Aug 03, 2023 at 11:30:59AM +0100, Biju Das wrote:
> > > Extend device_get_match_data() to buses (for eg: I2C) by adding a
> > > callback device_get_match_data() to struct bus_type() and call this method
> > > as a fallback for generic fwnode based device_get_match_data().
> > 
> > With this resend you were too fast to forgot Sakari's tag...
> 
> I guess it arrived after the patches were resent?

Yes, and this is my point, too fast to resend :-)

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend device_get_match_data() to struct bus_type
  2023-08-03 12:05     ` Biju Das
@ 2023-08-03 12:12       ` Andy Shevchenko
  0 siblings, 0 replies; 9+ messages in thread
From: Andy Shevchenko @ 2023-08-03 12:12 UTC (permalink / raw)
  To: Biju Das
  Cc: Daniel Scally, Heikki Krogerus, Sakari Ailus, Greg Kroah-Hartman,
	Rafael J. Wysocki, linux-acpi@vger.kernel.org, Dmitry Torokhov,
	Wolfram Sang, Geert Uytterhoeven,
	linux-renesas-soc@vger.kernel.org

On Thu, Aug 03, 2023 at 12:05:58PM +0000, Biju Das wrote:
> > Subject: Re: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend
> > device_get_match_data() to struct bus_type
> > 
> > On Thu, Aug 03, 2023 at 11:30:59AM +0100, Biju Das wrote:
> > > Extend device_get_match_data() to buses (for eg: I2C) by adding a
> > > callback device_get_match_data() to struct bus_type() and call this
> > > method as a fallback for generic fwnode based device_get_match_data().
> > 
> > With this resend you were too fast to forgot Sakari's tag...
> 
> In my mailbox, I received Sakari's tag after sending RESEND patch series.
> It may be some race situation with mailboxes.

Right. My point is, give some time before resend even if something is wrong.
Jest reply to your own message to inform people that "the vX is wrong and
I am going to resend it soon",

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend device_get_match_data() to struct bus_type
  2023-08-03 12:02     ` Sakari Ailus
  2023-08-03 12:07       ` Andy Shevchenko
@ 2023-08-03 12:13       ` Biju Das
  1 sibling, 0 replies; 9+ messages in thread
From: Biju Das @ 2023-08-03 12:13 UTC (permalink / raw)
  To: Sakari Ailus, Andy Shevchenko, Wolfram Sang
  Cc: Daniel Scally, Heikki Krogerus, Greg Kroah-Hartman,
	Rafael J. Wysocki, linux-acpi@vger.kernel.org, Dmitry Torokhov,
	Geert Uytterhoeven, linux-renesas-soc@vger.kernel.org

Hi Sakari,

> Subject: Re: [PATCH v5 RESEND 1/4] drivers: fwnode: Extend
> device_get_match_data() to struct bus_type
> 
> On Thu, Aug 03, 2023 at 03:00:23PM +0300, Andy Shevchenko wrote:
> > On Thu, Aug 03, 2023 at 11:30:59AM +0100, Biju Das wrote:
> > > Extend device_get_match_data() to buses (for eg: I2C) by adding a
> > > callback device_get_match_data() to struct bus_type() and call this
> > > method as a fallback for generic fwnode based
> device_get_match_data().
> >
> > With this resend you were too fast to forgot Sakari's tag...
> 
> I guess it arrived after the patches were resent?

I send v5 and v5 resent, then got Rb tag from you.

OK, will add Rb tag in v6.

Cheers,
Biju

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 RESEND 0/4] Extend device_get_match_data() to struct bus_type
  2023-08-03 10:30 [PATCH v5 RESEND 0/4] Extend device_get_match_data() to struct bus_type Biju Das
  2023-08-03 10:30 ` [PATCH v5 RESEND 1/4] drivers: fwnode: " Biju Das
@ 2023-08-03 12:13 ` Andy Shevchenko
  1 sibling, 0 replies; 9+ messages in thread
From: Andy Shevchenko @ 2023-08-03 12:13 UTC (permalink / raw)
  To: Biju Das
  Cc: Daniel Scally, Heikki Krogerus, Sakari Ailus, Greg Kroah-Hartman,
	Rafael J. Wysocki, linux-acpi, Dmitry Torokhov, Wolfram Sang,
	Geert Uytterhoeven, linux-i2c, linux-renesas-soc

On Thu, Aug 03, 2023 at 11:30:58AM +0100, Biju Das wrote:
> This patch series extend device_get_match_data() to struct bus_type,
> so that buses like I2C can get matched data.

Thank you! We are getting closer, I believe v6 will be the one against which
I give my Rb tag.

Nice job!

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2023-08-03 12:13 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-03 10:30 [PATCH v5 RESEND 0/4] Extend device_get_match_data() to struct bus_type Biju Das
2023-08-03 10:30 ` [PATCH v5 RESEND 1/4] drivers: fwnode: " Biju Das
2023-08-03 12:00   ` Andy Shevchenko
2023-08-03 12:02     ` Sakari Ailus
2023-08-03 12:07       ` Andy Shevchenko
2023-08-03 12:13       ` Biju Das
2023-08-03 12:05     ` Biju Das
2023-08-03 12:12       ` Andy Shevchenko
2023-08-03 12:13 ` [PATCH v5 RESEND 0/4] " Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox