2626#include <linux/slab.h>
2727#include <linux/spinlock.h>
2828
29+ #include "iommu-pages.h"
30+
2931/** MMU register offsets */
3032#define RK_MMU_DTE_ADDR 0x00 /* Directory table address */
3133#define RK_MMU_STATUS 0x04
@@ -727,14 +729,14 @@ static u32 *rk_dte_get_page_table(struct rk_iommu_domain *rk_domain,
727729 if (rk_dte_is_pt_valid (dte ))
728730 goto done ;
729731
730- page_table = ( u32 * ) get_zeroed_page (GFP_ATOMIC | rk_ops -> gfp_flags );
732+ page_table = iommu_alloc_page (GFP_ATOMIC | rk_ops -> gfp_flags );
731733 if (!page_table )
732734 return ERR_PTR (- ENOMEM );
733735
734736 pt_dma = dma_map_single (dma_dev , page_table , SPAGE_SIZE , DMA_TO_DEVICE );
735737 if (dma_mapping_error (dma_dev , pt_dma )) {
736738 dev_err (dma_dev , "DMA mapping error while allocating page table\n" );
737- free_page (( unsigned long ) page_table );
739+ iommu_free_page ( page_table );
738740 return ERR_PTR (- ENOMEM );
739741 }
740742
@@ -1061,7 +1063,7 @@ static struct iommu_domain *rk_iommu_domain_alloc_paging(struct device *dev)
10611063 * Each level1 (dt) and level2 (pt) table has 1024 4-byte entries.
10621064 * Allocate one 4 KiB page for each table.
10631065 */
1064- rk_domain -> dt = ( u32 * ) get_zeroed_page (GFP_KERNEL | rk_ops -> gfp_flags );
1066+ rk_domain -> dt = iommu_alloc_page (GFP_KERNEL | rk_ops -> gfp_flags );
10651067 if (!rk_domain -> dt )
10661068 goto err_free_domain ;
10671069
@@ -1083,7 +1085,7 @@ static struct iommu_domain *rk_iommu_domain_alloc_paging(struct device *dev)
10831085 return & rk_domain -> domain ;
10841086
10851087err_free_dt :
1086- free_page (( unsigned long ) rk_domain -> dt );
1088+ iommu_free_page ( rk_domain -> dt );
10871089err_free_domain :
10881090 kfree (rk_domain );
10891091
@@ -1104,13 +1106,13 @@ static void rk_iommu_domain_free(struct iommu_domain *domain)
11041106 u32 * page_table = phys_to_virt (pt_phys );
11051107 dma_unmap_single (dma_dev , pt_phys ,
11061108 SPAGE_SIZE , DMA_TO_DEVICE );
1107- free_page (( unsigned long ) page_table );
1109+ iommu_free_page ( page_table );
11081110 }
11091111 }
11101112
11111113 dma_unmap_single (dma_dev , rk_domain -> dt_dma ,
11121114 SPAGE_SIZE , DMA_TO_DEVICE );
1113- free_page (( unsigned long ) rk_domain -> dt );
1115+ iommu_free_page ( rk_domain -> dt );
11141116
11151117 kfree (rk_domain );
11161118}
0 commit comments