intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] drm/i915/hdmi: add debugfs to contorl HDMI bpc
@ 2025-08-06  4:20 Lee Shawn C
  2025-08-06 13:27 ` Jani Nikula
                   ` (15 more replies)
  0 siblings, 16 replies; 32+ messages in thread
From: Lee Shawn C @ 2025-08-06  4:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Lee Shawn C, Shankar Uma

While performing HDMI compliance testing, test equipment may request
different bpc output for signal measurement. However, display driver
typically determines the maximum available bpc based on HW bandwidth.

This patch introduces a new debugfs that allow user to configure
dedicated bpc manually, and making HDMI compliance test much easier.

Cc: Shankar Uma <uma.shankar@intel.com>
Signed-off-by: Lee Shawn C <shawn.c.lee@intel.com>
---
 .../drm/i915/display/intel_display_debugfs.c  | 58 +++++++++++++++++++
 .../drm/i915/display/intel_display_types.h    |  2 +
 drivers/gpu/drm/i915/display/intel_hdmi.c     |  7 +++
 3 files changed, 67 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index ce3f9810c42d..cca115a6f130 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -1208,6 +1208,56 @@ static const struct file_operations i915_dsc_fractional_bpp_fops = {
 	.write = i915_dsc_fractional_bpp_write
 };
 
