dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] drm/displayid: quirk incorrect DisplayID checksums
@ 2025-10-28 20:07 Jani Nikula
  2025-10-28 20:07 ` [PATCH 1/3] drm/displayid: pass iter to drm_find_displayid_extension() Jani Nikula
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Jani Nikula @ 2025-10-28 20:07 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, intel-xe, tiago.martins.araujo, jani.nikula



Jani Nikula (3):
  drm/displayid: pass iter to drm_find_displayid_extension()
  drm/edid: add DRM_EDID_IDENT_INIT() to initialize struct
    drm_edid_ident
  drm/displayid: add quirk to ignore DisplayID checksum errors

 drivers/gpu/drm/drm_displayid.c          | 58 ++++++++++++++++++------
 drivers/gpu/drm/drm_displayid_internal.h |  2 +
 include/drm/drm_edid.h                   |  6 +++
 3 files changed, 51 insertions(+), 15 deletions(-)

-- 
2.47.3


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

* [PATCH 1/3] drm/displayid: pass iter to drm_find_displayid_extension()
  2025-10-28 20:07 [PATCH 0/3] drm/displayid: quirk incorrect DisplayID checksums Jani Nikula
@ 2025-10-28 20:07 ` Jani Nikula
  2025-10-28 20:07 ` [PATCH 2/3] drm/edid: add DRM_EDID_IDENT_INIT() to initialize struct drm_edid_ident Jani Nikula
  2025-10-28 20:07 ` [PATCH 3/3] drm/displayid: add quirk to ignore DisplayID checksum errors Jani Nikula
  2 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2025-10-28 20:07 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, intel-xe, tiago.martins.araujo, jani.nikula

It's more convenient to pass iter than a handful of its members to
drm_find_displayid_extension(), especially as we're about to add another
member.

Rename the function find_next_displayid_extension() while at it, to be
more descriptive.

Cc: Tiago Martins Araújo <tiago.martins.araujo@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_displayid.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/drm_displayid.c b/drivers/gpu/drm/drm_displayid.c
index b4fd43783c50..20b453d2b854 100644
--- a/drivers/gpu/drm/drm_displayid.c
+++ b/drivers/gpu/drm/drm_displayid.c
@@ -48,26 +48,24 @@ validate_displayid(const u8 *displayid, int length, int idx)
 	return base;
 }
 
-static const u8 *drm_find_displayid_extension(const struct drm_edid *drm_edid,
-					      int *length, int *idx,
-					      int *ext_index)
+static const u8 *find_next_displayid_extension(struct displayid_iter *iter)
 {
 	const struct displayid_header *base;
 	const u8 *displayid;
 
-	displayid = drm_edid_find_extension(drm_edid, DISPLAYID_EXT, ext_index);
+	displayid = drm_edid_find_extension(iter->drm_edid, DISPLAYID_EXT, &iter->ext_index);
 	if (!displayid)
 		return NULL;
 
 	/* EDID extensions block checksum isn't for us */
-	*length = EDID_LENGTH - 1;
-	*idx = 1;
+	iter->length = EDID_LENGTH - 1;
+	iter->idx = 1;
 
-	base = validate_displayid(displayid, *length, *idx);
+	base = validate_displayid(displayid, iter->length, iter->idx);
 	if (IS_ERR(base))
 		return NULL;
 
-	*length = *idx + sizeof(*base) + base->bytes;
+	iter->length = iter->idx + sizeof(*base) + base->bytes;
 
 	return displayid;
 }
@@ -126,10 +124,7 @@ __displayid_iter_next(struct displayid_iter *iter)
 		/* The first section we encounter is the base section */
 		bool base_section = !iter->section;
 
