summaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-6.1/950-0938-drm-vc4-Introduce-generation-number-enum.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-6.1/950-0938-drm-vc4-Introduce-generation-number-enum.patch')
-rw-r--r--target/linux/bcm27xx/patches-6.1/950-0938-drm-vc4-Introduce-generation-number-enum.patch1029
1 files changed, 0 insertions, 1029 deletions
diff --git a/target/linux/bcm27xx/patches-6.1/950-0938-drm-vc4-Introduce-generation-number-enum.patch b/target/linux/bcm27xx/patches-6.1/950-0938-drm-vc4-Introduce-generation-number-enum.patch
deleted file mode 100644
index d904c3d78d..0000000000
--- a/target/linux/bcm27xx/patches-6.1/950-0938-drm-vc4-Introduce-generation-number-enum.patch
+++ /dev/null
@@ -1,1029 +0,0 @@
-From fa2571d625bb53b642cd9f29a7cfc3434e1cf576 Mon Sep 17 00:00:00 2001
-From: Maxime Ripard <maxime@cerno.tech>
-Date: Fri, 17 Feb 2023 13:07:36 +0100
-Subject: [PATCH] drm/vc4: Introduce generation number enum
-
-With the introduction of the BCM2712 support, we will get yet another
-generation of display engine to support.
-
-The binary check of whether it's VC5 or not thus doesn't work anymore,
-especially since some parts of the driver will have changed with BCM2711,
-and some others with BCM2712.
-
-Let's introduce an enum to store the generation the driver is running
-on, which should provide more flexibility.
-
-Signed-off-by: Maxime Ripard <maxime@cerno.tech>
----
- drivers/gpu/drm/vc4/tests/vc4_mock.c | 12 +++---
- drivers/gpu/drm/vc4/vc4_bo.c | 28 ++++++------
- drivers/gpu/drm/vc4/vc4_crtc.c | 14 +++---
- drivers/gpu/drm/vc4/vc4_drv.c | 22 ++++++----
- drivers/gpu/drm/vc4/vc4_drv.h | 7 ++-
- drivers/gpu/drm/vc4/vc4_gem.c | 24 +++++------
- drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +-
- drivers/gpu/drm/vc4/vc4_hvs.c | 50 ++++++++++++----------
- drivers/gpu/drm/vc4/vc4_irq.c | 10 ++---
- drivers/gpu/drm/vc4/vc4_kms.c | 14 +++---
- drivers/gpu/drm/vc4/vc4_perfmon.c | 20 ++++-----
- drivers/gpu/drm/vc4/vc4_plane.c | 12 +++---
- drivers/gpu/drm/vc4/vc4_render_cl.c | 2 +-
- drivers/gpu/drm/vc4/vc4_v3d.c | 10 ++---
- drivers/gpu/drm/vc4/vc4_validate.c | 8 ++--
- drivers/gpu/drm/vc4/vc4_validate_shaders.c | 2 +-
- 16 files changed, 126 insertions(+), 111 deletions(-)
-
---- a/drivers/gpu/drm/vc4/tests/vc4_mock.c
-+++ b/drivers/gpu/drm/vc4/tests/vc4_mock.c
-@@ -153,11 +153,11 @@ static int __build_mock(struct kunit *te
- return 0;
- }
-
--static struct vc4_dev *__mock_device(struct kunit *test, bool is_vc5)
-+static struct vc4_dev *__mock_device(struct kunit *test, enum vc4_gen gen)
- {
- struct drm_device *drm;
-- const struct drm_driver *drv = is_vc5 ? &vc5_drm_driver : &vc4_drm_driver;
-- const struct vc4_mock_desc *desc = is_vc5 ? &vc5_mock : &vc4_mock;
-+ const struct drm_driver *drv = (gen == VC4_GEN_5) ? &vc5_drm_driver : &vc4_drm_driver;
-+ const struct vc4_mock_desc *desc = (gen == VC4_GEN_5) ? &vc5_mock : &vc4_mock;
- struct vc4_dev *vc4;
- struct device *dev;
- int ret;
-@@ -171,7 +171,7 @@ static struct vc4_dev *__mock_device(str
- KUNIT_ASSERT_NOT_ERR_OR_NULL(test, vc4);
-
- vc4->dev = dev;
-- vc4->is_vc5 = is_vc5;
-+ vc4->gen = gen;
-
- vc4->hvs = __vc4_hvs_alloc(vc4, NULL);
- KUNIT_ASSERT_NOT_ERR_OR_NULL(test, vc4->hvs);
-@@ -191,10 +191,10 @@ static struct vc4_dev *__mock_device(str
-
- struct vc4_dev *vc4_mock_device(struct kunit *test)
- {
-- return __mock_device(test, false);
-+ return __mock_device(test, VC4_GEN_4);
- }
-
- struct vc4_dev *vc5_mock_device(struct kunit *test)
- {
-- return __mock_device(test, true);
-+ return __mock_device(test, VC4_GEN_5);
- }
---- a/drivers/gpu/drm/vc4/vc4_bo.c
-+++ b/drivers/gpu/drm/vc4/vc4_bo.c
-@@ -251,7 +251,7 @@ void vc4_bo_add_to_purgeable_pool(struct
- {
- struct vc4_dev *vc4 = to_vc4_dev(bo->base.base.dev);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- mutex_lock(&vc4->purgeable.lock);
-@@ -265,7 +265,7 @@ static void vc4_bo_remove_from_purgeable
- {
- struct vc4_dev *vc4 = to_vc4_dev(bo->base.base.dev);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- /* list_del_init() is used here because the caller might release
-@@ -396,7 +396,7 @@ struct drm_gem_object *vc4_create_object
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- struct vc4_bo *bo;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return ERR_PTR(-ENODEV);
-
- bo = kzalloc(sizeof(*bo), GFP_KERNEL);
-@@ -427,7 +427,7 @@ struct vc4_bo *vc4_bo_create(struct drm_
- struct drm_gem_dma_object *dma_obj;
- struct vc4_bo *bo;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return ERR_PTR(-ENODEV);
-
- if (size == 0)
-@@ -496,7 +496,7 @@ int vc4_bo_dumb_create(struct drm_file *
- struct vc4_bo *bo = NULL;
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- ret = vc4_dumb_fixup_args(args);
-@@ -622,7 +622,7 @@ int vc4_bo_inc_usecnt(struct vc4_bo *bo)
- struct vc4_dev *vc4 = to_vc4_dev(bo->base.base.dev);
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- /* Fast path: if the BO is already retained by someone, no need to
-@@ -661,7 +661,7 @@ void vc4_bo_dec_usecnt(struct vc4_bo *bo
- {
- struct vc4_dev *vc4 = to_vc4_dev(bo->base.base.dev);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- /* Fast path: if the BO is still retained by someone, no need to test
-@@ -783,7 +783,7 @@ int vc4_create_bo_ioctl(struct drm_devic
- struct vc4_bo *bo = NULL;
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- ret = vc4_grab_bin_bo(vc4, vc4file);
-@@ -813,7 +813,7 @@ int vc4_mmap_bo_ioctl(struct drm_device
- struct drm_vc4_mmap_bo *args = data;
- struct drm_gem_object *gem_obj;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- gem_obj = drm_gem_object_lookup(file_priv, args->handle);
-@@ -839,7 +839,7 @@ vc4_create_shader_bo_ioctl(struct drm_de
- struct vc4_bo *bo = NULL;
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (args->size == 0)
-@@ -918,7 +918,7 @@ int vc4_set_tiling_ioctl(struct drm_devi
- struct vc4_bo *bo;
- bool t_format;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (args->flags != 0)
-@@ -964,7 +964,7 @@ int vc4_get_tiling_ioctl(struct drm_devi
- struct drm_gem_object *gem_obj;
- struct vc4_bo *bo;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (args->flags != 0 || args->modifier != 0)
-@@ -1011,7 +1011,7 @@ int vc4_bo_cache_init(struct drm_device
- int ret;
- int i;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- /* Create the initial set of BO labels that the kernel will
-@@ -1075,7 +1075,7 @@ int vc4_label_bo_ioctl(struct drm_device
- struct drm_gem_object *gem_obj;
- int ret = 0, label;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (!args->len)
---- a/drivers/gpu/drm/vc4/vc4_crtc.c
-+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
-@@ -263,7 +263,7 @@ static u32 vc4_get_fifo_full_level(struc
- * Removing 1 from the FIFO full level however
- * seems to completely remove that issue.
- */
-- if (!vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_4)
- return fifo_len_bytes - 3 * HVS_FIFO_LATENCY_PIX - 1;
-
- return fifo_len_bytes - 3 * HVS_FIFO_LATENCY_PIX;
-@@ -445,7 +445,7 @@ static void vc4_crtc_config_pv(struct dr
- if (is_dsi)
- CRTC_WRITE(PV_HACT_ACT, mode->hdisplay * pixel_rep);
-
-- if (vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_5)
- CRTC_WRITE(PV_MUX_CFG,
- VC4_SET_FIELD(PV_MUX_CFG_RGB_PIXEL_MUX_MODE_NO_SWAP,
- PV_MUX_CFG_RGB_PIXEL_MUX_MODE));
-@@ -936,7 +936,7 @@ static int vc4_async_set_fence_cb(struct
- struct dma_fence *fence;
- int ret;
-
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- struct vc4_bo *bo = to_vc4_bo(&dma_bo->base);
-
- return vc4_queue_seqno_cb(dev, &flip_state->cb.seqno, bo->seqno,
-@@ -1023,7 +1023,7 @@ static int vc4_async_page_flip(struct dr
- struct vc4_bo *bo = to_vc4_bo(&dma_bo->base);
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- /*
-@@ -1066,7 +1066,7 @@ int vc4_page_flip(struct drm_crtc *crtc,
- struct drm_device *dev = crtc->dev;
- struct vc4_dev *vc4 = to_vc4_dev(dev);
-
-- if (vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_5)
- return vc5_async_page_flip(crtc, fb, event, flags);
- else
- return vc4_async_page_flip(crtc, fb, event, flags);
-@@ -1358,13 +1358,13 @@ int __vc4_crtc_init(struct drm_device *d
-
- drm_crtc_helper_add(crtc, crtc_helper_funcs);
-
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- drm_mode_crtc_set_gamma_size(crtc, ARRAY_SIZE(vc4_crtc->lut_r));
- drm_crtc_enable_color_mgmt(crtc, 0, false, crtc->gamma_size);
- }
-
-
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- /* We support CTM, but only for one CRTC at a time. It's therefore
- * implemented as private driver state in vc4_kms, not here.
- */
---- a/drivers/gpu/drm/vc4/vc4_drv.c
-+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -98,7 +98,7 @@ static int vc4_get_param_ioctl(struct dr
- if (args->pad != 0)
- return -EINVAL;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (!vc4->v3d)
-@@ -147,7 +147,7 @@ static int vc4_open(struct drm_device *d
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- struct vc4_file *vc4file;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- vc4file = kzalloc(sizeof(*vc4file), GFP_KERNEL);
-@@ -165,7 +165,7 @@ static void vc4_close(struct drm_device
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- struct vc4_file *vc4file = file->driver_priv;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- if (vc4file->bin_bo_used)
-@@ -305,13 +305,17 @@ static int vc4_drm_bind(struct device *d
- struct vc4_dev *vc4;
- struct device_node *node;
- struct drm_crtc *crtc;
-- bool is_vc5;
-+ enum vc4_gen gen;
- int ret = 0;
-
- dev->coherent_dma_mask = DMA_BIT_MASK(32);
-
-- is_vc5 = of_device_is_compatible(dev->of_node, "brcm,bcm2711-vc5");
-- if (is_vc5)
-+ if (of_device_is_compatible(dev->of_node, "brcm,bcm2711-vc5"))
-+ gen = VC4_GEN_5;
-+ else
-+ gen = VC4_GEN_4;
-+
-+ if (gen == VC4_GEN_5)
- driver = &vc5_drm_driver;
- else
- driver = &vc4_drm_driver;
-@@ -329,14 +333,14 @@ static int vc4_drm_bind(struct device *d
- vc4 = devm_drm_dev_alloc(dev, driver, struct vc4_dev, base);
- if (IS_ERR(vc4))
- return PTR_ERR(vc4);
-- vc4->is_vc5 = is_vc5;
-+ vc4->gen = gen;
- vc4->dev = dev;
-
- drm = &vc4->base;
- platform_set_drvdata(pdev, drm);
- INIT_LIST_HEAD(&vc4->debugfs_list);
-
-- if (!is_vc5) {
-+ if (gen == VC4_GEN_4) {
- ret = drmm_mutex_init(drm, &vc4->bin_bo_lock);
- if (ret)
- return ret;
-@@ -350,7 +354,7 @@ static int vc4_drm_bind(struct device *d
- if (ret)
- return ret;
-
-- if (!is_vc5) {
-+ if (gen == VC4_GEN_4) {
- ret = vc4_gem_init(drm);
- if (ret)
- return ret;
---- a/drivers/gpu/drm/vc4/vc4_drv.h
-+++ b/drivers/gpu/drm/vc4/vc4_drv.h
-@@ -80,11 +80,16 @@ struct vc4_perfmon {
- u64 counters[];
- };
-
-+enum vc4_gen {
-+ VC4_GEN_4,
-+ VC4_GEN_5,
-+};
-+
- struct vc4_dev {
- struct drm_device base;
- struct device *dev;
-
-- bool is_vc5;
-+ enum vc4_gen gen;
-
- unsigned int irq;
-
---- a/drivers/gpu/drm/vc4/vc4_gem.c
-+++ b/drivers/gpu/drm/vc4/vc4_gem.c
-@@ -76,7 +76,7 @@ vc4_get_hang_state_ioctl(struct drm_devi
- u32 i;
- int ret = 0;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (!vc4->v3d) {
-@@ -389,7 +389,7 @@ vc4_wait_for_seqno(struct drm_device *de
- unsigned long timeout_expire;
- DEFINE_WAIT(wait);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (vc4->finished_seqno >= seqno)
-@@ -474,7 +474,7 @@ vc4_submit_next_bin_job(struct drm_devic
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- struct vc4_exec_info *exec;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- again:
-@@ -522,7 +522,7 @@ vc4_submit_next_render_job(struct drm_de
- if (!exec)
- return;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- /* A previous RCL may have written to one of our textures, and
-@@ -543,7 +543,7 @@ vc4_move_job_to_render(struct drm_device
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- bool was_empty = list_empty(&vc4->render_job_list);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- list_move_tail(&exec->head, &vc4->render_job_list);
-@@ -1012,7 +1012,7 @@ vc4_job_handle_completed(struct vc4_dev
- unsigned long irqflags;
- struct vc4_seqno_cb *cb, *cb_temp;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- spin_lock_irqsave(&vc4->job_lock, irqflags);
-@@ -1051,7 +1051,7 @@ int vc4_queue_seqno_cb(struct drm_device
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- unsigned long irqflags;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- cb->func = func;
-@@ -1107,7 +1107,7 @@ vc4_wait_seqno_ioctl(struct drm_device *
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- struct drm_vc4_wait_seqno *args = data;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- return vc4_wait_for_seqno_ioctl_helper(dev, args->seqno,
-@@ -1124,7 +1124,7 @@ vc4_wait_bo_ioctl(struct drm_device *dev
- struct drm_gem_object *gem_obj;
- struct vc4_bo *bo;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (args->pad != 0)
-@@ -1173,7 +1173,7 @@ vc4_submit_cl_ioctl(struct drm_device *d
- args->shader_rec_size,
- args->bo_handle_count);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (!vc4->v3d) {
-@@ -1310,7 +1310,7 @@ int vc4_gem_init(struct drm_device *dev)
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- vc4->dma_fence_context = dma_fence_context_alloc(1);
-@@ -1369,7 +1369,7 @@ int vc4_gem_madvise_ioctl(struct drm_dev
- struct vc4_bo *bo;
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- switch (args->madv) {
---- a/drivers/gpu/drm/vc4/vc4_hdmi.c
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -2614,7 +2614,7 @@ static int vc4_hdmi_audio_prepare(struct
- VC4_HDMI_AUDIO_PACKET_CEA_MASK);
-
- /* Set the MAI threshold */
-- if (vc4->is_vc5)
-+ if (vc4->gen >= VC4_GEN_5)
- HDMI_WRITE(HDMI_MAI_THR,
- VC4_SET_FIELD(0x10, VC4_HD_MAI_THR_PANICHIGH) |
- VC4_SET_FIELD(0x10, VC4_HD_MAI_THR_PANICLOW) |
---- a/drivers/gpu/drm/vc4/vc4_hvs.c
-+++ b/drivers/gpu/drm/vc4/vc4_hvs.c
-@@ -416,7 +416,7 @@ static void vc4_hvs_irq_enable_eof(const
- unsigned int channel)
- {
- struct vc4_dev *vc4 = hvs->vc4;
-- u32 irq_mask = vc4->is_vc5 ?
-+ u32 irq_mask = vc4->gen == VC4_GEN_5 ?
- SCALER5_DISPCTRL_DSPEIEOF(channel) :
- SCALER_DISPCTRL_DSPEIEOF(channel);
-
-@@ -428,7 +428,7 @@ static void vc4_hvs_irq_clear_eof(const
- unsigned int channel)
- {
- struct vc4_dev *vc4 = hvs->vc4;
-- u32 irq_mask = vc4->is_vc5 ?
-+ u32 irq_mask = vc4->gen == VC4_GEN_5 ?
- SCALER5_DISPCTRL_DSPEIEOF(channel) :
- SCALER_DISPCTRL_DSPEIEOF(channel);
-
-@@ -620,7 +620,7 @@ int vc4_hvs_get_fifo_from_output(struct
- u32 reg;
- int ret;
-
-- if (!vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_4)
- return output;
-
- /*
-@@ -701,7 +701,7 @@ static int vc4_hvs_init_channel(struct v
- dispctrl = SCALER_DISPCTRLX_ENABLE;
- dispbkgndx = HVS_READ(SCALER_DISPBKGNDX(chan));
-
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- dispctrl |= VC4_SET_FIELD(mode->hdisplay,
- SCALER_DISPCTRLX_WIDTH) |
- VC4_SET_FIELD(mode->vdisplay,
-@@ -732,7 +732,7 @@ static int vc4_hvs_init_channel(struct v
- /* Reload the LUT, since the SRAMs would have been disabled if
- * all CRTCs had SCALER_DISPBKGND_GAMMA unset at once.
- */
-- if (!vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_4)
- vc4_hvs_lut_load(hvs, vc4_crtc);
- else
- vc5_hvs_lut_load(hvs, vc4_crtc);
-@@ -782,7 +782,7 @@ static int vc4_hvs_gamma_check(struct dr
- struct drm_device *dev = crtc->dev;
- struct vc4_dev *vc4 = to_vc4_dev(dev);
-
-- if (!vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_4)
- return 0;
-
- if (!crtc_state->color_mgmt_changed)
-@@ -1036,7 +1036,7 @@ void vc4_hvs_atomic_flush(struct drm_crt
- u32 dispbkgndx = HVS_READ(SCALER_DISPBKGNDX(channel));
-
- if (crtc->state->gamma_lut) {
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- vc4_hvs_update_gamma_lut(hvs, vc4_crtc);
- dispbkgndx |= SCALER_DISPBKGND_GAMMA;
- } else {
-@@ -1053,7 +1053,7 @@ void vc4_hvs_atomic_flush(struct drm_crt
- * should already be disabling/enabling the pipeline
- * when gamma changes.
- */
-- if (!vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_4)
- dispbkgndx &= ~SCALER_DISPBKGND_GAMMA;
- }
- HVS_WRITE(SCALER_DISPBKGNDX(channel), dispbkgndx);
-@@ -1069,7 +1069,8 @@ void vc4_hvs_atomic_flush(struct drm_crt
-
- void vc4_hvs_mask_underrun(struct vc4_hvs *hvs, int channel)
- {
-- struct drm_device *drm = &hvs->vc4->base;
-+ struct vc4_dev *vc4 = hvs->vc4;
-+ struct drm_device *drm = &vc4->base;
- u32 dispctrl;
- int idx;
-
-@@ -1077,8 +1078,9 @@ void vc4_hvs_mask_underrun(struct vc4_hv
- return;
-
- dispctrl = HVS_READ(SCALER_DISPCTRL);
-- dispctrl &= ~(hvs->vc4->is_vc5 ? SCALER5_DISPCTRL_DSPEISLUR(channel) :
-- SCALER_DISPCTRL_DSPEISLUR(channel));
-+ dispctrl &= ~((vc4->gen == VC4_GEN_5) ?
-+ SCALER5_DISPCTRL_DSPEISLUR(channel) :
-+ SCALER_DISPCTRL_DSPEISLUR(channel));
-
- HVS_WRITE(SCALER_DISPCTRL, dispctrl);
-
-@@ -1087,7 +1089,8 @@ void vc4_hvs_mask_underrun(struct vc4_hv
-
- void vc4_hvs_unmask_underrun(struct vc4_hvs *hvs, int channel)
- {
-- struct drm_device *drm = &hvs->vc4->base;
-+ struct vc4_dev *vc4 = hvs->vc4;
-+ struct drm_device *drm = &vc4->base;
- u32 dispctrl;
- int idx;
-
-@@ -1095,8 +1098,9 @@ void vc4_hvs_unmask_underrun(struct vc4_
- return;
-
- dispctrl = HVS_READ(SCALER_DISPCTRL);
-- dispctrl |= (hvs->vc4->is_vc5 ? SCALER5_DISPCTRL_DSPEISLUR(channel) :
-- SCALER_DISPCTRL_DSPEISLUR(channel));
-+ dispctrl |= ((vc4->gen == VC4_GEN_5) ?
-+ SCALER5_DISPCTRL_DSPEISLUR(channel) :
-+ SCALER_DISPCTRL_DSPEISLUR(channel));
-
- HVS_WRITE(SCALER_DISPSTAT,
- SCALER_DISPSTAT_EUFLOW(channel));
-@@ -1139,8 +1143,10 @@ static irqreturn_t vc4_hvs_irq_handler(i
- control = HVS_READ(SCALER_DISPCTRL);
-
- for (channel = 0; channel < SCALER_CHANNELS_COUNT; channel++) {
-- dspeislur = vc4->is_vc5 ? SCALER5_DISPCTRL_DSPEISLUR(channel) :
-- SCALER_DISPCTRL_DSPEISLUR(channel);
-+ dspeislur = (vc4->gen == VC4_GEN_5) ?
-+ SCALER5_DISPCTRL_DSPEISLUR(channel) :
-+ SCALER_DISPCTRL_DSPEISLUR(channel);
-+
- /* Interrupt masking is not always honored, so check it here. */
- if (status & SCALER_DISPSTAT_EUFLOW(channel) &&
- control & dspeislur) {
-@@ -1177,7 +1183,7 @@ int vc4_hvs_debugfs_init(struct drm_mino
- if (!vc4->hvs)
- return -ENODEV;
-
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- debugfs_create_bool("hvs_load_tracker", S_IRUGO | S_IWUSR,
- minor->debugfs_root,
- &vc4->load_tracker_enabled);
-@@ -1235,7 +1241,7 @@ struct vc4_hvs *__vc4_hvs_alloc(struct v
- * between planes when they don't overlap on the screen, but
- * for now we just allocate globally.
- */
-- if (!vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_4)
- /* 48k words of 2x12-bit pixels */
- drm_mm_init(&hvs->lbm_mm, 0, 48 * 1024);
- else
-@@ -1269,7 +1275,7 @@ static int vc4_hvs_bind(struct device *d
- hvs->regset.regs = hvs_regs;
- hvs->regset.nregs = ARRAY_SIZE(hvs_regs);
-
-- if (vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_5) {
- struct rpi_firmware *firmware;
- struct device_node *node;
- unsigned int max_rate;
-@@ -1307,7 +1313,7 @@ static int vc4_hvs_bind(struct device *d
- }
- }
-
-- if (!vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_4)
- hvs->dlist = hvs->regs + SCALER_DLIST_START;
- else
- hvs->dlist = hvs->regs + SCALER5_DLIST_START;
-@@ -1348,7 +1354,7 @@ static int vc4_hvs_bind(struct device *d
- SCALER_DISPCTRL_DISPEIRQ(1) |
- SCALER_DISPCTRL_DISPEIRQ(2);
-
-- if (!vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_4)
- dispctrl &= ~(SCALER_DISPCTRL_DMAEIRQ |
- SCALER_DISPCTRL_SLVWREIRQ |
- SCALER_DISPCTRL_SLVRDEIRQ |
-@@ -1403,7 +1409,7 @@ static int vc4_hvs_bind(struct device *d
-
- /* Recompute Composite Output Buffer (COB) allocations for the displays
- */
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- /* The COB is 20736 pixels, or just over 10 lines at 2048 wide.
- * The bottom 2048 pixels are full 32bpp RGBA (intended for the
- * TXP composing RGBA to memory), whilst the remainder are only
---- a/drivers/gpu/drm/vc4/vc4_irq.c
-+++ b/drivers/gpu/drm/vc4/vc4_irq.c
-@@ -265,7 +265,7 @@ vc4_irq_enable(struct drm_device *dev)
- {
- struct vc4_dev *vc4 = to_vc4_dev(dev);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- if (!vc4->v3d)
-@@ -282,7 +282,7 @@ vc4_irq_disable(struct drm_device *dev)
- {
- struct vc4_dev *vc4 = to_vc4_dev(dev);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- if (!vc4->v3d)
-@@ -305,7 +305,7 @@ int vc4_irq_install(struct drm_device *d
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (irq == IRQ_NOTCONNECTED)
-@@ -326,7 +326,7 @@ void vc4_irq_uninstall(struct drm_device
- {
- struct vc4_dev *vc4 = to_vc4_dev(dev);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- vc4_irq_disable(dev);
-@@ -339,7 +339,7 @@ void vc4_irq_reset(struct drm_device *de
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- unsigned long irqflags;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- /* Acknowledge any stale IRQs. */
---- a/drivers/gpu/drm/vc4/vc4_kms.c
-+++ b/drivers/gpu/drm/vc4/vc4_kms.c
-@@ -378,7 +378,7 @@ static void vc4_atomic_commit_tail(struc
- old_hvs_state->fifo_state[channel].pending_commit = NULL;
- }
-
-- if (vc4->is_vc5 && !vc4->firmware_kms) {
-+ if (vc4->gen == VC4_GEN_5 && !vc4->firmware_kms) {
- unsigned long state_rate = max(old_hvs_state->core_clock_rate,
- new_hvs_state->core_clock_rate);
- unsigned long core_rate = clamp_t(unsigned long, state_rate,
-@@ -398,7 +398,7 @@ static void vc4_atomic_commit_tail(struc
- vc4_ctm_commit(vc4, state);
-
- if (!vc4->firmware_kms) {
-- if (vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_5)
- vc5_hvs_pv_muxing_commit(vc4, state);
- else
- vc4_hvs_pv_muxing_commit(vc4, state);
-@@ -417,7 +417,7 @@ static void vc4_atomic_commit_tail(struc
-
- drm_atomic_helper_cleanup_planes(dev, state);
-
-- if (vc4->is_vc5 && !vc4->firmware_kms) {
-+ if (vc4->gen == VC4_GEN_5 && !vc4->firmware_kms) {
- unsigned long core_rate = min_t(unsigned long,
- hvs->max_core_rate,
- new_hvs_state->core_clock_rate);
-@@ -482,7 +482,7 @@ static struct drm_framebuffer *vc4_fb_cr
- struct vc4_dev *vc4 = to_vc4_dev(dev);
- struct drm_mode_fb_cmd2 mode_cmd_local;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return ERR_PTR(-ENODEV);
-
- /* If the user didn't specify a modifier, use the
-@@ -1065,7 +1065,7 @@ int vc4_kms_load(struct drm_device *dev)
- * the BCM2711, but the load tracker computations are used for
- * the core clock rate calculation.
- */
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- /* Start with the load tracker enabled. Can be
- * disabled through the debugfs load_tracker file.
- */
-@@ -1081,7 +1081,7 @@ int vc4_kms_load(struct drm_device *dev)
- return ret;
- }
-
-- if (vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_5) {
- dev->mode_config.max_width = 7680;
- dev->mode_config.max_height = 7680;
- } else {
-@@ -1089,7 +1089,7 @@ int vc4_kms_load(struct drm_device *dev)
- dev->mode_config.max_height = 2048;
- }
-
-- dev->mode_config.funcs = vc4->is_vc5 ? &vc5_mode_funcs : &vc4_mode_funcs;
-+ dev->mode_config.funcs = (vc4->gen > VC4_GEN_4) ? &vc5_mode_funcs : &vc4_mode_funcs;
- dev->mode_config.helper_private = &vc4_mode_config_helpers;
- dev->mode_config.preferred_depth = 24;
- dev->mode_config.async_page_flip = true;
---- a/drivers/gpu/drm/vc4/vc4_perfmon.c
-+++ b/drivers/gpu/drm/vc4/vc4_perfmon.c
-@@ -23,7 +23,7 @@ void vc4_perfmon_get(struct vc4_perfmon
- return;
-
- vc4 = perfmon->dev;
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- refcount_inc(&perfmon->refcnt);
-@@ -37,7 +37,7 @@ void vc4_perfmon_put(struct vc4_perfmon
- return;
-
- vc4 = perfmon->dev;
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- if (refcount_dec_and_test(&perfmon->refcnt))
-@@ -49,7 +49,7 @@ void vc4_perfmon_start(struct vc4_dev *v
- unsigned int i;
- u32 mask;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- if (WARN_ON_ONCE(!perfmon || vc4->active_perfmon))
-@@ -69,7 +69,7 @@ void vc4_perfmon_stop(struct vc4_dev *vc
- {
- unsigned int i;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- if (WARN_ON_ONCE(!vc4->active_perfmon ||
-@@ -90,7 +90,7 @@ struct vc4_perfmon *vc4_perfmon_find(str
- struct vc4_dev *vc4 = vc4file->dev;
- struct vc4_perfmon *perfmon;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return NULL;
-
- mutex_lock(&vc4file->perfmon.lock);
-@@ -105,7 +105,7 @@ void vc4_perfmon_open_file(struct vc4_fi
- {
- struct vc4_dev *vc4 = vc4file->dev;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- mutex_init(&vc4file->perfmon.lock);
-@@ -126,7 +126,7 @@ void vc4_perfmon_close_file(struct vc4_f
- {
- struct vc4_dev *vc4 = vc4file->dev;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- mutex_lock(&vc4file->perfmon.lock);
-@@ -146,7 +146,7 @@ int vc4_perfmon_create_ioctl(struct drm_
- unsigned int i;
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (!vc4->v3d) {
-@@ -200,7 +200,7 @@ int vc4_perfmon_destroy_ioctl(struct drm
- struct drm_vc4_perfmon_destroy *req = data;
- struct vc4_perfmon *perfmon;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (!vc4->v3d) {
-@@ -228,7 +228,7 @@ int vc4_perfmon_get_values_ioctl(struct
- struct vc4_perfmon *perfmon;
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (!vc4->v3d) {
---- a/drivers/gpu/drm/vc4/vc4_plane.c
-+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -633,10 +633,10 @@ static u32 vc4_lbm_size(struct drm_plane
- }
-
- /* Align it to 64 or 128 (hvs5) bytes */
-- lbm = roundup(lbm, vc4->is_vc5 ? 128 : 64);
-+ lbm = roundup(lbm, vc4->gen == VC4_GEN_5 ? 128 : 64);
-
- /* Each "word" of the LBM memory contains 2 or 4 (hvs5) pixels */
-- lbm /= vc4->is_vc5 ? 4 : 2;
-+ lbm /= vc4->gen == VC4_GEN_5 ? 4 : 2;
-
- return lbm;
- }
-@@ -760,7 +760,7 @@ static int vc4_plane_allocate_lbm(struct
- ret = drm_mm_insert_node_generic(&vc4->hvs->lbm_mm,
- &vc4_state->lbm,
- lbm_size,
-- vc4->is_vc5 ? 64 : 32,
-+ vc4->gen == VC4_GEN_5 ? 64 : 32,
- 0, 0);
- spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags);
-
-@@ -1141,7 +1141,7 @@ static int vc4_plane_mode_set(struct drm
- mix_plane_alpha = state->alpha != DRM_BLEND_ALPHA_OPAQUE &&
- fb->format->has_alpha;
-
-- if (!vc4->is_vc5) {
-+ if (vc4->gen == VC4_GEN_4) {
- /* Control word */
- vc4_dlist_write(vc4_state,
- SCALER_CTL0_VALID |
-@@ -1714,7 +1714,7 @@ struct drm_plane *vc4_plane_init(struct
- };
-
- for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) {
-- if (!hvs_formats[i].hvs5_only || vc4->is_vc5) {
-+ if (!hvs_formats[i].hvs5_only || vc4->gen == VC4_GEN_5) {
- formats[num_formats] = hvs_formats[i].drm;
- num_formats++;
- }
-@@ -1729,7 +1729,7 @@ struct drm_plane *vc4_plane_init(struct
- return ERR_CAST(vc4_plane);
- plane = &vc4_plane->base;
-
-- if (vc4->is_vc5)
-+ if (vc4->gen == VC4_GEN_5)
- drm_plane_helper_add(plane, &vc5_plane_helper_funcs);
- else
- drm_plane_helper_add(plane, &vc4_plane_helper_funcs);
---- a/drivers/gpu/drm/vc4/vc4_render_cl.c
-+++ b/drivers/gpu/drm/vc4/vc4_render_cl.c
-@@ -599,7 +599,7 @@ int vc4_get_rcl(struct drm_device *dev,
- bool has_bin = args->bin_cl_size != 0;
- int ret;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- if (args->min_x_tile > args->max_x_tile ||
---- a/drivers/gpu/drm/vc4/vc4_v3d.c
-+++ b/drivers/gpu/drm/vc4/vc4_v3d.c
-@@ -127,7 +127,7 @@ static int vc4_v3d_debugfs_ident(struct
- int
- vc4_v3d_pm_get(struct vc4_dev *vc4)
- {
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- mutex_lock(&vc4->power_lock);
-@@ -148,7 +148,7 @@ vc4_v3d_pm_get(struct vc4_dev *vc4)
- void
- vc4_v3d_pm_put(struct vc4_dev *vc4)
- {
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- mutex_lock(&vc4->power_lock);
-@@ -178,7 +178,7 @@ int vc4_v3d_get_bin_slot(struct vc4_dev
- uint64_t seqno = 0;
- struct vc4_exec_info *exec;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- try_again:
-@@ -325,7 +325,7 @@ int vc4_v3d_bin_bo_get(struct vc4_dev *v
- {
- int ret = 0;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- mutex_lock(&vc4->bin_bo_lock);
-@@ -360,7 +360,7 @@ static void bin_bo_release(struct kref *
-
- void vc4_v3d_bin_bo_put(struct vc4_dev *vc4)
- {
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return;
-
- mutex_lock(&vc4->bin_bo_lock);
---- a/drivers/gpu/drm/vc4/vc4_validate.c
-+++ b/drivers/gpu/drm/vc4/vc4_validate.c
-@@ -109,7 +109,7 @@ vc4_use_bo(struct vc4_exec_info *exec, u
- struct drm_gem_dma_object *obj;
- struct vc4_bo *bo;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return NULL;
-
- if (hindex >= exec->bo_count) {
-@@ -169,7 +169,7 @@ vc4_check_tex_size(struct vc4_exec_info
- uint32_t utile_w = utile_width(cpp);
- uint32_t utile_h = utile_height(cpp);
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return false;
-
- /* The shaded vertex format stores signed 12.4 fixed point
-@@ -495,7 +495,7 @@ vc4_validate_bin_cl(struct drm_device *d
- uint32_t dst_offset = 0;
- uint32_t src_offset = 0;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- while (src_offset < len) {
-@@ -942,7 +942,7 @@ vc4_validate_shader_recs(struct drm_devi
- uint32_t i;
- int ret = 0;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return -ENODEV;
-
- for (i = 0; i < exec->shader_state_count; i++) {
---- a/drivers/gpu/drm/vc4/vc4_validate_shaders.c
-+++ b/drivers/gpu/drm/vc4/vc4_validate_shaders.c
-@@ -786,7 +786,7 @@ vc4_validate_shader(struct drm_gem_dma_o
- struct vc4_validated_shader_info *validated_shader = NULL;
- struct vc4_shader_validation_state validation_state;
-
-- if (WARN_ON_ONCE(vc4->is_vc5))
-+ if (WARN_ON_ONCE(vc4->gen == VC4_GEN_5))
- return NULL;
-
- memset(&validation_state, 0, sizeof(validation_state));