diff mbox

[2/2] ac97: don't override the pci subsystem id

Message ID 1320679989-8274-2-git-send-email-kraxel@redhat.com
State New
Headers show

Commit Message

Gerd Hoffmann Nov. 7, 2011, 3:33 p.m. UTC
This patch removes the code lines which set the subsystem id for the
emulated ac97 card to 8086:0000.  Due to the device id being zero the
subsystem id isn't vaild anyway.  With the patch applied the sound card
gets the default qemu subsystem id (1af4:1100) instead.

[ v2: old & broken id is maintained for -M pc-$oldqemuversion ]

Cc: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/ac97.c    |   16 +++++++++++-----
 hw/pc_piix.c |   16 ++++++++++++++++
 2 files changed, 27 insertions(+), 5 deletions(-)

Comments

Anthony Liguori Nov. 7, 2011, 4 p.m. UTC | #1
On 11/07/2011 09:33 AM, Gerd Hoffmann wrote:
> This patch removes the code lines which set the subsystem id for the
> emulated ac97 card to 8086:0000.  Due to the device id being zero the
> subsystem id isn't vaild anyway.  With the patch applied the sound card
> gets the default qemu subsystem id (1af4:1100) instead.

I don't like having a property of "use broken".

Wouldn't it be better to have the subsystem vendor and device id be 
configurable, set the default to the qemu subsystem ids, and then set it to 
8086:0000 for < 1.0?

Regards,

Anthony Liguori

>
> [ v2: old&  broken id is maintained for -M pc-$oldqemuversion ]
>
> Cc: Takashi Iwai<tiwai@suse.de>
> Signed-off-by: Gerd Hoffmann<kraxel@redhat.com>
> ---
>   hw/ac97.c    |   16 +++++++++++-----
>   hw/pc_piix.c |   16 ++++++++++++++++
>   2 files changed, 27 insertions(+), 5 deletions(-)
>
> diff --git a/hw/ac97.c b/hw/ac97.c
> index 6800af4..0dbba3b 100644
> --- a/hw/ac97.c
> +++ b/hw/ac97.c
> @@ -150,6 +150,7 @@ typedef struct AC97BusMasterRegs {
>   typedef struct AC97LinkState {
>       PCIDevice dev;
>       QEMUSoundCard card;
> +    uint32_t use_broken_id;
>       uint32_t glob_cnt;
>       uint32_t glob_sta;
>       uint32_t cas;
> @@ -1305,11 +1306,12 @@ static int ac97_initfn (PCIDevice *dev)
>       c[PCI_BASE_ADDRESS_0 + 6] = 0x00;
>       c[PCI_BASE_ADDRESS_0 + 7] = 0x00;
>
> -    c[PCI_SUBSYSTEM_VENDOR_ID] = 0x86;      /* svid subsystem vendor id rwo */
> -    c[PCI_SUBSYSTEM_VENDOR_ID + 1] = 0x80;
> -
> -    c[PCI_SUBSYSTEM_ID] = 0x00;      /* sid subsystem id rwo */
> -    c[PCI_SUBSYSTEM_ID + 1] = 0x00;
> +    if (s->use_broken_id) {
> +        c[PCI_SUBSYSTEM_VENDOR_ID] = 0x86;
> +        c[PCI_SUBSYSTEM_VENDOR_ID + 1] = 0x80;
> +        c[PCI_SUBSYSTEM_ID] = 0x00;
> +        c[PCI_SUBSYSTEM_ID + 1] = 0x00;
> +    }
>
>       c[PCI_INTERRUPT_LINE] = 0x00;      /* intr_ln interrupt line rw */
>       c[PCI_INTERRUPT_PIN] = 0x01;      /* intr_pn interrupt pin ro */
> @@ -1350,6 +1352,10 @@ static PCIDeviceInfo ac97_info = {
>       .device_id    = PCI_DEVICE_ID_INTEL_82801AA_5,
>       .revision     = 0x01,
>       .class_id     = PCI_CLASS_MULTIMEDIA_AUDIO,
> +    .qdev.props   = (Property[]) {
> +        DEFINE_PROP_UINT32("use_broken_id", AC97LinkState, use_broken_id, 0),
> +        DEFINE_PROP_END_OF_LIST(),
> +    }
>   };
>
>   static void ac97_register (void)
> diff --git a/hw/pc_piix.c b/hw/pc_piix.c
> index 93e40d0..27ea570 100644
> --- a/hw/pc_piix.c
> +++ b/hw/pc_piix.c
> @@ -347,6 +347,10 @@ static QEMUMachine pc_machine_v0_13 = {
>               .driver   = "virtio-net-pci",
>               .property = "event_idx",
>               .value    = "off",
> +        },{
> +            .driver   = "AC97",
> +            .property = "use_broken_id",
> +            .value    = stringify(1),
>           },
>           { /* end of list */ }
>       },
> @@ -390,6 +394,10 @@ static QEMUMachine pc_machine_v0_12 = {
>               .driver   = "virtio-net-pci",
>               .property = "event_idx",
>               .value    = "off",
> +        },{
> +            .driver   = "AC97",
> +            .property = "use_broken_id",
> +            .value    = stringify(1),
>           },
>           { /* end of list */ }
>       }
> @@ -441,6 +449,10 @@ static QEMUMachine pc_machine_v0_11 = {
>               .driver   = "virtio-net-pci",
>               .property = "event_idx",
>               .value    = "off",
> +        },{
> +            .driver   = "AC97",
> +            .property = "use_broken_id",
> +            .value    = stringify(1),
>           },
>           { /* end of list */ }
>       }
> @@ -504,6 +516,10 @@ static QEMUMachine pc_machine_v0_10 = {
>               .driver   = "virtio-net-pci",
>               .property = "event_idx",
>               .value    = "off",
> +        },{
> +            .driver   = "AC97",
> +            .property = "use_broken_id",
> +            .value    = stringify(1),
>           },
>           { /* end of list */ }
>       },
Gerd Hoffmann Nov. 8, 2011, 8:08 a.m. UTC | #2
On 11/07/11 17:00, Anthony Liguori wrote:
> On 11/07/2011 09:33 AM, Gerd Hoffmann wrote:
>> This patch removes the code lines which set the subsystem id for the
>> emulated ac97 card to 8086:0000.  Due to the device id being zero the
>> subsystem id isn't vaild anyway.  With the patch applied the sound card
>> gets the default qemu subsystem id (1af4:1100) instead.
> 
> I don't like having a property of "use broken".

