All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Lyude Paul <lyude@redhat.com>
Cc: David Airlie <airlied@linux.ie>,
	nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	Lucas De Marchi <lucas.demarchi@intel.com>,
	open list <linux-kernel@vger.kernel.org>,
	dri-devel@lists.freedesktop.org,
	Sean Paul <seanpaul@chromium.org>,
	Dave Airlie <airlied@redhat.com>
Subject: Re: [Intel-gfx] [RFC v3 06/10] drm/i915/dpcd_bl: Cache some backlight capabilities in intel_panel.backlight
Date: Mon, 8 Feb 2021 06:13:47 -0500	[thread overview]
Message-ID: <20210208111347.GB4798@intel.com> (raw)
In-Reply-To: <20210205234515.1216538-7-lyude@redhat.com>

On Fri, Feb 05, 2021 at 06:45:10PM -0500, Lyude Paul wrote:
> Since we're about to be moving this code into shared DRM helpers, we might
> as well start to cache certain backlight capabilities that can be
> determined from the EDP DPCD, and are likely to be relevant to the majority
> of drivers using said helpers. The main purpose of this is just to prevent
> every driver from having to check everything against the eDP DPCD using DP
> macros, which makes the code slightly easier to read (especially since the
> names of some of the eDP capabilities don't exactly match up with what we
> actually need to use them for, like DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT
> for instance).
> 
> Signed-off-by: Lyude Paul <lyude@redhat.com>

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> ---
>  .../drm/i915/display/intel_display_types.h    |  2 ++
>  .../drm/i915/display/intel_dp_aux_backlight.c | 29 ++++++++++++-------
>  2 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index f4b26e1dbaaf..16824eb3ef93 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -265,6 +265,8 @@ struct intel_panel {
>  			struct {
>  				u8 pwmgen_bit_count;
>  				u8 pwm_freq_pre_divider;
> +				bool lsb_reg_used;
> +				bool aux_enable;
>  			} vesa;
>  			struct {
>  				bool sdr_uses_aux;
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> index 95e3e344cf40..f5ae2fb34c1f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -270,13 +270,14 @@ intel_dp_aux_hdr_setup_backlight(struct intel_connector *connector, enum pipe pi
>  }
>  
>  /* VESA backlight callbacks */
> -static void set_vesa_backlight_enable(struct intel_dp *intel_dp, bool enable)
> +static void set_vesa_backlight_enable(struct intel_connector *connector, bool enable)
>  {
> +	struct intel_dp *intel_dp = intel_attached_dp(connector);
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	u8 reg_val = 0;
>  
>  	/* Early return when display use other mechanism to enable backlight. */
> -	if (!(intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP))
> +	if (!connector->panel.backlight.edp.vesa.aux_enable)
>  		return;
>  
>  	if (drm_dp_dpcd_readb(&intel_dp->aux, DP_EDP_DISPLAY_CONTROL_REGISTER, &reg_val) != 1) {
> @@ -339,9 +340,11 @@ static u32 intel_dp_aux_vesa_get_backlight(struct intel_connector *connector, en
>  			    DP_EDP_BACKLIGHT_BRIGHTNESS_MSB);
>  		return 0;
>  	}
> -	level = read_val[0];
> -	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
> +
> +	if (connector->panel.backlight.edp.vesa.lsb_reg_used)
>  		level = (read_val[0] << 8 | read_val[1]);
> +	else
> +		level = read_val[0];
>  
>  	return level;
>  }
> @@ -359,13 +362,14 @@ intel_dp_aux_vesa_set_backlight(const struct drm_connector_state *conn_state,
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	u8 vals[2] = { 0x0 };
>  
> -	vals[0] = level;
> -
>  	/* Write the MSB and/or LSB */
> -	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT) {
> +	if (connector->panel.backlight.edp.vesa.lsb_reg_used) {
>  		vals[0] = (level & 0xFF00) >> 8;
>  		vals[1] = (level & 0xFF);
> +	} else {
> +		vals[0] = level;
>  	}
> +
>  	if (drm_dp_dpcd_write(&intel_dp->aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, vals,
>  			      sizeof(vals)) != sizeof(vals)) {
>  		drm_dbg_kms(&i915->drm,
> @@ -419,14 +423,13 @@ intel_dp_aux_vesa_enable_backlight(const struct intel_crtc_state *crtc_state,
>  	}
>  
>  	intel_dp_aux_vesa_set_backlight(conn_state, level);
> -	set_vesa_backlight_enable(intel_dp, true);
> +	set_vesa_backlight_enable(connector, true);
>  }
>  
>  static void intel_dp_aux_vesa_disable_backlight(const struct drm_connector_state *old_conn_state,
>  						u32 level)
>  {
> -	set_vesa_backlight_enable(enc_to_intel_dp(to_intel_encoder(old_conn_state->best_encoder)),
> -				  false);
> +	set_vesa_backlight_enable(to_intel_connector(old_conn_state->connector), false);
>  }
>  
>  /*
> @@ -524,8 +527,14 @@ static u32 intel_dp_aux_vesa_calc_max_backlight(struct intel_connector *connecto
>  static int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector,
>  					     enum pipe pipe)
>  {
> +	struct intel_dp *intel_dp = intel_attached_dp(connector);
>  	struct intel_panel *panel = &connector->panel;
>  
> +	if (intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP)
> +		panel->backlight.edp.vesa.aux_enable = true;
> +	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
> +		panel->backlight.edp.vesa.lsb_reg_used = true;
> +
>  	panel->backlight.max = intel_dp_aux_vesa_calc_max_backlight(connector);
>  	if (!panel->backlight.max)
>  		return -ENODEV;
> -- 
> 2.29.2
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

WARNING: multiple messages have this Message-ID (diff)
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Lyude Paul <lyude@redhat.com>
Cc: David Airlie <airlied@linux.ie>,
	nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	Lucas De Marchi <lucas.demarchi@intel.com>,
	open list <linux-kernel@vger.kernel.org>,
	dri-devel@lists.freedesktop.org,
	Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>,
	Manasi Navare <manasi.d.navare@intel.com>,
	Uma Shankar <uma.shankar@intel.com>,
	Sean Paul <seanpaul@chromium.org>,
	Anshuman Gupta <anshuman.gupta@intel.com>,
	Dave Airlie <airlied@redhat.com>
Subject: Re: [Nouveau] [RFC v3 06/10] drm/i915/dpcd_bl: Cache some backlight capabilities in intel_panel.backlight
Date: Mon, 8 Feb 2021 06:13:47 -0500	[thread overview]
Message-ID: <20210208111347.GB4798@intel.com> (raw)
In-Reply-To: <20210205234515.1216538-7-lyude@redhat.com>

On Fri, Feb 05, 2021 at 06:45:10PM -0500, Lyude Paul wrote:
> Since we're about to be moving this code into shared DRM helpers, we might
> as well start to cache certain backlight capabilities that can be
> determined from the EDP DPCD, and are likely to be relevant to the majority
> of drivers using said helpers. The main purpose of this is just to prevent
> every driver from having to check everything against the eDP DPCD using DP
> macros, which makes the code slightly easier to read (especially since the
> names of some of the eDP capabilities don't exactly match up with what we
> actually need to use them for, like DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT
> for instance).
> 
> Signed-off-by: Lyude Paul <lyude@redhat.com>

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> ---
>  .../drm/i915/display/intel_display_types.h    |  2 ++
>  .../drm/i915/display/intel_dp_aux_backlight.c | 29 ++++++++++++-------
>  2 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index f4b26e1dbaaf..16824eb3ef93 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -265,6 +265,8 @@ struct intel_panel {
>  			struct {
>  				u8 pwmgen_bit_count;
>  				u8 pwm_freq_pre_divider;
> +				bool lsb_reg_used;
> +				bool aux_enable;
>  			} vesa;
>  			struct {
>  				bool sdr_uses_aux;
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> index 95e3e344cf40..f5ae2fb34c1f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -270,13 +270,14 @@ intel_dp_aux_hdr_setup_backlight(struct intel_connector *connector, enum pipe pi
>  }
>  
>  /* VESA backlight callbacks */
> -static void set_vesa_backlight_enable(struct intel_dp *intel_dp, bool enable)
> +static void set_vesa_backlight_enable(struct intel_connector *connector, bool enable)
>  {
> +	struct intel_dp *intel_dp = intel_attached_dp(connector);
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	u8 reg_val = 0;
>  
>  	/* Early return when display use other mechanism to enable backlight. */
> -	if (!(intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP))
> +	if (!connector->panel.backlight.edp.vesa.aux_enable)
>  		return;
>  
>  	if (drm_dp_dpcd_readb(&intel_dp->aux, DP_EDP_DISPLAY_CONTROL_REGISTER, &reg_val) != 1) {
> @@ -339,9 +340,11 @@ static u32 intel_dp_aux_vesa_get_backlight(struct intel_connector *connector, en
>  			    DP_EDP_BACKLIGHT_BRIGHTNESS_MSB);
>  		return 0;
>  	}
> -	level = read_val[0];
> -	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
> +
> +	if (connector->panel.backlight.edp.vesa.lsb_reg_used)
>  		level = (read_val[0] << 8 | read_val[1]);
> +	else
> +		level = read_val[0];
>  
>  	return level;
>  }
> @@ -359,13 +362,14 @@ intel_dp_aux_vesa_set_backlight(const struct drm_connector_state *conn_state,
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	u8 vals[2] = { 0x0 };
>  
> -	vals[0] = level;
> -
>  	/* Write the MSB and/or LSB */
> -	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT) {
> +	if (connector->panel.backlight.edp.vesa.lsb_reg_used) {
>  		vals[0] = (level & 0xFF00) >> 8;
>  		vals[1] = (level & 0xFF);
> +	} else {
> +		vals[0] = level;
>  	}
> +
>  	if (drm_dp_dpcd_write(&intel_dp->aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, vals,
>  			      sizeof(vals)) != sizeof(vals)) {
>  		drm_dbg_kms(&i915->drm,
> @@ -419,14 +423,13 @@ intel_dp_aux_vesa_enable_backlight(const struct intel_crtc_state *crtc_state,
>  	}
>  
>  	intel_dp_aux_vesa_set_backlight(conn_state, level);
> -	set_vesa_backlight_enable(intel_dp, true);
> +	set_vesa_backlight_enable(connector, true);
>  }
>  
>  static void intel_dp_aux_vesa_disable_backlight(const struct drm_connector_state *old_conn_state,
>  						u32 level)
>  {
> -	set_vesa_backlight_enable(enc_to_intel_dp(to_intel_encoder(old_conn_state->best_encoder)),
> -				  false);
> +	set_vesa_backlight_enable(to_intel_connector(old_conn_state->connector), false);
>  }
>  
>  /*
> @@ -524,8 +527,14 @@ static u32 intel_dp_aux_vesa_calc_max_backlight(struct intel_connector *connecto
>  static int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector,
>  					     enum pipe pipe)
>  {
> +	struct intel_dp *intel_dp = intel_attached_dp(connector);
>  	struct intel_panel *panel = &connector->panel;
>  
> +	if (intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP)
> +		panel->backlight.edp.vesa.aux_enable = true;
> +	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
> +		panel->backlight.edp.vesa.lsb_reg_used = true;
> +
>  	panel->backlight.max = intel_dp_aux_vesa_calc_max_backlight(connector);
>  	if (!panel->backlight.max)
>  		return -ENODEV;
> -- 
> 2.29.2
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

WARNING: multiple messages have this Message-ID (diff)
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Lyude Paul <lyude@redhat.com>
Cc: David Airlie <airlied@linux.ie>,
	nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	Lucas De Marchi <lucas.demarchi@intel.com>,
	open list <linux-kernel@vger.kernel.org>,
	dri-devel@lists.freedesktop.org,
	Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>,
	Manasi Navare <manasi.d.navare@intel.com>,
	Uma Shankar <uma.shankar@intel.com>,
	Sean Paul <seanpaul@chromium.org>,
	Anshuman Gupta <anshuman.gupta@intel.com>,
	Dave Airlie <airlied@redhat.com>
Subject: Re: [RFC v3 06/10] drm/i915/dpcd_bl: Cache some backlight capabilities in intel_panel.backlight
Date: Mon, 8 Feb 2021 06:13:47 -0500	[thread overview]
Message-ID: <20210208111347.GB4798@intel.com> (raw)
In-Reply-To: <20210205234515.1216538-7-lyude@redhat.com>

On Fri, Feb 05, 2021 at 06:45:10PM -0500, Lyude Paul wrote:
> Since we're about to be moving this code into shared DRM helpers, we might
> as well start to cache certain backlight capabilities that can be
> determined from the EDP DPCD, and are likely to be relevant to the majority
> of drivers using said helpers. The main purpose of this is just to prevent
> every driver from having to check everything against the eDP DPCD using DP
> macros, which makes the code slightly easier to read (especially since the
> names of some of the eDP capabilities don't exactly match up with what we
> actually need to use them for, like DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT
> for instance).
> 
> Signed-off-by: Lyude Paul <lyude@redhat.com>

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> ---
>  .../drm/i915/display/intel_display_types.h    |  2 ++
>  .../drm/i915/display/intel_dp_aux_backlight.c | 29 ++++++++++++-------
>  2 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index f4b26e1dbaaf..16824eb3ef93 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -265,6 +265,8 @@ struct intel_panel {
>  			struct {
>  				u8 pwmgen_bit_count;
>  				u8 pwm_freq_pre_divider;
> +				bool lsb_reg_used;
> +				bool aux_enable;
>  			} vesa;
>  			struct {
>  				bool sdr_uses_aux;
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> index 95e3e344cf40..f5ae2fb34c1f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -270,13 +270,14 @@ intel_dp_aux_hdr_setup_backlight(struct intel_connector *connector, enum pipe pi
>  }
>  
>  /* VESA backlight callbacks */
> -static void set_vesa_backlight_enable(struct intel_dp *intel_dp, bool enable)
> +static void set_vesa_backlight_enable(struct intel_connector *connector, bool enable)
>  {
> +	struct intel_dp *intel_dp = intel_attached_dp(connector);
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	u8 reg_val = 0;
>  
>  	/* Early return when display use other mechanism to enable backlight. */
> -	if (!(intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP))
> +	if (!connector->panel.backlight.edp.vesa.aux_enable)
>  		return;
>  
>  	if (drm_dp_dpcd_readb(&intel_dp->aux, DP_EDP_DISPLAY_CONTROL_REGISTER, &reg_val) != 1) {
> @@ -339,9 +340,11 @@ static u32 intel_dp_aux_vesa_get_backlight(struct intel_connector *connector, en
>  			    DP_EDP_BACKLIGHT_BRIGHTNESS_MSB);
>  		return 0;
>  	}
> -	level = read_val[0];
> -	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
> +
> +	if (connector->panel.backlight.edp.vesa.lsb_reg_used)
>  		level = (read_val[0] << 8 | read_val[1]);
> +	else
> +		level = read_val[0];
>  
>  	return level;
>  }
> @@ -359,13 +362,14 @@ intel_dp_aux_vesa_set_backlight(const struct drm_connector_state *conn_state,
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	u8 vals[2] = { 0x0 };
>  
> -	vals[0] = level;
> -
>  	/* Write the MSB and/or LSB */
> -	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT) {
> +	if (connector->panel.backlight.edp.vesa.lsb_reg_used) {
>  		vals[0] = (level & 0xFF00) >> 8;
>  		vals[1] = (level & 0xFF);
> +	} else {
> +		vals[0] = level;
>  	}
> +
>  	if (drm_dp_dpcd_write(&intel_dp->aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, vals,
>  			      sizeof(vals)) != sizeof(vals)) {
>  		drm_dbg_kms(&i915->drm,
> @@ -419,14 +423,13 @@ intel_dp_aux_vesa_enable_backlight(const struct intel_crtc_state *crtc_state,
>  	}
>  
>  	intel_dp_aux_vesa_set_backlight(conn_state, level);
> -	set_vesa_backlight_enable(intel_dp, true);
> +	set_vesa_backlight_enable(connector, true);
>  }
>  
>  static void intel_dp_aux_vesa_disable_backlight(const struct drm_connector_state *old_conn_state,
>  						u32 level)
>  {
> -	set_vesa_backlight_enable(enc_to_intel_dp(to_intel_encoder(old_conn_state->best_encoder)),
> -				  false);
> +	set_vesa_backlight_enable(to_intel_connector(old_conn_state->connector), false);
>  }
>  
>  /*
> @@ -524,8 +527,14 @@ static u32 intel_dp_aux_vesa_calc_max_backlight(struct intel_connector *connecto
>  static int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector,
>  					     enum pipe pipe)
>  {
> +	struct intel_dp *intel_dp = intel_attached_dp(connector);
>  	struct intel_panel *panel = &connector->panel;
>  
> +	if (intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP)
> +		panel->backlight.edp.vesa.aux_enable = true;
> +	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
> +		panel->backlight.edp.vesa.lsb_reg_used = true;
> +
>  	panel->backlight.max = intel_dp_aux_vesa_calc_max_backlight(connector);
>  	if (!panel->backlight.max)
>  		return -ENODEV;
> -- 
> 2.29.2
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

WARNING: multiple messages have this Message-ID (diff)
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Lyude Paul <lyude@redhat.com>
Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org,
	intel-gfx@lists.freedesktop.org, David Airlie <airlied@linux.ie>,
	Anshuman Gupta <anshuman.gupta@intel.com>,
	Lucas De Marchi <lucas.demarchi@intel.com>,
	open list <linux-kernel@vger.kernel.org>,
	Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>,
	Manasi Navare <manasi.d.navare@intel.com>,
	Uma Shankar <uma.shankar@intel.com>,
	Sean Paul <seanpaul@chromium.org>,
	Dave Airlie <airlied@redhat.com>
Subject: Re: [RFC v3 06/10] drm/i915/dpcd_bl: Cache some backlight capabilities in intel_panel.backlight
Date: Mon, 8 Feb 2021 06:13:47 -0500	[thread overview]
Message-ID: <20210208111347.GB4798@intel.com> (raw)
In-Reply-To: <20210205234515.1216538-7-lyude@redhat.com>

On Fri, Feb 05, 2021 at 06:45:10PM -0500, Lyude Paul wrote:
> Since we're about to be moving this code into shared DRM helpers, we might
> as well start to cache certain backlight capabilities that can be
> determined from the EDP DPCD, and are likely to be relevant to the majority
> of drivers using said helpers. The main purpose of this is just to prevent
> every driver from having to check everything against the eDP DPCD using DP
> macros, which makes the code slightly easier to read (especially since the
> names of some of the eDP capabilities don't exactly match up with what we
> actually need to use them for, like DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT
> for instance).
> 
> Signed-off-by: Lyude Paul <lyude@redhat.com>

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> ---
>  .../drm/i915/display/intel_display_types.h    |  2 ++
>  .../drm/i915/display/intel_dp_aux_backlight.c | 29 ++++++++++++-------
>  2 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index f4b26e1dbaaf..16824eb3ef93 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -265,6 +265,8 @@ struct intel_panel {
>  			struct {
>  				u8 pwmgen_bit_count;
>  				u8 pwm_freq_pre_divider;
> +				bool lsb_reg_used;
> +				bool aux_enable;
>  			} vesa;
>  			struct {
>  				bool sdr_uses_aux;
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> index 95e3e344cf40..f5ae2fb34c1f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -270,13 +270,14 @@ intel_dp_aux_hdr_setup_backlight(struct intel_connector *connector, enum pipe pi
>  }
>  
>  /* VESA backlight callbacks */
> -static void set_vesa_backlight_enable(struct intel_dp *intel_dp, bool enable)
> +static void set_vesa_backlight_enable(struct intel_connector *connector, bool enable)
>  {
> +	struct intel_dp *intel_dp = intel_attached_dp(connector);
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	u8 reg_val = 0;
>  
>  	/* Early return when display use other mechanism to enable backlight. */
> -	if (!(intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP))
> +	if (!connector->panel.backlight.edp.vesa.aux_enable)
>  		return;
>  
>  	if (drm_dp_dpcd_readb(&intel_dp->aux, DP_EDP_DISPLAY_CONTROL_REGISTER, &reg_val) != 1) {
> @@ -339,9 +340,11 @@ static u32 intel_dp_aux_vesa_get_backlight(struct intel_connector *connector, en
>  			    DP_EDP_BACKLIGHT_BRIGHTNESS_MSB);
>  		return 0;
>  	}
> -	level = read_val[0];
> -	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
> +
> +	if (connector->panel.backlight.edp.vesa.lsb_reg_used)
>  		level = (read_val[0] << 8 | read_val[1]);
> +	else
> +		level = read_val[0];
>  
>  	return level;
>  }
> @@ -359,13 +362,14 @@ intel_dp_aux_vesa_set_backlight(const struct drm_connector_state *conn_state,
>  	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>  	u8 vals[2] = { 0x0 };
>  
> -	vals[0] = level;
> -
>  	/* Write the MSB and/or LSB */
> -	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT) {
> +	if (connector->panel.backlight.edp.vesa.lsb_reg_used) {
>  		vals[0] = (level & 0xFF00) >> 8;
>  		vals[1] = (level & 0xFF);
> +	} else {
> +		vals[0] = level;
>  	}
> +
>  	if (drm_dp_dpcd_write(&intel_dp->aux, DP_EDP_BACKLIGHT_BRIGHTNESS_MSB, vals,
>  			      sizeof(vals)) != sizeof(vals)) {
>  		drm_dbg_kms(&i915->drm,
> @@ -419,14 +423,13 @@ intel_dp_aux_vesa_enable_backlight(const struct intel_crtc_state *crtc_state,
>  	}
>  
>  	intel_dp_aux_vesa_set_backlight(conn_state, level);
> -	set_vesa_backlight_enable(intel_dp, true);
> +	set_vesa_backlight_enable(connector, true);
>  }
>  
>  static void intel_dp_aux_vesa_disable_backlight(const struct drm_connector_state *old_conn_state,
>  						u32 level)
>  {
> -	set_vesa_backlight_enable(enc_to_intel_dp(to_intel_encoder(old_conn_state->best_encoder)),
> -				  false);
> +	set_vesa_backlight_enable(to_intel_connector(old_conn_state->connector), false);
>  }
>  
>  /*
> @@ -524,8 +527,14 @@ static u32 intel_dp_aux_vesa_calc_max_backlight(struct intel_connector *connecto
>  static int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector,
>  					     enum pipe pipe)
>  {
> +	struct intel_dp *intel_dp = intel_attached_dp(connector);
>  	struct intel_panel *panel = &connector->panel;
>  
> +	if (intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP)
> +		panel->backlight.edp.vesa.aux_enable = true;
> +	if (intel_dp->edp_dpcd[2] & DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT)
> +		panel->backlight.edp.vesa.lsb_reg_used = true;
> +
>  	panel->backlight.max = intel_dp_aux_vesa_calc_max_backlight(connector);
>  	if (!panel->backlight.max)
>  		return -ENODEV;
> -- 
> 2.29.2
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2021-02-08 11:13 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-05 23:45 [Intel-gfx] [RFC v3 00/10] drm: Extract DPCD backlight helpers from i915, add support in nouveau Lyude Paul
2021-02-05 23:45 ` Lyude Paul
2021-02-05 23:45 ` [Nouveau] " Lyude Paul
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 01/10] drm/nouveau/kms/nv40-/backlight: Assign prop type once Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 02/10] drm/nouveau/kms: Don't probe eDP connectors more then once Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 03/10] drm/i915/dpcd_bl: Remove redundant AUX backlight frequency calculations Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 04/10] drm/i915/dpcd_bl: Handle drm_dpcd_read/write() return values correctly Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-08 11:11   ` [Intel-gfx] " Rodrigo Vivi
2021-02-08 11:11     ` Rodrigo Vivi
2021-02-08 11:11     ` Rodrigo Vivi
2021-02-08 11:11     ` [Nouveau] " Rodrigo Vivi
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 05/10] drm/i915/dpcd_bl: Cleanup intel_dp_aux_vesa_enable_backlight() a bit Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-06  0:07   ` [Intel-gfx] " Ilia Mirkin
2021-02-06  0:07     ` Ilia Mirkin
2021-02-06  0:07     ` Ilia Mirkin
2021-02-06  0:07     ` Ilia Mirkin
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 06/10] drm/i915/dpcd_bl: Cache some backlight capabilities in intel_panel.backlight Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-08 11:13   ` Rodrigo Vivi [this message]
2021-02-08 11:13     ` Rodrigo Vivi
2021-02-08 11:13     ` Rodrigo Vivi
2021-02-08 11:13     ` [Nouveau] " Rodrigo Vivi
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 07/10] drm/i915/dpcd_bl: Move VESA backlight enabling code closer together Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-08 11:14   ` [Intel-gfx] " Rodrigo Vivi
2021-02-08 11:14     ` Rodrigo Vivi
2021-02-08 11:14     ` Rodrigo Vivi
2021-02-08 11:14     ` [Nouveau] " Rodrigo Vivi
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 08/10] drm/i915/dpcd_bl: Return early in vesa_calc_max_backlight if we can't read PWMGEN_BIT_COUNT Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 09/10] drm/i915/dpcd_bl: Print return codes for VESA backlight failures Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-05 23:45 ` [Intel-gfx] [RFC v3 10/10] drm/dp: Extract i915's eDP backlight code into DRM helpers Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` Lyude Paul
2021-02-05 23:45   ` [Nouveau] " Lyude Paul
2021-02-08  8:46   ` [Intel-gfx] " Thomas Zimmermann
2021-02-08  8:46     ` Thomas Zimmermann
2021-02-08  8:46     ` Thomas Zimmermann
2021-02-08  8:46     ` [Nouveau] " Thomas Zimmermann
2021-02-08 23:03     ` [Intel-gfx] " Lyude Paul
2021-02-08 23:03       ` Lyude Paul
2021-02-08 23:03       ` Lyude Paul
2021-02-08 23:03       ` [Nouveau] " Lyude Paul
2021-02-15 18:34       ` [Intel-gfx] " Thomas Zimmermann
2021-02-15 18:34         ` Thomas Zimmermann
2021-02-15 18:34         ` Thomas Zimmermann
2021-02-15 18:34         ` [Nouveau] " Thomas Zimmermann
2021-02-15 20:26         ` [Intel-gfx] " Lyude Paul
2021-02-15 20:26           ` Lyude Paul
2021-02-15 20:26           ` Lyude Paul
2021-02-15 20:26           ` [Nouveau] " Lyude Paul
2021-02-06  2:05 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm: Extract DPCD backlight helpers from i915, add support in nouveau (rev5) Patchwork
2021-02-06  2:36 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-02-06 15:09 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2021-02-08 22:52 ` [Intel-gfx] [RFC v3 00/10] drm: Extract DPCD backlight helpers from i915, add support in nouveau Lyude Paul
2021-02-08 22:52   ` Lyude Paul
2021-02-08 22:52   ` [Nouveau] " Lyude Paul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210208111347.GB4798@intel.com \
    --to=rodrigo.vivi@intel.com \
    --cc=airlied@linux.ie \
    --cc=airlied@redhat.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lucas.demarchi@intel.com \
    --cc=lyude@redhat.com \
    --cc=nouveau@lists.freedesktop.org \
    --cc=seanpaul@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.