Add patches from -next to enable i915.fastboot by default on Skylake+ for
https://fedoraproject.org/wiki/Changes/FlickerFreeBoot
This commit is contained in:
		
							parent
							
								
									0ccd979b76
								
							
						
					
					
						commit
						3f22d634d2
					
				
							
								
								
									
										85
									
								
								i915-enable-fastboot-on-skylake.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								i915-enable-fastboot-on-skylake.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,85 @@ | ||||
| From dff28bd3963af53e9606e4418aaf14b779d32e30 Mon Sep 17 00:00:00 2001 | ||||
| From: Hans de Goede <hdegoede@redhat.com> | ||||
| Date: Thu, 24 Jan 2019 14:01:14 +0100 | ||||
| Subject: [PATCH] drm/i915: Enable fastboot by default on Skylake and newer | ||||
| 
 | ||||
| We really want to have fastboot enabled by default to avoid an ugly | ||||
| modeset during boot. | ||||
| 
 | ||||
| Rather then enabling it everywhere, lets start with enabling it on | ||||
| Skylake and newer. | ||||
| 
 | ||||
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> | ||||
| Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/i915_params.c   |  6 ++++-- | ||||
|  drivers/gpu/drm/i915/i915_params.h   |  2 +- | ||||
|  drivers/gpu/drm/i915/intel_display.c | 11 ++++++++++- | ||||
|  3 files changed, 15 insertions(+), 4 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
 | ||||
| index 2e0356561839..c75be3f07575 100644
 | ||||
| --- a/drivers/gpu/drm/i915/i915_params.c
 | ||||
| +++ b/drivers/gpu/drm/i915/i915_params.c
 | ||||
| @@ -97,8 +97,10 @@ i915_param_named_unsafe(disable_power_well, int, 0400,
 | ||||
|   | ||||
|  i915_param_named_unsafe(enable_ips, int, 0600, "Enable IPS (default: true)"); | ||||
|   | ||||
| -i915_param_named(fastboot, bool, 0600,
 | ||||
| -	"Try to skip unnecessary mode sets at boot time (default: false)");
 | ||||
| +i915_param_named(fastboot, int, 0600,
 | ||||
| +	"Try to skip unnecessary mode sets at boot time "
 | ||||
| +	"(0=disabled, 1=enabled) "
 | ||||
| +	"Default: -1 (use per-chip default)");
 | ||||
|   | ||||
|  i915_param_named_unsafe(prefault_disable, bool, 0600, | ||||
|  	"Disable page prefaulting for pread/pwrite/reloc (default:false). " | ||||
| diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
 | ||||
| index 7e56c516c815..331cbfccfb80 100644
 | ||||
| --- a/drivers/gpu/drm/i915/i915_params.h
 | ||||
| +++ b/drivers/gpu/drm/i915/i915_params.h
 | ||||
| @@ -54,10 +54,10 @@ struct drm_printer;
 | ||||
|  	param(int, edp_vswing, 0) \ | ||||
|  	param(int, reset, 2) \ | ||||
|  	param(unsigned int, inject_load_failure, 0) \ | ||||
| +	param(int, fastboot, -1) \
 | ||||
|  	/* leave bools at the end to not create holes */ \ | ||||
|  	param(bool, alpha_support, IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT)) \ | ||||
|  	param(bool, enable_hangcheck, true) \ | ||||
| -	param(bool, fastboot, false) \
 | ||||
|  	param(bool, prefault_disable, false) \ | ||||
|  	param(bool, load_detect_test, false) \ | ||||
|  	param(bool, force_reset_modeset_test, false) \ | ||||
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| index 4a552eeb591c..34e8c95b693e 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_display.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| @@ -11666,6 +11666,15 @@ pipe_config_err(bool adjust, const char *name, const char *format, ...)
 | ||||
|  	va_end(args); | ||||
|  } | ||||
|   | ||||
| +static bool fastboot_enabled(struct drm_i915_private *dev_priv)
 | ||||
| +{
 | ||||
| +	if (i915_modparams.fastboot != -1)
 | ||||
| +		return i915_modparams.fastboot;
 | ||||
| +
 | ||||
| +	/* Enable fastboot by default on Skylake and newer */
 | ||||
| +	return INTEL_GEN(dev_priv) >= 9;
 | ||||
| +}
 | ||||
| +
 | ||||
