* [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for mode selection
@ 2026-03-31 10:41 Jeevan B
2026-03-31 11:42 ` Jani Nikula
2026-03-31 13:06 ` Ville Syrjälä
0 siblings, 2 replies; 5+ messages in thread
From: Jeevan B @ 2026-03-31 10:41 UTC (permalink / raw)
To: igt-dev; +Cc: ankit.k.nautiyal, Jeevan B
eDP modes with high clock rates were being forced on HDMI 2.0 displays,
causing kernel to reject with EINVAL. Add clock validation to skip
incompatible eDP modes and fall back to supported modes.
v2: Add HDMI 2.0 clock limit helper, drop crtc_supports_mode(),
and ensure per-connector compatibility to avoid invalid modes.
Signed-off-by: Jeevan B <jeevan.b@intel.com>
---
tests/kms_setmode.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 42 insertions(+), 2 deletions(-)
diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
index 1f2849bc2..f1c1afe45 100644
--- a/tests/kms_setmode.c
+++ b/tests/kms_setmode.c
@@ -79,6 +79,9 @@
/* restricted pipe count */
#define CRTC_RESTRICT_CNT 2
+/* Clock limit for HDMI 2.0 */
+#define HDMI_2_0_MAX_CLOCK_KHZ 600000
+
static int drm_fd;
static drmModeRes *drm_resources;
static int filter_test_id;
@@ -165,6 +168,16 @@ static bool connector_supports_mode(drmModeConnector *connector,
return false;
}
+static bool hdmi_connector_mode_exceeds_hdmi20_limit(drmModeConnector *connector,
+ drmModeModeInfo *mode)
+{
+ if (connector->connector_type != DRM_MODE_CONNECTOR_HDMIA &&
+ connector->connector_type != DRM_MODE_CONNECTOR_HDMIB)
+ return false;
+
+ return mode->clock > HDMI_2_0_MAX_CLOCK_KHZ;
+}
+
static bool crtc_supports_mode(struct crtc_config *crtc, drmModeModeInfo *mode)
{
int i;
@@ -270,8 +283,35 @@ static void get_mode_for_crtc(struct crtc_config *crtc,
if (conn->modes[j].clock < mode->clock)
mode = &conn->modes[j];
}
- *mode_ret = *mode;
- return;
+
+ /* Check HDMI 2.0 clock + per-connector compatibility */
+ {
+ int k;
+ bool compatible = true;
+
+ for (k = 0; k < crtc->connector_count; k++) {
+ drmModeConnector *other_conn =
+ crtc->cconfs[k].connector;
+
+ /* HDMI 2.0 clock constraint */
+ if (hdmi_connector_mode_exceeds_hdmi20_limit(other_conn,
+ mode)) {
+ compatible = false;
+ break;
+ }
+
+ /* Ensure connector supports the mode */
+ if (!connector_supports_mode(other_conn, mode)) {
+ compatible = false;
+ break;
+ }
+ }
+
+ if (compatible) {
+ *mode_ret = *mode;
+ return;
+ }
+ }
}
}
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for mode selection
2026-03-31 10:41 [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for mode selection Jeevan B
@ 2026-03-31 11:42 ` Jani Nikula
2026-03-31 13:06 ` Ville Syrjälä
1 sibling, 0 replies; 5+ messages in thread
From: Jani Nikula @ 2026-03-31 11:42 UTC (permalink / raw)
To: Jeevan B, igt-dev; +Cc: ankit.k.nautiyal, Jeevan B
On Tue, 31 Mar 2026, Jeevan B <jeevan.b@intel.com> wrote:
> eDP modes with high clock rates were being forced on HDMI 2.0 displays,
> causing kernel to reject with EINVAL. Add clock validation to skip
> incompatible eDP modes and fall back to supported modes.
>
> v2: Add HDMI 2.0 clock limit helper, drop crtc_supports_mode(),
> and ensure per-connector compatibility to avoid invalid modes.
>
> Signed-off-by: Jeevan B <jeevan.b@intel.com>
> ---
> tests/kms_setmode.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 42 insertions(+), 2 deletions(-)
>
> diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
> index 1f2849bc2..f1c1afe45 100644
> --- a/tests/kms_setmode.c
> +++ b/tests/kms_setmode.c
> @@ -79,6 +79,9 @@
> /* restricted pipe count */
> #define CRTC_RESTRICT_CNT 2
>
> +/* Clock limit for HDMI 2.0 */
> +#define HDMI_2_0_MAX_CLOCK_KHZ 600000
> +
> static int drm_fd;
> static drmModeRes *drm_resources;
> static int filter_test_id;
> @@ -165,6 +168,16 @@ static bool connector_supports_mode(drmModeConnector *connector,
> return false;
> }
>
> +static bool hdmi_connector_mode_exceeds_hdmi20_limit(drmModeConnector *connector,
> + drmModeModeInfo *mode)
> +{
> + if (connector->connector_type != DRM_MODE_CONNECTOR_HDMIA &&
> + connector->connector_type != DRM_MODE_CONNECTOR_HDMIB)
> + return false;
> +
> + return mode->clock > HDMI_2_0_MAX_CLOCK_KHZ;
> +}
> +
> static bool crtc_supports_mode(struct crtc_config *crtc, drmModeModeInfo *mode)
> {
> int i;
> @@ -270,8 +283,35 @@ static void get_mode_for_crtc(struct crtc_config *crtc,
> if (conn->modes[j].clock < mode->clock)
> mode = &conn->modes[j];
> }
> - *mode_ret = *mode;
> - return;
> +
> + /* Check HDMI 2.0 clock + per-connector compatibility */
> + {
> + int k;
> + bool compatible = true;
> +
> + for (k = 0; k < crtc->connector_count; k++) {
> + drmModeConnector *other_conn =
> + crtc->cconfs[k].connector;
> +
> + /* HDMI 2.0 clock constraint */
> + if (hdmi_connector_mode_exceeds_hdmi20_limit(other_conn,
> + mode)) {
> + compatible = false;
> + break;
> + }
> +
> + /* Ensure connector supports the mode */
> + if (!connector_supports_mode(other_conn, mode)) {
> + compatible = false;
> + break;
> + }
> + }
> +
> + if (compatible) {
> + *mode_ret = *mode;
> + return;
> + }
> + }
Please abstract the whole thing into a function. Having those {} blocks
inline is messy.
BR,
Jani.
> }
> }
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for mode selection
2026-03-31 10:41 [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for mode selection Jeevan B
2026-03-31 11:42 ` Jani Nikula
@ 2026-03-31 13:06 ` Ville Syrjälä
2026-03-31 13:37 ` B, Jeevan
1 sibling, 1 reply; 5+ messages in thread
From: Ville Syrjälä @ 2026-03-31 13:06 UTC (permalink / raw)
To: Jeevan B; +Cc: igt-dev, ankit.k.nautiyal
On Tue, Mar 31, 2026 at 04:11:00PM +0530, Jeevan B wrote:
> eDP modes with high clock rates were being forced on HDMI 2.0 displays,
> causing kernel to reject with EINVAL. Add clock validation to skip
> incompatible eDP modes and fall back to supported modes.
>
> v2: Add HDMI 2.0 clock limit helper, drop crtc_supports_mode(),
> and ensure per-connector compatibility to avoid invalid modes.
>
> Signed-off-by: Jeevan B <jeevan.b@intel.com>
> ---
> tests/kms_setmode.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 42 insertions(+), 2 deletions(-)
>
> diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
> index 1f2849bc2..f1c1afe45 100644
> --- a/tests/kms_setmode.c
> +++ b/tests/kms_setmode.c
> @@ -79,6 +79,9 @@
> /* restricted pipe count */
> #define CRTC_RESTRICT_CNT 2
>
> +/* Clock limit for HDMI 2.0 */
> +#define HDMI_2_0_MAX_CLOCK_KHZ 600000
> +
> static int drm_fd;
> static drmModeRes *drm_resources;
> static int filter_test_id;
> @@ -165,6 +168,16 @@ static bool connector_supports_mode(drmModeConnector *connector,
> return false;
> }
>
> +static bool hdmi_connector_mode_exceeds_hdmi20_limit(drmModeConnector *connector,
> + drmModeModeInfo *mode)
> +{
> + if (connector->connector_type != DRM_MODE_CONNECTOR_HDMIA &&
> + connector->connector_type != DRM_MODE_CONNECTOR_HDMIB)
> + return false;
> +
> + return mode->clock > HDMI_2_0_MAX_CLOCK_KHZ;
Starting to test all kinds of random thing here does not seem
maintainable.
I think the one sensible option is to make the test skip rather
than fail if it couldn't find a common mode between the connectors
and the modeset subsequently failed.
As for the external vs. internal connector situation, the test should
probably try to find a mode on the external connector(s) that has the
same refresh rate as one of the modes on the internal connector, and
has the same resolution (or less) than the internal panel. That way
we can use pfit to upscale content on the internal panel instead of
attempting to force the external connectors to use the internal
panel's native mode.
> +}
> +
> static bool crtc_supports_mode(struct crtc_config *crtc, drmModeModeInfo *mode)
> {
> int i;
> @@ -270,8 +283,35 @@ static void get_mode_for_crtc(struct crtc_config *crtc,
> if (conn->modes[j].clock < mode->clock)
> mode = &conn->modes[j];
> }
> - *mode_ret = *mode;
> - return;
> +
> + /* Check HDMI 2.0 clock + per-connector compatibility */
> + {
> + int k;
> + bool compatible = true;
> +
> + for (k = 0; k < crtc->connector_count; k++) {
> + drmModeConnector *other_conn =
> + crtc->cconfs[k].connector;
> +
> + /* HDMI 2.0 clock constraint */
> + if (hdmi_connector_mode_exceeds_hdmi20_limit(other_conn,
> + mode)) {
> + compatible = false;
> + break;
> + }
> +
> + /* Ensure connector supports the mode */
> + if (!connector_supports_mode(other_conn, mode)) {
> + compatible = false;
> + break;
> + }
> + }
> +
> + if (compatible) {
> + *mode_ret = *mode;
> + return;
> + }
> + }
> }
> }
>
> --
> 2.43.0
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for mode selection
2026-03-31 13:06 ` Ville Syrjälä
@ 2026-03-31 13:37 ` B, Jeevan
2026-03-31 13:48 ` Jani Nikula
0 siblings, 1 reply; 5+ messages in thread
From: B, Jeevan @ 2026-03-31 13:37 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: igt-dev@lists.freedesktop.org, Nautiyal, Ankit K
> -----Original Message-----
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Sent: Tuesday, March 31, 2026 6:36 PM
> To: B, Jeevan <jeevan.b@intel.com>
> Cc: igt-dev@lists.freedesktop.org; Nautiyal, Ankit K
> <ankit.k.nautiyal@intel.com>
> Subject: Re: [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for
> mode selection
>
> On Tue, Mar 31, 2026 at 04:11:00PM +0530, Jeevan B wrote:
> > eDP modes with high clock rates were being forced on HDMI 2.0
> > displays, causing kernel to reject with EINVAL. Add clock validation
> > to skip incompatible eDP modes and fall back to supported modes.
> >
> > v2: Add HDMI 2.0 clock limit helper, drop crtc_supports_mode(),
> > and ensure per-connector compatibility to avoid invalid modes.
> >
> > Signed-off-by: Jeevan B <jeevan.b@intel.com>
> > ---
> > tests/kms_setmode.c | 44
> ++++++++++++++++++++++++++++++++++++++++++--
> > 1 file changed, 42 insertions(+), 2 deletions(-)
> >
> > diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c index
> > 1f2849bc2..f1c1afe45 100644
> > --- a/tests/kms_setmode.c
> > +++ b/tests/kms_setmode.c
> > @@ -79,6 +79,9 @@
> > /* restricted pipe count */
> > #define CRTC_RESTRICT_CNT 2
> >
> > +/* Clock limit for HDMI 2.0 */
> > +#define HDMI_2_0_MAX_CLOCK_KHZ 600000
> > +
> > static int drm_fd;
> > static drmModeRes *drm_resources;
> > static int filter_test_id;
> > @@ -165,6 +168,16 @@ static bool
> connector_supports_mode(drmModeConnector *connector,
> > return false;
> > }
> >
> > +static bool
> hdmi_connector_mode_exceeds_hdmi20_limit(drmModeConnector
> *connector,
> > + drmModeModeInfo
> *mode)
> > +{
> > + if (connector->connector_type != DRM_MODE_CONNECTOR_HDMIA
> &&
> > + connector->connector_type != DRM_MODE_CONNECTOR_HDMIB)
> > + return false;
> > +
> > + return mode->clock > HDMI_2_0_MAX_CLOCK_KHZ;
>
> Starting to test all kinds of random thing here does not seem maintainable.
>
> I think the one sensible option is to make the test skip rather than fail if it
> couldn't find a common mode between the connectors and the modeset
> subsequently failed.
>
> As for the external vs. internal connector situation, the test should probably
> try to find a mode on the external connector(s) that has the same refresh rate
> as one of the modes on the internal connector, and has the same resolution
> (or less) than the internal panel. That way we can use pfit to upscale content
> on the internal panel instead of attempting to force the external connectors to
> use the internal panel's native mode.
>
Thanks, that makes sense.
This test iterates through a large set of valid and invalid
crtc/connector combinations, so trying to enforce strict compatibility
in mode selection is making the logic complex and hard to maintain.
It's also becoming harder with newer internal panels supporting high
refresh rates, which often don't have matching modes on external
connectors.
I agree it's better to keep the selection simple and skip when no common
mode is found or the modeset fails, instead of adding more heuristics.
Longer term, it might be worth rethinking the mode selection strategy,
but for now I'll keep this change minimal.
Thanks
Jeevan B
> > +}
> > +
> > static bool crtc_supports_mode(struct crtc_config *crtc,
> > drmModeModeInfo *mode) {
> > int i;
> > @@ -270,8 +283,35 @@ static void get_mode_for_crtc(struct crtc_config
> *crtc,
> > if (conn->modes[j].clock < mode->clock)
> > mode = &conn->modes[j];
> > }
> > - *mode_ret = *mode;
> > - return;
> > +
> > + /* Check HDMI 2.0 clock + per-connector compatibility
> */
> > + {
> > + int k;
> > + bool compatible = true;
> > +
> > + for (k = 0; k < crtc->connector_count; k++) {
> > + drmModeConnector *other_conn =
> > + crtc->cconfs[k].connector;
> > +
> > + /* HDMI 2.0 clock constraint */
> > + if
> (hdmi_connector_mode_exceeds_hdmi20_limit(other_conn,
> > +
> mode)) {
> > + compatible = false;
> > + break;
> > + }
> > +
> > + /* Ensure connector supports the
> mode */
> > + if
> (!connector_supports_mode(other_conn, mode)) {
> > + compatible = false;
> > + break;
> > + }
> > + }
> > +
> > + if (compatible) {
> > + *mode_ret = *mode;
> > + return;
> > + }
> > + }
> > }
> > }
> >
> > --
> > 2.43.0
>
> --
> Ville Syrjälä
> Intel
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for mode selection
2026-03-31 13:37 ` B, Jeevan
@ 2026-03-31 13:48 ` Jani Nikula
0 siblings, 0 replies; 5+ messages in thread
From: Jani Nikula @ 2026-03-31 13:48 UTC (permalink / raw)
To: B, Jeevan, Ville Syrjälä
Cc: igt-dev@lists.freedesktop.org, Nautiyal, Ankit K
On Tue, 31 Mar 2026, "B, Jeevan" <jeevan.b@intel.com> wrote:
>> -----Original Message-----
>> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> Sent: Tuesday, March 31, 2026 6:36 PM
>> To: B, Jeevan <jeevan.b@intel.com>
>> Cc: igt-dev@lists.freedesktop.org; Nautiyal, Ankit K
>> <ankit.k.nautiyal@intel.com>
>> Subject: Re: [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for
>> mode selection
>>
>> On Tue, Mar 31, 2026 at 04:11:00PM +0530, Jeevan B wrote:
>> > eDP modes with high clock rates were being forced on HDMI 2.0
>> > displays, causing kernel to reject with EINVAL. Add clock validation
>> > to skip incompatible eDP modes and fall back to supported modes.
>> >
>> > v2: Add HDMI 2.0 clock limit helper, drop crtc_supports_mode(),
>> > and ensure per-connector compatibility to avoid invalid modes.
>> >
>> > Signed-off-by: Jeevan B <jeevan.b@intel.com>
>> > ---
>> > tests/kms_setmode.c | 44
>> ++++++++++++++++++++++++++++++++++++++++++--
>> > 1 file changed, 42 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c index
>> > 1f2849bc2..f1c1afe45 100644
>> > --- a/tests/kms_setmode.c
>> > +++ b/tests/kms_setmode.c
>> > @@ -79,6 +79,9 @@
>> > /* restricted pipe count */
>> > #define CRTC_RESTRICT_CNT 2
>> >
>> > +/* Clock limit for HDMI 2.0 */
>> > +#define HDMI_2_0_MAX_CLOCK_KHZ 600000
>> > +
>> > static int drm_fd;
>> > static drmModeRes *drm_resources;
>> > static int filter_test_id;
>> > @@ -165,6 +168,16 @@ static bool
>> connector_supports_mode(drmModeConnector *connector,
>> > return false;
>> > }
>> >
>> > +static bool
>> hdmi_connector_mode_exceeds_hdmi20_limit(drmModeConnector
>> *connector,
>> > + drmModeModeInfo
>> *mode)
>> > +{
>> > + if (connector->connector_type != DRM_MODE_CONNECTOR_HDMIA
>> &&
>> > + connector->connector_type != DRM_MODE_CONNECTOR_HDMIB)
>> > + return false;
>> > +
>> > + return mode->clock > HDMI_2_0_MAX_CLOCK_KHZ;
>>
>> Starting to test all kinds of random thing here does not seem maintainable.
>>
>> I think the one sensible option is to make the test skip rather than fail if it
>> couldn't find a common mode between the connectors and the modeset
>> subsequently failed.
>>
>> As for the external vs. internal connector situation, the test should probably
>> try to find a mode on the external connector(s) that has the same refresh rate
>> as one of the modes on the internal connector, and has the same resolution
>> (or less) than the internal panel. That way we can use pfit to upscale content
>> on the internal panel instead of attempting to force the external connectors to
>> use the internal panel's native mode.
>>
> Thanks, that makes sense.
>
> This test iterates through a large set of valid and invalid
> crtc/connector combinations, so trying to enforce strict compatibility
> in mode selection is making the logic complex and hard to maintain.
>
> It's also becoming harder with newer internal panels supporting high
> refresh rates, which often don't have matching modes on external
> connectors.
>
> I agree it's better to keep the selection simple and skip when no common
> mode is found or the modeset fails, instead of adding more heuristics.
>
> Longer term, it might be worth rethinking the mode selection strategy,
> but for now I'll keep this change minimal.
I think long term the test would be easier to maintain if it were
converted to igt_display_require() and igt_crtc_t and friends instead of
hand-rolling everything.
BR,
Jani.
>
> Thanks
> Jeevan B
>> > +}
>> > +
>> > static bool crtc_supports_mode(struct crtc_config *crtc,
>> > drmModeModeInfo *mode) {
>> > int i;
>> > @@ -270,8 +283,35 @@ static void get_mode_for_crtc(struct crtc_config
>> *crtc,
>> > if (conn->modes[j].clock < mode->clock)
>> > mode = &conn->modes[j];
>> > }
>> > - *mode_ret = *mode;
>> > - return;
>> > +
>> > + /* Check HDMI 2.0 clock + per-connector compatibility
>> */
>> > + {
>> > + int k;
>> > + bool compatible = true;
>> > +
>> > + for (k = 0; k < crtc->connector_count; k++) {
>> > + drmModeConnector *other_conn =
>> > + crtc->cconfs[k].connector;
>> > +
>> > + /* HDMI 2.0 clock constraint */
>> > + if
>> (hdmi_connector_mode_exceeds_hdmi20_limit(other_conn,
>> > +
>> mode)) {
>> > + compatible = false;
>> > + break;
>> > + }
>> > +
>> > + /* Ensure connector supports the
>> mode */
>> > + if
>> (!connector_supports_mode(other_conn, mode)) {
>> > + compatible = false;
>> > + break;
>> > + }
>> > + }
>> > +
>> > + if (compatible) {
>> > + *mode_ret = *mode;
>> > + return;
>> > + }
>> > + }
>> > }
>> > }
>> >
>> > --
>> > 2.43.0
>>
>> --
>> Ville Syrjälä
>> Intel
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-03-31 13:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-31 10:41 [PATCH i-g-t v2] tests/kms_setmode: Add HDMI 2.0 clock limit for mode selection Jeevan B
2026-03-31 11:42 ` Jani Nikula
2026-03-31 13:06 ` Ville Syrjälä
2026-03-31 13:37 ` B, Jeevan
2026-03-31 13:48 ` Jani Nikula
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox