struct drm_plane *plane;
        int i;
 
+       if (!vc4->load_tracker_available)
+               return 0;
+
        priv_state = drm_atomic_get_private_obj_state(state,
                                                      &vc4->load_tracker);
        if (IS_ERR(priv_state))
        struct vc4_dev *vc4 = to_vc4_dev(dev);
        struct vc4_ctm_state *ctm_state;
        struct vc4_load_tracker_state *load_state;
+       bool is_vc5 = of_device_is_compatible(dev->dev->of_node,
+                                             "brcm,bcm2711-vc5");
        int ret;
 
-       /* Start with the load tracker enabled. Can be disabled through the
-        * debugfs load_tracker file.
-        */
-       vc4->load_tracker_enabled = true;
+       if (!is_vc5) {
+               vc4->load_tracker_available = true;
+
+               /* Start with the load tracker enabled. Can be
+                * disabled through the debugfs load_tracker file.
+                */
+               vc4->load_tracker_enabled = true;
+       }
 
        sema_init(&vc4->async_modeset, 1);
 
                return ret;
        }
 
-       dev->mode_config.max_width = 2048;
-       dev->mode_config.max_height = 2048;
+       if (is_vc5) {
+               dev->mode_config.max_width = 7680;
+               dev->mode_config.max_height = 7680;
+       } else {
+               dev->mode_config.max_width = 2048;
+               dev->mode_config.max_height = 2048;
+       }
+
        dev->mode_config.funcs = &vc4_mode_funcs;
        dev->mode_config.preferred_depth = 24;
        dev->mode_config.async_page_flip = true;
        drm_atomic_private_obj_init(dev, &vc4->ctm_manager, &ctm_state->base,
                                    &vc4_ctm_state_funcs);
 
-       load_state = kzalloc(sizeof(*load_state), GFP_KERNEL);
-       if (!load_state) {
-               drm_atomic_private_obj_fini(&vc4->ctm_manager);
-               return -ENOMEM;
-       }
+       if (vc4->load_tracker_available) {
+               load_state = kzalloc(sizeof(*load_state), GFP_KERNEL);
+               if (!load_state) {
+                       drm_atomic_private_obj_fini(&vc4->ctm_manager);
+                       return -ENOMEM;
+               }
 
-       drm_atomic_private_obj_init(dev, &vc4->load_tracker, &load_state->base,
-                                   &vc4_load_tracker_state_funcs);
+               drm_atomic_private_obj_init(dev, &vc4->load_tracker,
+                                           &load_state->base,
+                                           &vc4_load_tracker_state_funcs);
+       }
 
        drm_mode_config_reset(dev);