|  static bool | ||||
|  intel_pipe_config_compare(struct drm_i915_private *dev_priv, | ||||
|  			  struct intel_crtc_state *current_config, | ||||
| @@ -11677,7 +11686,7 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,
 | ||||
|  		(current_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED) && | ||||
|  		!(pipe_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED); | ||||
|   | ||||
| -	if (fixup_inherited && !i915_modparams.fastboot) {
 | ||||
| +	if (fixup_inherited && !fastboot_enabled(dev_priv)) {
 | ||||
|  		DRM_DEBUG_KMS("initial modeset and fastboot not set\n"); | ||||
|  		ret = false; | ||||
|  	} | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
							
								
								
									
										53
									
								
								i915-enable-fastboot-on-vlv-chv.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								i915-enable-fastboot-on-vlv-chv.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| From c3d75c94de553c3084dd4dfd0d5d9aa6e53f3457 Mon Sep 17 00:00:00 2001 | ||||
| From: Hans de Goede <hdegoede@redhat.com> | ||||
| Date: Tue, 29 Jan 2019 12:53:32 +0100 | ||||
| Subject: [PATCH] drm/i915: Enable fastboot by default on VLV and CHV | ||||
| 
 | ||||
| We really want to have fastboot enabled by default to avoid an ugly | ||||
| modeset during boot. | ||||
| 
 | ||||
| Currently we are enabling fastboot by default on gen9+ (Skylake and newer). | ||||
| The intention is to enable it on older generations after it has seen more | ||||
| testing on gen9+. | ||||
| 
 | ||||
| VLV and CHV devices are still being sold in stores today, as such it is | ||||
| desirable to also enable fastboot by default on these now. | ||||
| 
 | ||||
| I've extensively tested fastboot=1 support on over 50 different | ||||
| Bay- and Cherry-Trail devices. Testing DSI and eDP panels as well as | ||||
| HDMI output (and even DP over Type-C on one device). | ||||
| 
 | ||||
| All 50 devices work fine with fastboot=1. On 2 devices their DSI panel | ||||
| turns black as soon as the i915 driver loads when fastboot=0, so having | ||||
| fastboot enabled is required for these 2 to work properly (for lack of | ||||
| a better fix). | ||||
| 
 | ||||
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/intel_display.c | 10 +++++++++- | ||||
|  1 file changed, 9 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| index d756d7358292..0ff42a38023c 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_display.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| @@ -11672,7 +11672,15 @@ static bool fastboot_enabled(struct drm_i915_private *dev_priv)
 | ||||
|  		return i915_modparams.fastboot; | ||||
|   | ||||
|  	/* Enable fastboot by default on Skylake and newer */ | ||||
| -	return INTEL_GEN(dev_priv) >= 9;
 | ||||
| +	if (INTEL_GEN(dev_priv) >= 9)
 | ||||
| +		return true;
 | ||||
| +
 | ||||
| +	/* Enable fastboot by default on VLV and CHV */
 | ||||
| +	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
 | ||||
| +		return true;
 | ||||
| +
 | ||||
| +	/* Disabled by default on all others */
 | ||||
| +	return false;
 | ||||
|  } | ||||
|   | ||||
|  static bool | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
							
								
								
									
										555
									
								
								i915-fixes-for-fastboot.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										555
									
								
								i915-fixes-for-fastboot.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,555 @@ | ||||
| From bd9df6522501c69f07651b6f5afcdde516731b64 Mon Sep 17 00:00:00 2001 | ||||
| From: Hans de Goede <hdegoede@redhat.com> | ||||
| Date: Thu, 20 Dec 2018 14:21:18 +0100 | ||||
| Subject: [PATCH 1/3] drm/i915: Add an update_pipe callback to intel_encoder | ||||
|  and call this on fastsets (v2) | ||||
| 
 | ||||
| When we are doing a fastset (needs_modeset=false, update_pipe=true) we | ||||
| may need to update some encoder-level things such as checking that PSR | ||||
| is enabled. | ||||
| 
 | ||||
| This commit adds an update_pipe callback to intel_encoder and a new | ||||
| intel_encoders_update_pipe helper which calls this for all encoders | ||||
| connected to a crtc. The new intel_encoders_update_pipe helper is called | ||||
| from intel_update_crtc when doing a fastset. | ||||
| 
 | ||||
| Changes in v2: | ||||
| -Name the new encoder callback update_pipe instead of just update
 | ||||
| 
 | ||||
| Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/intel_display.c | 23 +++++++++++++++++++++++ | ||||
|  drivers/gpu/drm/i915/intel_drv.h     |  3 +++ | ||||
|  2 files changed, 26 insertions(+) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| index 3da9c0f9e948..7b502e5dc287 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_display.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| @@ -5578,6 +5578,26 @@ static void intel_encoders_post_pll_disable(struct drm_crtc *crtc,
 | ||||
|  	} | ||||
|  } | ||||
|   | ||||
| +static void intel_encoders_update_pipe(struct drm_crtc *crtc,
 | ||||
| +				       struct intel_crtc_state *crtc_state,
 | ||||
| +				       struct drm_atomic_state *old_state)
 | ||||
