On Tue, Apr 20, 2021 at 07:26:09PM +0200, Thierry Reding wrote: > From: Thierry Reding <treding@xxxxxxxxxx> > > Hi, > > this is a set of patches that is the result of earlier discussions > regarding early identity mappings that are needed to avoid SMMU faults > during early boot. > > The goal here is to avoid early identity mappings altogether and instead > postpone the need for the identity mappings to when devices are attached > to the SMMU. This works by making the SMMU driver coordinate with the > memory controller driver on when to start enforcing SMMU translations. > This makes Tegra behave in a more standard way and pushes the code to > deal with the Tegra-specific programming into the NVIDIA SMMU > implementation. > > Compared to the original version of these patches, I've split the > preparatory work into a separate patch series because it became very > large and will be mostly uninteresting for this audience. > > Patch 1 provides a mechanism to program SID overrides at runtime. Patch > 2 updates the ARM SMMU device tree bindings to include the Tegra186 > compatible string as suggested by Robin during review. > > Patches 3 and 4 create the fundamentals in the SMMU driver to support > this and also make this functionality available on Tegra186. Patch 5 > hooks the ARM SMMU up to the memory controller so that the memory client > stream ID overrides can be programmed at the right time. > > Patch 6 extends this mechanism to Tegra186 and patches 7-9 enable all of > this through device tree updates. Patch 10 is included here to show how > SMMU will be enabled for display controllers. However, it cannot be > applied yet because the code to create identity mappings for potentially > live framebuffers hasn't been merged yet. > > The end result is that various peripherals will have SMMU enabled, while > the display controllers will keep using passthrough, as initially set up > by firmware. Once the device tree bindings have been accepted and the > SMMU driver has been updated to create identity mappings for the display > controllers, they can be hooked up to the SMMU and the code in this > series will automatically program the SID overrides to enable SMMU > translations at the right time. > > Note that the series creates a compile time dependency between the > memory controller and IOMMU trees. If it helps I can provide a branch > for each tree, modelling the dependency, once the series has been > reviewed. > > Changes in v2: > - split off the preparatory work into a separate series (that needs to > be applied first) > - address review comments by Robin > > Thierry > > Thierry Reding (10): > memory: tegra: Implement SID override programming > dt-bindings: arm-smmu: Add Tegra186 compatible string > iommu/arm-smmu: Implement ->probe_finalize() > iommu/arm-smmu: tegra: Detect number of instances at runtime > iommu/arm-smmu: tegra: Implement SID override programming > iommu/arm-smmu: Use Tegra implementation on Tegra186 > arm64: tegra: Use correct compatible string for Tegra186 SMMU > arm64: tegra: Hook up memory controller to SMMU on Tegra186 > arm64: tegra: Enable SMMU support on Tegra194 > arm64: tegra: Enable SMMU support for display on Tegra194 > > .../devicetree/bindings/iommu/arm,smmu.yaml | 11 +- > arch/arm64/boot/dts/nvidia/tegra186.dtsi | 4 +- > arch/arm64/boot/dts/nvidia/tegra194.dtsi | 166 ++++++++++++++++++ > drivers/iommu/arm/arm-smmu/arm-smmu-impl.c | 3 +- > drivers/iommu/arm/arm-smmu/arm-smmu-nvidia.c | 90 ++++++++-- > drivers/iommu/arm/arm-smmu/arm-smmu.c | 13 ++ > drivers/iommu/arm/arm-smmu/arm-smmu.h | 1 + > drivers/memory/tegra/mc.c | 9 + > drivers/memory/tegra/tegra186.c | 72 ++++++++ > include/soc/tegra/mc.h | 3 + > 10 files changed, 349 insertions(+), 23 deletions(-) Will, Robin, do you have any more comments on the ARM SMMU bits of this series? If not, can you guys provide an Acked-by so that Krzysztof can pick this (modulo the DT patches) up into the memory-controller tree for v5.14? I'll send out a v3 with the bisectibilitiy fix that Krishna pointed out. Thanks, Thierry
Attachment:
signature.asc
Description: PGP signature