linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Robin Murphy <robin.murphy@arm.com>
To: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>,
	bhelgaas@google.com, rjw@rjwysocki.net, lenb@kernel.org,
	catalin.marinas@arm.com, will.deacon@arm.com
Cc: thomas.lendacky@amd.com, herbert@gondor.apana.org.au,
	linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-acpi@vger.kernel.org, hanjun.guo@linaro.org,
	davem@davemloft.net, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH V5 8/9] PCI: OF: Move of_pci_dma_configure() to pci_dma_configure()
Date: Tue, 17 Nov 2015 15:00:33 +0000	[thread overview]
Message-ID: <564B4111.6010805@arm.com> (raw)
In-Reply-To: <1446072654-5608-9-git-send-email-Suravee.Suthikulpanit@amd.com>

Hi Suravee,

On 28/10/15 22:50, Suravee Suthikulpanit wrote:
> This patch move of_pci_dma_configure() to a more generic
> pci_dma_configure(), which can be extended by non-OF code (e.g. ACPI).
>
> This has no functional change.

Unfortunately, it appears that it does...

> Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
> Acked-by: Rob Herring <robh+dt@kernel.org>
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> Reviewed-by: Hanjun Guo <hanjun.guo@linaro.org>
> CC: Rafael J. Wysocki <rjw@rjwysocki.net>
> ---
>   drivers/of/of_pci.c    | 19 -------------------
>   drivers/pci/probe.c    | 23 +++++++++++++++++++++--
>   include/linux/of_pci.h |  3 ---
>   3 files changed, 21 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/of/of_pci.c b/drivers/of/of_pci.c
> index a2f510c..b66ee4e 100644
> --- a/drivers/of/of_pci.c
> +++ b/drivers/of/of_pci.c
> @@ -117,25 +117,6 @@ int of_get_pci_domain_nr(struct device_node *node)
>   }
>   EXPORT_SYMBOL_GPL(of_get_pci_domain_nr);
>
> -/**
> - * of_pci_dma_configure - Setup DMA configuration
> - * @dev: ptr to pci_dev struct of the PCI device
> - *
> - * Function to update PCI devices's DMA configuration using the same
> - * info from the OF node of host bridge's parent (if any).
> - */
> -void of_pci_dma_configure(struct pci_dev *pci_dev)
> -{
> -	struct device *dev = &pci_dev->dev;
> -	struct device *bridge = pci_get_host_bridge_device(pci_dev);
> -
> -	if (bridge->parent)
> -		of_dma_configure(dev, bridge->parent->of_node);
> -
> -	pci_put_host_bridge_device(bridge);
> -}
> -EXPORT_SYMBOL_GPL(of_pci_dma_configure);
> -
>   #if defined(CONFIG_OF_ADDRESS)
>   /**
>    * of_pci_get_host_bridge_resources - Parse PCI host bridge resources from DT
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 8361d27..31e3eef 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -6,7 +6,7 @@
>   #include <linux/delay.h>
>   #include <linux/init.h>
>   #include <linux/pci.h>
> -#include <linux/of_pci.h>
> +#include <linux/of_device.h>
>   #include <linux/pci_hotplug.h>
>   #include <linux/slab.h>
>   #include <linux/module.h>
> @@ -1633,6 +1633,25 @@ static void pci_set_msi_domain(struct pci_dev *dev)
>   				   dev_get_msi_domain(&dev->bus->dev));
>   }
>
> +/**
> + * pci_dma_configure - Setup DMA configuration
> + * @dev: ptr to pci_dev struct of the PCI device
> + *
> + * Function to update PCI devices's DMA configuration using the same
> + * info from the OF node of host bridge's parent (if any).
> + */
> +static void pci_dma_configure(struct pci_dev *dev)
> +{
> +	struct device *bridge = pci_get_host_bridge_device(dev);
> +
> +	if (IS_ENABLED(CONFIG_OF) && dev->dev.of_node) {

Previously I was seeing of_dma_configure, and thus of_iommu_configure, 
called for every PCI device on Juno. The check above now prevents this 
happening, since the PCI devices are probed directly from the bus and 
don't have OF nodes of their own. They now get left in some 
half-configured state where arch_setup_dma_ops isn't called either.

Should this be checking bridge->parent->of_node rather than 
dev->dev.of_node (which seems to work), or am I missing something?

Sorry I don't really have the bandwidth to look into this in detail 
myself, right now I'm just trying to get my magic hacks rebased ;)

Robin.

> +		if (bridge->parent)
> +			of_dma_configure(&dev->dev, bridge->parent->of_node);
> +	}
> +
> +	pci_put_host_bridge_device(bridge);
> +}
> +
>   void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
>   {
>   	int ret;
> @@ -1646,7 +1665,7 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
>   	dev->dev.dma_mask = &dev->dma_mask;
>   	dev->dev.dma_parms = &dev->dma_parms;
>   	dev->dev.coherent_dma_mask = 0xffffffffull;
> -	of_pci_dma_configure(dev);
> +	pci_dma_configure(dev);
>
>   	pci_set_dma_max_seg_size(dev, 65536);
>   	pci_set_dma_seg_boundary(dev, 0xffffffff);
> diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h
> index 29fd3fe..ce0e5ab 100644
> --- a/include/linux/of_pci.h
> +++ b/include/linux/of_pci.h
> @@ -16,7 +16,6 @@ int of_pci_get_devfn(struct device_node *np);
>   int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin);
>   int of_pci_parse_bus_range(struct device_node *node, struct resource *res);
>   int of_get_pci_domain_nr(struct device_node *node);
> -void of_pci_dma_configure(struct pci_dev *pci_dev);
>   #else
>   static inline int of_irq_parse_pci(const struct pci_dev *pdev, struct of_phandle_args *out_irq)
>   {
> @@ -51,8 +50,6 @@ of_get_pci_domain_nr(struct device_node *node)
>   {
>   	return -1;
>   }
> -
> -static inline void of_pci_dma_configure(struct pci_dev *pci_dev) { }
>   #endif
>
>   #if defined(CONFIG_OF_ADDRESS)
>


  reply	other threads:[~2015-11-17 15:00 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-28 22:50 [PATCH V5 0/9] PCI: ACPI: Setting up DMA coherency for PCI device from _CCA attribute Suravee Suthikulpanit
2015-10-28 22:50 ` [PATCH V5 1/9] ACPI: Honor ACPI _CCA attribute setting Suravee Suthikulpanit
2015-10-28 22:50 ` [PATCH V5 2/9] device property: Introducing enum dev_dma_attr Suravee Suthikulpanit
2015-10-28 22:50 ` [PATCH V5 3/9] ACPI: Adding DMA Attribute APIs for ACPI Device Suravee Suthikulpanit
2015-10-28 22:50 ` [PATCH V5 4/9] device property: Adding DMA Attribute APIs for Generic Devices Suravee Suthikulpanit
2015-10-28 22:50 ` [PATCH V5 5/9] device property: ACPI: Make use of the new DMA Attribute APIs Suravee Suthikulpanit
2015-10-28 22:50 ` [PATCH V5 6/9] device property: ACPI: Remove unused DMA APIs Suravee Suthikulpanit
2015-10-28 22:50 ` [PATCH V5 7/9] of/pci: Fix pci_get_host_bridge_device leak Suravee Suthikulpanit
2015-10-28 22:50 ` [PATCH V5 8/9] PCI: OF: Move of_pci_dma_configure() to pci_dma_configure() Suravee Suthikulpanit
2015-11-17 15:00   ` Robin Murphy [this message]
2015-11-18 12:00     ` Robin Murphy
2015-11-18 12:41       ` Arnd Bergmann
2015-11-18 15:10         ` Suravee Suthikulanit
2015-11-18 16:54         ` Suravee Suthikulanit
2015-11-18 21:24           ` Rafael J. Wysocki
2015-10-28 22:50 ` [PATCH V5 9/9] PCI: ACPI: Add support for PCI device DMA coherency Suravee Suthikulpanit
2015-10-29  6:35 ` [PATCH V5 0/9] PCI: ACPI: Setting up DMA coherency for PCI device from _CCA attribute Hanjun Guo
2015-11-02  1:01 ` Rafael J. Wysocki
2015-11-02 15:52   ` Suravee Suthikulanit

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=564B4111.6010805@arm.com \
    --to=robin.murphy@arm.com \
    --cc=Suravee.Suthikulpanit@amd.com \
    --cc=bhelgaas@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=davem@davemloft.net \
    --cc=hanjun.guo@linaro.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=thomas.lendacky@amd.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).