aboutsummaryrefslogtreecommitdiff
path: root/hw/display/qxl.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2020-02-06 08:43:58 +0100
committerGerd Hoffmann <kraxel@redhat.com>2020-02-13 08:31:40 +0100
commited71c09ffd6fbd01c2a487d47291ae57b08671ea (patch)
tree86dba70f959d7a1a18b97dd2990db5e01200a555 /hw/display/qxl.c
parente18e5501d8ac692d32657a3e1ef545b14e72b730 (diff)
qxl: introduce hardware revision 5
The only difference to hardware revision 4 is that the device doesn't switch to VGA mode in case someone happens to touch a VGA register, which should make things more robust in configurations with multiple vga devices. Swtiching back to VGA mode happens on reset, either full machine reset or qxl device reset (QXL_IO_RESET ioport command). Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com> Message-id: 20200206074358.4274-1-kraxel@redhat.com
Diffstat (limited to 'hw/display/qxl.c')
-rw-r--r--hw/display/qxl.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
index c33b1915a5..64884da708 100644
--- a/hw/display/qxl.c
+++ b/hw/display/qxl.c
@@ -1309,7 +1309,8 @@ static void qxl_vga_ioport_write(void *opaque, uint32_t addr, uint32_t val)
PCIQXLDevice *qxl = container_of(vga, PCIQXLDevice, vga);
trace_qxl_io_write_vga(qxl->id, qxl_mode_to_string(qxl->mode), addr, val);
- if (qxl->mode != QXL_MODE_VGA) {
+ if (qxl->mode != QXL_MODE_VGA &&
+ qxl->revision <= QXL_REVISION_STABLE_V12) {
qxl_destroy_primary(qxl, QXL_SYNC);
qxl_soft_reset(qxl);
}
@@ -2121,6 +2122,10 @@ static void qxl_realize_common(PCIQXLDevice *qxl, Error **errp)
pci_device_rev = QXL_REVISION_STABLE_V12;
io_size = pow2ceil(QXL_IO_RANGE_SIZE);
break;
+ case 5: /* qxl-5 */
+ pci_device_rev = QXL_REVISION_STABLE_V12 + 1;
+ io_size = pow2ceil(QXL_IO_RANGE_SIZE);
+ break;
default:
error_setg(errp, "Invalid revision %d for qxl device (max %d)",
qxl->revision, QXL_DEFAULT_REVISION);