| +{
 | ||||
| +	struct drm_connector_state *conn_state;
 | ||||
| +	struct drm_connector *conn;
 | ||||
| +	int i;
 | ||||
| +
 | ||||
| +	for_each_new_connector_in_state(old_state, conn, conn_state, i) {
 | ||||
| +		struct intel_encoder *encoder =
 | ||||
| +			to_intel_encoder(conn_state->best_encoder);
 | ||||
| +
 | ||||
| +		if (conn_state->crtc != crtc)
 | ||||
| +			continue;
 | ||||
| +
 | ||||
| +		if (encoder->update_pipe)
 | ||||
| +			encoder->update_pipe(encoder, crtc_state, conn_state);
 | ||||
| +	}
 | ||||
| +}
 | ||||
| +
 | ||||
|  static void ironlake_crtc_enable(struct intel_crtc_state *pipe_config, | ||||
|  				 struct drm_atomic_state *old_state) | ||||
|  { | ||||
| @@ -12755,6 +12775,9 @@ static void intel_update_crtc(struct drm_crtc *crtc,
 | ||||
|  	} else { | ||||
|  		intel_pre_plane_update(to_intel_crtc_state(old_crtc_state), | ||||
|  				       pipe_config); | ||||
| +
 | ||||
| +		if (pipe_config->update_pipe)
 | ||||
| +			intel_encoders_update_pipe(crtc, pipe_config, state);
 | ||||
|  	} | ||||
|   | ||||
|  	if (new_plane_state) | ||||
| diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| index f94a04b4ad87..5162aa2841d1 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| @@ -243,6 +243,9 @@ struct intel_encoder {
 | ||||
|  	void (*post_pll_disable)(struct intel_encoder *, | ||||
|  				 const struct intel_crtc_state *, | ||||
|  				 const struct drm_connector_state *); | ||||
| +	void (*update_pipe)(struct intel_encoder *,
 | ||||
| +			    const struct intel_crtc_state *,
 | ||||
| +			    const struct drm_connector_state *);
 | ||||
|  	/* Read out the current hw state of this connector, returning true if | ||||
|  	 * the encoder is active. If the encoder is enabled it also set the pipe | ||||
|  	 * it is connected to in the pipe parameter. */ | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
| From 3da6c4b508820c910979d037e3e9835d04e5b492 Mon Sep 17 00:00:00 2001 | ||||
| From: Hans de Goede <hdegoede@redhat.com> | ||||
| Date: Thu, 20 Dec 2018 14:21:19 +0100 | ||||
| Subject: [PATCH 2/3] drm/i915: Allow calling intel_edp_drrs_enable twice | ||||
| 
 | ||||
| Do not make it an error to call intel_edp_drrs_enable while drrs has | ||||
| already been enabled, instead exit silently in this case. | ||||
| 
 | ||||
| This is a preparation patch for ensuring that DRRS is enabled on fastsets. | ||||
| 
 | ||||
| Note that the removed WARN_ON could also be triggered from userspace | ||||
| through the i915_drrs_ctl debugfs entry which was added by | ||||
| commit 35954e88bc50 ("drm/i915: Runtime disable for eDP DRRS") | ||||
| 
 | ||||
| Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/intel_dp.c | 4 ++-- | ||||
|  1 file changed, 2 insertions(+), 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| index fdd2cbc56fa3..dd86c341dbe4 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| @@ -6361,8 +6361,8 @@ void intel_edp_drrs_enable(struct intel_dp *intel_dp,
 | ||||
|  	} | ||||
|   | ||||
|  	mutex_lock(&dev_priv->drrs.mutex); | ||||
| -	if (WARN_ON(dev_priv->drrs.dp)) {
 | ||||
| -		DRM_ERROR("DRRS already enabled\n");
 | ||||
| +	if (dev_priv->drrs.dp) {
 | ||||
| +		DRM_DEBUG_KMS("DRRS already enabled\n");
 | ||||
|  		goto unlock; | ||||
|  	} | ||||
|   | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
| From 6370a95e20db702c6fcc4bb6c38359db609a70e1 Mon Sep 17 00:00:00 2001 | ||||
| From: Hans de Goede <hdegoede@redhat.com> | ||||
| Date: Thu, 20 Dec 2018 14:21:20 +0100 | ||||
| Subject: [PATCH 3/3] drm/i915: DDI: call intel_psr_ and _edp_drrs_enable() on | ||||
|  pipe updates (v2) | ||||
| 
 | ||||
| Call intel_psr_enable() and intel_edp_drrs_enable() on pipe updates to make | ||||
| sure that we enable PSR / DRRS (when applicable) on fastsets. | ||||
| 
 | ||||
| Note calling these functions when PSR / DRRS has already been enabled is a | ||||
| no-op, so it is safe to do this on every encoder->update_pipe callback. | ||||
| 
 | ||||
| Changes in v2: | ||||
| -Merge the patches adding the intel_psr_enable() and intel_edp_drrs_enable()
 | ||||
|  calls into a single patch | ||||
| 
 | ||||
| Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> | ||||
| Acked-by: Rodrigo Vivi <rodrigo.vivi@intel.com> | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/intel_ddi.c | 19 +++++++++++++++++++ | ||||
|  1 file changed, 19 insertions(+) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
 | ||||
| index f3e1d6a0b7dd..9985bb209512 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_ddi.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_ddi.c
 | ||||
| @@ -3603,6 +3603,24 @@ static void intel_disable_ddi(struct intel_encoder *encoder,
 | ||||
|  		intel_disable_ddi_dp(encoder, old_crtc_state, old_conn_state); | ||||
|  } | ||||
|   | ||||
| +static void intel_ddi_update_pipe_dp(struct intel_encoder *encoder,
 | ||||
| +				     const struct intel_crtc_state *crtc_state,
 | ||||
| +				     const struct drm_connector_state *conn_state)
 | ||||
| +{
 | ||||
| +	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
 | ||||
| +
 | ||||
| +	intel_psr_enable(intel_dp, crtc_state);
 | ||||
| +	intel_edp_drrs_enable(intel_dp, crtc_state);
 | ||||
| +}
 | ||||
| +
 | ||||
| +static void intel_ddi_update_pipe(struct intel_encoder *encoder,
 | ||||
| +				  const struct intel_crtc_state *crtc_state,
 | ||||
| +				  const struct drm_connector_state *conn_state)
 | ||||
| +{
 | ||||
| +	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
 | ||||
| +		intel_ddi_update_pipe_dp(encoder, crtc_state, conn_state);
 | ||||
| +}
 | ||||
| +
 | ||||
|  static void intel_ddi_set_fia_lane_count(struct intel_encoder *encoder, | ||||
|  					 const struct intel_crtc_state *pipe_config, | ||||
|  					 enum port port) | ||||
| @@ -4195,6 +4213,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
 | ||||
|  	intel_encoder->pre_enable = intel_ddi_pre_enable; | ||||
|  	intel_encoder->disable = intel_disable_ddi; | ||||
|  	intel_encoder->post_disable = intel_ddi_post_disable; | ||||
| +	intel_encoder->update_pipe = intel_ddi_update_pipe;
 | ||||
|  	intel_encoder->get_hw_state = intel_ddi_get_hw_state; | ||||
|  	intel_encoder->get_config = intel_ddi_get_config; | ||||
|  	intel_encoder->suspend = intel_dp_encoder_suspend; | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
| From f28c23260d593150eba0104a676f3a8be1c48394 Mon Sep 17 00:00:00 2001 | ||||
| From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Date: Tue, 8 Jan 2019 17:08:38 +0100 | ||||
| Subject: [PATCH 1/4] drm/i915/backlight: Restore backlight on resume, v3. | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| Restore our saved values for backlight. This way even with fastset on | ||||
| S4 resume we will correctly restore the backlight to the active values. | ||||
| 
 | ||||
| Changes since v1: | ||||
| - Call enable_backlight() when backlight.level is set. On suspend
 | ||||
|   backlight.enabled is always cleared, this makes it not a good | ||||
|   indicator. Also check for crtc->state->active. | ||||
| Changes since v2: | ||||
| - Use the new update_pipe() callback to run this on resume as well.
 | ||||
| 
 | ||||
| Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Cc: Tolga Cakir <cevelnet@gmail.com> | ||||
| Cc: Basil Eric Rabi <ericbasil.rabi@gmail.com> | ||||
| Cc: Hans de Goede <jwrdegoede@fedoraproject.org> | ||||
| Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> | ||||
| Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com> | ||||
| Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/icl_dsi.c     |  1 + | ||||
|  drivers/gpu/drm/i915/intel_ddi.c   |  2 ++ | ||||
|  drivers/gpu/drm/i915/intel_dp.c    |  1 + | ||||
|  drivers/gpu/drm/i915/intel_drv.h   |  3 ++ | ||||
|  drivers/gpu/drm/i915/intel_lvds.c  |  1 + | ||||
|  drivers/gpu/drm/i915/intel_panel.c | 49 +++++++++++++++++++++++------- | ||||
|  drivers/gpu/drm/i915/vlv_dsi.c     |  1 + | ||||
|  7 files changed, 47 insertions(+), 11 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
 | ||||
| index 4dd793b78996..3f92881600c5 100644
 | ||||
| --- a/drivers/gpu/drm/i915/icl_dsi.c
 | ||||
| +++ b/drivers/gpu/drm/i915/icl_dsi.c
 | ||||
| @@ -1378,6 +1378,7 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
 | ||||
|  	encoder->disable = gen11_dsi_disable; | ||||
|  	encoder->port = port; | ||||
|  	encoder->get_config = gen11_dsi_get_config; | ||||
| +	encoder->update_pipe = intel_panel_update_backlight;
 | ||||
|  	encoder->compute_config = gen11_dsi_compute_config; | ||||
|  	encoder->get_hw_state = gen11_dsi_get_hw_state; | ||||
|  	encoder->type = INTEL_OUTPUT_DSI; | ||||
| diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
 | ||||
| index 9985bb209512..8ae3dd5f8d29 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_ddi.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_ddi.c
 | ||||
| @@ -3611,6 +3611,8 @@ static void intel_ddi_update_pipe_dp(struct intel_encoder *encoder,
 | ||||
|   | ||||
|  	intel_psr_enable(intel_dp, crtc_state); | ||||
|  	intel_edp_drrs_enable(intel_dp, crtc_state); | ||||
| +
 | ||||
| +	intel_panel_update_backlight(encoder, crtc_state, conn_state);
 | ||||
|  } | ||||
|   | ||||
|  static void intel_ddi_update_pipe(struct intel_encoder *encoder, | ||||
| diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| index dd86c341dbe4..cc74caf1f7b5 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_dp.c
 | ||||
| @@ -6910,6 +6910,7 @@ bool intel_dp_init(struct drm_i915_private *dev_priv,
 | ||||
|  	intel_encoder->compute_config = intel_dp_compute_config; | ||||
|  	intel_encoder->get_hw_state = intel_dp_get_hw_state; | ||||
|  	intel_encoder->get_config = intel_dp_get_config; | ||||
| +	intel_encoder->update_pipe = intel_panel_update_backlight;
 | ||||
|  	intel_encoder->suspend = intel_dp_encoder_suspend; | ||||
|  	if (IS_CHERRYVIEW(dev_priv)) { | ||||
|  		intel_encoder->pre_pll_enable = chv_dp_pre_pll_enable; | ||||
| diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| index 5162aa2841d1..e4791ae65de1 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_drv.h
 | ||||
| @@ -2017,6 +2017,9 @@ int intel_panel_setup_backlight(struct drm_connector *connector,
 | ||||
|  				enum pipe pipe); | ||||
|  void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state, | ||||
|  				  const struct drm_connector_state *conn_state); | ||||
| +void intel_panel_update_backlight(struct intel_encoder *encoder,
 | ||||
| +				  const struct intel_crtc_state *crtc_state,
 | ||||
| +				  const struct drm_connector_state *conn_state);
 | ||||
|  void intel_panel_disable_backlight(const struct drm_connector_state *old_conn_state); | ||||
|  extern struct drm_display_mode *intel_find_panel_downclock( | ||||
|  				struct drm_i915_private *dev_priv, | ||||
| diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
 | ||||
| index e6c5d985ea0a..d868298eacf8 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_lvds.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_lvds.c
 | ||||
| @@ -909,6 +909,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
 | ||||
|  	} | ||||
|  	intel_encoder->get_hw_state = intel_lvds_get_hw_state; | ||||
|  	intel_encoder->get_config = intel_lvds_get_config; | ||||
| +	intel_encoder->update_pipe = intel_panel_update_backlight;
 | ||||
|  	intel_connector->get_hw_state = intel_connector_get_hw_state; | ||||
|   | ||||
|  	intel_connector_attach_encoder(intel_connector, intel_encoder); | ||||
| diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
 | ||||
| index e6cd7b55c018..fc8d372f43d6 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_panel.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_panel.c
 | ||||
| @@ -1087,20 +1087,11 @@ static void pwm_enable_backlight(const struct intel_crtc_state *crtc_state,
 | ||||
|  	intel_panel_actually_set_backlight(conn_state, panel->backlight.level); | ||||
|  } | ||||
|   | ||||
| -void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state,
 | ||||
| -				  const struct drm_connector_state *conn_state)
 | ||||
| +static void __intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state,
 | ||||
| +					   const struct drm_connector_state *conn_state)
 | ||||
|  { | ||||
|  	struct intel_connector *connector = to_intel_connector(conn_state->connector); | ||||
| -	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
 | ||||
|  	struct intel_panel *panel = &connector->panel; | ||||
| -	enum pipe pipe = to_intel_crtc(crtc_state->base.crtc)->pipe;
 | ||||
| -
 | ||||
| -	if (!panel->backlight.present)
 | ||||
| -		return;
 | ||||
| -
 | ||||
| -	DRM_DEBUG_KMS("pipe %c\n", pipe_name(pipe));
 | ||||
| -
 | ||||
| -	mutex_lock(&dev_priv->backlight_lock);
 | ||||
|   | ||||
|  	WARN_ON(panel->backlight.max == 0); | ||||
|   | ||||
| @@ -1117,6 +1108,24 @@ void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state,
 | ||||
|  	panel->backlight.enabled = true; | ||||
|  	if (panel->backlight.device) | ||||
|  		panel->backlight.device->props.power = FB_BLANK_UNBLANK; | ||||
| +}
 | ||||
| +
 | ||||
| +void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state,
 | ||||
| +				  const struct drm_connector_state *conn_state)
 | ||||
| +{
 | ||||
| +	struct intel_connector *connector = to_intel_connector(conn_state->connector);
 | ||||
| +	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
 | ||||
| +	struct intel_panel *panel = &connector->panel;
 | ||||
| +	enum pipe pipe = to_intel_crtc(crtc_state->base.crtc)->pipe;
 | ||||
| +
 | ||||
| +	if (!panel->backlight.present)
 | ||||
| +		return;
 | ||||
| +
 | ||||
| +	DRM_DEBUG_KMS("pipe %c\n", pipe_name(pipe));
 | ||||
| +
 | ||||
| +	mutex_lock(&dev_priv->backlight_lock);
 | ||||
| +
 | ||||
| +	__intel_panel_enable_backlight(crtc_state, conn_state);
 | ||||
|   | ||||
|  	mutex_unlock(&dev_priv->backlight_lock); | ||||
|  } | ||||
| @@ -1773,6 +1782,24 @@ static int pwm_setup_backlight(struct intel_connector *connector,
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +void intel_panel_update_backlight(struct intel_encoder *encoder,
 | ||||
| +				  const struct intel_crtc_state *crtc_state,
 | ||||
| +				  const struct drm_connector_state *conn_state)
 | ||||
| +{
 | ||||
| +	struct intel_connector *connector = to_intel_connector(conn_state->connector);
 | ||||
| +	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
 | ||||
| +	struct intel_panel *panel = &connector->panel;
 | ||||
| +
 | ||||
| +	if (!panel->backlight.present)
 | ||||
| +		return;
 | ||||
| +
 | ||||
| +	mutex_lock(&dev_priv->backlight_lock);
 | ||||
| +	if (!panel->backlight.enabled)
 | ||||
| +		__intel_panel_enable_backlight(crtc_state, conn_state);
 | ||||
| +
 | ||||
| +	mutex_unlock(&dev_priv->backlight_lock);
 | ||||
| +}
 | ||||
| +
 | ||||
|  int intel_panel_setup_backlight(struct drm_connector *connector, enum pipe pipe) | ||||
|  { | ||||
|  	struct drm_i915_private *dev_priv = to_i915(connector->dev); | ||||
| diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
 | ||||
| index 4aab714235fa..0cfd91232fe7 100644
 | ||||
| --- a/drivers/gpu/drm/i915/vlv_dsi.c
 | ||||
| +++ b/drivers/gpu/drm/i915/vlv_dsi.c
 | ||||
| @@ -1694,6 +1694,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
 | ||||
|  	intel_encoder->post_disable = intel_dsi_post_disable; | ||||
|  	intel_encoder->get_hw_state = intel_dsi_get_hw_state; | ||||
|  	intel_encoder->get_config = intel_dsi_get_config; | ||||
| +	intel_encoder->update_pipe = intel_panel_update_backlight;
 | ||||
|   | ||||
|  	intel_connector->get_hw_state = intel_connector_get_hw_state; | ||||
|   | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
| From 51564ca5e898f2297a571a997d98f3b462634991 Mon Sep 17 00:00:00 2001 | ||||
| From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Date: Tue, 8 Jan 2019 17:08:39 +0100 | ||||
| Subject: [PATCH 2/4] drm/i915/backlight: Fix backlight takeover on LPT, v3. | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| On lynxpoint the bios sometimes sets up the backlight using the CPU | ||||
| display, but the driver expects using the PWM PCH override register. | ||||
| 
 | ||||
| Read the value from the CPU register, then convert it to the other | ||||
| units by converting from the old duty cycle, to freq, to the new units. | ||||
| 
 | ||||
| This value is then programmed in the override register, after which | ||||
| we set the override and disable the CPU display control. This allows | ||||
| us to switch the source without flickering, and make the backlight | ||||
| controls work in the driver. | ||||
| 
 | ||||
| Changes since v1: | ||||
| - Read BLC_PWM_CPU_CTL2 to cpu_ctl2.
 | ||||
| - Clean up cpu_mode if slightly.
 | ||||
| - Always disable BLM_PWM_ENABLE in cpu_ctl2.
 | ||||
| Changes since v2: | ||||
| - Simplify cpu_mode handling (Jani)
 | ||||
| 
 | ||||
| Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108225 | ||||
| Cc: Basil Eric Rabi <ericbasil.rabi@gmail.com> | ||||
| Cc: Hans de Goede <jwrdegoede@fedoraproject.org> | ||||
| Cc: Tolga Cakir <cevelnet@gmail.com> | ||||
| Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> | ||||
| Tested-by: Tolga Cakir <cevelnet@gmail.com> | ||||
| Cc: Jani Nikula <jani.nikula@linux.intel.com> | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/intel_panel.c | 26 ++++++++++++++++++++++---- | ||||
|  1 file changed, 22 insertions(+), 4 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
 | ||||
| index fc8d372f43d6..c4881c43888d 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_panel.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_panel.c
 | ||||
| @@ -1493,8 +1493,8 @@ static int lpt_setup_backlight(struct intel_connector *connector, enum pipe unus
 | ||||
|  { | ||||
|  	struct drm_i915_private *dev_priv = to_i915(connector->base.dev); | ||||
|  	struct intel_panel *panel = &connector->panel; | ||||
| -	u32 pch_ctl1, pch_ctl2, val;
 | ||||
| -	bool alt;
 | ||||
| +	u32 cpu_ctl2, pch_ctl1, pch_ctl2, val;
 | ||||
| +	bool alt, cpu_mode;
 | ||||
|   | ||||
|  	if (HAS_PCH_LPT(dev_priv)) | ||||
|  		alt = I915_READ(SOUTH_CHICKEN2) & LPT_PWM_GRANULARITY; | ||||
| @@ -1508,6 +1508,8 @@ static int lpt_setup_backlight(struct intel_connector *connector, enum pipe unus
 | ||||
|  	pch_ctl2 = I915_READ(BLC_PWM_PCH_CTL2); | ||||
|  	panel->backlight.max = pch_ctl2 >> 16; | ||||
|   | ||||
| +	cpu_ctl2 = I915_READ(BLC_PWM_CPU_CTL2);
 | ||||
| +
 | ||||
|  	if (!panel->backlight.max) | ||||
|  		panel->backlight.max = get_backlight_max_vbt(connector); | ||||
|   | ||||
| @@ -1516,12 +1518,28 @@ static int lpt_setup_backlight(struct intel_connector *connector, enum pipe unus
 | ||||
|   | ||||
|  	panel->backlight.min = get_backlight_min_vbt(connector); | ||||
|   | ||||
| -	val = lpt_get_backlight(connector);
 | ||||
| +	panel->backlight.enabled = pch_ctl1 & BLM_PCH_PWM_ENABLE;
 | ||||
| +
 | ||||
| +	cpu_mode = panel->backlight.enabled && HAS_PCH_LPT(dev_priv) &&
 | ||||
| +		   !(pch_ctl1 & BLM_PCH_OVERRIDE_ENABLE) &&
 | ||||
| +		   (cpu_ctl2 & BLM_PWM_ENABLE);
 | ||||
| +	if (cpu_mode)
 | ||||
| +		val = pch_get_backlight(connector);
 | ||||
| +	else
 | ||||
| +		val = lpt_get_backlight(connector);
 | ||||
|  	val = intel_panel_compute_brightness(connector, val); | ||||
|  	panel->backlight.level = clamp(val, panel->backlight.min, | ||||
|  				       panel->backlight.max); | ||||
|   | ||||
| -	panel->backlight.enabled = pch_ctl1 & BLM_PCH_PWM_ENABLE;
 | ||||
| +	if (cpu_mode) {
 | ||||
| +		DRM_DEBUG_KMS("CPU backlight register was enabled, switching to PCH override\n");
 | ||||
| +
 | ||||
| +		/* Write converted CPU PWM value to PCH override register */
 | ||||
| +		lpt_set_backlight(connector->base.state, panel->backlight.level);
 | ||||
| +		I915_WRITE(BLC_PWM_PCH_CTL1, pch_ctl1 | BLM_PCH_OVERRIDE_ENABLE);
 | ||||
| +
 | ||||
| +		I915_WRITE(BLC_PWM_CPU_CTL2, cpu_ctl2 & ~BLM_PWM_ENABLE);
 | ||||
| +	}
 | ||||
|   | ||||
|  	return 0; | ||||
|  } | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
| From cc3e7fce24f78c2d0a90fd4361640a998180f09e Mon Sep 17 00:00:00 2001 | ||||
| From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Date: Tue, 8 Jan 2019 17:08:40 +0100 | ||||
| Subject: [PATCH 3/4] drm/i915: Enable fastset for non-boot modesets. | ||||
| 
 | ||||
| Now that our state comparison functions are pretty complete, we should | ||||
| enable fastset by default when a modeset can be avoided. Even if we're | ||||
| not completely certain about the inherited state, we can be certain | ||||
| after the first modeset that our sw state matches the hw state. | ||||
| 
 | ||||
| There is one testcase explicitly testing fastset, | ||||
| kms_panel_fitting.atomic-fastset but other testcases do so indirectly | ||||
| because most tests don't clean up the display during exit, or otherwise | ||||
| indirectly preserve mode by doing igt_display_reset or inheriting during | ||||
| init. | ||||
| 
 | ||||
| Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| Cc: Daniel Vetter <daniel.vetter@ffwll.ch> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| [mlankhorst: Use DRM_DEBUG_KMS. (j4ni)] | ||||
| Link: https://patchwork.freedesktop.org/patch/msgid/20190108160842.13396-3-maarten.lankhorst@linux.intel.com | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/intel_display.c | 8 ++++++-- | ||||
|  1 file changed, 6 insertions(+), 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| index 7b502e5dc287..0824b161e4af 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_display.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| @@ -11676,6 +11676,11 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,
 | ||||
|  		(current_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED) && | ||||
|  		!(pipe_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED); | ||||
|   | ||||
| +	if (fixup_inherited && !i915_modparams.fastboot) {
 | ||||
| +		DRM_DEBUG_KMS("initial modeset and fastboot not set\n");
 | ||||
| +		ret = false;
 | ||||
| +	}
 | ||||
| +
 | ||||
|  #define PIPE_CONF_CHECK_X(name) do { \ | ||||
|  	if (current_config->name != pipe_config->name) { \ | ||||
|  		pipe_config_err(adjust, __stringify(name), \ | ||||
| @@ -12699,8 +12704,7 @@ static int intel_atomic_check(struct drm_device *dev,
 | ||||
|  			return ret; | ||||
|  		} | ||||
|   | ||||
| -		if (i915_modparams.fastboot &&
 | ||||
| -		    intel_pipe_config_compare(dev_priv,
 | ||||
| +		if (intel_pipe_config_compare(dev_priv,
 | ||||
|  					to_intel_crtc_state(old_crtc_state), | ||||
|  					pipe_config, true)) { | ||||
|  			crtc_state->mode_changed = false; | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
| From bf964e2afe2d60d8257d41057dcc080685f6bef9 Mon Sep 17 00:00:00 2001 | ||||
| From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Date: Tue, 8 Jan 2019 17:08:41 +0100 | ||||
| Subject: [PATCH 4/4] drm/i915: Make HW readout mark CRTC scaler as in use. | ||||
| 
 | ||||
| This way we don't accidentally double allocate it. | ||||
| Noticed this when I wrote a patch to sanity check all of | ||||
| the scaler state. | ||||
| 
 | ||||
| Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  drivers/gpu/drm/i915/intel_display.c | 1 + | ||||
|  1 file changed, 1 insertion(+) | ||||
| 
 | ||||
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| index 0824b161e4af..4a552eeb591c 100644
 | ||||
| --- a/drivers/gpu/drm/i915/intel_display.c
 | ||||
| +++ b/drivers/gpu/drm/i915/intel_display.c
 | ||||
| @@ -8869,6 +8869,7 @@ static void skylake_get_pfit_config(struct intel_crtc *crtc,
 | ||||
|  			pipe_config->pch_pfit.enabled = true; | ||||
|  			pipe_config->pch_pfit.pos = I915_READ(SKL_PS_WIN_POS(crtc->pipe, i)); | ||||
|  			pipe_config->pch_pfit.size = I915_READ(SKL_PS_WIN_SZ(crtc->pipe, i)); | ||||
| +			scaler_state->scalers[i].in_use = true;
 | ||||
|  			break; | ||||
|  		} | ||||
|  	} | ||||
| -- 
 | ||||
| 2.20.1 | ||||
| 
 | ||||
							
								
								
									
										12
									
								
								kernel.spec
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								kernel.spec
									
									
									
									
									
								
							| @ -603,6 +603,14 @@ Patch505: include-linux-module.h-mark-init-cleanup_module-aliases-as-__cold.patc | ||||
| Patch506: lib-crc32.c-mark-crc32_le_base-__crc32c_le_base-aliases-as-__pure.patch | ||||
| Patch507: 0001-Drop-that-for-now.patch | ||||
| 
 | ||||
| # patches for https://fedoraproject.org/wiki/Changes/FlickerFreeBoot | ||||
| # fixes, queued in -next for merging into 5.1 | ||||
| Patch508: i915-fixes-for-fastboot.patch | ||||
| # fastboot by default on Skylake and newer, queued in -next for merging into 5.1 | ||||
| Patch509: i915-enable-fastboot-on-skylake.patch | ||||
| # fastboot by default on VLV/CHV (BYT/CHT), pending upstream | ||||
| Patch510: i915-enable-fastboot-on-vlv-chv.patch | ||||
| 
 | ||||
| # END OF PATCH DEFINITIONS | ||||
| 
 | ||||
| %endif | ||||
| @ -1876,6 +1884,10 @@ fi | ||||
| # | ||||
| # | ||||
| %changelog | ||||
| * Thu Jan 31 2019 Hans de Goede <hdegoede@redhat.com> | ||||
| - Add patches from -next to enable i915.fastboot by default on Skylake+ for | ||||
|   https://fedoraproject.org/wiki/Changes/FlickerFreeBoot | ||||
| 
 | ||||
| * Wed Jan 30 2019 Laura Abbott <labbott@redhat.com> - 5.0.0-0.rc4.git2.1 | ||||
| - Linux v5.0-rc4-59-g62967898789d | ||||
| 
 | ||||
|  | ||||
| @ -1,3 +1,7 @@ | ||||
| Linux 5.0 rebase notes: | ||||
| - Disable fastboot by defauly for F29 and older, drop: | ||||
|   i915-enable-fastboot-on-skylake.patch and i915-enable-fastboot-on-vlv-chv.patch | ||||
| 
 | ||||
| Linux 4.19 rebase notes: | ||||
| - Turn off CONFIG_AF_KCM | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user