Well, it *is* broken.
Suggestions for a better name?

> Wouldn't it be better to have the subsystem vendor and device id be
> configurable, set the default to the qemu subsystem ids, and then set it
> to 8086:0000 for < 1.0?

I don't want this being fully configurable just for the snake of
backward compatibility with old qemu versions.

cheers,
  Gerd
Avi Kivity Nov. 8, 2011, 10 a.m. UTC | #3
On 11/08/2011 10:08 AM, Gerd Hoffmann wrote:
> On 11/07/11 17:00, Anthony Liguori wrote:
> > On 11/07/2011 09:33 AM, Gerd Hoffmann wrote:
> >> This patch removes the code lines which set the subsystem id for the
> >> emulated ac97 card to 8086:0000.  Due to the device id being zero the
> >> subsystem id isn't vaild anyway.  With the patch applied the sound card
> >> gets the default qemu subsystem id (1af4:1100) instead.
> > 
> > I don't like having a property of "use broken".
>
> Well, it *is* broken.
> Suggestions for a better name?

correctness_challenged?
legacy?

> > Wouldn't it be better to have the subsystem vendor and device id be
> > configurable, set the default to the qemu subsystem ids, and then set it
> > to 8086:0000 for < 1.0?
>
> I don't want this being fully configurable just for the snake of
> backward compatibility with old qemu versions.

I imagine some downstreams will want to configure it, but if we ever do
that, it's not for 1.0.
Gerd Hoffmann Nov. 8, 2011, 10:18 a.m. UTC | #4
Hi,

