Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Pranay Samala <pranay.samala@intel.com>,
	intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Cc: chaitanya.kumar.borah@intel.com, sameer.lattannavar@intel.com,
	pranay.samala@intel.com
Subject: Re: [PATCH] drm/i915/debugfs: Add HDR status to i915_display_info
Date: Mon, 07 Sep 2026 13:10:17 +0300	[thread overview]
Message-ID: <4223f91e8a308713ca916a1bba3147321e9b901d@intel.com> (raw)
In-Reply-To: <20260907035831.718916-1-pranay.samala@intel.com>

On Mon, 07 Sep 2026, Pranay Samala <pranay.samala@intel.com> wrote:
> i915_display_info currently shows per-connector state but not HDR status,
> making HDR bringup hard to debug without correlating EDID, userspace,
> and driver state.
>
> Print the sink’s HDR capability from the EDID static metadata block,
> whether userspace has set the HDR_OUTPUT_METADATA property, and whether
> the driver is actually transmitting HDR metadata in the CRTC state. This
> distinguishes between a sink advertising HDR support, a property being
> set by userspace, and the actual HDR infoframe being sent on the wire.
>
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Pranay Samala <pranay.samala@intel.com>
> ---
>  .../drm/i915/display/intel_display_debugfs.c  | 82 +++++++++++++++++++
>  1 file changed, 82 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index 3e302f23f247..a24c947c23de 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -243,6 +243,86 @@ static void intel_hdmi_info(struct seq_file *m,
>  	seq_printf(m, "\taudio support: %s\n", str_yes_no(has_audio));
>  }
>  
> +static const char *intel_hdr_eotf_name(enum hdmi_eotf eotf)
> +{
> +	switch (eotf) {
> +	case HDMI_EOTF_TRADITIONAL_GAMMA_SDR:
> +		return "SDR";
> +	case HDMI_EOTF_TRADITIONAL_GAMMA_HDR:
> +		return "HDR-gamma";
> +	case HDMI_EOTF_SMPTE_ST2084:
> +		return "SMPTE_ST2084";
> +	case HDMI_EOTF_BT_2100_HLG:
> +		return "HLG";
> +	default:
> +		return "unknown";
> +	}
> +}

Maybe add that to hdmi.[ch] instead of a local copy? There's nothing
Intel or i915 specific about this.

