@@ -826,6 +826,14 @@ void panthor_vm_idle(struct panthor_vm *vm)
826826 mutex_unlock (& ptdev -> mmu -> as .slots_lock );
827827}
828828
829+ u32 panthor_vm_page_size (struct panthor_vm * vm )
830+ {
831+ const struct io_pgtable * pgt = io_pgtable_ops_to_pgtable (vm -> pgtbl_ops );
832+ u32 pg_shift = ffs (pgt -> cfg .pgsize_bitmap ) - 1 ;
833+
834+ return 1u << pg_shift ;
835+ }
836+
829837static void panthor_vm_stop (struct panthor_vm * vm )
830838{
831839 drm_sched_stop (& vm -> sched , NULL );
@@ -1025,12 +1033,13 @@ int
10251033panthor_vm_alloc_va (struct panthor_vm * vm , u64 va , u64 size ,
10261034 struct drm_mm_node * va_node )
10271035{
1036+ ssize_t vm_pgsz = panthor_vm_page_size (vm );
10281037 int ret ;
10291038
1030- if (!size || (size & ~ PAGE_MASK ))
1039+ if (!size || ! IS_ALIGNED (size , vm_pgsz ))
10311040 return - EINVAL ;
10321041
1033- if (va != PANTHOR_VM_KERNEL_AUTO_VA && (va & ~ PAGE_MASK ))
1042+ if (va != PANTHOR_VM_KERNEL_AUTO_VA && ! IS_ALIGNED (va , vm_pgsz ))
10341043 return - EINVAL ;
10351044
10361045 mutex_lock (& vm -> mm_lock );
@@ -2366,11 +2375,12 @@ panthor_vm_bind_prepare_op_ctx(struct drm_file *file,
23662375 const struct drm_panthor_vm_bind_op * op ,
23672376 struct panthor_vm_op_ctx * op_ctx )
23682377{
2378+ ssize_t vm_pgsz = panthor_vm_page_size (vm );
23692379 struct drm_gem_object * gem ;
23702380 int ret ;
23712381
23722382 /* Aligned on page size. */
2373- if ((op -> va | op -> size ) & ~ PAGE_MASK )
2383+ if (! IS_ALIGNED (op -> va | op -> size , vm_pgsz ) )
23742384 return - EINVAL ;
23752385
23762386 switch (op -> flags & DRM_PANTHOR_VM_BIND_OP_TYPE_MASK ) {
0 commit comments