public inbox for intel-xe@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH 0/6] drm: handle IRQ_HPD events correctly
@ 2026-04-15 23:22 Dmitry Baryshkov
  2026-04-15 23:22 ` [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event() Dmitry Baryshkov
                   ` (8 more replies)
  0 siblings, 9 replies; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-15 23:22 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Tomi Valkeinen,
	Bjorn Andersson, Konrad Dybcio, Pengyu Luo, Nikita Travkin,
	Yongxing Mou
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

Both DisplayPort and HDMI standards define a way for the Sink / display
to notify the Source / host about some kinds of events. In case of HDMI
it's as simple as singnalling changes to the EDID. In case of
DisplayPort it's more complicated and requires actual checking of the
DPCD registers.

Currently USB-C drivers don't have a way to deliver the IRQ_HPD
notifications, leading to missing MST notifications. Provide necessary
plumbing to let IRQ_HPD events be passed to the DisplayPort drivers.

Note: the Yoga C630 UCSI driver and Acer Aspire1 EC driver are not yet
enabled to send the IRQ_HPD events. Both of them would need some more
reverse engineering to find out how the event is being reported by the
EC.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
Dmitry Baryshkov (6):
      drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
      drm/bridge: pass down IRQ_HPD to the drivers
      drm/bridge: aux-hpd: let drivers pass IRQ_HPD events
      drm/msm: dp: handle the IRQ_HPD events reported by USB-C
      soc: qcom: pmic-glink-altmode: pass down HPD_IRQ events
      usb: typec: ucsi: huawei-gaokun: pass down HPD_IRQ events

 drivers/gpu/drm/bridge/aux-hpd-bridge.c        |  9 +++++---
 drivers/gpu/drm/bridge/chrontel-ch7033.c       |  2 +-
 drivers/gpu/drm/bridge/lontium-lt8912b.c       |  2 +-
 drivers/gpu/drm/bridge/lontium-lt9611uxc.c     |  3 ++-
 drivers/gpu/drm/bridge/ti-tfp410.c             |  2 +-
 drivers/gpu/drm/display/drm_bridge_connector.c | 21 ++++++++++--------
 drivers/gpu/drm/drm_bridge.c                   | 18 ++++++++++------
 drivers/gpu/drm/drm_connector.c                |  6 ++++--
 drivers/gpu/drm/i915/display/intel_dp.c        |  3 ++-
 drivers/gpu/drm/meson/meson_encoder_hdmi.c     |  3 ++-
 drivers/gpu/drm/msm/dp/dp_display.c            |  6 +++++-
 drivers/gpu/drm/msm/dp/dp_drm.h                |  3 ++-
 drivers/gpu/drm/omapdrm/dss/hdmi4.c            |  3 ++-
 drivers/soc/qcom/pmic_glink_altmode.c          |  4 +++-
 drivers/usb/typec/altmodes/displayport.c       | 12 +++++++----
 drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c    |  9 ++++----
 include/drm/bridge/aux-bridge.h                | 13 +++++++++--
 include/drm/drm_bridge.h                       | 30 +++++++++++++++++++++-----
 include/drm/drm_connector.h                    |  6 ++++--
 19 files changed, 107 insertions(+), 48 deletions(-)
---
base-commit: 66672af7a095d89f082c5327f3b15bc2f93d558e
change-id: 20260414-hpd-irq-events-e72bc076a5f1

Best regards,
--  
With best wishes
Dmitry


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