> +
> +static void intel_hdr_sink_info(struct seq_file *m,
> +				struct drm_connector *connector)
> +{

If you did

	struct drm_printer p = drm_seq_file_printer(m);

in the caller, and passed struct drm_printer *p here, you could use
drm_printf_indent() and avoid doing that \t stuff everywhere.

Side note, I've got a branch converting the entire file to drm_printer,
but never got around to sending it.


BR,
Jani.


> +	const struct hdr_static_metadata *hdr =
> +		&connector->display_info.hdr_sink_metadata.hdmi_type1;
> +	int i;
> +
> +	seq_printf(m, "\tHDR sink capable: %s\n",
> +		   str_yes_no(hdr->eotf & (BIT(HDMI_EOTF_SMPTE_ST2084) |
> +					   BIT(HDMI_EOTF_BT_2100_HLG))));
> +	if (!hdr->eotf)
> +		return;
> +
> +	seq_puts(m, "\t\tsupported EOTF:");
> +	for (i = HDMI_EOTF_TRADITIONAL_GAMMA_SDR; i <= HDMI_EOTF_BT_2100_HLG; i++)
> +		if (hdr->eotf & BIT(i))
> +			seq_printf(m, " %s", intel_hdr_eotf_name(i));
> +	seq_puts(m, "\n");
> +
> +	seq_printf(m, "\t\tstatic metadata type1: %s\n",
> +		   str_yes_no(hdr->metadata_type & BIT(HDMI_STATIC_METADATA_TYPE1)));
> +	seq_printf(m, "\t\tmax_cll: %u, max_fall: %u, min_cll: %u (EDID coded)\n",
> +		   hdr->max_cll, hdr->max_fall, hdr->min_cll);
> +}
> +
> +static void intel_hdr_output_info(struct seq_file *m,
> +				  struct drm_connector *connector)
> +{
> +	const struct drm_connector_state *conn_state = connector->state;
> +	const struct intel_crtc_state *crtc_state;
> +	const struct hdmi_drm_infoframe *frame;
> +
> +	if (!conn_state || !conn_state->crtc)
> +		return;
> +
> +	crtc_state = to_intel_crtc_state(conn_state->crtc->state);
> +
> +	seq_printf(m, "\tHDR output metadata blob: %s\n",
> +		   str_yes_no(conn_state->hdr_output_metadata));
> +
> +	/* HDMI signals HDR via a DRM InfoFrame, DP via a gamut metadata SDP */
> +	if (!(crtc_state->infoframes.enable &
> +	      (intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_DRM) |
> +	       intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GAMUT_METADATA)))) {
> +		seq_puts(m, "\tHDR output: off\n");
> +		return;
> +	}
> +
> +	frame = &crtc_state->infoframes.drm.drm;
> +
> +	seq_printf(m, "\tHDR output: on, EOTF: %s, metadata type: %d\n",
> +		   intel_hdr_eotf_name(frame->eotf), frame->metadata_type);
> +	seq_printf(m, "\t\tprimaries: r(%u,%u) g(%u,%u) b(%u,%u) wp(%u,%u)\n",
> +		   frame->display_primaries[0].x, frame->display_primaries[0].y,
> +		   frame->display_primaries[1].x, frame->display_primaries[1].y,
> +		   frame->display_primaries[2].x, frame->display_primaries[2].y,
> +		   frame->white_point.x, frame->white_point.y);
> +	seq_printf(m, "\t\tmastering luminance: max %u, min %u\n",
> +		   frame->max_display_mastering_luminance,
> +		   frame->min_display_mastering_luminance);
> +	seq_printf(m, "\t\tmax_cll: %u, max_fall: %u\n",
> +		   frame->max_cll, frame->max_fall);
> +}
> +
>  static void intel_connector_info(struct seq_file *m,
>  				 struct drm_connector *connector)
>  {
> @@ -264,6 +344,7 @@ static void intel_connector_info(struct seq_file *m,
>  	seq_printf(m, "\tsubpixel order: %s\n",
>  		   drm_get_subpixel_order_name(connector->display_info.subpixel_order));
>  	seq_printf(m, "\tCEA rev: %d\n", connector->display_info.cea_rev);
> +	intel_hdr_sink_info(m, connector);
>  
>  	switch (connector->connector_type) {
>  	case DRM_MODE_CONNECTOR_DisplayPort:
> @@ -288,6 +369,7 @@ static void intel_connector_info(struct seq_file *m,
>  	intel_hdcp_info(m, intel_connector);
>  
>  	seq_printf(m, "\tmax bpc: %u\n", connector->display_info.bpc);
> +	intel_hdr_output_info(m, connector);
>  
>  	intel_panel_info(m, intel_connector);

-- 
Jani Nikula, Intel

  parent reply	other threads:[~2026-09-07 10:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-07  3:58 [PATCH] drm/i915/debugfs: Add HDR status to i915_display_info Pranay Samala
2026-09-07  3:52 ` ✓ CI.KUnit: success for " Patchwork
2026-09-07  4:38 ` ✓ Xe.CI.BAT: " Patchwork
2026-09-07  5:40 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-07 10:10 ` Jani Nikula [this message]
2026-09-08  7:35   ` [PATCH] " Samala, Pranay

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=4223f91e8a308713ca916a1bba3147321e9b901d@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=chaitanya.kumar.borah@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=pranay.samala@intel.com \
    --cc=sameer.lattannavar@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox