MLK-15007-1 iommu: arm: pgtable: alloc pagetable in DMA area
Normally the iommu pagetable could be in 64bit address space, but we have one patch to address PCIE driver, 'commit 9e03e5076269 ("MLK-15064-2 ARM64: DMA: limit the dma mask to be 32bit")' The patch restrict swiotlb and iommu dma to be in 32bit address. So if we allocate pages in highmem, then dma_map_single will return a 32bit address. Then, we will get "Cannot accommodate DMA translation for IOMMU page tables", because `dma != virt_to_phys(pages)`. So we strict the lpae iommu pgtable in DMA area to fix this issue. Signed-off-by: Peng Fan <peng.fan@nxp.com>pull/10/head
parent
e0a722a622
commit
910ca91606
|
@ -14,6 +14,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014 ARM Limited
|
* Copyright (C) 2014 ARM Limited
|
||||||
|
* Copyright 2017 NXP
|
||||||
*
|
*
|
||||||
* Author: Will Deacon <will.deacon@arm.com>
|
* Author: Will Deacon <will.deacon@arm.com>
|
||||||
*/
|
*/
|
||||||
|
@ -215,7 +216,7 @@ static void *__arm_lpae_alloc_pages(size_t size, gfp_t gfp,
|
||||||
{
|
{
|
||||||
struct device *dev = cfg->iommu_dev;
|
struct device *dev = cfg->iommu_dev;
|
||||||
dma_addr_t dma;
|
dma_addr_t dma;
|
||||||
void *pages = alloc_pages_exact(size, gfp | __GFP_ZERO);
|
void *pages = alloc_pages_exact(size, gfp | __GFP_ZERO | __GFP_DMA);
|
||||||
|
|
||||||
if (!pages)
|
if (!pages)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue