bcm27xx: update 6.1 patches from RPi foundation
[openwrt/staging/stintel.git] / target / linux / bcm27xx / patches-6.1 / 950-1279-drm-v3d-Enable-V3D-to-use-different-PAGE_SIZE.patch
1 From eb06d31da3e2025a2e578d8de9843e24b68137a6 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Ma=C3=ADra=20Canal?= <mcanal@igalia.com>
3 Date: Tue, 13 Feb 2024 15:26:44 -0300
4 Subject: [PATCH 1279/1295] drm/v3d: Enable V3D to use different PAGE_SIZE
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Currently, the V3D driver uses PAGE_SHIFT over the assumption that
10 PAGE_SHIFT = 12, as the PAGE_SIZE = 4KB. But, the RPi 5 is using
11 PAGE_SIZE = 16KB, so the MMU PAGE_SHIFT is different than the system's
12 PAGE_SHIFT.
13
14 Enable V3D to be used in system's with any PAGE_SIZE by making sure that
15 everything MMU-related uses the MMU page shift.
16
17 Signed-off-by: MaĆ­ra Canal <mcanal@igalia.com>
18 ---
19 drivers/gpu/drm/v3d/v3d_bo.c | 12 ++++++------
20 drivers/gpu/drm/v3d/v3d_debugfs.c | 2 +-
21 drivers/gpu/drm/v3d/v3d_drv.h | 2 ++
22 drivers/gpu/drm/v3d/v3d_irq.c | 2 +-
23 drivers/gpu/drm/v3d/v3d_mmu.c | 2 --
24 5 files changed, 10 insertions(+), 10 deletions(-)
25
26 --- a/drivers/gpu/drm/v3d/v3d_bo.c
27 +++ b/drivers/gpu/drm/v3d/v3d_bo.c
28 @@ -37,7 +37,7 @@ void v3d_free_object(struct drm_gem_obje
29
30 mutex_lock(&v3d->bo_lock);
31 v3d->bo_stats.num_allocated--;
32 - v3d->bo_stats.pages_allocated -= obj->size >> PAGE_SHIFT;
33 + v3d->bo_stats.pages_allocated -= obj->size >> V3D_MMU_PAGE_SHIFT;
34 mutex_unlock(&v3d->bo_lock);
35
36 spin_lock(&v3d->mm_lock);
37 @@ -106,8 +106,8 @@ v3d_bo_create_finish(struct drm_gem_obje
38 * lifetime of the BO.
39 */
40 ret = drm_mm_insert_node_generic(&v3d->mm, &bo->node,
41 - obj->size >> PAGE_SHIFT,
42 - GMP_GRANULARITY >> PAGE_SHIFT, 0, 0);
43 + obj->size >> V3D_MMU_PAGE_SHIFT,
44 + GMP_GRANULARITY >> V3D_MMU_PAGE_SHIFT, 0, 0);
45 spin_unlock(&v3d->mm_lock);
46 if (ret)
47 return ret;
48 @@ -115,7 +115,7 @@ v3d_bo_create_finish(struct drm_gem_obje
49 /* Track stats for /debug/dri/n/bo_stats. */
50 mutex_lock(&v3d->bo_lock);
51 v3d->bo_stats.num_allocated++;
52 - v3d->bo_stats.pages_allocated += obj->size >> PAGE_SHIFT;
53 + v3d->bo_stats.pages_allocated += obj->size >> V3D_MMU_PAGE_SHIFT;
54 mutex_unlock(&v3d->bo_lock);
55
56 v3d_mmu_insert_ptes(bo);
57 @@ -183,7 +183,7 @@ int v3d_create_bo_ioctl(struct drm_devic
58 if (IS_ERR(bo))
59 return PTR_ERR(bo);
60
61 - args->offset = bo->node.start << PAGE_SHIFT;
62 + args->offset = bo->node.start << V3D_MMU_PAGE_SHIFT;
63
64 ret = drm_gem_handle_create(file_priv, &bo->base.base, &args->handle);
65 drm_gem_object_put(&bo->base.base);
66 @@ -228,7 +228,7 @@ int v3d_get_bo_offset_ioctl(struct drm_d
67 }
68 bo = to_v3d_bo(gem_obj);
69
70 - args->offset = bo->node.start << PAGE_SHIFT;
71 + args->offset = bo->node.start << V3D_MMU_PAGE_SHIFT;
72
73 drm_gem_object_put(gem_obj);
74 return 0;
75 --- a/drivers/gpu/drm/v3d/v3d_debugfs.c
76 +++ b/drivers/gpu/drm/v3d/v3d_debugfs.c
77 @@ -220,7 +220,7 @@ static int v3d_debugfs_bo_stats(struct s
78 seq_printf(m, "allocated bos: %d\n",
79 v3d->bo_stats.num_allocated);
80 seq_printf(m, "allocated bo size (kb): %ld\n",
81 - (long)v3d->bo_stats.pages_allocated << (PAGE_SHIFT - 10));
82 + (long)v3d->bo_stats.pages_allocated << (V3D_MMU_PAGE_SHIFT - 10));
83 mutex_unlock(&v3d->bo_lock);
84
85 return 0;
86 --- a/drivers/gpu/drm/v3d/v3d_drv.h
87 +++ b/drivers/gpu/drm/v3d/v3d_drv.h
88 @@ -19,6 +19,8 @@ struct reset_control;
89
90 #define GMP_GRANULARITY (128 * 1024)
91
92 +#define V3D_MMU_PAGE_SHIFT 12
93 +
94 #define V3D_MAX_QUEUES (V3D_CACHE_CLEAN + 1)
95
96 static inline char *
97 --- a/drivers/gpu/drm/v3d/v3d_irq.c
98 +++ b/drivers/gpu/drm/v3d/v3d_irq.c
99 @@ -70,7 +70,7 @@ v3d_overflow_mem_work(struct work_struct
100 list_add_tail(&bo->unref_head, &v3d->bin_job->render->unref_list);
101 spin_unlock_irqrestore(&v3d->job_lock, irqflags);
102
103 - V3D_CORE_WRITE(0, V3D_PTB_BPOA, bo->node.start << PAGE_SHIFT);
104 + V3D_CORE_WRITE(0, V3D_PTB_BPOA, bo->node.start << V3D_MMU_PAGE_SHIFT);
105 V3D_CORE_WRITE(0, V3D_PTB_BPOS, obj->size);
106
107 out:
108 --- a/drivers/gpu/drm/v3d/v3d_mmu.c
109 +++ b/drivers/gpu/drm/v3d/v3d_mmu.c
110 @@ -21,8 +21,6 @@
111 #include "v3d_drv.h"
112 #include "v3d_regs.h"
113
114 -#define V3D_MMU_PAGE_SHIFT 12
115 -
116 /* Note: All PTEs for the 1MB superpage must be filled with the
117 * superpage bit set.
118 */