All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Axtens <dja@axtens.net>
To: linuxppc-dev@ozlabs.org
Cc: Scott Wood <scottwood@freescale.com>, Daniel Axtens <dja@axtens.net>
Subject: [PATCH v4 16/19] powerpc: fsl_pci, swiotlb: Move controller ops from ppc_md to controller_ops
Date: Fri, 10 Apr 2015 13:15:47 +1000	[thread overview]
Message-ID: <1428635747-9754-1-git-send-email-dja@axtens.net> (raw)
In-Reply-To: <1428624718-13564-1-git-send-email-dja@axtens.net>

Move the installation of DMA operations out of swiotlb's subsys
initcall, and into the generic PCI controller operations struct.

These ops are installed conditionally, based on the ppc_swiotlb_enable
global. The global can be set in two places:
 - swiotlb_detect_4g, which is always called at the arch initcall level
 - setup_pci_atmu, which is called as part of the fsl_add_bridge and
fsl_pci_syscore_do_resume.

fsl_pci_syscore_do_resume is called late enough that any changes as a
result of that call will have no effect.

As such, if we test the global and set the operations as part of
fsl_add_bridge, after the call to setup_pci_atmu, we can be confident
that it will cover all the PCI implementations affected by the changes
to dma-swiotlb.c.

Signed-off-by: Daniel Axtens <dja@axtens.net>

---

v1 --> v2:
 - Move the setup call to after setup_pci_atmu().

v2 --> v3:
 - Only set the affected op, not the entire structure. Thanks mpe.

v3 --> v4:
 - Improved commit message, thanks Scott Wood.
---
 arch/powerpc/kernel/dma-swiotlb.c | 11 ++++-------
 arch/powerpc/sysdev/fsl_pci.c     | 15 +++++++++++++++
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/kernel/dma-swiotlb.c b/arch/powerpc/kernel/dma-swiotlb.c
index 7359797..6e8d764 100644
--- a/arch/powerpc/kernel/dma-swiotlb.c
+++ b/arch/powerpc/kernel/dma-swiotlb.c
@@ -116,16 +116,13 @@ void __init swiotlb_detect_4g(void)
 	}
 }
 
-static int __init swiotlb_late_init(void)
+static int __init check_swiotlb_enabled(void)
 {
-	if (ppc_swiotlb_enable) {
+	if (ppc_swiotlb_enable)
 		swiotlb_print_info();
-		set_pci_dma_ops(&swiotlb_dma_ops);
-		ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb;
-	} else {
+	else
 		swiotlb_free();
-	}
 
 	return 0;
 }
-subsys_initcall(swiotlb_late_init);
+subsys_initcall(check_swiotlb_enabled);
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 4b74c27..9a8fcf0 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -111,6 +111,18 @@ static struct pci_ops fsl_indirect_pcie_ops =
 #define MAX_PHYS_ADDR_BITS	40
 static u64 pci64_dma_offset = 1ull << MAX_PHYS_ADDR_BITS;
 
+#ifdef CONFIG_SWIOTLB
+static void setup_swiotlb_ops(struct pci_controller *hose)
+{
+	if (ppc_swiotlb_enable) {
+		hose->controller_ops.dma_dev_setup = pci_dma_dev_setup_swiotlb;
+		set_pci_dma_ops(&swiotlb_dma_ops);
+	}
+}
+#else
+static inline void setup_swiotlb_ops(struct pci_controller *hose) {}
+#endif
+
 static int fsl_pci_dma_set_mask(struct device *dev, u64 dma_mask)
 {
 	if (!dev->dma_mask || !dma_supported(dev, dma_mask))
@@ -548,6 +560,9 @@ int fsl_add_bridge(struct platform_device *pdev, int is_primary)
 	/* Setup PEX window registers */
 	setup_pci_atmu(hose);
 
+	/* Set up controller operations */
+	setup_swiotlb_ops(hose);
+
 	return 0;
 
 no_bridge:
-- 
2.1.4

  parent reply	other threads:[~2015-04-10  3:16 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-31  5:00 [PATCH v2 00/19] Refactor PCI controller operations Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 01/19] powerpc: move find_and_init_phbs() to pSeries specific code Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 02/19] powerpc/powermac: move pmac_pci_probe_mode from setup.c to pci.c Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 03/19] powerpc: pcibios_enable_device_hook: return bool rather than int Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 04/19] powerpc: Create pci_controller_ops.dma_dev_setup and shim Daniel Axtens
2015-04-02 14:13   ` Arnd Bergmann
2015-04-02 14:13     ` Arnd Bergmann
2015-04-07  0:31     ` Daniel Axtens
2015-04-07  0:31       ` Daniel Axtens
2015-04-07  7:44       ` Arnd Bergmann
2015-04-07  7:44         ` Arnd Bergmann
2015-04-08  3:31         ` Michael Ellerman
2015-04-08  3:31           ` Michael Ellerman
2015-03-31  5:00 ` [PATCH v2 05/19] powerpc: Create pci_controller_ops.dma_bus_setup " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 06/19] powerpc: Create pci_controller_ops.probe_mode " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 07/19] powerpc: Create pci_controller_ops.enable_device_hook " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 08/19] powerpc: Create pci_controller_ops.window_alignment " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 09/19] powerpc: Create pci_controller_ops.reset_secondary_bus " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 10/19] powerpc: dart_iommu: optionally populate controller_ops on init Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 11/19] powerpc/powermac: Move controller ops from ppc_md to controller_ops Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 12/19] powerpc/pseries: " Daniel Axtens
2015-04-02  3:21   ` [PATCH v3 " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 13/19] powerpc/powernv: " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 14/19] powerpc/pasemi: " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 15/19] powerpc/maple: " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 16/19] powerpc: fsl_pci, swiotlb: " Daniel Axtens
2015-04-10  0:11   ` [PATCH v3 " Daniel Axtens
2015-04-10  1:28     ` Scott Wood
2015-04-10  2:36       ` Daniel Axtens
2015-04-10  3:15     ` Daniel Axtens [this message]
2015-04-10  3:18       ` [PATCH v4 " Scott Wood
2015-03-31  5:00 ` [PATCH v2 17/19] powerpc/cell: " Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 18/19] powerpc: Remove shims for pci_controller_ops operations Daniel Axtens
2015-03-31  5:00 ` [PATCH v2 19/19] powerpc: dart_iommu: Remove check for controller_ops == NULL case Daniel Axtens
2015-04-07  7:51 ` [PATCH v2 00/19] Refactor PCI controller operations Arnd Bergmann

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=1428635747-9754-1-git-send-email-dja@axtens.net \
    --to=dja@axtens.net \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=scottwood@freescale.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.