On Mon, May 06, 2019 at 04:12:08PM -0500, Bjorn Helgaas wrote: > On Fri, May 03, 2019 at 07:35:34PM +0530, Srinath Mannam wrote: > > The IPROC host controller allows only a subset of physical address space > > as target of inbound PCI memory transactions addresses. > > > > PCIe devices memory transactions targeting memory regions that > > are not allowed for inbound transactions in the host controller > > are rejected by the host controller and cannot reach the upstream > > buses. > > > > Firmware device tree description defines the DMA ranges that are > > addressable by devices DMA transactions; parse the device tree > > dma-ranges property and add its ranges to the PCI host bridge dma_ranges > > list; the iova_reserve_pci_windows() call in the driver will reserve the > > IOVA address ranges that are not addressable (ie memory holes in the > > dma-ranges set) so that they are not allocated to PCI devices for DMA > > transfers. > > > > All allowed address ranges are listed in dma-ranges DT parameter. > > > > Example: > > > > dma-ranges = < \ > > 0x43000000 0x00 0x80000000 0x00 0x80000000 0x00 0x80000000 \ > > 0x43000000 0x08 0x00000000 0x08 0x00000000 0x08 0x00000000 \ > > 0x43000000 0x80 0x00000000 0x80 0x00000000 0x40 0x00000000> > > > > In the above example of dma-ranges, memory address from > > > > 0x0 - 0x80000000, > > 0x100000000 - 0x800000000, > > 0x1000000000 - 0x8000000000 and > > 0x10000000000 - 0xffffffffffffffff. > > > > are not allowed to be used as inbound addresses. > > > > Based-on-patch-by: Oza Pawandeep <oza.oza@xxxxxxxxxxxx> > > Signed-off-by: Srinath Mannam <srinath.mannam@xxxxxxxxxxxx> > > [lorenzo.pieralisi@xxxxxxx: updated commit log] > > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> > > Reviewed-by: Oza Pawandeep <poza@xxxxxxxxxxxxxx> > > Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> > > --- > > drivers/pci/controller/pcie-iproc.c | 44 ++++++++++++++++++++++++++++++++++++- > > 1 file changed, 43 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c > > index c20fd6b..94ba5c0 100644 > > --- a/drivers/pci/controller/pcie-iproc.c > > +++ b/drivers/pci/controller/pcie-iproc.c > > @@ -1146,11 +1146,43 @@ static int iproc_pcie_setup_ib(struct iproc_pcie *pcie, > > return ret; > > } > > > > +static int > > +iproc_pcie_add_dma_range(struct device *dev, struct list_head *resources, > > + struct of_pci_range *range) > > Just FYI, I cherry-picked these commits from Lorenzo's branch to fix > the formatting of this prototype to match the rest of the file, e.g.: Thank you, I noticed too but I forgot to update it before merging v6 from the list. Thanks, Lorenzo > > static int iproc_pcie_map_dma_ranges(struct iproc_pcie *pcie) > > ... > > static int iproce_pcie_get_msi(struct iproc_pcie *pcie,