[PULL,1/1] qxl: introduce hardware revision 5
diff mbox series

Message ID 20200213090627.2181-2-kraxel@redhat.com
State New
Headers show
Series
  • [PULL,1/1] qxl: introduce hardware revision 5
Related show

Commit Message

Gerd Hoffmann Feb. 13, 2020, 9:06 a.m. UTC
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
---
 hw/display/qxl.h  | 2 +-
 hw/core/machine.c | 2 ++
 hw/display/qxl.c  | 7 ++++++-
 3 files changed, 9 insertions(+), 2 deletions(-)

Comments

Laszlo Ersek March 4, 2020, 11:28 p.m. UTC | #1
Hi Gerd,

On 02/13/20 10:06, Gerd Hoffmann wrote:
> 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
> ---
>  hw/display/qxl.h  | 2 +-
>  hw/core/machine.c | 2 ++
>  hw/display/qxl.c  | 7 ++++++-
>  3 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/hw/display/qxl.h b/hw/display/qxl.h
> index 80eb0d267269..707631a1f573 100644
> --- a/hw/display/qxl.h
> +++ b/hw/display/qxl.h
> @@ -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);
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index d8e30e4895d8..84812a1d1cc1 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -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);
>
> diff --git a/hw/display/qxl.c b/hw/display/qxl.c
> index c33b1915a52c..64884da70857 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);
>

this patch -- commit ed71c09ffd6f -- disables ACPI S3 in the Windows 10
guest for me, using OVMF and QXL.

The "Sleep" menu entry disappears from the power button icon/menu at the
login screen, and "psshutdown -d -t 3" (from the pstools package) also
stops working (it reports that the computer does not support S3).

At the parent commit (e18e5501d8ac), S3 suspend/resume works.

Here's the bisection log:

> git bisect start
> # good: [928173659d6e5dc368284f73f90ea1d129e1f57d] Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20200130' into staging
> git bisect good 928173659d6e5dc368284f73f90ea1d129e1f57d
> # good: [93c86fff53a267f657e79ec07dcd04b63882e330] Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20200207' into staging
> git bisect good 93c86fff53a267f657e79ec07dcd04b63882e330
> # bad: [db736e0437aa6fd7c1b7e4599c17f9619ab6b837] Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging
> git bisect bad db736e0437aa6fd7c1b7e4599c17f9619ab6b837
> # bad: [8ee06e4ccb0f447caf9dc884b98986c155915e5c] ppc/mac_oldworld: use memdev for RAM
> git bisect bad 8ee06e4ccb0f447caf9dc884b98986c155915e5c
> # good: [dc7a88d0810ad272bdcd2e0869359af78fdd9114] target/arm: Implement ARMv8.1-VMID16 extension
> git bisect good dc7a88d0810ad272bdcd2e0869359af78fdd9114
> # bad: [652c5bbd7e7d3cb3d27a2e0590118dc79fb6f4d8] Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-5.0-pull-request' into staging
> git bisect bad 652c5bbd7e7d3cb3d27a2e0590118dc79fb6f4d8
> # bad: [e050e426782ec4ae6bf84e5ec75ca502187f69cb] qapi: Use explicit bulleted lists
> git bisect bad e050e426782ec4ae6bf84e5ec75ca502187f69cb
> # good: [5d6542bea780ad443c4f7f1496e64706101f525c] Merge remote-tracking branch 'remotes/rth/tags/pull-tcg-20200212' into staging
> git bisect good 5d6542bea780ad443c4f7f1496e64706101f525c
> # bad: [72ec8bf362b24ebbd45452c298a3b14fb617eebb] qga/qapi-schema.json: Fix missing '-' in GuestDiskBusType doc comment
> git bisect bad 72ec8bf362b24ebbd45452c298a3b14fb617eebb
> # bad: [2eb054c237d0b5427f62499f3c31e90cf87821d7] configure: Allow user to specify sphinx-build binary
> git bisect bad 2eb054c237d0b5427f62499f3c31e90cf87821d7
> # bad: [517c84cef759a453cfb8f51498aebc909a5f3b39] Merge remote-tracking branch 'remotes/kraxel/tags/vga-20200213-pull-request' into staging
> git bisect bad 517c84cef759a453cfb8f51498aebc909a5f3b39
> # bad: [ed71c09ffd6fbd01c2a487d47291ae57b08671ea] qxl: introduce hardware revision 5
> git bisect bad ed71c09ffd6fbd01c2a487d47291ae57b08671ea
> # first bad commit: [ed71c09ffd6fbd01c2a487d47291ae57b08671ea] qxl: introduce hardware revision 5

