Hi Maíra, El mié, 14-02-2024 a las 16:34 -0300, Maíra Canal escribió: > Currently, the V3D driver uses PAGE_SHIFT over the assumption that > PAGE_SHIFT = 12, as the PAGE_SIZE = 4KB. But, the RPi 5 is using > PAGE_SIZE = 16KB, so the MMU PAGE_SHIFT is different than the > system's > PAGE_SHIFT. > > Enable V3D to be used in system's with any PAGE_SIZE by making sure > that > everything MMU-related uses the MMU page shift. > > Signed-off-by: Maíra Canal <mcanal@xxxxxxxxxx> > --- > drivers/gpu/drm/v3d/v3d_bo.c | 12 ++++++------ > drivers/gpu/drm/v3d/v3d_debugfs.c | 2 +- > drivers/gpu/drm/v3d/v3d_drv.h | 2 ++ > drivers/gpu/drm/v3d/v3d_irq.c | 2 +- > drivers/gpu/drm/v3d/v3d_mmu.c | 2 -- > 5 files changed, 10 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/v3d/v3d_bo.c > b/drivers/gpu/drm/v3d/v3d_bo.c > index 1bdfac8beafd..a07ede668cc1 100644 > --- a/drivers/gpu/drm/v3d/v3d_bo.c > +++ b/drivers/gpu/drm/v3d/v3d_bo.c I think we need the same change in v3d_get_bo_vaddr, no? Iago > @@ -40,7 +40,7 @@ void v3d_free_object(struct drm_gem_object *obj) > > mutex_lock(&v3d->bo_lock); > v3d->bo_stats.num_allocated--; > - v3d->bo_stats.pages_allocated -= obj->size >> PAGE_SHIFT; > + v3d->bo_stats.pages_allocated -= obj->size >> > V3D_MMU_PAGE_SHIFT; > mutex_unlock(&v3d->bo_lock); > > spin_lock(&v3d->mm_lock); > @@ -109,8 +109,8 @@ v3d_bo_create_finish(struct drm_gem_object *obj) > * lifetime of the BO. > */ > ret = drm_mm_insert_node_generic(&v3d->mm, &bo->node, > - obj->size >> PAGE_SHIFT, > - GMP_GRANULARITY >> > PAGE_SHIFT, 0, 0); > + obj->size >> > V3D_MMU_PAGE_SHIFT, > + GMP_GRANULARITY >> > V3D_MMU_PAGE_SHIFT, 0, 0); > spin_unlock(&v3d->mm_lock); > if (ret) > return ret; > @@ -118,7 +118,7 @@ v3d_bo_create_finish(struct drm_gem_object *obj) > /* Track stats for /debug/dri/n/bo_stats. */ > mutex_lock(&v3d->bo_lock); > v3d->bo_stats.num_allocated++; > - v3d->bo_stats.pages_allocated += obj->size >> PAGE_SHIFT; > + v3d->bo_stats.pages_allocated += obj->size >> > V3D_MMU_PAGE_SHIFT; > mutex_unlock(&v3d->bo_lock); > > v3d_mmu_insert_ptes(bo); > @@ -201,7 +201,7 @@ int v3d_create_bo_ioctl(struct drm_device *dev, > void *data, > if (IS_ERR(bo)) > return PTR_ERR(bo); > > - args->offset = bo->node.start << PAGE_SHIFT; > + args->offset = bo->node.start << V3D_MMU_PAGE_SHIFT; > > ret = drm_gem_handle_create(file_priv, &bo->base.base, > &args->handle); > drm_gem_object_put(&bo->base.base); > @@ -246,7 +246,7 @@ int v3d_get_bo_offset_ioctl(struct drm_device > *dev, void *data, > } > bo = to_v3d_bo(gem_obj); > > - args->offset = bo->node.start << PAGE_SHIFT; > + args->offset = bo->node.start << V3D_MMU_PAGE_SHIFT; > > drm_gem_object_put(gem_obj); > return 0; > diff --git a/drivers/gpu/drm/v3d/v3d_debugfs.c > b/drivers/gpu/drm/v3d/v3d_debugfs.c > index dc3cf708d02e..19e3ee7ac897 100644 > --- a/drivers/gpu/drm/v3d/v3d_debugfs.c > +++ b/drivers/gpu/drm/v3d/v3d_debugfs.c > @@ -219,7 +219,7 @@ static int v3d_debugfs_bo_stats(struct seq_file > *m, void *unused) > seq_printf(m, "allocated bos: %d\n", > v3d->bo_stats.num_allocated); > seq_printf(m, "allocated bo size (kb): %ld\n", > - (long)v3d->bo_stats.pages_allocated << > (PAGE_SHIFT - 10)); > + (long)v3d->bo_stats.pages_allocated << > (V3D_MMU_PAGE_SHIFT - 10)); > mutex_unlock(&v3d->bo_lock); > > return 0; > diff --git a/drivers/gpu/drm/v3d/v3d_drv.h > b/drivers/gpu/drm/v3d/v3d_drv.h > index 3c7d58866570..1950c723dde1 100644 > --- a/drivers/gpu/drm/v3d/v3d_drv.h > +++ b/drivers/gpu/drm/v3d/v3d_drv.h > @@ -19,6 +19,8 @@ struct reset_control; > > #define GMP_GRANULARITY (128 * 1024) > > +#define V3D_MMU_PAGE_SHIFT 12 > + > #define V3D_MAX_QUEUES (V3D_CPU + 1) > > static inline char *v3d_queue_to_string(enum v3d_queue queue) > diff --git a/drivers/gpu/drm/v3d/v3d_irq.c > b/drivers/gpu/drm/v3d/v3d_irq.c > index afc76390a197..2e04f6cb661e 100644 > --- a/drivers/gpu/drm/v3d/v3d_irq.c > +++ b/drivers/gpu/drm/v3d/v3d_irq.c > @@ -70,7 +70,7 @@ v3d_overflow_mem_work(struct work_struct *work) > list_add_tail(&bo->unref_head, &v3d->bin_job->render- > >unref_list); > spin_unlock_irqrestore(&v3d->job_lock, irqflags); > > - V3D_CORE_WRITE(0, V3D_PTB_BPOA, bo->node.start << > PAGE_SHIFT); > + V3D_CORE_WRITE(0, V3D_PTB_BPOA, bo->node.start << > V3D_MMU_PAGE_SHIFT); > V3D_CORE_WRITE(0, V3D_PTB_BPOS, obj->size); > > out: > diff --git a/drivers/gpu/drm/v3d/v3d_mmu.c > b/drivers/gpu/drm/v3d/v3d_mmu.c > index 5a453532901f..14f3af40d6f6 100644 > --- a/drivers/gpu/drm/v3d/v3d_mmu.c > +++ b/drivers/gpu/drm/v3d/v3d_mmu.c > @@ -21,8 +21,6 @@ > #include "v3d_drv.h" > #include "v3d_regs.h" > > -#define V3D_MMU_PAGE_SHIFT 12 > - > /* Note: All PTEs for the 1MB superpage must be filled with the > * superpage bit set. > */ > -- > 2.43.0 > >