>>> Wouldn't it be better to have the subsystem vendor and device id be
>>> configurable, set the default to the qemu subsystem ids, and then set it
>>> to 8086:0000 for < 1.0?
>>
>> I don't want this being fully configurable just for the snake of
>> backward compatibility with old qemu versions.
> 
> I imagine some downstreams will want to configure it, but if we ever do
> that, it's not for 1.0.

And for that it would make more sense to make the default qemu subsystem
id configurable, not the individual device IDs ...

cheers,
  Gerd
diff mbox

Patch

diff --git a/hw/ac97.c b/hw/ac97.c
index 6800af4..0dbba3b 100644
--- a/hw/ac97.c
+++ b/hw/ac97.c
@@ -150,6 +150,7 @@  typedef struct AC97BusMasterRegs {
 typedef struct AC97LinkState {
     PCIDevice dev;
     QEMUSoundCard card;
+    uint32_t use_broken_id;
     uint32_t glob_cnt;
     uint32_t glob_sta;
     uint32_t cas;
@@ -1305,11 +1306,12 @@  static int ac97_initfn (PCIDevice *dev)
     c[PCI_BASE_ADDRESS_0 + 6] = 0x00;
     c[PCI_BASE_ADDRESS_0 + 7] = 0x00;
 
-    c[PCI_SUBSYSTEM_VENDOR_ID] = 0x86;      /* svid subsystem vendor id rwo */
-    c[PCI_SUBSYSTEM_VENDOR_ID + 1] = 0x80;
-
-    c[PCI_SUBSYSTEM_ID] = 0x00;      /* sid subsystem id rwo */
-    c[PCI_SUBSYSTEM_ID + 1] = 0x00;
+    if (s->use_broken_id) {
+        c[PCI_SUBSYSTEM_VENDOR_ID] = 0x86;
+        c[PCI_SUBSYSTEM_VENDOR_ID + 1] = 0x80;
+        c[PCI_SUBSYSTEM_ID] = 0x00;
+        c[PCI_SUBSYSTEM_ID + 1] = 0x00;
+    }
 
     c[PCI_INTERRUPT_LINE] = 0x00;      /* intr_ln interrupt line rw */
     c[PCI_INTERRUPT_PIN] = 0x01;      /* intr_pn interrupt pin ro */
@@ -1350,6 +1352,10 @@  static PCIDeviceInfo ac97_info = {
     .device_id    = PCI_DEVICE_ID_INTEL_82801AA_5,
     .revision     = 0x01,
     .class_id     = PCI_CLASS_MULTIMEDIA_AUDIO,
+    .qdev.props   = (Property[]) {
+        DEFINE_PROP_UINT32("use_broken_id", AC97LinkState, use_broken_id, 0),
+        DEFINE_PROP_END_OF_LIST(),
+    }
 };
 
 static void ac97_register (void)
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 93e40d0..27ea570 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -347,6 +347,10 @@  static QEMUMachine pc_machine_v0_13 = {
             .driver   = "virtio-net-pci",
             .property = "event_idx",
             .value    = "off",
+        },{
+            .driver   = "AC97",
+            .property = "use_broken_id",
+            .value    = stringify(1),
         },
         { /* end of list */ }
     },
@@ -390,6 +394,10 @@  static QEMUMachine pc_machine_v0_12 = {
             .driver   = "virtio-net-pci",
             .property = "event_idx",
             .value    = "off",
+        },{
+            .driver   = "AC97",
+            .property = "use_broken_id",
+            .value    = stringify(1),
         },
         { /* end of list */ }
     }
@@ -441,6 +449,10 @@  static QEMUMachine pc_machine_v0_11 = {
             .driver   = "virtio-net-pci",
             .property = "event_idx",
             .value    = "off",
+        },{
+            .driver   = "AC97",
+            .property = "use_broken_id",
+            .value    = stringify(1),
         },
         { /* end of list */ }
     }
@@ -504,6 +516,10 @@  static QEMUMachine pc_machine_v0_10 = {
             .driver   = "virtio-net-pci",
             .property = "event_idx",
             .value    = "off",
+        },{
+            .driver   = "AC97",
+            .property = "use_broken_id",
+            .value    = stringify(1),
         },
         { /* end of list */ }
     },