All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nipun Gupta <nipun.gupta@nxp.com>
To: Robin Murphy <robin.murphy@arm.com>, "hch@lst.de" <hch@lst.de>,
	"linux@armlinux.org.uk" <linux@armlinux.org.uk>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"m.szyprowski@samsung.com" <m.szyprowski@samsung.com>,
	"bhelgaas@google.com" <bhelgaas@google.com>
Cc: "dmitry.torokhov@gmail.com" <dmitry.torokhov@gmail.com>,
	"rafael.j.wysocki@intel.com" <rafael.j.wysocki@intel.com>,
	"jarkko.sakkinen@linux.intel.com"
	<jarkko.sakkinen@linux.intel.com>,
	"linus.walleij@linaro.org" <linus.walleij@linaro.org>,
	"johan@kernel.org" <johan@kernel.org>,
	"msuchanek@suse.de" <msuchanek@suse.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"iommu@lists.linux-foundation.org"
	<iommu@lists.linux-foundation.org>,
	"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>
Subject: RE: [PATCH] dma-mapping: move dma configuration to bus infrastructure
Date: Tue, 13 Mar 2018 16:11:28 +0000	[thread overview]
Message-ID: <HE1PR0401MB2425D5BBC381C96D4ABE9D18E6D20@HE1PR0401MB2425.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <a6cd83c9-d769-2994-5230-0a97de1897e5@arm.com>



> -----Original Message-----
> From: Robin Murphy [mailto:robin.murphy@arm.com]
> Sent: Tuesday, March 13, 2018 17:06
> 
> On 12/03/18 15:24, Nipun Gupta wrote:
> > The change introduces 'dma_configure' & 'dma_deconfigure'as
> > bus callback functions so each bus can choose to implement
> > its own dma configuration function.
> > This eases the addition of new busses w.r.t. adding the dma
> > configuration functionality.
> 
> It's probably worth clarifying - either in the commit message, the
> kerneldoc, or both - that the bus-specific aspect is that of mapping
> between a given device on the bus and the relevant firmware description
> of its DMA configuration.

Okay.

>
> > The change also updates the PCI, Platform and ACPI bus to use
> > new introduced callbacks.
> >
> > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
> > ---
> >   - This patch is based on the comments on:
> >
> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwo
> rk.kernel.org%2Fpatch%2F10259087%2F&data=02%7C01%7Cnipun.gupta%40nxp.com%7
> Cc541100ecb944e7650a408d588d69ab0%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7
> C0%7C636565377665676631&sdata=k2Xjn5B1GECx4UjCg9tChOpOrD3NPM7BkzIXLLSv3rI%
> 3D&reserved=0
> >   - I have validated for PCI and platform, but not for AMBA as I
> >     do not have infrastructure to validate it.
> >     Can anyone please validate them on AMBA?
> >
> >   drivers/amba/bus.c          | 38 ++++++++++++++++++++++++-----
> >   drivers/base/dd.c           | 14 +++++++----
> >   drivers/base/dma-mapping.c  | 41 -------------------------------
> >   drivers/base/platform.c     | 36 ++++++++++++++++++++++-----
> >   drivers/pci/pci-driver.c    | 59 ++++++++++++++++++++++++++++++++++++-
> --------
> >   include/linux/device.h      |  6 +++++
> >   include/linux/dma-mapping.h | 12 ---------
> >   7 files changed, 124 insertions(+), 82 deletions(-)
> >
> > diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
> > index 594c228..58241d2 100644
> > --- a/drivers/amba/bus.c
> > +++ b/drivers/amba/bus.c
> > @@ -20,6 +20,8 @@
> >   #include <linux/sizes.h>
> >   #include <linux/limits.h>
> >   #include <linux/clk/clk-conf.h>
> > +#include <linux/acpi.h>
> > +#include <linux/of_device.h>
> >
> >   #include <asm/irq.h>
> >
> > @@ -171,6 +173,28 @@ static int amba_pm_runtime_resume(struct device
> *dev)
> >   }
> >   #endif /* CONFIG_PM */
> >
> > +int amba_dma_configure(struct device *dev)
> > +{
> > +	enum dev_dma_attr attr;
> > +	int ret = 0;
> > +
> > +	if (dev->of_node) {
> > +		ret = of_dma_configure(dev, dev->of_node);
> > +	} else if (has_acpi_companion(dev)) {
> > +		attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode));
> > +		if (attr != DEV_DMA_NOT_SUPPORTED)
> > +			ret = acpi_dma_configure(dev, attr);
> > +	}
> > +
> > +	return ret;
> > +}
> 
> I would be inclined to have amba_bustype just reference
> platform_dma_configure() directly rather than duplicate it like this,
> since there's no sensible reason for them to ever differ.

I think dma_common_configure() having this as the common code seems pretty
Decent. All the busses will probably call this API.

