[PATCH] perf/smmuv3: Allow sharing MMIO registers with the SMMU driver
jean-philippe at linaro.org
Wed May 6 16:11:12 UTC 2020
On Wed, Apr 29, 2020 at 11:01:05AM -0700, Tuan Phan wrote:
> > On Apr 29, 2020, at 12:21 AM, Jean-Philippe Brucker <jean-philippe at linaro.org> wrote:
> > On Tue, Apr 28, 2020 at 11:10:09AM -0700, Tuan Phan wrote:
> >> I tested this patch on HW, however I need to add one more following change to make it works
> > Thanks for testing. I don't understand why you need the change below
> > though, do you know which other region is conflicting with the SMMU?
> > It should be displayed in the error message and /proc/iomem.
> > Thanks,
> > Jean
> The error if I don’t apply that patch:
> [ 4.943655] arm-smmu-v3 arm-smmu-v3.0.auto: can't request region for resource [mem 0x3bffe0000000-0x3bffe001ffff]
> The output of /proc/iomem for that region:
> 3bffe0000000-3bffe001ffff : arm-smmu-v3.0.auto
> 3bffe0002000-3bffe0002fff : arm-smmu-v3-pmcg.17.auto
> 3bffe0012000-3bffe0012fff : arm-smmu-v3-pmcg.17.auto
Thanks for this. It looks like the regions are added to the resource tree
twice, when booting with ACPI:
When the IORT creates the platform devices, platform_device_add() inserts
these resources but doesn't mark them busy. As I was testing with
devicetree I was missing this step.
Then the SMMU probe calls devm_ioremap_resource(), which tries to reserve
the resources and mark them busy this time. If there only was the non-busy
SMMU region inserted above, then __request_region() would adds the
reserved region as a child. However since there are smaller PMCG regions
as children of the SMMU region, __request_region() fails.
Another idea is to avoid mapping the IMPDEF registers in the SMMU driver.
I think it's nicer, and I'll post that patch shortly.
More information about the iommu