mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-04 07:06:45 +07:00
drm/i915: Pass crtc to intel_update_watermarks()
Passing the appropriate crtc to intel_update_watermarks() should help in avoiding needless work in the future. v2: Avoid clash with internal 'crtc' variable in some wm functions Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
da66146425
commit
46ba614c00
@ -361,7 +361,7 @@ struct drm_i915_display_funcs {
|
|||||||
int target, int refclk,
|
int target, int refclk,
|
||||||
struct dpll *match_clock,
|
struct dpll *match_clock,
|
||||||
struct dpll *best_clock);
|
struct dpll *best_clock);
|
||||||
void (*update_wm)(struct drm_device *dev);
|
void (*update_wm)(struct drm_crtc *crtc);
|
||||||
void (*update_sprite_wm)(struct drm_plane *plane,
|
void (*update_sprite_wm)(struct drm_plane *plane,
|
||||||
struct drm_crtc *crtc,
|
struct drm_crtc *crtc,
|
||||||
uint32_t sprite_width, int pixel_size,
|
uint32_t sprite_width, int pixel_size,
|
||||||
|
@ -3262,7 +3262,7 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
|
|||||||
intel_set_cpu_fifo_underrun_reporting(dev, pipe, true);
|
intel_set_cpu_fifo_underrun_reporting(dev, pipe, true);
|
||||||
intel_set_pch_fifo_underrun_reporting(dev, pipe, true);
|
intel_set_pch_fifo_underrun_reporting(dev, pipe, true);
|
||||||
|
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
for_each_encoder_on_crtc(dev, crtc, encoder)
|
for_each_encoder_on_crtc(dev, crtc, encoder)
|
||||||
if (encoder->pre_enable)
|
if (encoder->pre_enable)
|
||||||
@ -3372,7 +3372,7 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
|
|||||||
if (intel_crtc->config.has_pch_encoder)
|
if (intel_crtc->config.has_pch_encoder)
|
||||||
intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true);
|
intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true);
|
||||||
|
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
if (intel_crtc->config.has_pch_encoder)
|
if (intel_crtc->config.has_pch_encoder)
|
||||||
dev_priv->display.fdi_link_train(crtc);
|
dev_priv->display.fdi_link_train(crtc);
|
||||||
@ -3506,7 +3506,7 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
intel_crtc->active = false;
|
intel_crtc->active = false;
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
intel_update_fbc(dev);
|
intel_update_fbc(dev);
|
||||||
@ -3565,7 +3565,7 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
intel_crtc->active = false;
|
intel_crtc->active = false;
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
intel_update_fbc(dev);
|
intel_update_fbc(dev);
|
||||||
@ -3665,7 +3665,7 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
intel_crtc->active = true;
|
intel_crtc->active = true;
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
for_each_encoder_on_crtc(dev, crtc, encoder)
|
for_each_encoder_on_crtc(dev, crtc, encoder)
|
||||||
if (encoder->pre_pll_enable)
|
if (encoder->pre_pll_enable)
|
||||||
@ -3710,7 +3710,7 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
intel_crtc->active = true;
|
intel_crtc->active = true;
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
for_each_encoder_on_crtc(dev, crtc, encoder)
|
for_each_encoder_on_crtc(dev, crtc, encoder)
|
||||||
if (encoder->pre_enable)
|
if (encoder->pre_enable)
|
||||||
@ -3794,7 +3794,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
|
|||||||
|
|
||||||
intel_crtc->active = false;
|
intel_crtc->active = false;
|
||||||
intel_update_fbc(dev);
|
intel_update_fbc(dev);
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i9xx_crtc_off(struct drm_crtc *crtc)
|
static void i9xx_crtc_off(struct drm_crtc *crtc)
|
||||||
@ -4955,7 +4955,7 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
|
|||||||
|
|
||||||
ret = intel_pipe_set_base(crtc, x, y, fb);
|
ret = intel_pipe_set_base(crtc, x, y, fb);
|
||||||
|
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -5843,7 +5843,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
|
|||||||
|
|
||||||
ret = intel_pipe_set_base(crtc, x, y, fb);
|
ret = intel_pipe_set_base(crtc, x, y, fb);
|
||||||
|
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -6299,7 +6299,7 @@ static int haswell_crtc_mode_set(struct drm_crtc *crtc,
|
|||||||
|
|
||||||
ret = intel_pipe_set_base(crtc, x, y, fb);
|
ret = intel_pipe_set_base(crtc, x, y, fb);
|
||||||
|
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -715,7 +715,7 @@ extern void intel_ddi_init(struct drm_device *dev, enum port port);
|
|||||||
extern enum port intel_ddi_get_encoder_port(struct intel_encoder *intel_encoder);
|
extern enum port intel_ddi_get_encoder_port(struct intel_encoder *intel_encoder);
|
||||||
|
|
||||||
/* For use by IVB LP watermark workaround in intel_sprite.c */
|
/* For use by IVB LP watermark workaround in intel_sprite.c */
|
||||||
extern void intel_update_watermarks(struct drm_device *dev);
|
extern void intel_update_watermarks(struct drm_crtc *crtc);
|
||||||
extern void intel_update_sprite_watermarks(struct drm_plane *plane,
|
extern void intel_update_sprite_watermarks(struct drm_plane *plane,
|
||||||
struct drm_crtc *crtc,
|
struct drm_crtc *crtc,
|
||||||
uint32_t sprite_width, int pixel_size,
|
uint32_t sprite_width, int pixel_size,
|
||||||
|
@ -1087,8 +1087,9 @@ static struct drm_crtc *single_enabled_crtc(struct drm_device *dev)
|
|||||||
return enabled;
|
return enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pineview_update_wm(struct drm_device *dev)
|
static void pineview_update_wm(struct drm_crtc *unused_crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = unused_crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
const struct cxsr_latency *latency;
|
const struct cxsr_latency *latency;
|
||||||
@ -1365,8 +1366,9 @@ static void vlv_update_drain_latency(struct drm_device *dev)
|
|||||||
|
|
||||||
#define single_plane_enabled(mask) is_power_of_2(mask)
|
#define single_plane_enabled(mask) is_power_of_2(mask)
|
||||||
|
|
||||||
static void valleyview_update_wm(struct drm_device *dev)
|
static void valleyview_update_wm(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = crtc->dev;
|
||||||
static const int sr_latency_ns = 12000;
|
static const int sr_latency_ns = 12000;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
int planea_wm, planeb_wm, cursora_wm, cursorb_wm;
|
int planea_wm, planeb_wm, cursora_wm, cursorb_wm;
|
||||||
@ -1424,8 +1426,9 @@ static void valleyview_update_wm(struct drm_device *dev)
|
|||||||
(cursor_sr << DSPFW_CURSOR_SR_SHIFT));
|
(cursor_sr << DSPFW_CURSOR_SR_SHIFT));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void g4x_update_wm(struct drm_device *dev)
|
static void g4x_update_wm(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = crtc->dev;
|
||||||
static const int sr_latency_ns = 12000;
|
static const int sr_latency_ns = 12000;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
int planea_wm, planeb_wm, cursora_wm, cursorb_wm;
|
int planea_wm, planeb_wm, cursora_wm, cursorb_wm;
|
||||||
@ -1476,8 +1479,9 @@ static void g4x_update_wm(struct drm_device *dev)
|
|||||||
(cursor_sr << DSPFW_CURSOR_SR_SHIFT));
|
(cursor_sr << DSPFW_CURSOR_SR_SHIFT));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i965_update_wm(struct drm_device *dev)
|
static void i965_update_wm(struct drm_crtc *unused_crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = unused_crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
int srwm = 1;
|
int srwm = 1;
|
||||||
@ -1541,8 +1545,9 @@ static void i965_update_wm(struct drm_device *dev)
|
|||||||
I915_WRITE(DSPFW3, (cursor_sr << DSPFW_CURSOR_SR_SHIFT));
|
I915_WRITE(DSPFW3, (cursor_sr << DSPFW_CURSOR_SR_SHIFT));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i9xx_update_wm(struct drm_device *dev)
|
static void i9xx_update_wm(struct drm_crtc *unused_crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = unused_crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
const struct intel_watermark_params *wm_info;
|
const struct intel_watermark_params *wm_info;
|
||||||
uint32_t fwater_lo;
|
uint32_t fwater_lo;
|
||||||
@ -1658,8 +1663,9 @@ static void i9xx_update_wm(struct drm_device *dev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i830_update_wm(struct drm_device *dev)
|
static void i830_update_wm(struct drm_crtc *unused_crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = unused_crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
uint32_t fwater_lo;
|
uint32_t fwater_lo;
|
||||||
@ -1785,8 +1791,9 @@ static bool ironlake_compute_srwm(struct drm_device *dev, int level, int plane,
|
|||||||
display, cursor);
|
display, cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ironlake_update_wm(struct drm_device *dev)
|
static void ironlake_update_wm(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
int fbc_wm, plane_wm, cursor_wm;
|
int fbc_wm, plane_wm, cursor_wm;
|
||||||
unsigned int enabled;
|
unsigned int enabled;
|
||||||
@ -1868,8 +1875,9 @@ static void ironlake_update_wm(struct drm_device *dev)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sandybridge_update_wm(struct drm_device *dev)
|
static void sandybridge_update_wm(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
int latency = dev_priv->wm.pri_latency[0] * 100; /* In unit 0.1us */
|
int latency = dev_priv->wm.pri_latency[0] * 100; /* In unit 0.1us */
|
||||||
u32 val;
|
u32 val;
|
||||||
@ -1970,8 +1978,9 @@ static void sandybridge_update_wm(struct drm_device *dev)
|
|||||||
cursor_wm);
|
cursor_wm);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ivybridge_update_wm(struct drm_device *dev)
|
static void ivybridge_update_wm(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
int latency = dev_priv->wm.pri_latency[0] * 100; /* In unit 0.1us */
|
int latency = dev_priv->wm.pri_latency[0] * 100; /* In unit 0.1us */
|
||||||
u32 val;
|
u32 val;
|
||||||
@ -2841,8 +2850,9 @@ static void hsw_write_wm_values(struct drm_i915_private *dev_priv,
|
|||||||
I915_WRITE(WM3_LP_ILK, results->wm_lp[2]);
|
I915_WRITE(WM3_LP_ILK, results->wm_lp[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void haswell_update_wm(struct drm_device *dev)
|
static void haswell_update_wm(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct hsw_wm_maximums lp_max_1_2, lp_max_5_6;
|
struct hsw_wm_maximums lp_max_1_2, lp_max_5_6;
|
||||||
struct hsw_pipe_wm_parameters params[3];
|
struct hsw_pipe_wm_parameters params[3];
|
||||||
@ -2879,7 +2889,7 @@ static void haswell_update_sprite_wm(struct drm_plane *plane,
|
|||||||
intel_plane->wm.horiz_pixels = sprite_width;
|
intel_plane->wm.horiz_pixels = sprite_width;
|
||||||
intel_plane->wm.bytes_per_pixel = pixel_size;
|
intel_plane->wm.bytes_per_pixel = pixel_size;
|
||||||
|
|
||||||
haswell_update_wm(plane->dev);
|
haswell_update_wm(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@ -3076,12 +3086,12 @@ static void sandybridge_update_sprite_wm(struct drm_plane *plane,
|
|||||||
* We don't use the sprite, so we can ignore that. And on Crestline we have
|
* We don't use the sprite, so we can ignore that. And on Crestline we have
|
||||||
* to set the non-SR watermarks to 8.
|
* to set the non-SR watermarks to 8.
|
||||||
*/
|
*/
|
||||||
void intel_update_watermarks(struct drm_device *dev)
|
void intel_update_watermarks(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = crtc->dev->dev_private;
|
||||||
|
|
||||||
if (dev_priv->display.update_wm)
|
if (dev_priv->display.update_wm)
|
||||||
dev_priv->display.update_wm(dev);
|
dev_priv->display.update_wm(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void intel_update_sprite_watermarks(struct drm_plane *plane,
|
void intel_update_sprite_watermarks(struct drm_plane *plane,
|
||||||
|
@ -288,7 +288,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
|
|||||||
dev_priv->sprite_scaling_enabled |= 1 << pipe;
|
dev_priv->sprite_scaling_enabled |= 1 << pipe;
|
||||||
|
|
||||||
if (!scaling_was_enabled) {
|
if (!scaling_was_enabled) {
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
intel_wait_for_vblank(dev, pipe);
|
intel_wait_for_vblank(dev, pipe);
|
||||||
}
|
}
|
||||||
sprscale = SPRITE_SCALE_ENABLE | (src_w << 16) | src_h;
|
sprscale = SPRITE_SCALE_ENABLE | (src_w << 16) | src_h;
|
||||||
@ -323,7 +323,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
|
|||||||
|
|
||||||
/* potentially re-enable LP watermarks */
|
/* potentially re-enable LP watermarks */
|
||||||
if (scaling_was_enabled && !dev_priv->sprite_scaling_enabled)
|
if (scaling_was_enabled && !dev_priv->sprite_scaling_enabled)
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -349,7 +349,7 @@ ivb_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc)
|
|||||||
|
|
||||||
/* potentially re-enable LP watermarks */
|
/* potentially re-enable LP watermarks */
|
||||||
if (scaling_was_enabled && !dev_priv->sprite_scaling_enabled)
|
if (scaling_was_enabled && !dev_priv->sprite_scaling_enabled)
|
||||||
intel_update_watermarks(dev);
|
intel_update_watermarks(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
Reference in New Issue
Block a user