diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
index 26fa94329eda..f48b5c74cc3b 100644
--- a/drivers/gpu/drm/i915/display/intel_bw.c
+++ b/drivers/gpu/drm/i915/display/intel_bw.c
@@ -373,7 +373,33 @@ static unsigned int intel_bw_data_rate(struct drm_i915_private *dev_priv,
 	return data_rate;
 }
 
-static struct intel_bw_state *
+struct intel_bw_state *
+intel_atomic_get_old_bw_state(struct intel_atomic_state *state)
+{
+	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
+	struct intel_global_state *bw_state;
+
+	bw_state = intel_atomic_get_old_global_obj_state(state, &dev_priv->bw_obj);
+	if (IS_ERR(bw_state))
+		return ERR_CAST(bw_state);
+
+	return to_intel_bw_state(bw_state);
+}
+
+struct intel_bw_state *
+intel_atomic_get_new_bw_state(struct intel_atomic_state *state)
+{
+	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
+	struct intel_global_state *bw_state;
+	bw_state = intel_atomic_get_new_global_obj_state(state, &dev_priv->bw_obj);
+
+	if (IS_ERR(bw_state))
+		return ERR_CAST(bw_state);
+
+	return to_intel_bw_state(bw_state);
+}
+
+struct intel_bw_state *
 intel_atomic_get_bw_state(struct intel_atomic_state *state)
 {
 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
index a8aa7624c5aa..ac004d6f4276 100644
--- a/drivers/gpu/drm/i915/display/intel_bw.h
+++ b/drivers/gpu/drm/i915/display/intel_bw.h
@@ -24,6 +24,15 @@ struct intel_bw_state {
 
 #define to_intel_bw_state(x) container_of((x), struct intel_bw_state, base)
 
+struct intel_bw_state *
+intel_atomic_get_old_bw_state(struct intel_atomic_state *state);
+
+struct intel_bw_state *
+intel_atomic_get_new_bw_state(struct intel_atomic_state *state);
+
+struct intel_bw_state *
+intel_atomic_get_bw_state(struct intel_atomic_state *state);
+
 void intel_bw_init_hw(struct drm_i915_private *dev_priv);
 int intel_bw_init(struct drm_i915_private *dev_priv);
 int intel_bw_atomic_check(struct intel_atomic_state *state);
diff --git a/drivers/gpu/drm/i915/display/intel_global_state.c b/drivers/gpu/drm/i915/display/intel_global_state.c
index a0cc894c3868..89e85048329f 100644
--- a/drivers/gpu/drm/i915/display/intel_global_state.c
+++ b/drivers/gpu/drm/i915/display/intel_global_state.c
@@ -67,19 +67,15 @@ static void assert_global_state_read_locked(struct intel_atomic_state *state)
 	WARN(1, "Global state not read locked\n");
 }
 
-struct intel_global_state *
-intel_atomic_get_global_obj_state(struct intel_atomic_state *state,
+static struct intel_global_state *
+_intel_atomic_init_global_obj_state(struct intel_atomic_state *state,
 				  struct intel_global_obj *obj)
 {
-	int index, num_objs, i;
+	int index, num_objs;
 	size_t size;
 	struct __intel_global_objs_state *arr;
 	struct intel_global_state *obj_state;
 
-	for (i = 0; i < state->num_global_objs; i++)
-		if (obj == state->global_objs[i].ptr)
-			return state->global_objs[i].state;
-
 	assert_global_state_read_locked(state);
 
 	num_objs = state->num_global_objs + 1;
@@ -112,6 +108,20 @@ intel_atomic_get_global_obj_state(struct intel_atomic_state *state,
 	return obj_state;
 }
 
+
+struct intel_global_state *
+intel_atomic_get_global_obj_state(struct intel_atomic_state *state,
+				  struct intel_global_obj *obj)
+{
+	int i;
+
+	for (i = 0; i < state->num_global_objs; i++)
+		if (obj == state->global_objs[i].ptr)
+			return state->global_objs[i].state;
+
+	return _intel_atomic_init_global_obj_state(state, obj);
+}
+
 struct intel_global_state *
 intel_atomic_get_old_global_obj_state(struct intel_atomic_state *state,
 				      struct intel_global_obj *obj)
@@ -122,7 +132,9 @@ intel_atomic_get_old_global_obj_state(struct intel_atomic_state *state,
 		if (obj == state->global_objs[i].ptr)
 			return state->global_objs[i].old_state;
 
-	return NULL;
+	_intel_atomic_init_global_obj_state(state, obj);
+
+	return obj->state;
 }
 
 struct intel_global_state *
@@ -135,7 +147,7 @@ intel_atomic_get_new_global_obj_state(struct intel_atomic_state *state,
 		if (obj == state->global_objs[i].ptr)
 			return state->global_objs[i].new_state;
 
-	return NULL;
+	return _intel_atomic_init_global_obj_state(state, obj);
 }
 
 void intel_atomic_swap_global_state(struct intel_atomic_state *state)
