|
@@ -1530,7 +1530,7 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
|
|
|
|
|
|
if (IS_I945GM(dev))
|
|
|
wm_info = &i945_wm_info;
|
|
|
- else if (!IS_GEN2(dev))
|
|
|
+ else if (!IS_GEN2(dev_priv))
|
|
|
wm_info = &i915_wm_info;
|
|
|
else
|
|
|
wm_info = &i830_a_wm_info;
|
|
@@ -1540,7 +1540,7 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
|
|
|
if (intel_crtc_active(crtc)) {
|
|
|
const struct drm_display_mode *adjusted_mode;
|
|
|
int cpp = drm_format_plane_cpp(crtc->primary->state->fb->pixel_format, 0);
|
|
|
- if (IS_GEN2(dev))
|
|
|
+ if (IS_GEN2(dev_priv))
|
|
|
cpp = 4;
|
|
|
|
|
|
adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode;
|
|
@@ -1554,7 +1554,7 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
|
|
|
planea_wm = wm_info->max_wm;
|
|
|
}
|
|
|
|
|
|
- if (IS_GEN2(dev))
|
|
|
+ if (IS_GEN2(dev_priv))
|
|
|
wm_info = &i830_bc_wm_info;
|
|
|
|
|
|
fifo_size = dev_priv->display.get_fifo_size(dev, 1);
|
|
@@ -1562,7 +1562,7 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
|
|
|
if (intel_crtc_active(crtc)) {
|
|
|
const struct drm_display_mode *adjusted_mode;
|
|
|
int cpp = drm_format_plane_cpp(crtc->primary->state->fb->pixel_format, 0);
|
|
|
- if (IS_GEN2(dev))
|
|
|
+ if (IS_GEN2(dev_priv))
|
|
|
cpp = 4;
|
|
|
|
|
|
adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode;
|
|
@@ -2082,10 +2082,10 @@ static void intel_read_wm_latency(struct drm_device *dev, uint16_t wm[8])
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
|
|
|
|
|
- if (IS_GEN9(dev)) {
|
|
|
+ if (IS_GEN9(dev_priv)) {
|
|
|
uint32_t val;
|
|
|
int ret, i;
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv);
|
|
|
|
|
|
/* read the first set of memory latencies[0:3] */
|
|
|
val = 0; /* data0 to be programmed to 0 for first set */
|
|
@@ -2184,10 +2184,11 @@ static void intel_read_wm_latency(struct drm_device *dev, uint16_t wm[8])
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void intel_fixup_spr_wm_latency(struct drm_device *dev, uint16_t wm[5])
|
|
|
+static void intel_fixup_spr_wm_latency(struct drm_i915_private *dev_priv,
|
|
|
+ uint16_t wm[5])
|
|
|
{
|
|
|
/* ILK sprite LP0 latency is 1300 ns */
|
|
|
- if (IS_GEN5(dev))
|
|
|
+ if (IS_GEN5(dev_priv))
|
|
|
wm[0] = 13;
|
|
|
}
|
|
|
|
|
@@ -2203,10 +2204,8 @@ static void intel_fixup_cur_wm_latency(struct drm_i915_private *dev_priv,
|
|
|
wm[3] *= 2;
|
|
|
}
|
|
|
|
|
|
-int ilk_wm_max_level(const struct drm_device *dev)
|
|
|
+int ilk_wm_max_level(const struct drm_i915_private *dev_priv)
|
|
|
{
|
|
|
- struct drm_i915_private *dev_priv = to_i915(dev);
|
|
|
-
|
|
|
/* how many WM levels are we expecting */
|
|
|
if (INTEL_GEN(dev_priv) >= 9)
|
|
|
return 7;
|
|
@@ -2218,11 +2217,11 @@ int ilk_wm_max_level(const struct drm_device *dev)
|
|
|
return 2;
|
|
|
}
|
|
|
|
|
|
-static void intel_print_wm_latency(struct drm_device *dev,
|
|
|
+static void intel_print_wm_latency(struct drm_i915_private *dev_priv,
|
|
|
const char *name,
|
|
|
const uint16_t wm[8])
|
|
|
{
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv);
|
|
|
|
|
|
for (level = 0; level <= max_level; level++) {
|
|
|
unsigned int latency = wm[level];
|
|
@@ -2237,7 +2236,7 @@ static void intel_print_wm_latency(struct drm_device *dev,
|
|
|
* - latencies are in us on gen9.
|
|
|
* - before then, WM1+ latency values are in 0.5us units
|
|
|
*/
|
|
|
- if (IS_GEN9(dev))
|
|
|
+ if (IS_GEN9(dev_priv))
|
|
|
latency *= 10;
|
|
|
else if (level > 0)
|
|
|
latency *= 5;
|
|
@@ -2251,7 +2250,7 @@ static void intel_print_wm_latency(struct drm_device *dev,
|
|
|
static bool ilk_increase_wm_latency(struct drm_i915_private *dev_priv,
|
|
|
uint16_t wm[5], uint16_t min)
|
|
|
{
|
|
|
- int level, max_level = ilk_wm_max_level(&dev_priv->drm);
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv);
|
|
|
|
|
|
if (wm[0] >= min)
|
|
|
return false;
|
|
@@ -2280,9 +2279,9 @@ static void snb_wm_latency_quirk(struct drm_device *dev)
|
|
|
return;
|
|
|
|
|
|
DRM_DEBUG_KMS("WM latency values increased to avoid potential underruns\n");
|
|
|
- intel_print_wm_latency(dev, "Primary", dev_priv->wm.pri_latency);
|
|
|
- intel_print_wm_latency(dev, "Sprite", dev_priv->wm.spr_latency);
|
|
|
- intel_print_wm_latency(dev, "Cursor", dev_priv->wm.cur_latency);
|
|
|
+ intel_print_wm_latency(dev_priv, "Primary", dev_priv->wm.pri_latency);
|
|
|
+ intel_print_wm_latency(dev_priv, "Sprite", dev_priv->wm.spr_latency);
|
|
|
+ intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency);
|
|
|
}
|
|
|
|
|
|
static void ilk_setup_wm_latency(struct drm_device *dev)
|
|
@@ -2296,14 +2295,14 @@ static void ilk_setup_wm_latency(struct drm_device *dev)
|
|
|
memcpy(dev_priv->wm.cur_latency, dev_priv->wm.pri_latency,
|
|
|
sizeof(dev_priv->wm.pri_latency));
|
|
|
|
|
|
- intel_fixup_spr_wm_latency(dev, dev_priv->wm.spr_latency);
|
|
|
+ intel_fixup_spr_wm_latency(dev_priv, dev_priv->wm.spr_latency);
|
|
|
intel_fixup_cur_wm_latency(dev_priv, dev_priv->wm.cur_latency);
|
|
|
|
|
|
- intel_print_wm_latency(dev, "Primary", dev_priv->wm.pri_latency);
|
|
|
- intel_print_wm_latency(dev, "Sprite", dev_priv->wm.spr_latency);
|
|
|
- intel_print_wm_latency(dev, "Cursor", dev_priv->wm.cur_latency);
|
|
|
+ intel_print_wm_latency(dev_priv, "Primary", dev_priv->wm.pri_latency);
|
|
|
+ intel_print_wm_latency(dev_priv, "Sprite", dev_priv->wm.spr_latency);
|
|
|
+ intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency);
|
|
|
|
|
|
- if (IS_GEN6(dev))
|
|
|
+ if (IS_GEN6(dev_priv))
|
|
|
snb_wm_latency_quirk(dev);
|
|
|
}
|
|
|
|
|
@@ -2312,7 +2311,7 @@ static void skl_setup_wm_latency(struct drm_device *dev)
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
|
|
|
|
|
intel_read_wm_latency(dev, dev_priv->wm.skl_latency);
|
|
|
- intel_print_wm_latency(dev, "Gen9 Plane", dev_priv->wm.skl_latency);
|
|
|
+ intel_print_wm_latency(dev_priv, "Gen9 Plane", dev_priv->wm.skl_latency);
|
|
|
}
|
|
|
|
|
|
static bool ilk_validate_pipe_wm(struct drm_device *dev,
|
|
@@ -2350,7 +2349,7 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate)
|
|
|
struct intel_plane_state *pristate = NULL;
|
|
|
struct intel_plane_state *sprstate = NULL;
|
|
|
struct intel_plane_state *curstate = NULL;
|
|
|
- int level, max_level = ilk_wm_max_level(dev), usable_level;
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv), usable_level;
|
|
|
struct ilk_wm_maximums max;
|
|
|
|
|
|
pipe_wm = &cstate->wm.ilk.optimal;
|
|
@@ -2437,7 +2436,7 @@ static int ilk_compute_intermediate_wm(struct drm_device *dev,
|
|
|
{
|
|
|
struct intel_pipe_wm *a = &newstate->wm.ilk.intermediate;
|
|
|
struct intel_pipe_wm *b = &intel_crtc->wm.active.ilk;
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(to_i915(dev));
|
|
|
|
|
|
/*
|
|
|
* Start with the final, target watermarks, then combine with the
|
|
@@ -2521,7 +2520,7 @@ static void ilk_wm_merge(struct drm_device *dev,
|
|
|
struct intel_pipe_wm *merged)
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv);
|
|
|
int last_enabled_level = max_level;
|
|
|
|
|
|
/* ILK/SNB/IVB: LP1+ watermarks only w/ single pipe */
|
|
@@ -2561,7 +2560,7 @@ static void ilk_wm_merge(struct drm_device *dev,
|
|
|
* What we should check here is whether FBC can be
|
|
|
* enabled sometime later.
|
|
|
*/
|
|
|
- if (IS_GEN5(dev) && !merged->fbc_wm_enabled &&
|
|
|
+ if (IS_GEN5(dev_priv) && !merged->fbc_wm_enabled &&
|
|
|
intel_fbc_is_active(dev_priv)) {
|
|
|
for (level = 2; level <= max_level; level++) {
|
|
|
struct intel_wm_level *wm = &merged->wm[level];
|
|
@@ -2661,7 +2660,7 @@ static struct intel_pipe_wm *ilk_find_best_result(struct drm_device *dev,
|
|
|
struct intel_pipe_wm *r1,
|
|
|
struct intel_pipe_wm *r2)
|
|
|
{
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(to_i915(dev));
|
|
|
int level1 = 0, level2 = 0;
|
|
|
|
|
|
for (level = 1; level <= max_level; level++) {
|
|
@@ -3035,7 +3034,7 @@ bool intel_can_enable_sagv(struct drm_atomic_state *state)
|
|
|
continue;
|
|
|
|
|
|
/* Find the highest enabled wm level for this plane */
|
|
|
- for (level = ilk_wm_max_level(dev);
|
|
|
+ for (level = ilk_wm_max_level(dev_priv);
|
|
|
intel_state->wm_results.plane[pipe][plane][level] == 0; --level)
|
|
|
{ }
|
|
|
|
|
@@ -3778,7 +3777,7 @@ static int skl_build_pipe_wm(struct intel_crtc_state *cstate,
|
|
|
{
|
|
|
struct drm_device *dev = cstate->base.crtc->dev;
|
|
|
const struct drm_i915_private *dev_priv = to_i915(dev);
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv);
|
|
|
int ret;
|
|
|
|
|
|
for (level = 0; level <= max_level; level++) {
|
|
@@ -3799,7 +3798,7 @@ static void skl_compute_wm_results(struct drm_device *dev,
|
|
|
struct skl_wm_values *r,
|
|
|
struct intel_crtc *intel_crtc)
|
|
|
{
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(to_i915(dev));
|
|
|
enum pipe pipe = intel_crtc->pipe;
|
|
|
uint32_t temp;
|
|
|
int i;
|
|
@@ -3868,7 +3867,7 @@ void skl_write_plane_wm(struct intel_crtc *intel_crtc,
|
|
|
struct drm_crtc *crtc = &intel_crtc->base;
|
|
|
struct drm_device *dev = crtc->dev;
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv);
|
|
|
enum pipe pipe = intel_crtc->pipe;
|
|
|
|
|
|
for (level = 0; level <= max_level; level++) {
|
|
@@ -3889,7 +3888,7 @@ void skl_write_cursor_wm(struct intel_crtc *intel_crtc,
|
|
|
struct drm_crtc *crtc = &intel_crtc->base;
|
|
|
struct drm_device *dev = crtc->dev;
|
|
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv);
|
|
|
enum pipe pipe = intel_crtc->pipe;
|
|
|
|
|
|
for (level = 0; level <= max_level; level++) {
|
|
@@ -4339,7 +4338,7 @@ static void skl_pipe_wm_get_hw_state(struct drm_crtc *crtc)
|
|
|
int level, i, max_level;
|
|
|
uint32_t temp;
|
|
|
|
|
|
- max_level = ilk_wm_max_level(dev);
|
|
|
+ max_level = ilk_wm_max_level(dev_priv);
|
|
|
|
|
|
hw->wm_linetime[pipe] = I915_READ(PIPE_WM_LINETIME(pipe));
|
|
|
|
|
@@ -4439,7 +4438,7 @@ static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc)
|
|
|
active->wm[0].cur_val = tmp & WM0_PIPE_CURSOR_MASK;
|
|
|
active->linetime = hw->wm_linetime[pipe];
|
|
|
} else {
|
|
|
- int level, max_level = ilk_wm_max_level(dev);
|
|
|
+ int level, max_level = ilk_wm_max_level(dev_priv);
|
|
|
|
|
|
/*
|
|
|
* For inactive pipes, all watermark levels
|
|
@@ -7742,7 +7741,7 @@ void intel_init_pm(struct drm_device *dev)
|
|
|
/* For cxsr */
|
|
|
if (IS_PINEVIEW(dev))
|
|
|
i915_pineview_get_mem_freq(dev);
|
|
|
- else if (IS_GEN5(dev))
|
|
|
+ else if (IS_GEN5(dev_priv))
|
|
|
i915_ironlake_get_mem_freq(dev);
|
|
|
|
|
|
/* For FIFO watermark updates */
|
|
@@ -7753,9 +7752,9 @@ void intel_init_pm(struct drm_device *dev)
|
|
|
} else if (HAS_PCH_SPLIT(dev_priv)) {
|
|
|
ilk_setup_wm_latency(dev);
|
|
|
|
|
|
- if ((IS_GEN5(dev) && dev_priv->wm.pri_latency[1] &&
|
|
|
+ if ((IS_GEN5(dev_priv) && dev_priv->wm.pri_latency[1] &&
|
|
|
dev_priv->wm.spr_latency[1] && dev_priv->wm.cur_latency[1]) ||
|
|
|
- (!IS_GEN5(dev) && dev_priv->wm.pri_latency[0] &&
|
|
|
+ (!IS_GEN5(dev_priv) && dev_priv->wm.pri_latency[0] &&
|
|
|
dev_priv->wm.spr_latency[0] && dev_priv->wm.cur_latency[0])) {
|
|
|
dev_priv->display.compute_pipe_wm = ilk_compute_pipe_wm;
|
|
|
dev_priv->display.compute_intermediate_wm =
|
|
@@ -7791,12 +7790,12 @@ void intel_init_pm(struct drm_device *dev)
|
|
|
dev_priv->display.update_wm = pineview_update_wm;
|
|
|
} else if (IS_G4X(dev_priv)) {
|
|
|
dev_priv->display.update_wm = g4x_update_wm;
|
|
|
- } else if (IS_GEN4(dev)) {
|
|
|
+ } else if (IS_GEN4(dev_priv)) {
|
|
|
dev_priv->display.update_wm = i965_update_wm;
|
|
|
- } else if (IS_GEN3(dev)) {
|
|
|
+ } else if (IS_GEN3(dev_priv)) {
|
|
|
dev_priv->display.update_wm = i9xx_update_wm;
|
|
|
dev_priv->display.get_fifo_size = i9xx_get_fifo_size;
|
|
|
- } else if (IS_GEN2(dev)) {
|
|
|
+ } else if (IS_GEN2(dev_priv)) {
|
|
|
if (INTEL_INFO(dev)->num_pipes == 1) {
|
|
|
dev_priv->display.update_wm = i845_update_wm;
|
|
|
dev_priv->display.get_fifo_size = i845_get_fifo_size;
|