26
26
#include <linux/slab.h>
27
27
#include <linux/spinlock.h>
28
28
29
+ #include "iommu-pages.h"
30
+
29
31
/** MMU register offsets */
30
32
#define RK_MMU_DTE_ADDR 0x00 /* Directory table address */
31
33
#define RK_MMU_STATUS 0x04
@@ -727,14 +729,14 @@ static u32 *rk_dte_get_page_table(struct rk_iommu_domain *rk_domain,
727
729
if (rk_dte_is_pt_valid (dte ))
728
730
goto done ;
729
731
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 );
731
733
if (!page_table )
732
734
return ERR_PTR (- ENOMEM );
733
735
734
736
pt_dma = dma_map_single (dma_dev , page_table , SPAGE_SIZE , DMA_TO_DEVICE );
735
737
if (dma_mapping_error (dma_dev , pt_dma )) {
736
738
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 );
738
740
return ERR_PTR (- ENOMEM );
739
741
}
740
742
@@ -1061,7 +1063,7 @@ static struct iommu_domain *rk_iommu_domain_alloc_paging(struct device *dev)
1061
1063
* Each level1 (dt) and level2 (pt) table has 1024 4-byte entries.
1062
1064
* Allocate one 4 KiB page for each table.
1063
1065
*/
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 );
1065
1067
if (!rk_domain -> dt )
1066
1068
goto err_free_domain ;
1067
1069
@@ -1083,7 +1085,7 @@ static struct iommu_domain *rk_iommu_domain_alloc_paging(struct device *dev)
1083
1085
return & rk_domain -> domain ;
1084
1086
1085
1087
err_free_dt :
1086
- free_page (( unsigned long ) rk_domain -> dt );
1088
+ iommu_free_page ( rk_domain -> dt );
1087
1089
err_free_domain :
1088
1090
kfree (rk_domain );
1089
1091
@@ -1104,13 +1106,13 @@ static void rk_iommu_domain_free(struct iommu_domain *domain)
1104
1106
u32 * page_table = phys_to_virt (pt_phys );
1105
1107
dma_unmap_single (dma_dev , pt_phys ,
1106
1108
SPAGE_SIZE , DMA_TO_DEVICE );
1107
- free_page (( unsigned long ) page_table );
1109
+ iommu_free_page ( page_table );
1108
1110
}
1109
1111
}
1110
1112
1111
1113
dma_unmap_single (dma_dev , rk_domain -> dt_dma ,
1112
1114
SPAGE_SIZE , DMA_TO_DEVICE );
1113
- free_page (( unsigned long ) rk_domain -> dt );
1115
+ iommu_free_page ( rk_domain -> dt );
1114
1116
1115
1117
kfree (rk_domain );
1116
1118
}
0 commit comments