OVMF is built at current edk2 master: e63d54db9526.

In the Windows 10 guest, the installed driver has the following
properties (per Device Manager):

- driver date: 7/28/2015
- driver version: 22.33.46.473

I tried upgrading the QXL driver in the Windows 10 guest, using the
latest package at
<https://fedorapeople.org/groups/virt/virtio-win/repo/latest/?C=M;O=D>,
namely "virtio-win-0.1.173-7.noarch.rpm". But Device Manager said that
the currently installed driver was already the best / most recent for
the device.

For now I'll force the revision back to 4 using <qemu:arg> elements in
my domain XML. (I'd like to use pc-q35-5.0.)

    <qemu:arg value='-global'/>
    <qemu:arg value='qxl-vga.revision=4'/>

Thanks
Laszlo
Yuri Benditovich March 5, 2020, 7:57 a.m. UTC | #2
----- Original Message -----

> From: "Laszlo Ersek" <lersek@redhat.com>
> To: "Gerd Hoffmann" <kraxel@redhat.com>
> Cc: qemu-devel@nongnu.org, "Eduardo Habkost" <ehabkost@redhat.com>, "Yuri
> Benditovich" <ybendito@redhat.com>, "Yan Vugenfirer" <yvugenfi@redhat.com>
> Sent: Thursday, March 5, 2020 1:28:23 AM
> Subject: Re: [PULL 1/1] qxl: introduce hardware revision 5

> Hi Gerd,

> On 02/13/20 10:06, Gerd Hoffmann wrote:
> > 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
> > ---
> > hw/display/qxl.h | 2 +-
> > hw/core/machine.c | 2 ++
> > hw/display/qxl.c | 7 ++++++-
> > 3 files changed, 9 insertions(+), 2 deletions(-)
> >
> > diff --git a/hw/display/qxl.h b/hw/display/qxl.h
> > index 80eb0d267269..707631a1f573 100644
> > --- a/hw/display/qxl.h
> > +++ b/hw/display/qxl.h
> > @@ -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);
> > diff --git a/hw/core/machine.c b/hw/core/machine.c
> > index d8e30e4895d8..84812a1d1cc1 100644
> > --- a/hw/core/machine.c
> > +++ b/hw/core/machine.c
> > @@ -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);
> >
> > diff --git a/hw/display/qxl.c b/hw/display/qxl.c
> > index c33b1915a52c..64884da70857 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);
> >

> this patch -- commit ed71c09ffd6f -- disables ACPI S3 in the Windows 10
> guest for me, using OVMF and QXL.

> The "Sleep" menu entry disappears from the power button icon/menu at the
> login screen, and "psshutdown -d -t 3" (from the pstools package) also
> stops working (it reports that the computer does not support S3).

> At the parent commit (e18e5501d8ac), S3 suspend/resume works.

> Here's the bisection log:

> > git bisect start
> > # good: [928173659d6e5dc368284f73f90ea1d129e1f57d] Merge remote-tracking
> > branch 'remotes/pmaydell/tags/pull-target-arm-20200130' into staging
> > git bisect good 928173659d6e5dc368284f73f90ea1d129e1f57d
> > # good: [93c86fff53a267f657e79ec07dcd04b63882e330] Merge remote-tracking
> > branch 'remotes/pmaydell/tags/pull-target-arm-20200207' into staging
> > git bisect good 93c86fff53a267f657e79ec07dcd04b63882e330
> > # bad: [db736e0437aa6fd7c1b7e4599c17f9619ab6b837] Merge remote-tracking
> > branch 'remotes/bonzini/tags/for-upstream' into staging
> > git bisect bad db736e0437aa6fd7c1b7e4599c17f9619ab6b837
> > # bad: [8ee06e4ccb0f447caf9dc884b98986c155915e5c] ppc/mac_oldworld: use
> > memdev for RAM
> > git bisect bad 8ee06e4ccb0f447caf9dc884b98986c155915e5c
> > # good: [dc7a88d0810ad272bdcd2e0869359af78fdd9114] target/arm: Implement
> > ARMv8.1-VMID16 extension
> > git bisect good dc7a88d0810ad272bdcd2e0869359af78fdd9114
> > # bad: [652c5bbd7e7d3cb3d27a2e0590118dc79fb6f4d8] Merge remote-tracking
> > branch 'remotes/vivier2/tags/linux-user-for-5.0-pull-request' into staging
> > git bisect bad 652c5bbd7e7d3cb3d27a2e0590118dc79fb6f4d8
> > # bad: [e050e426782ec4ae6bf84e5ec75ca502187f69cb] qapi: Use explicit
> > bulleted lists
> > git bisect bad e050e426782ec4ae6bf84e5ec75ca502187f69cb
> > # good: [5d6542bea780ad443c4f7f1496e64706101f525c] Merge remote-tracking
> > branch 'remotes/rth/tags/pull-tcg-20200212' into staging
> > git bisect good 5d6542bea780ad443c4f7f1496e64706101f525c
> > # bad: [72ec8bf362b24ebbd45452c298a3b14fb617eebb] qga/qapi-schema.json: Fix
> > missing '-' in GuestDiskBusType doc comment
> > git bisect bad 72ec8bf362b24ebbd45452c298a3b14fb617eebb
> > # bad: [2eb054c237d0b5427f62499f3c31e90cf87821d7] configure: Allow user to
> > specify sphinx-build binary
> > git bisect bad 2eb054c237d0b5427f62499f3c31e90cf87821d7
> > # bad: [517c84cef759a453cfb8f51498aebc909a5f3b39] Merge remote-tracking
> > branch 'remotes/kraxel/tags/vga-20200213-pull-request' into staging
> > git bisect bad 517c84cef759a453cfb8f51498aebc909a5f3b39
> > # bad: [ed71c09ffd6fbd01c2a487d47291ae57b08671ea] qxl: introduce hardware
> > revision 5
> > git bisect bad ed71c09ffd6fbd01c2a487d47291ae57b08671ea
> > # first bad commit: [ed71c09ffd6fbd01c2a487d47291ae57b08671ea] qxl:
> > introduce hardware revision 5

> OVMF is built at current edk2 master: e63d54db9526.

> In the Windows 10 guest, the installed driver has the following
> properties (per Device Manager):

> - driver date: 7/28/2015
> - driver version: 22.33.46.473
This is not what I would expect from any qxl driver for Win10 
What is the name of display adapter? 
The driver provider is 'Red Hat'? 
Does your guest run with secure boot? 
I do not see such an effect with 'Sleep' with latest qemu master + OVMF + qxl + Win10, the sleep button does not disappear. 

> I tried upgrading the QXL driver in the Windows 10 guest, using the
> latest package at
> <https://fedorapeople.org/groups/virt/virtio-win/repo/latest/?C=M;O=D>,
> namely "virtio-win-0.1.173-7.noarch.rpm". But Device Manager said that
> the currently installed driver was already the best / most recent for
> the device.For now I'll force the revision back to 4 using <qemu:arg>
> elements in
> my domain XML. (I'd like to use pc-q35-5.0.)

> <qemu:arg value='-global'/>
> <qemu:arg value='qxl-vga.revision=4'/>

> Thanks
> Laszlo
Gerd Hoffmann March 5, 2020, 8:08 a.m. UTC | #3
Hi,

> > +    case 5: /* qxl-5 */
> > +        pci_device_rev = QXL_REVISION_STABLE_V12 + 1;
> > +        io_size = pow2ceil(QXL_IO_RANGE_SIZE);
> > +        break;

> this patch -- commit ed71c09ffd6f -- disables ACPI S3 in the Windows 10
> guest for me, using OVMF and QXL.
> 
> The "Sleep" menu entry disappears from the power button icon/menu at the
> login screen, and "psshutdown -d -t 3" (from the pstools package) also
> stops working (it reports that the computer does not support S3).

Any chance the qxl windows guest driver checks "revision == 4"
instead of "revision >= 4"?

cheers,
  Gerd
Yuri Benditovich March 5, 2020, 9:16 a.m. UTC | #4
----- Original Message -----

> From: "Gerd Hoffmann" <kraxel@redhat.com>
> To: "Laszlo Ersek" <lersek@redhat.com>
> Cc: qemu-devel@nongnu.org, "Eduardo Habkost" <ehabkost@redhat.com>, "Yuri
> Benditovich" <ybendito@redhat.com>, "Yan Vugenfirer" <yvugenfi@redhat.com>
> Sent: Thursday, March 5, 2020 10:08:36 AM
> Subject: Re: [PULL 1/1] qxl: introduce hardware revision 5

> Hi,

> > > + case 5: /* qxl-5 */
> > > + pci_device_rev = QXL_REVISION_STABLE_V12 + 1;
> > > + io_size = pow2ceil(QXL_IO_RANGE_SIZE);
> > > + break;

> > this patch -- commit ed71c09ffd6f -- disables ACPI S3 in the Windows 10
> > guest for me, using OVMF and QXL.
> >
> > The "Sleep" menu entry disappears from the power button icon/menu at the
> > login screen, and "psshutdown -d -t 3" (from the pstools package) also
> > stops working (it reports that the computer does not support S3).

> Any chance the qxl windows guest driver checks "revision == 4"
> instead of "revision >= 4"?
Not with qxl-wddm-dod drivers I'm releasing. 
But driver attributes that Laszlo provided are not related to any driver I'm aware of. 

> cheers,
> Gerd
Laszlo Ersek March 5, 2020, 3:01 p.m. UTC | #5
On 03/05/20 08:57, Yuri Benditovich wrote:
> ----- Original Message -----
>
>> From: "Laszlo Ersek" <lersek@redhat.com>
>> To: "Gerd Hoffmann" <kraxel@redhat.com>
>> Cc: qemu-devel@nongnu.org, "Eduardo Habkost" <ehabkost@redhat.com>,
>> "Yuri Benditovich" <ybendito@redhat.com>, "Yan Vugenfirer"
>> <yvugenfi@redhat.com>
>> Sent: Thursday, March 5, 2020 1:28:23 AM
>> Subject: Re: [PULL 1/1] qxl: introduce hardware revision 5
>
>> this patch -- commit ed71c09ffd6f -- disables ACPI S3 in the Windows
>> 10 guest for me, using OVMF and QXL.
>
>> The "Sleep" menu entry disappears from the power button icon/menu at
>> the login screen, and "psshutdown -d -t 3" (from the pstools package)
>> also stops working (it reports that the computer does not support
>> S3).
>
>> At the parent commit (e18e5501d8ac), S3 suspend/resume works.
>

[...]

>> OVMF is built at current edk2 master: e63d54db9526.
>
>> In the Windows 10 guest, the installed driver has the following
>> properties (per Device Manager):
>
>> - driver date: 7/28/2015
>> - driver version: 22.33.46.473

> This is not what I would expect from any qxl driver for Win10
> What is the name of display adapter?

"Red Hat QXL controller"

> The driver provider is 'Red Hat'?

In the "Red Hat QXL controller Properties" dialog:

- on the General tab, Manufacturer is "Red Hat, Inc."

- on the Driver tab, both the "Driver Provider" and the "Digital Signer"
  fields are "Red Hat, Inc."

This driver comes from "qxlwddm-0.1-12" (buildID=449635), in Brew.

In retrospect it looks like this driver was meant for Windows 8 only,
but it happened to install under, and work OK for, Windows 10 too.

> Does your guest run with secure boot?

Yes, it does. (Double-checked it with "confirm-SecureBootUEFI" in
PowerShell.)

> I do not see such an effect with 'Sleep' with latest qemu master +
> OVMF + qxl + Win10, the sleep button does not disappear.

I'm happy to try other driver versions. Hopefully Windows 10 will
actually see them as upgrading the currently installed driver. (Or
should I uninstall first?)

Thanks!
Laszlo
Yuri Benditovich March 5, 2020, 7:09 p.m. UTC | #6
----- Original Message -----

> From: "Laszlo Ersek" <lersek@redhat.com>
> To: "Yuri Benditovich" <ybendito@redhat.com>
> Cc: "Gerd Hoffmann" <kraxel@redhat.com>, qemu-devel@nongnu.org, "Eduardo
> Habkost" <ehabkost@redhat.com>, "Yan Vugenfirer" <yvugenfi@redhat.com>
> Sent: Thursday, March 5, 2020 5:01:24 PM
> Subject: Re: [PULL 1/1] qxl: introduce hardware revision 5

> On 03/05/20 08:57, Yuri Benditovich wrote:
> > ----- Original Message -----
> >
> >> From: "Laszlo Ersek" <lersek@redhat.com>
> >> To: "Gerd Hoffmann" <kraxel@redhat.com>
> >> Cc: qemu-devel@nongnu.org, "Eduardo Habkost" <ehabkost@redhat.com>,
> >> "Yuri Benditovich" <ybendito@redhat.com>, "Yan Vugenfirer"
> >> <yvugenfi@redhat.com>
> >> Sent: Thursday, March 5, 2020 1:28:23 AM
> >> Subject: Re: [PULL 1/1] qxl: introduce hardware revision 5
> >
> >> this patch -- commit ed71c09ffd6f -- disables ACPI S3 in the Windows
> >> 10 guest for me, using OVMF and QXL.
> >
> >> The "Sleep" menu entry disappears from the power button icon/menu at
> >> the login screen, and "psshutdown -d -t 3" (from the pstools package)
> >> also stops working (it reports that the computer does not support
> >> S3).
> >
> >> At the parent commit (e18e5501d8ac), S3 suspend/resume works.
> >

> [...]

> >> OVMF is built at current edk2 master: e63d54db9526.
> >
> >> In the Windows 10 guest, the installed driver has the following
> >> properties (per Device Manager):
> >
> >> - driver date: 7/28/2015
> >> - driver version: 22.33.46.473

> > This is not what I would expect from any qxl driver for Win10
> > What is the name of display adapter?

> "Red Hat QXL controller"

> > The driver provider is 'Red Hat'?

> In the "Red Hat QXL controller Properties" dialog:

> - on the General tab, Manufacturer is "Red Hat, Inc."

> - on the Driver tab, both the "Driver Provider" and the "Digital Signer"
> fields are "Red Hat, Inc."

> This driver comes from "qxlwddm-0.1-12" (buildID=449635), in Brew.

> In retrospect it looks like this driver was meant for Windows 8 only,
> but it happened to install under, and work OK for, Windows 10 too.

> > Does your guest run with secure boot?

> Yes, it does. (Double-checked it with "confirm-SecureBootUEFI" in
> PowerShell.)

> > I do not see such an effect with 'Sleep' with latest qemu master +
> > OVMF + qxl + Win10, the sleep button does not disappear.

> I'm happy to try other driver versions. Hopefully Windows 10 will
> actually see them as upgrading the currently installed driver. (Or
> should I uninstall first?)
This is the latest release 
https://www.spice-space.org/download/windows/qxl-wddm-dod/qxl-wddm-dod-0.19/ 

> Thanks!
> Laszlo
Laszlo Ersek March 5, 2020, 10:42 p.m. UTC | #7
On 03/05/20 20:09, Yuri Benditovich wrote:

> This is the latest release 
> https://www.spice-space.org/download/windows/qxl-wddm-dod/qxl-wddm-dod-0.19/ 

"spice-qxl-wddm-dod-0.19-8.1-compatible.zip" solved the issue in my
Windows 8.1 and Windows Server 2012 R2 guests.

"spice-qxl-wddm-dod-0.19.zip" solved the issue in my Windows 10 guest.

The driver updates were painless.

Thanks!
Laszlo

Patch
diff mbox series

diff --git a/hw/display/qxl.h b/hw/display/qxl.h
index 80eb0d267269..707631a1f573 100644
--- a/hw/display/qxl.h
+++ b/hw/display/qxl.h
@@ -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);
diff --git a/hw/core/machine.c b/hw/core/machine.c
index d8e30e4895d8..84812a1d1cc1 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -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);
 
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
index c33b1915a52c..64884da70857 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);