Message ID | 20200422100211.30614-3-kraxel@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ramfb: a bunch of reverts and fixes | expand |
On 04/22/20 12:02, Gerd Hoffmann wrote: > This reverts commit a9e0cb67b7f4c485755659f9b764c38b5f970de4. > > This breaks OVMF. Reproducer: Just hit 'ESC' at early boot to enter > firmware setup. OVMF wants switch from (default) 800x600 to 640x480 for > that, and this patch blocks it. > > Cc: Hou Qiming <hqm03ster@gmail.com> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > hw/display/ramfb.c | 26 ++++---------------------- > 1 file changed, 4 insertions(+), 22 deletions(-) (1) I've verified that, after applying patches #1 and #2 in this series, the resultant state of "hw/display/ramfb.c" matches the one at a9e0cb67b7f4^ (note the caret), modulo: - commit 71e8a9158558 ("Include sysemu/reset.h a lot less", 2019-08-16), and - commit 85eb7c18ee39 ("Let cpu_[physical]_memory() calls pass a boolean 'is_write' argument", 2020-02-20). So: Reviewed-by: Laszlo Ersek <lersek@redhat.com> (2) I've also tested this patch (i.e., built QEMU with patches #1 and #2 applied -- patch #1 is needed for context --, and entered the OVMF Setup TUI while using ramfb). Tested-by: Laszlo Ersek <lersek@redhat.com> Thanks! Laszlo > diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c > index bd4746dc1768..9d41c2ad2868 100644 > --- a/hw/display/ramfb.c > +++ b/hw/display/ramfb.c > @@ -31,7 +31,6 @@ struct RAMFBState { > DisplaySurface *ds; > uint32_t width, height; > struct RAMFBCfg cfg; > - bool locked; > }; > > static void ramfb_unmap_display_surface(pixman_image_t *image, void *unused) > @@ -72,25 +71,18 @@ static DisplaySurface *ramfb_create_display_surface(int width, int height, > static void ramfb_fw_cfg_write(void *dev, off_t offset, size_t len) > { > RAMFBState *s = dev; > - uint32_t fourcc, format, width, height; > + uint32_t fourcc, format; > hwaddr stride, addr; > > - width = be32_to_cpu(s->cfg.width); > - height = be32_to_cpu(s->cfg.height); > + s->width = be32_to_cpu(s->cfg.width); > + s->height = be32_to_cpu(s->cfg.height); > stride = be32_to_cpu(s->cfg.stride); > fourcc = be32_to_cpu(s->cfg.fourcc); > addr = be64_to_cpu(s->cfg.addr); > format = qemu_drm_format_to_pixman(fourcc); > > fprintf(stderr, "%s: %dx%d @ 0x%" PRIx64 "\n", __func__, > - width, height, addr); > - if (s->locked) { > - fprintf(stderr, "%s: resolution locked, change rejected\n", __func__); > - return; > - } > - s->locked = true; > - s->width = width; > - s->height = height; > + s->width, s->height, addr); > s->ds = ramfb_create_display_surface(s->width, s->height, > format, stride, addr); > } > @@ -110,13 +102,6 @@ void ramfb_display_update(QemuConsole *con, RAMFBState *s) > dpy_gfx_update_full(con); > } > > -static void ramfb_reset(void *opaque) > -{ > - RAMFBState *s = (RAMFBState *)opaque; > - s->locked = false; > - memset(&s->cfg, 0, sizeof(s->cfg)); > -} > - > RAMFBState *ramfb_setup(Error **errp) > { > FWCfgState *fw_cfg = fw_cfg_find(); > @@ -129,12 +114,9 @@ RAMFBState *ramfb_setup(Error **errp) > > s = g_new0(RAMFBState, 1); > > - s->locked = false; > - > rom_add_vga("vgabios-ramfb.bin"); > fw_cfg_add_file_callback(fw_cfg, "etc/ramfb", > NULL, ramfb_fw_cfg_write, s, > &s->cfg, sizeof(s->cfg), false); > - qemu_register_reset(ramfb_reset, s); > return s; > } >
diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c index bd4746dc1768..9d41c2ad2868 100644 --- a/hw/display/ramfb.c +++ b/hw/display/ramfb.c @@ -31,7 +31,6 @@ struct RAMFBState { DisplaySurface *ds; uint32_t width, height; struct RAMFBCfg cfg; - bool locked; }; static void ramfb_unmap_display_surface(pixman_image_t *image, void *unused) @@ -72,25 +71,18 @@ static DisplaySurface *ramfb_create_display_surface(int width, int height, static void ramfb_fw_cfg_write(void *dev, off_t offset, size_t len) { RAMFBState *s = dev; - uint32_t fourcc, format, width, height; + uint32_t fourcc, format; hwaddr stride, addr; - width = be32_to_cpu(s->cfg.width); - height = be32_to_cpu(s->cfg.height); + s->width = be32_to_cpu(s->cfg.width); + s->height = be32_to_cpu(s->cfg.height); stride = be32_to_cpu(s->cfg.stride); fourcc = be32_to_cpu(s->cfg.fourcc); addr = be64_to_cpu(s->cfg.addr); format = qemu_drm_format_to_pixman(fourcc); fprintf(stderr, "%s: %dx%d @ 0x%" PRIx64 "\n", __func__, - width, height, addr); - if (s->locked) { - fprintf(stderr, "%s: resolution locked, change rejected\n", __func__); - return; - } - s->locked = true; - s->width = width; - s->height = height; + s->width, s->height, addr); s->ds = ramfb_create_display_surface(s->width, s->height, format, stride, addr); } @@ -110,13 +102,6 @@ void ramfb_display_update(QemuConsole *con, RAMFBState *s) dpy_gfx_update_full(con); } -static void ramfb_reset(void *opaque) -{ - RAMFBState *s = (RAMFBState *)opaque; - s->locked = false; - memset(&s->cfg, 0, sizeof(s->cfg)); -} - RAMFBState *ramfb_setup(Error **errp) { FWCfgState *fw_cfg = fw_cfg_find(); @@ -129,12 +114,9 @@ RAMFBState *ramfb_setup(Error **errp) s = g_new0(RAMFBState, 1); - s->locked = false; - rom_add_vga("vgabios-ramfb.bin"); fw_cfg_add_file_callback(fw_cfg, "etc/ramfb", NULL, ramfb_fw_cfg_write, s, &s->cfg, sizeof(s->cfg), false); - qemu_register_reset(ramfb_reset, s); return s; }
This reverts commit a9e0cb67b7f4c485755659f9b764c38b5f970de4. This breaks OVMF. Reproducer: Just hit 'ESC' at early boot to enter firmware setup. OVMF wants switch from (default) 800x600 to 640x480 for that, and this patch blocks it. Cc: Hou Qiming <hqm03ster@gmail.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/display/ramfb.c | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-)