diff mbox

[v8,1/4] pci:host: APM X-Gene PCIe host controller driver

Message ID 20140917160337.GA15261@e104818-lin.cambridge.arm.com
State New
Headers show

Commit Message

Catalin Marinas Sept. 17, 2014, 4:03 p.m. UTC
On Tue, Sep 16, 2014 at 09:02:11PM +0100, Tanmay Inamdar wrote:
> On Fri, Sep 12, 2014 at 2:18 AM, Liviu Dudau <Liviu.Dudau@arm.com> wrote:
> > On Thu, Sep 11, 2014 at 11:57:43PM +0100, Tanmay Inamdar wrote:
> >> This patch adds the AppliedMicro X-Gene SOC PCIe host controller driver.
> >> X-Gene PCIe controller supports maximum up to 8 lanes and GEN3 speed.
> >> X-Gene SOC supports maximum 5 PCIe ports.
> >>
> >> Signed-off-by: Tanmay Inamdar <tinamdar@apm.com>
> >
> > It looks good to me now. You can add if you care:
> >
> > Reviewed-by: Liviu Dudau <Liviu.Dudau@arm.com>
> 
> I will have to send another version of patch as I forgot to add
> 'dma-coherent' in device tree entry.
> 
> Secondly I see that setting 'dma-coherent' in device tree node sets
> coherent_dma_ops for the root bus but for the endpoint another 'dev'
> gets assigned. This causes endpoint to use non-coherent dma apis
> causing failure in dma operations.

For PCIe, setting dma-coherent in the DT nodes wouldn't have any effect
yet. We have of_dma_configure() being called for platform devices but it
won't work for PCIe which are probed at run-time (nor for AMBA which
require an additional patch).

So for arm64 currently we have some hooks in dma-mapping.c to intercept
when a device is added to a bus. What I need to do though is check
recursively whether the parent (bus) had the 'dma-coherent' property
(pointed out by Jon). I think something like this would do (not tested):


After this, we need to a bus notifier for PCIe as well. Since I don't
think we have an of_node for a PCI device, we would need to check
recursively on the parent device rather than the parent node until we
find an OF node with the 'dma-coherent' property.

Comments

Jon Masters Sept. 19, 2014, 12:21 a.m. UTC | #1
On 09/17/2014 12:03 PM, Catalin Marinas wrote:

> So for arm64 currently we have some hooks in dma-mapping.c to intercept
> when a device is added to a bus. What I need to do though is check
> recursively whether the parent (bus) had the 'dma-coherent' property
> (pointed out by Jon). I think something like this would do (not tested):

We've got a patch now that I posted internally and we've tested. I've
asked Mark Salter to send it upstream (but hey, you'll probably just
want to switch the default over to recurse up the tree and then simply
add a new notifier register for pci_bus_type). For this stuff to work,
we need v10 of the APM X-Gene patches because (as I noticed earlier when
going through their code and testing on a board with an actual card -
and a modified devicetree node for the PCI root) that's the point they
add a call to setup the root of_nodes correctly via pci_scan_root_bus.
Prior to that the trivially obvious patch for dma-coherent doesn't work.
Today, there are two platform PCIe devices that do it right, plus the
latest APM rev of their driver just posted.

Jon.

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 4164c5ace9f8..638475378f94 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -316,7 +316,7 @@  static int dma_bus_notifier(struct notifier_block *nb,
 	if (event != BUS_NOTIFY_ADD_DEVICE)
 		return NOTIFY_DONE;
 
-	if (of_property_read_bool(dev->of_node, "dma-coherent"))
+	if (of_dma_is_coherent(dev->of_node))
 		set_dma_ops(dev, &coherent_swiotlb_dma_ops);
 
 	return NOTIFY_OK;