* [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach
@ 2025-09-28 8:24 Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 1/9] drm/display: hdmi-state-helpers: warn on unsupported InfoFrame types Dmitry Baryshkov
` (8 more replies)
0 siblings, 9 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
It's not uncommon for the particular device to support only a subset of
HDMI InfoFrames. Currently it's mostly ignored by the framework: it
calls write_infoframe() / clear_infoframe() callbacks for all frames and
expects them to return success even if the InfoFrame is not supported.
Sort that out, making sure that all interfaces are consistent:
- In atomic_check() callback verify and disable unsupported InfoFrames.
- In write_infoframe() / clear_infoframe() callbacks return -EOPNOTSUPP
for unsupported InfoFrames.
- In write_device_infoframe() / clear_infoframe() functions warn if the
callback returns -EOPNOTSUPP for the frame which is set (or was set
beforehand).
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
Changes in v2:
- Fixed build issue in common code
- Fixed comments regarding HDR / audio frames (Diedrik)
- In adv7511 actually check for the HDR frame (the comment was correct)
rather than the audio infoframe (c&p error).
- Link to v1: https://lore.kernel.org/r/20250927-limit-infoframes-2-v1-0-697511bd050b@oss.qualcomm.com
---
Dmitry Baryshkov (9):
drm/display: hdmi-state-helpers: warn on unsupported InfoFrame types
drm/bridge: adv7511: handle unsupported InfoFrames
drm/bridge: ite-it6263: handle unsupported InfoFrames
drm/bridge: lontium-lt9611: handle unsupported InfoFrames
drm/bridge: synopsys/dw-hdmi-qp: handle unsupported InfoFrames
drm/msm: hdmi: handle unsupported InfoFrames
drm/rockchip: rk3066_hdmi: handle unsupported InfoFrames
drm/rockchip: inno-hdmi: handle unsupported InfoFrames
drm/sun4i: hdmi: handle unsupported InfoFrames
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20 ++++++++--
drivers/gpu/drm/bridge/ite-it6263.c | 27 ++++++++++++-
drivers/gpu/drm/bridge/lontium-lt9611.c | 22 ++++++++---
drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 20 ++++++++--
drivers/gpu/drm/display/drm_hdmi_state_helper.c | 6 +++
drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 19 +++++++--
drivers/gpu/drm/rockchip/inno_hdmi.c | 47 +++++++++++++++++------
drivers/gpu/drm/rockchip/rk3066_hdmi.c | 39 +++++++++++++++----
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 51 ++++++++++++++++++++++---
9 files changed, 208 insertions(+), 43 deletions(-)
---
base-commit: bf2602a3cb2381fb1a04bf1c39a290518d2538d1
change-id: 20250927-limit-infoframes-2-6b93e599e79a
Best regards,
--
With best wishes
Dmitry
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 1/9] drm/display: hdmi-state-helpers: warn on unsupported InfoFrame types
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
2025-10-03 13:03 ` Maxime Ripard
2025-09-28 8:24 ` [PATCH v2 2/9] drm/bridge: adv7511: handle unsupported InfoFrames Dmitry Baryshkov
` (7 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
In preparation to tightening driver control over generated InfoFrames,
make sure to warn the user if the driver rejects the InfoFrames on the
grounds of it being unsupported.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/display/drm_hdmi_state_helper.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/drm/display/drm_hdmi_state_helper.c
index a561f124be99a0cd4259dbacf5f5f6651ff8a0ea..e85a6cf6e67232528861521bb21251bfdce6f8b9 100644
--- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c
+++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c
@@ -920,6 +920,9 @@ static int clear_infoframe(struct drm_connector *connector,
int ret;
ret = clear_device_infoframe(connector, old_frame->data.any.type);
+ if (ret == -EOPNOTSUPP)
+ drm_warn_once(connector->dev, "unsupported HDMI infoframe 0x%x\n",
+ old_frame->data.any.type);
if (ret)
return ret;
@@ -947,6 +950,9 @@ static int write_device_infoframe(struct drm_connector *connector,
return len;
ret = funcs->write_infoframe(connector, frame->any.type, buffer, len);
+ if (ret == -EOPNOTSUPP)
+ drm_warn_once(connector->dev, "unsupported HDMI infoframe 0x%x\n",
+ frame->any.type);
if (ret) {
drm_dbg_kms(dev, "Call failed: %d\n", ret);
return ret;
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 2/9] drm/bridge: adv7511: handle unsupported InfoFrames
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 1/9] drm/display: hdmi-state-helpers: warn on unsupported InfoFrame types Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
2025-10-03 13:06 ` Maxime Ripard
2025-09-28 8:24 ` [PATCH v2 3/9] drm/bridge: ite-it6263: " Dmitry Baryshkov
` (6 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
return -EOPNOTSUPP for unsupported InfoFrames and make sure that
atomic_check() callback doesn't allow unsupported InfoFrames to be
enabled.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index b9be8654130758e69ac7ccbc73a82cc25d731a5c..241f02143f59322a814b4b277082637d59be7d5f 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -906,8 +906,7 @@ static int adv7511_bridge_hdmi_clear_infoframe(struct drm_bridge *bridge,
adv7511_packet_disable(adv7511, ADV7511_PACKET_ENABLE_SPARE1);
break;
default:
- drm_dbg_driver(adv7511->bridge.dev, "Unsupported HDMI InfoFrame %x\n", type);
- break;
+ return -EOPNOTSUPP;
}
return 0;
@@ -966,19 +965,32 @@ static int adv7511_bridge_hdmi_write_infoframe(struct drm_bridge *bridge,
adv7511_packet_enable(adv7511, ADV7511_PACKET_ENABLE_SPARE1);
break;
default:
- drm_dbg_driver(adv7511->bridge.dev, "Unsupported HDMI InfoFrame %x\n", type);
- break;
+ return -EOPNOTSUPP;
}
return 0;
}
+static int adv7511_bridge_atomic_check(struct drm_bridge *bridge,
+ struct drm_bridge_state *bridge_state,
+ struct drm_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state)
+{
+ /* should not happen, HDR support not enabled */
+ if (drm_WARN_ON_ONCE(bridge->encoder->dev,
+ conn_state->hdmi.infoframes.hdr_drm.set))
+ return -EOPNOTSUPP;
+
+ return 0;
+}
+
static const struct drm_bridge_funcs adv7511_bridge_funcs = {
.mode_valid = adv7511_bridge_mode_valid,
.attach = adv7511_bridge_attach,
.detect = adv7511_bridge_detect,
.edid_read = adv7511_bridge_edid_read,
+ .atomic_check = adv7511_bridge_atomic_check,
.atomic_enable = adv7511_bridge_atomic_enable,
.atomic_disable = adv7511_bridge_atomic_disable,
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 3/9] drm/bridge: ite-it6263: handle unsupported InfoFrames
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 1/9] drm/display: hdmi-state-helpers: warn on unsupported InfoFrame types Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 2/9] drm/bridge: adv7511: handle unsupported InfoFrames Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
2025-09-29 7:56 ` Liu Ying
2025-09-28 8:24 ` [PATCH v2 4/9] drm/bridge: lontium-lt9611: " Dmitry Baryshkov
` (5 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
return -EOPNOTSUPP for unsupported InfoFrames and make sure that
atomic_check() callback doesn't allow unsupported InfoFrames to be
enabled.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/bridge/ite-it6263.c | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
index 2eb8fba7016cbf0dcb19aec4ca8849f1fffaa64c..cf3d76d748dde51e93b2b19cc2cbe023ca2629b8 100644
--- a/drivers/gpu/drm/bridge/ite-it6263.c
+++ b/drivers/gpu/drm/bridge/ite-it6263.c
@@ -26,6 +26,7 @@
#include <drm/drm_crtc.h>
#include <drm/drm_edid.h>
#include <drm/drm_of.h>
+#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
/* -----------------------------------------------------------------------------
@@ -772,7 +773,7 @@ static int it6263_hdmi_clear_infoframe(struct drm_bridge *bridge,
regmap_write(it->hdmi_regmap, HDMI_REG_PKT_NULL_CTRL, 0);
break;
default:
- dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
+ return -EOPNOTSUPP;
}
return 0;
@@ -812,13 +813,35 @@ static int it6263_hdmi_write_infoframe(struct drm_bridge *bridge,
ENABLE_PKT | REPEAT_PKT);
break;
default:
- dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
+ return -EOPNOTSUPP;
}
return 0;
}
+static int it6263_bridge_atomic_check(struct drm_bridge *bridge,
+ struct drm_bridge_state *bridge_state,
+ struct drm_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state)
+{
+ /* not supported by the driver */
+ conn_state->hdmi.infoframes.spd.set = false;
+
+ /* should not happen, audio support not enabled */
+ if (drm_WARN_ON_ONCE(bridge->encoder->dev,
+ conn_state->connector->hdmi.infoframes.audio.set))
+ return -EOPNOTSUPP;
+
+ /* should not happen, HDR support not enabled */
+ if (drm_WARN_ON_ONCE(bridge->encoder->dev,
+ conn_state->hdmi.infoframes.hdr_drm.set))
+ return -EOPNOTSUPP;
+
+ return 0;
+}
+
static const struct drm_bridge_funcs it6263_bridge_funcs = {
+ .atomic_check = it6263_bridge_atomic_check,
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_reset = drm_atomic_helper_bridge_reset,
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 4/9] drm/bridge: lontium-lt9611: handle unsupported InfoFrames
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
` (2 preceding siblings ...)
2025-09-28 8:24 ` [PATCH v2 3/9] drm/bridge: ite-it6263: " Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 5/9] drm/bridge: synopsys/dw-hdmi-qp: " Dmitry Baryshkov
` (4 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
return -EOPNOTSUPP for unsupported InfoFrames and make sure that
atomic_check() callback doesn't allow unsupported InfoFrames to be
enabled.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/bridge/lontium-lt9611.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/bridge/lontium-lt9611.c
index a2d032ee4744715b88eb66883edf69bab4c274b0..9c2c9887d2d66968eb1d50544a257d5999bbdded 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611.c
@@ -869,9 +869,7 @@ static int lt9611_hdmi_clear_infoframe(struct drm_bridge *bridge,
break;
default:
- drm_dbg_driver(lt9611->bridge.dev, "Unsupported HDMI InfoFrame %x\n", type);
- mask = 0;
- break;
+ return -EOPNOTSUPP;
}
if (mask)
@@ -910,9 +908,7 @@ static int lt9611_hdmi_write_infoframe(struct drm_bridge *bridge,
break;
default:
- drm_dbg_driver(lt9611->bridge.dev, "Unsupported HDMI InfoFrame %x\n", type);
- mask = 0;
- break;
+ return -EOPNOTSUPP;
}
if (mask) {
@@ -925,6 +921,19 @@ static int lt9611_hdmi_write_infoframe(struct drm_bridge *bridge,
return 0;
}
+static int lt9611_bridge_atomic_check(struct drm_bridge *bridge,
+ struct drm_bridge_state *bridge_state,
+ struct drm_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state)
+{
+ /* should not happen, HDR support not enabled */
+ if (drm_WARN_ON_ONCE(bridge->encoder->dev,
+ conn_state->hdmi.infoframes.hdr_drm.set))
+ return -EOPNOTSUPP;
+
+ return 0;
+}
+
static enum drm_mode_status
lt9611_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge,
const struct drm_display_mode *mode,
@@ -993,6 +1002,7 @@ static const struct drm_bridge_funcs lt9611_bridge_funcs = {
.edid_read = lt9611_bridge_edid_read,
.hpd_enable = lt9611_bridge_hpd_enable,
+ .atomic_check = lt9611_bridge_atomic_check,
.atomic_pre_enable = lt9611_bridge_atomic_pre_enable,
.atomic_enable = lt9611_bridge_atomic_enable,
.atomic_disable = lt9611_bridge_atomic_disable,
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 5/9] drm/bridge: synopsys/dw-hdmi-qp: handle unsupported InfoFrames
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
` (3 preceding siblings ...)
2025-09-28 8:24 ` [PATCH v2 4/9] drm/bridge: lontium-lt9611: " Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 6/9] drm/msm: hdmi: " Dmitry Baryshkov
` (3 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
return -EOPNOTSUPP for unsupported InfoFrames and make sure that
atomic_check() callback doesn't allow unsupported InfoFrames to be
enabled.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
index 39332c57f2c54296f39e27612544f4fbf923863f..9a77e880b7f58403691338ee8c22d24af570acbf 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
@@ -935,7 +935,7 @@ static int dw_hdmi_qp_bridge_clear_infoframe(struct drm_bridge *bridge,
PKTSCHED_PKT_EN);
break;
default:
- dev_dbg(hdmi->dev, "Unsupported infoframe type %x\n", type);
+ return -EOPNOTSUPP;
}
return 0;
@@ -960,12 +960,26 @@ static int dw_hdmi_qp_bridge_write_infoframe(struct drm_bridge *bridge,
return dw_hdmi_qp_config_audio_infoframe(hdmi, buffer, len);
default:
- dev_dbg(hdmi->dev, "Unsupported infoframe type %x\n", type);
- return 0;
+ return -EOPNOTSUPP;
}
}
+static int dw_hdmi_qp_bridge_atomic_check(struct drm_bridge *bridge,
+ struct drm_bridge_state *bridge_state,
+ struct drm_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state)
+{
+ /* not supported by the driver */
+ conn_state->hdmi.infoframes.spd.set = false;
+
+ /* FIXME: not supported by the driver */
+ conn_state->hdmi.infoframes.hdmi.set = false;
+
+ return 0;
+}
+
static const struct drm_bridge_funcs dw_hdmi_qp_bridge_funcs = {
+ .atomic_check = dw_hdmi_qp_bridge_atomic_check,
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_reset = drm_atomic_helper_bridge_reset,
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 6/9] drm/msm: hdmi: handle unsupported InfoFrames
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
` (4 preceding siblings ...)
2025-09-28 8:24 ` [PATCH v2 5/9] drm/bridge: synopsys/dw-hdmi-qp: " Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 7/9] drm/rockchip: rk3066_hdmi: " Dmitry Baryshkov
` (2 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
return -EOPNOTSUPP for unsupported InfoFrames and make sure that
atomic_check() callback doesn't allow unsupported InfoFrames to be
enabled.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
index 46fd58646d32fd0611192595826a3aa680bd0d02..121239a01cea334c3e7c789ebfb54df71515db28 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
@@ -248,7 +248,7 @@ static int msm_hdmi_bridge_clear_infoframe(struct drm_bridge *bridge,
break;
default:
- drm_dbg_driver(hdmi_bridge->base.dev, "Unsupported infoframe type %x\n", type);
+ return -EOPNOTSUPP;
}
return 0;
@@ -273,11 +273,23 @@ static int msm_hdmi_bridge_write_infoframe(struct drm_bridge *bridge,
case HDMI_INFOFRAME_TYPE_VENDOR:
return msm_hdmi_config_hdmi_infoframe(hdmi, buffer, len);
default:
- drm_dbg_driver(hdmi_bridge->base.dev, "Unsupported infoframe type %x\n", type);
- return 0;
+ return -EOPNOTSUPP;
}
}
+static int msm_hdmi_bridge_atomic_check(struct drm_bridge *bridge,
+ struct drm_bridge_state *bridge_state,
+ struct drm_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state)
+{
+ /* should not happen, HDR support not enabled */
+ if (drm_WARN_ON_ONCE(bridge->encoder->dev,
+ conn_state->hdmi.infoframes.hdr_drm.set))
+ return -EOPNOTSUPP;
+
+ return 0;
+}
+
static void msm_hdmi_set_timings(struct hdmi *hdmi,
const struct drm_display_mode *mode);
@@ -452,6 +464,7 @@ static enum drm_mode_status msm_hdmi_bridge_tmds_char_rate_valid(const struct dr
}
static const struct drm_bridge_funcs msm_hdmi_bridge_funcs = {
+ .atomic_check = msm_hdmi_bridge_atomic_check,
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_reset = drm_atomic_helper_bridge_reset,
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 7/9] drm/rockchip: rk3066_hdmi: handle unsupported InfoFrames
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
` (5 preceding siblings ...)
2025-09-28 8:24 ` [PATCH v2 6/9] drm/msm: hdmi: " Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 8/9] drm/rockchip: inno-hdmi: " Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 9/9] drm/sun4i: hdmi: " Dmitry Baryshkov
8 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
return -EOPNOTSUPP for unsupported InfoFrames and make sure that
atomic_check() callback doesn't allow unsupported InfoFrames to be
enabled.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/rockchip/rk3066_hdmi.c | 39 +++++++++++++++++++++++++++-------
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/rk3066_hdmi.c b/drivers/gpu/drm/rockchip/rk3066_hdmi.c
index ae4a5ac2299a93a49f87df7604752f6b651c839c..33f52a83ca4597193de8c012b4cc598e82c3f09b 100644
--- a/drivers/gpu/drm/rockchip/rk3066_hdmi.c
+++ b/drivers/gpu/drm/rockchip/rk3066_hdmi.c
@@ -162,12 +162,11 @@ static int rk3066_hdmi_bridge_clear_infoframe(struct drm_bridge *bridge,
{
struct rk3066_hdmi *hdmi = bridge_to_rk3066_hdmi(bridge);
- if (type != HDMI_INFOFRAME_TYPE_AVI) {
- drm_err(bridge->dev, "Unsupported infoframe type: %u\n", type);
- return 0;
- }
+ if (type != HDMI_INFOFRAME_TYPE_AVI)
+ return -EOPNOTSUPP;
hdmi_writeb(hdmi, HDMI_CP_BUF_INDEX, HDMI_INFOFRAME_AVI);
+ // XXX: this doesn't seem to actually disable the infoframe.
return 0;
}
@@ -180,10 +179,8 @@ rk3066_hdmi_bridge_write_infoframe(struct drm_bridge *bridge,
struct rk3066_hdmi *hdmi = bridge_to_rk3066_hdmi(bridge);
ssize_t i;
- if (type != HDMI_INFOFRAME_TYPE_AVI) {
- drm_err(bridge->dev, "Unsupported infoframe type: %u\n", type);
- return 0;
- }
+ if (type != HDMI_INFOFRAME_TYPE_AVI)
+ return -EOPNOTSUPP;
rk3066_hdmi_bridge_clear_infoframe(bridge, type);
@@ -193,6 +190,31 @@ rk3066_hdmi_bridge_write_infoframe(struct drm_bridge *bridge,
return 0;
}
+static int
+rk3066_hdmi_bridge_atomic_check(struct drm_bridge *bridge,
+ struct drm_bridge_state *bridge_state,
+ struct drm_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state)
+{
+ /* not supported by the driver */
+ conn_state->hdmi.infoframes.spd.set = false;
+
+ /* FIXME: not supported by the driver */
+ conn_state->hdmi.infoframes.hdmi.set = false;
+
+ /* should not happen, audio support not enabled */
+ if (drm_WARN_ON_ONCE(bridge->encoder->dev,
+ conn_state->connector->hdmi.infoframes.audio.set))
+ return -EOPNOTSUPP;
+
+ /* should not happen, HDR support not enabled */
+ if (drm_WARN_ON_ONCE(bridge->encoder->dev,
+ conn_state->hdmi.infoframes.hdr_drm.set))
+ return -EOPNOTSUPP;
+
+ return 0;
+}
+
static int rk3066_hdmi_config_video_timing(struct rk3066_hdmi *hdmi,
struct drm_display_mode *mode)
{
@@ -485,6 +507,7 @@ rk3066_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
}
static const struct drm_bridge_funcs rk3066_hdmi_bridge_funcs = {
+ .atomic_check = rk3066_hdmi_bridge_atomic_check,
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_reset = drm_atomic_helper_bridge_reset,
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 8/9] drm/rockchip: inno-hdmi: handle unsupported InfoFrames
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
` (6 preceding siblings ...)
2025-09-28 8:24 ` [PATCH v2 7/9] drm/rockchip: rk3066_hdmi: " Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 9/9] drm/sun4i: hdmi: " Dmitry Baryshkov
8 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
Make write_hdmi_infoframe() and clear_infoframe() callbacks
return -EOPNOTSUPP for unsupported InfoFrames and make sure that
atomic_check() callback doesn't allow unsupported InfoFrames to be
enabled.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/rockchip/inno_hdmi.c | 47 +++++++++++++++++++++++++++---------
1 file changed, 36 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c
index f24827dc1421cf5e0c1be63a80da23d645cf3f24..733294c6807da4663285ebd482181589c37f960a 100644
--- a/drivers/gpu/drm/rockchip/inno_hdmi.c
+++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
@@ -641,13 +641,11 @@ static int inno_hdmi_disable_frame(struct drm_connector *connector,
{
struct inno_hdmi *hdmi = connector_to_inno_hdmi(connector);
- if (type != HDMI_INFOFRAME_TYPE_AVI) {
- drm_err(connector->dev,
- "Unsupported infoframe type: %u\n", type);
- return 0;
- }
+ if (type != HDMI_INFOFRAME_TYPE_AVI)
+ return -EOPNOTSUPP;
hdmi_writeb(hdmi, HDMI_CONTROL_PACKET_BUF_INDEX, INFOFRAME_AVI);
+ // XXX: this doesn't seem to actually disable the infoframe.
return 0;
}
@@ -659,11 +657,8 @@ static int inno_hdmi_upload_frame(struct drm_connector *connector,
struct inno_hdmi *hdmi = connector_to_inno_hdmi(connector);
ssize_t i;
- if (type != HDMI_INFOFRAME_TYPE_AVI) {
- drm_err(connector->dev,
- "Unsupported infoframe type: %u\n", type);
- return 0;
- }
+ if (type != HDMI_INFOFRAME_TYPE_AVI)
+ return -EOPNOTSUPP;
inno_hdmi_disable_frame(connector, type);
@@ -673,6 +668,36 @@ static int inno_hdmi_upload_frame(struct drm_connector *connector,
return 0;
}
+static int inno_hdmi_connector_atomic_check(struct drm_connector *connector,
+ struct drm_atomic_state *state)
+{
+ struct drm_connector_state *conn_state =
+ drm_atomic_get_new_connector_state(state, connector);
+ int ret;
+
+ ret = drm_atomic_helper_connector_hdmi_check(connector, state);
+ if (ret)
+ return ret;
+
+ /* not supported by the driver */
+ conn_state->hdmi.infoframes.spd.set = false;
+
+ /* FIXME: not supported by the driver */
+ conn_state->hdmi.infoframes.hdmi.set = false;
+
+ /* should not happen, audio support not enabled */
+ if (drm_WARN_ON_ONCE(connector->dev,
+ connector->hdmi.infoframes.audio.set))
+ return -EOPNOTSUPP;
+
+ /* should not happen, HDR support not enabled */
+ if (drm_WARN_ON_ONCE(connector->dev,
+ conn_state->hdmi.infoframes.hdr_drm.set))
+ return -EOPNOTSUPP;
+
+ return 0;
+}
+
static const struct drm_connector_hdmi_funcs inno_hdmi_hdmi_connector_funcs = {
.clear_infoframe = inno_hdmi_disable_frame,
.write_infoframe = inno_hdmi_upload_frame,
@@ -1029,7 +1054,7 @@ static const struct drm_connector_funcs inno_hdmi_connector_funcs = {
};
static struct drm_connector_helper_funcs inno_hdmi_connector_helper_funcs = {
- .atomic_check = drm_atomic_helper_connector_hdmi_check,
+ .atomic_check = inno_hdmi_connector_atomic_check,
.get_modes = inno_hdmi_connector_get_modes,
.mode_valid = inno_hdmi_connector_mode_valid,
};
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 9/9] drm/sun4i: hdmi: handle unsupported InfoFrames
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
` (7 preceding siblings ...)
2025-09-28 8:24 ` [PATCH v2 8/9] drm/rockchip: inno-hdmi: " Dmitry Baryshkov
@ 2025-09-28 8:24 ` Dmitry Baryshkov
8 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-28 8:24 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Liu Ying, Andrzej Hajda, Neil Armstrong,
Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Sandy Huang, Heiko Stübner,
Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
Make write_hdmi_infoframe() and clear_infoframe() callbacks
return -EOPNOTSUPP for unsupported InfoFrames and make sure that
atomic_check() callback doesn't allow unsupported InfoFrames to be
enabled.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 51 ++++++++++++++++++++++++++++++----
1 file changed, 45 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
index ab0938ba61f7d75dd0bec473807a04a20e1cffbd..6d41207548386c0ae14ba0a9b7553fe0d3bd001c 100644
--- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
@@ -47,11 +47,8 @@ static int sun4i_hdmi_write_infoframe(struct drm_connector *connector,
struct sun4i_hdmi *hdmi = drm_connector_to_sun4i_hdmi(connector);
int i;
- if (type != HDMI_INFOFRAME_TYPE_AVI) {
- drm_err(connector->dev,
- "Unsupported infoframe type: %u\n", type);
- return 0;
- }
+ if (type != HDMI_INFOFRAME_TYPE_AVI)
+ return -EOPNOTSUPP;
for (i = 0; i < len; i++)
writeb(buffer[i], hdmi->base + SUN4I_HDMI_AVI_INFOFRAME_REG(i));
@@ -60,6 +57,47 @@ static int sun4i_hdmi_write_infoframe(struct drm_connector *connector,
}
+static int sun4i_hdmi_clear_infoframe(struct drm_connector *connector,
+ enum hdmi_infoframe_type type)
+{
+ if (type != HDMI_INFOFRAME_TYPE_AVI)
+ return -EOPNOTSUPP;
+
+ // XXX: is there a way to actually disable the infoframe?
+
+ return 0;
+}
+
+static int sun4i_hdmi_atomic_check(struct drm_connector *connector,
+ struct drm_atomic_state *state)
+{
+ struct drm_connector_state *conn_state =
+ drm_atomic_get_new_connector_state(state, connector);
+ int ret;
+
+ ret = drm_atomic_helper_connector_hdmi_check(connector, state);
+ if (ret)
+ return ret;
+
+ /* not supported by the driver */
+ conn_state->hdmi.infoframes.spd.set = false;
+
+ /* FIXME: not supported by the driver */
+ conn_state->hdmi.infoframes.hdmi.set = false;
+
+ /* should not happen, audio support not enabled */
+ if (drm_WARN_ON_ONCE(connector->dev,
+ connector->hdmi.infoframes.audio.set))
+ return -EOPNOTSUPP;
+
+ /* should not happen, HDR support not enabled */
+ if (drm_WARN_ON_ONCE(connector->dev,
+ conn_state->hdmi.infoframes.hdr_drm.set))
+ return -EOPNOTSUPP;
+
+ return 0;
+}
+
static void sun4i_hdmi_disable(struct drm_encoder *encoder,
struct drm_atomic_state *state)
{
@@ -237,10 +275,11 @@ static struct i2c_adapter *sun4i_hdmi_get_ddc(struct device *dev)
static const struct drm_connector_hdmi_funcs sun4i_hdmi_hdmi_connector_funcs = {
.tmds_char_rate_valid = sun4i_hdmi_connector_clock_valid,
.write_infoframe = sun4i_hdmi_write_infoframe,
+ .clear_infoframe = sun4i_hdmi_clear_infoframe,
};
static const struct drm_connector_helper_funcs sun4i_hdmi_connector_helper_funcs = {
- .atomic_check = drm_atomic_helper_connector_hdmi_check,
+ .atomic_check = sun4i_hdmi_atomic_check,
.mode_valid = drm_hdmi_connector_mode_valid,
.get_modes = sun4i_hdmi_get_modes,
};
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/9] drm/bridge: ite-it6263: handle unsupported InfoFrames
2025-09-28 8:24 ` [PATCH v2 3/9] drm/bridge: ite-it6263: " Dmitry Baryshkov
@ 2025-09-29 7:56 ` Liu Ying
2025-09-29 8:58 ` Dmitry Baryshkov
0 siblings, 1 reply; 15+ messages in thread
From: Liu Ying @ 2025-09-29 7:56 UTC (permalink / raw)
To: Dmitry Baryshkov, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Andrzej Hajda,
Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
Jernej Skrabec, Rob Clark, Dmitry Baryshkov, Abhinav Kumar,
Jessica Zhang, Sean Paul, Marijn Suijten, Sandy Huang,
Heiko Stübner, Andy Yan, Samuel Holland
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
On 09/28/2025, Dmitry Baryshkov wrote:
> Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
> return -EOPNOTSUPP for unsupported InfoFrames and make sure that
> atomic_check() callback doesn't allow unsupported InfoFrames to be
> enabled.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> drivers/gpu/drm/bridge/ite-it6263.c | 27 +++++++++++++++++++++++++--
> 1 file changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
> index 2eb8fba7016cbf0dcb19aec4ca8849f1fffaa64c..cf3d76d748dde51e93b2b19cc2cbe023ca2629b8 100644
> --- a/drivers/gpu/drm/bridge/ite-it6263.c
> +++ b/drivers/gpu/drm/bridge/ite-it6263.c
> @@ -26,6 +26,7 @@
> #include <drm/drm_crtc.h>
> #include <drm/drm_edid.h>
> #include <drm/drm_of.h>
> +#include <drm/drm_print.h>
> #include <drm/drm_probe_helper.h>
>
> /* -----------------------------------------------------------------------------
> @@ -772,7 +773,7 @@ static int it6263_hdmi_clear_infoframe(struct drm_bridge *bridge,
> regmap_write(it->hdmi_regmap, HDMI_REG_PKT_NULL_CTRL, 0);
> break;
> default:
> - dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
> + return -EOPNOTSUPP;
> }
>
> return 0;
> @@ -812,13 +813,35 @@ static int it6263_hdmi_write_infoframe(struct drm_bridge *bridge,
> ENABLE_PKT | REPEAT_PKT);
> break;
> default:
> - dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
> + return -EOPNOTSUPP;
> }
>
> return 0;
> }
>
> +static int it6263_bridge_atomic_check(struct drm_bridge *bridge,
> + struct drm_bridge_state *bridge_state,
> + struct drm_crtc_state *crtc_state,
> + struct drm_connector_state *conn_state)
> +{
> + /* not supported by the driver */
> + conn_state->hdmi.infoframes.spd.set = false;
> +
> + /* should not happen, audio support not enabled */
> + if (drm_WARN_ON_ONCE(bridge->encoder->dev,
> + conn_state->connector->hdmi.infoframes.audio.set))
Maybe use drm_err_once() instead to provide the reason for the warning in
a string?
> + return -EOPNOTSUPP;
As this check could return error, it should be moved before
'conn_state->hdmi.infoframes.spd.set = false;' to gain a little performance.
> +
> + /* should not happen, HDR support not enabled */
> + if (drm_WARN_ON_ONCE(bridge->encoder->dev,
> + conn_state->hdmi.infoframes.hdr_drm.set))
> + return -EOPNOTSUPP;
I don't think IT6263 chip supports DRM infoframe. The drm_WARN_ON_ONCE()
call could make driver readers think that DRM infoframe could be enabled
in the future as audio infoframe has the same warning and IT6263 chip does
support audio infoframe. So, maybe:
/* IT6263 chip doesn't support DRM infoframe. */
conn_state->hdmi.infoframes.hdr_drm.set = false;
> +
> + return 0;
> +}
> +
> static const struct drm_bridge_funcs it6263_bridge_funcs = {
> + .atomic_check = it6263_bridge_atomic_check,
> .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
> .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
> .atomic_reset = drm_atomic_helper_bridge_reset,
>
--
Regards,
Liu Ying
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/9] drm/bridge: ite-it6263: handle unsupported InfoFrames
2025-09-29 7:56 ` Liu Ying
@ 2025-09-29 8:58 ` Dmitry Baryshkov
2025-09-29 9:10 ` Liu Ying
0 siblings, 1 reply; 15+ messages in thread
From: Dmitry Baryshkov @ 2025-09-29 8:58 UTC (permalink / raw)
To: Liu Ying
Cc: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Sandy Huang, Heiko Stübner, Andy Yan,
Samuel Holland, dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
On Mon, Sep 29, 2025 at 03:56:31PM +0800, Liu Ying wrote:
> On 09/28/2025, Dmitry Baryshkov wrote:
> > Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
> > return -EOPNOTSUPP for unsupported InfoFrames and make sure that
> > atomic_check() callback doesn't allow unsupported InfoFrames to be
> > enabled.
> >
> > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> > ---
> > drivers/gpu/drm/bridge/ite-it6263.c | 27 +++++++++++++++++++++++++--
> > 1 file changed, 25 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
> > index 2eb8fba7016cbf0dcb19aec4ca8849f1fffaa64c..cf3d76d748dde51e93b2b19cc2cbe023ca2629b8 100644
> > --- a/drivers/gpu/drm/bridge/ite-it6263.c
> > +++ b/drivers/gpu/drm/bridge/ite-it6263.c
> > @@ -26,6 +26,7 @@
> > #include <drm/drm_crtc.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_of.h>
> > +#include <drm/drm_print.h>
> > #include <drm/drm_probe_helper.h>
> >
> > /* -----------------------------------------------------------------------------
> > @@ -772,7 +773,7 @@ static int it6263_hdmi_clear_infoframe(struct drm_bridge *bridge,
> > regmap_write(it->hdmi_regmap, HDMI_REG_PKT_NULL_CTRL, 0);
> > break;
> > default:
> > - dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
> > + return -EOPNOTSUPP;
> > }
> >
> > return 0;
> > @@ -812,13 +813,35 @@ static int it6263_hdmi_write_infoframe(struct drm_bridge *bridge,
> > ENABLE_PKT | REPEAT_PKT);
> > break;
> > default:
> > - dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
> > + return -EOPNOTSUPP;
> > }
> >
> > return 0;
> > }
> >
> > +static int it6263_bridge_atomic_check(struct drm_bridge *bridge,
> > + struct drm_bridge_state *bridge_state,
> > + struct drm_crtc_state *crtc_state,
> > + struct drm_connector_state *conn_state)
> > +{
> > + /* not supported by the driver */
> > + conn_state->hdmi.infoframes.spd.set = false;
> > +
> > + /* should not happen, audio support not enabled */
> > + if (drm_WARN_ON_ONCE(bridge->encoder->dev,
> > + conn_state->connector->hdmi.infoframes.audio.set))
>
> Maybe use drm_err_once() instead to provide the reason for the warning in
> a string?
I can change all of them to drm_err_once(), sure.
>
> > + return -EOPNOTSUPP;
>
> As this check could return error, it should be moved before
> 'conn_state->hdmi.infoframes.spd.set = false;' to gain a little performance.
I'd say, it would be negligible.
>
> > +
> > + /* should not happen, HDR support not enabled */
> > + if (drm_WARN_ON_ONCE(bridge->encoder->dev,
> > + conn_state->hdmi.infoframes.hdr_drm.set))
> > + return -EOPNOTSUPP;
>
> I don't think IT6263 chip supports DRM infoframe. The drm_WARN_ON_ONCE()
> call could make driver readers think that DRM infoframe could be enabled
> in the future as audio infoframe has the same warning and IT6263 chip does
> support audio infoframe. So, maybe:
>
> /* IT6263 chip doesn't support DRM infoframe. */
> conn_state->hdmi.infoframes.hdr_drm.set = false;
I'd rather not do that. My point here was that the driver can not end up
in the state where this frame is enabled, because it can only happen if
the driver sets max_bpc (which it doesn't). Likewise Audio InfoFrame can
not get enabled because the driver doesn't call into audio functions. On
the contrary, SPD frame (or HDMI in several other drivers) can be
enabled by the framework, so we silently turn then off here.
>
> > +
> > + return 0;
> > +}
> > +
> > static const struct drm_bridge_funcs it6263_bridge_funcs = {
> > + .atomic_check = it6263_bridge_atomic_check,
> > .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
> > .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
> > .atomic_reset = drm_atomic_helper_bridge_reset,
> >
>
>
> --
> Regards,
> Liu Ying
--
With best wishes
Dmitry
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/9] drm/bridge: ite-it6263: handle unsupported InfoFrames
2025-09-29 8:58 ` Dmitry Baryshkov
@ 2025-09-29 9:10 ` Liu Ying
0 siblings, 0 replies; 15+ messages in thread
From: Liu Ying @ 2025-09-29 9:10 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Sandy Huang, Heiko Stübner, Andy Yan,
Samuel Holland, dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
On 09/29/2025, Dmitry Baryshkov wrote:
> On Mon, Sep 29, 2025 at 03:56:31PM +0800, Liu Ying wrote:
>> On 09/28/2025, Dmitry Baryshkov wrote:
>>> Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
>>> return -EOPNOTSUPP for unsupported InfoFrames and make sure that
>>> atomic_check() callback doesn't allow unsupported InfoFrames to be
>>> enabled.
>>>
>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>>> ---
>>> drivers/gpu/drm/bridge/ite-it6263.c | 27 +++++++++++++++++++++++++--
>>> 1 file changed, 25 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
>>> index 2eb8fba7016cbf0dcb19aec4ca8849f1fffaa64c..cf3d76d748dde51e93b2b19cc2cbe023ca2629b8 100644
>>> --- a/drivers/gpu/drm/bridge/ite-it6263.c
>>> +++ b/drivers/gpu/drm/bridge/ite-it6263.c
>>> @@ -26,6 +26,7 @@
>>> #include <drm/drm_crtc.h>
>>> #include <drm/drm_edid.h>
>>> #include <drm/drm_of.h>
>>> +#include <drm/drm_print.h>
>>> #include <drm/drm_probe_helper.h>
>>>
>>> /* -----------------------------------------------------------------------------
>>> @@ -772,7 +773,7 @@ static int it6263_hdmi_clear_infoframe(struct drm_bridge *bridge,
>>> regmap_write(it->hdmi_regmap, HDMI_REG_PKT_NULL_CTRL, 0);
>>> break;
>>> default:
>>> - dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
>>> + return -EOPNOTSUPP;
>>> }
>>>
>>> return 0;
>>> @@ -812,13 +813,35 @@ static int it6263_hdmi_write_infoframe(struct drm_bridge *bridge,
>>> ENABLE_PKT | REPEAT_PKT);
>>> break;
>>> default:
>>> - dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
>>> + return -EOPNOTSUPP;
>>> }
>>>
>>> return 0;
>>> }
>>>
>>> +static int it6263_bridge_atomic_check(struct drm_bridge *bridge,
>>> + struct drm_bridge_state *bridge_state,
>>> + struct drm_crtc_state *crtc_state,
>>> + struct drm_connector_state *conn_state)
>>> +{
>>> + /* not supported by the driver */
>>> + conn_state->hdmi.infoframes.spd.set = false;
>>> +
>>> + /* should not happen, audio support not enabled */
>>> + if (drm_WARN_ON_ONCE(bridge->encoder->dev,
>>> + conn_state->connector->hdmi.infoframes.audio.set))
>>
>> Maybe use drm_err_once() instead to provide the reason for the warning in
>> a string?
>
> I can change all of them to drm_err_once(), sure.
With those changed,
Acked-by: Liu Ying <victor.liu@nxp.com>
>
>>
>>> + return -EOPNOTSUPP;
>>
>> As this check could return error, it should be moved before
>> 'conn_state->hdmi.infoframes.spd.set = false;' to gain a little performance.
>
> I'd say, it would be negligible.
Fine, up to you :)
>
>>
>>> +
>>> + /* should not happen, HDR support not enabled */
>>> + if (drm_WARN_ON_ONCE(bridge->encoder->dev,
>>> + conn_state->hdmi.infoframes.hdr_drm.set))
>>> + return -EOPNOTSUPP;
>>
>> I don't think IT6263 chip supports DRM infoframe. The drm_WARN_ON_ONCE()
>> call could make driver readers think that DRM infoframe could be enabled
>> in the future as audio infoframe has the same warning and IT6263 chip does
>> support audio infoframe. So, maybe:
>>
>> /* IT6263 chip doesn't support DRM infoframe. */
>> conn_state->hdmi.infoframes.hdr_drm.set = false;
>
> I'd rather not do that. My point here was that the driver can not end up
> in the state where this frame is enabled, because it can only happen if
> the driver sets max_bpc (which it doesn't). Likewise Audio InfoFrame can
> not get enabled because the driver doesn't call into audio functions. On
> the contrary, SPD frame (or HDMI in several other drivers) can be
> enabled by the framework, so we silently turn then off here.
Ditto.
>
>>
>>> +
>>> + return 0;
>>> +}
>>> +
>>> static const struct drm_bridge_funcs it6263_bridge_funcs = {
>>> + .atomic_check = it6263_bridge_atomic_check,
>>> .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
>>> .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
>>> .atomic_reset = drm_atomic_helper_bridge_reset,
>>>
>>
>>
>> --
>> Regards,
>> Liu Ying
>
--
Regards,
Liu Ying
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/9] drm/display: hdmi-state-helpers: warn on unsupported InfoFrame types
2025-09-28 8:24 ` [PATCH v2 1/9] drm/display: hdmi-state-helpers: warn on unsupported InfoFrame types Dmitry Baryshkov
@ 2025-10-03 13:03 ` Maxime Ripard
0 siblings, 0 replies; 15+ messages in thread
From: Maxime Ripard @ 2025-10-03 13:03 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: dri-devel, freedreno, linux-arm-kernel, linux-arm-msm,
linux-kernel, linux-rockchip, linux-sunxi, Abhinav Kumar,
Andrzej Hajda, Andy Yan, David Airlie, Dmitry Baryshkov,
Heiko Stübner, Jernej Skrabec, Jessica Zhang, Jonas Karlman,
Laurent Pinchart, Liu Ying, Maarten Lankhorst, Marijn Suijten,
Maxime Ripard, Neil Armstrong, Rob Clark, Robert Foss,
Samuel Holland, Sandy Huang, Sean Paul, Simona Vetter,
Thomas Zimmermann
On Sun, 28 Sep 2025 11:24:46 +0300, Dmitry Baryshkov wrote:
> In preparation to tightening driver control over generated InfoFrames,
> make sure to warn the user if the driver rejects the InfoFrames on the
> grounds of it being unsupported.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>
> [ ... ]
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Thanks!
Maxime
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/9] drm/bridge: adv7511: handle unsupported InfoFrames
2025-09-28 8:24 ` [PATCH v2 2/9] drm/bridge: adv7511: handle unsupported InfoFrames Dmitry Baryshkov
@ 2025-10-03 13:06 ` Maxime Ripard
0 siblings, 0 replies; 15+ messages in thread
From: Maxime Ripard @ 2025-10-03 13:06 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
Liu Ying, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Sandy Huang, Heiko Stübner, Andy Yan,
Samuel Holland, dri-devel, linux-kernel, linux-arm-msm, freedreno,
linux-arm-kernel, linux-rockchip, linux-sunxi
[-- Attachment #1.1: Type: text/plain, Size: 2193 bytes --]
Hi,
On Sun, Sep 28, 2025 at 11:24:47AM +0300, Dmitry Baryshkov wrote:
> Make hdmi_write_hdmi_infoframe() and hdmi_clear_infoframe() callbacks
> return -EOPNOTSUPP for unsupported InfoFrames and make sure that
> atomic_check() callback doesn't allow unsupported InfoFrames to be
> enabled.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index b9be8654130758e69ac7ccbc73a82cc25d731a5c..241f02143f59322a814b4b277082637d59be7d5f 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -906,8 +906,7 @@ static int adv7511_bridge_hdmi_clear_infoframe(struct drm_bridge *bridge,
> adv7511_packet_disable(adv7511, ADV7511_PACKET_ENABLE_SPARE1);
> break;
> default:
> - drm_dbg_driver(adv7511->bridge.dev, "Unsupported HDMI InfoFrame %x\n", type);
> - break;
> + return -EOPNOTSUPP;
> }
>
> return 0;
> @@ -966,19 +965,32 @@ static int adv7511_bridge_hdmi_write_infoframe(struct drm_bridge *bridge,
> adv7511_packet_enable(adv7511, ADV7511_PACKET_ENABLE_SPARE1);
> break;
> default:
> - drm_dbg_driver(adv7511->bridge.dev, "Unsupported HDMI InfoFrame %x\n", type);
> - break;
> + return -EOPNOTSUPP;
> }
I'm completely fine with that part.
> return 0;
> }
>
> +static int adv7511_bridge_atomic_check(struct drm_bridge *bridge,
> + struct drm_bridge_state *bridge_state,
> + struct drm_crtc_state *crtc_state,
> + struct drm_connector_state *conn_state)
> +{
> + /* should not happen, HDR support not enabled */
> + if (drm_WARN_ON_ONCE(bridge->encoder->dev,
> + conn_state->hdmi.infoframes.hdr_drm.set))
> + return -EOPNOTSUPP;
> +
> + return 0;
> +}
> +
However, I'm not sure we need that boilerplate in any driver. I'd rather
expand the kunit test suite to make sure it never happens rather than
adding it to every driver.
Maxime
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
[-- Attachment #2: Type: text/plain, Size: 170 bytes --]
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2025-10-03 13:06 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-28 8:24 [PATCH v2 0/9] drm/connector: hdmi: limit infoframes per driver capabilities, second approach Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 1/9] drm/display: hdmi-state-helpers: warn on unsupported InfoFrame types Dmitry Baryshkov
2025-10-03 13:03 ` Maxime Ripard
2025-09-28 8:24 ` [PATCH v2 2/9] drm/bridge: adv7511: handle unsupported InfoFrames Dmitry Baryshkov
2025-10-03 13:06 ` Maxime Ripard
2025-09-28 8:24 ` [PATCH v2 3/9] drm/bridge: ite-it6263: " Dmitry Baryshkov
2025-09-29 7:56 ` Liu Ying
2025-09-29 8:58 ` Dmitry Baryshkov
2025-09-29 9:10 ` Liu Ying
2025-09-28 8:24 ` [PATCH v2 4/9] drm/bridge: lontium-lt9611: " Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 5/9] drm/bridge: synopsys/dw-hdmi-qp: " Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 6/9] drm/msm: hdmi: " Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 7/9] drm/rockchip: rk3066_hdmi: " Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 8/9] drm/rockchip: inno-hdmi: " Dmitry Baryshkov
2025-09-28 8:24 ` [PATCH v2 9/9] drm/sun4i: hdmi: " Dmitry Baryshkov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).