* [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid()
@ 2024-10-18 20:34 Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 1/6] drm/display: hdmi: add generic mode_valid helper Dmitry Baryshkov
` (6 more replies)
0 siblings, 7 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 20:34 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
Dave Stevenson, Maíra Canal, Raspberry Pi Kernel Maintenance,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
Several HDMI drivers have common code pice in the .mode_valid function
that validates RGB / 8bpc rate using the TMDS char rate callbacks.
Move this code piece to the common helper and remove the need to perform
this check manually. In case of DRM_BRIDGE_OP_HDMI bridges the check can
be dropped in favour of performing it in drm_bridge_connector.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
Dmitry Baryshkov (6):
drm/display: hdmi: add generic mode_valid helper
drm/sun4i: use drm_hdmi_connector_mode_valid()
drm/vc4: use drm_hdmi_connector_mode_valid()
drm/display: bridge_connector: use drm_bridge_connector_mode_valid()
drm/bridge: lontium-lt9611: drop TMDS char rate check in mode_valid
drm/bridge: dw-hdmi-qp: replace mode_valid with tmds_char_rate
drivers/gpu/drm/bridge/lontium-lt9611.c | 4 +---
drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 12 +++++-------
drivers/gpu/drm/display/drm_bridge_connector.c | 16 +++++++++++++++-
drivers/gpu/drm/display/drm_hdmi_helper.c | 25 +++++++++++++++++++++++++
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +-----------
drivers/gpu/drm/vc4/vc4_hdmi.c | 4 +---
include/drm/display/drm_hdmi_helper.h | 4 ++++
7 files changed, 52 insertions(+), 25 deletions(-)
---
base-commit: af44b5b5776cc6ac1891393a37b1424509f07b35
change-id: 20241018-hdmi-mode-valid-aaec4428501c
Best regards,
--
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/6] drm/display: hdmi: add generic mode_valid helper
2024-10-18 20:34 [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Dmitry Baryshkov
@ 2024-10-18 20:34 ` Dmitry Baryshkov
2024-10-21 9:32 ` Maxime Ripard
2024-10-18 20:34 ` [PATCH 2/6] drm/sun4i: use drm_hdmi_connector_mode_valid() Dmitry Baryshkov
` (5 subsequent siblings)
6 siblings, 1 reply; 10+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 20:34 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
Dave Stevenson, Maíra Canal, Raspberry Pi Kernel Maintenance,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
Add drm_hdmi_connector_mode_valid(), generic helper for HDMI connectors.
It can be either used directly or as a part of the .mode_valid callback.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/display/drm_hdmi_helper.c | 25 +++++++++++++++++++++++++
include/drm/display/drm_hdmi_helper.h | 4 ++++
2 files changed, 29 insertions(+)
diff --git a/drivers/gpu/drm/display/drm_hdmi_helper.c b/drivers/gpu/drm/display/drm_hdmi_helper.c
index 74dd4d01dd9b..0ac5cb000ee2 100644
--- a/drivers/gpu/drm/display/drm_hdmi_helper.c
+++ b/drivers/gpu/drm/display/drm_hdmi_helper.c
@@ -256,3 +256,28 @@ drm_hdmi_compute_mode_clock(const struct drm_display_mode *mode,
return DIV_ROUND_CLOSEST_ULL(clock * bpc, 8);
}
EXPORT_SYMBOL(drm_hdmi_compute_mode_clock);
+
+/**
+ * drm_hdmi_connector_mode_valid() - Check if mode is valid for HDMI connector
+ * @connector: DRM connector to validate the mode
+ * @mode: Display mode to validate
+ *
+ * Generic .mode_valid implementation for HDMI connectors.
+ */
+enum drm_mode_status
+drm_hdmi_connector_mode_valid(const struct drm_connector *connector,
+ const struct drm_display_mode *mode)
+{
+ const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs;
+ unsigned long long rate;
+
+ rate = drm_hdmi_compute_mode_clock(mode, 8, HDMI_COLORSPACE_RGB);
+ if (!rate)
+ return MODE_ERROR;
+
+ if (!funcs || !funcs->tmds_char_rate_valid)
+ return MODE_OK;
+
+ return funcs->tmds_char_rate_valid(connector, mode, rate);
+}
+EXPORT_SYMBOL(drm_hdmi_connector_mode_valid);
diff --git a/include/drm/display/drm_hdmi_helper.h b/include/drm/display/drm_hdmi_helper.h
index 57e3b18c15ec..e38b62df59f3 100644
--- a/include/drm/display/drm_hdmi_helper.h
+++ b/include/drm/display/drm_hdmi_helper.h
@@ -28,4 +28,8 @@ unsigned long long
drm_hdmi_compute_mode_clock(const struct drm_display_mode *mode,
unsigned int bpc, enum hdmi_colorspace fmt);
+enum drm_mode_status
+drm_hdmi_connector_mode_valid(const struct drm_connector *connector,
+ const struct drm_display_mode *mode);
+
#endif
--
2.39.5
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/6] drm/sun4i: use drm_hdmi_connector_mode_valid()
2024-10-18 20:34 [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 1/6] drm/display: hdmi: add generic mode_valid helper Dmitry Baryshkov
@ 2024-10-18 20:34 ` Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 3/6] drm/vc4: " Dmitry Baryshkov
` (4 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 20:34 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
Dave Stevenson, Maíra Canal, Raspberry Pi Kernel Maintenance,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
Use new drm_hdmi_connector_mode_valid() helper instead of a
module-specific copy.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
index b3649449de30..54b72fe220af 100644
--- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
@@ -205,16 +205,6 @@ static int sun4i_hdmi_connector_atomic_check(struct drm_connector *connector,
return 0;
}
-static enum drm_mode_status
-sun4i_hdmi_connector_mode_valid(struct drm_connector *connector,
- struct drm_display_mode *mode)
-{
- unsigned long long rate = drm_hdmi_compute_mode_clock(mode, 8,
- HDMI_COLORSPACE_RGB);
-
- return sun4i_hdmi_connector_clock_valid(connector, mode, rate);
-}
-
static int sun4i_hdmi_get_modes(struct drm_connector *connector)
{
struct sun4i_hdmi *hdmi = drm_connector_to_sun4i_hdmi(connector);
@@ -269,7 +259,7 @@ static const struct drm_connector_hdmi_funcs sun4i_hdmi_hdmi_connector_funcs = {
static const struct drm_connector_helper_funcs sun4i_hdmi_connector_helper_funcs = {
.atomic_check = sun4i_hdmi_connector_atomic_check,
- .mode_valid = sun4i_hdmi_connector_mode_valid,
+ .mode_valid = drm_hdmi_connector_mode_valid,
.get_modes = sun4i_hdmi_get_modes,
};
--
2.39.5
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/6] drm/vc4: use drm_hdmi_connector_mode_valid()
2024-10-18 20:34 [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 1/6] drm/display: hdmi: add generic mode_valid helper Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 2/6] drm/sun4i: use drm_hdmi_connector_mode_valid() Dmitry Baryshkov
@ 2024-10-18 20:34 ` Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 4/6] drm/display: bridge_connector: use drm_bridge_connector_mode_valid() Dmitry Baryshkov
` (3 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 20:34 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
Dave Stevenson, Maíra Canal, Raspberry Pi Kernel Maintenance,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
Use new drm_hdmi_connector_mode_valid() helper instead of a
module-specific copy.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/vc4/vc4_hdmi.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 62b82b1eeb36..486e513b898d 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1752,7 +1752,6 @@ vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder,
const struct drm_display_mode *mode)
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
- unsigned long long rate;
if (vc4_hdmi->variant->unsupported_odd_h_timings &&
!(mode->flags & DRM_MODE_FLAG_DBLCLK) &&
@@ -1760,8 +1759,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder,
(mode->hsync_end % 2) || (mode->htotal % 2)))
return MODE_H_ILLEGAL;
- rate = drm_hdmi_compute_mode_clock(mode, 8, HDMI_COLORSPACE_RGB);
- return vc4_hdmi_connector_clock_valid(&vc4_hdmi->connector, mode, rate);
+ return drm_hdmi_connector_mode_valid(&vc4_hdmi->connector, mode);
}
static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
--
2.39.5
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/6] drm/display: bridge_connector: use drm_bridge_connector_mode_valid()
2024-10-18 20:34 [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Dmitry Baryshkov
` (2 preceding siblings ...)
2024-10-18 20:34 ` [PATCH 3/6] drm/vc4: " Dmitry Baryshkov
@ 2024-10-18 20:34 ` Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 5/6] drm/bridge: lontium-lt9611: drop TMDS char rate check in mode_valid Dmitry Baryshkov
` (2 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 20:34 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
Dave Stevenson, Maíra Canal, Raspberry Pi Kernel Maintenance,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
Use new drm_bridge_connector_mode_valid() helper if there is a HDMI
bridge in the bridge chain. This removes the need to perform TMDS char
rate check manually in the bridge driver.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/display/drm_bridge_connector.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c
index 3da5b8bf8259..3304ab0c00f6 100644
--- a/drivers/gpu/drm/display/drm_bridge_connector.c
+++ b/drivers/gpu/drm/display/drm_bridge_connector.c
@@ -18,6 +18,7 @@
#include <drm/drm_managed.h>
#include <drm/drm_modeset_helper_vtables.h>
#include <drm/drm_probe_helper.h>
+#include <drm/display/drm_hdmi_helper.h>
#include <drm/display/drm_hdmi_state_helper.h>
/**
@@ -299,9 +300,22 @@ static int drm_bridge_connector_get_modes(struct drm_connector *connector)
return 0;
}
+static enum drm_mode_status
+drm_bridge_connector_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ struct drm_bridge_connector *bridge_connector =
+ to_drm_bridge_connector(connector);
+
+ if (bridge_connector->bridge_hdmi)
+ return drm_hdmi_connector_mode_valid(connector, mode);
+
+ return MODE_OK;
+}
+
static const struct drm_connector_helper_funcs drm_bridge_connector_helper_funcs = {
.get_modes = drm_bridge_connector_get_modes,
- /* No need for .mode_valid(), the bridges are checked by the core. */
+ .mode_valid = drm_bridge_connector_mode_valid,
.enable_hpd = drm_bridge_connector_enable_hpd,
.disable_hpd = drm_bridge_connector_disable_hpd,
};
--
2.39.5
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 5/6] drm/bridge: lontium-lt9611: drop TMDS char rate check in mode_valid
2024-10-18 20:34 [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Dmitry Baryshkov
` (3 preceding siblings ...)
2024-10-18 20:34 ` [PATCH 4/6] drm/display: bridge_connector: use drm_bridge_connector_mode_valid() Dmitry Baryshkov
@ 2024-10-18 20:34 ` Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 6/6] drm/bridge: dw-hdmi-qp: replace mode_valid with tmds_char_rate Dmitry Baryshkov
2024-10-19 15:07 ` [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Chen-Yu Tsai
6 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 20:34 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
Dave Stevenson, Maíra Canal, Raspberry Pi Kernel Maintenance,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
Drop manual check of the TMDS char rate in the mode_valid callback. This
check is now being performed by the core.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/bridge/lontium-lt9611.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/bridge/lontium-lt9611.c
index 1b31fdebe164..b8ccffdf515a 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611.c
@@ -757,7 +757,6 @@ static enum drm_mode_status lt9611_bridge_mode_valid(struct drm_bridge *bridge,
const struct drm_display_mode *mode)
{
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
- unsigned long long rate;
if (mode->hdisplay > 3840)
return MODE_BAD_HVALUE;
@@ -765,8 +764,7 @@ static enum drm_mode_status lt9611_bridge_mode_valid(struct drm_bridge *bridge,
if (mode->hdisplay > 2000 && !lt9611->dsi1_node)
return MODE_PANEL;
- rate = drm_hdmi_compute_mode_clock(mode, 8, HDMI_COLORSPACE_RGB);
- return bridge->funcs->hdmi_tmds_char_rate_valid(bridge, mode, rate);
+ return MODE_OK;
}
static int lt9611_bridge_atomic_check(struct drm_bridge *bridge,
--
2.39.5
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 6/6] drm/bridge: dw-hdmi-qp: replace mode_valid with tmds_char_rate
2024-10-18 20:34 [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Dmitry Baryshkov
` (4 preceding siblings ...)
2024-10-18 20:34 ` [PATCH 5/6] drm/bridge: lontium-lt9611: drop TMDS char rate check in mode_valid Dmitry Baryshkov
@ 2024-10-18 20:34 ` Dmitry Baryshkov
2024-10-19 15:07 ` [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Chen-Yu Tsai
6 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 20:34 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
Dave Stevenson, Maíra Canal, Raspberry Pi Kernel Maintenance,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
Replace .mode_valid() callback with .hdmi_tmds_char_rate_valid(). It is
more generic and is used in other mode validation paths. The rate
validation for .mode_valid() will be performed by the
drm_bridge_connector code.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
index 181c5164b231..c686671e4850 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
@@ -442,16 +442,14 @@ dw_hdmi_qp_bridge_edid_read(struct drm_bridge *bridge,
}
static enum drm_mode_status
-dw_hdmi_qp_bridge_mode_valid(struct drm_bridge *bridge,
- const struct drm_display_info *info,
- const struct drm_display_mode *mode)
+dw_hdmi_qp_bridge_tmds_char_rate_valid(const struct drm_bridge *bridge,
+ const struct drm_display_mode *mode,
+ unsigned long long rate)
{
struct dw_hdmi_qp *hdmi = bridge->driver_private;
- unsigned long long rate;
- rate = drm_hdmi_compute_mode_clock(mode, 8, HDMI_COLORSPACE_RGB);
if (rate > HDMI14_MAX_TMDSCLK) {
- dev_dbg(hdmi->dev, "Unsupported mode clock: %d\n", mode->clock);
+ dev_dbg(hdmi->dev, "Unsupported TMDS char rate: %lld\n", rate);
return MODE_CLOCK_HIGH;
}
@@ -510,7 +508,7 @@ static const struct drm_bridge_funcs dw_hdmi_qp_bridge_funcs = {
.atomic_disable = dw_hdmi_qp_bridge_atomic_disable,
.detect = dw_hdmi_qp_bridge_detect,
.edid_read = dw_hdmi_qp_bridge_edid_read,
- .mode_valid = dw_hdmi_qp_bridge_mode_valid,
+ .hdmi_tmds_char_rate_valid = dw_hdmi_qp_bridge_tmds_char_rate_valid,
.hdmi_clear_infoframe = dw_hdmi_qp_bridge_clear_infoframe,
.hdmi_write_infoframe = dw_hdmi_qp_bridge_write_infoframe,
};
--
2.39.5
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid()
2024-10-18 20:34 [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Dmitry Baryshkov
` (5 preceding siblings ...)
2024-10-18 20:34 ` [PATCH 6/6] drm/bridge: dw-hdmi-qp: replace mode_valid with tmds_char_rate Dmitry Baryshkov
@ 2024-10-19 15:07 ` Chen-Yu Tsai
6 siblings, 0 replies; 10+ messages in thread
From: Chen-Yu Tsai @ 2024-10-19 15:07 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Jernej Skrabec, Samuel Holland, Dave Stevenson,
Maíra Canal, Raspberry Pi Kernel Maintenance, Andrzej Hajda,
Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
On Sat, Oct 19, 2024 at 4:34 AM Dmitry Baryshkov
<dmitry.baryshkov@linaro.org> wrote:
>
> Several HDMI drivers have common code pice in the .mode_valid function
> that validates RGB / 8bpc rate using the TMDS char rate callbacks.
>
> Move this code piece to the common helper and remove the need to perform
> this check manually. In case of DRM_BRIDGE_OP_HDMI bridges the check can
> be dropped in favour of performing it in drm_bridge_connector.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Makes sense, code looks like a correct substitution, and AFAICT covers
all current in tree drivers.
Whole series is
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
> ---
> Dmitry Baryshkov (6):
> drm/display: hdmi: add generic mode_valid helper
> drm/sun4i: use drm_hdmi_connector_mode_valid()
> drm/vc4: use drm_hdmi_connector_mode_valid()
> drm/display: bridge_connector: use drm_bridge_connector_mode_valid()
> drm/bridge: lontium-lt9611: drop TMDS char rate check in mode_valid
> drm/bridge: dw-hdmi-qp: replace mode_valid with tmds_char_rate
>
> drivers/gpu/drm/bridge/lontium-lt9611.c | 4 +---
> drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 12 +++++-------
> drivers/gpu/drm/display/drm_bridge_connector.c | 16 +++++++++++++++-
> drivers/gpu/drm/display/drm_hdmi_helper.c | 25 +++++++++++++++++++++++++
> drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +-----------
> drivers/gpu/drm/vc4/vc4_hdmi.c | 4 +---
> include/drm/display/drm_hdmi_helper.h | 4 ++++
> 7 files changed, 52 insertions(+), 25 deletions(-)
> ---
> base-commit: af44b5b5776cc6ac1891393a37b1424509f07b35
> change-id: 20241018-hdmi-mode-valid-aaec4428501c
>
> Best regards,
> --
> Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/6] drm/display: hdmi: add generic mode_valid helper
2024-10-18 20:34 ` [PATCH 1/6] drm/display: hdmi: add generic mode_valid helper Dmitry Baryshkov
@ 2024-10-21 9:32 ` Maxime Ripard
2024-10-21 13:44 ` Dmitry Baryshkov
0 siblings, 1 reply; 10+ messages in thread
From: Maxime Ripard @ 2024-10-21 9:32 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
Chen-Yu Tsai, Jernej Skrabec, Samuel Holland, Dave Stevenson,
Maíra Canal, Raspberry Pi Kernel Maintenance, Andrzej Hajda,
Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
[-- Attachment #1: Type: text/plain, Size: 2225 bytes --]
On Fri, Oct 18, 2024 at 11:34:19PM +0300, Dmitry Baryshkov wrote:
> Add drm_hdmi_connector_mode_valid(), generic helper for HDMI connectors.
> It can be either used directly or as a part of the .mode_valid callback.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/display/drm_hdmi_helper.c | 25 +++++++++++++++++++++++++
> include/drm/display/drm_hdmi_helper.h | 4 ++++
> 2 files changed, 29 insertions(+)
>
> diff --git a/drivers/gpu/drm/display/drm_hdmi_helper.c b/drivers/gpu/drm/display/drm_hdmi_helper.c
> index 74dd4d01dd9b..0ac5cb000ee2 100644
> --- a/drivers/gpu/drm/display/drm_hdmi_helper.c
> +++ b/drivers/gpu/drm/display/drm_hdmi_helper.c
> @@ -256,3 +256,28 @@ drm_hdmi_compute_mode_clock(const struct drm_display_mode *mode,
> return DIV_ROUND_CLOSEST_ULL(clock * bpc, 8);
> }
> EXPORT_SYMBOL(drm_hdmi_compute_mode_clock);
> +
> +/**
> + * drm_hdmi_connector_mode_valid() - Check if mode is valid for HDMI connector
> + * @connector: DRM connector to validate the mode
> + * @mode: Display mode to validate
> + *
> + * Generic .mode_valid implementation for HDMI connectors.
> + */
> +enum drm_mode_status
> +drm_hdmi_connector_mode_valid(const struct drm_connector *connector,
> + const struct drm_display_mode *mode)
> +{
> + const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs;
> + unsigned long long rate;
> +
> + rate = drm_hdmi_compute_mode_clock(mode, 8, HDMI_COLORSPACE_RGB);
> + if (!rate)
> + return MODE_ERROR;
> +
> + if (!funcs || !funcs->tmds_char_rate_valid)
> + return MODE_OK;
> +
> + return funcs->tmds_char_rate_valid(connector, mode, rate);
> +}
> +EXPORT_SYMBOL(drm_hdmi_connector_mode_valid);
As discussed in the discussion that sparked that change, I believe that
we should use hdmi_clock_valid.
AFAIU, your concern was that max_tmds_clock might get stale, but then it
would not only prevent mode_valid from running but also the commit
entirely.
We don't have any evidence from that, so I'd rather try to keep
consistency between the two. And we can always try to address whatever
issue we might have if it turned out to be a bad idea :)
Maxime
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/6] drm/display: hdmi: add generic mode_valid helper
2024-10-21 9:32 ` Maxime Ripard
@ 2024-10-21 13:44 ` Dmitry Baryshkov
0 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2024-10-21 13:44 UTC (permalink / raw)
To: Maxime Ripard
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
Chen-Yu Tsai, Jernej Skrabec, Samuel Holland, Dave Stevenson,
Maíra Canal, Raspberry Pi Kernel Maintenance, Andrzej Hajda,
Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
dri-devel, linux-kernel, linux-arm-kernel, linux-sunxi
On Mon, Oct 21, 2024 at 11:32:03AM +0200, Maxime Ripard wrote:
> On Fri, Oct 18, 2024 at 11:34:19PM +0300, Dmitry Baryshkov wrote:
> > Add drm_hdmi_connector_mode_valid(), generic helper for HDMI connectors.
> > It can be either used directly or as a part of the .mode_valid callback.
> >
> > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> > ---
> > drivers/gpu/drm/display/drm_hdmi_helper.c | 25 +++++++++++++++++++++++++
> > include/drm/display/drm_hdmi_helper.h | 4 ++++
> > 2 files changed, 29 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/display/drm_hdmi_helper.c b/drivers/gpu/drm/display/drm_hdmi_helper.c
> > index 74dd4d01dd9b..0ac5cb000ee2 100644
> > --- a/drivers/gpu/drm/display/drm_hdmi_helper.c
> > +++ b/drivers/gpu/drm/display/drm_hdmi_helper.c
> > @@ -256,3 +256,28 @@ drm_hdmi_compute_mode_clock(const struct drm_display_mode *mode,
> > return DIV_ROUND_CLOSEST_ULL(clock * bpc, 8);
> > }
> > EXPORT_SYMBOL(drm_hdmi_compute_mode_clock);
> > +
> > +/**
> > + * drm_hdmi_connector_mode_valid() - Check if mode is valid for HDMI connector
> > + * @connector: DRM connector to validate the mode
> > + * @mode: Display mode to validate
> > + *
> > + * Generic .mode_valid implementation for HDMI connectors.
> > + */
> > +enum drm_mode_status
> > +drm_hdmi_connector_mode_valid(const struct drm_connector *connector,
> > + const struct drm_display_mode *mode)
> > +{
> > + const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs;
> > + unsigned long long rate;
> > +
> > + rate = drm_hdmi_compute_mode_clock(mode, 8, HDMI_COLORSPACE_RGB);
> > + if (!rate)
> > + return MODE_ERROR;
> > +
> > + if (!funcs || !funcs->tmds_char_rate_valid)
> > + return MODE_OK;
> > +
> > + return funcs->tmds_char_rate_valid(connector, mode, rate);
> > +}
> > +EXPORT_SYMBOL(drm_hdmi_connector_mode_valid);
>
> As discussed in the discussion that sparked that change, I believe that
> we should use hdmi_clock_valid.
Ack, I will modify the code accordingly.
>
> AFAIU, your concern was that max_tmds_clock might get stale, but then it
> would not only prevent mode_valid from running but also the commit
> entirely.
It might be stale when parsing / validating the modes. But let's try
landing it the way you had in mind and fix the drivers which misbehave
(if any).
>
> We don't have any evidence from that, so I'd rather try to keep
> consistency between the two. And we can always try to address whatever
> issue we might have if it turned out to be a bad idea :)
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-10-21 14:12 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-18 20:34 [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 1/6] drm/display: hdmi: add generic mode_valid helper Dmitry Baryshkov
2024-10-21 9:32 ` Maxime Ripard
2024-10-21 13:44 ` Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 2/6] drm/sun4i: use drm_hdmi_connector_mode_valid() Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 3/6] drm/vc4: " Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 4/6] drm/display: bridge_connector: use drm_bridge_connector_mode_valid() Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 5/6] drm/bridge: lontium-lt9611: drop TMDS char rate check in mode_valid Dmitry Baryshkov
2024-10-18 20:34 ` [PATCH 6/6] drm/bridge: dw-hdmi-qp: replace mode_valid with tmds_char_rate Dmitry Baryshkov
2024-10-19 15:07 ` [PATCH 0/6] drm/display: hdmi: add drm_hdmi_connector_mode_valid() Chen-Yu Tsai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox