Commit 15133582 authored by Jani Nikula's avatar Jani Nikula
Browse files

drm/i915/display: convert global state to struct intel_display



Going forward, struct intel_display is the main display device
structure. Convert intel_global_state.[ch] to it.

This allows us to make intel_pmdemand.c completely independent of
i915_drv.h.

Cc: Gustavo Sousa <gustavo.sousa@intel.com>
Reviewed-by: default avatarGustavo Sousa <gustavo.sousa@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/2b5e743b285a86a59ee87085727847c758c8d552.1735662324.git.jani.nikula@intel.com


Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 445fc685
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1447,13 +1447,14 @@ static const struct intel_global_state_funcs intel_bw_funcs = {

int intel_bw_init(struct drm_i915_private *i915)
{
	struct intel_display *display = &i915->display;
	struct intel_bw_state *state;

	state = kzalloc(sizeof(*state), GFP_KERNEL);
	if (!state)
		return -ENOMEM;

	intel_atomic_global_obj_init(i915, &i915->display.bw.obj,
	intel_atomic_global_obj_init(display, &display->bw.obj,
				     &state->base, &intel_bw_funcs);

	/*
+1 −2
Original line number Diff line number Diff line
@@ -3217,14 +3217,13 @@ int intel_cdclk_state_set_joined_mbus(struct intel_atomic_state *state, bool joi

int intel_cdclk_init(struct intel_display *display)
{
	struct drm_i915_private *dev_priv = to_i915(display->drm);
	struct intel_cdclk_state *cdclk_state;

	cdclk_state = kzalloc(sizeof(*cdclk_state), GFP_KERNEL);
	if (!cdclk_state)
		return -ENOMEM;

	intel_atomic_global_obj_init(dev_priv, &display->cdclk.obj,
	intel_atomic_global_obj_init(display, &display->cdclk.obj,
				     &cdclk_state->base, &intel_cdclk_funcs);

	return 0;
+1 −3
Original line number Diff line number Diff line
@@ -163,9 +163,7 @@ static void intel_mode_config_init(struct intel_display *display)

static void intel_mode_config_cleanup(struct intel_display *display)
{
	struct drm_i915_private *i915 = to_i915(display->drm);

	intel_atomic_global_obj_cleanup(i915);
	intel_atomic_global_obj_cleanup(display);
	drm_mode_config_cleanup(display->drm);
}

+21 −21
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ intel_atomic_global_state_get(struct intel_global_state *obj_state)
	return obj_state;
}

void intel_atomic_global_obj_init(struct drm_i915_private *dev_priv,
void intel_atomic_global_obj_init(struct intel_display *display,
				  struct intel_global_obj *obj,
				  struct intel_global_state *state,
				  const struct intel_global_state_funcs *funcs)
@@ -88,26 +88,26 @@ void intel_atomic_global_obj_init(struct drm_i915_private *dev_priv,

	obj->state = state;
	obj->funcs = funcs;
	list_add_tail(&obj->head, &dev_priv->display.global.obj_list);
	list_add_tail(&obj->head, &display->global.obj_list);
}

void intel_atomic_global_obj_cleanup(struct drm_i915_private *dev_priv)
void intel_atomic_global_obj_cleanup(struct intel_display *display)
{
	struct intel_global_obj *obj, *next;

	list_for_each_entry_safe(obj, next, &dev_priv->display.global.obj_list, head) {
	list_for_each_entry_safe(obj, next, &display->global.obj_list, head) {
		list_del(&obj->head);

		drm_WARN_ON(&dev_priv->drm, kref_read(&obj->state->ref) != 1);
		drm_WARN_ON(display->drm, kref_read(&obj->state->ref) != 1);
		intel_atomic_global_state_put(obj->state);
	}
}

static void assert_global_state_write_locked(struct drm_i915_private *dev_priv)
static void assert_global_state_write_locked(struct intel_display *display)
{
	struct intel_crtc *crtc;

	for_each_intel_crtc(&dev_priv->drm, crtc)
	for_each_intel_crtc(display->drm, crtc)
		drm_modeset_lock_assert_held(&crtc->base.mutex);
}

@@ -126,23 +126,23 @@ static bool modeset_lock_is_held(struct drm_modeset_acquire_ctx *ctx,

static void assert_global_state_read_locked(struct intel_atomic_state *state)
{
	struct intel_display *display = to_intel_display(state);
	struct drm_modeset_acquire_ctx *ctx = state->base.acquire_ctx;
	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
	struct intel_crtc *crtc;

	for_each_intel_crtc(&dev_priv->drm, crtc) {
	for_each_intel_crtc(display->drm, crtc) {
		if (modeset_lock_is_held(ctx, &crtc->base.mutex))
			return;
	}

	drm_WARN(&dev_priv->drm, 1, "Global state not read locked\n");
	drm_WARN(display->drm, 1, "Global state not read locked\n");
}

struct intel_global_state *
intel_atomic_get_global_obj_state(struct intel_atomic_state *state,
				  struct intel_global_obj *obj)
{
	struct drm_i915_private *i915 = to_i915(state->base.dev);
	struct intel_display *display = to_intel_display(state);
	int index, num_objs, i;
	size_t size;
	struct __intel_global_objs_state *arr;
@@ -184,7 +184,7 @@ intel_atomic_get_global_obj_state(struct intel_atomic_state *state,

	state->num_global_objs = num_objs;

	drm_dbg_atomic(&i915->drm, "Added new global object %p state %p to %p\n",
	drm_dbg_atomic(display->drm, "Added new global object %p state %p to %p\n",
		       obj, obj_state, state);

	return obj_state;
@@ -218,14 +218,14 @@ intel_atomic_get_new_global_obj_state(struct intel_atomic_state *state,

void intel_atomic_swap_global_state(struct intel_atomic_state *state)
{
	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
	struct intel_display *display = to_intel_display(state);
	struct intel_global_state *old_obj_state, *new_obj_state;
	struct intel_global_obj *obj;
	int i;

	for_each_oldnew_global_obj_in_state(state, obj, old_obj_state,
					    new_obj_state, i) {
		drm_WARN_ON(&dev_priv->drm, obj->state != old_obj_state);
		drm_WARN_ON(display->drm, obj->state != old_obj_state);

		/*
		 * If the new state wasn't modified (and properly
@@ -234,7 +234,7 @@ void intel_atomic_swap_global_state(struct intel_atomic_state *state)
		if (!new_obj_state->changed)
			continue;

		assert_global_state_write_locked(dev_priv);
		assert_global_state_write_locked(display);

		old_obj_state->state = state;
		new_obj_state->state = NULL;
@@ -265,10 +265,10 @@ void intel_atomic_clear_global_state(struct intel_atomic_state *state)
int intel_atomic_lock_global_state(struct intel_global_state *obj_state)
{
	struct intel_atomic_state *state = obj_state->state;
	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
	struct intel_display *display = to_intel_display(state);
	struct intel_crtc *crtc;

	for_each_intel_crtc(&dev_priv->drm, crtc) {
	for_each_intel_crtc(display->drm, crtc) {
		int ret;

		ret = drm_modeset_lock(&crtc->base.mutex,
@@ -298,10 +298,10 @@ int intel_atomic_serialize_global_state(struct intel_global_state *obj_state)
bool
intel_atomic_global_state_is_serialized(struct intel_atomic_state *state)
{
	struct drm_i915_private *i915 = to_i915(state->base.dev);
	struct intel_display *display = to_intel_display(state);
	struct intel_crtc *crtc;

	for_each_intel_crtc(&i915->drm, crtc)
	for_each_intel_crtc(display->drm, crtc)
		if (!intel_atomic_get_new_crtc_state(state, crtc))
			return false;
	return true;
@@ -344,7 +344,7 @@ intel_atomic_global_state_setup_commit(struct intel_atomic_state *state)
int
intel_atomic_global_state_wait_for_dependencies(struct intel_atomic_state *state)
{
	struct drm_i915_private *i915 = to_i915(state->base.dev);
	struct intel_display *display = to_intel_display(state);
	const struct intel_global_state *old_obj_state;
	struct intel_global_obj *obj;
	int i;
@@ -358,7 +358,7 @@ intel_atomic_global_state_wait_for_dependencies(struct intel_atomic_state *state

		ret = wait_for_completion_timeout(&commit->done, 10 * HZ);
		if (ret == 0) {
			drm_err(&i915->drm, "global state timed out\n");
			drm_err(display->drm, "global state timed out\n");
			return -ETIMEDOUT;
		}
	}
+3 −3
Original line number Diff line number Diff line
@@ -9,8 +9,8 @@
#include <linux/kref.h>
#include <linux/list.h>

struct drm_i915_private;
struct intel_atomic_state;
struct intel_display;
struct intel_global_obj;
struct intel_global_state;

@@ -69,11 +69,11 @@ struct __intel_global_objs_state {
	struct intel_global_state *state, *old_state, *new_state;
};

void intel_atomic_global_obj_init(struct drm_i915_private *dev_priv,
void intel_atomic_global_obj_init(struct intel_display *display,
				  struct intel_global_obj *obj,
				  struct intel_global_state *state,
				  const struct intel_global_state_funcs *funcs);
void intel_atomic_global_obj_cleanup(struct drm_i915_private *dev_priv);
void intel_atomic_global_obj_cleanup(struct intel_display *display);

struct intel_global_state *
intel_atomic_get_global_obj_state(struct intel_atomic_state *state,
Loading