Hi Shameer, On 5/24/2021 2:02 PM, Shameer Kolothum wrote: > Add a helper function that retrieves RMR memory descriptors > associated with a given IOMMU. This will be used by IOMMU > drivers to setup necessary mappings. > > Now that we have this, invoke it from the generic helper > interface. > > Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@xxxxxxxxxx> > --- > drivers/acpi/arm64/iort.c | 50 +++++++++++++++++++++++++++++++++++++++ > drivers/iommu/dma-iommu.c | 4 ++++ > include/linux/acpi_iort.h | 7 ++++++ > 3 files changed, 61 insertions(+) > > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c > index fea1ffaedf3b..01917caf58de 100644 > --- a/drivers/acpi/arm64/iort.c > +++ b/drivers/acpi/arm64/iort.c > @@ -12,6 +12,7 @@ > > #include <linux/acpi_iort.h> > #include <linux/bitfield.h> > +#include <linux/dma-iommu.h> > #include <linux/iommu.h> > #include <linux/kernel.h> > #include <linux/list.h> > @@ -837,6 +838,53 @@ static inline int iort_add_device_replay(struct device *dev) > return err; > } > > +/** > + * iort_iommu_get_rmrs - Helper to retrieve RMR info associated with IOMMU > + * @iommu: fwnode for the IOMMU > + * @head: RMR list head to be populated > + * > + * Returns: 0 on success, <0 failure > + */ > +int iort_iommu_get_rmrs(struct fwnode_handle *iommu_fwnode, > + struct list_head *head) > +{ > + struct iort_rmr_entry *e; > + struct acpi_iort_node *iommu; > + int rmrs = 0; > + > + iommu = iort_get_iort_node(iommu_fwnode); > + if (!iommu || list_empty(&iort_rmr_list)) > + return -ENODEV; > + > + list_for_each_entry(e, &iort_rmr_list, list) { > + int prot = IOMMU_READ | IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO; We have a case with an IP block that needs EXEC rights on its reserved memory, so could you please drop the IOMMU_NOEXEC flag? --- Thanks & Best Regards, Laurentiu