> 
> > +
> > +void amba_dma_deconfigure(struct device *dev)
> > +{
> > +	of_dma_deconfigure(dev);
> > +	acpi_dma_deconfigure(dev);
> > +}
> > +
> >   static const struct dev_pm_ops amba_pm = {
> >   	.suspend	= pm_generic_suspend,
> >   	.resume		= pm_generic_resume,
> > @@ -190,12 +214,14 @@ static int amba_pm_runtime_resume(struct device
> *dev)
> >    * so we call the bus "amba".
> >    */
> >   struct bus_type amba_bustype = {
> > -	.name		= "amba",
> > -	.dev_groups	= amba_dev_groups,
> > -	.match		= amba_match,
> > -	.uevent		= amba_uevent,
> > -	.pm		= &amba_pm,
> > -	.force_dma	= true,
> > +	.name			= "amba",
> > +	.dev_groups		= amba_dev_groups,
> > +	.match			= amba_match,
> > +	.uevent			= amba_uevent,
> > +	.pm			= &amba_pm,
> > +	.dma_configure		= amba_dma_configure,
> > +	.dma_deconfigure	= amba_dma_deconfigure,
> > +	.force_dma		= true,
> 
> This patch should also be removing force_dma because it no longer makes
> sense. If DMA configuration is now done by a bus-level callback, then a
> bus which wants its children to get DMA configuration needs to implement
> that callback; there's nowhere to force a "default" global behaviour any
> more.

Agree. We will also need to pass a force_dma flag in of_dma_configure() as
Christoph suggests. Ill update this.

> 
> >   };
> >
> >   static int __init amba_init(void)
> > diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> > index de6fd09..f124f3f 100644
> > --- a/drivers/base/dd.c
> > +++ b/drivers/base/dd.c
> > @@ -421,9 +421,11 @@ static int really_probe(struct device *dev, struct
> device_driver *drv)
> >   	if (ret)
> >   		goto pinctrl_bind_failed;
> >
> > -	ret = dma_configure(dev);
> > -	if (ret)
> > -		goto dma_failed;
> > +	if (dev->bus->dma_configure) {
> > +		ret = dev->bus->dma_configure(dev);
> > +		if (ret)
> > +			goto dma_failed;
> > +	}
> >
> >   	if (driver_sysfs_add(dev)) {
> >   		printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n",
> > @@ -486,7 +488,8 @@ static int really_probe(struct device *dev, struct
> device_driver *drv)
> >   	goto done;
> >
> >   probe_failed:
> > -	dma_deconfigure(dev);
> > +	if (dev->bus->dma_deconfigure)
> > +		dev->bus->dma_deconfigure(dev);
> >   dma_failed:
> >   	if (dev->bus)
> >   		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
> > @@ -895,7 +898,8 @@ static void __device_release_driver(struct device
> *dev, struct device *parent)
> >   			drv->remove(dev);
> >
> >   		device_links_driver_cleanup(dev);
> > -		dma_deconfigure(dev);
> > +		if (dev->bus->dma_deconfigure)
> > +			dev->bus->dma_deconfigure(dev);
> >
> >   		devres_release_all(dev);
> >   		dev->driver = NULL;
> > diff --git a/drivers/base/dma-mapping.c b/drivers/base/dma-mapping.c
> > index 3b11835..f16bd49 100644
> > --- a/drivers/base/dma-mapping.c
> > +++ b/drivers/base/dma-mapping.c
> > @@ -6,11 +6,9 @@
> >    * Copyright (c) 2006  Tejun Heo <teheo@suse.de>
> >    */
> >
> > -#include <linux/acpi.h>
> >   #include <linux/dma-mapping.h>
> >   #include <linux/export.h>
> >   #include <linux/gfp.h>
> > -#include <linux/of_device.h>
> >   #include <linux/slab.h>
> >   #include <linux/vmalloc.h>
> >
> > @@ -329,42 +327,3 @@ void dma_common_free_remap(void *cpu_addr, size_t
> size, unsigned long vm_flags)
> >   	vunmap(cpu_addr);
> >   }
> >   #endif
> > -
> > -/*
> > - * Common configuration to enable DMA API use for a device
> > - */
> > -#include <linux/pci.h>
> > -
> > -int dma_configure(struct device *dev)
> > -{
> > -	struct device *bridge = NULL, *dma_dev = dev;
> > -	enum dev_dma_attr attr;
> > -	int ret = 0;
> > -
> > -	if (dev_is_pci(dev)) {
> > -		bridge = pci_get_host_bridge_device(to_pci_dev(dev));
> > -		dma_dev = bridge;
> > -		if (IS_ENABLED(CONFIG_OF) && dma_dev->parent &&
> > -		    dma_dev->parent->of_node)
> > -			dma_dev = dma_dev->parent;
> > -	}
> > -
> > -	if (dma_dev->of_node) {
> > -		ret = of_dma_configure(dev, dma_dev->of_node);
> > -	} else if (has_acpi_companion(dma_dev)) {
> > -		attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode));
> > -		if (attr != DEV_DMA_NOT_SUPPORTED)
> > -			ret = acpi_dma_configure(dev, attr);
> > -	}
> > -
> > -	if (bridge)
> > -		pci_put_host_bridge_device(bridge);
> > -
> > -	return ret;
> > -}
> > -
> > -void dma_deconfigure(struct device *dev)
> > -{
> > -	of_dma_deconfigure(dev);
> > -	acpi_dma_deconfigure(dev);
> > -}
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index f1bf7b3..adf94eb 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -1130,6 +1130,28 @@ int platform_pm_restore(struct device *dev)
> >
> >   #endif /* CONFIG_HIBERNATE_CALLBACKS */
> >
> > +int platform_dma_configure(struct device *dev)
> > +{
> > +	enum dev_dma_attr attr;
> > +	int ret = 0;
> > +
> > +	if (dev->of_node) {
> > +		ret = of_dma_configure(dev, dev->of_node);
> > +	} else if (has_acpi_companion(dev)) {
> > +		attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode));
> > +		if (attr != DEV_DMA_NOT_SUPPORTED)
> > +			ret = acpi_dma_configure(dev, attr);
> > +	}
> > +
> > +	return ret;
> > +}
> > +
> > +void platform_dma_deconfigure(struct device *dev)
> > +{
> > +	of_dma_deconfigure(dev);
> > +	acpi_dma_deconfigure(dev);
> > +}
> > +
> >   static const struct dev_pm_ops platform_dev_pm_ops = {
> >   	.runtime_suspend = pm_generic_runtime_suspend,
> >   	.runtime_resume = pm_generic_runtime_resume,
> > @@ -1137,12 +1159,14 @@ int platform_pm_restore(struct device *dev)
> >   };
> >
> >   struct bus_type platform_bus_type = {
> > -	.name		= "platform",
> > -	.dev_groups	= platform_dev_groups,
> > -	.match		= platform_match,
> > -	.uevent		= platform_uevent,
> > -	.pm		= &platform_dev_pm_ops,
> > -	.force_dma	= true,
> > +	.name			= "platform",
> > +	.dev_groups		= platform_dev_groups,
> > +	.match			= platform_match,
> > +	.uevent			= platform_uevent,
> > +	.pm			= &platform_dev_pm_ops,
> > +	.dma_configure		= platform_dma_configure,
> > +	.dma_deconfigure	= platform_dma_deconfigure,
> > +	.force_dma		= true,
> >   };
> >   EXPORT_SYMBOL_GPL(platform_bus_type);
> >
> > diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> > index 3bed6be..4a77814 100644
> > --- a/drivers/pci/pci-driver.c
> > +++ b/drivers/pci/pci-driver.c
> > @@ -18,6 +18,8 @@
> >   #include <linux/pm_runtime.h>
> >   #include <linux/suspend.h>
> >   #include <linux/kexec.h>
> > +#include <linux/acpi.h>
> > +#include <linux/of_device.h>
> >   #include "pci.h"
> >
> >   struct pci_dynid {
> > @@ -1522,19 +1524,52 @@ static int pci_bus_num_vf(struct device *dev)
> >   	return pci_num_vf(to_pci_dev(dev));
> >   }
> >
> > +int pci_dma_configure(struct device *dev)
> > +{
> > +	struct device *bridge, *dma_dev;
> 
> You don't need dma_dev here; see the code removed in 09515ef5ddad for
> how the logic originally worked.

Okay. I will have a look in this commit id.

> 
> > +	enum dev_dma_attr attr;
> > +	int ret = 0;
> > +
> > +	bridge = pci_get_host_bridge_device(to_pci_dev(dev));
> > +	dma_dev = bridge;
> > +	if (IS_ENABLED(CONFIG_OF) && dma_dev->parent &&
> > +	    dma_dev->parent->of_node)
> > +		dma_dev = dma_dev->parent;
> > +
> > +	if (dma_dev->of_node) {
> > +		ret = of_dma_configure(dev, dma_dev->of_node);
> > +	} else if (has_acpi_companion(dma_dev)) {
> > +		attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode));
> > +		if (attr != DEV_DMA_NOT_SUPPORTED)
> > +			ret = acpi_dma_configure(dev, attr);
> > +	}
> > +
> > +	pci_put_host_bridge_device(bridge);
> > +
> > +	return ret;
> > +}
> > +
> > +void pci_dma_deconfigure(struct device *dev)
> > +{
> > +	of_dma_deconfigure(dev);
> > +	acpi_dma_deconfigure(dev);
> > +}
> > +
> >   struct bus_type pci_bus_type = {
> > -	.name		= "pci",
> > -	.match		= pci_bus_match,
> > -	.uevent		= pci_uevent,
> > -	.probe		= pci_device_probe,
> > -	.remove		= pci_device_remove,
> > -	.shutdown	= pci_device_shutdown,
> > -	.dev_groups	= pci_dev_groups,
> > -	.bus_groups	= pci_bus_groups,
> > -	.drv_groups	= pci_drv_groups,
> > -	.pm		= PCI_PM_OPS_PTR,
> > -	.num_vf		= pci_bus_num_vf,
> > -	.force_dma	= true,
> > +	.name			= "pci",
> > +	.match			= pci_bus_match,
> > +	.uevent			= pci_uevent,
> > +	.probe			= pci_device_probe,
> > +	.remove			= pci_device_remove,
> > +	.shutdown		= pci_device_shutdown,
> > +	.dev_groups		= pci_dev_groups,
> > +	.bus_groups		= pci_bus_groups,
> > +	.drv_groups		= pci_drv_groups,
> > +	.pm			= PCI_PM_OPS_PTR,
> > +	.num_vf			= pci_bus_num_vf,
> > +	.dma_configure		= pci_dma_configure,
> > +	.dma_deconfigure	= pci_dma_deconfigure,
> > +	.force_dma		= true,
> >   };
> >   EXPORT_SYMBOL(pci_bus_type);
> >
> > diff --git a/include/linux/device.h b/include/linux/device.h
> > index b093405..9b2dcf6 100644
> > --- a/include/linux/device.h
> > +++ b/include/linux/device.h
> > @@ -88,6 +88,9 @@ extern int __must_check bus_create_file(struct
> bus_type *,
> >    * @resume:	Called to bring a device on this bus out of sleep mode.
> >    * @num_vf:	Called to find out how many virtual functions a device on
> this
> >    *		bus supports.
> > + * @dma_configure:	Called to setup DMA configuration on a device on
> > +			this bus.
> > + * @dma_deconfigure:	Called to tear down the DMA configuration.
> >    * @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
> > @@ -130,6 +133,9 @@ struct bus_type {
> >
> >   	int (*num_vf)(struct device *dev);
> >
> > +	int (*dma_configure)(struct device *dev);
> > +	void (*dma_deconfigure)(struct device *dev);
> 
> Seeing it laid out in the patch, I really don't think we need a
> deconfigure callback like this - the fact that we're just copy-pasting
> the existing implementation everywhere is a big hint, but more
> conceptually I can't see a good reason for it to ever need bus-specific
> behaviour in the same way that configure does.
> 
> Maybe that means we keep dma_configure() around for the sake of
> symmetry, but just reduce it to:
> 
> int dma_configure(struct device *dev)
> {
> 	if (dev->bus->dma_configure)
> 		return dev->bus->dma_configure(dev);
> 	return 0;
> }
> 
> Realistically though, dma_deconfigure() only exists for the sake of
> calling arch_teardown_dma_ops(), and that only really exists for the
> sake of the old ARM IOMMU code, so I'm not inclined to pretend it's
> anywhere near as important as the dma_configure() path in design terms.

Yes, I will remove dma_deconfigure callback.

Thanks,
Nipun

> 
> Robin.
> 
> > +
> >   	const struct dev_pm_ops *pm;
> >
> >   	const struct iommu_ops *iommu_ops;
> > diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
> > index eb9eab4..039224b 100644
> > --- a/include/linux/dma-mapping.h
> > +++ b/include/linux/dma-mapping.h
> > @@ -761,18 +761,6 @@ void *dma_mark_declared_memory_occupied(struct
> device *dev,
> >   }
> >   #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */
> >
> > -#ifdef CONFIG_HAS_DMA
> > -int dma_configure(struct device *dev);
> > -void dma_deconfigure(struct device *dev);
> > -#else
> > -static inline int dma_configure(struct device *dev)
> > -{
> > -	return 0;
> > -}
> > -
> > -static inline void dma_deconfigure(struct device *dev) {}
> > -#endif
> > -
> >   /*
> >    * Managed DMA API
> >    */
> >

WARNING: multiple messages have this Message-ID (diff)
From: Nipun Gupta <nipun.gupta@nxp.com>
To: Robin Murphy <robin.murphy@arm.com>, "hch@lst.de" <hch@lst.de>,
	"linux@armlinux.org.uk" <linux@armlinux.org.uk>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"m.szyprowski@samsung.com" <m.szyprowski@samsung.com>,
	"bhelgaas@google.com" <bhelgaas@google.com>
Cc: "dmitry.torokhov@gmail.com" <dmitry.torokhov@gmail.com>,
	"rafael.j.wysocki@intel.com" <rafael.j.wysocki@intel.com>,
	"jarkko.sakkinen@linux.intel.com"
	<jarkko.sakkinen@linux.intel.com>,
	"linus.walleij@linaro.org" <linus.walleij@linaro.org>,
	"johan@kernel.org" <johan@kernel.org>,
	"msuchanek@suse.de" <msuchanek@suse.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"iommu@lists.linux-foundation.org"
	<iommu@lists.linux-foundation.org>,
	"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>
Subject: RE: [PATCH] dma-mapping: move dma configuration to bus infrastructure
Date: Tue, 13 Mar 2018 16:11:28 +0000	[thread overview]
Message-ID: <HE1PR0401MB2425D5BBC381C96D4ABE9D18E6D20@HE1PR0401MB2425.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <a6cd83c9-d769-2994-5230-0a97de1897e5@arm.com>

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUm9iaW4gTXVycGh5IFtt
YWlsdG86cm9iaW4ubXVycGh5QGFybS5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIE1hcmNoIDEzLCAy
MDE4IDE3OjA2DQo+IA0KPiBPbiAxMi8wMy8xOCAxNToyNCwgTmlwdW4gR3VwdGEgd3JvdGU6DQo+
ID4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzICdkbWFfY29uZmlndXJlJyAmICdkbWFfZGVjb25maWd1
cmUnYXMNCj4gPiBidXMgY2FsbGJhY2sgZnVuY3Rpb25zIHNvIGVhY2ggYnVzIGNhbiBjaG9vc2Ug
dG8gaW1wbGVtZW50DQo+ID4gaXRzIG93biBkbWEgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4NCj4g
PiBUaGlzIGVhc2VzIHRoZSBhZGRpdGlvbiBvZiBuZXcgYnVzc2VzIHcuci50LiBhZGRpbmcgdGhl
IGRtYQ0KPiA+IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25hbGl0eS4NCj4gDQo+IEl0J3MgcHJvYmFi
bHkgd29ydGggY2xhcmlmeWluZyAtIGVpdGhlciBpbiB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZQ0K
PiBrZXJuZWxkb2MsIG9yIGJvdGggLSB0aGF0IHRoZSBidXMtc3BlY2lmaWMgYXNwZWN0IGlzIHRo
YXQgb2YgbWFwcGluZw0KPiBiZXR3ZWVuIGEgZ2l2ZW4gZGV2aWNlIG9uIHRoZSBidXMgYW5kIHRo
ZSByZWxldmFudCBmaXJtd2FyZSBkZXNjcmlwdGlvbg0KPiBvZiBpdHMgRE1BIGNvbmZpZ3VyYXRp
b24uDQoNCk9rYXkuDQoNCj4NCj4gPiBUaGUgY2hhbmdlIGFsc28gdXBkYXRlcyB0aGUgUENJLCBQ
bGF0Zm9ybSBhbmQgQUNQSSBidXMgdG8gdXNlDQo+ID4gbmV3IGludHJvZHVjZWQgY2FsbGJhY2tz
Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmlwdW4gR3VwdGEgPG5pcHVuLmd1cHRhQG54cC5j
b20+DQo+ID4gLS0tDQo+ID4gICAtIFRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gdGhlIGNvbW1lbnRz
IG9uOg0KPiA+DQo+IGh0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2su
Y29tLz91cmw9aHR0cHMlM0ElMkYlMkZwYXRjaHdvDQo+IHJrLmtlcm5lbC5vcmclMkZwYXRjaCUy
RjEwMjU5MDg3JTJGJmRhdGE9MDIlN0MwMSU3Q25pcHVuLmd1cHRhJTQwbnhwLmNvbSU3DQo+IENj
NTQxMTAwZWNiOTQ0ZTc2NTBhNDA4ZDU4OGQ2OWFiMCU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5
YzVjMzAxNjM1JTdDMCU3DQo+IEMwJTdDNjM2NTY1Mzc3NjY1Njc2NjMxJnNkYXRhPWsyWGpuNUIx
R0VDeDRVakNnOXRDaE9wT3JEM05QTTdCa3pJWExMU3YzckklDQo+IDNEJnJlc2VydmVkPTANCj4g
PiAgIC0gSSBoYXZlIHZhbGlkYXRlZCBmb3IgUENJIGFuZCBwbGF0Zm9ybSwgYnV0IG5vdCBmb3Ig
QU1CQSBhcyBJDQo+ID4gICAgIGRvIG5vdCBoYXZlIGluZnJhc3RydWN0dXJlIHRvIHZhbGlkYXRl
IGl0Lg0KPiA+ICAgICBDYW4gYW55b25lIHBsZWFzZSB2YWxpZGF0ZSB0aGVtIG9uIEFNQkE/DQo+
ID4NCj4gPiAgIGRyaXZlcnMvYW1iYS9idXMuYyAgICAgICAgICB8IDM4ICsrKysrKysrKysrKysr
KysrKysrKysrKy0tLS0tDQo+ID4gICBkcml2ZXJzL2Jhc2UvZGQuYyAgICAgICAgICAgfCAxNCAr
KysrKysrLS0tLQ0KPiA+ICAgZHJpdmVycy9iYXNlL2RtYS1tYXBwaW5nLmMgIHwgNDEgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICAgZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMg
ICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tDQo+ID4gICBkcml2ZXJzL3BjaS9w
Y2ktZHJpdmVyLmMgICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst
DQo+IC0tLS0tLS0tDQo+ID4gICBpbmNsdWRlL2xpbnV4L2RldmljZS5oICAgICAgfCAgNiArKysr
Kw0KPiA+ICAgaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIHwgMTIgLS0tLS0tLS0tDQo+ID4g
ICA3IGZpbGVzIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCA4MiBkZWxldGlvbnMoLSkNCj4g
Pg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVz
LmMNCj4gPiBpbmRleCA1OTRjMjI4Li41ODI0MWQyIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv
YW1iYS9idXMuYw0KPiA+ICsrKyBiL2RyaXZlcnMvYW1iYS9idXMuYw0KPiA+IEBAIC0yMCw2ICsy
MCw4IEBADQo+ID4gICAjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4NCj4gPiAgICNpbmNsdWRlIDxs
aW51eC9saW1pdHMuaD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9jbGsvY2xrLWNvbmYuaD4NCj4g
PiArI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj
ZS5oPg0KPiA+DQo+ID4gICAjaW5jbHVkZSA8YXNtL2lycS5oPg0KPiA+DQo+ID4gQEAgLTE3MSw2
ICsxNzMsMjggQEAgc3RhdGljIGludCBhbWJhX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZp
Y2UNCj4gKmRldikNCj4gPiAgIH0NCj4gPiAgICNlbmRpZiAvKiBDT05GSUdfUE0gKi8NCj4gPg0K
PiA+ICtpbnQgYW1iYV9kbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0K
PiA+ICsJZW51bSBkZXZfZG1hX2F0dHIgYXR0cjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsN
Cj4gPiArCWlmIChkZXYtPm9mX25vZGUpIHsNCj4gPiArCQlyZXQgPSBvZl9kbWFfY29uZmlndXJl
KGRldiwgZGV2LT5vZl9ub2RlKTsNCj4gPiArCX0gZWxzZSBpZiAoaGFzX2FjcGlfY29tcGFuaW9u
KGRldikpIHsNCj4gPiArCQlhdHRyID0gYWNwaV9nZXRfZG1hX2F0dHIodG9fYWNwaV9kZXZpY2Vf
bm9kZShkZXYtPmZ3bm9kZSkpOw0KPiA+ICsJCWlmIChhdHRyICE9IERFVl9ETUFfTk9UX1NVUFBP
UlRFRCkNCj4gPiArCQkJcmV0ID0gYWNwaV9kbWFfY29uZmlndXJlKGRldiwgYXR0cik7DQo+ID4g
Kwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiANCj4gSSB3b3VsZCBiZSBp
bmNsaW5lZCB0byBoYXZlIGFtYmFfYnVzdHlwZSBqdXN0IHJlZmVyZW5jZQ0KPiBwbGF0Zm9ybV9k
bWFfY29uZmlndXJlKCkgZGlyZWN0bHkgcmF0aGVyIHRoYW4gZHVwbGljYXRlIGl0IGxpa2UgdGhp
cywNCj4gc2luY2UgdGhlcmUncyBubyBzZW5zaWJsZSByZWFzb24gZm9yIHRoZW0gdG8gZXZlciBk
aWZmZXIuDQoNCkkgdGhpbmsgZG1hX2NvbW1vbl9jb25maWd1cmUoKSBoYXZpbmcgdGhpcyBhcyB0
aGUgY29tbW9uIGNvZGUgc2VlbXMgcHJldHR5DQpEZWNlbnQuIEFsbCB0aGUgYnVzc2VzIHdpbGwg
cHJvYmFibHkgY2FsbCB0aGlzIEFQSS4NCg0KPiANCj4gPiArDQo+ID4gK3ZvaWQgYW1iYV9kbWFf
ZGVjb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwlvZl9kbWFfZGVj
b25maWd1cmUoZGV2KTsNCj4gPiArCWFjcGlfZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gK30N
Cj4gPiArDQo+ID4gICBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYW1iYV9wbSA9IHsN
Cj4gPiAgIAkuc3VzcGVuZAk9IHBtX2dlbmVyaWNfc3VzcGVuZCwNCj4gPiAgIAkucmVzdW1lCQk9
IHBtX2dlbmVyaWNfcmVzdW1lLA0KPiA+IEBAIC0xOTAsMTIgKzIxNCwxNCBAQCBzdGF0aWMgaW50
IGFtYmFfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZQ0KPiAqZGV2KQ0KPiA+ICAgICog
c28gd2UgY2FsbCB0aGUgYnVzICJhbWJhIi4NCj4gPiAgICAqLw0KPiA+ICAgc3RydWN0IGJ1c190
eXBlIGFtYmFfYnVzdHlwZSA9IHsNCj4gPiAtCS5uYW1lCQk9ICJhbWJhIiwNCj4gPiAtCS5kZXZf
Z3JvdXBzCT0gYW1iYV9kZXZfZ3JvdXBzLA0KPiA+IC0JLm1hdGNoCQk9IGFtYmFfbWF0Y2gsDQo+
ID4gLQkudWV2ZW50CQk9IGFtYmFfdWV2ZW50LA0KPiA+IC0JLnBtCQk9ICZhbWJhX3BtLA0KPiA+
IC0JLmZvcmNlX2RtYQk9IHRydWUsDQo+ID4gKwkubmFtZQkJCT0gImFtYmEiLA0KPiA+ICsJLmRl
dl9ncm91cHMJCT0gYW1iYV9kZXZfZ3JvdXBzLA0KPiA+ICsJLm1hdGNoCQkJPSBhbWJhX21hdGNo
LA0KPiA+ICsJLnVldmVudAkJCT0gYW1iYV91ZXZlbnQsDQo+ID4gKwkucG0JCQk9ICZhbWJhX3Bt
LA0KPiA+ICsJLmRtYV9jb25maWd1cmUJCT0gYW1iYV9kbWFfY29uZmlndXJlLA0KPiA+ICsJLmRt
YV9kZWNvbmZpZ3VyZQk9IGFtYmFfZG1hX2RlY29uZmlndXJlLA0KPiA+ICsJLmZvcmNlX2RtYQkJ
PSB0cnVlLA0KPiANCj4gVGhpcyBwYXRjaCBzaG91bGQgYWxzbyBiZSByZW1vdmluZyBmb3JjZV9k
bWEgYmVjYXVzZSBpdCBubyBsb25nZXIgbWFrZXMNCj4gc2Vuc2UuIElmIERNQSBjb25maWd1cmF0
aW9uIGlzIG5vdyBkb25lIGJ5IGEgYnVzLWxldmVsIGNhbGxiYWNrLCB0aGVuIGENCj4gYnVzIHdo
aWNoIHdhbnRzIGl0cyBjaGlsZHJlbiB0byBnZXQgRE1BIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8g
aW1wbGVtZW50DQo+IHRoYXQgY2FsbGJhY2s7IHRoZXJlJ3Mgbm93aGVyZSB0byBmb3JjZSBhICJk
ZWZhdWx0IiBnbG9iYWwgYmVoYXZpb3VyIGFueQ0KPiBtb3JlLg0KDQpBZ3JlZS4gV2Ugd2lsbCBh
bHNvIG5lZWQgdG8gcGFzcyBhIGZvcmNlX2RtYSBmbGFnIGluIG9mX2RtYV9jb25maWd1cmUoKSBh
cw0KQ2hyaXN0b3BoIHN1Z2dlc3RzLiBJbGwgdXBkYXRlIHRoaXMuDQoNCj4gDQo+ID4gICB9Ow0K
PiA+DQo+ID4gICBzdGF0aWMgaW50IF9faW5pdCBhbWJhX2luaXQodm9pZCkNCj4gPiBkaWZmIC0t
Z2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYw0KPiA+IGluZGV4IGRl
NmZkMDkuLmYxMjRmM2YgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMNCj4gPiAr
KysgYi9kcml2ZXJzL2Jhc2UvZGQuYw0KPiA+IEBAIC00MjEsOSArNDIxLDExIEBAIHN0YXRpYyBp
bnQgcmVhbGx5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0DQo+IGRldmljZV9kcml2
ZXIgKmRydikNCj4gPiAgIAlpZiAocmV0KQ0KPiA+ICAgCQlnb3RvIHBpbmN0cmxfYmluZF9mYWls
ZWQ7DQo+ID4NCj4gPiAtCXJldCA9IGRtYV9jb25maWd1cmUoZGV2KTsNCj4gPiAtCWlmIChyZXQp
DQo+ID4gLQkJZ290byBkbWFfZmFpbGVkOw0KPiA+ICsJaWYgKGRldi0+YnVzLT5kbWFfY29uZmln
dXJlKSB7DQo+ID4gKwkJcmV0ID0gZGV2LT5idXMtPmRtYV9jb25maWd1cmUoZGV2KTsNCj4gPiAr
CQlpZiAocmV0KQ0KPiA+ICsJCQlnb3RvIGRtYV9mYWlsZWQ7DQo+ID4gKwl9DQo+ID4NCj4gPiAg
IAlpZiAoZHJpdmVyX3N5c2ZzX2FkZChkZXYpKSB7DQo+ID4gICAJCXByaW50ayhLRVJOX0VSUiAi
JXM6IGRyaXZlcl9zeXNmc19hZGQoJXMpIGZhaWxlZFxuIiwNCj4gPiBAQCAtNDg2LDcgKzQ4OCw4
IEBAIHN0YXRpYyBpbnQgcmVhbGx5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0DQo+
IGRldmljZV9kcml2ZXIgKmRydikNCj4gPiAgIAlnb3RvIGRvbmU7DQo+ID4NCj4gPiAgIHByb2Jl
X2ZhaWxlZDoNCj4gPiAtCWRtYV9kZWNvbmZpZ3VyZShkZXYpOw0KPiA+ICsJaWYgKGRldi0+YnVz
LT5kbWFfZGVjb25maWd1cmUpDQo+ID4gKwkJZGV2LT5idXMtPmRtYV9kZWNvbmZpZ3VyZShkZXYp
Ow0KPiA+ICAgZG1hX2ZhaWxlZDoNCj4gPiAgIAlpZiAoZGV2LT5idXMpDQo+ID4gICAJCWJsb2Nr
aW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRldi0+YnVzLT5wLT5idXNfbm90aWZpZXIsDQo+ID4g
QEAgLTg5NSw3ICs4OTgsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmljZV9yZWxlYXNlX2RyaXZlcihz
dHJ1Y3QgZGV2aWNlDQo+ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkNCj4gPiAgIAkJCWRy
di0+cmVtb3ZlKGRldik7DQo+ID4NCj4gPiAgIAkJZGV2aWNlX2xpbmtzX2RyaXZlcl9jbGVhbnVw
KGRldik7DQo+ID4gLQkJZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gKwkJaWYgKGRldi0+YnVz
LT5kbWFfZGVjb25maWd1cmUpDQo+ID4gKwkJCWRldi0+YnVzLT5kbWFfZGVjb25maWd1cmUoZGV2
KTsNCj4gPg0KPiA+ICAgCQlkZXZyZXNfcmVsZWFzZV9hbGwoZGV2KTsNCj4gPiAgIAkJZGV2LT5k
cml2ZXIgPSBOVUxMOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZG1hLW1hcHBpbmcu
YyBiL2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jDQo+ID4gaW5kZXggM2IxMTgzNS4uZjE2YmQ0
OSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2Jhc2UvZG1hLW1hcHBpbmcuYw0KPiA+ICsrKyBi
L2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jDQo+ID4gQEAgLTYsMTEgKzYsOSBAQA0KPiA+ICAg
ICogQ29weXJpZ2h0IChjKSAyMDA2ICBUZWp1biBIZW8gPHRlaGVvQHN1c2UuZGU+DQo+ID4gICAg
Ki8NCj4gPg0KPiA+IC0jaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KPiA+ICAgI2luY2x1ZGUgPGxp
bnV4L2RtYS1tYXBwaW5nLmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+DQo+ID4g
ICAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+DQo+ID4gLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu
aD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgv
dm1hbGxvYy5oPg0KPiA+DQo+ID4gQEAgLTMyOSw0MiArMzI3LDMgQEAgdm9pZCBkbWFfY29tbW9u
X2ZyZWVfcmVtYXAodm9pZCAqY3B1X2FkZHIsIHNpemVfdA0KPiBzaXplLCB1bnNpZ25lZCBsb25n
IHZtX2ZsYWdzKQ0KPiA+ICAgCXZ1bm1hcChjcHVfYWRkcik7DQo+ID4gICB9DQo+ID4gICAjZW5k
aWYNCj4gPiAtDQo+ID4gLS8qDQo+ID4gLSAqIENvbW1vbiBjb25maWd1cmF0aW9uIHRvIGVuYWJs
ZSBETUEgQVBJIHVzZSBmb3IgYSBkZXZpY2UNCj4gPiAtICovDQo+ID4gLSNpbmNsdWRlIDxsaW51
eC9wY2kuaD4NCj4gPiAtDQo+ID4gLWludCBkbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRl
dikNCj4gPiAtew0KPiA+IC0Jc3RydWN0IGRldmljZSAqYnJpZGdlID0gTlVMTCwgKmRtYV9kZXYg
PSBkZXY7DQo+ID4gLQllbnVtIGRldl9kbWFfYXR0ciBhdHRyOw0KPiA+IC0JaW50IHJldCA9IDA7
DQo+ID4gLQ0KPiA+IC0JaWYgKGRldl9pc19wY2koZGV2KSkgew0KPiA+IC0JCWJyaWRnZSA9IHBj
aV9nZXRfaG9zdF9icmlkZ2VfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSk7DQo+ID4gLQkJZG1hX2Rl
diA9IGJyaWRnZTsNCj4gPiAtCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpICYmIGRtYV9kZXYt
PnBhcmVudCAmJg0KPiA+IC0JCSAgICBkbWFfZGV2LT5wYXJlbnQtPm9mX25vZGUpDQo+ID4gLQkJ
CWRtYV9kZXYgPSBkbWFfZGV2LT5wYXJlbnQ7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGRt
YV9kZXYtPm9mX25vZGUpIHsNCj4gPiAtCQlyZXQgPSBvZl9kbWFfY29uZmlndXJlKGRldiwgZG1h
X2Rldi0+b2Zfbm9kZSk7DQo+ID4gLQl9IGVsc2UgaWYgKGhhc19hY3BpX2NvbXBhbmlvbihkbWFf
ZGV2KSkgew0KPiA+IC0JCWF0dHIgPSBhY3BpX2dldF9kbWFfYXR0cih0b19hY3BpX2RldmljZV9u
b2RlKGRtYV9kZXYtPmZ3bm9kZSkpOw0KPiA+IC0JCWlmIChhdHRyICE9IERFVl9ETUFfTk9UX1NV
UFBPUlRFRCkNCj4gPiAtCQkJcmV0ID0gYWNwaV9kbWFfY29uZmlndXJlKGRldiwgYXR0cik7DQo+
ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGJyaWRnZSkNCj4gPiAtCQlwY2lfcHV0X2hvc3RfYnJp
ZGdlX2RldmljZShicmlkZ2UpOw0KPiA+IC0NCj4gPiAtCXJldHVybiByZXQ7DQo+ID4gLX0NCj4g
PiAtDQo+ID4gLXZvaWQgZG1hX2RlY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiAt
ew0KPiA+IC0Jb2ZfZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gLQlhY3BpX2RtYV9kZWNvbmZp
Z3VyZShkZXYpOw0KPiA+IC19DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9y
bS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMNCj4gPiBpbmRleCBmMWJmN2IzLi5hZGY5NGVi
IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jDQo+ID4gKysrIGIvZHJp
dmVycy9iYXNlL3BsYXRmb3JtLmMNCj4gPiBAQCAtMTEzMCw2ICsxMTMwLDI4IEBAIGludCBwbGF0
Zm9ybV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPg0KPiA+ICAgI2VuZGlmIC8q
IENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovDQo+ID4NCj4gPiAraW50IHBsYXRmb3JtX2Rt
YV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwllbnVtIGRldl9k
bWFfYXR0ciBhdHRyOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJaWYgKGRldi0+
b2Zfbm9kZSkgew0KPiA+ICsJCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZGV2LCBkZXYtPm9mX25v
ZGUpOw0KPiA+ICsJfSBlbHNlIGlmIChoYXNfYWNwaV9jb21wYW5pb24oZGV2KSkgew0KPiA+ICsJ
CWF0dHIgPSBhY3BpX2dldF9kbWFfYXR0cih0b19hY3BpX2RldmljZV9ub2RlKGRldi0+Zndub2Rl
KSk7DQo+ID4gKwkJaWYgKGF0dHIgIT0gREVWX0RNQV9OT1RfU1VQUE9SVEVEKQ0KPiA+ICsJCQly
ZXQgPSBhY3BpX2RtYV9jb25maWd1cmUoZGV2LCBhdHRyKTsNCj4gPiArCX0NCj4gPiArDQo+ID4g
KwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHBsYXRmb3JtX2RtYV9kZWNv
bmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArCW9mX2RtYV9kZWNvbmZp
Z3VyZShkZXYpOw0KPiA+ICsJYWNwaV9kbWFfZGVjb25maWd1cmUoZGV2KTsNCj4gPiArfQ0KPiA+
ICsNCj4gPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwbGF0Zm9ybV9kZXZfcG1f
b3BzID0gew0KPiA+ICAgCS5ydW50aW1lX3N1c3BlbmQgPSBwbV9nZW5lcmljX3J1bnRpbWVfc3Vz
cGVuZCwNCj4gPiAgIAkucnVudGltZV9yZXN1bWUgPSBwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1l
LA0KPiA+IEBAIC0xMTM3LDEyICsxMTU5LDE0IEBAIGludCBwbGF0Zm9ybV9wbV9yZXN0b3JlKHN0
cnVjdCBkZXZpY2UgKmRldikNCj4gPiAgIH07DQo+ID4NCj4gPiAgIHN0cnVjdCBidXNfdHlwZSBw
bGF0Zm9ybV9idXNfdHlwZSA9IHsNCj4gPiAtCS5uYW1lCQk9ICJwbGF0Zm9ybSIsDQo+ID4gLQku
ZGV2X2dyb3Vwcwk9IHBsYXRmb3JtX2Rldl9ncm91cHMsDQo+ID4gLQkubWF0Y2gJCT0gcGxhdGZv
cm1fbWF0Y2gsDQo+ID4gLQkudWV2ZW50CQk9IHBsYXRmb3JtX3VldmVudCwNCj4gPiAtCS5wbQkJ
PSAmcGxhdGZvcm1fZGV2X3BtX29wcywNCj4gPiAtCS5mb3JjZV9kbWEJPSB0cnVlLA0KPiA+ICsJ
Lm5hbWUJCQk9ICJwbGF0Zm9ybSIsDQo+ID4gKwkuZGV2X2dyb3VwcwkJPSBwbGF0Zm9ybV9kZXZf
Z3JvdXBzLA0KPiA+ICsJLm1hdGNoCQkJPSBwbGF0Zm9ybV9tYXRjaCwNCj4gPiArCS51ZXZlbnQJ
CQk9IHBsYXRmb3JtX3VldmVudCwNCj4gPiArCS5wbQkJCT0gJnBsYXRmb3JtX2Rldl9wbV9vcHMs
DQo+ID4gKwkuZG1hX2NvbmZpZ3VyZQkJPSBwbGF0Zm9ybV9kbWFfY29uZmlndXJlLA0KPiA+ICsJ
LmRtYV9kZWNvbmZpZ3VyZQk9IHBsYXRmb3JtX2RtYV9kZWNvbmZpZ3VyZSwNCj4gPiArCS5mb3Jj
ZV9kbWEJCT0gdHJ1ZSwNCj4gPiAgIH07DQo+ID4gICBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9y
bV9idXNfdHlwZSk7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZl
ci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jDQo+ID4gaW5kZXggM2JlZDZiZS4uNGE3Nzgx
NCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMNCj4gPiArKysgYi9k
cml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMNCj4gPiBAQCAtMTgsNiArMTgsOCBAQA0KPiA+ICAgI2lu
Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9zdXNwZW5k
Lmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4
L2FjcGkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICAgI2luY2x1
ZGUgInBjaS5oIg0KPiA+DQo+ID4gICBzdHJ1Y3QgcGNpX2R5bmlkIHsNCj4gPiBAQCAtMTUyMiwx
OSArMTUyNCw1MiBAQCBzdGF0aWMgaW50IHBjaV9idXNfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRl
dikNCj4gPiAgIAlyZXR1cm4gcGNpX251bV92Zih0b19wY2lfZGV2KGRldikpOw0KPiA+ICAgfQ0K
PiA+DQo+ID4gK2ludCBwY2lfZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4g
K3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmJyaWRnZSwgKmRtYV9kZXY7DQo+IA0KPiBZb3UgZG9u
J3QgbmVlZCBkbWFfZGV2IGhlcmU7IHNlZSB0aGUgY29kZSByZW1vdmVkIGluIDA5NTE1ZWY1ZGRh
ZCBmb3INCj4gaG93IHRoZSBsb2dpYyBvcmlnaW5hbGx5IHdvcmtlZC4NCg0KT2theS4gSSB3aWxs
IGhhdmUgYSBsb29rIGluIHRoaXMgY29tbWl0IGlkLg0KDQo+IA0KPiA+ICsJZW51bSBkZXZfZG1h
X2F0dHIgYXR0cjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCWJyaWRnZSA9IHBj
aV9nZXRfaG9zdF9icmlkZ2VfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSk7DQo+ID4gKwlkbWFfZGV2
ID0gYnJpZGdlOw0KPiA+ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBkbWFfZGV2LT5w
YXJlbnQgJiYNCj4gPiArCSAgICBkbWFfZGV2LT5wYXJlbnQtPm9mX25vZGUpDQo+ID4gKwkJZG1h
X2RldiA9IGRtYV9kZXYtPnBhcmVudDsNCj4gPiArDQo+ID4gKwlpZiAoZG1hX2Rldi0+b2Zfbm9k
ZSkgew0KPiA+ICsJCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZGV2LCBkbWFfZGV2LT5vZl9ub2Rl
KTsNCj4gPiArCX0gZWxzZSBpZiAoaGFzX2FjcGlfY29tcGFuaW9uKGRtYV9kZXYpKSB7DQo+ID4g
KwkJYXR0ciA9IGFjcGlfZ2V0X2RtYV9hdHRyKHRvX2FjcGlfZGV2aWNlX25vZGUoZG1hX2Rldi0+
Zndub2RlKSk7DQo+ID4gKwkJaWYgKGF0dHIgIT0gREVWX0RNQV9OT1RfU1VQUE9SVEVEKQ0KPiA+
ICsJCQlyZXQgPSBhY3BpX2RtYV9jb25maWd1cmUoZGV2LCBhdHRyKTsNCj4gPiArCX0NCj4gPiAr
DQo+ID4gKwlwY2lfcHV0X2hvc3RfYnJpZGdlX2RldmljZShicmlkZ2UpOw0KPiA+ICsNCj4gPiAr
CXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgcGNpX2RtYV9kZWNvbmZpZ3Vy
ZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArCW9mX2RtYV9kZWNvbmZpZ3VyZShk
ZXYpOw0KPiA+ICsJYWNwaV9kbWFfZGVjb25maWd1cmUoZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4g
PiAgIHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGUgPSB7DQo+ID4gLQkubmFtZQkJPSAicGNp
IiwNCj4gPiAtCS5tYXRjaAkJPSBwY2lfYnVzX21hdGNoLA0KPiA+IC0JLnVldmVudAkJPSBwY2lf
dWV2ZW50LA0KPiA+IC0JLnByb2JlCQk9IHBjaV9kZXZpY2VfcHJvYmUsDQo+ID4gLQkucmVtb3Zl
CQk9IHBjaV9kZXZpY2VfcmVtb3ZlLA0KPiA+IC0JLnNodXRkb3duCT0gcGNpX2RldmljZV9zaHV0
ZG93biwNCj4gPiAtCS5kZXZfZ3JvdXBzCT0gcGNpX2Rldl9ncm91cHMsDQo+ID4gLQkuYnVzX2dy
b3Vwcwk9IHBjaV9idXNfZ3JvdXBzLA0KPiA+IC0JLmRydl9ncm91cHMJPSBwY2lfZHJ2X2dyb3Vw
cywNCj4gPiAtCS5wbQkJPSBQQ0lfUE1fT1BTX1BUUiwNCj4gPiAtCS5udW1fdmYJCT0gcGNpX2J1
c19udW1fdmYsDQo+ID4gLQkuZm9yY2VfZG1hCT0gdHJ1ZSwNCj4gPiArCS5uYW1lCQkJPSAicGNp
IiwNCj4gPiArCS5tYXRjaAkJCT0gcGNpX2J1c19tYXRjaCwNCj4gPiArCS51ZXZlbnQJCQk9IHBj
aV91ZXZlbnQsDQo+ID4gKwkucHJvYmUJCQk9IHBjaV9kZXZpY2VfcHJvYmUsDQo+ID4gKwkucmVt
b3ZlCQkJPSBwY2lfZGV2aWNlX3JlbW92ZSwNCj4gPiArCS5zaHV0ZG93bgkJPSBwY2lfZGV2aWNl
X3NodXRkb3duLA0KPiA+ICsJLmRldl9ncm91cHMJCT0gcGNpX2Rldl9ncm91cHMsDQo+ID4gKwku
YnVzX2dyb3VwcwkJPSBwY2lfYnVzX2dyb3VwcywNCj4gPiArCS5kcnZfZ3JvdXBzCQk9IHBjaV9k
cnZfZ3JvdXBzLA0KPiA+ICsJLnBtCQkJPSBQQ0lfUE1fT1BTX1BUUiwNCj4gPiArCS5udW1fdmYJ
CQk9IHBjaV9idXNfbnVtX3ZmLA0KPiA+ICsJLmRtYV9jb25maWd1cmUJCT0gcGNpX2RtYV9jb25m
aWd1cmUsDQo+ID4gKwkuZG1hX2RlY29uZmlndXJlCT0gcGNpX2RtYV9kZWNvbmZpZ3VyZSwNCj4g
PiArCS5mb3JjZV9kbWEJCT0gdHJ1ZSwNCj4gPiAgIH07DQo+ID4gICBFWFBPUlRfU1lNQk9MKHBj
aV9idXNfdHlwZSk7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2Uu
aCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgNCj4gPiBpbmRleCBiMDkzNDA1Li45YjJkY2Y2IDEw
MDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgNCj4gPiArKysgYi9pbmNsdWRl
L2xpbnV4L2RldmljZS5oDQo+ID4gQEAgLTg4LDYgKzg4LDkgQEAgZXh0ZXJuIGludCBfX211c3Rf
Y2hlY2sgYnVzX2NyZWF0ZV9maWxlKHN0cnVjdA0KPiBidXNfdHlwZSAqLA0KPiA+ICAgICogQHJl
c3VtZToJQ2FsbGVkIHRvIGJyaW5nIGEgZGV2aWNlIG9uIHRoaXMgYnVzIG91dCBvZiBzbGVlcCBt
b2RlLg0KPiA+ICAgICogQG51bV92ZjoJQ2FsbGVkIHRvIGZpbmQgb3V0IGhvdyBtYW55IHZpcnR1
YWwgZnVuY3Rpb25zIGEgZGV2aWNlIG9uDQo+IHRoaXMNCj4gPiAgICAqCQlidXMgc3VwcG9ydHMu
DQo+ID4gKyAqIEBkbWFfY29uZmlndXJlOglDYWxsZWQgdG8gc2V0dXAgRE1BIGNvbmZpZ3VyYXRp
b24gb24gYSBkZXZpY2Ugb24NCj4gPiArCQkJdGhpcyBidXMuDQo+ID4gKyAqIEBkbWFfZGVjb25m
aWd1cmU6CUNhbGxlZCB0byB0ZWFyIGRvd24gdGhlIERNQSBjb25maWd1cmF0aW9uLg0KPiA+ICAg
ICogQHBtOgkJUG93ZXIgbWFuYWdlbWVudCBvcGVyYXRpb25zIG9mIHRoaXMgYnVzLCBjYWxsYmFj
aw0KPiB0aGUgc3BlY2lmaWMNCj4gPiAgICAqCQlkZXZpY2UgZHJpdmVyJ3MgcG0tb3BzLg0KPiA+
ICAgICogQGlvbW11X29wczogIElPTU1VIHNwZWNpZmljIG9wZXJhdGlvbnMgZm9yIHRoaXMgYnVz
LCB1c2VkIHRvIGF0dGFjaA0KPiBJT01NVQ0KPiA+IEBAIC0xMzAsNiArMTMzLDkgQEAgc3RydWN0
IGJ1c190eXBlIHsNCj4gPg0KPiA+ICAgCWludCAoKm51bV92Zikoc3RydWN0IGRldmljZSAqZGV2
KTsNCj4gPg0KPiA+ICsJaW50ICgqZG1hX2NvbmZpZ3VyZSkoc3RydWN0IGRldmljZSAqZGV2KTsN
Cj4gPiArCXZvaWQgKCpkbWFfZGVjb25maWd1cmUpKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+IA0K
PiBTZWVpbmcgaXQgbGFpZCBvdXQgaW4gdGhlIHBhdGNoLCBJIHJlYWxseSBkb24ndCB0aGluayB3
ZSBuZWVkIGENCj4gZGVjb25maWd1cmUgY2FsbGJhY2sgbGlrZSB0aGlzIC0gdGhlIGZhY3QgdGhh
dCB3ZSdyZSBqdXN0IGNvcHktcGFzdGluZw0KPiB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24g
ZXZlcnl3aGVyZSBpcyBhIGJpZyBoaW50LCBidXQgbW9yZQ0KPiBjb25jZXB0dWFsbHkgSSBjYW4n
dCBzZWUgYSBnb29kIHJlYXNvbiBmb3IgaXQgdG8gZXZlciBuZWVkIGJ1cy1zcGVjaWZpYw0KPiBi
ZWhhdmlvdXIgaW4gdGhlIHNhbWUgd2F5IHRoYXQgY29uZmlndXJlIGRvZXMuDQo+IA0KPiBNYXli
ZSB0aGF0IG1lYW5zIHdlIGtlZXAgZG1hX2NvbmZpZ3VyZSgpIGFyb3VuZCBmb3IgdGhlIHNha2Ug
b2YNCj4gc3ltbWV0cnksIGJ1dCBqdXN0IHJlZHVjZSBpdCB0bzoNCj4gDQo+IGludCBkbWFfY29u
ZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gew0KPiAJaWYgKGRldi0+YnVzLT5kbWFfY29u
ZmlndXJlKQ0KPiAJCXJldHVybiBkZXYtPmJ1cy0+ZG1hX2NvbmZpZ3VyZShkZXYpOw0KPiAJcmV0
dXJuIDA7DQo+IH0NCj4gDQo+IFJlYWxpc3RpY2FsbHkgdGhvdWdoLCBkbWFfZGVjb25maWd1cmUo
KSBvbmx5IGV4aXN0cyBmb3IgdGhlIHNha2Ugb2YNCj4gY2FsbGluZyBhcmNoX3RlYXJkb3duX2Rt
YV9vcHMoKSwgYW5kIHRoYXQgb25seSByZWFsbHkgZXhpc3RzIGZvciB0aGUNCj4gc2FrZSBvZiB0
aGUgb2xkIEFSTSBJT01NVSBjb2RlLCBzbyBJJ20gbm90IGluY2xpbmVkIHRvIHByZXRlbmQgaXQn
cw0KPiBhbnl3aGVyZSBuZWFyIGFzIGltcG9ydGFudCBhcyB0aGUgZG1hX2NvbmZpZ3VyZSgpIHBh
dGggaW4gZGVzaWduIHRlcm1zLg0KDQpZZXMsIEkgd2lsbCByZW1vdmUgZG1hX2RlY29uZmlndXJl
IGNhbGxiYWNrLg0KDQpUaGFua3MsDQpOaXB1bg0KDQo+IA0KPiBSb2Jpbi4NCj4gDQo+ID4gKw0K
PiA+ICAgCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsNCj4gPg0KPiA+ICAgCWNvbnN0IHN0
cnVjdCBpb21tdV9vcHMgKmlvbW11X29wczsNCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51
eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oDQo+ID4gaW5kZXgg
ZWI5ZWFiNC4uMDM5MjI0YiAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBw
aW5nLmgNCj4gPiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgNCj4gPiBAQCAtNzYx
LDE4ICs3NjEsNiBAQCB2b2lkICpkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3Ry
dWN0DQo+IGRldmljZSAqZGV2LA0KPiA+ICAgfQ0KPiA+ICAgI2VuZGlmIC8qIENPTkZJR19IQVZF
X0dFTkVSSUNfRE1BX0NPSEVSRU5UICovDQo+ID4NCj4gPiAtI2lmZGVmIENPTkZJR19IQVNfRE1B
DQo+ID4gLWludCBkbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4gLXZvaWQg
ZG1hX2RlY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4gLSNlbHNlDQo+ID4gLXN0
YXRpYyBpbmxpbmUgaW50IGRtYV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+IC17
DQo+ID4gLQlyZXR1cm4gMDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIGlubGluZSB2b2lk
IGRtYV9kZWNvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9DQo+ID4gLSNlbmRpZg0KPiA+
IC0NCj4gPiAgIC8qDQo+ID4gICAgKiBNYW5hZ2VkIERNQSBBUEkNCj4gPiAgICAqLw0KPiA+DQo=

WARNING: multiple messages have this Message-ID (diff)
From: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org>
To: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>,
	"hch-jcswGhMUV9g@public.gmane.org"
	<hch-jcswGhMUV9g@public.gmane.org>,
	"linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org"
	<linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org>,
	"gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org"
	<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
	"m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org"
	<m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	"bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org"
	<bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: "rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org"
	<rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	"linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
	<linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	"dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org"
	<dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	"johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org"
	<johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	"jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org"
	<jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
	"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org"
	<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
	"msuchanek-l3A5Bk7waGM@public.gmane.org"
	<msuchanek-l3A5Bk7waGM@public.gmane.org>
Subject: RE: [PATCH] dma-mapping: move dma configuration to bus infrastructure
Date: Tue, 13 Mar 2018 16:11:28 +0000	[thread overview]
Message-ID: <HE1PR0401MB2425D5BBC381C96D4ABE9D18E6D20@HE1PR0401MB2425.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <a6cd83c9-d769-2994-5230-0a97de1897e5-5wv7dgnIgG8@public.gmane.org>



> -----Original Message-----
> From: Robin Murphy [mailto:robin.murphy-5wv7dgnIgG8@public.gmane.org]
> Sent: Tuesday, March 13, 2018 17:06
> 
> On 12/03/18 15:24, Nipun Gupta wrote:
> > The change introduces 'dma_configure' & 'dma_deconfigure'as
> > bus callback functions so each bus can choose to implement
> > its own dma configuration function.
> > This eases the addition of new busses w.r.t. adding the dma
> > configuration functionality.
> 
> It's probably worth clarifying - either in the commit message, the
> kerneldoc, or both - that the bus-specific aspect is that of mapping
> between a given device on the bus and the relevant firmware description
> of its DMA configuration.

Okay.

>
> > The change also updates the PCI, Platform and ACPI bus to use
> > new introduced callbacks.
> >
> > Signed-off-by: Nipun Gupta <nipun.gupta-3arQi8VN3Tc@public.gmane.org>
> > ---
> >   - This patch is based on the comments on:
> >
> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwo
> rk.kernel.org%2Fpatch%2F10259087%2F&data=02%7C01%7Cnipun.gupta%40nxp.com%7
> Cc541100ecb944e7650a408d588d69ab0%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7
> C0%7C636565377665676631&sdata=k2Xjn5B1GECx4UjCg9tChOpOrD3NPM7BkzIXLLSv3rI%
> 3D&reserved=0
> >   - I have validated for PCI and platform, but not for AMBA as I
> >     do not have infrastructure to validate it.
> >     Can anyone please validate them on AMBA?
> >
> >   drivers/amba/bus.c          | 38 ++++++++++++++++++++++++-----
> >   drivers/base/dd.c           | 14 +++++++----
> >   drivers/base/dma-mapping.c  | 41 -------------------------------
> >   drivers/base/platform.c     | 36 ++++++++++++++++++++++-----
> >   drivers/pci/pci-driver.c    | 59 ++++++++++++++++++++++++++++++++++++-
> --------
> >   include/linux/device.h      |  6 +++++
> >   include/linux/dma-mapping.h | 12 ---------
> >   7 files changed, 124 insertions(+), 82 deletions(-)
> >
> > diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
> > index 594c228..58241d2 100644
> > --- a/drivers/amba/bus.c
> > +++ b/drivers/amba/bus.c
> > @@ -20,6 +20,8 @@
> >   #include <linux/sizes.h>
> >   #include <linux/limits.h>
> >   #include <linux/clk/clk-conf.h>
> > +#include <linux/acpi.h>
> > +#include <linux/of_device.h>
> >
> >   #include <asm/irq.h>
> >
> > @@ -171,6 +173,28 @@ static int amba_pm_runtime_resume(struct device
> *dev)
> >   }
> >   #endif /* CONFIG_PM */
> >
> > +int amba_dma_configure(struct device *dev)
> > +{
> > +	enum dev_dma_attr attr;
> > +	int ret = 0;
> > +
> > +	if (dev->of_node) {
> > +		ret = of_dma_configure(dev, dev->of_node);
> > +	} else if (has_acpi_companion(dev)) {
> > +		attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode));
> > +		if (attr != DEV_DMA_NOT_SUPPORTED)
> > +			ret = acpi_dma_configure(dev, attr);
> > +	}
> > +
> > +	return ret;
> > +}
> 
> I would be inclined to have amba_bustype just reference
> platform_dma_configure() directly rather than duplicate it like this,
> since there's no sensible reason for them to ever differ.

