iommu/tegra-smmu: Fix page tables in > 4 GiB memory
authorThierry Reding <treding@nvidia.com>
Wed, 16 Oct 2019 11:50:26 +0000 (13:50 +0200)
committerJoerg Roedel <jroedel@suse.de>
Fri, 18 Oct 2019 09:46:11 +0000 (11:46 +0200)
commit96d3ab802e4930a29a33934373157d6dff1b2c7e
tree865c8369b01a79df48785d07c22a164c91ff2092
parente31e5929547edf396ea2c0873244c734c6bceafa
iommu/tegra-smmu: Fix page tables in > 4 GiB memory

Page tables that reside in physical memory beyond the 4 GiB boundary are
currently not working properly. The reason is that when the physical
address for page directory entries is read, it gets truncated at 32 bits
and can cause crashes when passing that address to the DMA API.

Fix this by first casting the PDE value to a dma_addr_t and then using
the page frame number mask for the SMMU instance to mask out the invalid
bits, which are typically used for mapping attributes, etc.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/tegra-smmu.c