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
next prev 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