diff mbox series

[v2,3/8] edid: move xtra3 descriptor

Message ID 20210427150824.638359-4-kraxel@redhat.com (mailing list archive)
State New, archived
Headers show
Series edid: windows fixes | expand

Commit Message

Gerd Hoffmann April 27, 2021, 3:08 p.m. UTC
Initialize the "Established timings III" block earlier.  Also move up
edid_fill_modes().  That'll make sure the offset for the additional
descriptors in the dta block don't move any more, which in turn makes it
easier to actually use them.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/display/edid-generate.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

Comments

Marc-André Lureau April 27, 2021, 3:54 p.m. UTC | #1
On Tue, Apr 27, 2021 at 7:20 PM Gerd Hoffmann <kraxel@redhat.com> wrote:

> Initialize the "Established timings III" block earlier.  Also move up
> edid_fill_modes().  That'll make sure the offset for the additional
> descriptors in the dta block don't move any more, which in turn makes it
> easier to actually use them.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

---
>  hw/display/edid-generate.c | 20 +++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/hw/display/edid-generate.c b/hw/display/edid-generate.c
> index ae34999f9eb5..25f790c7bd85 100644
> --- a/hw/display/edid-generate.c
> +++ b/hw/display/edid-generate.c
> @@ -416,25 +416,28 @@ void qemu_edid_generate(uint8_t *edid, size_t size,
>                       width_mm, height_mm);
>      desc = edid_desc_next(edid, dta, desc);
>
> +    xtra3 = desc;
> +    edid_desc_xtra3_std(xtra3);
> +    desc = edid_desc_next(edid, dta, desc);
> +    edid_fill_modes(edid, xtra3, dta, info->maxx, info->maxy);
> +    /*
> +     * dta video data block is finished at thus point,
> +     * so dta descriptor offsets don't move any more.
> +     */
> +
>      edid_desc_ranges(desc);
>      desc = edid_desc_next(edid, dta, desc);
>
> -    if (info->name) {
> +    if (desc && info->name) {
>          edid_desc_text(desc, 0xfc, info->name);
>          desc = edid_desc_next(edid, dta, desc);
>      }
>
> -    if (info->serial) {
> +    if (desc && info->serial) {
>          edid_desc_text(desc, 0xff, info->serial);
>          desc = edid_desc_next(edid, dta, desc);
>      }
>
> -    if (desc) {
> -        xtra3 = desc;
> -        edid_desc_xtra3_std(xtra3);
> -        desc = edid_desc_next(edid, dta, desc);
> -    }
> -
>      while (desc) {
>          edid_desc_dummy(desc);
>          desc = edid_desc_next(edid, dta, desc);
> @@ -442,7 +445,6 @@ void qemu_edid_generate(uint8_t *edid, size_t size,
>
>      /* =============== finish up =============== */
>
> -    edid_fill_modes(edid, xtra3, dta, info->maxx, info->maxy);
>      edid_checksum(edid);
>      if (dta) {
>          edid_checksum(dta);
> --
> 2.30.2
>
>
>
diff mbox series

Patch

diff --git a/hw/display/edid-generate.c b/hw/display/edid-generate.c
index ae34999f9eb5..25f790c7bd85 100644
--- a/hw/display/edid-generate.c
+++ b/hw/display/edid-generate.c
@@ -416,25 +416,28 @@  void qemu_edid_generate(uint8_t *edid, size_t size,
                      width_mm, height_mm);
     desc = edid_desc_next(edid, dta, desc);
 
+    xtra3 = desc;
+    edid_desc_xtra3_std(xtra3);
+    desc = edid_desc_next(edid, dta, desc);
+    edid_fill_modes(edid, xtra3, dta, info->maxx, info->maxy);
+    /*
+     * dta video data block is finished at thus point,
+     * so dta descriptor offsets don't move any more.
+     */
+
     edid_desc_ranges(desc);
     desc = edid_desc_next(edid, dta, desc);
 
-    if (info->name) {
+    if (desc && info->name) {
         edid_desc_text(desc, 0xfc, info->name);
         desc = edid_desc_next(edid, dta, desc);
     }
 
-    if (info->serial) {
+    if (desc && info->serial) {
         edid_desc_text(desc, 0xff, info->serial);
         desc = edid_desc_next(edid, dta, desc);
     }
 
-    if (desc) {
-        xtra3 = desc;
-        edid_desc_xtra3_std(xtra3);
-        desc = edid_desc_next(edid, dta, desc);
-    }
-
     while (desc) {
         edid_desc_dummy(desc);
         desc = edid_desc_next(edid, dta, desc);
@@ -442,7 +445,6 @@  void qemu_edid_generate(uint8_t *edid, size_t size,
 
     /* =============== finish up =============== */
 
-    edid_fill_modes(edid, xtra3, dta, info->maxx, info->maxy);
     edid_checksum(edid);
     if (dta) {
         edid_checksum(dta);