On 3/16/21 3:38 PM, Gerd Hoffmann wrote: > From: Konstantin Nazarov <m...@knazarov.com> > > The Detailed Timing Descriptor has only 12 bits to store the > resolution. This limits the guest to 4095 pixels. > > This patch adds support for the DisplayID extension, that has 2 full > bytes for that purpose, thus allowing 5k resolutions and above. > > Based-on: <20210303152948.59943-2-akihiko.od...@gmail.com> > Signed-off-by: Konstantin Nazarov <m...@knazarov.com> > Message-Id: <20210315114639.91953-3-m...@knazarov.com> > > [ kraxel: minor workflow tweaks ] > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > --- > hw/display/edid-generate.c | 78 +++++++++++++++++++++++++++++++++++--- > hw/display/vga-pci.c | 2 +- > 2 files changed, 74 insertions(+), 6 deletions(-)
> +static void qemu_displayid_generate(uint8_t *did, uint32_t refresh_rate, > + uint32_t xres, uint32_t yres, > + uint32_t xmm, uint32_t ymm) > +{ > + Timings timings; > + generate_timings(&timings, refresh_rate, xres, yres); > + > + did[0] = 0x70; /* display id extension */ > + did[1] = 0x13; /* version 1.3 */ > + did[2] = 23; /* length */ > + did[3] = 0x03; /* product type (0x03 == standalone display device) */ > + > + did[5] = 0x03; /* Detailed Timings Data Block */ > + did[6] = 0x00; /* revision */ > + did[7] = 0x14; /* block length */ > + > + did[8] = timings.clock & 0xff; > + did[9] = (timings.clock & 0xff00) >> 8; > + did[10] = (timings.clock & 0xff0000) >> 16; > + > + did[11] = 0x88; /* leave aspect ratio undefined */ > + > + stw_le_p(did + 12, 0xffff & (xres - 1)); > + stw_le_p(did + 14, 0xffff & (timings.xblank - 1)); > + stw_le_p(did + 16, 0xffff & (timings.xfront - 1)); > + stw_le_p(did + 18, 0xffff & (timings.xsync - 1)); > + > + stw_le_p(did + 20, 0xffff & (yres - 1)); > + stw_le_p(did + 22, 0xffff & (timings.yblank - 1)); > + stw_le_p(did + 24, 0xffff & (timings.yfront - 1)); > + stw_le_p(did + 26, 0xffff & (timings.ysync - 1)); Pointless 0xffff mask. > + > + edid_checksum(did + 1, did[2] + 4); > +}