diff options
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.patch | 1029 |
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)); |