diff options
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_sprite.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_sprite.c | 91 | 
1 files changed, 39 insertions, 52 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c index d1b4b20af4a0..ab5bc8a08f0f 100644 --- a/drivers/gpu/drm/i915/display/intel_sprite.c +++ b/drivers/gpu/drm/i915/display/intel_sprite.c @@ -66,8 +66,8 @@ static void i9xx_plane_linear_gamma(u16 gamma[8])  static void  chv_sprite_update_csc(const struct intel_plane_state *plane_state)  { +	struct intel_display *display = to_intel_display(plane_state);  	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); -	struct intel_display *display = to_intel_display(plane->base.dev);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	enum plane_id plane_id = plane->id;  	/* @@ -138,8 +138,8 @@ chv_sprite_update_csc(const struct intel_plane_state *plane_state)  static void  vlv_sprite_update_clrc(const struct intel_plane_state *plane_state)  { +	struct intel_display *display = to_intel_display(plane_state);  	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); -	struct intel_display *display = to_intel_display(plane->base.dev);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	enum pipe pipe = plane->pipe;  	enum plane_id plane_id = plane->id; @@ -341,8 +341,8 @@ static u32 vlv_sprite_ctl(const struct intel_crtc_state *crtc_state,  static void vlv_sprite_update_gamma(const struct intel_plane_state *plane_state)  { +	struct intel_display *display = to_intel_display(plane_state);  	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); -	struct intel_display *display = to_intel_display(plane->base.dev);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	enum pipe pipe = plane->pipe;  	enum plane_id plane_id = plane->id; @@ -368,7 +368,7 @@ vlv_sprite_update_noarm(struct intel_dsb *dsb,  			const struct intel_crtc_state *crtc_state,  			const struct intel_plane_state *plane_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	enum plane_id plane_id = plane->id;  	int crtc_x = plane_state->uapi.dst.x1; @@ -390,8 +390,7 @@ vlv_sprite_update_arm(struct intel_dsb *dsb,  		      const struct intel_crtc_state *crtc_state,  		      const struct intel_plane_state *plane_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); -	struct drm_i915_private *dev_priv = to_i915(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	enum plane_id plane_id = plane->id;  	const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; @@ -404,7 +403,7 @@ vlv_sprite_update_arm(struct intel_dsb *dsb,  	linear_offset = intel_fb_xy_to_linear(x, y, plane_state, 0); -	if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) +	if (display->platform.cherryview && pipe == PIPE_B)  		chv_sprite_update_csc(plane_state);  	if (key->flags) { @@ -440,7 +439,7 @@ vlv_sprite_disable_arm(struct intel_dsb *dsb,  		       struct intel_plane *plane,  		       const struct intel_crtc_state *crtc_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	enum plane_id plane_id = plane->id; @@ -645,19 +644,17 @@ static u32 ivb_sprite_ctl_crtc(const struct intel_crtc_state *crtc_state)  static bool ivb_need_sprite_gamma(const struct intel_plane_state *plane_state)  { -	struct drm_i915_private *dev_priv = -		to_i915(plane_state->uapi.plane->dev); +	struct intel_display *display = to_intel_display(plane_state);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	return fb->format->cpp[0] == 8 && -		(IS_IVYBRIDGE(dev_priv) || IS_HASWELL(dev_priv)); +		(display->platform.ivybridge || display->platform.haswell);  }  static u32 ivb_sprite_ctl(const struct intel_crtc_state *crtc_state,  			  const struct intel_plane_state *plane_state)  { -	struct drm_i915_private *dev_priv = -		to_i915(plane_state->uapi.plane->dev); +	struct intel_display *display = to_intel_display(plane_state);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	unsigned int rotation = plane_state->hw.rotation;  	const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; @@ -665,7 +662,7 @@ static u32 ivb_sprite_ctl(const struct intel_crtc_state *crtc_state,  	sprctl = SPRITE_ENABLE; -	if (IS_IVYBRIDGE(dev_priv)) +	if (display->platform.ivybridge)  		sprctl |= SPRITE_TRICKLE_FEED_DISABLE;  	switch (fb->format->format) { @@ -754,8 +751,8 @@ static void ivb_sprite_linear_gamma(const struct intel_plane_state *plane_state,  static void ivb_sprite_update_gamma(const struct intel_plane_state *plane_state)  { +	struct intel_display *display = to_intel_display(plane_state);  	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); -	struct intel_display *display = to_intel_display(plane->base.dev);  	enum pipe pipe = plane->pipe;  	u16 gamma[18];  	int i; @@ -787,8 +784,7 @@ ivb_sprite_update_noarm(struct intel_dsb *dsb,  			const struct intel_crtc_state *crtc_state,  			const struct intel_plane_state *plane_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); -	struct drm_i915_private *dev_priv = to_i915(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	int crtc_x = plane_state->uapi.dst.x1;  	int crtc_y = plane_state->uapi.dst.y1; @@ -809,7 +805,7 @@ ivb_sprite_update_noarm(struct intel_dsb *dsb,  			  SPRITE_POS_Y(crtc_y) | SPRITE_POS_X(crtc_x));  	intel_de_write_fw(display, SPRSIZE(pipe),  			  SPRITE_HEIGHT(crtc_h - 1) | SPRITE_WIDTH(crtc_w - 1)); -	if (IS_IVYBRIDGE(dev_priv)) +	if (display->platform.ivybridge)  		intel_de_write_fw(display, SPRSCALE(pipe), sprscale);  } @@ -819,8 +815,7 @@ ivb_sprite_update_arm(struct intel_dsb *dsb,  		      const struct intel_crtc_state *crtc_state,  		      const struct intel_plane_state *plane_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); -	struct drm_i915_private *dev_priv = to_i915(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	const struct drm_intel_sprite_colorkey *key = &plane_state->ckey;  	u32 sprsurf_offset = plane_state->view.color_plane[0].offset; @@ -841,7 +836,7 @@ ivb_sprite_update_arm(struct intel_dsb *dsb,  	/* HSW consolidates SPRTILEOFF and SPRLINOFF into a single SPROFFSET  	 * register */ -	if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) { +	if (display->platform.haswell || display->platform.broadwell) {  		intel_de_write_fw(display, SPROFFSET(pipe),  				  SPRITE_OFFSET_Y(y) | SPRITE_OFFSET_X(x));  	} else { @@ -867,13 +862,12 @@ ivb_sprite_disable_arm(struct intel_dsb *dsb,  		       struct intel_plane *plane,  		       const struct intel_crtc_state *crtc_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); -	struct drm_i915_private *dev_priv = to_i915(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	intel_de_write_fw(display, SPRCTL(pipe), 0);  	/* Disable the scaler */ -	if (IS_IVYBRIDGE(dev_priv)) +	if (display->platform.ivybridge)  		intel_de_write_fw(display, SPRSCALE(pipe), 0);  	intel_de_write_fw(display, SPRSURF(pipe), 0);  } @@ -882,7 +876,7 @@ static bool  ivb_sprite_get_hw_state(struct intel_plane *plane,  			enum pipe *pipe)  { -	struct intel_display *display = to_intel_display(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum intel_display_power_domain power_domain;  	intel_wakeref_t wakeref;  	bool ret; @@ -1002,8 +996,7 @@ static u32 g4x_sprite_ctl_crtc(const struct intel_crtc_state *crtc_state)  static u32 g4x_sprite_ctl(const struct intel_crtc_state *crtc_state,  			  const struct intel_plane_state *plane_state)  { -	struct drm_i915_private *dev_priv = -		to_i915(plane_state->uapi.plane->dev); +	struct intel_display *display = to_intel_display(plane_state);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	unsigned int rotation = plane_state->hw.rotation;  	const struct drm_intel_sprite_colorkey *key = &plane_state->ckey; @@ -1011,7 +1004,7 @@ static u32 g4x_sprite_ctl(const struct intel_crtc_state *crtc_state,  	dvscntr = DVS_ENABLE; -	if (IS_SANDYBRIDGE(dev_priv)) +	if (display->platform.sandybridge)  		dvscntr |= DVS_TRICKLE_FEED_DISABLE;  	switch (fb->format->format) { @@ -1072,8 +1065,8 @@ static u32 g4x_sprite_ctl(const struct intel_crtc_state *crtc_state,  static void g4x_sprite_update_gamma(const struct intel_plane_state *plane_state)  { +	struct intel_display *display = to_intel_display(plane_state);  	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); -	struct intel_display *display = to_intel_display(plane->base.dev);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	enum pipe pipe = plane->pipe;  	u16 gamma[8]; @@ -1102,8 +1095,8 @@ static void ilk_sprite_linear_gamma(u16 gamma[17])  static void ilk_sprite_update_gamma(const struct intel_plane_state *plane_state)  { +	struct intel_display *display = to_intel_display(plane_state);  	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); -	struct intel_display *display = to_intel_display(plane->base.dev);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	enum pipe pipe = plane->pipe;  	u16 gamma[17]; @@ -1132,7 +1125,7 @@ g4x_sprite_update_noarm(struct intel_dsb *dsb,  			const struct intel_crtc_state *crtc_state,  			const struct intel_plane_state *plane_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	int crtc_x = plane_state->uapi.dst.x1;  	int crtc_y = plane_state->uapi.dst.y1; @@ -1162,8 +1155,7 @@ g4x_sprite_update_arm(struct intel_dsb *dsb,  		      const struct intel_crtc_state *crtc_state,  		      const struct intel_plane_state *plane_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); -	struct drm_i915_private *dev_priv = to_i915(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	const struct drm_intel_sprite_colorkey *key = &plane_state->ckey;  	u32 dvssurf_offset = plane_state->view.color_plane[0].offset; @@ -1195,7 +1187,7 @@ g4x_sprite_update_arm(struct intel_dsb *dsb,  	intel_de_write_fw(display, DVSSURF(pipe),  			  intel_plane_ggtt_offset(plane_state) + dvssurf_offset); -	if (IS_G4X(dev_priv)) +	if (display->platform.g4x)  		g4x_sprite_update_gamma(plane_state);  	else  		ilk_sprite_update_gamma(plane_state); @@ -1206,7 +1198,7 @@ g4x_sprite_disable_arm(struct intel_dsb *dsb,  		       struct intel_plane *plane,  		       const struct intel_crtc_state *crtc_state)  { -	struct intel_display *display = to_intel_display(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum pipe pipe = plane->pipe;  	intel_de_write_fw(display, DVSCNTR(pipe), 0); @@ -1219,7 +1211,7 @@ static bool  g4x_sprite_get_hw_state(struct intel_plane *plane,  			enum pipe *pipe)  { -	struct intel_display *display = to_intel_display(plane->base.dev); +	struct intel_display *display = to_intel_display(plane);  	enum intel_display_power_domain power_domain;  	intel_wakeref_t wakeref;  	bool ret; @@ -1259,7 +1251,7 @@ static int  g4x_sprite_check_scaling(struct intel_crtc_state *crtc_state,  			 struct intel_plane_state *plane_state)  { -	struct intel_display *display = to_intel_display(crtc_state); +	struct intel_display *display = to_intel_display(plane_state);  	const struct drm_framebuffer *fb = plane_state->hw.fb;  	const struct drm_rect *src = &plane_state->uapi.src;  	const struct drm_rect *dst = &plane_state->uapi.dst; @@ -1325,9 +1317,7 @@ static int  g4x_sprite_check(struct intel_crtc_state *crtc_state,  		 struct intel_plane_state *plane_state)  { -	struct intel_display *display = to_intel_display(crtc_state); -	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); -	struct drm_i915_private *dev_priv = to_i915(plane->base.dev); +	struct intel_display *display = to_intel_display(plane_state);  	int min_scale = DRM_PLANE_NO_SCALING;  	int max_scale = DRM_PLANE_NO_SCALING;  	int ret; @@ -1336,7 +1326,7 @@ g4x_sprite_check(struct intel_crtc_state *crtc_state,  		if (DISPLAY_VER(display) < 7) {  			min_scale = 1;  			max_scale = 16 << 16; -		} else if (IS_IVYBRIDGE(dev_priv)) { +		} else if (display->platform.ivybridge) {  			min_scale = 1;  			max_scale = 2 << 16;  		} @@ -1372,13 +1362,11 @@ g4x_sprite_check(struct intel_crtc_state *crtc_state,  int chv_plane_check_rotation(const struct intel_plane_state *plane_state)  { -	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); -	struct intel_display *display = to_intel_display(plane->base.dev); -	struct drm_i915_private *dev_priv = to_i915(plane->base.dev); +	struct intel_display *display = to_intel_display(plane_state);  	unsigned int rotation = plane_state->hw.rotation;  	/* CHV ignores the mirror bit when the rotate bit is set :( */ -	if (IS_CHERRYVIEW(dev_priv) && +	if (display->platform.cherryview &&  	    rotation & DRM_MODE_ROTATE_180 &&  	    rotation & DRM_MODE_REFLECT_X) {  		drm_dbg_kms(display->drm, @@ -1580,10 +1568,9 @@ static const struct drm_plane_funcs vlv_sprite_funcs = {  };  struct intel_plane * -intel_sprite_plane_create(struct drm_i915_private *dev_priv, +intel_sprite_plane_create(struct intel_display *display,  			  enum pipe pipe, int sprite)  { -	struct intel_display *display = &dev_priv->display;  	struct intel_plane *plane;  	const struct drm_plane_funcs *plane_funcs;  	unsigned int supported_rotations; @@ -1596,7 +1583,7 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,  	if (IS_ERR(plane))  		return plane; -	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { +	if (display->platform.valleyview || display->platform.cherryview) {  		plane->update_noarm = vlv_sprite_update_noarm;  		plane->update_arm = vlv_sprite_update_arm;  		plane->disable_arm = vlv_sprite_disable_arm; @@ -1610,7 +1597,7 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,  		if (intel_scanout_needs_vtd_wa(display))  			plane->vtd_guard = 128; -		if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) { +		if (display->platform.cherryview && pipe == PIPE_B) {  			formats = chv_pipe_b_sprite_formats;  			num_formats = ARRAY_SIZE(chv_pipe_b_sprite_formats);  		} else { @@ -1626,7 +1613,7 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,  		plane->get_hw_state = ivb_sprite_get_hw_state;  		plane->check_plane = g4x_sprite_check; -		if (IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) { +		if (display->platform.broadwell || display->platform.haswell) {  			plane->max_stride = hsw_sprite_max_stride;  			plane->min_cdclk = hsw_plane_min_cdclk;  		} else { @@ -1656,7 +1643,7 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,  		if (intel_scanout_needs_vtd_wa(display))  			plane->vtd_guard = 64; -		if (IS_SANDYBRIDGE(dev_priv)) { +		if (display->platform.sandybridge) {  			formats = snb_sprite_formats;  			num_formats = ARRAY_SIZE(snb_sprite_formats); @@ -1669,7 +1656,7 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,  		}  	} -	if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) { +	if (display->platform.cherryview && pipe == PIPE_B) {  		supported_rotations =  			DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 |  			DRM_MODE_REFLECT_X;  | 
