From mboxrd@z Thu Jan 1 00:00:00 1970 From: Murali Karicheri Subject: Re: [PATCH v3 3/4] of/pci: add of_pci_dma_configure() update dma configuration Date: Thu, 8 Jan 2015 14:52:13 -0500 Message-ID: <54AEDFED.8060008@ti.com> References: <1420656594-8908-1-git-send-email-m-karicheri2@ti.com> <1420656594-8908-4-git-send-email-m-karicheri2@ti.com> <20150108160626.GN11583@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20150108160626.GN11583@arm.com> Sender: linux-pci-owner@vger.kernel.org To: Will Deacon Cc: "joro@8bytes.org" , "grant.likely@linaro.org" , "robh+dt@kernel.org" , "iommu@lists.linux-foundation.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "bhelgaas@google.com" , "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux@arm.linux.org.uk" , "arnd@arndb.de" List-Id: devicetree@vger.kernel.org On 01/08/2015 11:06 AM, Will Deacon wrote: > On Wed, Jan 07, 2015 at 06:49:53PM +0000, Murali Karicheri wrote: >> Add of_pci_dma_configure() to allow updating the dma configuration >> of the pci device using the configuration from DT of the parent of >> the root bridge device. >> >> Signed-off-by: Murali Karicheri >> --- >> drivers/of/of_pci.c | 39 +++++++++++++++++++++++++++++++++++++++ >> include/linux/of_pci.h | 12 ++++++++++++ >> 2 files changed, 51 insertions(+) >> >> diff --git a/drivers/of/of_pci.c b/drivers/of/of_pci.c >> index 88471d3..34878c9 100644 >> --- a/drivers/of/of_pci.c >> +++ b/drivers/of/of_pci.c >> @@ -2,6 +2,7 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> >> @@ -229,6 +230,44 @@ parse_failed: >> return err; >> } >> EXPORT_SYMBOL_GPL(of_pci_get_host_bridge_resources); >> + >> +/** >> + * of_get_pci_root_bridge_parent - get the OF node of the root bridge's parent >> + * @dev: ptr to pci_dev struct of the pci device >> + * >> + * This function will traverse the bus up to the root bus starting with >> + * the child and return the OF node ptr to root bridge device's parent device. >> + */ >> +struct device_node *of_get_pci_root_bridge_parent(struct pci_dev *dev) >> +{ >> + struct pci_bus *bus = dev->bus; >> + struct device *bridge; >> + >> + while (!pci_is_root_bus(bus)) >> + bus = bus->parent; >> + bridge = bus->bridge; >> + >> + return bridge->parent->of_node; >> +} >> +EXPORT_SYMBOL_GPL(of_get_pci_root_bridge_parent); >> + >> +/** >> + * 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 root host bridge's parent. >> + */ >> +void of_pci_dma_configure(struct pci_dev *pci_dev) >> +{ >> + struct device *dev =&pci_dev->dev; >> + struct device_node *parent_np; >> + >> + parent_np = of_get_pci_root_bridge_parent(pci_dev); >> + of_dma_configure(dev, parent_np); >> +} >> +EXPORT_SYMBOL_GPL(of_pci_dma_configure); > > Whilst I think this is the right overall structure, I think this function > should determine the set of DMA aliases for the device and pass that through > to the IOMMU (as mentioned in my reply to the cover letter). Then we just > need to work out what we're doing for groups. > > Will Will, Could you add this as as a follow up patch as I don't have a platformm that support IOMMU and as such my understanding of the IOMMU is limited? I can help test the change to make sure it has no side effect on Keystone that doesn't support IOMMU. Thanks. -- Murali Karicheri Linux Kernel, Texas Instruments