From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org,
rafael@kernel.org, linux-arm-kernel@lists.infradead.org,
"David S. Miller" <davem@davemloft.net>,
Doug Ledford <dledford@redhat.com>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Jason Gunthorpe <jgg@ziepe.ca>,
linux-usb@vger.kernel.org, Ulf Hansson <ulf.hansson@linaro.org>,
Joe Perches <joe@perches.com>, Will Deacon <will.deacon@arm.com>,
Robin Murphy <robin.murphy@arm.com>,
Joerg Roedel <joro@8bytes.org>
Subject: Re: [PATCH v3 3/7] drivers: Introduce device lookup variants by fwnode
Date: Thu, 25 Jul 2019 11:10:50 -0600 [thread overview]
Message-ID: <20190725171050.GA25279@xps15> (raw)
In-Reply-To: <20190723221838.12024-4-suzuki.poulose@arm.com>
On Tue, Jul 23, 2019 at 11:18:34PM +0100, Suzuki K Poulose wrote:
> Add a helper to match the firmware node handle of a device and provide
> wrappers for {bus/class/driver}_find_device() APIs to avoid proliferation
> of duplicate custom match functions.
>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Doug Ledford <dledford@redhat.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Cc: Jason Gunthorpe <jgg@ziepe.ca>
> Cc: linux-usb@vger.kernel.org
> Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Cc: Joe Perches <joe@perches.com>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Will Deacon <will.deacon@arm.com>
> Cc: Robin Murphy <robin.murphy@arm.com>
> Cc: Joerg Roedel <joro@8bytes.org>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
> ---
> drivers/base/core.c | 6 +++
> drivers/base/devcon.c | 8 +---
> .../hwtracing/coresight/coresight-platform.c | 11 +-----
> drivers/hwtracing/coresight/coresight-priv.h | 2 -
> drivers/hwtracing/coresight/coresight.c | 4 +-
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> drivers/infiniband/hw/hns/hns_roce_hw_v1.c | 8 +---
> drivers/iommu/arm-smmu-v3.c | 9 +----
> drivers/iommu/arm-smmu.c | 9 +----
> .../ethernet/hisilicon/hns/hns_dsaf_misc.c | 8 +---
> drivers/usb/roles/class.c | 8 +---
> drivers/usb/typec/class.c | 8 +---
> include/linux/device.h | 39 +++++++++++++++++++
> 12 files changed, 57 insertions(+), 63 deletions(-)
>
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index fb83647d685a..e8f81a667545 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -3368,3 +3368,9 @@ int device_match_of_node(struct device *dev, const void *np)
> return dev->of_node == np;
> }
> EXPORT_SYMBOL_GPL(device_match_of_node);
> +
> +int device_match_fwnode(struct device *dev, const void *fwnode)
> +{
> + return dev_fwnode(dev) == fwnode;
> +}
> +EXPORT_SYMBOL_GPL(device_match_fwnode);
> diff --git a/drivers/base/devcon.c b/drivers/base/devcon.c
> index 09f28479b243..1d488dc5dd0c 100644
> --- a/drivers/base/devcon.c
> +++ b/drivers/base/devcon.c
> @@ -133,19 +133,13 @@ static struct bus_type *generic_match_buses[] = {
> NULL,
> };
>
> -static int device_fwnode_match(struct device *dev, const void *fwnode)
> -{
> - return dev_fwnode(dev) == fwnode;
> -}
> -
> static void *device_connection_fwnode_match(struct device_connection *con)
> {
> struct bus_type *bus;
> struct device *dev;
>
> for (bus = generic_match_buses[0]; bus; bus++) {
> - dev = bus_find_device(bus, NULL, (void *)con->fwnode,
> - device_fwnode_match);
> + dev = bus_find_device_by_fwnode(bus, con->fwnode);
> if (dev && !strncmp(dev_name(dev), con->id, strlen(con->id)))
> return dev;
>
> diff --git a/drivers/hwtracing/coresight/coresight-platform.c b/drivers/hwtracing/coresight/coresight-platform.c
> index dad7d96c5943..3c5bee429105 100644
> --- a/drivers/hwtracing/coresight/coresight-platform.c
> +++ b/drivers/hwtracing/coresight/coresight-platform.c
> @@ -37,11 +37,6 @@ static int coresight_alloc_conns(struct device *dev,
> return 0;
> }
>
> -int coresight_device_fwnode_match(struct device *dev, const void *fwnode)
> -{
> - return dev_fwnode(dev) == fwnode;
> -}
> -
> static struct device *
> coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
> {
> @@ -51,8 +46,7 @@ coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
> * If we have a non-configurable replicator, it will be found on the
> * platform bus.
> */
> - dev = bus_find_device(&platform_bus_type, NULL,
> - fwnode, coresight_device_fwnode_match);
> + dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
> if (dev)
> return dev;
>
> @@ -60,8 +54,7 @@ coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
> * We have a configurable component - circle through the AMBA bus
> * looking for the device that matches the endpoint node.
> */
> - return bus_find_device(&amba_bustype, NULL,
> - fwnode, coresight_device_fwnode_match);
> + return bus_find_device_by_fwnode(&amba_bustype, fwnode);
> }
>
> #ifdef CONFIG_OF
> diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h
> index 7d401790dd7e..61d7f9ff054d 100644
> --- a/drivers/hwtracing/coresight/coresight-priv.h
> +++ b/drivers/hwtracing/coresight/coresight-priv.h
> @@ -202,6 +202,4 @@ static inline void *coresight_get_uci_data(const struct amba_id *id)
>
> void coresight_release_platform_data(struct coresight_platform_data *pdata);
>
> -int coresight_device_fwnode_match(struct device *dev, const void *fwnode);
> -
> #endif
> diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
> index 55db77f6410b..6453c67a4d01 100644
> --- a/drivers/hwtracing/coresight/coresight.c
> +++ b/drivers/hwtracing/coresight/coresight.c
> @@ -1046,9 +1046,7 @@ static void coresight_fixup_device_conns(struct coresight_device *csdev)
> struct coresight_connection *conn = &csdev->pdata->conns[i];
> struct device *dev = NULL;
>
> - dev = bus_find_device(&coresight_bustype, NULL,
> - (void *)conn->child_fwnode,
> - coresight_device_fwnode_match);
> + dev = bus_find_device_by_fwnode(&coresight_bustype, conn->child_fwnode);
> if (dev) {
> conn->child_dev = to_coresight_device(dev);
> /* and put reference from 'bus_find_device()' */
> diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
> index 81e6dedb1e02..fa05e943038a 100644
> --- a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
> +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
> @@ -4499,19 +4499,13 @@ static const struct acpi_device_id hns_roce_acpi_match[] = {
> };
> MODULE_DEVICE_TABLE(acpi, hns_roce_acpi_match);
>
> -static int hns_roce_node_match(struct device *dev, const void *fwnode)
> -{
> - return dev->fwnode == fwnode;
> -}
> -
> static struct
> platform_device *hns_roce_find_pdev(struct fwnode_handle *fwnode)
> {
> struct device *dev;
>
> /* get the 'device' corresponding to the matching 'fwnode' */
> - dev = bus_find_device(&platform_bus_type, NULL,
> - fwnode, hns_roce_node_match);
> + dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
> /* get the platform device */
> return dev ? to_platform_device(dev) : NULL;
> }
> diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
> index a9a9fabd3968..6f0e13fa5e1a 100644
> --- a/drivers/iommu/arm-smmu-v3.c
> +++ b/drivers/iommu/arm-smmu-v3.c
> @@ -2034,16 +2034,11 @@ arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
>
> static struct platform_driver arm_smmu_driver;
>
> -static int arm_smmu_match_node(struct device *dev, const void *data)
> -{
> - return dev->fwnode == data;
> -}
> -
> static
> struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
> {
> - struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
> - fwnode, arm_smmu_match_node);
> + struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
> + fwnode);
> put_device(dev);
> return dev ? dev_get_drvdata(dev) : NULL;
> }
> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
> index 64977c131ee6..aa06498f291d 100644
> --- a/drivers/iommu/arm-smmu.c
> +++ b/drivers/iommu/arm-smmu.c
> @@ -1426,16 +1426,11 @@ static bool arm_smmu_capable(enum iommu_cap cap)
> }
> }
>
> -static int arm_smmu_match_node(struct device *dev, const void *data)
> -{
> - return dev->fwnode == data;
> -}
> -
> static
> struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
> {
> - struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
> - fwnode, arm_smmu_match_node);
> + struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
> + fwnode);
> put_device(dev);
> return dev ? dev_get_drvdata(dev) : NULL;
> }
> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> index bb6586d0e5af..ed3829ae4ef1 100644
> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> @@ -754,17 +754,11 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev)
> return (void *)misc_op;
> }
>
> -static int hns_dsaf_dev_match(struct device *dev, const void *fwnode)
> -{
> - return dev->fwnode == fwnode;
> -}
> -
> struct
> platform_device *hns_dsaf_find_platform_device(struct fwnode_handle *fwnode)
> {
> struct device *dev;
>
> - dev = bus_find_device(&platform_bus_type, NULL,
> - fwnode, hns_dsaf_dev_match);
> + dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
> return dev ? to_platform_device(dev) : NULL;
> }
> diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c
> index c8efe60e2465..0526efbc4922 100644
> --- a/drivers/usb/roles/class.c
> +++ b/drivers/usb/roles/class.c
> @@ -85,11 +85,6 @@ enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw)
> }
> EXPORT_SYMBOL_GPL(usb_role_switch_get_role);
>
> -static int switch_fwnode_match(struct device *dev, const void *fwnode)
> -{
> - return dev_fwnode(dev) == fwnode;
> -}
> -
> static void *usb_role_switch_match(struct device_connection *con, int ep,
> void *data)
> {
> @@ -99,8 +94,7 @@ static void *usb_role_switch_match(struct device_connection *con, int ep,
> if (con->id && !fwnode_property_present(con->fwnode, con->id))
> return NULL;
>
> - dev = class_find_device(role_class, NULL, con->fwnode,
> - switch_fwnode_match);
> + dev = class_find_device_by_fwnode(role_class, con->fwnode);
> } else {
> dev = class_find_device_by_name(role_class, con->endpoint[ep]);
> }
> diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
> index 9b0d15b487e5..94a3eda62add 100644
> --- a/drivers/usb/typec/class.c
> +++ b/drivers/usb/typec/class.c
> @@ -205,11 +205,6 @@ static void typec_altmode_put_partner(struct altmode *altmode)
> put_device(&adev->dev);
> }
>
> -static int typec_port_fwnode_match(struct device *dev, const void *fwnode)
> -{
> - return dev_fwnode(dev) == fwnode;
> -}
> -
> static void *typec_port_match(struct device_connection *con, int ep, void *data)
> {
> struct device *dev;
> @@ -219,8 +214,7 @@ static void *typec_port_match(struct device_connection *con, int ep, void *data)
> * we need to return ERR_PTR(-PROBE_DEFER) when there is no device.
> */
> if (con->fwnode)
> - return class_find_device(typec_class, NULL, con->fwnode,
> - typec_port_fwnode_match);
> + return class_find_device_by_fwnode(typec_class, con->fwnode);
>
> dev = class_find_device_by_name(typec_class, con->endpoint[ep]);
>
> diff --git a/include/linux/device.h b/include/linux/device.h
> index 29d8d7ad41e6..7133fc1c285d 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -166,6 +166,7 @@ void subsys_dev_iter_exit(struct subsys_dev_iter *iter);
>
> int device_match_name(struct device *dev, const void *name);
> int device_match_of_node(struct device *dev, const void *np);
> +int device_match_fwnode(struct device *dev, const void *fwnode);
>
> int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
> int (*fn)(struct device *dev, void *data));
> @@ -198,6 +199,18 @@ bus_find_device_by_of_node(struct bus_type *bus, const struct device_node *np)
> return bus_find_device(bus, NULL, np, device_match_of_node);
> }
>
> +/**
> + * bus_find_device_by_fwnode : device iterator for locating a particular device
> + * matching the fwnode.
> + * @bus: bus type
> + * @fwnode: fwnode of the device to match.
> + */
> +static inline struct device *
> +bus_find_device_by_fwnode(struct bus_type *bus, const struct fwnode_handle *fwnode)
> +{
> + return bus_find_device(bus, NULL, fwnode, device_match_fwnode);
> +}
> +
> struct device *subsys_find_device_by_id(struct bus_type *bus, unsigned int id,
> struct device *hint);
> int bus_for_each_drv(struct bus_type *bus, struct device_driver *start,
> @@ -391,6 +404,19 @@ driver_find_device_by_of_node(struct device_driver *drv,
> return driver_find_device(drv, NULL, np, device_match_of_node);
> }
>
> +/**
> + * driver_find_device_by_fwnode- device iterator for locating a particular device
> + * by fwnode pointer.
> + * @driver: the driver we're iterating
> + * @fwnode: fwnode pointer to match.
> + */
> +static inline struct device *
> +driver_find_device_by_fwnode(struct device_driver *drv,
> + const struct fwnode_handle *fwnode)
> +{
> + return driver_find_device(drv, NULL, fwnode, device_match_fwnode);
> +}
> +
> void driver_deferred_probe_add(struct device *dev);
> int driver_deferred_probe_check_state(struct device *dev);
> int driver_deferred_probe_check_state_continue(struct device *dev);
> @@ -544,6 +570,19 @@ class_find_device_by_of_node(struct class *class, const struct device_node *np)
> return class_find_device(class, NULL, np, device_match_of_node);
> }
>
> +/**
> + * class_find_device_by_fwnode : device iterator for locating a particular device
> + * matching the fwnode.
> + * @class: class type
> + * @fwnode: fwnode of the device to match.
> + */
> +static inline struct device *
> +class_find_device_by_fwnode(struct class *class,
> + const struct fwnode_handle *fwnode)
> +{
> + return class_find_device(class, NULL, fwnode, device_match_fwnode);
> +}
> +
> struct class_attribute {
> struct attribute attr;
> ssize_t (*show)(struct class *class, struct class_attribute *attr,
> --
> 2.21.0
>
WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
rafael@kernel.org, gregkh@linuxfoundation.org,
Joerg Roedel <joro@8bytes.org>,
linux-usb@vger.kernel.org, Will Deacon <will.deacon@arm.com>,
linux-kernel@vger.kernel.org, Jason Gunthorpe <jgg@ziepe.ca>,
Doug Ledford <dledford@redhat.com>, Joe Perches <joe@perches.com>,
Robin Murphy <robin.murphy@arm.com>,
"David S. Miller" <davem@davemloft.net>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 3/7] drivers: Introduce device lookup variants by fwnode
Date: Thu, 25 Jul 2019 11:10:50 -0600 [thread overview]
Message-ID: <20190725171050.GA25279@xps15> (raw)
In-Reply-To: <20190723221838.12024-4-suzuki.poulose@arm.com>
On Tue, Jul 23, 2019 at 11:18:34PM +0100, Suzuki K Poulose wrote:
> Add a helper to match the firmware node handle of a device and provide
> wrappers for {bus/class/driver}_find_device() APIs to avoid proliferation
> of duplicate custom match functions.
>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Doug Ledford <dledford@redhat.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Cc: Jason Gunthorpe <jgg@ziepe.ca>
> Cc: linux-usb@vger.kernel.org
> Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Cc: Joe Perches <joe@perches.com>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Will Deacon <will.deacon@arm.com>
> Cc: Robin Murphy <robin.murphy@arm.com>
> Cc: Joerg Roedel <joro@8bytes.org>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
> ---
> drivers/base/core.c | 6 +++
> drivers/base/devcon.c | 8 +---
> .../hwtracing/coresight/coresight-platform.c | 11 +-----
> drivers/hwtracing/coresight/coresight-priv.h | 2 -
> drivers/hwtracing/coresight/coresight.c | 4 +-
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> drivers/infiniband/hw/hns/hns_roce_hw_v1.c | 8 +---
> drivers/iommu/arm-smmu-v3.c | 9 +----
> drivers/iommu/arm-smmu.c | 9 +----
> .../ethernet/hisilicon/hns/hns_dsaf_misc.c | 8 +---
> drivers/usb/roles/class.c | 8 +---
> drivers/usb/typec/class.c | 8 +---
> include/linux/device.h | 39 +++++++++++++++++++
> 12 files changed, 57 insertions(+), 63 deletions(-)
>
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index fb83647d685a..e8f81a667545 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -3368,3 +3368,9 @@ int device_match_of_node(struct device *dev, const void *np)
> return dev->of_node == np;
> }
> EXPORT_SYMBOL_GPL(device_match_of_node);
> +
> +int device_match_fwnode(struct device *dev, const void *fwnode)
> +{
> + return dev_fwnode(dev) == fwnode;
> +}
> +EXPORT_SYMBOL_GPL(device_match_fwnode);
> diff --git a/drivers/base/devcon.c b/drivers/base/devcon.c
> index 09f28479b243..1d488dc5dd0c 100644
> --- a/drivers/base/devcon.c
> +++ b/drivers/base/devcon.c
> @@ -133,19 +133,13 @@ static struct bus_type *generic_match_buses[] = {
> NULL,
> };
>
> -static int device_fwnode_match(struct device *dev, const void *fwnode)
> -{
> - return dev_fwnode(dev) == fwnode;
> -}
> -
> static void *device_connection_fwnode_match(struct device_connection *con)
> {
> struct bus_type *bus;
> struct device *dev;
>
> for (bus = generic_match_buses[0]; bus; bus++) {
> - dev = bus_find_device(bus, NULL, (void *)con->fwnode,
> - device_fwnode_match);
> + dev = bus_find_device_by_fwnode(bus, con->fwnode);
> if (dev && !strncmp(dev_name(dev), con->id, strlen(con->id)))
> return dev;
>
> diff --git a/drivers/hwtracing/coresight/coresight-platform.c b/drivers/hwtracing/coresight/coresight-platform.c
> index dad7d96c5943..3c5bee429105 100644
> --- a/drivers/hwtracing/coresight/coresight-platform.c
> +++ b/drivers/hwtracing/coresight/coresight-platform.c
> @@ -37,11 +37,6 @@ static int coresight_alloc_conns(struct device *dev,
> return 0;
> }
>
> -int coresight_device_fwnode_match(struct device *dev, const void *fwnode)
> -{
> - return dev_fwnode(dev) == fwnode;
> -}
> -
> static struct device *
> coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
> {
> @@ -51,8 +46,7 @@ coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
> * If we have a non-configurable replicator, it will be found on the
> * platform bus.
> */
> - dev = bus_find_device(&platform_bus_type, NULL,
> - fwnode, coresight_device_fwnode_match);
> + dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
> if (dev)
> return dev;
>
> @@ -60,8 +54,7 @@ coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
> * We have a configurable component - circle through the AMBA bus
> * looking for the device that matches the endpoint node.
> */
> - return bus_find_device(&amba_bustype, NULL,
> - fwnode, coresight_device_fwnode_match);
> + return bus_find_device_by_fwnode(&amba_bustype, fwnode);
> }
>
> #ifdef CONFIG_OF
> diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h
> index 7d401790dd7e..61d7f9ff054d 100644
> --- a/drivers/hwtracing/coresight/coresight-priv.h
> +++ b/drivers/hwtracing/coresight/coresight-priv.h
> @@ -202,6 +202,4 @@ static inline void *coresight_get_uci_data(const struct amba_id *id)
>
> void coresight_release_platform_data(struct coresight_platform_data *pdata);
>
> -int coresight_device_fwnode_match(struct device *dev, const void *fwnode);
> -
> #endif
> diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
> index 55db77f6410b..6453c67a4d01 100644
> --- a/drivers/hwtracing/coresight/coresight.c
> +++ b/drivers/hwtracing/coresight/coresight.c
> @@ -1046,9 +1046,7 @@ static void coresight_fixup_device_conns(struct coresight_device *csdev)
> struct coresight_connection *conn = &csdev->pdata->conns[i];
> struct device *dev = NULL;
>
> - dev = bus_find_device(&coresight_bustype, NULL,
> - (void *)conn->child_fwnode,
> - coresight_device_fwnode_match);
> + dev = bus_find_device_by_fwnode(&coresight_bustype, conn->child_fwnode);
> if (dev) {
> conn->child_dev = to_coresight_device(dev);
> /* and put reference from 'bus_find_device()' */
> diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
> index 81e6dedb1e02..fa05e943038a 100644
> --- a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
> +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
> @@ -4499,19 +4499,13 @@ static const struct acpi_device_id hns_roce_acpi_match[] = {
> };
> MODULE_DEVICE_TABLE(acpi, hns_roce_acpi_match);
>
> -static int hns_roce_node_match(struct device *dev, const void *fwnode)
> -{
> - return dev->fwnode == fwnode;
> -}
> -
> static struct
> platform_device *hns_roce_find_pdev(struct fwnode_handle *fwnode)
> {
> struct device *dev;
>
> /* get the 'device' corresponding to the matching 'fwnode' */
> - dev = bus_find_device(&platform_bus_type, NULL,
> - fwnode, hns_roce_node_match);
> + dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
> /* get the platform device */
> return dev ? to_platform_device(dev) : NULL;
> }
> diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
> index a9a9fabd3968..6f0e13fa5e1a 100644
> --- a/drivers/iommu/arm-smmu-v3.c
> +++ b/drivers/iommu/arm-smmu-v3.c
> @@ -2034,16 +2034,11 @@ arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
>
> static struct platform_driver arm_smmu_driver;
>
> -static int arm_smmu_match_node(struct device *dev, const void *data)
> -{
> - return dev->fwnode == data;
> -}
> -
> static
> struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
> {
> - struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
> - fwnode, arm_smmu_match_node);
> + struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
> + fwnode);
> put_device(dev);
> return dev ? dev_get_drvdata(dev) : NULL;
> }
> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
> index 64977c131ee6..aa06498f291d 100644
> --- a/drivers/iommu/arm-smmu.c
> +++ b/drivers/iommu/arm-smmu.c
> @@ -1426,16 +1426,11 @@ static bool arm_smmu_capable(enum iommu_cap cap)
> }
> }
>
> -static int arm_smmu_match_node(struct device *dev, const void *data)
> -{
> - return dev->fwnode == data;
> -}
> -
> static
> struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
> {
> - struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
> - fwnode, arm_smmu_match_node);
> + struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
> + fwnode);
> put_device(dev);
> return dev ? dev_get_drvdata(dev) : NULL;
> }
> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> index bb6586d0e5af..ed3829ae4ef1 100644
> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
> @@ -754,17 +754,11 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev)
> return (void *)misc_op;
> }
>
> -static int hns_dsaf_dev_match(struct device *dev, const void *fwnode)
> -{
> - return dev->fwnode == fwnode;
> -}
> -
> struct
> platform_device *hns_dsaf_find_platform_device(struct fwnode_handle *fwnode)
> {
> struct device *dev;
>
> - dev = bus_find_device(&platform_bus_type, NULL,
> - fwnode, hns_dsaf_dev_match);
> + dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
> return dev ? to_platform_device(dev) : NULL;
> }
> diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c
> index c8efe60e2465..0526efbc4922 100644
> --- a/drivers/usb/roles/class.c
> +++ b/drivers/usb/roles/class.c
> @@ -85,11 +85,6 @@ enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw)
> }
> EXPORT_SYMBOL_GPL(usb_role_switch_get_role);
>
> -static int switch_fwnode_match(struct device *dev, const void *fwnode)
> -{
> - return dev_fwnode(dev) == fwnode;
> -}
> -
> static void *usb_role_switch_match(struct device_connection *con, int ep,
> void *data)
> {
> @@ -99,8 +94,7 @@ static void *usb_role_switch_match(struct device_connection *con, int ep,
> if (con->id && !fwnode_property_present(con->fwnode, con->id))
> return NULL;
>
> - dev = class_find_device(role_class, NULL, con->fwnode,
> - switch_fwnode_match);
> + dev = class_find_device_by_fwnode(role_class, con->fwnode);
> } else {
> dev = class_find_device_by_name(role_class, con->endpoint[ep]);
> }
> diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
> index 9b0d15b487e5..94a3eda62add 100644
> --- a/drivers/usb/typec/class.c
> +++ b/drivers/usb/typec/class.c
> @@ -205,11 +205,6 @@ static void typec_altmode_put_partner(struct altmode *altmode)
> put_device(&adev->dev);
> }
>
> -static int typec_port_fwnode_match(struct device *dev, const void *fwnode)
> -{
> - return dev_fwnode(dev) == fwnode;
> -}
> -
> static void *typec_port_match(struct device_connection *con, int ep, void *data)
> {
> struct device *dev;
> @@ -219,8 +214,7 @@ static void *typec_port_match(struct device_connection *con, int ep, void *data)
> * we need to return ERR_PTR(-PROBE_DEFER) when there is no device.
> */
> if (con->fwnode)
> - return class_find_device(typec_class, NULL, con->fwnode,
> - typec_port_fwnode_match);
> + return class_find_device_by_fwnode(typec_class, con->fwnode);
>
> dev = class_find_device_by_name(typec_class, con->endpoint[ep]);
>
> diff --git a/include/linux/device.h b/include/linux/device.h
> index 29d8d7ad41e6..7133fc1c285d 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -166,6 +166,7 @@ void subsys_dev_iter_exit(struct subsys_dev_iter *iter);
>
> int device_match_name(struct device *dev, const void *name);
> int device_match_of_node(struct device *dev, const void *np);
> +int device_match_fwnode(struct device *dev, const void *fwnode);
>
> int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
> int (*fn)(struct device *dev, void *data));
> @@ -198,6 +199,18 @@ bus_find_device_by_of_node(struct bus_type *bus, const struct device_node *np)
> return bus_find_device(bus, NULL, np, device_match_of_node);
> }
>
> +/**
> + * bus_find_device_by_fwnode : device iterator for locating a particular device
> + * matching the fwnode.
> + * @bus: bus type
> + * @fwnode: fwnode of the device to match.
> + */
> +static inline struct device *
> +bus_find_device_by_fwnode(struct bus_type *bus, const struct fwnode_handle *fwnode)
> +{
> + return bus_find_device(bus, NULL, fwnode, device_match_fwnode);
> +}
> +
> struct device *subsys_find_device_by_id(struct bus_type *bus, unsigned int id,
> struct device *hint);
> int bus_for_each_drv(struct bus_type *bus, struct device_driver *start,
> @@ -391,6 +404,19 @@ driver_find_device_by_of_node(struct device_driver *drv,
> return driver_find_device(drv, NULL, np, device_match_of_node);
> }
>
> +/**
> + * driver_find_device_by_fwnode- device iterator for locating a particular device
> + * by fwnode pointer.
> + * @driver: the driver we're iterating
> + * @fwnode: fwnode pointer to match.
> + */
> +static inline struct device *
> +driver_find_device_by_fwnode(struct device_driver *drv,
> + const struct fwnode_handle *fwnode)
> +{
> + return driver_find_device(drv, NULL, fwnode, device_match_fwnode);
> +}
> +
> void driver_deferred_probe_add(struct device *dev);
> int driver_deferred_probe_check_state(struct device *dev);
> int driver_deferred_probe_check_state_continue(struct device *dev);
> @@ -544,6 +570,19 @@ class_find_device_by_of_node(struct class *class, const struct device_node *np)
> return class_find_device(class, NULL, np, device_match_of_node);
> }
>
> +/**
> + * class_find_device_by_fwnode : device iterator for locating a particular device
> + * matching the fwnode.
> + * @class: class type
> + * @fwnode: fwnode of the device to match.
> + */
> +static inline struct device *
> +class_find_device_by_fwnode(struct class *class,
> + const struct fwnode_handle *fwnode)
> +{
> + return class_find_device(class, NULL, fwnode, device_match_fwnode);
> +}
> +
> struct class_attribute {
> struct attribute attr;
> ssize_t (*show)(struct class *class, struct class_attribute *attr,
> --
> 2.21.0
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-07-25 17:10 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-23 22:18 [PATCH v3 0/7] drivers: Add generic device lookup helpers Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-23 22:18 ` [PATCH v3 1/7] drivers: Introduce device lookup variants by name Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-25 15:42 ` Alexandre Belloni
2019-07-25 15:42 ` Alexandre Belloni
2019-07-29 14:37 ` Heikki Krogerus
2019-07-29 14:37 ` Heikki Krogerus
2019-07-23 22:18 ` [PATCH v3 2/7] drivers: Introduce device lookup variants by of_node Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-25 13:54 ` Lee Jones
2019-07-25 13:54 ` Lee Jones
2019-07-25 13:54 ` Lee Jones
2019-07-30 11:03 ` Greg KH
2019-07-30 11:03 ` Greg KH
2019-07-30 11:03 ` Greg KH
2019-07-30 11:03 ` Greg KH
2019-07-25 19:25 ` Wolfram Sang
2019-07-25 19:25 ` Wolfram Sang
2019-07-25 19:25 ` Wolfram Sang
2019-07-25 19:25 ` Wolfram Sang
2019-07-25 21:01 ` Moritz Fischer
2019-07-25 21:01 ` Moritz Fischer
2019-07-25 21:01 ` Moritz Fischer
2019-07-25 21:01 ` Moritz Fischer
2019-07-26 17:18 ` Mark Brown
2019-07-26 17:18 ` Mark Brown
2019-07-26 17:18 ` Mark Brown
2019-07-26 17:18 ` Mark Brown
2019-07-23 22:18 ` [PATCH v3 3/7] drivers: Introduce device lookup variants by fwnode Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-24 10:16 ` Robin Murphy
2019-07-24 10:16 ` Robin Murphy
2019-07-25 17:10 ` Mathieu Poirier [this message]
2019-07-25 17:10 ` Mathieu Poirier
2019-07-29 14:36 ` Heikki Krogerus
2019-07-29 14:36 ` Heikki Krogerus
2019-07-23 22:18 ` [PATCH v3 4/7] drivers: Introduce device lookup variants by device type Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-23 22:18 ` [PATCH v3 5/7] drivers: Introduce device lookup variants by ACPI_COMPANION device Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-26 17:18 ` Mark Brown
2019-07-26 17:18 ` Mark Brown
2019-07-26 20:23 ` Wolfram Sang
2019-07-26 20:23 ` Wolfram Sang
2019-07-26 20:23 ` Wolfram Sang
2019-08-01 11:58 ` Andy Shevchenko
2019-08-01 11:58 ` Andy Shevchenko
2019-08-01 11:58 ` Andy Shevchenko
2019-08-01 12:08 ` Wolfram Sang
2019-08-01 12:08 ` Wolfram Sang
2019-08-01 12:21 ` Andy Shevchenko
2019-08-01 12:21 ` Andy Shevchenko
2019-08-01 12:27 ` Wolfram Sang
2019-08-01 12:27 ` Wolfram Sang
2019-07-23 22:18 ` [PATCH v3 6/7] drivers: Add generic helper to match any device Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-23 22:24 ` Bjorn Helgaas
2019-07-23 22:24 ` Bjorn Helgaas
2019-07-23 22:18 ` [PATCH v3 7/7] platform: Add platform_find_device_by_driver() helper Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-24 10:44 ` Robin Murphy
2019-07-24 10:44 ` Robin Murphy
2019-07-25 14:10 ` [PATCH v3 0/7] drivers: Add generic device lookup helpers Greg KH
2019-07-25 14:10 ` Greg KH
2019-07-25 14:10 ` Greg KH
2019-07-30 11:56 ` Greg KH
2019-07-30 11:56 ` Greg KH
2019-07-30 11:56 ` Greg KH
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=20190725171050.GA25279@xps15 \
--to=mathieu.poirier@linaro.org \
--cc=davem@davemloft.net \
--cc=dledford@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=jgg@ziepe.ca \
--cc=joe@perches.com \
--cc=joro@8bytes.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=robin.murphy@arm.com \
--cc=suzuki.poulose@arm.com \
--cc=ulf.hansson@linaro.org \
--cc=will.deacon@arm.com \
/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.