summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJernej Skrabec <jernej.skrabec@gmail.com>2022-10-25 18:54:13 +0200
committerJoerg Roedel <jroedel@suse.de>2022-11-03 15:45:43 +0100
commiteac0104dc69be50bed86926d6f32e82b44f8c921 (patch)
tree97b7fdf0b2e5cd5ddf3213d3b5626a6f8f656ea1
parentcef20703e2b2276aaa402ec5a65ec9a09963b83e (diff)
downloadlinux-eac0104dc69be50bed86926d6f32e82b44f8c921.tar.gz
linux-eac0104dc69be50bed86926d6f32e82b44f8c921.tar.bz2
linux-eac0104dc69be50bed86926d6f32e82b44f8c921.zip
iommu/sun50i: Fix R/W permission check
Because driver has enum type permissions and iommu subsystem has bitmap type, we have to be careful how check for combined read and write permissions is done. In such case, we have to mask both permissions and check that both are set at the same time. Current code just masks both flags but doesn't check that both are set. In short, it always sets R/W permission, regardles if requested permissions were RO, WO or RW. Fix that. Fixes: 4100b8c229b3 ("iommu: Add Allwinner H6 IOMMU driver") Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com> Link: https://lore.kernel.org/r/20221025165415.307591-4-jernej.skrabec@gmail.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
-rw-r--r--drivers/iommu/sun50i-iommu.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/iommu/sun50i-iommu.c b/drivers/iommu/sun50i-iommu.c
index bbc269500800..df871af04bcb 100644
--- a/drivers/iommu/sun50i-iommu.c
+++ b/drivers/iommu/sun50i-iommu.c
@@ -271,7 +271,7 @@ static u32 sun50i_mk_pte(phys_addr_t page, int prot)
enum sun50i_iommu_aci aci;
u32 flags = 0;
- if (prot & (IOMMU_READ | IOMMU_WRITE))
+ if ((prot & (IOMMU_READ | IOMMU_WRITE)) == (IOMMU_READ | IOMMU_WRITE))
aci = SUN50I_IOMMU_ACI_RD_WR;
else if (prot & IOMMU_READ)
aci = SUN50I_IOMMU_ACI_RD;