-		iter->section = drm_find_displayid_extension(iter->drm_edid,
-							     &iter->length,
-							     &iter->idx,
-							     &iter->ext_index);
+		iter->section = find_next_displayid_extension(iter);
 		if (!iter->section) {
 			iter->drm_edid = NULL;
 			return NULL;
-- 
2.47.3


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

* [PATCH 2/3] drm/edid: add DRM_EDID_IDENT_INIT() to initialize struct drm_edid_ident
  2025-10-28 20:07 [PATCH 0/3] drm/displayid: quirk incorrect DisplayID checksums Jani Nikula
  2025-10-28 20:07 ` [PATCH 1/3] drm/displayid: pass iter to drm_find_displayid_extension() Jani Nikula
@ 2025-10-28 20:07 ` Jani Nikula
  2025-10-28 20:07 ` [PATCH 3/3] drm/displayid: add quirk to ignore DisplayID checksum errors Jani Nikula
  2 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2025-10-28 20:07 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, intel-xe, tiago.martins.araujo, jani.nikula

Add a convenience helper for initializing struct drm_edid_ident.

Cc: Tiago Martins Araújo <tiago.martins.araujo@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 include/drm/drm_edid.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index 3d1aecfec9b2..04f7a7f1f108 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -340,6 +340,12 @@ struct drm_edid_ident {
 	const char *name;
 };
 
+#define DRM_EDID_IDENT_INIT(_vend_chr_0, _vend_chr_1, _vend_chr_2, _product_id, _name) \
+{ \
+	.panel_id = drm_edid_encode_panel_id(_vend_chr_0, _vend_chr_1, _vend_chr_2, _product_id), \
+	.name = _name, \
+}
+
 #define EDID_PRODUCT_ID(e) ((e)->prod_code[0] | ((e)->prod_code[1] << 8))
 
 /* Short Audio Descriptor */
-- 
2.47.3


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

* [PATCH 3/3] drm/displayid: add quirk to ignore DisplayID checksum errors
  2025-10-28 20:07 [PATCH 0/3] drm/displayid: quirk incorrect DisplayID checksums Jani Nikula
  2025-10-28 20:07 ` [PATCH 1/3] drm/displayid: pass iter to drm_find_displayid_extension() Jani Nikula
  2025-10-28 20:07 ` [PATCH 2/3] drm/edid: add DRM_EDID_IDENT_INIT() to initialize struct drm_edid_ident Jani Nikula
@ 2025-10-28 20:07 ` Jani Nikula
  2025-10-30 15:33   ` Alex Deucher
  2 siblings, 1 reply; 6+ messages in thread
From: Jani Nikula @ 2025-10-28 20:07 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, intel-xe, tiago.martins.araujo, jani.nikula

Add a mechanism for DisplayID specific quirks, and add the first quirk
to ignore DisplayID section checksum errors.

It would be quite inconvenient to pass existing EDID quirks from
drm_edid.c for DisplayID parsing. Not all places doing DisplayID
iteration have the quirks readily available, and would have to pass it
in all places. Simply add a separate array of DisplayID specific EDID
quirks. We do end up checking it every time we iterate DisplayID blocks,
but hopefully the number of quirks remains small.

There are a few laptop models with DisplayID checksum failures, leading
to higher refresh rates only present in the DisplayID blocks being
ignored. Add a quirk for the panel in the machines.

Reported-by: Tiago Martins Araújo <tiago.martins.araujo@gmail.com>
Closes: https://lore.kernel.org/r/CACRbrPGvLP5LANXuFi6z0S7XMbAG4X5y2YOLBDxfOVtfGGqiKQ@mail.gmail.com
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14703
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_displayid.c          | 41 +++++++++++++++++++++---
 drivers/gpu/drm/drm_displayid_internal.h |  2 ++
 2 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/drm_displayid.c b/drivers/gpu/drm/drm_displayid.c
index 20b453d2b854..58d0bb6d2676 100644
--- a/drivers/gpu/drm/drm_displayid.c
+++ b/drivers/gpu/drm/drm_displayid.c
@@ -9,6 +9,34 @@
 #include "drm_crtc_internal.h"
 #include "drm_displayid_internal.h"
 
+enum {
+	QUIRK_IGNORE_CHECKSUM,
+};
+
+struct displayid_quirk {
+	const struct drm_edid_ident ident;
+	u8 quirks;
+};
+
+static const struct displayid_quirk quirks[] = {
+	{
+		.ident = DRM_EDID_IDENT_INIT('C', 'S', 'O', 5142, "MNE007ZA1-5"),
+		.quirks = BIT(QUIRK_IGNORE_CHECKSUM),
+	},
+};
+
+static u8 get_quirks(const struct drm_edid *drm_edid)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(quirks); i++) {
+		if (drm_edid_match(drm_edid, &quirks[i].ident))
+			return quirks[i].quirks;
+	}
+
+	return 0;
+}
+
 static const struct displayid_header *
 displayid_get_header(const u8 *displayid, int length, int index)
 {
@@ -23,7 +51,7 @@ displayid_get_header(const u8 *displayid, int length, int index)
 }
 
 static const struct displayid_header *
-validate_displayid(const u8 *displayid, int length, int idx)
+validate_displayid(const u8 *displayid, int length, int idx, bool ignore_checksum)
 {
 	int i, dispid_length;
 	u8 csum = 0;
@@ -41,8 +69,11 @@ validate_displayid(const u8 *displayid, int length, int idx)
 	for (i = 0; i < dispid_length; i++)
 		csum += displayid[idx + i];
 	if (csum) {
-		DRM_NOTE("DisplayID checksum invalid, remainder is %d\n", csum);
-		return ERR_PTR(-EINVAL);
+		DRM_NOTE("DisplayID checksum invalid, remainder is %d%s\n", csum,
+			 ignore_checksum ? " (ignoring)" : "");
+
+		if (!ignore_checksum)
+			return ERR_PTR(-EINVAL);
 	}
 
 	return base;
@@ -52,6 +83,7 @@ static const u8 *find_next_displayid_extension(struct displayid_iter *iter)
 {
 	const struct displayid_header *base;
 	const u8 *displayid;
+	bool ignore_checksum = iter->quirks & BIT(QUIRK_IGNORE_CHECKSUM);
 
 	displayid = drm_edid_find_extension(iter->drm_edid, DISPLAYID_EXT, &iter->ext_index);
 	if (!displayid)
@@ -61,7 +93,7 @@ static const u8 *find_next_displayid_extension(struct displayid_iter *iter)
 	iter->length = EDID_LENGTH - 1;
 	iter->idx = 1;
 
-	base = validate_displayid(displayid, iter->length, iter->idx);
+	base = validate_displayid(displayid, iter->length, iter->idx, ignore_checksum);
 	if (IS_ERR(base))
 		return NULL;
 
@@ -76,6 +108,7 @@ void displayid_iter_edid_begin(const struct drm_edid *drm_edid,
 	memset(iter, 0, sizeof(*iter));
 
 	iter->drm_edid = drm_edid;
+	iter->quirks = get_quirks(drm_edid);
 }
 
 static const struct displayid_block *
diff --git a/drivers/gpu/drm/drm_displayid_internal.h b/drivers/gpu/drm/drm_displayid_internal.h
index 957dd0619f5c..5b1b32f73516 100644
--- a/drivers/gpu/drm/drm_displayid_internal.h
+++ b/drivers/gpu/drm/drm_displayid_internal.h
@@ -167,6 +167,8 @@ struct displayid_iter {
 
 	u8 version;
 	u8 primary_use;
+
+	u8 quirks;
 };
 
 void displayid_iter_edid_begin(const struct drm_edid *drm_edid,
-- 
2.47.3


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

* Re: [PATCH 3/3] drm/displayid: add quirk to ignore DisplayID checksum errors
  2025-10-28 20:07 ` [PATCH 3/3] drm/displayid: add quirk to ignore DisplayID checksum errors Jani Nikula
@ 2025-10-30 15:33   ` Alex Deucher
  2025-11-04 12:54     ` Jani Nikula
  0 siblings, 1 reply; 6+ messages in thread
From: Alex Deucher @ 2025-10-30 15:33 UTC (permalink / raw)
  To: Jani Nikula; +Cc: dri-devel, intel-gfx, intel-xe, tiago.martins.araujo

On Tue, Oct 28, 2025 at 5:26 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> Add a mechanism for DisplayID specific quirks, and add the first quirk
> to ignore DisplayID section checksum errors.
>
> It would be quite inconvenient to pass existing EDID quirks from
> drm_edid.c for DisplayID parsing. Not all places doing DisplayID
> iteration have the quirks readily available, and would have to pass it
> in all places. Simply add a separate array of DisplayID specific EDID
> quirks. We do end up checking it every time we iterate DisplayID blocks,
> but hopefully the number of quirks remains small.
>
> There are a few laptop models with DisplayID checksum failures, leading
> to higher refresh rates only present in the DisplayID blocks being
> ignored. Add a quirk for the panel in the machines.
>
> Reported-by: Tiago Martins Araújo <tiago.martins.araujo@gmail.com>
> Closes: https://lore.kernel.org/r/CACRbrPGvLP5LANXuFi6z0S7XMbAG4X5y2YOLBDxfOVtfGGqiKQ@mail.gmail.com
> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14703
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Series is:
Acked-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/drm_displayid.c          | 41 +++++++++++++++++++++---
>  drivers/gpu/drm/drm_displayid_internal.h |  2 ++
>  2 files changed, 39 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_displayid.c b/drivers/gpu/drm/drm_displayid.c
> index 20b453d2b854..58d0bb6d2676 100644
> --- a/drivers/gpu/drm/drm_displayid.c
> +++ b/drivers/gpu/drm/drm_displayid.c
> @@ -9,6 +9,34 @@
>  #include "drm_crtc_internal.h"
>  #include "drm_displayid_internal.h"
>
> +enum {
> +       QUIRK_IGNORE_CHECKSUM,
> +};
> +
> +struct displayid_quirk {
> +       const struct drm_edid_ident ident;
> +       u8 quirks;
> +};
> +
> +static const struct displayid_quirk quirks[] = {
> +       {
> +               .ident = DRM_EDID_IDENT_INIT('C', 'S', 'O', 5142, "MNE007ZA1-5"),
> +               .quirks = BIT(QUIRK_IGNORE_CHECKSUM),
> +       },
> +};
> +
> +static u8 get_quirks(const struct drm_edid *drm_edid)
> +{
> +       int i;
> +
> +       for (i = 0; i < ARRAY_SIZE(quirks); i++) {
> +               if (drm_edid_match(drm_edid, &quirks[i].ident))
> +                       return quirks[i].quirks;
> +       }
> +
> +       return 0;
> +}
> +
>  static const struct displayid_header *
>  displayid_get_header(const u8 *displayid, int length, int index)
>  {
> @@ -23,7 +51,7 @@ displayid_get_header(const u8 *displayid, int length, int index)
>  }
>
>  static const struct displayid_header *
> -validate_displayid(const u8 *displayid, int length, int idx)
> +validate_displayid(const u8 *displayid, int length, int idx, bool ignore_checksum)
>  {
>         int i, dispid_length;
>         u8 csum = 0;
> @@ -41,8 +69,11 @@ validate_displayid(const u8 *displayid, int length, int idx)
>         for (i = 0; i < dispid_length; i++)
>                 csum += displayid[idx + i];
>         if (csum) {
> -               DRM_NOTE("DisplayID checksum invalid, remainder is %d\n", csum);
> -               return ERR_PTR(-EINVAL);
> +               DRM_NOTE("DisplayID checksum invalid, remainder is %d%s\n", csum,
> +                        ignore_checksum ? " (ignoring)" : "");
> +
> +               if (!ignore_checksum)
> +                       return ERR_PTR(-EINVAL);
>         }
>
>         return base;
> @@ -52,6 +83,7 @@ static const u8 *find_next_displayid_extension(struct displayid_iter *iter)
>  {
>         const struct displayid_header *base;
>         const u8 *displayid;
> +       bool ignore_checksum = iter->quirks & BIT(QUIRK_IGNORE_CHECKSUM);
>
>         displayid = drm_edid_find_extension(iter->drm_edid, DISPLAYID_EXT, &iter->ext_index);
>         if (!displayid)
> @@ -61,7 +93,7 @@ static const u8 *find_next_displayid_extension(struct displayid_iter *iter)
>         iter->length = EDID_LENGTH - 1;
>         iter->idx = 1;
>
> -       base = validate_displayid(displayid, iter->length, iter->idx);
> +       base = validate_displayid(displayid, iter->length, iter->idx, ignore_checksum);
>         if (IS_ERR(base))
>                 return NULL;
>
> @@ -76,6 +108,7 @@ void displayid_iter_edid_begin(const struct drm_edid *drm_edid,
>         memset(iter, 0, sizeof(*iter));
>
>         iter->drm_edid = drm_edid;
> +       iter->quirks = get_quirks(drm_edid);
>  }
>
>  static const struct displayid_block *
> diff --git a/drivers/gpu/drm/drm_displayid_internal.h b/drivers/gpu/drm/drm_displayid_internal.h
> index 957dd0619f5c..5b1b32f73516 100644
> --- a/drivers/gpu/drm/drm_displayid_internal.h
> +++ b/drivers/gpu/drm/drm_displayid_internal.h
> @@ -167,6 +167,8 @@ struct displayid_iter {
>
>         u8 version;
>         u8 primary_use;
> +
> +       u8 quirks;
>  };
>
>  void displayid_iter_edid_begin(const struct drm_edid *drm_edid,
> --
> 2.47.3
>

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

* Re: [PATCH 3/3] drm/displayid: add quirk to ignore DisplayID checksum errors
  2025-10-30 15:33   ` Alex Deucher
@ 2025-11-04 12:54     ` Jani Nikula
  0 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2025-11-04 12:54 UTC (permalink / raw)
  To: Alex Deucher; +Cc: dri-devel, intel-gfx, intel-xe, tiago.martins.araujo

On Thu, 30 Oct 2025, Alex Deucher <alexdeucher@gmail.com> wrote:
> On Tue, Oct 28, 2025 at 5:26 PM Jani Nikula <jani.nikula@intel.com> wrote:
>>
>> Add a mechanism for DisplayID specific quirks, and add the first quirk
>> to ignore DisplayID section checksum errors.
>>
>> It would be quite inconvenient to pass existing EDID quirks from
>> drm_edid.c for DisplayID parsing. Not all places doing DisplayID
>> iteration have the quirks readily available, and would have to pass it
>> in all places. Simply add a separate array of DisplayID specific EDID
>> quirks. We do end up checking it every time we iterate DisplayID blocks,
>> but hopefully the number of quirks remains small.
>>
>> There are a few laptop models with DisplayID checksum failures, leading
>> to higher refresh rates only present in the DisplayID blocks being
>> ignored. Add a quirk for the panel in the machines.
>>
>> Reported-by: Tiago Martins Araújo <tiago.martins.araujo@gmail.com>
>> Closes: https://lore.kernel.org/r/CACRbrPGvLP5LANXuFi6z0S7XMbAG4X5y2YOLBDxfOVtfGGqiKQ@mail.gmail.com
>> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14703
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> Series is:
> Acked-by: Alex Deucher <alexander.deucher@amd.com>

Thanks, pushed to drm-misc-next.

BR,
Jani.


>
>> ---
>>  drivers/gpu/drm/drm_displayid.c          | 41 +++++++++++++++++++++---
>>  drivers/gpu/drm/drm_displayid_internal.h |  2 ++
>>  2 files changed, 39 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_displayid.c b/drivers/gpu/drm/drm_displayid.c
>> index 20b453d2b854..58d0bb6d2676 100644
>> --- a/drivers/gpu/drm/drm_displayid.c
>> +++ b/drivers/gpu/drm/drm_displayid.c
>> @@ -9,6 +9,34 @@
>>  #include "drm_crtc_internal.h"
>>  #include "drm_displayid_internal.h"
>>
>> +enum {
>> +       QUIRK_IGNORE_CHECKSUM,
>> +};
>> +
>> +struct displayid_quirk {
>> +       const struct drm_edid_ident ident;
>> +       u8 quirks;
>> +};
>> +
>> +static const struct displayid_quirk quirks[] = {
>> +       {
>> +               .ident = DRM_EDID_IDENT_INIT('C', 'S', 'O', 5142, "MNE007ZA1-5"),
>> +               .quirks = BIT(QUIRK_IGNORE_CHECKSUM),
>> +       },
>> +};
>> +
>> +static u8 get_quirks(const struct drm_edid *drm_edid)
>> +{
>> +       int i;
>> +
>> +       for (i = 0; i < ARRAY_SIZE(quirks); i++) {
>> +               if (drm_edid_match(drm_edid, &quirks[i].ident))
>> +                       return quirks[i].quirks;
>> +       }
>> +
>> +       return 0;
>> +}
>> +
>>  static const struct displayid_header *
>>  displayid_get_header(const u8 *displayid, int length, int index)
>>  {
>> @@ -23,7 +51,7 @@ displayid_get_header(const u8 *displayid, int length, int index)
>>  }
>>
>>  static const struct displayid_header *
>> -validate_displayid(const u8 *displayid, int length, int idx)
>> +validate_displayid(const u8 *displayid, int length, int idx, bool ignore_checksum)
>>  {
>>         int i, dispid_length;
>>         u8 csum = 0;
>> @@ -41,8 +69,11 @@ validate_displayid(const u8 *displayid, int length, int idx)
>>         for (i = 0; i < dispid_length; i++)
>>                 csum += displayid[idx + i];
>>         if (csum) {
>> -               DRM_NOTE("DisplayID checksum invalid, remainder is %d\n", csum);
>> -               return ERR_PTR(-EINVAL);
>> +               DRM_NOTE("DisplayID checksum invalid, remainder is %d%s\n", csum,
>> +                        ignore_checksum ? " (ignoring)" : "");
>> +
>> +               if (!ignore_checksum)
>> +                       return ERR_PTR(-EINVAL);
>>         }
>>
>>         return base;
>> @@ -52,6 +83,7 @@ static const u8 *find_next_displayid_extension(struct displayid_iter *iter)
>>  {
>>         const struct displayid_header *base;
>>         const u8 *displayid;
>> +       bool ignore_checksum = iter->quirks & BIT(QUIRK_IGNORE_CHECKSUM);
>>
>>         displayid = drm_edid_find_extension(iter->drm_edid, DISPLAYID_EXT, &iter->ext_index);
>>         if (!displayid)
>> @@ -61,7 +93,7 @@ static const u8 *find_next_displayid_extension(struct displayid_iter *iter)
>>         iter->length = EDID_LENGTH - 1;
>>         iter->idx = 1;
>>
>> -       base = validate_displayid(displayid, iter->length, iter->idx);
>> +       base = validate_displayid(displayid, iter->length, iter->idx, ignore_checksum);
>>         if (IS_ERR(base))
>>                 return NULL;
>>
>> @@ -76,6 +108,7 @@ void displayid_iter_edid_begin(const struct drm_edid *drm_edid,
>>         memset(iter, 0, sizeof(*iter));
>>
>>         iter->drm_edid = drm_edid;
>> +       iter->quirks = get_quirks(drm_edid);
>>  }
>>
>>  static const struct displayid_block *
>> diff --git a/drivers/gpu/drm/drm_displayid_internal.h b/drivers/gpu/drm/drm_displayid_internal.h
>> index 957dd0619f5c..5b1b32f73516 100644
>> --- a/drivers/gpu/drm/drm_displayid_internal.h
>> +++ b/drivers/gpu/drm/drm_displayid_internal.h
>> @@ -167,6 +167,8 @@ struct displayid_iter {
>>
>>         u8 version;
>>         u8 primary_use;
>> +
>> +       u8 quirks;
>>  };
>>
>>  void displayid_iter_edid_begin(const struct drm_edid *drm_edid,
>> --
>> 2.47.3
>>

-- 
Jani Nikula, Intel

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

end of thread, other threads:[~2025-11-04 12:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-28 20:07 [PATCH 0/3] drm/displayid: quirk incorrect DisplayID checksums Jani Nikula
2025-10-28 20:07 ` [PATCH 1/3] drm/displayid: pass iter to drm_find_displayid_extension() Jani Nikula
2025-10-28 20:07 ` [PATCH 2/3] drm/edid: add DRM_EDID_IDENT_INIT() to initialize struct drm_edid_ident Jani Nikula
2025-10-28 20:07 ` [PATCH 3/3] drm/displayid: add quirk to ignore DisplayID checksum errors Jani Nikula
2025-10-30 15:33   ` Alex Deucher
2025-11-04 12:54     ` Jani Nikula

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).