+static int i915_hdmi_req_bpc_show(struct seq_file *m, void *data)
+{
+	struct intel_connector *connector = m->private;
+
+	seq_printf(m, "request bpc: %u\n", connector->force_hdmi_bpc);
+
+	return 0;
+}
+
+static ssize_t i915_hdmi_req_bpc_write(struct file *file,
+					const char __user *ubuf,
+					size_t len, loff_t *offp)
+{
+	struct seq_file *m = file->private_data;
+	struct intel_connector *intel_connector = m->private;
+	struct intel_display *display = to_intel_display(intel_connector);
+	int new_bpc = 0, ret = 0;
+	char *kbuf;
+	const char *p;
+
+	kbuf = memdup_user_nul(ubuf, len);
+	if (IS_ERR(kbuf))
+		return PTR_ERR(kbuf);
+
+	p = strim(kbuf);
+
+	ret = kstrtoint(p, 0, &new_bpc);
+	if (ret < 0)
+		return -EINVAL;
+
+	switch (new_bpc) {
+	case 0:
+	case 8:
+	case 10:
+	case 12:
+		break;
+	default:
+		drm_dbg(display->drm,
+			"HDMI bpc (%u) may exceed the max value (12)\n", new_bpc);
+		return -EINVAL;
+	}
+
+	intel_connector->force_hdmi_bpc = new_bpc;
+
+	*offp += len;
+	kfree(kbuf);
+	return len;
+}
+DEFINE_SHOW_STORE_ATTRIBUTE(i915_hdmi_req_bpc);
+
 /*
  * Returns the Current CRTC's bpc.
  * Example usage: cat /sys/kernel/debug/dri/0/crtc-0/i915_current_bpc
@@ -1359,6 +1409,13 @@ void intel_connector_debugfs_add(struct intel_connector *connector)
 	    connector_type == DRM_MODE_CONNECTOR_HDMIB)
 		debugfs_create_file("i915_lpsp_capability", 0444, root,
 				    connector, &i915_lpsp_capability_fops);
+
+	if (connector_type == DRM_MODE_CONNECTOR_HDMIA ||
+	    connector_type == DRM_MODE_CONNECTOR_HDMIB) {
+		connector->force_hdmi_bpc = 0;
+		debugfs_create_file("i915_force_hdmi_bpc", 0644, root,
+				    connector, &i915_hdmi_req_bpc_fops);
+	}
 }
 
 /**
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 4d9df803ad47..e1e42d701f68 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -564,6 +564,8 @@ struct intel_connector {
 	struct work_struct modeset_retry_work;
 
 	struct intel_hdcp hdcp;
+
+	u8 force_hdmi_bpc;
 };
 
 struct intel_digital_connector_state {
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index cbee628eb26b..0aa4044e2854 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2118,6 +2118,7 @@ static int intel_hdmi_compute_bpc(struct intel_encoder *encoder,
 				  int clock, bool respect_downstream_limits)
 {
 	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+	struct intel_connector *intel_connector = intel_hdmi->attached_connector;
 	int bpc;
 
 	/*
@@ -2134,6 +2135,12 @@ static int intel_hdmi_compute_bpc(struct intel_encoder *encoder,
 	if (!respect_downstream_limits)
 		bpc = 8;
 
+	/*
+	 * overwrite bpc per user's request
+	 */
+	if (intel_connector->force_hdmi_bpc)
+		bpc = intel_connector->force_hdmi_bpc;
+
 	for (; bpc >= 8; bpc -= 2) {
 		int tmds_clock = intel_hdmi_tmds_clock(clock, bpc,
 						       crtc_state->sink_format);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2025-09-02 10:55 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-06  4:20 [PATCH] drm/i915/hdmi: add debugfs to contorl HDMI bpc Lee Shawn C
2025-08-06 13:27 ` Jani Nikula
2025-08-06 14:05 ` Imre Deak
2025-08-06 14:19   ` Imre Deak
2025-08-06 22:40     ` Lee, Shawn C
2025-08-06 16:31 ` ✓ i915.CI.BAT: success for " Patchwork
2025-08-06 19:15 ` ✓ i915.CI.Full: " Patchwork
2025-08-08  9:16 ` [v2] " Lee Shawn C
2025-08-08  9:39   ` Imre Deak
2025-08-11  6:46     ` Lee, Shawn C
2025-08-14 17:35       ` Imre Deak
2025-08-21  8:20         ` Lee, Shawn C
2025-08-08 10:29 ` ✓ i915.CI.BAT: success for drm/i915/hdmi: add debugfs to contorl HDMI bpc (rev2) Patchwork
2025-08-08 13:22 ` ✗ i915.CI.Full: failure " Patchwork
2025-08-26  7:05 ` [v3] drm/i915/hdmi: add debugfs to contorl HDMI bpc Lee Shawn C
2025-08-26  7:48   ` Jani Nikula
2025-08-26  7:53     ` Lee, Shawn C
2025-08-26  8:01 ` [v4] " Lee Shawn C
2025-08-27  9:23   ` Imre Deak
2025-08-26  8:13 ` ✗ i915.CI.BAT: failure for drm/i915/hdmi: add debugfs to contorl HDMI bpc (rev3) Patchwork
2025-08-26 11:29 ` ✓ i915.CI.BAT: success for drm/i915/hdmi: add debugfs to contorl HDMI bpc (rev4) Patchwork
2025-08-26 17:23 ` ✓ i915.CI.Full: " Patchwork
2025-08-28  8:06 ` [PATCH 1/2] drm/i915/hdmi: add debugfs to contorl HDMI bpc Lee Shawn C
2025-08-28  8:06   ` [PATCH 2/2] drm/i915: compute pipe bpp from link bandwidth management Lee Shawn C
2025-08-28 14:10     ` Imre Deak
2025-08-28 14:03   ` [PATCH 1/2] drm/i915/hdmi: add debugfs to contorl HDMI bpc Imre Deak
2025-09-01  5:57 ` [PATCH 0/2] drm/i915: control HDMI output bpc Lee Shawn C
2025-09-01  5:57   ` [PATCH 1/2] drm/i915/hdmi: add debugfs to contorl HDMI bpc Lee Shawn C
2025-09-01  5:57   ` [PATCH 2/2] drm/i915: compute pipe bpp from link bandwidth management Lee Shawn C
2025-09-01  8:30 ` ✓ i915.CI.BAT: success for drm/i915/hdmi: add debugfs to contorl HDMI bpc (rev7) Patchwork
2025-09-01 11:12 ` ✓ i915.CI.Full: " Patchwork
2025-09-02 10:55   ` Imre Deak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).