[Intel-gfx] [PATCH 10/10] drm/i915: rip out update_linetime_wm abstraction
Paulo Zanoni
przanoni at gmail.com
Tue Dec 4 18:34:09 CET 2012
Hi
2012/11/29 Daniel Vetter <daniel.vetter at ffwll.ch>:
> I like abstraction and vfuncs, but only if they actually abstract anything.
> In this case here they just obfuscate, so let's rip this stuff out.
>
> Aside: We really should move all the haswell stuff into it's own file ...
Well, a few Kernels ago we did a nice effort to move a lot of code
from intel_display.c to intel_pm.c. Now we're bringing it back... I'd
like to understand what are the current plans regarding this.
>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 2 --
> drivers/gpu/drm/i915/intel_display.c | 31 +++++++++++++++++++++++++++---
> drivers/gpu/drm/i915/intel_drv.h | 2 --
> drivers/gpu/drm/i915/intel_pm.c | 37 ------------------------------------
> 4 files changed, 28 insertions(+), 44 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index a98cff0..ac52c75 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -269,8 +269,6 @@ struct drm_i915_display_funcs {
> void (*update_wm)(struct drm_device *dev);
> void (*update_sprite_wm)(struct drm_device *dev, int pipe,
> uint32_t sprite_width, int pixel_size);
> - void (*update_linetime_wm)(struct drm_device *dev, int pipe,
> - struct drm_display_mode *mode);
> void (*modeset_global_resources)(struct drm_device *dev);
> int (*crtc_mode_set)(struct drm_crtc *crtc,
> struct drm_display_mode *mode,
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 0a45d07..0c7e88d 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -5380,11 +5380,36 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
>
> ret = intel_pipe_set_base(crtc, x, y, fb);
>
> - intel_update_linetime_watermarks(dev, pipe, adjusted_mode);
> -
> return fdi_config_ok ? ret : -EINVAL;
> }
>
> +static void
> +haswell_update_linetime_wm(struct drm_device *dev, int pipe,
> + struct drm_display_mode *mode)
> +{
> + struct drm_i915_private *dev_priv = dev->dev_private;
> + u32 temp;
> +
> + temp = I915_READ(PIPE_WM_LINETIME(pipe));
> + temp &= ~PIPE_WM_LINETIME_MASK;
> +
> + /* The WM are computed with base on how long it takes to fill a single
> + * row at the given clock rate, multiplied by 8.
> + * */
> + temp |= PIPE_WM_LINETIME_TIME(
> + ((mode->crtc_hdisplay * 1000) / mode->clock) * 8);
> +
> + /* IPS watermarks are only used by pipe A, and are ignored by
> + * pipes B and C. They are calculated similarly to the common
> + * linetime values, except that we are using CD clock frequency
> + * in MHz instead of pixel rate for the division.
> + *
> + * This is a placeholder for the IPS watermark calculation code.
> + */
> +
> + I915_WRITE(PIPE_WM_LINETIME(pipe), temp);
> +}
> +
> static int haswell_crtc_mode_set(struct drm_crtc *crtc,
> struct drm_display_mode *mode,
> struct drm_display_mode *adjusted_mode,
> @@ -5465,7 +5490,7 @@ static int haswell_crtc_mode_set(struct drm_crtc *crtc,
>
> ret = intel_pipe_set_base(crtc, x, y, fb);
>
> - intel_update_linetime_watermarks(dev, pipe, adjusted_mode);
> + haswell_update_linetime_wm(dev, pipe, adjusted_mode);
>
> return ret;
> }
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 7ca7772..824efde 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -622,8 +622,6 @@ extern void intel_update_watermarks(struct drm_device *dev);
> extern void intel_update_sprite_watermarks(struct drm_device *dev, int pipe,
> uint32_t sprite_width,
> int pixel_size);
> -extern void intel_update_linetime_watermarks(struct drm_device *dev, int pipe,
> - struct drm_display_mode *mode);
>
> extern unsigned long intel_gen4_compute_offset_xtiled(int *x, int *y,
> unsigned int bpp,
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index f595b8d..a487d15 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -1890,33 +1890,6 @@ static void sandybridge_update_wm(struct drm_device *dev)
> cursor_wm);
> }
>
> -static void
> -haswell_update_linetime_wm(struct drm_device *dev, int pipe,
> - struct drm_display_mode *mode)
> -{
> - struct drm_i915_private *dev_priv = dev->dev_private;
> - u32 temp;
> -
> - temp = I915_READ(PIPE_WM_LINETIME(pipe));
> - temp &= ~PIPE_WM_LINETIME_MASK;
> -
> - /* The WM are computed with base on how long it takes to fill a single
> - * row at the given clock rate, multiplied by 8.
> - * */
> - temp |= PIPE_WM_LINETIME_TIME(
> - ((mode->crtc_hdisplay * 1000) / mode->clock) * 8);
> -
> - /* IPS watermarks are only used by pipe A, and are ignored by
> - * pipes B and C. They are calculated similarly to the common
> - * linetime values, except that we are using CD clock frequency
> - * in MHz instead of pixel rate for the division.
> - *
> - * This is a placeholder for the IPS watermark calculation code.
> - */
> -
> - I915_WRITE(PIPE_WM_LINETIME(pipe), temp);
> -}
> -
> static bool
> sandybridge_compute_sprite_wm(struct drm_device *dev, int plane,
> uint32_t sprite_width, int pixel_size,
> @@ -2112,15 +2085,6 @@ void intel_update_watermarks(struct drm_device *dev)
> dev_priv->display.update_wm(dev);
> }
>
> -void intel_update_linetime_watermarks(struct drm_device *dev,
> - int pipe, struct drm_display_mode *mode)
> -{
> - struct drm_i915_private *dev_priv = dev->dev_private;
> -
> - if (dev_priv->display.update_linetime_wm)
> - dev_priv->display.update_linetime_wm(dev, pipe, mode);
> -}
> -
> void intel_update_sprite_watermarks(struct drm_device *dev, int pipe,
> uint32_t sprite_width, int pixel_size)
> {
> @@ -4011,7 +3975,6 @@ void intel_init_pm(struct drm_device *dev)
> if (SNB_READ_WM0_LATENCY()) {
> dev_priv->display.update_wm = sandybridge_update_wm;
> dev_priv->display.update_sprite_wm = sandybridge_update_sprite_wm;
> - dev_priv->display.update_linetime_wm = haswell_update_linetime_wm;
> } else {
> DRM_DEBUG_KMS("Failed to read display plane latency. "
> "Disable CxSR\n");
> --
> 1.7.11.7
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Paulo Zanoni
More information about the Intel-gfx
mailing list