iommu/arm-smmu-qcom: Implement S2CR quirk
authorBjorn Andersson <bjorn.andersson@linaro.org>
Mon, 19 Oct 2020 18:23:23 +0000 (11:23 -0700)
committerWill Deacon <will@kernel.org>
Thu, 29 Oct 2020 18:12:10 +0000 (18:12 +0000)
commitf9081b8ff5934b8d69c748d0200e844cadd2c667
treef0250279c0f22c7fd43c6ea7e470e717068a026a
parent07a7f2caaa5a2619934491bab3c47b261c554fb0
iommu/arm-smmu-qcom: Implement S2CR quirk

The firmware found in some Qualcomm platforms intercepts writes to S2CR
in order to replace bypass type streams with fault; and ignore S2CR
updates of type fault.

Detect this behavior and implement a custom write_s2cr function in order
to trick the firmware into supporting bypass streams by the means of
configuring the stream for translation using a reserved and disabled
context bank.

Also circumvent the problem of configuring faulting streams by
configuring the stream as bypass.

Cc: <stable@vger.kernel.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Tested-by: Steev Klimaszewski <steev@kali.org>
Acked-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/20201019182323.3162386-4-bjorn.andersson@linaro.org
Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c