All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@intel.com>
To: "Jouni Högander" <jouni.hogander@intel.com>,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org
Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>,
	Roman Li <roman.li@amd.com>,
	Harry Wentland <harry.wentland@amd.com>
Subject: Re: [Intel-gfx] [PATCH v3 2/3] drm/amdgpu_dm: Rely on split out luminance calculation function
Date: Thu, 04 Aug 2022 12:54:42 +0300	[thread overview]
Message-ID: <877d3opc4d.fsf@intel.com> (raw)
In-Reply-To: <20220719095700.14923-3-jouni.hogander@intel.com>

On Tue, 19 Jul 2022, Jouni Högander <jouni.hogander@intel.com> wrote:
> Luminance range calculation was split out into drm_edid.c and is now
> part of edid parsing. Rely on values calculated during edid parsing and
> use these for caps->aux_max_input_signal and caps->aux_min_input_signal.

Harry, I'll merge patches 1 & 3 in this series through drm-misc-next,
because I think they're good to go, and fix stuff in i915.

Can I get your rb/ack to merge this patch as well, or do you want to
take this later via your tree?

BR,
Jani.


>
> v2: Use values calculated during edid parsing
>
> Cc: Roman Li <roman.li@amd.com>
> Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> Cc: Harry Wentland <harry.wentland@amd.com>
> Cc: Lyude Paul <lyude@redhat.com>
> Cc: Mika Kahola <mika.kahola@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 35 +++----------------
>  1 file changed, 4 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 3e83fed540e8..eb7abdeb8653 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -2903,15 +2903,12 @@ static struct drm_mode_config_helper_funcs amdgpu_dm_mode_config_helperfuncs = {
>  
>  static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  {
> -	u32 max_avg, min_cll, max, min, q, r;
>  	struct amdgpu_dm_backlight_caps *caps;
>  	struct amdgpu_display_manager *dm;
>  	struct drm_connector *conn_base;
>  	struct amdgpu_device *adev;
>  	struct dc_link *link = NULL;
> -	static const u8 pre_computed_values[] = {
> -		50, 51, 52, 53, 55, 56, 57, 58, 59, 61, 62, 63, 65, 66, 68, 69,
> -		71, 72, 74, 75, 77, 79, 81, 82, 84, 86, 88, 90, 92, 94, 96, 98};
> +	struct drm_luminance_range_info *luminance_range;
>  	int i;
>  
>  	if (!aconnector || !aconnector->dc_link)
> @@ -2933,8 +2930,6 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  	caps = &dm->backlight_caps[i];
>  	caps->ext_caps = &aconnector->dc_link->dpcd_sink_ext_caps;
>  	caps->aux_support = false;
> -	max_avg = conn_base->hdr_sink_metadata.hdmi_type1.max_fall;
> -	min_cll = conn_base->hdr_sink_metadata.hdmi_type1.min_cll;
>  
>  	if (caps->ext_caps->bits.oled == 1 /*||
>  	    caps->ext_caps->bits.sdr_aux_backlight_control == 1 ||
> @@ -2946,31 +2941,9 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  	else if (amdgpu_backlight == 1)
>  		caps->aux_support = true;
>  
> -	/* From the specification (CTA-861-G), for calculating the maximum
> -	 * luminance we need to use:
> -	 *	Luminance = 50*2**(CV/32)
> -	 * Where CV is a one-byte value.
> -	 * For calculating this expression we may need float point precision;
> -	 * to avoid this complexity level, we take advantage that CV is divided
> -	 * by a constant. From the Euclids division algorithm, we know that CV
> -	 * can be written as: CV = 32*q + r. Next, we replace CV in the
> -	 * Luminance expression and get 50*(2**q)*(2**(r/32)), hence we just
> -	 * need to pre-compute the value of r/32. For pre-computing the values
> -	 * We just used the following Ruby line:
> -	 *	(0...32).each {|cv| puts (50*2**(cv/32.0)).round}
> -	 * The results of the above expressions can be verified at
> -	 * pre_computed_values.
> -	 */
> -	q = max_avg >> 5;
> -	r = max_avg % 32;
> -	max = (1 << q) * pre_computed_values[r];
> -
> -	// min luminance: maxLum * (CV/255)^2 / 100
> -	q = DIV_ROUND_CLOSEST(min_cll, 255);
> -	min = max * DIV_ROUND_CLOSEST((q * q), 100);
> -
> -	caps->aux_max_input_signal = max;
> -	caps->aux_min_input_signal = min;
> +	luminance_range = &conn_base->display_info.luminance_range;
> +	caps->aux_min_input_signal = luminance_range->min_luminance;
> +	caps->aux_max_input_signal = luminance_range->max_luminance;
>  }
>  
>  void amdgpu_dm_update_connector_after_detect(

-- 
Jani Nikula, Intel Open Source Graphics Center

WARNING: multiple messages have this Message-ID (diff)
From: Jani Nikula <jani.nikula@intel.com>
To: "Jouni Högander" <jouni.hogander@intel.com>,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org
Cc: "Rodrigo Siqueira" <Rodrigo.Siqueira@amd.com>,
	"Roman Li" <roman.li@amd.com>,
	"Manasi Navare" <manasi.d.navare@intel.com>,
	"Mika Kahola" <mika.kahola@intel.com>,
	"Jouni Högander" <jouni.hogander@intel.com>
Subject: Re: [PATCH v3 2/3] drm/amdgpu_dm: Rely on split out luminance calculation function
Date: Thu, 04 Aug 2022 12:54:42 +0300	[thread overview]
Message-ID: <877d3opc4d.fsf@intel.com> (raw)
In-Reply-To: <20220719095700.14923-3-jouni.hogander@intel.com>

On Tue, 19 Jul 2022, Jouni Högander <jouni.hogander@intel.com> wrote:
> Luminance range calculation was split out into drm_edid.c and is now
> part of edid parsing. Rely on values calculated during edid parsing and
> use these for caps->aux_max_input_signal and caps->aux_min_input_signal.

Harry, I'll merge patches 1 & 3 in this series through drm-misc-next,
because I think they're good to go, and fix stuff in i915.

Can I get your rb/ack to merge this patch as well, or do you want to
take this later via your tree?

BR,
Jani.


>
> v2: Use values calculated during edid parsing
>
> Cc: Roman Li <roman.li@amd.com>
> Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> Cc: Harry Wentland <harry.wentland@amd.com>
> Cc: Lyude Paul <lyude@redhat.com>
> Cc: Mika Kahola <mika.kahola@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 35 +++----------------
>  1 file changed, 4 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 3e83fed540e8..eb7abdeb8653 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -2903,15 +2903,12 @@ static struct drm_mode_config_helper_funcs amdgpu_dm_mode_config_helperfuncs = {
>  
>  static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  {
> -	u32 max_avg, min_cll, max, min, q, r;
>  	struct amdgpu_dm_backlight_caps *caps;
>  	struct amdgpu_display_manager *dm;
>  	struct drm_connector *conn_base;
>  	struct amdgpu_device *adev;
>  	struct dc_link *link = NULL;
> -	static const u8 pre_computed_values[] = {
> -		50, 51, 52, 53, 55, 56, 57, 58, 59, 61, 62, 63, 65, 66, 68, 69,
> -		71, 72, 74, 75, 77, 79, 81, 82, 84, 86, 88, 90, 92, 94, 96, 98};
> +	struct drm_luminance_range_info *luminance_range;
>  	int i;
>  
>  	if (!aconnector || !aconnector->dc_link)
> @@ -2933,8 +2930,6 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  	caps = &dm->backlight_caps[i];
>  	caps->ext_caps = &aconnector->dc_link->dpcd_sink_ext_caps;
>  	caps->aux_support = false;
> -	max_avg = conn_base->hdr_sink_metadata.hdmi_type1.max_fall;
> -	min_cll = conn_base->hdr_sink_metadata.hdmi_type1.min_cll;
>  
>  	if (caps->ext_caps->bits.oled == 1 /*||
>  	    caps->ext_caps->bits.sdr_aux_backlight_control == 1 ||
> @@ -2946,31 +2941,9 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  	else if (amdgpu_backlight == 1)
>  		caps->aux_support = true;
>  
> -	/* From the specification (CTA-861-G), for calculating the maximum
> -	 * luminance we need to use:
> -	 *	Luminance = 50*2**(CV/32)
> -	 * Where CV is a one-byte value.
> -	 * For calculating this expression we may need float point precision;
> -	 * to avoid this complexity level, we take advantage that CV is divided
> -	 * by a constant. From the Euclids division algorithm, we know that CV
> -	 * can be written as: CV = 32*q + r. Next, we replace CV in the
> -	 * Luminance expression and get 50*(2**q)*(2**(r/32)), hence we just
> -	 * need to pre-compute the value of r/32. For pre-computing the values
> -	 * We just used the following Ruby line:
> -	 *	(0...32).each {|cv| puts (50*2**(cv/32.0)).round}
> -	 * The results of the above expressions can be verified at
> -	 * pre_computed_values.
> -	 */
> -	q = max_avg >> 5;
> -	r = max_avg % 32;
> -	max = (1 << q) * pre_computed_values[r];
> -
> -	// min luminance: maxLum * (CV/255)^2 / 100
> -	q = DIV_ROUND_CLOSEST(min_cll, 255);
> -	min = max * DIV_ROUND_CLOSEST((q * q), 100);
> -
> -	caps->aux_max_input_signal = max;
> -	caps->aux_min_input_signal = min;
> +	luminance_range = &conn_base->display_info.luminance_range;
> +	caps->aux_min_input_signal = luminance_range->min_luminance;
> +	caps->aux_max_input_signal = luminance_range->max_luminance;
>  }
>  
>  void amdgpu_dm_update_connector_after_detect(

-- 
Jani Nikula, Intel Open Source Graphics Center

WARNING: multiple messages have this Message-ID (diff)
From: Jani Nikula <jani.nikula@intel.com>
To: "Jouni Högander" <jouni.hogander@intel.com>,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org
Cc: "Rodrigo Siqueira" <Rodrigo.Siqueira@amd.com>,
	"Roman Li" <roman.li@amd.com>,
	"Manasi Navare" <manasi.d.navare@intel.com>,
	"Mika Kahola" <mika.kahola@intel.com>,
	"Jouni Högander" <jouni.hogander@intel.com>,
	"Harry Wentland" <harry.wentland@amd.com>
Subject: Re: [PATCH v3 2/3] drm/amdgpu_dm: Rely on split out luminance calculation function
Date: Thu, 04 Aug 2022 12:54:42 +0300	[thread overview]
Message-ID: <877d3opc4d.fsf@intel.com> (raw)
In-Reply-To: <20220719095700.14923-3-jouni.hogander@intel.com>

On Tue, 19 Jul 2022, Jouni Högander <jouni.hogander@intel.com> wrote:
> Luminance range calculation was split out into drm_edid.c and is now
> part of edid parsing. Rely on values calculated during edid parsing and
> use these for caps->aux_max_input_signal and caps->aux_min_input_signal.

Harry, I'll merge patches 1 & 3 in this series through drm-misc-next,
because I think they're good to go, and fix stuff in i915.

Can I get your rb/ack to merge this patch as well, or do you want to
take this later via your tree?

BR,
Jani.


>
> v2: Use values calculated during edid parsing
>
> Cc: Roman Li <roman.li@amd.com>
> Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> Cc: Harry Wentland <harry.wentland@amd.com>
> Cc: Lyude Paul <lyude@redhat.com>
> Cc: Mika Kahola <mika.kahola@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 35 +++----------------
>  1 file changed, 4 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 3e83fed540e8..eb7abdeb8653 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -2903,15 +2903,12 @@ static struct drm_mode_config_helper_funcs amdgpu_dm_mode_config_helperfuncs = {
>  
>  static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  {
> -	u32 max_avg, min_cll, max, min, q, r;
>  	struct amdgpu_dm_backlight_caps *caps;
>  	struct amdgpu_display_manager *dm;
>  	struct drm_connector *conn_base;
>  	struct amdgpu_device *adev;
>  	struct dc_link *link = NULL;
> -	static const u8 pre_computed_values[] = {
> -		50, 51, 52, 53, 55, 56, 57, 58, 59, 61, 62, 63, 65, 66, 68, 69,
> -		71, 72, 74, 75, 77, 79, 81, 82, 84, 86, 88, 90, 92, 94, 96, 98};
> +	struct drm_luminance_range_info *luminance_range;
>  	int i;
>  
>  	if (!aconnector || !aconnector->dc_link)
> @@ -2933,8 +2930,6 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  	caps = &dm->backlight_caps[i];
>  	caps->ext_caps = &aconnector->dc_link->dpcd_sink_ext_caps;
>  	caps->aux_support = false;
> -	max_avg = conn_base->hdr_sink_metadata.hdmi_type1.max_fall;
> -	min_cll = conn_base->hdr_sink_metadata.hdmi_type1.min_cll;
>  
>  	if (caps->ext_caps->bits.oled == 1 /*||
>  	    caps->ext_caps->bits.sdr_aux_backlight_control == 1 ||
> @@ -2946,31 +2941,9 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
>  	else if (amdgpu_backlight == 1)
>  		caps->aux_support = true;
>  
> -	/* From the specification (CTA-861-G), for calculating the maximum
> -	 * luminance we need to use:
> -	 *	Luminance = 50*2**(CV/32)
> -	 * Where CV is a one-byte value.
> -	 * For calculating this expression we may need float point precision;
> -	 * to avoid this complexity level, we take advantage that CV is divided
> -	 * by a constant. From the Euclids division algorithm, we know that CV
> -	 * can be written as: CV = 32*q + r. Next, we replace CV in the
> -	 * Luminance expression and get 50*(2**q)*(2**(r/32)), hence we just
> -	 * need to pre-compute the value of r/32. For pre-computing the values
> -	 * We just used the following Ruby line:
> -	 *	(0...32).each {|cv| puts (50*2**(cv/32.0)).round}
> -	 * The results of the above expressions can be verified at
> -	 * pre_computed_values.
> -	 */
> -	q = max_avg >> 5;
> -	r = max_avg % 32;
> -	max = (1 << q) * pre_computed_values[r];
> -
> -	// min luminance: maxLum * (CV/255)^2 / 100
> -	q = DIV_ROUND_CLOSEST(min_cll, 255);
> -	min = max * DIV_ROUND_CLOSEST((q * q), 100);
> -
> -	caps->aux_max_input_signal = max;
> -	caps->aux_min_input_signal = min;
> +	luminance_range = &conn_base->display_info.luminance_range;
> +	caps->aux_min_input_signal = luminance_range->min_luminance;
> +	caps->aux_max_input_signal = luminance_range->max_luminance;
>  }
>  
>  void amdgpu_dm_update_connector_after_detect(

-- 
Jani Nikula, Intel Open Source Graphics Center

  reply	other threads:[~2022-08-04  9:55 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-19  9:56 [PATCH v3 0/3] HDR aux backlight range calculation Jouni Högander
2022-07-19  9:56 ` Jouni Högander
2022-07-19  9:56 ` [Intel-gfx] " Jouni Högander
2022-07-19  9:56 ` [PATCH v3 1/3] drm: New function to get luminance range based on static hdr metadata Jouni Högander
2022-07-19  9:56   ` Jouni Högander
2022-07-19  9:56   ` [Intel-gfx] " Jouni Högander
2022-07-19  9:56 ` [PATCH v3 2/3] drm/amdgpu_dm: Rely on split out luminance calculation function Jouni Högander
2022-07-19  9:56   ` Jouni Högander
2022-07-19  9:56   ` [Intel-gfx] " Jouni Högander
2022-08-04  9:54   ` Jani Nikula [this message]
2022-08-04  9:54     ` Jani Nikula
2022-08-04  9:54     ` Jani Nikula
2022-08-11 17:43     ` [Intel-gfx] " Deucher, Alexander
2022-08-11 17:43       ` Deucher, Alexander
2022-08-11 17:43       ` Deucher, Alexander
2022-08-12  7:04       ` Jani Nikula
2022-08-12  7:04         ` Jani Nikula
2022-08-12  7:04         ` [Intel-gfx] " Jani Nikula
2022-07-19  9:57 ` [PATCH v3 3/3] drm/i915: Use luminance range calculated during edid parsing Jouni Högander
2022-07-19  9:57   ` [Intel-gfx] " Jouni Högander
2022-07-19 14:47 ` [Intel-gfx] ✓ Fi.CI.BAT: success for HDR aux backlight range calculation Patchwork
2022-07-19 23:07 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork

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=877d3opc4d.fsf@intel.com \
    --to=jani.nikula@intel.com \
    --cc=Rodrigo.Siqueira@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=harry.wentland@amd.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jouni.hogander@intel.com \
    --cc=roman.li@amd.com \
    /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.