I think dma_common_configure() having this as the common code seems pretty
Decent. All the busses will probably call this API.

> 
> > +
> > +void amba_dma_deconfigure(struct device *dev)
> > +{
> > +	of_dma_deconfigure(dev);
> > +	acpi_dma_deconfigure(dev);
> > +}
> > +
> >   static const struct dev_pm_ops amba_pm = {
> >   	.suspend	= pm_generic_suspend,
> >   	.resume		= pm_generic_resume,
> > @@ -190,12 +214,14 @@ static int amba_pm_runtime_resume(struct device
> *dev)
> >    * so we call the bus "amba".
> >    */
> >   struct bus_type amba_bustype = {
> > -	.name		= "amba",
> > -	.dev_groups	= amba_dev_groups,
> > -	.match		= amba_match,
> > -	.uevent		= amba_uevent,
> > -	.pm		= &amba_pm,
> > -	.force_dma	= true,
> > +	.name			= "amba",
> > +	.dev_groups		= amba_dev_groups,
> > +	.match			= amba_match,
> > +	.uevent			= amba_uevent,
> > +	.pm			= &amba_pm,
> > +	.dma_configure		= amba_dma_configure,
> > +	.dma_deconfigure	= amba_dma_deconfigure,
> > +	.force_dma		= true,
> 
> This patch should also be removing force_dma because it no longer makes
> sense. If DMA configuration is now done by a bus-level callback, then a
> bus which wants its children to get DMA configuration needs to implement
> that callback; there's nowhere to force a "default" global behaviour any
> more.

Agree. We will also need to pass a force_dma flag in of_dma_configure() as
Christoph suggests. Ill update this.

> 
> >   };
> >
> >   static int __init amba_init(void)
> > diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> > index de6fd09..f124f3f 100644
> > --- a/drivers/base/dd.c
> > +++ b/drivers/base/dd.c
> > @@ -421,9 +421,11 @@ static int really_probe(struct device *dev, struct
> device_driver *drv)
> >   	if (ret)
> >   		goto pinctrl_bind_failed;
> >
> > -	ret = dma_configure(dev);
> > -	if (ret)
> > -		goto dma_failed;
> > +	if (dev->bus->dma_configure) {
> > +		ret = dev->bus->dma_configure(dev);
> > +		if (ret)
> > +			goto dma_failed;
> > +	}
> >
> >   	if (driver_sysfs_add(dev)) {
> >   		printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n",
> > @@ -486,7 +488,8 @@ static int really_probe(struct device *dev, struct
> device_driver *drv)
> >   	goto done;
> >
> >   probe_failed:
> > -	dma_deconfigure(dev);
> > +	if (dev->bus->dma_deconfigure)
> > +		dev->bus->dma_deconfigure(dev);
> >   dma_failed:
> >   	if (dev->bus)
> >   		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
> > @@ -895,7 +898,8 @@ static void __device_release_driver(struct device
> *dev, struct device *parent)
> >   			drv->remove(dev);
> >
> >   		device_links_driver_cleanup(dev);
> > -		dma_deconfigure(dev);
> > +		if (dev->bus->dma_deconfigure)
> > +			dev->bus->dma_deconfigure(dev);
> >
> >   		devres_release_all(dev);
> >   		dev->driver = NULL;
> > diff --git a/drivers/base/dma-mapping.c b/drivers/base/dma-mapping.c
> > index 3b11835..f16bd49 100644
> > --- a/drivers/base/dma-mapping.c
> > +++ b/drivers/base/dma-mapping.c
> > @@ -6,11 +6,9 @@
> >    * Copyright (c) 2006  Tejun Heo <teheo-l3A5Bk7waGM@public.gmane.org>
> >    */
> >
> > -#include <linux/acpi.h>
> >   #include <linux/dma-mapping.h>
> >   #include <linux/export.h>
> >   #include <linux/gfp.h>
> > -#include <linux/of_device.h>
> >   #include <linux/slab.h>
> >   #include <linux/vmalloc.h>
> >
> > @@ -329,42 +327,3 @@ void dma_common_free_remap(void *cpu_addr, size_t
> size, unsigned long vm_flags)
> >   	vunmap(cpu_addr);
> >   }
> >   #endif
> > -
> > -/*
> > - * Common configuration to enable DMA API use for a device
> > - */
> > -#include <linux/pci.h>
> > -
> > -int dma_configure(struct device *dev)
> > -{
> > -	struct device *bridge = NULL, *dma_dev = dev;
> > -	enum dev_dma_attr attr;
> > -	int ret = 0;
> > -
> > -	if (dev_is_pci(dev)) {
> > -		bridge = pci_get_host_bridge_device(to_pci_dev(dev));
> > -		dma_dev = bridge;
> > -		if (IS_ENABLED(CONFIG_OF) && dma_dev->parent &&
> > -		    dma_dev->parent->of_node)
> > -			dma_dev = dma_dev->parent;
> > -	}
> > -
> > -	if (dma_dev->of_node) {
> > -		ret = of_dma_configure(dev, dma_dev->of_node);
> > -	} else if (has_acpi_companion(dma_dev)) {
> > -		attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode));
> > -		if (attr != DEV_DMA_NOT_SUPPORTED)
> > -			ret = acpi_dma_configure(dev, attr);
> > -	}
> > -
> > -	if (bridge)
> > -		pci_put_host_bridge_device(bridge);
> > -
> > -	return ret;
> > -}
> > -
> > -void dma_deconfigure(struct device *dev)
> > -{
> > -	of_dma_deconfigure(dev);
> > -	acpi_dma_deconfigure(dev);
> > -}
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index f1bf7b3..adf94eb 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -1130,6 +1130,28 @@ int platform_pm_restore(struct device *dev)
> >
> >   #endif /* CONFIG_HIBERNATE_CALLBACKS */
> >
> > +int platform_dma_configure(struct device *dev)
> > +{
> > +	enum dev_dma_attr attr;
> > +	int ret = 0;
> > +
> > +	if (dev->of_node) {
> > +		ret = of_dma_configure(dev, dev->of_node);
> > +	} else if (has_acpi_companion(dev)) {
> > +		attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode));
> > +		if (attr != DEV_DMA_NOT_SUPPORTED)
> > +			ret = acpi_dma_configure(dev, attr);
> > +	}
> > +
> > +	return ret;
> > +}
> > +
> > +void platform_dma_deconfigure(struct device *dev)
> > +{
> > +	of_dma_deconfigure(dev);
> > +	acpi_dma_deconfigure(dev);
> > +}
> > +
> >   static const struct dev_pm_ops platform_dev_pm_ops = {
> >   	.runtime_suspend = pm_generic_runtime_suspend,
> >   	.runtime_resume = pm_generic_runtime_resume,
> > @@ -1137,12 +1159,14 @@ int platform_pm_restore(struct device *dev)
> >   };
> >
> >   struct bus_type platform_bus_type = {
> > -	.name		= "platform",
> > -	.dev_groups	= platform_dev_groups,
> > -	.match		= platform_match,
> > -	.uevent		= platform_uevent,
> > -	.pm		= &platform_dev_pm_ops,
> > -	.force_dma	= true,
> > +	.name			= "platform",
> > +	.dev_groups		= platform_dev_groups,
> > +	.match			= platform_match,
> > +	.uevent			= platform_uevent,
> > +	.pm			= &platform_dev_pm_ops,
> > +	.dma_configure		= platform_dma_configure,
> > +	.dma_deconfigure	= platform_dma_deconfigure,
> > +	.force_dma		= true,
> >   };
> >   EXPORT_SYMBOL_GPL(platform_bus_type);
> >
> > diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> > index 3bed6be..4a77814 100644
> > --- a/drivers/pci/pci-driver.c
> > +++ b/drivers/pci/pci-driver.c
> > @@ -18,6 +18,8 @@
> >   #include <linux/pm_runtime.h>
> >   #include <linux/suspend.h>
> >   #include <linux/kexec.h>
> > +#include <linux/acpi.h>
> > +#include <linux/of_device.h>
> >   #include "pci.h"
> >
> >   struct pci_dynid {
> > @@ -1522,19 +1524,52 @@ static int pci_bus_num_vf(struct device *dev)
> >   	return pci_num_vf(to_pci_dev(dev));
> >   }
> >
> > +int pci_dma_configure(struct device *dev)
> > +{
> > +	struct device *bridge, *dma_dev;
> 
> You don't need dma_dev here; see the code removed in 09515ef5ddad for
> how the logic originally worked.

Okay. I will have a look in this commit id.

> 
> > +	enum dev_dma_attr attr;
> > +	int ret = 0;
> > +
> > +	bridge = pci_get_host_bridge_device(to_pci_dev(dev));
> > +	dma_dev = bridge;
> > +	if (IS_ENABLED(CONFIG_OF) && dma_dev->parent &&
> > +	    dma_dev->parent->of_node)
> > +		dma_dev = dma_dev->parent;
> > +
> > +	if (dma_dev->of_node) {
> > +		ret = of_dma_configure(dev, dma_dev->of_node);
> > +	} else if (has_acpi_companion(dma_dev)) {
> > +		attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode));
> > +		if (attr != DEV_DMA_NOT_SUPPORTED)
> > +			ret = acpi_dma_configure(dev, attr);
> > +	}
> > +
> > +	pci_put_host_bridge_device(bridge);
> > +
> > +	return ret;
> > +}
> > +
> > +void pci_dma_deconfigure(struct device *dev)
> > +{
> > +	of_dma_deconfigure(dev);
> > +	acpi_dma_deconfigure(dev);
> > +}
> > +
> >   struct bus_type pci_bus_type = {
> > -	.name		= "pci",
> > -	.match		= pci_bus_match,
> > -	.uevent		= pci_uevent,
> > -	.probe		= pci_device_probe,
> > -	.remove		= pci_device_remove,
> > -	.shutdown	= pci_device_shutdown,
> > -	.dev_groups	= pci_dev_groups,
> > -	.bus_groups	= pci_bus_groups,
> > -	.drv_groups	= pci_drv_groups,
> > -	.pm		= PCI_PM_OPS_PTR,
> > -	.num_vf		= pci_bus_num_vf,
> > -	.force_dma	= true,
> > +	.name			= "pci",
> > +	.match			= pci_bus_match,
> > +	.uevent			= pci_uevent,
> > +	.probe			= pci_device_probe,
> > +	.remove			= pci_device_remove,
> > +	.shutdown		= pci_device_shutdown,
> > +	.dev_groups		= pci_dev_groups,
> > +	.bus_groups		= pci_bus_groups,
> > +	.drv_groups		= pci_drv_groups,
> > +	.pm			= PCI_PM_OPS_PTR,
> > +	.num_vf			= pci_bus_num_vf,
> > +	.dma_configure		= pci_dma_configure,
> > +	.dma_deconfigure	= pci_dma_deconfigure,
> > +	.force_dma		= true,
> >   };
> >   EXPORT_SYMBOL(pci_bus_type);
> >
> > diff --git a/include/linux/device.h b/include/linux/device.h
> > index b093405..9b2dcf6 100644
> > --- a/include/linux/device.h
> > +++ b/include/linux/device.h
> > @@ -88,6 +88,9 @@ extern int __must_check bus_create_file(struct
> bus_type *,
> >    * @resume:	Called to bring a device on this bus out of sleep mode.
> >    * @num_vf:	Called to find out how many virtual functions a device on
> this
> >    *		bus supports.
> > + * @dma_configure:	Called to setup DMA configuration on a device on
> > +			this bus.
> > + * @dma_deconfigure:	Called to tear down the DMA configuration.
> >    * @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
> > @@ -130,6 +133,9 @@ struct bus_type {
> >
> >   	int (*num_vf)(struct device *dev);
> >
> > +	int (*dma_configure)(struct device *dev);
> > +	void (*dma_deconfigure)(struct device *dev);
> 
> Seeing it laid out in the patch, I really don't think we need a
> deconfigure callback like this - the fact that we're just copy-pasting
> the existing implementation everywhere is a big hint, but more
> conceptually I can't see a good reason for it to ever need bus-specific
> behaviour in the same way that configure does.
> 
> Maybe that means we keep dma_configure() around for the sake of
> symmetry, but just reduce it to:
> 
> int dma_configure(struct device *dev)
> {
> 	if (dev->bus->dma_configure)
> 		return dev->bus->dma_configure(dev);
> 	return 0;
> }
> 
> Realistically though, dma_deconfigure() only exists for the sake of
> calling arch_teardown_dma_ops(), and that only really exists for the
> sake of the old ARM IOMMU code, so I'm not inclined to pretend it's
> anywhere near as important as the dma_configure() path in design terms.

Yes, I will remove dma_deconfigure callback.

Thanks,
Nipun

> 
> Robin.
> 
> > +
> >   	const struct dev_pm_ops *pm;
> >
> >   	const struct iommu_ops *iommu_ops;
> > diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
> > index eb9eab4..039224b 100644
> > --- a/include/linux/dma-mapping.h
> > +++ b/include/linux/dma-mapping.h
> > @@ -761,18 +761,6 @@ void *dma_mark_declared_memory_occupied(struct
> device *dev,
> >   }
> >   #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */
> >
> > -#ifdef CONFIG_HAS_DMA
> > -int dma_configure(struct device *dev);
> > -void dma_deconfigure(struct device *dev);
> > -#else
> > -static inline int dma_configure(struct device *dev)
> > -{
> > -	return 0;
> > -}
> > -
> > -static inline void dma_deconfigure(struct device *dev) {}
> > -#endif
> > -
> >   /*
> >    * Managed DMA API
> >    */
> >

  reply	other threads:[~2018-03-13 16:11 UTC|newest]

Thread overview: 141+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-12 15:24 [PATCH] dma-mapping: move dma configuration to bus infrastructure Nipun Gupta
2018-03-12 15:24 ` Nipun Gupta
2018-03-12 16:44 ` Sinan Kaya
2018-03-12 16:44   ` Sinan Kaya
2018-03-13  4:22   ` Nipun Gupta
2018-03-13  4:22     ` Nipun Gupta
2018-03-13  4:22     ` Nipun Gupta
2018-03-13  7:27     ` hch
2018-03-13  7:27       ` hch-jcswGhMUV9g
2018-03-13  7:34 ` Christoph Hellwig
2018-03-13  7:34   ` Christoph Hellwig
2018-03-13 15:59   ` Nipun Gupta
2018-03-13 15:59     ` Nipun Gupta
2018-03-13 15:59     ` Nipun Gupta
2018-03-14  9:03     ` Christoph Hellwig
2018-03-14  9:03       ` Christoph Hellwig
2018-03-13 11:35 ` Robin Murphy
2018-03-13 11:35   ` Robin Murphy
2018-03-13 16:11   ` Nipun Gupta [this message]
2018-03-13 16:11     ` Nipun Gupta
2018-03-13 16:11     ` Nipun Gupta
2018-03-14  9:02   ` Christoph Hellwig
2018-03-14  9:02     ` Christoph Hellwig
2018-03-13 21:53 ` kbuild test robot
2018-03-13 21:53   ` kbuild test robot
2018-03-13 21:53 ` [RFC PATCH] dma-mapping: platform_dma_configure() can be static kbuild test robot
2018-03-13 21:53   ` kbuild test robot
2018-03-14  5:48 ` [dma] 9a019f4251: BUG:unable_to_handle_kernel kernel test robot
2018-03-14  5:48   ` kernel test robot
2018-03-14  5:48   ` kernel test robot
2018-03-30  7:15 ` [PATCH] dma-mapping: move dma configuration to bus infrastructure Christoph Hellwig
2018-03-30  7:17   ` Nipun Gupta
2018-03-30  7:17     ` Nipun Gupta
2018-03-30  7:17     ` Nipun Gupta
2018-03-30  9:05   ` Greg KH
2018-03-30  9:05     ` Greg KH
2018-03-21  6:55 [v2,1/2] " Nipun Gupta
2018-03-21  6:55 ` [PATCH v2 1/2] " Nipun Gupta
2018-03-21  6:55 ` Nipun Gupta
2018-03-21  6:55 [v2,2/2] drivers: remove force dma flag from buses Nipun Gupta
2018-03-21  6:55 ` [PATCH v2 2/2] " Nipun Gupta
2018-03-21  6:55 ` Nipun Gupta
2018-03-21  7:19 [v2,1/2] dma-mapping: move dma configuration to bus infrastructure Bharat Bhushan
2018-03-21  7:19 ` [PATCH v2 1/2] " Bharat Bhushan
2018-03-21  7:19 ` Bharat Bhushan
2018-03-21  7:19 ` Bharat Bhushan
2018-03-21  7:29 [v2,1/2] " Nipun Gupta
2018-03-21  7:29 ` [PATCH v2 1/2] " Nipun Gupta
2018-03-21  7:29 ` Nipun Gupta
2018-03-21  7:29 ` Nipun Gupta
2018-03-21  9:29 [v2,1/2] " Greg Kroah-Hartman
2018-03-21  9:29 ` [PATCH v2 1/2] " Greg KH
2018-03-21  9:29 ` Greg KH
2018-03-21  9:35 [v2,2/2] drivers: remove force dma flag from buses Greg Kroah-Hartman
2018-03-21  9:35 ` [PATCH v2 2/2] " Greg KH
2018-03-21  9:35 ` Greg KH
2018-03-21 16:13 [v2,1/2] dma-mapping: move dma configuration to bus infrastructure Nipun Gupta
2018-03-21 16:13 ` [PATCH v2 1/2] " Nipun Gupta
2018-03-21 16:13 ` Nipun Gupta
2018-03-21 16:13 ` Nipun Gupta
2018-03-21 16:28 [v2,2/2] drivers: remove force dma flag from buses Nipun Gupta
2018-03-21 16:28 ` [PATCH v2 2/2] " Nipun Gupta
2018-03-21 16:28 ` Nipun Gupta
2018-03-21 16:28 ` Nipun Gupta
2018-03-21 17:49 [v2,2/2] " Greg Kroah-Hartman
2018-03-21 17:49 ` [PATCH v2 2/2] " Greg KH
2018-03-21 17:49 ` Greg KH
2018-03-22  8:15 [v2,1/2] dma-mapping: move dma configuration to bus infrastructure Christoph Hellwig
2018-03-22  8:15 ` [PATCH v2 1/2] " Christoph Hellwig
2018-03-22  8:15 ` Christoph Hellwig
2018-03-22  8:17 [v2,1/2] " Christoph Hellwig
2018-03-22  8:17 ` [PATCH v2 1/2] " hch-jcswGhMUV9g
2018-03-22  8:17 ` hch
2018-03-22  8:19 [v2,2/2] drivers: remove force dma flag from buses Christoph Hellwig
2018-03-22  8:19 ` [PATCH v2 2/2] " Christoph Hellwig
2018-03-22  8:19 ` Christoph Hellwig
2018-03-22 15:05 [v2,1/2] dma-mapping: move dma configuration to bus infrastructure Nipun Gupta
2018-03-22 15:05 ` [PATCH v2 1/2] " Nipun Gupta
2018-03-22 15:05 ` Nipun Gupta
2018-03-22 15:05 ` Nipun Gupta
2018-03-22 15:13 [v2,2/2] drivers: remove force dma flag from buses Nipun Gupta
2018-03-22 15:13 ` [PATCH v2 2/2] " Nipun Gupta
2018-03-22 15:13 ` Nipun Gupta
2018-03-22 15:13 ` Nipun Gupta
2018-03-23 16:09 [v2,2/2] " kbuild test robot
2018-03-23 16:09 ` [PATCH v2 2/2] " kbuild test robot
2018-03-23 16:09 ` kbuild test robot
2018-03-23 17:41 [v2,2/2] " kbuild test robot
2018-03-23 17:41 ` [PATCH v2 2/2] " kbuild test robot
2018-03-23 17:41 ` kbuild test robot
2018-03-24  9:25 [v2,1/2] dma-mapping: move dma configuration to bus infrastructure kbuild test robot
2018-03-24  9:25 ` [PATCH v2 1/2] " kbuild test robot
2018-03-24  9:25 ` kbuild test robot
2018-03-30  7:54 [v3,1/2] " Nipun Gupta
2018-03-30  7:54 ` [PATCH v3 1/2] " Nipun Gupta
2018-03-30  7:54 ` Nipun Gupta
2018-03-30  7:54 ` Nipun Gupta
2018-03-30  7:54 [v3,2/2] drivers: remove force dma flag from buses Nipun Gupta
2018-03-30  7:54 ` [PATCH v3 2/2] " Nipun Gupta
2018-03-30  7:54 ` Nipun Gupta
2018-03-30  7:54 ` Nipun Gupta
2018-04-09 20:27 [v3,2/2] " Rob Herring
2018-04-09 20:27 ` [PATCH v3 2/2] " Rob Herring
2018-04-09 20:27 ` Rob Herring
2018-04-10 19:20 [v3,1/2] dma-mapping: move dma configuration to bus infrastructure Bjorn Helgaas
2018-04-10 19:20 ` [PATCH v3 1/2] " Bjorn Helgaas
2018-04-10 19:20 ` Bjorn Helgaas
2018-04-10 19:21 [v3,2/2] drivers: remove force dma flag from buses Bjorn Helgaas
2018-04-10 19:21 ` [PATCH v3 2/2] " Bjorn Helgaas
2018-04-10 19:21 ` Bjorn Helgaas
2018-04-23 12:56 [v3,1/2] dma-mapping: move dma configuration to bus infrastructure Christoph Hellwig
2018-04-23 12:56 ` [PATCH v3 1/2] " Christoph Hellwig
2018-04-23 12:56 ` Christoph Hellwig
2018-04-23 12:56 [v3,1/2] " Christoph Hellwig
2018-04-23 12:56 ` [PATCH v3 1/2] " Christoph Hellwig
2018-04-23 12:56 ` Christoph Hellwig
2018-04-27 17:10 [v3,1/2] " Nipun Gupta
2018-04-27 17:10 ` [PATCH v3 1/2] " Nipun Gupta
2018-04-27 17:10 ` Nipun Gupta
2018-04-27 17:10 ` Nipun Gupta
2018-04-28  2:51 [v4,1/2] " Nipun Gupta
2018-04-28  2:51 ` [PATCH v4 1/2] " Nipun Gupta
2018-04-28  2:51 ` Nipun Gupta
2018-04-28  2:51 [v4,2/2] drivers: remove force dma flag from buses Nipun Gupta
2018-04-28  2:51 ` [PATCH v4 2/2] " Nipun Gupta
2018-04-28  2:51 ` Nipun Gupta
2018-04-30 10:41 [v4,1/2] dma-mapping: move dma configuration to bus infrastructure Thierry Reding
2018-04-30 10:41 ` [PATCH v4 1/2] " Thierry Reding
2018-04-30 10:41 ` Thierry Reding
2018-05-01 12:34 [v4,2/2] drivers: remove force dma flag from buses Rob Herring
2018-05-01 12:34 ` [PATCH v4 2/2] " Rob Herring
2018-05-01 12:34 ` Rob Herring
2018-05-03 12:21 [v4,1/2] dma-mapping: move dma configuration to bus infrastructure Christoph Hellwig
2018-05-03 12:21 ` [PATCH v4 1/2] " Christoph Hellwig
2018-05-03 12:21 ` Christoph Hellwig
2018-05-03 12:21 [v4,1/2] " Christoph Hellwig
2018-05-03 12:21 ` [PATCH v4 1/2] " Christoph Hellwig
2018-05-03 12:21 ` Christoph Hellwig
2018-05-03 16:36 [v4,2/2] drivers: remove force dma flag from buses Vinod Koul
2018-05-03 16:36 ` [PATCH v4 2/2] " Vinod Koul
2018-05-03 16:36 ` Vinod Koul

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=HE1PR0401MB2425D5BBC381C96D4ABE9D18E6D20@HE1PR0401MB2425.eurprd04.prod.outlook.com \
    --to=nipun.gupta@nxp.com \
    --cc=bhelgaas@google.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jarkko.sakkinen@linux.intel.com \
    --cc=johan@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=m.szyprowski@samsung.com \
    --cc=msuchanek@suse.de \
    --cc=rafael.j.wysocki@intel.com \
    --cc=robin.murphy@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.