* [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
@ 2026-04-15 23:22 ` Dmitry Baryshkov
  2026-04-16  8:10   ` Tomi Valkeinen
  2026-04-15 23:22 ` [PATCH 2/6] drm/bridge: pass down IRQ_HPD to the drivers Dmitry Baryshkov
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-15 23:22 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Tomi Valkeinen,
	Bjorn Andersson, Konrad Dybcio, Pengyu Luo, Nikita Travkin,
	Yongxing Mou
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

The DisplayPort standard defines a special kind of events called IRQ.
These events are used to notify DP Source about the events on the Sink
side. It is extremely important for DP MST handling, where the MST
events are reported through this IRQ.

In case of the USB-C DP AltMode there is no actual HPD pulse, but the
events are ported through the bits in the AltMode VDOs.

Extend the drm_connector_oob_hotplug_event() interface and report IRQ
events to the DisplayPort Sink drivers.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
 drivers/gpu/drm/drm_connector.c          |  4 +++-
 drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
 include/drm/drm_connector.h              |  3 ++-
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 47dc53c4a738..5fdacbd84bd7 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
  * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
  * @connector_fwnode: fwnode_handle to report the event on
  * @status: hot plug detect logical state
+ * @irq_hpd: HPD pulse detected
  *
  * On some hardware a hotplug event notification may come from outside the display
  * driver / device. An example of this is some USB Type-C setups where the hardware
@@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
  * a drm_connector reference through calling drm_connector_find_by_fwnode().
  */
 void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
-				     enum drm_connector_status status)
+				     enum drm_connector_status status,
+				     bool irq_hpd)
 {
 	struct drm_connector *connector;
 
diff --git a/drivers/usb/typec/altmodes/displayport.c b/drivers/usb/typec/altmodes/displayport.c
index 35d9c3086990..0cade62da905 100644
--- a/drivers/usb/typec/altmodes/displayport.c
+++ b/drivers/usb/typec/altmodes/displayport.c
@@ -189,7 +189,8 @@ static int dp_altmode_status_update(struct dp_altmode *dp)
 	} else {
 		drm_connector_oob_hotplug_event(dp->connector_fwnode,
 						hpd ? connector_status_connected :
-						      connector_status_disconnected);
+						      connector_status_disconnected,
+						hpd && irq_hpd);
 		dp->hpd = hpd;
 		sysfs_notify(&dp->alt->dev.kobj, "displayport", "hpd");
 		if (hpd && irq_hpd) {
@@ -212,7 +213,8 @@ static int dp_altmode_configured(struct dp_altmode *dp)
 	 */
 	if (dp->pending_hpd) {
 		drm_connector_oob_hotplug_event(dp->connector_fwnode,
-						connector_status_connected);
+						connector_status_connected,
+						dp->pending_irq_hpd);
 		sysfs_notify(&dp->alt->dev.kobj, "displayport", "hpd");
 		dp->pending_hpd = false;
 		if (dp->pending_irq_hpd) {
@@ -397,7 +399,8 @@ static int dp_altmode_vdm(struct typec_altmode *alt,
 			dp->data.conf = 0;
 			if (dp->hpd) {
 				drm_connector_oob_hotplug_event(dp->connector_fwnode,
-								connector_status_disconnected);
+								connector_status_disconnected,
+								false);
 				dp->hpd = false;
 				sysfs_notify(&dp->alt->dev.kobj, "displayport", "hpd");
 			}
@@ -827,7 +830,8 @@ void dp_altmode_remove(struct typec_altmode *alt)
 
 	if (dp->connector_fwnode) {
 		drm_connector_oob_hotplug_event(dp->connector_fwnode,
-						connector_status_disconnected);
+						connector_status_disconnected,
+						false);
 
 		fwnode_handle_put(dp->connector_fwnode);
 	}
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index f83f28cae207..e8e7e6c9eb5c 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -2521,7 +2521,8 @@ drm_connector_is_unregistered(struct drm_connector *connector)
 }
 
 void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
-				     enum drm_connector_status status);
+				     enum drm_connector_status status,
+				     bool irq_hpd);
 const char *drm_get_connector_type_name(unsigned int connector_type);
 const char *drm_get_connector_status_name(enum drm_connector_status status);
 const char *drm_get_subpixel_order_name(enum subpixel_order order);

-- 
2.47.3


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

* [PATCH 2/6] drm/bridge: pass down IRQ_HPD to the drivers
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
  2026-04-15 23:22 ` [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event() Dmitry Baryshkov
@ 2026-04-15 23:22 ` Dmitry Baryshkov
  2026-04-15 23:22 ` [PATCH 3/6] drm/bridge: aux-hpd: let drivers pass IRQ_HPD events Dmitry Baryshkov
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-15 23:22 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Tomi Valkeinen,
	Bjorn Andersson, Konrad Dybcio, Pengyu Luo, Nikita Travkin,
	Yongxing Mou
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

Pass down the notifications about the IRQ_HPD events down to the
individual drivers, letting them handle those as required.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
 drivers/gpu/drm/bridge/chrontel-ch7033.c       |  2 +-
 drivers/gpu/drm/bridge/lontium-lt8912b.c       |  2 +-
 drivers/gpu/drm/bridge/lontium-lt9611uxc.c     |  3 ++-
 drivers/gpu/drm/bridge/ti-tfp410.c             |  2 +-
 drivers/gpu/drm/display/drm_bridge_connector.c | 21 ++++++++++++---------
 drivers/gpu/drm/drm_bridge.c                   |  5 +++--
 drivers/gpu/drm/drm_connector.c                |  2 +-
 drivers/gpu/drm/i915/display/intel_dp.c        |  3 ++-
 drivers/gpu/drm/meson/meson_encoder_hdmi.c     |  3 ++-
 drivers/gpu/drm/msm/dp/dp_display.c            |  3 ++-
 drivers/gpu/drm/msm/dp/dp_drm.h                |  3 ++-
 drivers/gpu/drm/omapdrm/dss/hdmi4.c            |  3 ++-
 include/drm/drm_bridge.h                       |  8 +++++---
 include/drm/drm_connector.h                    |  3 ++-
 14 files changed, 38 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/bridge/chrontel-ch7033.c b/drivers/gpu/drm/bridge/chrontel-ch7033.c
index 54d49d4882c8..6d932dbe062b 100644
--- a/drivers/gpu/drm/bridge/chrontel-ch7033.c
+++ b/drivers/gpu/drm/bridge/chrontel-ch7033.c
@@ -259,7 +259,7 @@ static const struct drm_connector_helper_funcs ch7033_connector_helper_funcs = {
 	.best_encoder = ch7033_connector_best_encoder,
 };
 
-static void ch7033_hpd_event(void *arg, enum drm_connector_status status)
+static void ch7033_hpd_event(void *arg, enum drm_connector_status status, bool irq_hpd)
 {
 	struct ch7033_priv *priv = arg;
 
diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bridge/lontium-lt8912b.c
index 8a0b48efca58..3ffbb7346418 100644
--- a/drivers/gpu/drm/bridge/lontium-lt8912b.c
+++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c
@@ -504,7 +504,7 @@ static int lt8912_attach_dsi(struct lt8912 *lt)
 	return 0;
 }
 
-static void lt8912_bridge_hpd_cb(void *data, enum drm_connector_status status)
+static void lt8912_bridge_hpd_cb(void *data, enum drm_connector_status status, bool irq_hpd)
 {
 	struct lt8912 *lt = data;
 
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
index 11aab07d88df..7e5a110cfa1f 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
@@ -430,7 +430,8 @@ static const struct drm_edid *lt9611uxc_bridge_edid_read(struct drm_bridge *brid
 
 static void lt9611uxc_bridge_hpd_notify(struct drm_bridge *bridge,
 					struct drm_connector *connector,
-					enum drm_connector_status status)
+					enum drm_connector_status status,
+					bool irq_hpd)
 {
 	const struct drm_edid *drm_edid;
 
diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
index 3b6b0e92cf89..4111aa104256 100644
--- a/drivers/gpu/drm/bridge/ti-tfp410.c
+++ b/drivers/gpu/drm/bridge/ti-tfp410.c
@@ -110,7 +110,7 @@ static void tfp410_hpd_work_func(struct work_struct *work)
 		drm_helper_hpd_irq_event(dvi->bridge.dev);
 }
 
-static void tfp410_hpd_callback(void *arg, enum drm_connector_status status)
+static void tfp410_hpd_callback(void *arg, enum drm_connector_status status, bool irq_hpd)
 {
 	struct tfp410 *dvi = arg;
 
diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c
index 39cc18f78eda..749d3d63216c 100644
--- a/drivers/gpu/drm/display/drm_bridge_connector.c
+++ b/drivers/gpu/drm/display/drm_bridge_connector.c
@@ -141,7 +141,8 @@ struct drm_bridge_connector {
  */
 
 static void drm_bridge_connector_hpd_notify(struct drm_connector *connector,
-					    enum drm_connector_status status)
+					    enum drm_connector_status status,
+					    bool irq_hpd)
 {
 	struct drm_bridge_connector *bridge_connector =
 		to_drm_bridge_connector(connector);
@@ -149,12 +150,12 @@ static void drm_bridge_connector_hpd_notify(struct drm_connector *connector,
 	/* Notify all bridges in the pipeline of hotplug events. */
 	drm_for_each_bridge_in_chain_scoped(bridge_connector->encoder, bridge) {
 		if (bridge->funcs->hpd_notify)
-			bridge->funcs->hpd_notify(bridge, connector, status);
+			bridge->funcs->hpd_notify(bridge, connector, status, irq_hpd);
 	}
 }
 
 static void drm_bridge_connector_handle_hpd(struct drm_bridge_connector *drm_bridge_connector,
-					    enum drm_connector_status status)
+					    enum drm_connector_status status, bool irq_hpd)
 {
 	struct drm_connector *connector = &drm_bridge_connector->base;
 	struct drm_device *dev = connector->dev;
@@ -163,24 +164,26 @@ static void drm_bridge_connector_handle_hpd(struct drm_bridge_connector *drm_bri
 	connector->status = status;
 	mutex_unlock(&dev->mode_config.mutex);
 
-	drm_bridge_connector_hpd_notify(connector, status);
+	drm_bridge_connector_hpd_notify(connector, status, irq_hpd);
 
 	drm_kms_helper_connector_hotplug_event(connector);
 }
 
 static void drm_bridge_connector_hpd_cb(void *cb_data,
-					enum drm_connector_status status)
+					enum drm_connector_status status,
+					bool irq_hpd)
 {
-	drm_bridge_connector_handle_hpd(cb_data, status);
+	drm_bridge_connector_handle_hpd(cb_data, status, irq_hpd);
 }
 
 static void drm_bridge_connector_oob_hotplug_event(struct drm_connector *connector,
-						   enum drm_connector_status status)
+						   enum drm_connector_status status,
+						   bool irq_hpd)
 {
 	struct drm_bridge_connector *bridge_connector =
 		to_drm_bridge_connector(connector);
 
-	drm_bridge_connector_handle_hpd(bridge_connector, status);
+	drm_bridge_connector_handle_hpd(bridge_connector, status, irq_hpd);
 }
 
 static void drm_bridge_connector_enable_hpd(struct drm_connector *connector)
@@ -223,7 +226,7 @@ drm_bridge_connector_detect(struct drm_connector *connector, bool force)
 		if (hdmi)
 			drm_atomic_helper_connector_hdmi_hotplug(connector, status);
 
-		drm_bridge_connector_hpd_notify(connector, status);
+		drm_bridge_connector_hpd_notify(connector, status, false);
 	} else {
 		switch (connector->connector_type) {
 		case DRM_MODE_CONNECTOR_DPI:
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index d6f512b73389..9c44e9b6c638 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -1444,7 +1444,8 @@ EXPORT_SYMBOL_GPL(drm_bridge_edid_read);
  */
 void drm_bridge_hpd_enable(struct drm_bridge *bridge,
 			   void (*cb)(void *data,
-				      enum drm_connector_status status),
+				      enum drm_connector_status status,
+				      bool irq_hpd),
 			   void *data)
 {
 	if (!(bridge->ops & DRM_BRIDGE_OP_HPD))
@@ -1509,7 +1510,7 @@ void drm_bridge_hpd_notify(struct drm_bridge *bridge,
 {
 	mutex_lock(&bridge->hpd_mutex);
 	if (bridge->hpd_cb)
-		bridge->hpd_cb(bridge->hpd_data, status);
+		bridge->hpd_cb(bridge->hpd_data, status, false);
 	mutex_unlock(&bridge->hpd_mutex);
 }
 EXPORT_SYMBOL_GPL(drm_bridge_hpd_notify);
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 5fdacbd84bd7..809ce38c4822 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -3531,7 +3531,7 @@ void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
 		return;
 
 	if (connector->funcs->oob_hotplug_event)
-		connector->funcs->oob_hotplug_event(connector, status);
+		connector->funcs->oob_hotplug_event(connector, status, irq_hpd);
 
 	drm_connector_put(connector);
 }
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index b8b6d62fb275..524d6c67ca54 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -6784,7 +6784,8 @@ static int intel_dp_connector_atomic_check(struct drm_connector *_connector,
 }
 
 static void intel_dp_oob_hotplug_event(struct drm_connector *_connector,
-				       enum drm_connector_status hpd_state)
+				       enum drm_connector_status hpd_state,
+				       bool irq_hpd)
 {
 	struct intel_connector *connector = to_intel_connector(_connector);
 	struct intel_display *display = to_intel_display(connector);
diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
index 1abb0572bb5f..346c4d2e26e8 100644
--- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c
+++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
@@ -323,7 +323,8 @@ static int meson_encoder_hdmi_atomic_check(struct drm_bridge *bridge,
 
 static void meson_encoder_hdmi_hpd_notify(struct drm_bridge *bridge,
 					  struct drm_connector *connector,
-					  enum drm_connector_status status)
+					  enum drm_connector_status status,
+					  bool irq_hpd)
 {
 	struct meson_encoder_hdmi *encoder_hdmi = bridge_to_meson_encoder_hdmi(bridge);
 
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index d2124d625485..45e14a0010c2 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -1785,7 +1785,8 @@ void msm_dp_bridge_hpd_disable(struct drm_bridge *bridge)
 
 void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge,
 			      struct drm_connector *connector,
-			      enum drm_connector_status status)
+			      enum drm_connector_status status,
+			      bool irq_hpd)
 {
 	struct msm_dp_bridge *msm_dp_bridge = to_dp_bridge(bridge);
 	struct msm_dp *msm_dp_display = msm_dp_bridge->msm_dp_display;
diff --git a/drivers/gpu/drm/msm/dp/dp_drm.h b/drivers/gpu/drm/msm/dp/dp_drm.h
index 9eb3431dd93a..5a877655d56c 100644
--- a/drivers/gpu/drm/msm/dp/dp_drm.h
+++ b/drivers/gpu/drm/msm/dp/dp_drm.h
@@ -41,6 +41,7 @@ void msm_dp_bridge_hpd_enable(struct drm_bridge *bridge);
 void msm_dp_bridge_hpd_disable(struct drm_bridge *bridge);
 void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge,
 			      struct drm_connector *connector,
-			      enum drm_connector_status status);
+			      enum drm_connector_status status,
+			      bool irq_hpd);
 
 #endif /* _DP_DRM_H_ */
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index 29b2dfb90b5f..dae9e464889c 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -429,7 +429,8 @@ static void hdmi4_bridge_disable(struct drm_bridge *bridge,
 
 static void hdmi4_bridge_hpd_notify(struct drm_bridge *bridge,
 				    struct drm_connector *connector,
-				    enum drm_connector_status status)
+				    enum drm_connector_status status,
+				    bool irq_hpd)
 {
 	struct omap_hdmi *hdmi = drm_bridge_to_hdmi(bridge);
 
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index a8d67bd9ee50..4eea124c7eb7 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -615,7 +615,8 @@ struct drm_bridge_funcs {
 	 */
 	void (*hpd_notify)(struct drm_bridge *bridge,
 			   struct drm_connector *connector,
-			   enum drm_connector_status status);
+			   enum drm_connector_status status,
+			   bool irq_hpd);
 
 	/**
 	 * @hpd_enable:
@@ -1260,7 +1261,7 @@ struct drm_bridge {
 	 * @hpd_cb: Hot plug detection callback, registered with
 	 * drm_bridge_hpd_enable().
 	 */
-	void (*hpd_cb)(void *data, enum drm_connector_status status);
+	void (*hpd_cb)(void *data, enum drm_connector_status status, bool irq_hpd);
 	/**
 	 * @hpd_data: Private data passed to the Hot plug detection callback
 	 * @hpd_cb.
@@ -1550,7 +1551,8 @@ const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
 					    struct drm_connector *connector);
 void drm_bridge_hpd_enable(struct drm_bridge *bridge,
 			   void (*cb)(void *data,
-				      enum drm_connector_status status),
+				      enum drm_connector_status status,
+				      bool irq_hpd),
 			   void *data);
 void drm_bridge_hpd_disable(struct drm_bridge *bridge);
 void drm_bridge_hpd_notify(struct drm_bridge *bridge,
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index e8e7e6c9eb5c..e164b0dbaa47 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -1704,7 +1704,8 @@ struct drm_connector_funcs {
 	 * has been received from a source outside the display driver / device.
 	 */
 	void (*oob_hotplug_event)(struct drm_connector *connector,
-				  enum drm_connector_status status);
+				  enum drm_connector_status status,
+				  bool irq_hpd);
 
 	/**
 	 * @debugfs_init:

-- 
2.47.3


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

* [PATCH 3/6] drm/bridge: aux-hpd: let drivers pass IRQ_HPD events
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
  2026-04-15 23:22 ` [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event() Dmitry Baryshkov
  2026-04-15 23:22 ` [PATCH 2/6] drm/bridge: pass down IRQ_HPD to the drivers Dmitry Baryshkov
@ 2026-04-15 23:22 ` Dmitry Baryshkov
  2026-04-15 23:22 ` [PATCH 4/6] drm/msm: dp: handle the IRQ_HPD events reported by USB-C Dmitry Baryshkov
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-15 23:22 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Tomi Valkeinen,
	Bjorn Andersson, Konrad Dybcio, Pengyu Luo, Nikita Travkin,
	Yongxing Mou
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

Let users of aux-hpd, the UCSI and PMIC GLINK drivers pass the IRQ_HPD
events to the DisplayPort drivers.

The drm_aux_hpd_bridge_notify() is keps to ease merging of the series,
preventing extra cross-tree merges. It will be removed once all
drivers are converted. The drm_bridge_hpd_notify() function is kept for
the driver which only care about the connector status and will always
pass false as the irq_hpd event.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
 drivers/gpu/drm/bridge/aux-hpd-bridge.c |  9 ++++++---
 drivers/gpu/drm/drm_bridge.c            | 15 +++++++++------
 include/drm/bridge/aux-bridge.h         | 13 +++++++++++--
 include/drm/drm_bridge.h                | 22 ++++++++++++++++++++--
 4 files changed, 46 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/bridge/aux-hpd-bridge.c b/drivers/gpu/drm/bridge/aux-hpd-bridge.c
index f02a38a2638a..74d606b27dc6 100644
--- a/drivers/gpu/drm/bridge/aux-hpd-bridge.c
+++ b/drivers/gpu/drm/bridge/aux-hpd-bridge.c
@@ -136,16 +136,19 @@ struct device *drm_dp_hpd_bridge_register(struct device *parent, struct device_n
 EXPORT_SYMBOL_GPL(drm_dp_hpd_bridge_register);
 
 /**
- * drm_aux_hpd_bridge_notify - notify hot plug detection events
+ * drm_aux_hpd_bridge_notify_with_irq - notify hot plug detection events
  * @dev: device created for the HPD bridge
  * @status: output connection status
+ * @irq_hpd: recorded IRQ_HPD status
  *
  * A wrapper around drm_bridge_hpd_notify() that is used to report hot plug
  * detection events for bridges created via drm_dp_hpd_bridge_register().
  *
  * This function shall be called in a context that can sleep.
  */
-void drm_aux_hpd_bridge_notify(struct device *dev, enum drm_connector_status status)
+void drm_aux_hpd_bridge_notify_with_irq(struct device *dev,
+					enum drm_connector_status status,
+					bool irq_hpd)
 {
 	struct auxiliary_device *adev = to_auxiliary_dev(dev);
 	struct drm_aux_hpd_bridge_data *data = auxiliary_get_drvdata(adev);
@@ -155,7 +158,7 @@ void drm_aux_hpd_bridge_notify(struct device *dev, enum drm_connector_status sta
 
 	drm_bridge_hpd_notify(&data->bridge, status);
 }
-EXPORT_SYMBOL_GPL(drm_aux_hpd_bridge_notify);
+EXPORT_SYMBOL_GPL(drm_aux_hpd_bridge_notify_with_irq);
 
 static int drm_aux_hpd_bridge_attach(struct drm_bridge *bridge,
 				     struct drm_encoder *encoder,
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 9c44e9b6c638..5a3dd4f92fbc 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -1495,25 +1495,28 @@ void drm_bridge_hpd_disable(struct drm_bridge *bridge)
 EXPORT_SYMBOL_GPL(drm_bridge_hpd_disable);
 
 /**
- * drm_bridge_hpd_notify - notify hot plug detection events
+ * drm_bridge_hpd_notify_with_irq - notify hot plug detection and sink IRQ events
  * @bridge: bridge control structure
  * @status: output connection status
+ * @irq_hpd: recorded IRQ_HPD status
  *
  * Bridge drivers shall call this function to report hot plug events when they
- * detect a change in the output status, when hot plug detection has been
+ * detect a change in the output status or when the sink has reported the IRQ
+ * event (usually delivered as IRQ_HPD pulse), when hot plug detection has been
  * enabled by drm_bridge_hpd_enable().
  *
  * This function shall be called in a context that can sleep.
  */
-void drm_bridge_hpd_notify(struct drm_bridge *bridge,
-			   enum drm_connector_status status)
+void drm_bridge_hpd_notify_with_irq(struct drm_bridge *bridge,
+				    enum drm_connector_status status,
+				    bool irq_hpd)
 {
 	mutex_lock(&bridge->hpd_mutex);
 	if (bridge->hpd_cb)
-		bridge->hpd_cb(bridge->hpd_data, status, false);
+		bridge->hpd_cb(bridge->hpd_data, status, irq_hpd);
 	mutex_unlock(&bridge->hpd_mutex);
 }
-EXPORT_SYMBOL_GPL(drm_bridge_hpd_notify);
+EXPORT_SYMBOL_GPL(drm_bridge_hpd_notify_with_irq);
 
 #ifdef CONFIG_OF
 /**
diff --git a/include/drm/bridge/aux-bridge.h b/include/drm/bridge/aux-bridge.h
index c2f5a855512f..6f837df90b2f 100644
--- a/include/drm/bridge/aux-bridge.h
+++ b/include/drm/bridge/aux-bridge.h
@@ -25,7 +25,9 @@ struct auxiliary_device *devm_drm_dp_hpd_bridge_alloc(struct device *parent, str
 int devm_drm_dp_hpd_bridge_add(struct device *dev, struct auxiliary_device *adev);
 struct device *drm_dp_hpd_bridge_register(struct device *parent,
 					  struct device_node *np);
-void drm_aux_hpd_bridge_notify(struct device *dev, enum drm_connector_status status);
+void drm_aux_hpd_bridge_notify_with_irq(struct device *dev,
+					enum drm_connector_status status,
+					bool irq_hpd);
 #else
 static inline struct auxiliary_device *devm_drm_dp_hpd_bridge_alloc(struct device *parent,
 								    struct device_node *np)
@@ -44,9 +46,16 @@ static inline struct device *drm_dp_hpd_bridge_register(struct device *parent,
 	return NULL;
 }
 
-static inline void drm_aux_hpd_bridge_notify(struct device *dev, enum drm_connector_status status)
+static inline void drm_aux_hpd_bridge_notify_with_irq(struct device *dev,
+						      enum drm_connector_status status,
+						      bool irq_hpd)
 {
 }
 #endif
 
+static inline void drm_aux_hpd_bridge_notify(struct device *dev, enum drm_connector_status status)
+{
+	drm_aux_hpd_bridge_notify_with_irq(dev, status, false);
+}
+
 #endif
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index 4eea124c7eb7..c3bb30133925 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -1555,8 +1555,26 @@ void drm_bridge_hpd_enable(struct drm_bridge *bridge,
 				      bool irq_hpd),
 			   void *data);
 void drm_bridge_hpd_disable(struct drm_bridge *bridge);
-void drm_bridge_hpd_notify(struct drm_bridge *bridge,
-			   enum drm_connector_status status);
+void drm_bridge_hpd_notify_with_irq(struct drm_bridge *bridge,
+				    enum drm_connector_status status,
+				    bool irq_hpd);
+
+/**
+ * drm_bridge_hpd_notify - notify hot plug detection events
+ * @bridge: bridge control structure
+ * @status: output connection status
+ *
+ * Bridge drivers shall call this function to report hot plug events when they
+ * detect a change in the output status, when hot plug detection has been
+ * enabled by drm_bridge_hpd_enable().
+ *
+ * This function shall be called in a context that can sleep.
+ */
+static inline void drm_bridge_hpd_notify(struct drm_bridge *bridge,
+					 enum drm_connector_status status)
+{
+	drm_bridge_hpd_notify_with_irq(bridge, status, false);
+}
 
 #ifdef CONFIG_DRM_PANEL_BRIDGE
 bool drm_bridge_is_panel(const struct drm_bridge *bridge);

-- 
2.47.3


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

* [PATCH 4/6] drm/msm: dp: handle the IRQ_HPD events reported by USB-C
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
                   ` (2 preceding siblings ...)
  2026-04-15 23:22 ` [PATCH 3/6] drm/bridge: aux-hpd: let drivers pass IRQ_HPD events Dmitry Baryshkov
@ 2026-04-15 23:22 ` Dmitry Baryshkov
  2026-04-15 23:22 ` [PATCH 5/6] soc: qcom: pmic-glink-altmode: pass down HPD_IRQ events Dmitry Baryshkov
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-15 23:22 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Tomi Valkeinen,
	Bjorn Andersson, Konrad Dybcio, Pengyu Luo, Nikita Travkin,
	Yongxing Mou
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

Let the MSM DisplayPort driver properly track and handle IRQ_HPD
delivered over the OOB events (e.g. from the USB-C AltMode handler).

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
 drivers/gpu/drm/msm/dp/dp_display.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index 45e14a0010c2..390a967a53f0 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -1800,4 +1800,7 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge,
 		msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0, 0);
 	else if (msm_dp_display->link_ready && status == connector_status_disconnected)
 		msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0, 0);
+
+	if (irq_hpd)
+		msm_dp_add_event(dp, EV_IRQ_HPD_INT, 0, 0);
 }

-- 
2.47.3


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

* [PATCH 5/6] soc: qcom: pmic-glink-altmode: pass down HPD_IRQ events
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
                   ` (3 preceding siblings ...)
  2026-04-15 23:22 ` [PATCH 4/6] drm/msm: dp: handle the IRQ_HPD events reported by USB-C Dmitry Baryshkov
@ 2026-04-15 23:22 ` Dmitry Baryshkov
  2026-04-15 23:22 ` [PATCH 6/6] usb: typec: ucsi: huawei-gaokun: " Dmitry Baryshkov
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-15 23:22 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Tomi Valkeinen,
	Bjorn Andersson, Konrad Dybcio, Pengyu Luo, Nikita Travkin,
	Yongxing Mou
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

Pass IRQ_HPD events to the HPD bridge, letting those to be delivered to
the DisplayPort driver.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
 drivers/soc/qcom/pmic_glink_altmode.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
index 619bad2c27ee..618dce748316 100644
--- a/drivers/soc/qcom/pmic_glink_altmode.c
+++ b/drivers/soc/qcom/pmic_glink_altmode.c
@@ -373,7 +373,9 @@ static void pmic_glink_altmode_worker(struct work_struct *work)
 		else
 			conn_status = connector_status_disconnected;
 
-		drm_aux_hpd_bridge_notify(&alt_port->bridge->dev, conn_status);
+		drm_aux_hpd_bridge_notify_with_irq(&alt_port->bridge->dev,
+						   conn_status,
+						   alt_port->hpd_irq);
 	} else if (alt_port->mux_ctrl == MUX_CTRL_STATE_TUNNELING) {
 		if (alt_port->svid == USB_TYPEC_TBT_SID)
 			pmic_glink_altmode_enable_tbt(altmode, alt_port);

-- 
2.47.3


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

* [PATCH 6/6] usb: typec: ucsi: huawei-gaokun: pass down HPD_IRQ events
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
                   ` (4 preceding siblings ...)
  2026-04-15 23:22 ` [PATCH 5/6] soc: qcom: pmic-glink-altmode: pass down HPD_IRQ events Dmitry Baryshkov
@ 2026-04-15 23:22 ` Dmitry Baryshkov
  2026-04-17  9:29   ` Heikki Krogerus
  2026-04-17 12:17   ` Pengyu Luo
  2026-04-16  1:15 ` ✓ CI.KUnit: success for drm: handle IRQ_HPD events correctly Patchwork
                   ` (2 subsequent siblings)
  8 siblings, 2 replies; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-15 23:22 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Tomi Valkeinen,
	Bjorn Andersson, Konrad Dybcio, Pengyu Luo, Nikita Travkin,
	Yongxing Mou
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

Pass IRQ_HPD events to the HPD bridge, letting those to be delivered to
the DisplayPort driver.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
 drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c b/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
index ca749fde49bd..328ba92e1b44 100644
--- a/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
+++ b/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
@@ -299,10 +299,11 @@ static void gaokun_ucsi_handle_altmode(struct gaokun_ucsi_port *port)
 
 	/* UCSI callback .connector_status() have set orientation */
 	if (port->bridge)
-		drm_aux_hpd_bridge_notify(&port->bridge->dev,
-					  port->hpd_state ?
-					  connector_status_connected :
-					  connector_status_disconnected);
+		drm_aux_hpd_bridge_notify_with_irq(&port->bridge->dev,
+						   port->hpd_state ?
+						   connector_status_connected :
+						   connector_status_disconnected,
+						   port->hpd_irq);
 
 	gaokun_ec_ucsi_pan_ack(uec->ec, port->idx);
 }

-- 
2.47.3


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

* ✓ CI.KUnit: success for drm: handle IRQ_HPD events correctly
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
                   ` (5 preceding siblings ...)
  2026-04-15 23:22 ` [PATCH 6/6] usb: typec: ucsi: huawei-gaokun: " Dmitry Baryshkov
@ 2026-04-16  1:15 ` Patchwork
  2026-04-16  2:04 ` ✓ Xe.CI.BAT: " Patchwork
  2026-04-16  4:17 ` ✓ Xe.CI.FULL: " Patchwork
  8 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-04-16  1:15 UTC (permalink / raw)
  To: Dmitry Baryshkov; +Cc: intel-xe

== Series Details ==

Series: drm: handle IRQ_HPD events correctly
URL   : https://patchwork.freedesktop.org/series/164955/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[01:13:59] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[01:14:04] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[01:14:35] Starting KUnit Kernel (1/1)...
[01:14:35] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[01:14:35] ================== guc_buf (11 subtests) ===================
[01:14:35] [PASSED] test_smallest
[01:14:35] [PASSED] test_largest
[01:14:35] [PASSED] test_granular
[01:14:35] [PASSED] test_unique
[01:14:35] [PASSED] test_overlap
[01:14:35] [PASSED] test_reusable
[01:14:35] [PASSED] test_too_big
[01:14:35] [PASSED] test_flush
[01:14:35] [PASSED] test_lookup
[01:14:35] [PASSED] test_data
[01:14:35] [PASSED] test_class
[01:14:35] ===================== [PASSED] guc_buf =====================
[01:14:35] =================== guc_dbm (7 subtests) ===================
[01:14:35] [PASSED] test_empty
[01:14:35] [PASSED] test_default
[01:14:35] ======================== test_size  ========================
[01:14:35] [PASSED] 4
[01:14:35] [PASSED] 8
[01:14:35] [PASSED] 32
[01:14:35] [PASSED] 256
[01:14:35] ==================== [PASSED] test_size ====================
[01:14:35] ======================= test_reuse  ========================
[01:14:35] [PASSED] 4
[01:14:35] [PASSED] 8
[01:14:35] [PASSED] 32
[01:14:35] [PASSED] 256
[01:14:35] =================== [PASSED] test_reuse ====================
[01:14:35] =================== test_range_overlap  ====================
[01:14:35] [PASSED] 4
[01:14:35] [PASSED] 8
[01:14:35] [PASSED] 32
[01:14:35] [PASSED] 256
[01:14:35] =============== [PASSED] test_range_overlap ================
[01:14:35] =================== test_range_compact  ====================
[01:14:35] [PASSED] 4
[01:14:35] [PASSED] 8
[01:14:35] [PASSED] 32
[01:14:35] [PASSED] 256
[01:14:35] =============== [PASSED] test_range_compact ================
[01:14:35] ==================== test_range_spare  =====================
[01:14:35] [PASSED] 4
[01:14:35] [PASSED] 8
[01:14:35] [PASSED] 32
[01:14:35] [PASSED] 256
[01:14:35] ================ [PASSED] test_range_spare =================
[01:14:35] ===================== [PASSED] guc_dbm =====================
[01:14:35] =================== guc_idm (6 subtests) ===================
[01:14:35] [PASSED] bad_init
[01:14:35] [PASSED] no_init
[01:14:35] [PASSED] init_fini
[01:14:35] [PASSED] check_used
[01:14:35] [PASSED] check_quota
[01:14:35] [PASSED] check_all
[01:14:35] ===================== [PASSED] guc_idm =====================
[01:14:35] ================== no_relay (3 subtests) ===================
[01:14:35] [PASSED] xe_drops_guc2pf_if_not_ready
[01:14:35] [PASSED] xe_drops_guc2vf_if_not_ready
[01:14:35] [PASSED] xe_rejects_send_if_not_ready
[01:14:35] ==================== [PASSED] no_relay =====================
[01:14:35] ================== pf_relay (14 subtests) ==================
[01:14:35] [PASSED] pf_rejects_guc2pf_too_short
[01:14:35] [PASSED] pf_rejects_guc2pf_too_long
[01:14:35] [PASSED] pf_rejects_guc2pf_no_payload
[01:14:35] [PASSED] pf_fails_no_payload
[01:14:35] [PASSED] pf_fails_bad_origin
[01:14:35] [PASSED] pf_fails_bad_type
[01:14:35] [PASSED] pf_txn_reports_error
[01:14:35] [PASSED] pf_txn_sends_pf2guc
[01:14:35] [PASSED] pf_sends_pf2guc
[01:14:35] [SKIPPED] pf_loopback_nop
[01:14:35] [SKIPPED] pf_loopback_echo
[01:14:35] [SKIPPED] pf_loopback_fail
[01:14:35] [SKIPPED] pf_loopback_busy
[01:14:35] [SKIPPED] pf_loopback_retry
[01:14:35] ==================== [PASSED] pf_relay =====================
[01:14:35] ================== vf_relay (3 subtests) ===================
[01:14:35] [PASSED] vf_rejects_guc2vf_too_short
[01:14:35] [PASSED] vf_rejects_guc2vf_too_long
[01:14:35] [PASSED] vf_rejects_guc2vf_no_payload
[01:14:35] ==================== [PASSED] vf_relay =====================
[01:14:35] ================ pf_gt_config (9 subtests) =================
[01:14:35] [PASSED] fair_contexts_1vf
[01:14:35] [PASSED] fair_doorbells_1vf
[01:14:35] [PASSED] fair_ggtt_1vf
[01:14:35] ====================== fair_vram_1vf  ======================
[01:14:35] [PASSED] 3.50 GiB
[01:14:35] [PASSED] 11.5 GiB
[01:14:35] [PASSED] 15.5 GiB
[01:14:35] [PASSED] 31.5 GiB
[01:14:35] [PASSED] 63.5 GiB
[01:14:35] [PASSED] 1.91 GiB
[01:14:35] ================== [PASSED] fair_vram_1vf ==================
[01:14:35] ================ fair_vram_1vf_admin_only  =================
[01:14:35] [PASSED] 3.50 GiB
[01:14:35] [PASSED] 11.5 GiB
[01:14:35] [PASSED] 15.5 GiB
[01:14:35] [PASSED] 31.5 GiB
[01:14:35] [PASSED] 63.5 GiB
[01:14:35] [PASSED] 1.91 GiB
[01:14:35] ============ [PASSED] fair_vram_1vf_admin_only =============
[01:14:35] ====================== fair_contexts  ======================
[01:14:35] [PASSED] 1 VF
[01:14:35] [PASSED] 2 VFs
[01:14:35] [PASSED] 3 VFs
[01:14:35] [PASSED] 4 VFs
[01:14:35] [PASSED] 5 VFs
[01:14:35] [PASSED] 6 VFs
[01:14:35] [PASSED] 7 VFs
[01:14:35] [PASSED] 8 VFs
[01:14:35] [PASSED] 9 VFs
[01:14:35] [PASSED] 10 VFs
[01:14:35] [PASSED] 11 VFs
[01:14:35] [PASSED] 12 VFs
[01:14:35] [PASSED] 13 VFs
[01:14:35] [PASSED] 14 VFs
[01:14:35] [PASSED] 15 VFs
[01:14:35] [PASSED] 16 VFs
[01:14:35] [PASSED] 17 VFs
[01:14:35] [PASSED] 18 VFs
[01:14:35] [PASSED] 19 VFs
[01:14:35] [PASSED] 20 VFs
[01:14:35] [PASSED] 21 VFs
[01:14:35] [PASSED] 22 VFs
[01:14:35] [PASSED] 23 VFs
[01:14:35] [PASSED] 24 VFs
[01:14:35] [PASSED] 25 VFs
[01:14:35] [PASSED] 26 VFs
[01:14:35] [PASSED] 27 VFs
[01:14:35] [PASSED] 28 VFs
[01:14:35] [PASSED] 29 VFs
[01:14:35] [PASSED] 30 VFs
[01:14:35] [PASSED] 31 VFs
[01:14:35] [PASSED] 32 VFs
[01:14:35] [PASSED] 33 VFs
[01:14:35] [PASSED] 34 VFs
[01:14:35] [PASSED] 35 VFs
[01:14:35] [PASSED] 36 VFs
[01:14:35] [PASSED] 37 VFs
[01:14:35] [PASSED] 38 VFs
[01:14:35] [PASSED] 39 VFs
[01:14:35] [PASSED] 40 VFs
[01:14:35] [PASSED] 41 VFs
[01:14:35] [PASSED] 42 VFs
[01:14:35] [PASSED] 43 VFs
[01:14:35] [PASSED] 44 VFs
[01:14:35] [PASSED] 45 VFs
[01:14:35] [PASSED] 46 VFs
[01:14:35] [PASSED] 47 VFs
[01:14:35] [PASSED] 48 VFs
[01:14:35] [PASSED] 49 VFs
[01:14:35] [PASSED] 50 VFs
[01:14:35] [PASSED] 51 VFs
[01:14:35] [PASSED] 52 VFs
[01:14:35] [PASSED] 53 VFs
[01:14:35] [PASSED] 54 VFs
[01:14:35] [PASSED] 55 VFs
[01:14:35] [PASSED] 56 VFs
[01:14:35] [PASSED] 57 VFs
[01:14:35] [PASSED] 58 VFs
[01:14:35] [PASSED] 59 VFs
[01:14:35] [PASSED] 60 VFs
[01:14:35] [PASSED] 61 VFs
[01:14:35] [PASSED] 62 VFs
[01:14:35] [PASSED] 63 VFs
[01:14:35] ================== [PASSED] fair_contexts ==================
[01:14:35] ===================== fair_doorbells  ======================
[01:14:35] [PASSED] 1 VF
[01:14:35] [PASSED] 2 VFs
[01:14:35] [PASSED] 3 VFs
[01:14:35] [PASSED] 4 VFs
[01:14:35] [PASSED] 5 VFs
[01:14:35] [PASSED] 6 VFs
[01:14:35] [PASSED] 7 VFs
[01:14:35] [PASSED] 8 VFs
[01:14:35] [PASSED] 9 VFs
[01:14:35] [PASSED] 10 VFs
[01:14:35] [PASSED] 11 VFs
[01:14:35] [PASSED] 12 VFs
[01:14:35] [PASSED] 13 VFs
[01:14:35] [PASSED] 14 VFs
[01:14:35] [PASSED] 15 VFs
[01:14:35] [PASSED] 16 VFs
[01:14:35] [PASSED] 17 VFs
[01:14:35] [PASSED] 18 VFs
[01:14:35] [PASSED] 19 VFs
[01:14:35] [PASSED] 20 VFs
[01:14:35] [PASSED] 21 VFs
[01:14:35] [PASSED] 22 VFs
[01:14:35] [PASSED] 23 VFs
[01:14:35] [PASSED] 24 VFs
[01:14:35] [PASSED] 25 VFs
[01:14:35] [PASSED] 26 VFs
[01:14:35] [PASSED] 27 VFs
[01:14:35] [PASSED] 28 VFs
[01:14:35] [PASSED] 29 VFs
[01:14:35] [PASSED] 30 VFs
[01:14:35] [PASSED] 31 VFs
[01:14:35] [PASSED] 32 VFs
[01:14:35] [PASSED] 33 VFs
[01:14:35] [PASSED] 34 VFs
[01:14:35] [PASSED] 35 VFs
[01:14:35] [PASSED] 36 VFs
[01:14:35] [PASSED] 37 VFs
[01:14:35] [PASSED] 38 VFs
[01:14:35] [PASSED] 39 VFs
[01:14:35] [PASSED] 40 VFs
[01:14:35] [PASSED] 41 VFs
[01:14:35] [PASSED] 42 VFs
[01:14:35] [PASSED] 43 VFs
[01:14:35] [PASSED] 44 VFs
[01:14:35] [PASSED] 45 VFs
[01:14:35] [PASSED] 46 VFs
[01:14:35] [PASSED] 47 VFs
[01:14:35] [PASSED] 48 VFs
[01:14:35] [PASSED] 49 VFs
[01:14:35] [PASSED] 50 VFs
[01:14:35] [PASSED] 51 VFs
[01:14:35] [PASSED] 52 VFs
[01:14:35] [PASSED] 53 VFs
[01:14:35] [PASSED] 54 VFs
[01:14:35] [PASSED] 55 VFs
[01:14:35] [PASSED] 56 VFs
[01:14:35] [PASSED] 57 VFs
[01:14:35] [PASSED] 58 VFs
[01:14:35] [PASSED] 59 VFs
[01:14:35] [PASSED] 60 VFs
[01:14:35] [PASSED] 61 VFs
[01:14:35] [PASSED] 62 VFs
[01:14:35] [PASSED] 63 VFs
[01:14:35] ================= [PASSED] fair_doorbells ==================
[01:14:35] ======================== fair_ggtt  ========================
[01:14:35] [PASSED] 1 VF
[01:14:35] [PASSED] 2 VFs
[01:14:35] [PASSED] 3 VFs
[01:14:35] [PASSED] 4 VFs
[01:14:35] [PASSED] 5 VFs
[01:14:35] [PASSED] 6 VFs
[01:14:35] [PASSED] 7 VFs
[01:14:35] [PASSED] 8 VFs
[01:14:35] [PASSED] 9 VFs
[01:14:35] [PASSED] 10 VFs
[01:14:35] [PASSED] 11 VFs
[01:14:35] [PASSED] 12 VFs
[01:14:35] [PASSED] 13 VFs
[01:14:35] [PASSED] 14 VFs
[01:14:35] [PASSED] 15 VFs
[01:14:35] [PASSED] 16 VFs
[01:14:35] [PASSED] 17 VFs
[01:14:35] [PASSED] 18 VFs
[01:14:35] [PASSED] 19 VFs
[01:14:35] [PASSED] 20 VFs
[01:14:35] [PASSED] 21 VFs
[01:14:35] [PASSED] 22 VFs
[01:14:35] [PASSED] 23 VFs
[01:14:35] [PASSED] 24 VFs
[01:14:35] [PASSED] 25 VFs
[01:14:35] [PASSED] 26 VFs
[01:14:35] [PASSED] 27 VFs
[01:14:35] [PASSED] 28 VFs
[01:14:35] [PASSED] 29 VFs
[01:14:35] [PASSED] 30 VFs
[01:14:35] [PASSED] 31 VFs
[01:14:35] [PASSED] 32 VFs
[01:14:35] [PASSED] 33 VFs
[01:14:35] [PASSED] 34 VFs
[01:14:35] [PASSED] 35 VFs
[01:14:35] [PASSED] 36 VFs
[01:14:35] [PASSED] 37 VFs
[01:14:35] [PASSED] 38 VFs
[01:14:35] [PASSED] 39 VFs
[01:14:35] [PASSED] 40 VFs
[01:14:35] [PASSED] 41 VFs
[01:14:35] [PASSED] 42 VFs
[01:14:35] [PASSED] 43 VFs
[01:14:35] [PASSED] 44 VFs
[01:14:35] [PASSED] 45 VFs
[01:14:35] [PASSED] 46 VFs
[01:14:35] [PASSED] 47 VFs
[01:14:35] [PASSED] 48 VFs
[01:14:35] [PASSED] 49 VFs
[01:14:35] [PASSED] 50 VFs
[01:14:35] [PASSED] 51 VFs
[01:14:35] [PASSED] 52 VFs
[01:14:35] [PASSED] 53 VFs
[01:14:35] [PASSED] 54 VFs
[01:14:35] [PASSED] 55 VFs
[01:14:35] [PASSED] 56 VFs
[01:14:35] [PASSED] 57 VFs
[01:14:35] [PASSED] 58 VFs
[01:14:35] [PASSED] 59 VFs
[01:14:35] [PASSED] 60 VFs
[01:14:35] [PASSED] 61 VFs
[01:14:35] [PASSED] 62 VFs
[01:14:35] [PASSED] 63 VFs
[01:14:35] ==================== [PASSED] fair_ggtt ====================
[01:14:35] ======================== fair_vram  ========================
[01:14:35] [PASSED] 1 VF
[01:14:35] [PASSED] 2 VFs
[01:14:35] [PASSED] 3 VFs
[01:14:35] [PASSED] 4 VFs
[01:14:35] [PASSED] 5 VFs
[01:14:35] [PASSED] 6 VFs
[01:14:35] [PASSED] 7 VFs
[01:14:35] [PASSED] 8 VFs
[01:14:35] [PASSED] 9 VFs
[01:14:35] [PASSED] 10 VFs
[01:14:35] [PASSED] 11 VFs
[01:14:35] [PASSED] 12 VFs
[01:14:35] [PASSED] 13 VFs
[01:14:35] [PASSED] 14 VFs
[01:14:35] [PASSED] 15 VFs
[01:14:35] [PASSED] 16 VFs
[01:14:35] [PASSED] 17 VFs
[01:14:35] [PASSED] 18 VFs
[01:14:35] [PASSED] 19 VFs
[01:14:35] [PASSED] 20 VFs
[01:14:35] [PASSED] 21 VFs
[01:14:35] [PASSED] 22 VFs
[01:14:35] [PASSED] 23 VFs
[01:14:35] [PASSED] 24 VFs
[01:14:35] [PASSED] 25 VFs
[01:14:35] [PASSED] 26 VFs
[01:14:35] [PASSED] 27 VFs
[01:14:35] [PASSED] 28 VFs
[01:14:35] [PASSED] 29 VFs
[01:14:35] [PASSED] 30 VFs
[01:14:35] [PASSED] 31 VFs
[01:14:35] [PASSED] 32 VFs
[01:14:35] [PASSED] 33 VFs
[01:14:35] [PASSED] 34 VFs
[01:14:35] [PASSED] 35 VFs
[01:14:35] [PASSED] 36 VFs
[01:14:35] [PASSED] 37 VFs
[01:14:35] [PASSED] 38 VFs
[01:14:35] [PASSED] 39 VFs
[01:14:35] [PASSED] 40 VFs
[01:14:35] [PASSED] 41 VFs
[01:14:35] [PASSED] 42 VFs
[01:14:35] [PASSED] 43 VFs
[01:14:35] [PASSED] 44 VFs
[01:14:35] [PASSED] 45 VFs
[01:14:35] [PASSED] 46 VFs
[01:14:35] [PASSED] 47 VFs
[01:14:35] [PASSED] 48 VFs
[01:14:35] [PASSED] 49 VFs
[01:14:35] [PASSED] 50 VFs
[01:14:35] [PASSED] 51 VFs
[01:14:35] [PASSED] 52 VFs
[01:14:35] [PASSED] 53 VFs
[01:14:35] [PASSED] 54 VFs
[01:14:35] [PASSED] 55 VFs
[01:14:35] [PASSED] 56 VFs
[01:14:35] [PASSED] 57 VFs
[01:14:35] [PASSED] 58 VFs
[01:14:35] [PASSED] 59 VFs
[01:14:35] [PASSED] 60 VFs
[01:14:35] [PASSED] 61 VFs
[01:14:35] [PASSED] 62 VFs
[01:14:35] [PASSED] 63 VFs
[01:14:35] ==================== [PASSED] fair_vram ====================
[01:14:35] ================== [PASSED] pf_gt_config ===================
[01:14:35] ===================== lmtt (1 subtest) =====================
[01:14:35] ======================== test_ops  =========================
[01:14:35] [PASSED] 2-level
[01:14:35] [PASSED] multi-level
[01:14:35] ==================== [PASSED] test_ops =====================
[01:14:35] ====================== [PASSED] lmtt =======================
[01:14:35] ================= pf_service (11 subtests) =================
[01:14:35] [PASSED] pf_negotiate_any
[01:14:35] [PASSED] pf_negotiate_base_match
[01:14:35] [PASSED] pf_negotiate_base_newer
[01:14:35] [PASSED] pf_negotiate_base_next
[01:14:35] [SKIPPED] pf_negotiate_base_older
[01:14:35] [PASSED] pf_negotiate_base_prev
[01:14:35] [PASSED] pf_negotiate_latest_match
[01:14:35] [PASSED] pf_negotiate_latest_newer
[01:14:35] [PASSED] pf_negotiate_latest_next
[01:14:35] [SKIPPED] pf_negotiate_latest_older
[01:14:35] [SKIPPED] pf_negotiate_latest_prev
[01:14:35] =================== [PASSED] pf_service ====================
[01:14:35] ================= xe_guc_g2g (2 subtests) ==================
[01:14:35] ============== xe_live_guc_g2g_kunit_default  ==============
[01:14:35] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[01:14:35] ============== xe_live_guc_g2g_kunit_allmem  ===============
[01:14:35] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[01:14:35] =================== [SKIPPED] xe_guc_g2g ===================
[01:14:35] =================== xe_mocs (2 subtests) ===================
[01:14:35] ================ xe_live_mocs_kernel_kunit  ================
[01:14:35] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[01:14:35] ================ xe_live_mocs_reset_kunit  =================
[01:14:35] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[01:14:35] ==================== [SKIPPED] xe_mocs =====================
[01:14:35] ================= xe_migrate (2 subtests) ==================
[01:14:35] ================= xe_migrate_sanity_kunit  =================
[01:14:35] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[01:14:35] ================== xe_validate_ccs_kunit  ==================
[01:14:35] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[01:14:35] =================== [SKIPPED] xe_migrate ===================
[01:14:35] ================== xe_dma_buf (1 subtest) ==================
[01:14:35] ==================== xe_dma_buf_kunit  =====================
[01:14:35] ================ [SKIPPED] xe_dma_buf_kunit ================
[01:14:35] =================== [SKIPPED] xe_dma_buf ===================
[01:14:35] ================= xe_bo_shrink (1 subtest) =================
[01:14:35] =================== xe_bo_shrink_kunit  ====================
[01:14:35] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[01:14:35] ================== [SKIPPED] xe_bo_shrink ==================
[01:14:35] ==================== xe_bo (2 subtests) ====================
[01:14:35] ================== xe_ccs_migrate_kunit  ===================
[01:14:35] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[01:14:35] ==================== xe_bo_evict_kunit  ====================
[01:14:35] =============== [SKIPPED] xe_bo_evict_kunit ================
[01:14:36] ===================== [SKIPPED] xe_bo ======================
[01:14:36] ==================== args (13 subtests) ====================
[01:14:36] [PASSED] count_args_test
[01:14:36] [PASSED] call_args_example
[01:14:36] [PASSED] call_args_test
[01:14:36] [PASSED] drop_first_arg_example
[01:14:36] [PASSED] drop_first_arg_test
[01:14:36] [PASSED] first_arg_example
[01:14:36] [PASSED] first_arg_test
[01:14:36] [PASSED] last_arg_example
[01:14:36] [PASSED] last_arg_test
[01:14:36] [PASSED] pick_arg_example
[01:14:36] [PASSED] if_args_example
[01:14:36] [PASSED] if_args_test
[01:14:36] [PASSED] sep_comma_example
[01:14:36] ====================== [PASSED] args =======================
[01:14:36] =================== xe_pci (3 subtests) ====================
[01:14:36] ==================== check_graphics_ip  ====================
[01:14:36] [PASSED] 12.00 Xe_LP
[01:14:36] [PASSED] 12.10 Xe_LP+
[01:14:36] [PASSED] 12.55 Xe_HPG
[01:14:36] [PASSED] 12.60 Xe_HPC
[01:14:36] [PASSED] 12.70 Xe_LPG
[01:14:36] [PASSED] 12.71 Xe_LPG
[01:14:36] [PASSED] 12.74 Xe_LPG+
[01:14:36] [PASSED] 20.01 Xe2_HPG
[01:14:36] [PASSED] 20.02 Xe2_HPG
[01:14:36] [PASSED] 20.04 Xe2_LPG
[01:14:36] [PASSED] 30.00 Xe3_LPG
[01:14:36] [PASSED] 30.01 Xe3_LPG
[01:14:36] [PASSED] 30.03 Xe3_LPG
[01:14:36] [PASSED] 30.04 Xe3_LPG
[01:14:36] [PASSED] 30.05 Xe3_LPG
[01:14:36] [PASSED] 35.10 Xe3p_LPG
[01:14:36] [PASSED] 35.11 Xe3p_XPC
[01:14:36] ================ [PASSED] check_graphics_ip ================
[01:14:36] ===================== check_media_ip  ======================
[01:14:36] [PASSED] 12.00 Xe_M
[01:14:36] [PASSED] 12.55 Xe_HPM
[01:14:36] [PASSED] 13.00 Xe_LPM+
[01:14:36] [PASSED] 13.01 Xe2_HPM
[01:14:36] [PASSED] 20.00 Xe2_LPM
[01:14:36] [PASSED] 30.00 Xe3_LPM
[01:14:36] [PASSED] 30.02 Xe3_LPM
[01:14:36] [PASSED] 35.00 Xe3p_LPM
[01:14:36] [PASSED] 35.03 Xe3p_HPM
[01:14:36] ================= [PASSED] check_media_ip ==================
[01:14:36] =================== check_platform_desc  ===================
[01:14:36] [PASSED] 0x9A60 (TIGERLAKE)
[01:14:36] [PASSED] 0x9A68 (TIGERLAKE)
[01:14:36] [PASSED] 0x9A70 (TIGERLAKE)
[01:14:36] [PASSED] 0x9A40 (TIGERLAKE)
[01:14:36] [PASSED] 0x9A49 (TIGERLAKE)
[01:14:36] [PASSED] 0x9A59 (TIGERLAKE)
[01:14:36] [PASSED] 0x9A78 (TIGERLAKE)
[01:14:36] [PASSED] 0x9AC0 (TIGERLAKE)
[01:14:36] [PASSED] 0x9AC9 (TIGERLAKE)
[01:14:36] [PASSED] 0x9AD9 (TIGERLAKE)
[01:14:36] [PASSED] 0x9AF8 (TIGERLAKE)
[01:14:36] [PASSED] 0x4C80 (ROCKETLAKE)
[01:14:36] [PASSED] 0x4C8A (ROCKETLAKE)
[01:14:36] [PASSED] 0x4C8B (ROCKETLAKE)
[01:14:36] [PASSED] 0x4C8C (ROCKETLAKE)
[01:14:36] [PASSED] 0x4C90 (ROCKETLAKE)
[01:14:36] [PASSED] 0x4C9A (ROCKETLAKE)
[01:14:36] [PASSED] 0x4680 (ALDERLAKE_S)
[01:14:36] [PASSED] 0x4682 (ALDERLAKE_S)
[01:14:36] [PASSED] 0x4688 (ALDERLAKE_S)
[01:14:36] [PASSED] 0x468A (ALDERLAKE_S)
[01:14:36] [PASSED] 0x468B (ALDERLAKE_S)
[01:14:36] [PASSED] 0x4690 (ALDERLAKE_S)
[01:14:36] [PASSED] 0x4692 (ALDERLAKE_S)
[01:14:36] [PASSED] 0x4693 (ALDERLAKE_S)
[01:14:36] [PASSED] 0x46A0 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46A1 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46A2 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46A3 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46A6 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46A8 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46AA (ALDERLAKE_P)
[01:14:36] [PASSED] 0x462A (ALDERLAKE_P)
[01:14:36] [PASSED] 0x4626 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x4628 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46B0 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46B1 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46B2 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46B3 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46C0 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46C1 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46C2 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46C3 (ALDERLAKE_P)
[01:14:36] [PASSED] 0x46D0 (ALDERLAKE_N)
[01:14:36] [PASSED] 0x46D1 (ALDERLAKE_N)
[01:14:36] [PASSED] 0x46D2 (ALDERLAKE_N)
[01:14:36] [PASSED] 0x46D3 (ALDERLAKE_N)
[01:14:36] [PASSED] 0x46D4 (ALDERLAKE_N)
[01:14:36] [PASSED] 0xA721 (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA7A1 (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA7A9 (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA7AC (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA7AD (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA720 (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA7A0 (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA7A8 (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA7AA (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA7AB (ALDERLAKE_P)
[01:14:36] [PASSED] 0xA780 (ALDERLAKE_S)
[01:14:36] [PASSED] 0xA781 (ALDERLAKE_S)
[01:14:36] [PASSED] 0xA782 (ALDERLAKE_S)
[01:14:36] [PASSED] 0xA783 (ALDERLAKE_S)
[01:14:36] [PASSED] 0xA788 (ALDERLAKE_S)
[01:14:36] [PASSED] 0xA789 (ALDERLAKE_S)
[01:14:36] [PASSED] 0xA78A (ALDERLAKE_S)
[01:14:36] [PASSED] 0xA78B (ALDERLAKE_S)
[01:14:36] [PASSED] 0x4905 (DG1)
[01:14:36] [PASSED] 0x4906 (DG1)
[01:14:36] [PASSED] 0x4907 (DG1)
[01:14:36] [PASSED] 0x4908 (DG1)
[01:14:36] [PASSED] 0x4909 (DG1)
[01:14:36] [PASSED] 0x56C0 (DG2)
[01:14:36] [PASSED] 0x56C2 (DG2)
[01:14:36] [PASSED] 0x56C1 (DG2)
[01:14:36] [PASSED] 0x7D51 (METEORLAKE)
[01:14:36] [PASSED] 0x7DD1 (METEORLAKE)
[01:14:36] [PASSED] 0x7D41 (METEORLAKE)
[01:14:36] [PASSED] 0x7D67 (METEORLAKE)
[01:14:36] [PASSED] 0xB640 (METEORLAKE)
[01:14:36] [PASSED] 0x56A0 (DG2)
[01:14:36] [PASSED] 0x56A1 (DG2)
[01:14:36] [PASSED] 0x56A2 (DG2)
[01:14:36] [PASSED] 0x56BE (DG2)
[01:14:36] [PASSED] 0x56BF (DG2)
[01:14:36] [PASSED] 0x5690 (DG2)
[01:14:36] [PASSED] 0x5691 (DG2)
[01:14:36] [PASSED] 0x5692 (DG2)
[01:14:36] [PASSED] 0x56A5 (DG2)
[01:14:36] [PASSED] 0x56A6 (DG2)
[01:14:36] [PASSED] 0x56B0 (DG2)
[01:14:36] [PASSED] 0x56B1 (DG2)
[01:14:36] [PASSED] 0x56BA (DG2)
[01:14:36] [PASSED] 0x56BB (DG2)
[01:14:36] [PASSED] 0x56BC (DG2)
[01:14:36] [PASSED] 0x56BD (DG2)
[01:14:36] [PASSED] 0x5693 (DG2)
[01:14:36] [PASSED] 0x5694 (DG2)
[01:14:36] [PASSED] 0x5695 (DG2)
[01:14:36] [PASSED] 0x56A3 (DG2)
[01:14:36] [PASSED] 0x56A4 (DG2)
[01:14:36] [PASSED] 0x56B2 (DG2)
[01:14:36] [PASSED] 0x56B3 (DG2)
[01:14:36] [PASSED] 0x5696 (DG2)
[01:14:36] [PASSED] 0x5697 (DG2)
[01:14:36] [PASSED] 0xB69 (PVC)
[01:14:36] [PASSED] 0xB6E (PVC)
[01:14:36] [PASSED] 0xBD4 (PVC)
[01:14:36] [PASSED] 0xBD5 (PVC)
[01:14:36] [PASSED] 0xBD6 (PVC)
[01:14:36] [PASSED] 0xBD7 (PVC)
[01:14:36] [PASSED] 0xBD8 (PVC)
[01:14:36] [PASSED] 0xBD9 (PVC)
[01:14:36] [PASSED] 0xBDA (PVC)
[01:14:36] [PASSED] 0xBDB (PVC)
[01:14:36] [PASSED] 0xBE0 (PVC)
[01:14:36] [PASSED] 0xBE1 (PVC)
[01:14:36] [PASSED] 0xBE5 (PVC)
[01:14:36] [PASSED] 0x7D40 (METEORLAKE)
[01:14:36] [PASSED] 0x7D45 (METEORLAKE)
[01:14:36] [PASSED] 0x7D55 (METEORLAKE)
[01:14:36] [PASSED] 0x7D60 (METEORLAKE)
[01:14:36] [PASSED] 0x7DD5 (METEORLAKE)
[01:14:36] [PASSED] 0x6420 (LUNARLAKE)
[01:14:36] [PASSED] 0x64A0 (LUNARLAKE)
[01:14:36] [PASSED] 0x64B0 (LUNARLAKE)
[01:14:36] [PASSED] 0xE202 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE209 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE20B (BATTLEMAGE)
[01:14:36] [PASSED] 0xE20C (BATTLEMAGE)
[01:14:36] [PASSED] 0xE20D (BATTLEMAGE)
[01:14:36] [PASSED] 0xE210 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE211 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE212 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE216 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE220 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE221 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE222 (BATTLEMAGE)
[01:14:36] [PASSED] 0xE223 (BATTLEMAGE)
[01:14:36] [PASSED] 0xB080 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB081 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB082 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB083 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB084 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB085 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB086 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB087 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB08F (PANTHERLAKE)
[01:14:36] [PASSED] 0xB090 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB0A0 (PANTHERLAKE)
[01:14:36] [PASSED] 0xB0B0 (PANTHERLAKE)
[01:14:36] [PASSED] 0xFD80 (PANTHERLAKE)
[01:14:36] [PASSED] 0xFD81 (PANTHERLAKE)
[01:14:36] [PASSED] 0xD740 (NOVALAKE_S)
[01:14:36] [PASSED] 0xD741 (NOVALAKE_S)
[01:14:36] [PASSED] 0xD742 (NOVALAKE_S)
[01:14:36] [PASSED] 0xD743 (NOVALAKE_S)
[01:14:36] [PASSED] 0xD744 (NOVALAKE_S)
[01:14:36] [PASSED] 0xD745 (NOVALAKE_S)
[01:14:36] [PASSED] 0x674C (CRESCENTISLAND)
[01:14:36] [PASSED] 0xD750 (NOVALAKE_P)
[01:14:36] [PASSED] 0xD751 (NOVALAKE_P)
[01:14:36] [PASSED] 0xD752 (NOVALAKE_P)
[01:14:36] [PASSED] 0xD753 (NOVALAKE_P)
[01:14:36] [PASSED] 0xD754 (NOVALAKE_P)
[01:14:36] [PASSED] 0xD755 (NOVALAKE_P)
[01:14:36] [PASSED] 0xD756 (NOVALAKE_P)
[01:14:36] [PASSED] 0xD757 (NOVALAKE_P)
[01:14:36] [PASSED] 0xD75F (NOVALAKE_P)
[01:14:36] =============== [PASSED] check_platform_desc ===============
[01:14:36] ===================== [PASSED] xe_pci ======================
[01:14:36] =================== xe_rtp (2 subtests) ====================
[01:14:36] =============== xe_rtp_process_to_sr_tests  ================
[01:14:36] [PASSED] coalesce-same-reg
[01:14:36] [PASSED] no-match-no-add
[01:14:36] [PASSED] match-or
[01:14:36] [PASSED] match-or-xfail
[01:14:36] [PASSED] no-match-no-add-multiple-rules
[01:14:36] [PASSED] two-regs-two-entries
[01:14:36] [PASSED] clr-one-set-other
[01:14:36] [PASSED] set-field
[01:14:36] [PASSED] conflict-duplicate
stty: 'standard input': Inappropriate ioctl for device
[01:14:36] [PASSED] conflict-not-disjoint
[01:14:36] [PASSED] conflict-reg-type
[01:14:36] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[01:14:36] ================== xe_rtp_process_tests  ===================
[01:14:36] [PASSED] active1
[01:14:36] [PASSED] active2
[01:14:36] [PASSED] active-inactive
[01:14:36] [PASSED] inactive-active
[01:14:36] [PASSED] inactive-1st_or_active-inactive
[01:14:36] [PASSED] inactive-2nd_or_active-inactive
[01:14:36] [PASSED] inactive-last_or_active-inactive
[01:14:36] [PASSED] inactive-no_or_active-inactive
[01:14:36] ============== [PASSED] xe_rtp_process_tests ===============
[01:14:36] ===================== [PASSED] xe_rtp ======================
[01:14:36] ==================== xe_wa (1 subtest) =====================
[01:14:36] ======================== xe_wa_gt  =========================
[01:14:36] [PASSED] TIGERLAKE B0
[01:14:36] [PASSED] DG1 A0
[01:14:36] [PASSED] DG1 B0
[01:14:36] [PASSED] ALDERLAKE_S A0
[01:14:36] [PASSED] ALDERLAKE_S B0
[01:14:36] [PASSED] ALDERLAKE_S C0
[01:14:36] [PASSED] ALDERLAKE_S D0
[01:14:36] [PASSED] ALDERLAKE_P A0
[01:14:36] [PASSED] ALDERLAKE_P B0
[01:14:36] [PASSED] ALDERLAKE_P C0
[01:14:36] [PASSED] ALDERLAKE_S RPLS D0
[01:14:36] [PASSED] ALDERLAKE_P RPLU E0
[01:14:36] [PASSED] DG2 G10 C0
[01:14:36] [PASSED] DG2 G11 B1
[01:14:36] [PASSED] DG2 G12 A1
[01:14:36] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[01:14:36] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[01:14:36] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[01:14:36] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[01:14:36] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[01:14:36] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[01:14:36] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[01:14:36] ==================== [PASSED] xe_wa_gt =====================
[01:14:36] ====================== [PASSED] xe_wa ======================
[01:14:36] ============================================================
[01:14:36] Testing complete. Ran 597 tests: passed: 579, skipped: 18
[01:14:36] Elapsed time: 36.238s total, 4.289s configuring, 31.332s building, 0.595s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[01:14:36] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[01:14:37] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[01:15:02] Starting KUnit Kernel (1/1)...
[01:15:02] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[01:15:02] ============ drm_test_pick_cmdline (2 subtests) ============
[01:15:02] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[01:15:02] =============== drm_test_pick_cmdline_named  ===============
[01:15:02] [PASSED] NTSC
[01:15:02] [PASSED] NTSC-J
[01:15:02] [PASSED] PAL
[01:15:02] [PASSED] PAL-M
[01:15:02] =========== [PASSED] drm_test_pick_cmdline_named ===========
[01:15:02] ============== [PASSED] drm_test_pick_cmdline ==============
[01:15:02] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[01:15:02] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[01:15:02] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[01:15:02] =========== drm_validate_clone_mode (2 subtests) ===========
[01:15:02] ============== drm_test_check_in_clone_mode  ===============
[01:15:02] [PASSED] in_clone_mode
[01:15:02] [PASSED] not_in_clone_mode
[01:15:02] ========== [PASSED] drm_test_check_in_clone_mode ===========
[01:15:02] =============== drm_test_check_valid_clones  ===============
[01:15:02] [PASSED] not_in_clone_mode
[01:15:02] [PASSED] valid_clone
[01:15:02] [PASSED] invalid_clone
[01:15:02] =========== [PASSED] drm_test_check_valid_clones ===========
[01:15:02] ============= [PASSED] drm_validate_clone_mode =============
[01:15:02] ============= drm_validate_modeset (1 subtest) =============
[01:15:02] [PASSED] drm_test_check_connector_changed_modeset
[01:15:02] ============== [PASSED] drm_validate_modeset ===============
[01:15:02] ====== drm_test_bridge_get_current_state (2 subtests) ======
[01:15:02] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[01:15:02] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[01:15:02] ======== [PASSED] drm_test_bridge_get_current_state ========
[01:15:02] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[01:15:02] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[01:15:02] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[01:15:02] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[01:15:02] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[01:15:02] ============== drm_bridge_alloc (2 subtests) ===============
[01:15:02] [PASSED] drm_test_drm_bridge_alloc_basic
[01:15:02] [PASSED] drm_test_drm_bridge_alloc_get_put
[01:15:02] ================ [PASSED] drm_bridge_alloc =================
[01:15:02] ============= drm_cmdline_parser (40 subtests) =============
[01:15:02] [PASSED] drm_test_cmdline_force_d_only
[01:15:02] [PASSED] drm_test_cmdline_force_D_only_dvi
[01:15:02] [PASSED] drm_test_cmdline_force_D_only_hdmi
[01:15:02] [PASSED] drm_test_cmdline_force_D_only_not_digital
[01:15:02] [PASSED] drm_test_cmdline_force_e_only
[01:15:02] [PASSED] drm_test_cmdline_res
[01:15:02] [PASSED] drm_test_cmdline_res_vesa
[01:15:02] [PASSED] drm_test_cmdline_res_vesa_rblank
[01:15:02] [PASSED] drm_test_cmdline_res_rblank
[01:15:02] [PASSED] drm_test_cmdline_res_bpp
[01:15:02] [PASSED] drm_test_cmdline_res_refresh
[01:15:02] [PASSED] drm_test_cmdline_res_bpp_refresh
[01:15:02] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[01:15:02] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[01:15:02] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[01:15:02] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[01:15:02] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[01:15:02] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[01:15:02] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[01:15:02] [PASSED] drm_test_cmdline_res_margins_force_on
[01:15:02] [PASSED] drm_test_cmdline_res_vesa_margins
[01:15:02] [PASSED] drm_test_cmdline_name
[01:15:02] [PASSED] drm_test_cmdline_name_bpp
[01:15:02] [PASSED] drm_test_cmdline_name_option
[01:15:02] [PASSED] drm_test_cmdline_name_bpp_option
[01:15:02] [PASSED] drm_test_cmdline_rotate_0
[01:15:02] [PASSED] drm_test_cmdline_rotate_90
[01:15:02] [PASSED] drm_test_cmdline_rotate_180
[01:15:02] [PASSED] drm_test_cmdline_rotate_270
[01:15:02] [PASSED] drm_test_cmdline_hmirror
[01:15:02] [PASSED] drm_test_cmdline_vmirror
[01:15:02] [PASSED] drm_test_cmdline_margin_options
[01:15:02] [PASSED] drm_test_cmdline_multiple_options
[01:15:02] [PASSED] drm_test_cmdline_bpp_extra_and_option
[01:15:02] [PASSED] drm_test_cmdline_extra_and_option
[01:15:02] [PASSED] drm_test_cmdline_freestanding_options
[01:15:02] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[01:15:02] [PASSED] drm_test_cmdline_panel_orientation
[01:15:02] ================ drm_test_cmdline_invalid  =================
[01:15:02] [PASSED] margin_only
[01:15:02] [PASSED] interlace_only
[01:15:02] [PASSED] res_missing_x
[01:15:02] [PASSED] res_missing_y
[01:15:02] [PASSED] res_bad_y
[01:15:02] [PASSED] res_missing_y_bpp
[01:15:02] [PASSED] res_bad_bpp
[01:15:02] [PASSED] res_bad_refresh
[01:15:02] [PASSED] res_bpp_refresh_force_on_off
[01:15:02] [PASSED] res_invalid_mode
[01:15:02] [PASSED] res_bpp_wrong_place_mode
[01:15:02] [PASSED] name_bpp_refresh
[01:15:02] [PASSED] name_refresh
[01:15:02] [PASSED] name_refresh_wrong_mode
[01:15:02] [PASSED] name_refresh_invalid_mode
[01:15:02] [PASSED] rotate_multiple
[01:15:02] [PASSED] rotate_invalid_val
[01:15:02] [PASSED] rotate_truncated
[01:15:02] [PASSED] invalid_option
[01:15:02] [PASSED] invalid_tv_option
[01:15:02] [PASSED] truncated_tv_option
[01:15:02] ============ [PASSED] drm_test_cmdline_invalid =============
[01:15:02] =============== drm_test_cmdline_tv_options  ===============
[01:15:02] [PASSED] NTSC
[01:15:02] [PASSED] NTSC_443
[01:15:02] [PASSED] NTSC_J
[01:15:02] [PASSED] PAL
[01:15:02] [PASSED] PAL_M
[01:15:02] [PASSED] PAL_N
[01:15:02] [PASSED] SECAM
[01:15:02] [PASSED] MONO_525
[01:15:02] [PASSED] MONO_625
[01:15:02] =========== [PASSED] drm_test_cmdline_tv_options ===========
[01:15:02] =============== [PASSED] drm_cmdline_parser ================
[01:15:02] ========== drmm_connector_hdmi_init (20 subtests) ==========
[01:15:02] [PASSED] drm_test_connector_hdmi_init_valid
[01:15:02] [PASSED] drm_test_connector_hdmi_init_bpc_8
[01:15:02] [PASSED] drm_test_connector_hdmi_init_bpc_10
[01:15:02] [PASSED] drm_test_connector_hdmi_init_bpc_12
[01:15:02] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[01:15:02] [PASSED] drm_test_connector_hdmi_init_bpc_null
[01:15:02] [PASSED] drm_test_connector_hdmi_init_formats_empty
[01:15:02] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[01:15:02] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[01:15:02] [PASSED] supported_formats=0x9 yuv420_allowed=1
[01:15:02] [PASSED] supported_formats=0x9 yuv420_allowed=0
[01:15:02] [PASSED] supported_formats=0x5 yuv420_allowed=1
[01:15:02] [PASSED] supported_formats=0x5 yuv420_allowed=0
[01:15:02] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[01:15:02] [PASSED] drm_test_connector_hdmi_init_null_ddc
[01:15:02] [PASSED] drm_test_connector_hdmi_init_null_product
[01:15:02] [PASSED] drm_test_connector_hdmi_init_null_vendor
[01:15:02] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[01:15:02] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[01:15:02] [PASSED] drm_test_connector_hdmi_init_product_valid
[01:15:02] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[01:15:02] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[01:15:02] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[01:15:02] ========= drm_test_connector_hdmi_init_type_valid  =========
[01:15:02] [PASSED] HDMI-A
[01:15:02] [PASSED] HDMI-B
[01:15:02] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[01:15:02] ======== drm_test_connector_hdmi_init_type_invalid  ========
[01:15:02] [PASSED] Unknown
[01:15:02] [PASSED] VGA
[01:15:02] [PASSED] DVI-I
[01:15:02] [PASSED] DVI-D
[01:15:02] [PASSED] DVI-A
[01:15:02] [PASSED] Composite
[01:15:02] [PASSED] SVIDEO
[01:15:02] [PASSED] LVDS
[01:15:02] [PASSED] Component
[01:15:02] [PASSED] DIN
[01:15:02] [PASSED] DP
[01:15:02] [PASSED] TV
[01:15:02] [PASSED] eDP
[01:15:02] [PASSED] Virtual
[01:15:02] [PASSED] DSI
[01:15:02] [PASSED] DPI
[01:15:02] [PASSED] Writeback
[01:15:02] [PASSED] SPI
[01:15:02] [PASSED] USB
[01:15:02] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[01:15:02] ============ [PASSED] drmm_connector_hdmi_init =============
[01:15:02] ============= drmm_connector_init (3 subtests) =============
[01:15:02] [PASSED] drm_test_drmm_connector_init
[01:15:02] [PASSED] drm_test_drmm_connector_init_null_ddc
[01:15:02] ========= drm_test_drmm_connector_init_type_valid  =========
[01:15:02] [PASSED] Unknown
[01:15:02] [PASSED] VGA
[01:15:02] [PASSED] DVI-I
[01:15:02] [PASSED] DVI-D
[01:15:02] [PASSED] DVI-A
[01:15:02] [PASSED] Composite
[01:15:02] [PASSED] SVIDEO
[01:15:02] [PASSED] LVDS
[01:15:02] [PASSED] Component
[01:15:02] [PASSED] DIN
[01:15:02] [PASSED] DP
[01:15:02] [PASSED] HDMI-A
[01:15:02] [PASSED] HDMI-B
[01:15:02] [PASSED] TV
[01:15:02] [PASSED] eDP
[01:15:02] [PASSED] Virtual
[01:15:02] [PASSED] DSI
[01:15:02] [PASSED] DPI
[01:15:02] [PASSED] Writeback
[01:15:02] [PASSED] SPI
[01:15:02] [PASSED] USB
[01:15:02] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[01:15:02] =============== [PASSED] drmm_connector_init ===============
[01:15:02] ========= drm_connector_dynamic_init (6 subtests) ==========
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_init
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_init_properties
[01:15:02] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[01:15:02] [PASSED] Unknown
[01:15:02] [PASSED] VGA
[01:15:02] [PASSED] DVI-I
[01:15:02] [PASSED] DVI-D
[01:15:02] [PASSED] DVI-A
[01:15:02] [PASSED] Composite
[01:15:02] [PASSED] SVIDEO
[01:15:02] [PASSED] LVDS
[01:15:02] [PASSED] Component
[01:15:02] [PASSED] DIN
[01:15:02] [PASSED] DP
[01:15:02] [PASSED] HDMI-A
[01:15:02] [PASSED] HDMI-B
[01:15:02] [PASSED] TV
[01:15:02] [PASSED] eDP
[01:15:02] [PASSED] Virtual
[01:15:02] [PASSED] DSI
[01:15:02] [PASSED] DPI
[01:15:02] [PASSED] Writeback
[01:15:02] [PASSED] SPI
[01:15:02] [PASSED] USB
[01:15:02] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[01:15:02] ======== drm_test_drm_connector_dynamic_init_name  =========
[01:15:02] [PASSED] Unknown
[01:15:02] [PASSED] VGA
[01:15:02] [PASSED] DVI-I
[01:15:02] [PASSED] DVI-D
[01:15:02] [PASSED] DVI-A
[01:15:02] [PASSED] Composite
[01:15:02] [PASSED] SVIDEO
[01:15:02] [PASSED] LVDS
[01:15:02] [PASSED] Component
[01:15:02] [PASSED] DIN
[01:15:02] [PASSED] DP
[01:15:02] [PASSED] HDMI-A
[01:15:02] [PASSED] HDMI-B
[01:15:02] [PASSED] TV
[01:15:02] [PASSED] eDP
[01:15:02] [PASSED] Virtual
[01:15:02] [PASSED] DSI
[01:15:02] [PASSED] DPI
[01:15:02] [PASSED] Writeback
[01:15:02] [PASSED] SPI
[01:15:02] [PASSED] USB
[01:15:02] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[01:15:02] =========== [PASSED] drm_connector_dynamic_init ============
[01:15:02] ==== drm_connector_dynamic_register_early (4 subtests) =====
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[01:15:02] ====== [PASSED] drm_connector_dynamic_register_early =======
[01:15:02] ======= drm_connector_dynamic_register (7 subtests) ========
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[01:15:02] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[01:15:02] ========= [PASSED] drm_connector_dynamic_register ==========
[01:15:02] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[01:15:02] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[01:15:02] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[01:15:02] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[01:15:02] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[01:15:02] ========== drm_test_get_tv_mode_from_name_valid  ===========
[01:15:02] [PASSED] NTSC
[01:15:02] [PASSED] NTSC-443
[01:15:02] [PASSED] NTSC-J
[01:15:02] [PASSED] PAL
[01:15:02] [PASSED] PAL-M
[01:15:02] [PASSED] PAL-N
[01:15:02] [PASSED] SECAM
[01:15:02] [PASSED] Mono
[01:15:02] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[01:15:02] [PASSED] drm_test_get_tv_mode_from_name_truncated
[01:15:02] ============ [PASSED] drm_get_tv_mode_from_name ============
[01:15:02] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[01:15:02] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[01:15:02] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[01:15:02] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[01:15:02] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[01:15:02] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[01:15:02] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[01:15:02] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[01:15:02] [PASSED] VIC 96
[01:15:02] [PASSED] VIC 97
[01:15:02] [PASSED] VIC 101
[01:15:02] [PASSED] VIC 102
[01:15:02] [PASSED] VIC 106
[01:15:02] [PASSED] VIC 107
[01:15:02] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[01:15:02] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[01:15:02] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[01:15:02] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[01:15:02] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[01:15:02] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[01:15:02] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[01:15:02] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[01:15:02] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[01:15:02] [PASSED] Automatic
[01:15:02] [PASSED] Full
[01:15:02] [PASSED] Limited 16:235
[01:15:02] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[01:15:02] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[01:15:02] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[01:15:02] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[01:15:02] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[01:15:02] [PASSED] RGB
[01:15:02] [PASSED] YUV 4:2:0
[01:15:02] [PASSED] YUV 4:2:2
[01:15:02] [PASSED] YUV 4:4:4
[01:15:02] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[01:15:02] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[01:15:02] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[01:15:02] ============= drm_damage_helper (21 subtests) ==============
[01:15:02] [PASSED] drm_test_damage_iter_no_damage
[01:15:02] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[01:15:02] [PASSED] drm_test_damage_iter_no_damage_src_moved
[01:15:02] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[01:15:02] [PASSED] drm_test_damage_iter_no_damage_not_visible
[01:15:02] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[01:15:02] [PASSED] drm_test_damage_iter_no_damage_no_fb
[01:15:02] [PASSED] drm_test_damage_iter_simple_damage
[01:15:02] [PASSED] drm_test_damage_iter_single_damage
[01:15:02] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[01:15:02] [PASSED] drm_test_damage_iter_single_damage_outside_src
[01:15:02] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[01:15:02] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[01:15:02] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[01:15:02] [PASSED] drm_test_damage_iter_single_damage_src_moved
[01:15:02] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[01:15:02] [PASSED] drm_test_damage_iter_damage
[01:15:02] [PASSED] drm_test_damage_iter_damage_one_intersect
[01:15:02] [PASSED] drm_test_damage_iter_damage_one_outside
[01:15:02] [PASSED] drm_test_damage_iter_damage_src_moved
[01:15:02] [PASSED] drm_test_damage_iter_damage_not_visible
[01:15:02] ================ [PASSED] drm_damage_helper ================
[01:15:02] ============== drm_dp_mst_helper (3 subtests) ==============
[01:15:02] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[01:15:02] [PASSED] Clock 154000 BPP 30 DSC disabled
[01:15:02] [PASSED] Clock 234000 BPP 30 DSC disabled
[01:15:02] [PASSED] Clock 297000 BPP 24 DSC disabled
[01:15:02] [PASSED] Clock 332880 BPP 24 DSC enabled
[01:15:02] [PASSED] Clock 324540 BPP 24 DSC enabled
[01:15:02] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[01:15:02] ============== drm_test_dp_mst_calc_pbn_div  ===============
[01:15:02] [PASSED] Link rate 2000000 lane count 4
[01:15:02] [PASSED] Link rate 2000000 lane count 2
[01:15:02] [PASSED] Link rate 2000000 lane count 1
[01:15:02] [PASSED] Link rate 1350000 lane count 4
[01:15:02] [PASSED] Link rate 1350000 lane count 2
[01:15:02] [PASSED] Link rate 1350000 lane count 1
[01:15:02] [PASSED] Link rate 1000000 lane count 4
[01:15:02] [PASSED] Link rate 1000000 lane count 2
[01:15:02] [PASSED] Link rate 1000000 lane count 1
[01:15:02] [PASSED] Link rate 810000 lane count 4
[01:15:02] [PASSED] Link rate 810000 lane count 2
[01:15:02] [PASSED] Link rate 810000 lane count 1
[01:15:02] [PASSED] Link rate 540000 lane count 4
[01:15:02] [PASSED] Link rate 540000 lane count 2
[01:15:02] [PASSED] Link rate 540000 lane count 1
[01:15:02] [PASSED] Link rate 270000 lane count 4
[01:15:02] [PASSED] Link rate 270000 lane count 2
[01:15:02] [PASSED] Link rate 270000 lane count 1
[01:15:02] [PASSED] Link rate 162000 lane count 4
[01:15:02] [PASSED] Link rate 162000 lane count 2
[01:15:02] [PASSED] Link rate 162000 lane count 1
[01:15:02] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[01:15:02] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[01:15:02] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[01:15:02] [PASSED] DP_POWER_UP_PHY with port number
[01:15:02] [PASSED] DP_POWER_DOWN_PHY with port number
[01:15:02] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[01:15:02] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[01:15:02] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[01:15:02] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[01:15:02] [PASSED] DP_QUERY_PAYLOAD with port number
[01:15:02] [PASSED] DP_QUERY_PAYLOAD with VCPI
[01:15:02] [PASSED] DP_REMOTE_DPCD_READ with port number
[01:15:02] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[01:15:02] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[01:15:02] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[01:15:02] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[01:15:02] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[01:15:02] [PASSED] DP_REMOTE_I2C_READ with port number
[01:15:02] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[01:15:02] [PASSED] DP_REMOTE_I2C_READ with transactions array
[01:15:02] [PASSED] DP_REMOTE_I2C_WRITE with port number
[01:15:02] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[01:15:02] [PASSED] DP_REMOTE_I2C_WRITE with data array
[01:15:02] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[01:15:02] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[01:15:02] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[01:15:02] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[01:15:02] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[01:15:02] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[01:15:02] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[01:15:02] ================ [PASSED] drm_dp_mst_helper ================
[01:15:02] ================== drm_exec (7 subtests) ===================
[01:15:02] [PASSED] sanitycheck
[01:15:02] [PASSED] test_lock
[01:15:02] [PASSED] test_lock_unlock
[01:15:02] [PASSED] test_duplicates
[01:15:02] [PASSED] test_prepare
[01:15:02] [PASSED] test_prepare_array
[01:15:02] [PASSED] test_multiple_loops
[01:15:02] ==================== [PASSED] drm_exec =====================
[01:15:02] =========== drm_format_helper_test (17 subtests) ===========
[01:15:02] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[01:15:02] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[01:15:02] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[01:15:02] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[01:15:02] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[01:15:02] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[01:15:02] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[01:15:02] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[01:15:02] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[01:15:02] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[01:15:02] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[01:15:02] ============== drm_test_fb_xrgb8888_to_mono  ===============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[01:15:02] ==================== drm_test_fb_swab  =====================
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ================ [PASSED] drm_test_fb_swab =================
[01:15:02] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[01:15:02] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[01:15:02] [PASSED] single_pixel_source_buffer
[01:15:02] [PASSED] single_pixel_clip_rectangle
[01:15:02] [PASSED] well_known_colors
[01:15:02] [PASSED] destination_pitch
[01:15:02] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[01:15:02] ================= drm_test_fb_clip_offset  =================
[01:15:02] [PASSED] pass through
[01:15:02] [PASSED] horizontal offset
[01:15:02] [PASSED] vertical offset
[01:15:02] [PASSED] horizontal and vertical offset
[01:15:02] [PASSED] horizontal offset (custom pitch)
[01:15:02] [PASSED] vertical offset (custom pitch)
[01:15:02] [PASSED] horizontal and vertical offset (custom pitch)
[01:15:02] ============= [PASSED] drm_test_fb_clip_offset =============
[01:15:02] =================== drm_test_fb_memcpy  ====================
[01:15:02] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[01:15:02] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[01:15:02] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[01:15:02] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[01:15:02] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[01:15:02] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[01:15:02] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[01:15:02] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[01:15:02] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[01:15:02] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[01:15:02] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[01:15:02] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[01:15:02] =============== [PASSED] drm_test_fb_memcpy ================
[01:15:02] ============= [PASSED] drm_format_helper_test ==============
[01:15:02] ================= drm_format (18 subtests) =================
[01:15:02] [PASSED] drm_test_format_block_width_invalid
[01:15:02] [PASSED] drm_test_format_block_width_one_plane
[01:15:02] [PASSED] drm_test_format_block_width_two_plane
[01:15:02] [PASSED] drm_test_format_block_width_three_plane
[01:15:02] [PASSED] drm_test_format_block_width_tiled
[01:15:02] [PASSED] drm_test_format_block_height_invalid
[01:15:02] [PASSED] drm_test_format_block_height_one_plane
[01:15:02] [PASSED] drm_test_format_block_height_two_plane
[01:15:02] [PASSED] drm_test_format_block_height_three_plane
[01:15:02] [PASSED] drm_test_format_block_height_tiled
[01:15:02] [PASSED] drm_test_format_min_pitch_invalid
[01:15:02] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[01:15:02] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[01:15:02] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[01:15:02] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[01:15:02] [PASSED] drm_test_format_min_pitch_two_plane
[01:15:02] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[01:15:02] [PASSED] drm_test_format_min_pitch_tiled
[01:15:02] =================== [PASSED] drm_format ====================
[01:15:02] ============== drm_framebuffer (10 subtests) ===============
[01:15:02] ========== drm_test_framebuffer_check_src_coords  ==========
[01:15:02] [PASSED] Success: source fits into fb
[01:15:02] [PASSED] Fail: overflowing fb with x-axis coordinate
[01:15:02] [PASSED] Fail: overflowing fb with y-axis coordinate
[01:15:02] [PASSED] Fail: overflowing fb with source width
[01:15:02] [PASSED] Fail: overflowing fb with source height
[01:15:02] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[01:15:02] [PASSED] drm_test_framebuffer_cleanup
[01:15:02] =============== drm_test_framebuffer_create  ===============
[01:15:02] [PASSED] ABGR8888 normal sizes
[01:15:02] [PASSED] ABGR8888 max sizes
[01:15:02] [PASSED] ABGR8888 pitch greater than min required
[01:15:02] [PASSED] ABGR8888 pitch less than min required
[01:15:02] [PASSED] ABGR8888 Invalid width
[01:15:02] [PASSED] ABGR8888 Invalid buffer handle
[01:15:02] [PASSED] No pixel format
[01:15:02] [PASSED] ABGR8888 Width 0
[01:15:02] [PASSED] ABGR8888 Height 0
[01:15:02] [PASSED] ABGR8888 Out of bound height * pitch combination
[01:15:02] [PASSED] ABGR8888 Large buffer offset
[01:15:02] [PASSED] ABGR8888 Buffer offset for inexistent plane
[01:15:02] [PASSED] ABGR8888 Invalid flag
[01:15:02] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[01:15:02] [PASSED] ABGR8888 Valid buffer modifier
[01:15:02] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[01:15:02] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[01:15:02] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[01:15:02] [PASSED] NV12 Normal sizes
[01:15:02] [PASSED] NV12 Max sizes
[01:15:02] [PASSED] NV12 Invalid pitch
[01:15:02] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[01:15:02] [PASSED] NV12 different  modifier per-plane
[01:15:02] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[01:15:02] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[01:15:02] [PASSED] NV12 Modifier for inexistent plane
[01:15:02] [PASSED] NV12 Handle for inexistent plane
[01:15:02] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[01:15:02] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[01:15:02] [PASSED] YVU420 Normal sizes
[01:15:02] [PASSED] YVU420 Max sizes
[01:15:02] [PASSED] YVU420 Invalid pitch
[01:15:02] [PASSED] YVU420 Different pitches
[01:15:02] [PASSED] YVU420 Different buffer offsets/pitches
[01:15:02] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[01:15:02] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[01:15:02] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[01:15:02] [PASSED] YVU420 Valid modifier
[01:15:02] [PASSED] YVU420 Different modifiers per plane
[01:15:02] [PASSED] YVU420 Modifier for inexistent plane
[01:15:02] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[01:15:02] [PASSED] X0L2 Normal sizes
[01:15:02] [PASSED] X0L2 Max sizes
[01:15:02] [PASSED] X0L2 Invalid pitch
[01:15:02] [PASSED] X0L2 Pitch greater than minimum required
[01:15:02] [PASSED] X0L2 Handle for inexistent plane
[01:15:02] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[01:15:02] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[01:15:02] [PASSED] X0L2 Valid modifier
[01:15:02] [PASSED] X0L2 Modifier for inexistent plane
[01:15:02] =========== [PASSED] drm_test_framebuffer_create ===========
[01:15:02] [PASSED] drm_test_framebuffer_free
[01:15:02] [PASSED] drm_test_framebuffer_init
[01:15:02] [PASSED] drm_test_framebuffer_init_bad_format
[01:15:02] [PASSED] drm_test_framebuffer_init_dev_mismatch
[01:15:02] [PASSED] drm_test_framebuffer_lookup
[01:15:02] [PASSED] drm_test_framebuffer_lookup_inexistent
[01:15:02] [PASSED] drm_test_framebuffer_modifiers_not_supported
[01:15:02] ================= [PASSED] drm_framebuffer =================
[01:15:02] ================ drm_gem_shmem (8 subtests) ================
[01:15:02] [PASSED] drm_gem_shmem_test_obj_create
[01:15:02] [PASSED] drm_gem_shmem_test_obj_create_private
[01:15:02] [PASSED] drm_gem_shmem_test_pin_pages
[01:15:02] [PASSED] drm_gem_shmem_test_vmap
[01:15:02] [PASSED] drm_gem_shmem_test_get_sg_table
[01:15:02] [PASSED] drm_gem_shmem_test_get_pages_sgt
[01:15:02] [PASSED] drm_gem_shmem_test_madvise
[01:15:02] [PASSED] drm_gem_shmem_test_purge
[01:15:02] ================== [PASSED] drm_gem_shmem ==================
[01:15:02] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[01:15:02] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[01:15:02] [PASSED] Automatic
[01:15:02] [PASSED] Full
[01:15:02] [PASSED] Limited 16:235
[01:15:02] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[01:15:02] [PASSED] drm_test_check_disable_connector
[01:15:02] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[01:15:02] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[01:15:02] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[01:15:02] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[01:15:02] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[01:15:02] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[01:15:02] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[01:15:02] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[01:15:02] [PASSED] drm_test_check_output_bpc_dvi
[01:15:02] [PASSED] drm_test_check_output_bpc_format_vic_1
[01:15:02] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[01:15:02] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[01:15:02] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[01:15:02] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[01:15:02] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[01:15:02] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[01:15:02] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[01:15:02] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[01:15:02] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[01:15:02] [PASSED] drm_test_check_broadcast_rgb_value
[01:15:02] [PASSED] drm_test_check_bpc_8_value
[01:15:02] [PASSED] drm_test_check_bpc_10_value
[01:15:02] [PASSED] drm_test_check_bpc_12_value
[01:15:02] [PASSED] drm_test_check_format_value
[01:15:02] [PASSED] drm_test_check_tmds_char_value
[01:15:02] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[01:15:02] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[01:15:02] [PASSED] drm_test_check_mode_valid
[01:15:02] [PASSED] drm_test_check_mode_valid_reject
[01:15:02] [PASSED] drm_test_check_mode_valid_reject_rate
[01:15:02] [PASSED] drm_test_check_mode_valid_reject_max_clock
[01:15:02] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[01:15:02] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[01:15:02] [PASSED] drm_test_check_infoframes
[01:15:02] [PASSED] drm_test_check_reject_avi_infoframe
[01:15:02] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[01:15:02] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[01:15:02] [PASSED] drm_test_check_reject_audio_infoframe
[01:15:02] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[01:15:02] ================= drm_managed (2 subtests) =================
[01:15:02] [PASSED] drm_test_managed_release_action
[01:15:02] [PASSED] drm_test_managed_run_action
[01:15:02] =================== [PASSED] drm_managed ===================
[01:15:02] =================== drm_mm (6 subtests) ====================
[01:15:02] [PASSED] drm_test_mm_init
[01:15:02] [PASSED] drm_test_mm_debug
[01:15:02] [PASSED] drm_test_mm_align32
[01:15:02] [PASSED] drm_test_mm_align64
[01:15:02] [PASSED] drm_test_mm_lowest
[01:15:02] [PASSED] drm_test_mm_highest
[01:15:02] ===================== [PASSED] drm_mm ======================
[01:15:02] ============= drm_modes_analog_tv (5 subtests) =============
[01:15:02] [PASSED] drm_test_modes_analog_tv_mono_576i
[01:15:02] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[01:15:02] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[01:15:02] [PASSED] drm_test_modes_analog_tv_pal_576i
[01:15:02] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[01:15:02] =============== [PASSED] drm_modes_analog_tv ===============
[01:15:02] ============== drm_plane_helper (2 subtests) ===============
[01:15:02] =============== drm_test_check_plane_state  ================
[01:15:02] [PASSED] clipping_simple
[01:15:02] [PASSED] clipping_rotate_reflect
[01:15:02] [PASSED] positioning_simple
[01:15:02] [PASSED] upscaling
[01:15:02] [PASSED] downscaling
[01:15:02] [PASSED] rounding1
[01:15:02] [PASSED] rounding2
[01:15:02] [PASSED] rounding3
[01:15:02] [PASSED] rounding4
[01:15:02] =========== [PASSED] drm_test_check_plane_state ============
[01:15:02] =========== drm_test_check_invalid_plane_state  ============
[01:15:02] [PASSED] positioning_invalid
[01:15:02] [PASSED] upscaling_invalid
[01:15:02] [PASSED] downscaling_invalid
[01:15:02] ======= [PASSED] drm_test_check_invalid_plane_state ========
[01:15:02] ================ [PASSED] drm_plane_helper =================
[01:15:02] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[01:15:02] ====== drm_test_connector_helper_tv_get_modes_check  =======
[01:15:02] [PASSED] None
[01:15:02] [PASSED] PAL
[01:15:02] [PASSED] NTSC
[01:15:02] [PASSED] Both, NTSC Default
[01:15:02] [PASSED] Both, PAL Default
[01:15:02] [PASSED] Both, NTSC Default, with PAL on command-line
[01:15:02] [PASSED] Both, PAL Default, with NTSC on command-line
[01:15:02] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[01:15:02] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[01:15:02] ================== drm_rect (9 subtests) ===================
[01:15:02] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[01:15:02] [PASSED] drm_test_rect_clip_scaled_not_clipped
[01:15:02] [PASSED] drm_test_rect_clip_scaled_clipped
[01:15:02] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[01:15:02] ================= drm_test_rect_intersect  =================
[01:15:02] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[01:15:02] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[01:15:02] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[01:15:02] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[01:15:02] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[01:15:02] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[01:15:02] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[01:15:02] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[01:15:02] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[01:15:02] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[01:15:02] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[01:15:02] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[01:15:02] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[01:15:02] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[01:15:02] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[01:15:02] ============= [PASSED] drm_test_rect_intersect =============
[01:15:02] ================ drm_test_rect_calc_hscale  ================
[01:15:02] [PASSED] normal use
[01:15:02] [PASSED] out of max range
[01:15:02] [PASSED] out of min range
[01:15:02] [PASSED] zero dst
[01:15:02] [PASSED] negative src
[01:15:02] [PASSED] negative dst
[01:15:02] ============ [PASSED] drm_test_rect_calc_hscale ============
[01:15:02] ================ drm_test_rect_calc_vscale  ================
[01:15:02] [PASSED] normal use
[01:15:02] [PASSED] out of max range
[01:15:02] [PASSED] out of min range
[01:15:02] [PASSED] zero dst
[01:15:02] [PASSED] negative src
[01:15:02] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[01:15:02] ============ [PASSED] drm_test_rect_calc_vscale ============
[01:15:02] ================== drm_test_rect_rotate  ===================
[01:15:02] [PASSED] reflect-x
[01:15:02] [PASSED] reflect-y
[01:15:02] [PASSED] rotate-0
[01:15:02] [PASSED] rotate-90
[01:15:02] [PASSED] rotate-180
[01:15:02] [PASSED] rotate-270
[01:15:02] ============== [PASSED] drm_test_rect_rotate ===============
[01:15:02] ================ drm_test_rect_rotate_inv  =================
[01:15:02] [PASSED] reflect-x
[01:15:02] [PASSED] reflect-y
[01:15:02] [PASSED] rotate-0
[01:15:02] [PASSED] rotate-90
[01:15:02] [PASSED] rotate-180
[01:15:02] [PASSED] rotate-270
[01:15:02] ============ [PASSED] drm_test_rect_rotate_inv =============
[01:15:02] ==================== [PASSED] drm_rect =====================
[01:15:02] ============ drm_sysfb_modeset_test (1 subtest) ============
[01:15:02] ============ drm_test_sysfb_build_fourcc_list  =============
[01:15:02] [PASSED] no native formats
[01:15:02] [PASSED] XRGB8888 as native format
[01:15:02] [PASSED] remove duplicates
[01:15:02] [PASSED] convert alpha formats
[01:15:02] [PASSED] random formats
[01:15:02] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[01:15:02] ============= [PASSED] drm_sysfb_modeset_test ==============
[01:15:02] ================== drm_fixp (2 subtests) ===================
[01:15:02] [PASSED] drm_test_int2fixp
[01:15:02] [PASSED] drm_test_sm2fixp
[01:15:02] ==================== [PASSED] drm_fixp =====================
[01:15:02] ============================================================
[01:15:02] Testing complete. Ran 621 tests: passed: 621
[01:15:02] Elapsed time: 26.193s total, 1.734s configuring, 24.292s building, 0.118s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[01:15:02] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[01:15:04] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[01:15:13] Starting KUnit Kernel (1/1)...
[01:15:13] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[01:15:13] ================= ttm_device (5 subtests) ==================
[01:15:13] [PASSED] ttm_device_init_basic
[01:15:13] [PASSED] ttm_device_init_multiple
[01:15:13] [PASSED] ttm_device_fini_basic
[01:15:13] [PASSED] ttm_device_init_no_vma_man
[01:15:13] ================== ttm_device_init_pools  ==================
[01:15:13] [PASSED] No DMA allocations, no DMA32 required
[01:15:13] [PASSED] DMA allocations, DMA32 required
[01:15:13] [PASSED] No DMA allocations, DMA32 required
[01:15:13] [PASSED] DMA allocations, no DMA32 required
[01:15:13] ============== [PASSED] ttm_device_init_pools ==============
[01:15:13] =================== [PASSED] ttm_device ====================
[01:15:13] ================== ttm_pool (8 subtests) ===================
[01:15:13] ================== ttm_pool_alloc_basic  ===================
[01:15:13] [PASSED] One page
[01:15:13] [PASSED] More than one page
[01:15:13] [PASSED] Above the allocation limit
[01:15:13] [PASSED] One page, with coherent DMA mappings enabled
[01:15:13] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[01:15:13] ============== [PASSED] ttm_pool_alloc_basic ===============
[01:15:13] ============== ttm_pool_alloc_basic_dma_addr  ==============
[01:15:13] [PASSED] One page
[01:15:13] [PASSED] More than one page
[01:15:13] [PASSED] Above the allocation limit
[01:15:13] [PASSED] One page, with coherent DMA mappings enabled
[01:15:13] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[01:15:13] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[01:15:13] [PASSED] ttm_pool_alloc_order_caching_match
[01:15:13] [PASSED] ttm_pool_alloc_caching_mismatch
[01:15:13] [PASSED] ttm_pool_alloc_order_mismatch
[01:15:13] [PASSED] ttm_pool_free_dma_alloc
[01:15:13] [PASSED] ttm_pool_free_no_dma_alloc
[01:15:13] [PASSED] ttm_pool_fini_basic
[01:15:13] ==================== [PASSED] ttm_pool =====================
[01:15:13] ================ ttm_resource (8 subtests) =================
[01:15:13] ================= ttm_resource_init_basic  =================
[01:15:13] [PASSED] Init resource in TTM_PL_SYSTEM
[01:15:13] [PASSED] Init resource in TTM_PL_VRAM
[01:15:13] [PASSED] Init resource in a private placement
[01:15:13] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[01:15:13] ============= [PASSED] ttm_resource_init_basic =============
[01:15:13] [PASSED] ttm_resource_init_pinned
[01:15:13] [PASSED] ttm_resource_fini_basic
[01:15:13] [PASSED] ttm_resource_manager_init_basic
[01:15:13] [PASSED] ttm_resource_manager_usage_basic
[01:15:13] [PASSED] ttm_resource_manager_set_used_basic
[01:15:13] [PASSED] ttm_sys_man_alloc_basic
[01:15:13] [PASSED] ttm_sys_man_free_basic
[01:15:13] ================== [PASSED] ttm_resource ===================
[01:15:13] =================== ttm_tt (15 subtests) ===================
[01:15:13] ==================== ttm_tt_init_basic  ====================
[01:15:13] [PASSED] Page-aligned size
[01:15:13] [PASSED] Extra pages requested
[01:15:13] ================ [PASSED] ttm_tt_init_basic ================
[01:15:13] [PASSED] ttm_tt_init_misaligned
[01:15:13] [PASSED] ttm_tt_fini_basic
[01:15:13] [PASSED] ttm_tt_fini_sg
[01:15:13] [PASSED] ttm_tt_fini_shmem
[01:15:13] [PASSED] ttm_tt_create_basic
[01:15:13] [PASSED] ttm_tt_create_invalid_bo_type
[01:15:13] [PASSED] ttm_tt_create_ttm_exists
[01:15:13] [PASSED] ttm_tt_create_failed
[01:15:13] [PASSED] ttm_tt_destroy_basic
[01:15:13] [PASSED] ttm_tt_populate_null_ttm
[01:15:13] [PASSED] ttm_tt_populate_populated_ttm
[01:15:13] [PASSED] ttm_tt_unpopulate_basic
[01:15:13] [PASSED] ttm_tt_unpopulate_empty_ttm
[01:15:13] [PASSED] ttm_tt_swapin_basic
[01:15:13] ===================== [PASSED] ttm_tt ======================
[01:15:13] =================== ttm_bo (14 subtests) ===================
[01:15:13] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[01:15:13] [PASSED] Cannot be interrupted and sleeps
[01:15:13] [PASSED] Cannot be interrupted, locks straight away
[01:15:13] [PASSED] Can be interrupted, sleeps
[01:15:13] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[01:15:13] [PASSED] ttm_bo_reserve_locked_no_sleep
[01:15:13] [PASSED] ttm_bo_reserve_no_wait_ticket
[01:15:13] [PASSED] ttm_bo_reserve_double_resv
[01:15:13] [PASSED] ttm_bo_reserve_interrupted
[01:15:13] [PASSED] ttm_bo_reserve_deadlock
[01:15:13] [PASSED] ttm_bo_unreserve_basic
[01:15:13] [PASSED] ttm_bo_unreserve_pinned
[01:15:13] [PASSED] ttm_bo_unreserve_bulk
[01:15:13] [PASSED] ttm_bo_fini_basic
[01:15:13] [PASSED] ttm_bo_fini_shared_resv
[01:15:13] [PASSED] ttm_bo_pin_basic
[01:15:13] [PASSED] ttm_bo_pin_unpin_resource
[01:15:13] [PASSED] ttm_bo_multiple_pin_one_unpin
[01:15:13] ===================== [PASSED] ttm_bo ======================
[01:15:13] ============== ttm_bo_validate (22 subtests) ===============
[01:15:13] ============== ttm_bo_init_reserved_sys_man  ===============
[01:15:13] [PASSED] Buffer object for userspace
[01:15:13] [PASSED] Kernel buffer object
[01:15:13] [PASSED] Shared buffer object
[01:15:13] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[01:15:13] ============== ttm_bo_init_reserved_mock_man  ==============
[01:15:13] [PASSED] Buffer object for userspace
[01:15:13] [PASSED] Kernel buffer object
[01:15:13] [PASSED] Shared buffer object
[01:15:13] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[01:15:13] [PASSED] ttm_bo_init_reserved_resv
[01:15:13] ================== ttm_bo_validate_basic  ==================
[01:15:13] [PASSED] Buffer object for userspace
[01:15:13] [PASSED] Kernel buffer object
[01:15:13] [PASSED] Shared buffer object
[01:15:13] ============== [PASSED] ttm_bo_validate_basic ==============
[01:15:13] [PASSED] ttm_bo_validate_invalid_placement
[01:15:13] ============= ttm_bo_validate_same_placement  ==============
[01:15:13] [PASSED] System manager
[01:15:13] [PASSED] VRAM manager
[01:15:13] ========= [PASSED] ttm_bo_validate_same_placement ==========
[01:15:13] [PASSED] ttm_bo_validate_failed_alloc
[01:15:13] [PASSED] ttm_bo_validate_pinned
[01:15:13] [PASSED] ttm_bo_validate_busy_placement
[01:15:13] ================ ttm_bo_validate_multihop  =================
[01:15:13] [PASSED] Buffer object for userspace
[01:15:13] [PASSED] Kernel buffer object
[01:15:13] [PASSED] Shared buffer object
[01:15:13] ============ [PASSED] ttm_bo_validate_multihop =============
[01:15:13] ========== ttm_bo_validate_no_placement_signaled  ==========
[01:15:13] [PASSED] Buffer object in system domain, no page vector
[01:15:13] [PASSED] Buffer object in system domain with an existing page vector
[01:15:13] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[01:15:13] ======== ttm_bo_validate_no_placement_not_signaled  ========
[01:15:13] [PASSED] Buffer object for userspace
[01:15:13] [PASSED] Kernel buffer object
[01:15:13] [PASSED] Shared buffer object
[01:15:13] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[01:15:13] [PASSED] ttm_bo_validate_move_fence_signaled
[01:15:13] ========= ttm_bo_validate_move_fence_not_signaled  =========
[01:15:13] [PASSED] Waits for GPU
[01:15:13] [PASSED] Tries to lock straight away
[01:15:13] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[01:15:13] [PASSED] ttm_bo_validate_swapout
[01:15:13] [PASSED] ttm_bo_validate_happy_evict
[01:15:13] [PASSED] ttm_bo_validate_all_pinned_evict
[01:15:13] [PASSED] ttm_bo_validate_allowed_only_evict
[01:15:13] [PASSED] ttm_bo_validate_deleted_evict
[01:15:13] [PASSED] ttm_bo_validate_busy_domain_evict
[01:15:13] [PASSED] ttm_bo_validate_evict_gutting
[01:15:13] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[01:15:13] ================= [PASSED] ttm_bo_validate =================
[01:15:13] ============================================================
[01:15:13] Testing complete. Ran 102 tests: passed: 102
[01:15:13] Elapsed time: 11.269s total, 1.708s configuring, 9.345s building, 0.174s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



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

* ✓ Xe.CI.BAT: success for drm: handle IRQ_HPD events correctly
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
                   ` (6 preceding siblings ...)
  2026-04-16  1:15 ` ✓ CI.KUnit: success for drm: handle IRQ_HPD events correctly Patchwork
@ 2026-04-16  2:04 ` Patchwork
  2026-04-16  4:17 ` ✓ Xe.CI.FULL: " Patchwork
  8 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-04-16  2:04 UTC (permalink / raw)
  To: Dmitry Baryshkov; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 950 bytes --]

== Series Details ==

Series: drm: handle IRQ_HPD events correctly
URL   : https://patchwork.freedesktop.org/series/164955/
State : success

== Summary ==

CI Bug Log - changes from xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9_BAT -> xe-pw-164955v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (13 -> 13)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


Build changes
-------------

  * Linux: xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9 -> xe-pw-164955v1

  IGT_8861: 63a08403d58b652dcab80da02d6078386da78c17 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9: b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9
  xe-pw-164955v1: 164955v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/index.html

[-- Attachment #2: Type: text/html, Size: 1498 bytes --]

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

* ✓ Xe.CI.FULL: success for drm: handle IRQ_HPD events correctly
  2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
                   ` (7 preceding siblings ...)
  2026-04-16  2:04 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-04-16  4:17 ` Patchwork
  8 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-04-16  4:17 UTC (permalink / raw)
  To: Dmitry Baryshkov; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 11709 bytes --]

== Series Details ==

Series: drm: handle IRQ_HPD events correctly
URL   : https://patchwork.freedesktop.org/series/164955/
State : success

== Summary ==

CI Bug Log - changes from xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9_FULL -> xe-pw-164955v1_FULL
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (2 -> 2)
------------------------------

  No changes in participating hosts

Known issues
------------

  Here are the changes found in xe-pw-164955v1_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
    - shard-bmg:          NOTRUN -> [SKIP][1] ([Intel XE#1124]) +1 other test skip
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][2] ([Intel XE#2887])
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-1/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][3] ([Intel XE#2652]) +8 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-dp-2:
    - shard-bmg:          [PASS][4] -> [INCOMPLETE][5] ([Intel XE#7084])
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-bmg-5/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-dp-2.html
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-2/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-dp-2.html

  * igt@kms_cursor_crc@cursor-offscreen-128x42:
    - shard-bmg:          NOTRUN -> [SKIP][6] ([Intel XE#2320]) +1 other test skip
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@kms_cursor_crc@cursor-offscreen-128x42.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-lnl:          [PASS][7] -> [FAIL][8] ([Intel XE#301]) +1 other test fail
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-lnl-6/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][9] ([Intel XE#4141]) +1 other test skip
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][10] ([Intel XE#2311]) +3 other tests skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@plane-fbc-rte:
    - shard-bmg:          NOTRUN -> [SKIP][11] ([Intel XE#2350] / [Intel XE#7503])
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@kms_frontbuffer_tracking@plane-fbc-rte.html

  * igt@kms_pm_backlight@fade:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#7376] / [Intel XE#870])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@kms_pm_backlight@fade.html

  * igt@kms_psr@fbc-psr-sprite-plane-move:
    - shard-bmg:          NOTRUN -> [SKIP][13] ([Intel XE#2234] / [Intel XE#2850]) +1 other test skip
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@kms_psr@fbc-psr-sprite-plane-move.html

  * igt@kms_vrr@max-min:
    - shard-bmg:          NOTRUN -> [SKIP][14] ([Intel XE#1499])
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-1/igt@kms_vrr@max-min.html

  * igt@xe_compute_preempt@compute-preempt-many-all-ram@engine-drm_xe_engine_class_compute:
    - shard-bmg:          [PASS][15] -> [ABORT][16] ([Intel XE#7750]) +1 other test abort
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-bmg-3/igt@xe_compute_preempt@compute-preempt-many-all-ram@engine-drm_xe_engine_class_compute.html
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-9/igt@xe_compute_preempt@compute-preempt-many-all-ram@engine-drm_xe_engine_class_compute.html

  * igt@xe_eudebug@connect-user:
    - shard-bmg:          NOTRUN -> [SKIP][17] ([Intel XE#7636]) +2 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@xe_eudebug@connect-user.html

  * igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate-race:
    - shard-bmg:          NOTRUN -> [SKIP][18] ([Intel XE#7136])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate-race.html

  * igt@xe_exec_multi_queue@one-queue-preempt-mode-fault-dyn-priority-smem:
    - shard-bmg:          NOTRUN -> [SKIP][19] ([Intel XE#6874]) +3 other tests skip
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@xe_exec_multi_queue@one-queue-preempt-mode-fault-dyn-priority-smem.html

  * igt@xe_exec_system_allocator@partial-middle-remap-cpu-fault:
    - shard-bmg:          [PASS][20] -> [FAIL][21] ([Intel XE#5625])
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-bmg-2/igt@xe_exec_system_allocator@partial-middle-remap-cpu-fault.html
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-10/igt@xe_exec_system_allocator@partial-middle-remap-cpu-fault.html

  * igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma:
    - shard-lnl:          [PASS][22] -> [FAIL][23] ([Intel XE#5625])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-lnl-4/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma.html
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-lnl-4/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma.html

  * igt@xe_multigpu_svm@mgpu-pagefault-prefetch:
    - shard-bmg:          NOTRUN -> [SKIP][24] ([Intel XE#6964])
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@xe_multigpu_svm@mgpu-pagefault-prefetch.html

  * igt@xe_oa@oa-tlb-invalidate:
    - shard-bmg:          NOTRUN -> [SKIP][25] ([Intel XE#2248] / [Intel XE#7325] / [Intel XE#7393])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@xe_oa@oa-tlb-invalidate.html

  
#### Possible fixes ####

  * igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1:
    - shard-lnl:          [FAIL][26] ([Intel XE#2142]) -> [PASS][27] +1 other test pass
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-lnl-5/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-lnl-2/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html

  * igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma:
    - shard-lnl:          [FAIL][28] ([Intel XE#5625]) -> [PASS][29]
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-lnl-6/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma.html
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-lnl-3/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma.html

  * igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create:
    - shard-bmg:          [ABORT][30] ([Intel XE#7578]) -> [PASS][31]
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-bmg-1/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create.html
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-1/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create.html

  * igt@xe_pat@pt-caching:
    - shard-bmg:          [ABORT][32] -> [PASS][33]
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-bmg-9/igt@xe_pat@pt-caching.html
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-6/igt@xe_pat@pt-caching.html

  
#### Warnings ####

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          [SKIP][34] ([Intel XE#3374] / [Intel XE#3544]) -> [SKIP][35] ([Intel XE#3544])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9/shard-bmg-3/igt@kms_hdr@brightness-with-hdr.html
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/shard-bmg-2/igt@kms_hdr@brightness-with-hdr.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#2142]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2142
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2248]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2248
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2350
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
  [Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#5625]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5625
  [Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
  [Intel XE#7136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7136
  [Intel XE#7325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7325
  [Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
  [Intel XE#7393]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7393
  [Intel XE#7503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7503
  [Intel XE#7578]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7578
  [Intel XE#7636]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7636
  [Intel XE#7750]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7750
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870


Build changes
-------------

  * Linux: xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9 -> xe-pw-164955v1

  IGT_8861: 63a08403d58b652dcab80da02d6078386da78c17 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-4908-b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9: b2dbef367fba940bdaca7a3a3645c4be3d3c8ff9
  xe-pw-164955v1: 164955v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164955v1/index.html

[-- Attachment #2: Type: text/html, Size: 13007 bytes --]

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

* Re: [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-15 23:22 ` [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event() Dmitry Baryshkov
@ 2026-04-16  8:10   ` Tomi Valkeinen
  2026-04-17 22:32     ` Dmitry Baryshkov
  0 siblings, 1 reply; 20+ messages in thread
From: Tomi Valkeinen @ 2026-04-16  8:10 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou

Hi,

On 16/04/2026 02:22, Dmitry Baryshkov wrote:
> The DisplayPort standard defines a special kind of events called IRQ.
> These events are used to notify DP Source about the events on the Sink
> side. It is extremely important for DP MST handling, where the MST
> events are reported through this IRQ.
> 
> In case of the USB-C DP AltMode there is no actual HPD pulse, but the
> events are ported through the bits in the AltMode VDOs.
> 
> Extend the drm_connector_oob_hotplug_event() interface and report IRQ
> events to the DisplayPort Sink drivers.
> 
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
>   drivers/gpu/drm/drm_connector.c          |  4 +++-
>   drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
>   include/drm/drm_connector.h              |  3 ++-
>   3 files changed, 13 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 47dc53c4a738..5fdacbd84bd7 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
>    * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
>    * @connector_fwnode: fwnode_handle to report the event on
>    * @status: hot plug detect logical state
> + * @irq_hpd: HPD pulse detected
>    *
>    * On some hardware a hotplug event notification may come from outside the display
>    * driver / device. An example of this is some USB Type-C setups where the hardware
> @@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
>    * a drm_connector reference through calling drm_connector_find_by_fwnode().
>    */
>   void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
> -				     enum drm_connector_status status)
> +				     enum drm_connector_status status,
> +				     bool irq_hpd)
I find the "IRQ HPD" naming always confusing, even if I'm somewhat 
familiar with DP, but if someone has mainly worked on HDMI, I'm sure 
it's even worse.

Can we define this a bit more precisely? Is 'irq_hpd' only for 
displayport?  If so, perhaps 'dp_irq_hpd' or 'displayport_irq_hpd'. I 
might even call it 'dp_hpd_pulse', but maybe that's not good as the spec 
talks about HPD pulse for both short and long ones (although in the 
kernel doc you just write "HPD pulse")... The kernel doc could be 
expanded a bit to make it clear what this flag indicates.

  Tomi


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

* Re: [PATCH 6/6] usb: typec: ucsi: huawei-gaokun: pass down HPD_IRQ events
  2026-04-15 23:22 ` [PATCH 6/6] usb: typec: ucsi: huawei-gaokun: " Dmitry Baryshkov
@ 2026-04-17  9:29   ` Heikki Krogerus
  2026-04-17 12:17   ` Pengyu Luo
  1 sibling, 0 replies; 20+ messages in thread
From: Heikki Krogerus @ 2026-04-17  9:29 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Greg Kroah-Hartman, Andrzej Hajda, Neil Armstrong,
	Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Adrien Grassein, Jani Nikula, Rodrigo Vivi, Joonas Lahtinen,
	Tvrtko Ursulin, Kevin Hilman, Jerome Brunet, Martin Blumenstingl,
	Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
	Sean Paul, Marijn Suijten, Tomi Valkeinen, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou,
	dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

Thu, Apr 16, 2026 at 02:22:37AM +0300, Dmitry Baryshkov kirjoitti:
> Pass IRQ_HPD events to the HPD bridge, letting those to be delivered to
> the DisplayPort driver.
> 
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c b/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
> index ca749fde49bd..328ba92e1b44 100644
> --- a/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
> +++ b/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
> @@ -299,10 +299,11 @@ static void gaokun_ucsi_handle_altmode(struct gaokun_ucsi_port *port)
>  
>  	/* UCSI callback .connector_status() have set orientation */
>  	if (port->bridge)
> -		drm_aux_hpd_bridge_notify(&port->bridge->dev,
> -					  port->hpd_state ?
> -					  connector_status_connected :
> -					  connector_status_disconnected);
> +		drm_aux_hpd_bridge_notify_with_irq(&port->bridge->dev,
> +						   port->hpd_state ?
> +						   connector_status_connected :
> +						   connector_status_disconnected,
> +						   port->hpd_irq);
>  
>  	gaokun_ec_ucsi_pan_ack(uec->ec, port->idx);
>  }
> 
> -- 
> 2.47.3

-- 
heikki

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

* Re: [PATCH 6/6] usb: typec: ucsi: huawei-gaokun: pass down HPD_IRQ events
  2026-04-15 23:22 ` [PATCH 6/6] usb: typec: ucsi: huawei-gaokun: " Dmitry Baryshkov
  2026-04-17  9:29   ` Heikki Krogerus
@ 2026-04-17 12:17   ` Pengyu Luo
  1 sibling, 0 replies; 20+ messages in thread
From: Pengyu Luo @ 2026-04-17 12:17 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Tomi Valkeinen,
	Bjorn Andersson, Konrad Dybcio, Nikita Travkin, Yongxing Mou,
	dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno

On Thu, Apr 16, 2026 at 7:22 AM Dmitry Baryshkov
<dmitry.baryshkov@oss.qualcomm.com> wrote:
>
> Pass IRQ_HPD events to the HPD bridge, letting those to be delivered to
> the DisplayPort driver.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>

Reviewed-by: Pengyu Luo <mitltlatltl@gmail.com>

Best wishes,
Pengyu

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

* Re: [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-16  8:10   ` Tomi Valkeinen
@ 2026-04-17 22:32     ` Dmitry Baryshkov
  2026-04-20  4:50       ` Tomi Valkeinen
  0 siblings, 1 reply; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-17 22:32 UTC (permalink / raw)
  To: Tomi Valkeinen
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou

On Thu, Apr 16, 2026 at 11:10:03AM +0300, Tomi Valkeinen wrote:
> Hi,
> 
> On 16/04/2026 02:22, Dmitry Baryshkov wrote:
> > The DisplayPort standard defines a special kind of events called IRQ.
> > These events are used to notify DP Source about the events on the Sink
> > side. It is extremely important for DP MST handling, where the MST
> > events are reported through this IRQ.
> > 
> > In case of the USB-C DP AltMode there is no actual HPD pulse, but the
> > events are ported through the bits in the AltMode VDOs.
> > 
> > Extend the drm_connector_oob_hotplug_event() interface and report IRQ
> > events to the DisplayPort Sink drivers.
> > 
> > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> > ---
> >   drivers/gpu/drm/drm_connector.c          |  4 +++-
> >   drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
> >   include/drm/drm_connector.h              |  3 ++-
> >   3 files changed, 13 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> > index 47dc53c4a738..5fdacbd84bd7 100644
> > --- a/drivers/gpu/drm/drm_connector.c
> > +++ b/drivers/gpu/drm/drm_connector.c
> > @@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
> >    * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
> >    * @connector_fwnode: fwnode_handle to report the event on
> >    * @status: hot plug detect logical state
> > + * @irq_hpd: HPD pulse detected
> >    *
> >    * On some hardware a hotplug event notification may come from outside the display
> >    * driver / device. An example of this is some USB Type-C setups where the hardware
> > @@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
> >    * a drm_connector reference through calling drm_connector_find_by_fwnode().
> >    */
> >   void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
> > -				     enum drm_connector_status status)
> > +				     enum drm_connector_status status,
> > +				     bool irq_hpd)
> I find the "IRQ HPD" naming always confusing, even if I'm somewhat familiar
> with DP, but if someone has mainly worked on HDMI, I'm sure it's even worse.
> 
> Can we define this a bit more precisely? Is 'irq_hpd' only for displayport?
> If so, perhaps 'dp_irq_hpd' or 'displayport_irq_hpd'. I might even call it
> 'dp_hpd_pulse', but maybe that's not good as the spec talks about HPD pulse
> for both short and long ones (although in the kernel doc you just write "HPD
> pulse")... The kernel doc could be expanded a bit to make it clear what this
> flag indicates.

I attempted to stay away from defining a DP-specific flag, keeping it
generic enough. HDMI is pretty close (IMO) to requiring separate flag in
Linux. Likewise I'd rather not use "pulse". The DP AltMode defines a bit
in the VDO rather than a pulse.

Anyway, if irq_hpd doesn't sound precise enough, what about "bool
extra_irq"? This would convey that this is the extra hpd-related IRQ,
but it would also be obvious that it's not related to the HPD pin
itself.


-- 
With best wishes
Dmitry

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

* Re: [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-17 22:32     ` Dmitry Baryshkov
@ 2026-04-20  4:50       ` Tomi Valkeinen
  2026-04-20  9:50         ` Dmitry Baryshkov
  0 siblings, 1 reply; 20+ messages in thread
From: Tomi Valkeinen @ 2026-04-20  4:50 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou

Hi,

On 18/04/2026 01:32, Dmitry Baryshkov wrote:
> On Thu, Apr 16, 2026 at 11:10:03AM +0300, Tomi Valkeinen wrote:
>> Hi,
>>
>> On 16/04/2026 02:22, Dmitry Baryshkov wrote:
>>> The DisplayPort standard defines a special kind of events called IRQ.
>>> These events are used to notify DP Source about the events on the Sink
>>> side. It is extremely important for DP MST handling, where the MST
>>> events are reported through this IRQ.
>>>
>>> In case of the USB-C DP AltMode there is no actual HPD pulse, but the
>>> events are ported through the bits in the AltMode VDOs.
>>>
>>> Extend the drm_connector_oob_hotplug_event() interface and report IRQ
>>> events to the DisplayPort Sink drivers.
>>>
>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>>> ---
>>>    drivers/gpu/drm/drm_connector.c          |  4 +++-
>>>    drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
>>>    include/drm/drm_connector.h              |  3 ++-
>>>    3 files changed, 13 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
>>> index 47dc53c4a738..5fdacbd84bd7 100644
>>> --- a/drivers/gpu/drm/drm_connector.c
>>> +++ b/drivers/gpu/drm/drm_connector.c
>>> @@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
>>>     * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
>>>     * @connector_fwnode: fwnode_handle to report the event on
>>>     * @status: hot plug detect logical state
>>> + * @irq_hpd: HPD pulse detected
>>>     *
>>>     * On some hardware a hotplug event notification may come from outside the display
>>>     * driver / device. An example of this is some USB Type-C setups where the hardware
>>> @@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
>>>     * a drm_connector reference through calling drm_connector_find_by_fwnode().
>>>     */
>>>    void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
>>> -				     enum drm_connector_status status)
>>> +				     enum drm_connector_status status,
>>> +				     bool irq_hpd)
>> I find the "IRQ HPD" naming always confusing, even if I'm somewhat familiar
>> with DP, but if someone has mainly worked on HDMI, I'm sure it's even worse.
>>
>> Can we define this a bit more precisely? Is 'irq_hpd' only for displayport?
>> If so, perhaps 'dp_irq_hpd' or 'displayport_irq_hpd'. I might even call it
>> 'dp_hpd_pulse', but maybe that's not good as the spec talks about HPD pulse
>> for both short and long ones (although in the kernel doc you just write "HPD
>> pulse")... The kernel doc could be expanded a bit to make it clear what this
>> flag indicates.
> 
> I attempted to stay away from defining a DP-specific flag, keeping it
> generic enough. HDMI is pretty close (IMO) to requiring separate flag in

If it's not specifically the DP IRQ HPD, then we need to define what it 
means. I tried to think what it would mean with HDMI, but I didn't come 
up with anything.

> Linux. Likewise I'd rather not use "pulse". The DP AltMode defines a bit
> in the VDO rather than a pulse.
> 
> Anyway, if irq_hpd doesn't sound precise enough, what about "bool
> extra_irq"? This would convey that this is the extra hpd-related IRQ,
> but it would also be obvious that it's not related to the HPD pin
> itself.
We'd still need to define what exactly it means. I think it might be 
better to just define it as the DP IRQ HPD, as then the meaning is clear.

Also, would an enum flags parameter be better than a bool parameter?

  Tomi


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

* Re: [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-20  4:50       ` Tomi Valkeinen
@ 2026-04-20  9:50         ` Dmitry Baryshkov
  2026-04-20 11:01           ` Tomi Valkeinen
  0 siblings, 1 reply; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-20  9:50 UTC (permalink / raw)
  To: Tomi Valkeinen
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou

On Mon, Apr 20, 2026 at 07:50:46AM +0300, Tomi Valkeinen wrote:
> Hi,
> 
> On 18/04/2026 01:32, Dmitry Baryshkov wrote:
> > On Thu, Apr 16, 2026 at 11:10:03AM +0300, Tomi Valkeinen wrote:
> > > Hi,
> > > 
> > > On 16/04/2026 02:22, Dmitry Baryshkov wrote:
> > > > The DisplayPort standard defines a special kind of events called IRQ.
> > > > These events are used to notify DP Source about the events on the Sink
> > > > side. It is extremely important for DP MST handling, where the MST
> > > > events are reported through this IRQ.
> > > > 
> > > > In case of the USB-C DP AltMode there is no actual HPD pulse, but the
> > > > events are ported through the bits in the AltMode VDOs.
> > > > 
> > > > Extend the drm_connector_oob_hotplug_event() interface and report IRQ
> > > > events to the DisplayPort Sink drivers.
> > > > 
> > > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> > > > ---
> > > >    drivers/gpu/drm/drm_connector.c          |  4 +++-
> > > >    drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
> > > >    include/drm/drm_connector.h              |  3 ++-
> > > >    3 files changed, 13 insertions(+), 6 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> > > > index 47dc53c4a738..5fdacbd84bd7 100644
> > > > --- a/drivers/gpu/drm/drm_connector.c
> > > > +++ b/drivers/gpu/drm/drm_connector.c
> > > > @@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
> > > >     * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
> > > >     * @connector_fwnode: fwnode_handle to report the event on
> > > >     * @status: hot plug detect logical state
> > > > + * @irq_hpd: HPD pulse detected
> > > >     *
> > > >     * On some hardware a hotplug event notification may come from outside the display
> > > >     * driver / device. An example of this is some USB Type-C setups where the hardware
> > > > @@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
> > > >     * a drm_connector reference through calling drm_connector_find_by_fwnode().
> > > >     */
> > > >    void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
> > > > -				     enum drm_connector_status status)
> > > > +				     enum drm_connector_status status,
> > > > +				     bool irq_hpd)
> > > I find the "IRQ HPD" naming always confusing, even if I'm somewhat familiar
> > > with DP, but if someone has mainly worked on HDMI, I'm sure it's even worse.
> > > 
> > > Can we define this a bit more precisely? Is 'irq_hpd' only for displayport?
> > > If so, perhaps 'dp_irq_hpd' or 'displayport_irq_hpd'. I might even call it
> > > 'dp_hpd_pulse', but maybe that's not good as the spec talks about HPD pulse
> > > for both short and long ones (although in the kernel doc you just write "HPD
> > > pulse")... The kernel doc could be expanded a bit to make it clear what this
> > > flag indicates.
> > 
> > I attempted to stay away from defining a DP-specific flag, keeping it
> > generic enough. HDMI is pretty close (IMO) to requiring separate flag in
> 
> If it's not specifically the DP IRQ HPD, then we need to define what it
> means. I tried to think what it would mean with HDMI, but I didn't come up
> with anything.

I might be mistaken, but I had someting like HEAC HPD / EDID status
changes in mind (or HDCP-triggered HPD status changes). But here I
admit, I hadn't checked if it is actually applicable or not.

Anyway, for e.g. DVI or VGA that means nothing. But, my point really is
to abstain from defining someting as DP-only in the top-level API.

> 
> > Linux. Likewise I'd rather not use "pulse". The DP AltMode defines a bit
> > in the VDO rather than a pulse.
> > 
> > Anyway, if irq_hpd doesn't sound precise enough, what about "bool
> > extra_irq"? This would convey that this is the extra hpd-related IRQ,
> > but it would also be obvious that it's not related to the HPD pin
> > itself.
> We'd still need to define what exactly it means. I think it might be better
> to just define it as the DP IRQ HPD, as then the meaning is clear.
> 
> Also, would an enum flags parameter be better than a bool parameter?

Maybe not enum, but u32 param. Then it can become:

@extra_status: additional type-specific information provided by the sink
without changing the HPD state

void drm_connector_oob_hotplug_event(..., u32 extra_status);

/* DP short HPD pulse or corresponding AltMode flag */
#define DRM_CONNECTOR_OOB_DP_IRQ_HPD BIT(0)
/* DP long HPD pulse, debounced XXX: do we need this? */
#define DRM_CONNECTOR_OOB_DP_REPLUG BIT(1)

For HDMI we might want to define:

/* HDMI 1.4b 8.5, HPD pulse */
#define DRM_CONNECTOR_OOB_HDMI_REPLUG BIT(0)

Or might not, 100ms is long enough for all debouncers.

For HDMI we potentially have another source of OOB events, CDC-messages
from CEC controller. I have not looked in the details of the HEAC 3.

-- 
With best wishes
Dmitry

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

* Re: [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-20  9:50         ` Dmitry Baryshkov
@ 2026-04-20 11:01           ` Tomi Valkeinen
  2026-04-20 11:45             ` Dmitry Baryshkov
  0 siblings, 1 reply; 20+ messages in thread
From: Tomi Valkeinen @ 2026-04-20 11:01 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou

Hi,

On 20/04/2026 12:50, Dmitry Baryshkov wrote:
> On Mon, Apr 20, 2026 at 07:50:46AM +0300, Tomi Valkeinen wrote:
>> Hi,
>>
>> On 18/04/2026 01:32, Dmitry Baryshkov wrote:
>>> On Thu, Apr 16, 2026 at 11:10:03AM +0300, Tomi Valkeinen wrote:
>>>> Hi,
>>>>
>>>> On 16/04/2026 02:22, Dmitry Baryshkov wrote:
>>>>> The DisplayPort standard defines a special kind of events called IRQ.
>>>>> These events are used to notify DP Source about the events on the Sink
>>>>> side. It is extremely important for DP MST handling, where the MST
>>>>> events are reported through this IRQ.
>>>>>
>>>>> In case of the USB-C DP AltMode there is no actual HPD pulse, but the
>>>>> events are ported through the bits in the AltMode VDOs.
>>>>>
>>>>> Extend the drm_connector_oob_hotplug_event() interface and report IRQ
>>>>> events to the DisplayPort Sink drivers.
>>>>>
>>>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>>>>> ---
>>>>>     drivers/gpu/drm/drm_connector.c          |  4 +++-
>>>>>     drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
>>>>>     include/drm/drm_connector.h              |  3 ++-
>>>>>     3 files changed, 13 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
>>>>> index 47dc53c4a738..5fdacbd84bd7 100644
>>>>> --- a/drivers/gpu/drm/drm_connector.c
>>>>> +++ b/drivers/gpu/drm/drm_connector.c
>>>>> @@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
>>>>>      * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
>>>>>      * @connector_fwnode: fwnode_handle to report the event on
>>>>>      * @status: hot plug detect logical state
>>>>> + * @irq_hpd: HPD pulse detected
>>>>>      *
>>>>>      * On some hardware a hotplug event notification may come from outside the display
>>>>>      * driver / device. An example of this is some USB Type-C setups where the hardware
>>>>> @@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
>>>>>      * a drm_connector reference through calling drm_connector_find_by_fwnode().
>>>>>      */
>>>>>     void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
>>>>> -				     enum drm_connector_status status)
>>>>> +				     enum drm_connector_status status,
>>>>> +				     bool irq_hpd)
>>>> I find the "IRQ HPD" naming always confusing, even if I'm somewhat familiar
>>>> with DP, but if someone has mainly worked on HDMI, I'm sure it's even worse.
>>>>
>>>> Can we define this a bit more precisely? Is 'irq_hpd' only for displayport?
>>>> If so, perhaps 'dp_irq_hpd' or 'displayport_irq_hpd'. I might even call it
>>>> 'dp_hpd_pulse', but maybe that's not good as the spec talks about HPD pulse
>>>> for both short and long ones (although in the kernel doc you just write "HPD
>>>> pulse")... The kernel doc could be expanded a bit to make it clear what this
>>>> flag indicates.
>>>
>>> I attempted to stay away from defining a DP-specific flag, keeping it
>>> generic enough. HDMI is pretty close (IMO) to requiring separate flag in
>>
>> If it's not specifically the DP IRQ HPD, then we need to define what it
>> means. I tried to think what it would mean with HDMI, but I didn't come up
>> with anything.
> 
> I might be mistaken, but I had someting like HEAC HPD / EDID status
> changes in mind (or HDCP-triggered HPD status changes). But here I
> admit, I hadn't checked if it is actually applicable or not.

Possibly, I'm not familiar with those.

> Anyway, for e.g. DVI or VGA that means nothing. But, my point really is
> to abstain from defining someting as DP-only in the top-level API.

I'm fine with that, but then it really has to be defined =).

>>> Linux. Likewise I'd rather not use "pulse". The DP AltMode defines a bit
>>> in the VDO rather than a pulse.
>>>
>>> Anyway, if irq_hpd doesn't sound precise enough, what about "bool
>>> extra_irq"? This would convey that this is the extra hpd-related IRQ,
>>> but it would also be obvious that it's not related to the HPD pin
>>> itself.
>> We'd still need to define what exactly it means. I think it might be better
>> to just define it as the DP IRQ HPD, as then the meaning is clear.
>>
>> Also, would an enum flags parameter be better than a bool parameter?
> 
> Maybe not enum, but u32 param. Then it can become:
> 
> @extra_status: additional type-specific information provided by the sink
> without changing the HPD state
> 
> void drm_connector_oob_hotplug_event(..., u32 extra_status);
> 
> /* DP short HPD pulse or corresponding AltMode flag */
> #define DRM_CONNECTOR_OOB_DP_IRQ_HPD BIT(0)
> /* DP long HPD pulse, debounced XXX: do we need this? */
> #define DRM_CONNECTOR_OOB_DP_REPLUG BIT(1)

Why is u32 better than enum? So that we could e.g. pass short values 
inside the extra_status?

> For HDMI we might want to define:
> 
> /* HDMI 1.4b 8.5, HPD pulse */
> #define DRM_CONNECTOR_OOB_HDMI_REPLUG BIT(0)
> 
> Or might not, 100ms is long enough for all debouncers.

As I read the spec, there's no usable HPD pulse in HDMI as such. It just 
means that if HPD is low less than 100ms, it should be ignored, and if 
it's low more than 100ms, it should be handled. In other words, from 
spec perspective there's no difference between HPD being low 105ms or 
five days, there's no upper limit for the "pulse".

Still, we probably want to handle the case where the HPD is low only for 
a short period, so that we don't do a full disable/enable-cycle. We can 
interpret it as the same monitor still being connected, we just need to 
check the EDID again.

But isn't that just a drm_connector_hotplug_event with 
drm_connector_status staying connected? The callee can see that the 
connector was connected before, it's connected now, but we got an event, 
so let's read the EDID again.

  Tomi


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

* Re: [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-20 11:01           ` Tomi Valkeinen
@ 2026-04-20 11:45             ` Dmitry Baryshkov
  2026-04-20 11:51               ` Tomi Valkeinen
  0 siblings, 1 reply; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-20 11:45 UTC (permalink / raw)
  To: Tomi Valkeinen
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou

On Mon, Apr 20, 2026 at 02:01:57PM +0300, Tomi Valkeinen wrote:
> Hi,
> 
> On 20/04/2026 12:50, Dmitry Baryshkov wrote:
> > On Mon, Apr 20, 2026 at 07:50:46AM +0300, Tomi Valkeinen wrote:
> > > Hi,
> > > 
> > > On 18/04/2026 01:32, Dmitry Baryshkov wrote:
> > > > On Thu, Apr 16, 2026 at 11:10:03AM +0300, Tomi Valkeinen wrote:
> > > > > Hi,
> > > > > 
> > > > > On 16/04/2026 02:22, Dmitry Baryshkov wrote:
> > > > > > The DisplayPort standard defines a special kind of events called IRQ.
> > > > > > These events are used to notify DP Source about the events on the Sink
> > > > > > side. It is extremely important for DP MST handling, where the MST
> > > > > > events are reported through this IRQ.
> > > > > > 
> > > > > > In case of the USB-C DP AltMode there is no actual HPD pulse, but the
> > > > > > events are ported through the bits in the AltMode VDOs.
> > > > > > 
> > > > > > Extend the drm_connector_oob_hotplug_event() interface and report IRQ
> > > > > > events to the DisplayPort Sink drivers.
> > > > > > 
> > > > > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> > > > > > ---
> > > > > >     drivers/gpu/drm/drm_connector.c          |  4 +++-
> > > > > >     drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
> > > > > >     include/drm/drm_connector.h              |  3 ++-
> > > > > >     3 files changed, 13 insertions(+), 6 deletions(-)
> > > > > > 
> > > > > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> > > > > > index 47dc53c4a738..5fdacbd84bd7 100644
> > > > > > --- a/drivers/gpu/drm/drm_connector.c
> > > > > > +++ b/drivers/gpu/drm/drm_connector.c
> > > > > > @@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
> > > > > >      * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
> > > > > >      * @connector_fwnode: fwnode_handle to report the event on
> > > > > >      * @status: hot plug detect logical state
> > > > > > + * @irq_hpd: HPD pulse detected
> > > > > >      *
> > > > > >      * On some hardware a hotplug event notification may come from outside the display
> > > > > >      * driver / device. An example of this is some USB Type-C setups where the hardware
> > > > > > @@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
> > > > > >      * a drm_connector reference through calling drm_connector_find_by_fwnode().
> > > > > >      */
> > > > > >     void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
> > > > > > -				     enum drm_connector_status status)
> > > > > > +				     enum drm_connector_status status,
> > > > > > +				     bool irq_hpd)
> > > > > I find the "IRQ HPD" naming always confusing, even if I'm somewhat familiar
> > > > > with DP, but if someone has mainly worked on HDMI, I'm sure it's even worse.
> > > > > 
> > > > > Can we define this a bit more precisely? Is 'irq_hpd' only for displayport?
> > > > > If so, perhaps 'dp_irq_hpd' or 'displayport_irq_hpd'. I might even call it
> > > > > 'dp_hpd_pulse', but maybe that's not good as the spec talks about HPD pulse
> > > > > for both short and long ones (although in the kernel doc you just write "HPD
> > > > > pulse")... The kernel doc could be expanded a bit to make it clear what this
> > > > > flag indicates.
> > > > 
> > > > I attempted to stay away from defining a DP-specific flag, keeping it
> > > > generic enough. HDMI is pretty close (IMO) to requiring separate flag in
> > > 
> > > If it's not specifically the DP IRQ HPD, then we need to define what it
> > > means. I tried to think what it would mean with HDMI, but I didn't come up
> > > with anything.
> > 
> > I might be mistaken, but I had someting like HEAC HPD / EDID status
> > changes in mind (or HDCP-triggered HPD status changes). But here I
> > admit, I hadn't checked if it is actually applicable or not.
> 
> Possibly, I'm not familiar with those.
> 
> > Anyway, for e.g. DVI or VGA that means nothing. But, my point really is
> > to abstain from defining someting as DP-only in the top-level API.
> 
> I'm fine with that, but then it really has to be defined =).
> 
> > > > Linux. Likewise I'd rather not use "pulse". The DP AltMode defines a bit
> > > > in the VDO rather than a pulse.
> > > > 
> > > > Anyway, if irq_hpd doesn't sound precise enough, what about "bool
> > > > extra_irq"? This would convey that this is the extra hpd-related IRQ,
> > > > but it would also be obvious that it's not related to the HPD pin
> > > > itself.
> > > We'd still need to define what exactly it means. I think it might be better
> > > to just define it as the DP IRQ HPD, as then the meaning is clear.
> > > 
> > > Also, would an enum flags parameter be better than a bool parameter?
> > 
> > Maybe not enum, but u32 param. Then it can become:
> > 
> > @extra_status: additional type-specific information provided by the sink
> > without changing the HPD state
> > 
> > void drm_connector_oob_hotplug_event(..., u32 extra_status);
> > 
> > /* DP short HPD pulse or corresponding AltMode flag */
> > #define DRM_CONNECTOR_OOB_DP_IRQ_HPD BIT(0)
> > /* DP long HPD pulse, debounced XXX: do we need this? */
> > #define DRM_CONNECTOR_OOB_DP_REPLUG BIT(1)
> 
> Why is u32 better than enum? So that we could e.g. pass short values inside
> the extra_status?

No, my thought was to be able to define values specific to the
particular connector types and to be able to combine those values.

After sending the email I started thinking about the bridged and
corresponding notifications. There having overlapping values will not
work becasue bridges in the chanin don't easily know the final connector
type.

I think you are correct here, it should be the enum. With the first
iteration defined as:

/**
 * enum drm_connector_status_extra - additional events sent by the sink
 * together or in replacement of the HPD status changes
 /
enum drm_connector_status_extra {
  /**
   * @DRM_CONNECTOR_DP_IRQ_HPD: DisplayPort Sink has sent the
   * IRQ_HPD (either by the HPD short pulse or via the AltMode event).
   */
  DRM_CONNECTOR_DP_IRQ_HPD = BIT(0),
};

/**
  * @extra_status: additional information provided by the sink without
  * changing the HPD state (or in addition to such a change). It is an
  * OR of the values defined in the drm_connector_status_extra enum.
  */
void drm_connector_oob_hotplug_event(..., u32 extra_status);

> 
> > For HDMI we might want to define:
> > 
> > /* HDMI 1.4b 8.5, HPD pulse */
> > #define DRM_CONNECTOR_OOB_HDMI_REPLUG BIT(0)
> > 
> > Or might not, 100ms is long enough for all debouncers.
> 
> As I read the spec, there's no usable HPD pulse in HDMI as such. It just
> means that if HPD is low less than 100ms, it should be ignored, and if it's
> low more than 100ms, it should be handled. In other words, from spec
> perspective there's no difference between HPD being low 105ms or five days,
> there's no upper limit for the "pulse".

Yes... Let's see. I don't think we should define any extra API or values
for HDMI until the need arises.

> 
> Still, we probably want to handle the case where the HPD is low only for a
> short period, so that we don't do a full disable/enable-cycle. We can
> interpret it as the same monitor still being connected, we just need to
> check the EDID again.
> 
> But isn't that just a drm_connector_hotplug_event with drm_connector_status
> staying connected? The callee can see that the connector was connected
> before, it's connected now, but we got an event, so let's read the EDID
> again.

As I wrote, I'd be more concerned with the CDC / HEAC / eARC. For the
normal EDID changes I think we are doing a good enough job.

-- 
With best wishes
Dmitry

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

* Re: [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-20 11:45             ` Dmitry Baryshkov
@ 2026-04-20 11:51               ` Tomi Valkeinen
  2026-04-20 12:22                 ` Dmitry Baryshkov
  0 siblings, 1 reply; 20+ messages in thread
From: Tomi Valkeinen @ 2026-04-20 11:51 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou

Hi,

On 20/04/2026 14:45, Dmitry Baryshkov wrote:
> On Mon, Apr 20, 2026 at 02:01:57PM +0300, Tomi Valkeinen wrote:
>> Hi,
>>
>> On 20/04/2026 12:50, Dmitry Baryshkov wrote:
>>> On Mon, Apr 20, 2026 at 07:50:46AM +0300, Tomi Valkeinen wrote:
>>>> Hi,
>>>>
>>>> On 18/04/2026 01:32, Dmitry Baryshkov wrote:
>>>>> On Thu, Apr 16, 2026 at 11:10:03AM +0300, Tomi Valkeinen wrote:
>>>>>> Hi,
>>>>>>
>>>>>> On 16/04/2026 02:22, Dmitry Baryshkov wrote:
>>>>>>> The DisplayPort standard defines a special kind of events called IRQ.
>>>>>>> These events are used to notify DP Source about the events on the Sink
>>>>>>> side. It is extremely important for DP MST handling, where the MST
>>>>>>> events are reported through this IRQ.
>>>>>>>
>>>>>>> In case of the USB-C DP AltMode there is no actual HPD pulse, but the
>>>>>>> events are ported through the bits in the AltMode VDOs.
>>>>>>>
>>>>>>> Extend the drm_connector_oob_hotplug_event() interface and report IRQ
>>>>>>> events to the DisplayPort Sink drivers.
>>>>>>>
>>>>>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>>>>>>> ---
>>>>>>>      drivers/gpu/drm/drm_connector.c          |  4 +++-
>>>>>>>      drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
>>>>>>>      include/drm/drm_connector.h              |  3 ++-
>>>>>>>      3 files changed, 13 insertions(+), 6 deletions(-)
>>>>>>>
>>>>>>> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
>>>>>>> index 47dc53c4a738..5fdacbd84bd7 100644
>>>>>>> --- a/drivers/gpu/drm/drm_connector.c
>>>>>>> +++ b/drivers/gpu/drm/drm_connector.c
>>>>>>> @@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
>>>>>>>       * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
>>>>>>>       * @connector_fwnode: fwnode_handle to report the event on
>>>>>>>       * @status: hot plug detect logical state
>>>>>>> + * @irq_hpd: HPD pulse detected
>>>>>>>       *
>>>>>>>       * On some hardware a hotplug event notification may come from outside the display
>>>>>>>       * driver / device. An example of this is some USB Type-C setups where the hardware
>>>>>>> @@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
>>>>>>>       * a drm_connector reference through calling drm_connector_find_by_fwnode().
>>>>>>>       */
>>>>>>>      void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
>>>>>>> -				     enum drm_connector_status status)
>>>>>>> +				     enum drm_connector_status status,
>>>>>>> +				     bool irq_hpd)
>>>>>> I find the "IRQ HPD" naming always confusing, even if I'm somewhat familiar
>>>>>> with DP, but if someone has mainly worked on HDMI, I'm sure it's even worse.
>>>>>>
>>>>>> Can we define this a bit more precisely? Is 'irq_hpd' only for displayport?
>>>>>> If so, perhaps 'dp_irq_hpd' or 'displayport_irq_hpd'. I might even call it
>>>>>> 'dp_hpd_pulse', but maybe that's not good as the spec talks about HPD pulse
>>>>>> for both short and long ones (although in the kernel doc you just write "HPD
>>>>>> pulse")... The kernel doc could be expanded a bit to make it clear what this
>>>>>> flag indicates.
>>>>>
>>>>> I attempted to stay away from defining a DP-specific flag, keeping it
>>>>> generic enough. HDMI is pretty close (IMO) to requiring separate flag in
>>>>
>>>> If it's not specifically the DP IRQ HPD, then we need to define what it
>>>> means. I tried to think what it would mean with HDMI, but I didn't come up
>>>> with anything.
>>>
>>> I might be mistaken, but I had someting like HEAC HPD / EDID status
>>> changes in mind (or HDCP-triggered HPD status changes). But here I
>>> admit, I hadn't checked if it is actually applicable or not.
>>
>> Possibly, I'm not familiar with those.
>>
>>> Anyway, for e.g. DVI or VGA that means nothing. But, my point really is
>>> to abstain from defining someting as DP-only in the top-level API.
>>
>> I'm fine with that, but then it really has to be defined =).
>>
>>>>> Linux. Likewise I'd rather not use "pulse". The DP AltMode defines a bit
>>>>> in the VDO rather than a pulse.
>>>>>
>>>>> Anyway, if irq_hpd doesn't sound precise enough, what about "bool
>>>>> extra_irq"? This would convey that this is the extra hpd-related IRQ,
>>>>> but it would also be obvious that it's not related to the HPD pin
>>>>> itself.
>>>> We'd still need to define what exactly it means. I think it might be better
>>>> to just define it as the DP IRQ HPD, as then the meaning is clear.
>>>>
>>>> Also, would an enum flags parameter be better than a bool parameter?
>>>
>>> Maybe not enum, but u32 param. Then it can become:
>>>
>>> @extra_status: additional type-specific information provided by the sink
>>> without changing the HPD state
>>>
>>> void drm_connector_oob_hotplug_event(..., u32 extra_status);
>>>
>>> /* DP short HPD pulse or corresponding AltMode flag */
>>> #define DRM_CONNECTOR_OOB_DP_IRQ_HPD BIT(0)
>>> /* DP long HPD pulse, debounced XXX: do we need this? */
>>> #define DRM_CONNECTOR_OOB_DP_REPLUG BIT(1)
>>
>> Why is u32 better than enum? So that we could e.g. pass short values inside
>> the extra_status?
> 
> No, my thought was to be able to define values specific to the
> particular connector types and to be able to combine those values.
> 
> After sending the email I started thinking about the bridged and
> corresponding notifications. There having overlapping values will not
> work becasue bridges in the chanin don't easily know the final connector
> type.

An enum can have overlapping values. I don't think there's much 
difference between u32 and an enum in C. I just like enum because 1) it 
groups the possible values in the header file, and 2) the function 
parameters can use the enum type, making it obvious what flags you are 
supposed to use there.

> I think you are correct here, it should be the enum. With the first
> iteration defined as:
> 
> /**
>   * enum drm_connector_status_extra - additional events sent by the sink
>   * together or in replacement of the HPD status changes
>   /
> enum drm_connector_status_extra {
>    /**
>     * @DRM_CONNECTOR_DP_IRQ_HPD: DisplayPort Sink has sent the
>     * IRQ_HPD (either by the HPD short pulse or via the AltMode event).
>     */
>    DRM_CONNECTOR_DP_IRQ_HPD = BIT(0),
> };
> 
> /**
>    * @extra_status: additional information provided by the sink without
>    * changing the HPD state (or in addition to such a change). It is an
>    * OR of the values defined in the drm_connector_status_extra enum.
>    */
> void drm_connector_oob_hotplug_event(..., u32 extra_status);

Looks good to me, except I'd use "enum drm_connector_status_extra" 
instead of u32 there in the function parameters.

  Tomi


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

* Re: [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event()
  2026-04-20 11:51               ` Tomi Valkeinen
@ 2026-04-20 12:22                 ` Dmitry Baryshkov
  0 siblings, 0 replies; 20+ messages in thread
From: Dmitry Baryshkov @ 2026-04-20 12:22 UTC (permalink / raw)
  To: Tomi Valkeinen
  Cc: dri-devel, linux-kernel, linux-usb, intel-gfx, intel-xe,
	linux-amlogic, linux-arm-kernel, linux-arm-msm, freedreno,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Heikki Krogerus, Greg Kroah-Hartman, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Adrien Grassein, Jani Nikula, Rodrigo Vivi,
	Joonas Lahtinen, Tvrtko Ursulin, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
	Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson,
	Konrad Dybcio, Pengyu Luo, Nikita Travkin, Yongxing Mou

On Mon, Apr 20, 2026 at 02:51:49PM +0300, Tomi Valkeinen wrote:
> Hi,
> 
> On 20/04/2026 14:45, Dmitry Baryshkov wrote:
> > On Mon, Apr 20, 2026 at 02:01:57PM +0300, Tomi Valkeinen wrote:
> > > Hi,
> > > 
> > > On 20/04/2026 12:50, Dmitry Baryshkov wrote:
> > > > On Mon, Apr 20, 2026 at 07:50:46AM +0300, Tomi Valkeinen wrote:
> > > > > Hi,
> > > > > 
> > > > > On 18/04/2026 01:32, Dmitry Baryshkov wrote:
> > > > > > On Thu, Apr 16, 2026 at 11:10:03AM +0300, Tomi Valkeinen wrote:
> > > > > > > Hi,
> > > > > > > 
> > > > > > > On 16/04/2026 02:22, Dmitry Baryshkov wrote:
> > > > > > > > The DisplayPort standard defines a special kind of events called IRQ.
> > > > > > > > These events are used to notify DP Source about the events on the Sink
> > > > > > > > side. It is extremely important for DP MST handling, where the MST
> > > > > > > > events are reported through this IRQ.
> > > > > > > > 
> > > > > > > > In case of the USB-C DP AltMode there is no actual HPD pulse, but the
> > > > > > > > events are ported through the bits in the AltMode VDOs.
> > > > > > > > 
> > > > > > > > Extend the drm_connector_oob_hotplug_event() interface and report IRQ
> > > > > > > > events to the DisplayPort Sink drivers.
> > > > > > > > 
> > > > > > > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> > > > > > > > ---
> > > > > > > >      drivers/gpu/drm/drm_connector.c          |  4 +++-
> > > > > > > >      drivers/usb/typec/altmodes/displayport.c | 12 ++++++++----
> > > > > > > >      include/drm/drm_connector.h              |  3 ++-
> > > > > > > >      3 files changed, 13 insertions(+), 6 deletions(-)
> > > > > > > > 
> > > > > > > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> > > > > > > > index 47dc53c4a738..5fdacbd84bd7 100644
> > > > > > > > --- a/drivers/gpu/drm/drm_connector.c
> > > > > > > > +++ b/drivers/gpu/drm/drm_connector.c
> > > > > > > > @@ -3510,6 +3510,7 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
> > > > > > > >       * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
> > > > > > > >       * @connector_fwnode: fwnode_handle to report the event on
> > > > > > > >       * @status: hot plug detect logical state
> > > > > > > > + * @irq_hpd: HPD pulse detected
> > > > > > > >       *
> > > > > > > >       * On some hardware a hotplug event notification may come from outside the display
> > > > > > > >       * driver / device. An example of this is some USB Type-C setups where the hardware
> > > > > > > > @@ -3520,7 +3521,8 @@ struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode)
> > > > > > > >       * a drm_connector reference through calling drm_connector_find_by_fwnode().
> > > > > > > >       */
> > > > > > > >      void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
> > > > > > > > -				     enum drm_connector_status status)
> > > > > > > > +				     enum drm_connector_status status,
> > > > > > > > +				     bool irq_hpd)
> > > > > > > I find the "IRQ HPD" naming always confusing, even if I'm somewhat familiar
> > > > > > > with DP, but if someone has mainly worked on HDMI, I'm sure it's even worse.
> > > > > > > 
> > > > > > > Can we define this a bit more precisely? Is 'irq_hpd' only for displayport?
> > > > > > > If so, perhaps 'dp_irq_hpd' or 'displayport_irq_hpd'. I might even call it
> > > > > > > 'dp_hpd_pulse', but maybe that's not good as the spec talks about HPD pulse
> > > > > > > for both short and long ones (although in the kernel doc you just write "HPD
> > > > > > > pulse")... The kernel doc could be expanded a bit to make it clear what this
> > > > > > > flag indicates.
> > > > > > 
> > > > > > I attempted to stay away from defining a DP-specific flag, keeping it
> > > > > > generic enough. HDMI is pretty close (IMO) to requiring separate flag in
> > > > > 
> > > > > If it's not specifically the DP IRQ HPD, then we need to define what it
> > > > > means. I tried to think what it would mean with HDMI, but I didn't come up
> > > > > with anything.
> > > > 
> > > > I might be mistaken, but I had someting like HEAC HPD / EDID status
> > > > changes in mind (or HDCP-triggered HPD status changes). But here I
> > > > admit, I hadn't checked if it is actually applicable or not.
> > > 
> > > Possibly, I'm not familiar with those.
> > > 
> > > > Anyway, for e.g. DVI or VGA that means nothing. But, my point really is
> > > > to abstain from defining someting as DP-only in the top-level API.
> > > 
> > > I'm fine with that, but then it really has to be defined =).
> > > 
> > > > > > Linux. Likewise I'd rather not use "pulse". The DP AltMode defines a bit
> > > > > > in the VDO rather than a pulse.
> > > > > > 
> > > > > > Anyway, if irq_hpd doesn't sound precise enough, what about "bool
> > > > > > extra_irq"? This would convey that this is the extra hpd-related IRQ,
> > > > > > but it would also be obvious that it's not related to the HPD pin
> > > > > > itself.
> > > > > We'd still need to define what exactly it means. I think it might be better
> > > > > to just define it as the DP IRQ HPD, as then the meaning is clear.
> > > > > 
> > > > > Also, would an enum flags parameter be better than a bool parameter?
> > > > 
> > > > Maybe not enum, but u32 param. Then it can become:
> > > > 
> > > > @extra_status: additional type-specific information provided by the sink
> > > > without changing the HPD state
> > > > 
> > > > void drm_connector_oob_hotplug_event(..., u32 extra_status);
> > > > 
> > > > /* DP short HPD pulse or corresponding AltMode flag */
> > > > #define DRM_CONNECTOR_OOB_DP_IRQ_HPD BIT(0)
> > > > /* DP long HPD pulse, debounced XXX: do we need this? */
> > > > #define DRM_CONNECTOR_OOB_DP_REPLUG BIT(1)
> > > 
> > > Why is u32 better than enum? So that we could e.g. pass short values inside
> > > the extra_status?
> > 
> > No, my thought was to be able to define values specific to the
> > particular connector types and to be able to combine those values.
> > 
> > After sending the email I started thinking about the bridged and
> > corresponding notifications. There having overlapping values will not
> > work becasue bridges in the chanin don't easily know the final connector
> > type.
> 
> An enum can have overlapping values. I don't think there's much difference
> between u32 and an enum in C. I just like enum because 1) it groups the
> possible values in the header file, and 2) the function parameters can use
> the enum type, making it obvious what flags you are supposed to use there.
> 
> > I think you are correct here, it should be the enum. With the first
> > iteration defined as:
> > 
> > /**
> >   * enum drm_connector_status_extra - additional events sent by the sink
> >   * together or in replacement of the HPD status changes
> >   /
> > enum drm_connector_status_extra {
> >    /**
> >     * @DRM_CONNECTOR_DP_IRQ_HPD: DisplayPort Sink has sent the
> >     * IRQ_HPD (either by the HPD short pulse or via the AltMode event).
> >     */
> >    DRM_CONNECTOR_DP_IRQ_HPD = BIT(0),
> > };
> > 
> > /**
> >    * @extra_status: additional information provided by the sink without
> >    * changing the HPD state (or in addition to such a change). It is an
> >    * OR of the values defined in the drm_connector_status_extra enum.
> >    */
> > void drm_connector_oob_hotplug_event(..., u32 extra_status);
> 
> Looks good to me, except I'd use "enum drm_connector_status_extra" instead
> of u32 there in the function parameters.

I had bad feelings about passing OR or enum values as an enum value.
But then... I don't see values to OR. All expected events come one by
one. Let's drop that part too. Thanks for your comments!

> 
>  Tomi
> 
> 
> _______________________________________________
> linux-amlogic mailing list
> linux-amlogic@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-amlogic

-- 
With best wishes
Dmitry

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

end of thread, other threads:[~2026-04-20 18:05 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-15 23:22 [PATCH 0/6] drm: handle IRQ_HPD events correctly Dmitry Baryshkov
2026-04-15 23:22 ` [PATCH 1/6] drm/connector: report IRQ_HPD events to drm_connector_oob_hotplug_event() Dmitry Baryshkov
2026-04-16  8:10   ` Tomi Valkeinen
2026-04-17 22:32     ` Dmitry Baryshkov
2026-04-20  4:50       ` Tomi Valkeinen
2026-04-20  9:50         ` Dmitry Baryshkov
2026-04-20 11:01           ` Tomi Valkeinen
2026-04-20 11:45             ` Dmitry Baryshkov
2026-04-20 11:51               ` Tomi Valkeinen
2026-04-20 12:22                 ` Dmitry Baryshkov
2026-04-15 23:22 ` [PATCH 2/6] drm/bridge: pass down IRQ_HPD to the drivers Dmitry Baryshkov
2026-04-15 23:22 ` [PATCH 3/6] drm/bridge: aux-hpd: let drivers pass IRQ_HPD events Dmitry Baryshkov
2026-04-15 23:22 ` [PATCH 4/6] drm/msm: dp: handle the IRQ_HPD events reported by USB-C Dmitry Baryshkov
2026-04-15 23:22 ` [PATCH 5/6] soc: qcom: pmic-glink-altmode: pass down HPD_IRQ events Dmitry Baryshkov
2026-04-15 23:22 ` [PATCH 6/6] usb: typec: ucsi: huawei-gaokun: " Dmitry Baryshkov
2026-04-17  9:29   ` Heikki Krogerus
2026-04-17 12:17   ` Pengyu Luo
2026-04-16  1:15 ` ✓ CI.KUnit: success for drm: handle IRQ_HPD events correctly Patchwork
2026-04-16  2:04 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-16  4:17 ` ✓ Xe.CI.FULL: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox