Thread (13 messages) 13 messages, 4 authors, 2015-08-26

[PATCH V2 4/4] PCI: ACPI: Add support for PCI device DMA coherency

From: Suravee.Suthikulpanit@amd.com (Suravee Suthikulpanit)
Date: 2015-08-26 02:02:12
Also in: linux-acpi, linux-pci, lkml

Hi Rafael,

On 8/26/15 06:48, Rafael J. Wysocki wrote:
On Wednesday, August 26, 2015 12:33:29 AM Suravee Suthikulpanit wrote:
quoted
This patch adds support for setting up PCI device DMA coherency from
ACPI _CCA object that should normally be specified in the DSDT node
of its PCI host bridge.

Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
CC: Bjorn Helgaas <bhelgaas@google.com>
CC: Catalin Marinas <catalin.marinas@arm.com>
CC: Rob Herring <robh+dt@kernel.org>
CC: Will Deacon <redacted>
CC: Rafael J. Wysocki <redacted>
CC: Murali Karicheri <redacted>
---
  drivers/pci/probe.c | 15 ++++++++++-----
  1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 4de6594..2fd2a60 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1551,17 +1551,22 @@ static void pci_init_capabilities(struct pci_dev *dev)
   * @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).
+ * info from the OF node or ACPI 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) {
-		if (!bridge->parent)
-			return;
-
-		of_dma_configure(&dev->dev, bridge->parent->of_node);
+		if (bridge->parent)
+			of_dma_configure(&dev->dev,
+					 bridge->parent->of_node);
+	} else if (has_acpi_companion(bridge)) {
+		struct acpi_device *adev = to_acpi_node(bridge->fwnode);
+		int coherent = acpi_check_dma_coherency(adev);
+
+		if (-1 != coherent)
The ordering of this check is somewhat unusual.
I'll fix this.

Thanks,
Suravee
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help