Hi Bjorn, Thank you. Regards, Srinath. On Tue, May 7, 2019 at 3:11 PM Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> wrote: > > 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,