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
This commit is contained in:
parent
e18e5501d8
commit
ed71c09ffd
@ -34,6 +34,8 @@ GlobalProperty hw_compat_4_2[] = {
|
||||
{ "vhost-blk-device", "seg_max_adjust", "off"},
|
||||
{ "usb-host", "suppress-remote-wake", "off" },
|
||||
{ "usb-redir", "suppress-remote-wake", "off" },
|
||||
{ "qxl", "revision", "4" },
|
||||
{ "qxl-vga", "revision", "4" },
|
||||
};
|
||||
const size_t hw_compat_4_2_len = G_N_ELEMENTS(hw_compat_4_2);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -144,7 +144,7 @@ typedef struct PCIQXLDevice {
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define QXL_DEFAULT_REVISION QXL_REVISION_STABLE_V12
|
||||
#define QXL_DEFAULT_REVISION (QXL_REVISION_STABLE_V12 + 1)
|
||||
|
||||
/* qxl.c */
|
||||
void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL phys, int group_id);
|
||||
|
Loading…
Reference in New Issue
Block a user