Skip to content

Commit

Permalink
drm/i915: Split wm sanitize from readout
Browse files Browse the repository at this point in the history
I'll need to move the wm readout to an earlier point in the
sequence (since the bw state readout will need ddb information
from the wm readout). But (at least for now) the wm sanitation
will need to stay put as it needs to also sanitize things for
any pipes/planes we disable later during the hw state takeover.

Reviewed-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250306163420.3961-16-ville.syrjala@linux.intel.com
  • Loading branch information
Ville Syrjälä committed Mar 7, 2025
1 parent 003ec4c commit dbf1b1e
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 18 deletions.
18 changes: 4 additions & 14 deletions drivers/gpu/drm/i915/display/i9xx_wm.c
Original file line number Diff line number Diff line change
Expand Up @@ -3902,12 +3902,6 @@ static void g4x_wm_sanitize(struct drm_i915_private *dev_priv)
mutex_unlock(&dev_priv->display.wm.wm_mutex);
}

static void g4x_wm_get_hw_state_and_sanitize(struct drm_i915_private *i915)
{
g4x_wm_get_hw_state(i915);
g4x_wm_sanitize(i915);
}

static void vlv_wm_get_hw_state(struct drm_i915_private *dev_priv)
{
struct vlv_wm_values *wm = &dev_priv->display.wm.vlv;
Expand Down Expand Up @@ -4055,12 +4049,6 @@ static void vlv_wm_sanitize(struct drm_i915_private *dev_priv)
mutex_unlock(&dev_priv->display.wm.wm_mutex);
}

static void vlv_wm_get_hw_state_and_sanitize(struct drm_i915_private *i915)
{
vlv_wm_get_hw_state(i915);
vlv_wm_sanitize(i915);
}

/*
* FIXME should probably kill this and improve
* the real watermark readout/sanitation instead
Expand Down Expand Up @@ -4122,14 +4110,16 @@ static const struct intel_wm_funcs vlv_wm_funcs = {
.initial_watermarks = vlv_initial_watermarks,
.optimize_watermarks = vlv_optimize_watermarks,
.atomic_update_watermarks = vlv_atomic_update_fifo,
.get_hw_state = vlv_wm_get_hw_state_and_sanitize,
.get_hw_state = vlv_wm_get_hw_state,
.sanitize = vlv_wm_sanitize,
};

static const struct intel_wm_funcs g4x_wm_funcs = {
.compute_watermarks = g4x_compute_watermarks,
.initial_watermarks = g4x_initial_watermarks,
.optimize_watermarks = g4x_optimize_watermarks,
.get_hw_state = g4x_wm_get_hw_state_and_sanitize,
.get_hw_state = g4x_wm_get_hw_state,
.sanitize = g4x_wm_sanitize,
};

static const struct intel_wm_funcs pnv_wm_funcs = {
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/i915/display/intel_display_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ struct intel_wm_funcs {
struct intel_crtc *crtc);
int (*compute_global_watermarks)(struct intel_atomic_state *state);
void (*get_hw_state)(struct drm_i915_private *i915);
void (*sanitize)(struct drm_i915_private *i915);
};

struct intel_audio_state {
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/i915/display/intel_modeset_setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -991,6 +991,7 @@ void intel_modeset_setup_hw_state(struct drm_i915_private *i915,
intel_dpll_sanitize_state(display);

intel_wm_get_hw_state(i915);
intel_wm_sanitize(i915);

for_each_intel_crtc(&i915->drm, crtc) {
struct intel_crtc_state *crtc_state =
Expand Down
6 changes: 6 additions & 0 deletions drivers/gpu/drm/i915/display/intel_wm.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,12 @@ void intel_wm_get_hw_state(struct drm_i915_private *i915)
return i915->display.funcs.wm->get_hw_state(i915);
}

void intel_wm_sanitize(struct drm_i915_private *i915)
{
if (i915->display.funcs.wm->sanitize)
return i915->display.funcs.wm->sanitize(i915);
}

bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
const struct intel_plane_state *plane_state)
{
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/i915/display/intel_wm.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ void intel_optimize_watermarks(struct intel_atomic_state *state,
struct intel_crtc *crtc);
int intel_compute_global_watermarks(struct intel_atomic_state *state);
void intel_wm_get_hw_state(struct drm_i915_private *i915);
void intel_wm_sanitize(struct drm_i915_private *i915);
bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
const struct intel_plane_state *plane_state);
void intel_print_wm_latency(struct drm_i915_private *i915,
Expand Down
7 changes: 3 additions & 4 deletions drivers/gpu/drm/i915/display/skl_watermark.c
Original file line number Diff line number Diff line change
Expand Up @@ -3837,10 +3837,8 @@ static void skl_dbuf_sanitize(struct drm_i915_private *i915)
}
}

static void skl_wm_get_hw_state_and_sanitize(struct drm_i915_private *i915)
static void skl_wm_sanitize(struct drm_i915_private *i915)
{
skl_wm_get_hw_state(i915);

skl_mbus_sanitize(i915);
skl_dbuf_sanitize(i915);
}
Expand Down Expand Up @@ -4016,7 +4014,8 @@ void intel_wm_state_verify(struct intel_atomic_state *state,

static const struct intel_wm_funcs skl_wm_funcs = {
.compute_global_watermarks = skl_compute_wm,
.get_hw_state = skl_wm_get_hw_state_and_sanitize,
.get_hw_state = skl_wm_get_hw_state,
.sanitize = skl_wm_sanitize,
};

void skl_wm_init(struct drm_i915_private *i915)
Expand Down

0 comments on commit dbf1b1e

Please sign in to comment.