[PATCH 0/3] iommu: rockchip: Fix discovery table address encoding
Jonas Karlman
jonas at kwiboo.se
Wed Jan 25 14:18:12 PST 2023
The address to the discovery table is currently encoded using an
incorrect bit layout when configured into the MMU_DTE_ADDR reg.
This currently do not cause any issue because the discovery and page
tables is allocated in memory below 4GB thanks to the GFP_DMA32 flag.
Testing has shown that the discovery table address should be encoded
using the same bit layout as the page table and memory page addresses.
Removing the GFP_DMA32 on a RK3568 with 8GB of memory will result in:
[ 0.907236] rk_iommu fe043e00.iommu: Page fault at 0x00000000ff801000 of type read
[ 0.907264] rk_iommu fe043e00.iommu: iova = 0x00000000ff801000: dte_index: 0x3fe pte_index: 0x1 page_offset: 0x0
[ 0.907281] rk_iommu fe043e00.iommu: mmu_dte_addr: 0x000000010189a000 dte at 0x000000010189aff8: 0x1722101 valid: 1 pte at 0x0000000101722004: 0x2c01107 valid: 1 page at 0x0000000102c01000 flags: 0x106
This series fixes this by using the existing mk_dtentries instead of the
dma_addr_dte ops to encode the discovery table address, removes unused
ops and finally removes the GFP_DMA32 flag to allow for discovery and
page tables to be allocated in memory above 4GB.
Jonas Karlman (3):
iommu: rockchip: Fix discovery table address encoding
iommu: rockchip: Remove unused variant ops
iommu: rockchip: Allocate tables from all available memory
drivers/iommu/rockchip-iommu.c | 45 +++++-----------------------------
1 file changed, 6 insertions(+), 39 deletions(-)
--
2.39.1
More information about the Linux-rockchip
mailing list