Message ID | 20220831095914.2041-7-shentey@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Instantiate VT82xx functions in host device | expand |
On Wed, 31 Aug 2022, Bernhard Beschow wrote: > The USB functions can be enabled/disabled through the ISA function. Also > its interrupt routing can be influenced there. > > Signed-off-by: Bernhard Beschow <shentey@gmail.com> > --- > hw/isa/vt82c686.c | 12 ++++++++++++ > hw/mips/fuloong2e.c | 3 --- > hw/ppc/pegasos2.c | 4 ---- > 3 files changed, 12 insertions(+), 7 deletions(-) > > diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c > index 9d946cea54..66a4b9c230 100644 > --- a/hw/isa/vt82c686.c > +++ b/hw/isa/vt82c686.c > @@ -23,6 +23,7 @@ > #include "hw/intc/i8259.h" > #include "hw/irq.h" > #include "hw/dma/i8257.h" > +#include "hw/usb/hcd-uhci.h" > #include "hw/timer/i8254.h" > #include "hw/rtc/mc146818rtc.h" > #include "migration/vmstate.h" > @@ -546,6 +547,7 @@ struct ViaISAState { > qemu_irq *isa_irqs; > ViaSuperIOState via_sio; > PCIIDEState ide; > + UHCIState uhci[2]; > }; > > static const VMStateDescription vmstate_via = { > @@ -563,6 +565,8 @@ static void via_isa_init(Object *obj) > ViaISAState *s = VIA_ISA(obj); > > object_initialize_child(obj, "ide", &s->ide, "via-ide"); > + object_initialize_child(obj, "uhci1", &s->uhci[0], "vt82c686b-usb-uhci"); > + object_initialize_child(obj, "uhci2", &s->uhci[1], "vt82c686b-usb-uhci"); Sorry for not saying this yesterday, this can also be done separately so no need for another version of this series if not needed for another reason but could we add a define for vt82c686b-usb-uhci in include/hw/isa/vt82c686.h and use that here and in hw/usb/vt82c686-uhci-pci.c ? Regards, BALATON Zoltan > } > > static const TypeInfo via_isa_info = { > @@ -629,6 +633,14 @@ static void via_isa_realize(PCIDevice *d, Error **errp) > if (!qdev_realize(DEVICE(&s->ide), BUS(pci_bus), errp)) { > return; > } > + > + /* Functions 2-3: USB Ports */ > + for (i = 0; i < ARRAY_SIZE(s->uhci); i++) { > + qdev_prop_set_int32(DEVICE(&s->uhci[i]), "addr", d->devfn + 2 + i); > + if (!qdev_realize(DEVICE(&s->uhci[i]), BUS(pci_bus), errp)) { > + return; > + } > + } > } > > /* TYPE_VT82C686B_ISA */ > diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c > index 32605901e7..dc92223b76 100644 > --- a/hw/mips/fuloong2e.c > +++ b/hw/mips/fuloong2e.c > @@ -208,9 +208,6 @@ static void vt82c686b_southbridge_init(PCIBus *pci_bus, int slot, qemu_irq intc, > dev = PCI_DEVICE(object_resolve_path_component(OBJECT(via), "ide")); > pci_ide_create_devs(dev); > > - pci_create_simple(pci_bus, PCI_DEVFN(slot, 2), "vt82c686b-usb-uhci"); > - pci_create_simple(pci_bus, PCI_DEVFN(slot, 3), "vt82c686b-usb-uhci"); > - > dev = pci_create_simple(pci_bus, PCI_DEVFN(slot, 4), TYPE_VT82C686B_PM); > *i2c_bus = I2C_BUS(qdev_get_child_bus(DEVICE(dev), "i2c")); > > diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c > index 8bc528a560..85cca6f7a6 100644 > --- a/hw/ppc/pegasos2.c > +++ b/hw/ppc/pegasos2.c > @@ -168,10 +168,6 @@ static void pegasos2_init(MachineState *machine) > dev = PCI_DEVICE(object_resolve_path_component(OBJECT(via), "ide")); > pci_ide_create_devs(dev); > > - /* VT8231 function 2-3: USB Ports */ > - pci_create_simple(pci_bus, PCI_DEVFN(12, 2), "vt82c686b-usb-uhci"); > - pci_create_simple(pci_bus, PCI_DEVFN(12, 3), "vt82c686b-usb-uhci"); > - > /* VT8231 function 4: Power Management Controller */ > dev = pci_create_simple(pci_bus, PCI_DEVFN(12, 4), TYPE_VT8231_PM); > i2c_bus = I2C_BUS(qdev_get_child_bus(DEVICE(dev), "i2c")); >
Am 31. August 2022 15:23:37 MESZ schrieb BALATON Zoltan <balaton@eik.bme.hu>: >On Wed, 31 Aug 2022, Bernhard Beschow wrote: >> The USB functions can be enabled/disabled through the ISA function. Also >> its interrupt routing can be influenced there. >> >> Signed-off-by: Bernhard Beschow <shentey@gmail.com> >> --- >> hw/isa/vt82c686.c | 12 ++++++++++++ >> hw/mips/fuloong2e.c | 3 --- >> hw/ppc/pegasos2.c | 4 ---- >> 3 files changed, 12 insertions(+), 7 deletions(-) >> >> diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c >> index 9d946cea54..66a4b9c230 100644 >> --- a/hw/isa/vt82c686.c >> +++ b/hw/isa/vt82c686.c >> @@ -23,6 +23,7 @@ >> #include "hw/intc/i8259.h" >> #include "hw/irq.h" >> #include "hw/dma/i8257.h" >> +#include "hw/usb/hcd-uhci.h" >> #include "hw/timer/i8254.h" >> #include "hw/rtc/mc146818rtc.h" >> #include "migration/vmstate.h" >> @@ -546,6 +547,7 @@ struct ViaISAState { >> qemu_irq *isa_irqs; >> ViaSuperIOState via_sio; >> PCIIDEState ide; >> + UHCIState uhci[2]; >> }; >> >> static const VMStateDescription vmstate_via = { >> @@ -563,6 +565,8 @@ static void via_isa_init(Object *obj) >> ViaISAState *s = VIA_ISA(obj); >> >> object_initialize_child(obj, "ide", &s->ide, "via-ide"); >> + object_initialize_child(obj, "uhci1", &s->uhci[0], "vt82c686b-usb-uhci"); >> + object_initialize_child(obj, "uhci2", &s->uhci[1], "vt82c686b-usb-uhci"); > >Sorry for not saying this yesterday, this can also be done separately so no need for another version of this series if not needed for another reason but could we add a define for vt82c686b-usb-uhci in include/hw/isa/vt82c686.h and use that here and in hw/usb/vt82c686-uhci-pci.c ? Would creating a dedicated header work, too? Board code doesn't need to see the define any longer. Regards, Bernhard > >Regards, >BALATON Zoltan > >> } >> >> static const TypeInfo via_isa_info = { >> @@ -629,6 +633,14 @@ static void via_isa_realize(PCIDevice *d, Error **errp) >> if (!qdev_realize(DEVICE(&s->ide), BUS(pci_bus), errp)) { >> return; >> } >> + >> + /* Functions 2-3: USB Ports */ >> + for (i = 0; i < ARRAY_SIZE(s->uhci); i++) { >> + qdev_prop_set_int32(DEVICE(&s->uhci[i]), "addr", d->devfn + 2 + i); >> + if (!qdev_realize(DEVICE(&s->uhci[i]), BUS(pci_bus), errp)) { >> + return; >> + } >> + } >> } >> >> /* TYPE_VT82C686B_ISA */ >> diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c >> index 32605901e7..dc92223b76 100644 >> --- a/hw/mips/fuloong2e.c >> +++ b/hw/mips/fuloong2e.c >> @@ -208,9 +208,6 @@ static void vt82c686b_southbridge_init(PCIBus *pci_bus, int slot, qemu_irq intc, >> dev = PCI_DEVICE(object_resolve_path_component(OBJECT(via), "ide")); >> pci_ide_create_devs(dev); >> >> - pci_create_simple(pci_bus, PCI_DEVFN(slot, 2), "vt82c686b-usb-uhci"); >> - pci_create_simple(pci_bus, PCI_DEVFN(slot, 3), "vt82c686b-usb-uhci"); >> - >> dev = pci_create_simple(pci_bus, PCI_DEVFN(slot, 4), TYPE_VT82C686B_PM); >> *i2c_bus = I2C_BUS(qdev_get_child_bus(DEVICE(dev), "i2c")); >> >> diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c >> index 8bc528a560..85cca6f7a6 100644 >> --- a/hw/ppc/pegasos2.c >> +++ b/hw/ppc/pegasos2.c >> @@ -168,10 +168,6 @@ static void pegasos2_init(MachineState *machine) >> dev = PCI_DEVICE(object_resolve_path_component(OBJECT(via), "ide")); >> pci_ide_create_devs(dev); >> >> - /* VT8231 function 2-3: USB Ports */ >> - pci_create_simple(pci_bus, PCI_DEVFN(12, 2), "vt82c686b-usb-uhci"); >> - pci_create_simple(pci_bus, PCI_DEVFN(12, 3), "vt82c686b-usb-uhci"); >> - >> /* VT8231 function 4: Power Management Controller */ >> dev = pci_create_simple(pci_bus, PCI_DEVFN(12, 4), TYPE_VT8231_PM); >> i2c_bus = I2C_BUS(qdev_get_child_bus(DEVICE(dev), "i2c")); >>
On Wed, 31 Aug 2022, BB wrote: > Am 31. August 2022 15:23:37 MESZ schrieb BALATON Zoltan <balaton@eik.bme.hu>: >> On Wed, 31 Aug 2022, Bernhard Beschow wrote: >>> The USB functions can be enabled/disabled through the ISA function. Also >>> its interrupt routing can be influenced there. >>> >>> Signed-off-by: Bernhard Beschow <shentey@gmail.com> >>> --- >>> hw/isa/vt82c686.c | 12 ++++++++++++ >>> hw/mips/fuloong2e.c | 3 --- >>> hw/ppc/pegasos2.c | 4 ---- >>> 3 files changed, 12 insertions(+), 7 deletions(-) >>> >>> diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c >>> index 9d946cea54..66a4b9c230 100644 >>> --- a/hw/isa/vt82c686.c >>> +++ b/hw/isa/vt82c686.c >>> @@ -23,6 +23,7 @@ >>> #include "hw/intc/i8259.h" >>> #include "hw/irq.h" >>> #include "hw/dma/i8257.h" >>> +#include "hw/usb/hcd-uhci.h" >>> #include "hw/timer/i8254.h" >>> #include "hw/rtc/mc146818rtc.h" >>> #include "migration/vmstate.h" >>> @@ -546,6 +547,7 @@ struct ViaISAState { >>> qemu_irq *isa_irqs; >>> ViaSuperIOState via_sio; >>> PCIIDEState ide; >>> + UHCIState uhci[2]; >>> }; >>> >>> static const VMStateDescription vmstate_via = { >>> @@ -563,6 +565,8 @@ static void via_isa_init(Object *obj) >>> ViaISAState *s = VIA_ISA(obj); >>> >>> object_initialize_child(obj, "ide", &s->ide, "via-ide"); >>> + object_initialize_child(obj, "uhci1", &s->uhci[0], "vt82c686b-usb-uhci"); >>> + object_initialize_child(obj, "uhci2", &s->uhci[1], "vt82c686b-usb-uhci"); >> >> Sorry for not saying this yesterday, this can also be done separately >> so no need for another version of this series if not needed for another >> reason but could we add a define for vt82c686b-usb-uhci in >> include/hw/isa/vt82c686.h and use that here and in >> hw/usb/vt82c686-uhci-pci.c ? > > Would creating a dedicated header work, too? Board code doesn't need to see the define any longer. I don't think it needs a separate header just for this so I'd put it in vt82c686.h but I don't mind either way. Regards, BALATON Zoltan
Am 31. August 2022 17:03:35 MESZ schrieb BALATON Zoltan <balaton@eik.bme.hu>: >On Wed, 31 Aug 2022, BB wrote: >> Am 31. August 2022 15:23:37 MESZ schrieb BALATON Zoltan <balaton@eik.bme.hu>: >>> On Wed, 31 Aug 2022, Bernhard Beschow wrote: >>>> The USB functions can be enabled/disabled through the ISA function. Also >>>> its interrupt routing can be influenced there. >>>> >>>> Signed-off-by: Bernhard Beschow <shentey@gmail.com> >>>> --- >>>> hw/isa/vt82c686.c | 12 ++++++++++++ >>>> hw/mips/fuloong2e.c | 3 --- >>>> hw/ppc/pegasos2.c | 4 ---- >>>> 3 files changed, 12 insertions(+), 7 deletions(-) >>>> >>>> diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c >>>> index 9d946cea54..66a4b9c230 100644 >>>> --- a/hw/isa/vt82c686.c >>>> +++ b/hw/isa/vt82c686.c >>>> @@ -23,6 +23,7 @@ >>>> #include "hw/intc/i8259.h" >>>> #include "hw/irq.h" >>>> #include "hw/dma/i8257.h" >>>> +#include "hw/usb/hcd-uhci.h" >>>> #include "hw/timer/i8254.h" >>>> #include "hw/rtc/mc146818rtc.h" >>>> #include "migration/vmstate.h" >>>> @@ -546,6 +547,7 @@ struct ViaISAState { >>>> qemu_irq *isa_irqs; >>>> ViaSuperIOState via_sio; >>>> PCIIDEState ide; >>>> + UHCIState uhci[2]; >>>> }; >>>> >>>> static const VMStateDescription vmstate_via = { >>>> @@ -563,6 +565,8 @@ static void via_isa_init(Object *obj) >>>> ViaISAState *s = VIA_ISA(obj); >>>> >>>> object_initialize_child(obj, "ide", &s->ide, "via-ide"); >>>> + object_initialize_child(obj, "uhci1", &s->uhci[0], "vt82c686b-usb-uhci"); >>>> + object_initialize_child(obj, "uhci2", &s->uhci[1], "vt82c686b-usb-uhci"); >>> >>> Sorry for not saying this yesterday, this can also be done separately so no need for another version of this series if not needed for another reason but could we add a define for vt82c686b-usb-uhci in include/hw/isa/vt82c686.h and use that here and in hw/usb/vt82c686-uhci-pci.c ? >> >> Would creating a dedicated header work, too? Board code doesn't need to see the define any longer. > >I don't think it needs a separate header just for this so I'd put it in vt82c686.h but I don't mind either way. Alright, I'll take the easy route for now. Splitting in dedicated headers (also for the other devices) could be done in a separate series. Regards, Bernhard > >Regards, >BALATON Zoltan
On Wed, 31 Aug 2022, BB wrote: > Am 31. August 2022 17:03:35 MESZ schrieb BALATON Zoltan <balaton@eik.bme.hu>: >> On Wed, 31 Aug 2022, BB wrote: >>> Am 31. August 2022 15:23:37 MESZ schrieb BALATON Zoltan <balaton@eik.bme.hu>: >>>> On Wed, 31 Aug 2022, Bernhard Beschow wrote: >>>>> The USB functions can be enabled/disabled through the ISA function. Also >>>>> its interrupt routing can be influenced there. >>>>> >>>>> Signed-off-by: Bernhard Beschow <shentey@gmail.com> >>>>> --- >>>>> hw/isa/vt82c686.c | 12 ++++++++++++ >>>>> hw/mips/fuloong2e.c | 3 --- >>>>> hw/ppc/pegasos2.c | 4 ---- >>>>> 3 files changed, 12 insertions(+), 7 deletions(-) >>>>> >>>>> diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c >>>>> index 9d946cea54..66a4b9c230 100644 >>>>> --- a/hw/isa/vt82c686.c >>>>> +++ b/hw/isa/vt82c686.c >>>>> @@ -23,6 +23,7 @@ >>>>> #include "hw/intc/i8259.h" >>>>> #include "hw/irq.h" >>>>> #include "hw/dma/i8257.h" >>>>> +#include "hw/usb/hcd-uhci.h" >>>>> #include "hw/timer/i8254.h" >>>>> #include "hw/rtc/mc146818rtc.h" >>>>> #include "migration/vmstate.h" >>>>> @@ -546,6 +547,7 @@ struct ViaISAState { >>>>> qemu_irq *isa_irqs; >>>>> ViaSuperIOState via_sio; >>>>> PCIIDEState ide; >>>>> + UHCIState uhci[2]; >>>>> }; >>>>> >>>>> static const VMStateDescription vmstate_via = { >>>>> @@ -563,6 +565,8 @@ static void via_isa_init(Object *obj) >>>>> ViaISAState *s = VIA_ISA(obj); >>>>> >>>>> object_initialize_child(obj, "ide", &s->ide, "via-ide"); >>>>> + object_initialize_child(obj, "uhci1", &s->uhci[0], "vt82c686b-usb-uhci"); >>>>> + object_initialize_child(obj, "uhci2", &s->uhci[1], "vt82c686b-usb-uhci"); >>>> >>>> Sorry for not saying this yesterday, this can also be done separately so no need for another version of this series if not needed for another reason but could we add a define for vt82c686b-usb-uhci in include/hw/isa/vt82c686.h and use that here and in hw/usb/vt82c686-uhci-pci.c ? >>> >>> Would creating a dedicated header work, too? Board code doesn't need to see the define any longer. >> >> I don't think it needs a separate header just for this so I'd put it in vt82c686.h but I don't mind either way. > > Alright, I'll take the easy route for now. Splitting in dedicated headers (also for the other devices) could be done in a separate series. I'll do this for via-ac97 when rabasing my WIP patch: https://osdn.net/projects/qmiga/scm/git/qemu/commits as I'll need to move ViaAC97State there too for embedding in ViaISAState. The other ones can stay in vt82c686.h I think. (The reason this is still WIP is that it does not work and I'm not sure why, Maybe I need to test with a Linux guest to find out more but I haven't got to that yet.) Regards, BALATON Zoltan
On Wed, Aug 31, 2022 at 6:02 PM BALATON Zoltan <balaton@eik.bme.hu> wrote: > On Wed, 31 Aug 2022, BB wrote: > > Am 31. August 2022 17:03:35 MESZ schrieb BALATON Zoltan < > balaton@eik.bme.hu>: > >> On Wed, 31 Aug 2022, BB wrote: > >>> Am 31. August 2022 15:23:37 MESZ schrieb BALATON Zoltan < > balaton@eik.bme.hu>: > >>>> On Wed, 31 Aug 2022, Bernhard Beschow wrote: > >>>>> The USB functions can be enabled/disabled through the ISA function. > Also > >>>>> its interrupt routing can be influenced there. > >>>>> > >>>>> Signed-off-by: Bernhard Beschow <shentey@gmail.com> > >>>>> --- > >>>>> hw/isa/vt82c686.c | 12 ++++++++++++ > >>>>> hw/mips/fuloong2e.c | 3 --- > >>>>> hw/ppc/pegasos2.c | 4 ---- > >>>>> 3 files changed, 12 insertions(+), 7 deletions(-) > >>>>> > >>>>> diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c > >>>>> index 9d946cea54..66a4b9c230 100644 > >>>>> --- a/hw/isa/vt82c686.c > >>>>> +++ b/hw/isa/vt82c686.c > >>>>> @@ -23,6 +23,7 @@ > >>>>> #include "hw/intc/i8259.h" > >>>>> #include "hw/irq.h" > >>>>> #include "hw/dma/i8257.h" > >>>>> +#include "hw/usb/hcd-uhci.h" > >>>>> #include "hw/timer/i8254.h" > >>>>> #include "hw/rtc/mc146818rtc.h" > >>>>> #include "migration/vmstate.h" > >>>>> @@ -546,6 +547,7 @@ struct ViaISAState { > >>>>> qemu_irq *isa_irqs; > >>>>> ViaSuperIOState via_sio; > >>>>> PCIIDEState ide; > >>>>> + UHCIState uhci[2]; > >>>>> }; > >>>>> > >>>>> static const VMStateDescription vmstate_via = { > >>>>> @@ -563,6 +565,8 @@ static void via_isa_init(Object *obj) > >>>>> ViaISAState *s = VIA_ISA(obj); > >>>>> > >>>>> object_initialize_child(obj, "ide", &s->ide, "via-ide"); > >>>>> + object_initialize_child(obj, "uhci1", &s->uhci[0], > "vt82c686b-usb-uhci"); > >>>>> + object_initialize_child(obj, "uhci2", &s->uhci[1], > "vt82c686b-usb-uhci"); > >>>> > >>>> Sorry for not saying this yesterday, this can also be done separately > so no need for another version of this series if not needed for another > reason but could we add a define for vt82c686b-usb-uhci in > include/hw/isa/vt82c686.h and use that here and in > hw/usb/vt82c686-uhci-pci.c ? > >>> > >>> Would creating a dedicated header work, too? Board code doesn't need > to see the define any longer. > >> > >> I don't think it needs a separate header just for this so I'd put it in > vt82c686.h but I don't mind either way. > > > > Alright, I'll take the easy route for now. Splitting in dedicated > headers (also for the other devices) could be done in a separate series. > > I'll do this for via-ac97 when rabasing my WIP patch: > > https://osdn.net/projects/qmiga/scm/git/qemu/commits > > as I'll need to move ViaAC97State there too for embedding in ViaISAState. > The other ones > can stay in vt82c686.h I think. > > (The reason this is still WIP is that it does not work and I'm not sure > why, Maybe I need to test with a Linux guest to find out more but I > haven't got to that yet.) > Hi Zoltan, I've given your AC97 patches a spin on top of my WIP pc-via branch with a Mandriva Linux live CD and *drumroll* `qemu-system-x86_64 -M pc -accel kvm -cpu host`: https://github.com/shentok/qemu/commits/pc-via The good news is that the sound controls appeared in the UI but no sound seemed to be played, though that could also be due to my setup (nested virtualization). Perhaps you find it convenient to test with Linux that way. Best regards, Bernhard > > Regards, > BALATON Zoltan >
On Thu, 1 Sep 2022, Bernhard Beschow wrote: > On Wed, Aug 31, 2022 at 6:02 PM BALATON Zoltan <balaton@eik.bme.hu> wrote: >> On Wed, 31 Aug 2022, BB wrote: >>> Am 31. August 2022 17:03:35 MESZ schrieb BALATON Zoltan < >> balaton@eik.bme.hu>: >>>> On Wed, 31 Aug 2022, BB wrote: >>>>> Am 31. August 2022 15:23:37 MESZ schrieb BALATON Zoltan < >> balaton@eik.bme.hu>: >>>>>> On Wed, 31 Aug 2022, Bernhard Beschow wrote: >>>>>>> The USB functions can be enabled/disabled through the ISA function. >> Also >>>>>>> its interrupt routing can be influenced there. >>>>>>> >>>>>>> Signed-off-by: Bernhard Beschow <shentey@gmail.com> >>>>>>> --- >>>>>>> hw/isa/vt82c686.c | 12 ++++++++++++ >>>>>>> hw/mips/fuloong2e.c | 3 --- >>>>>>> hw/ppc/pegasos2.c | 4 ---- >>>>>>> 3 files changed, 12 insertions(+), 7 deletions(-) >>>>>>> >>>>>>> diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c >>>>>>> index 9d946cea54..66a4b9c230 100644 >>>>>>> --- a/hw/isa/vt82c686.c >>>>>>> +++ b/hw/isa/vt82c686.c >>>>>>> @@ -23,6 +23,7 @@ >>>>>>> #include "hw/intc/i8259.h" >>>>>>> #include "hw/irq.h" >>>>>>> #include "hw/dma/i8257.h" >>>>>>> +#include "hw/usb/hcd-uhci.h" >>>>>>> #include "hw/timer/i8254.h" >>>>>>> #include "hw/rtc/mc146818rtc.h" >>>>>>> #include "migration/vmstate.h" >>>>>>> @@ -546,6 +547,7 @@ struct ViaISAState { >>>>>>> qemu_irq *isa_irqs; >>>>>>> ViaSuperIOState via_sio; >>>>>>> PCIIDEState ide; >>>>>>> + UHCIState uhci[2]; >>>>>>> }; >>>>>>> >>>>>>> static const VMStateDescription vmstate_via = { >>>>>>> @@ -563,6 +565,8 @@ static void via_isa_init(Object *obj) >>>>>>> ViaISAState *s = VIA_ISA(obj); >>>>>>> >>>>>>> object_initialize_child(obj, "ide", &s->ide, "via-ide"); >>>>>>> + object_initialize_child(obj, "uhci1", &s->uhci[0], >> "vt82c686b-usb-uhci"); >>>>>>> + object_initialize_child(obj, "uhci2", &s->uhci[1], >> "vt82c686b-usb-uhci"); >>>>>> >>>>>> Sorry for not saying this yesterday, this can also be done separately >> so no need for another version of this series if not needed for another >> reason but could we add a define for vt82c686b-usb-uhci in >> include/hw/isa/vt82c686.h and use that here and in >> hw/usb/vt82c686-uhci-pci.c ? >>>>> >>>>> Would creating a dedicated header work, too? Board code doesn't need >> to see the define any longer. >>>> >>>> I don't think it needs a separate header just for this so I'd put it in >> vt82c686.h but I don't mind either way. >>> >>> Alright, I'll take the easy route for now. Splitting in dedicated >> headers (also for the other devices) could be done in a separate series. >> >> I'll do this for via-ac97 when rabasing my WIP patch: >> >> https://osdn.net/projects/qmiga/scm/git/qemu/commits >> >> as I'll need to move ViaAC97State there too for embedding in ViaISAState. >> The other ones >> can stay in vt82c686.h I think. >> >> (The reason this is still WIP is that it does not work and I'm not sure >> why, Maybe I need to test with a Linux guest to find out more but I >> haven't got to that yet.) >> > > Hi Zoltan, > > I've given your AC97 patches a spin on top of my WIP pc-via branch with a > Mandriva Linux live CD and *drumroll* `qemu-system-x86_64 -M pc -accel kvm > -cpu host`: > > https://github.com/shentok/qemu/commits/pc-via Interesting, now I see where this goes beyond just clean up. > The good news is that the sound controls appeared in the UI but no sound > seemed to be played, though that could also be due to my setup (nested > virtualization). Consodering that I get the same result with MorphOS on pegasos2 it's more likely some problem with the emulation than your setup but I could not yet find out what (I didn't try hard enough either). Probably I'm missing something in how sound emulation in QEMU should work or how the via sound function should work. The docs have detailed info in the regs but not much on what actually should happen, when irq should be raised and such. > Perhaps you find it convenient to test with Linux that way. Definitly, it's easier to find an x86 live CD with support for this chip than one for pegasos2. But I may wait a while before I get back to this. Regards, BALATON Zoltan
diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index 9d946cea54..66a4b9c230 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -23,6 +23,7 @@ #include "hw/intc/i8259.h" #include "hw/irq.h" #include "hw/dma/i8257.h" +#include "hw/usb/hcd-uhci.h" #include "hw/timer/i8254.h" #include "hw/rtc/mc146818rtc.h" #include "migration/vmstate.h" @@ -546,6 +547,7 @@ struct ViaISAState { qemu_irq *isa_irqs; ViaSuperIOState via_sio; PCIIDEState ide; + UHCIState uhci[2]; }; static const VMStateDescription vmstate_via = { @@ -563,6 +565,8 @@ static void via_isa_init(Object *obj) ViaISAState *s = VIA_ISA(obj); object_initialize_child(obj, "ide", &s->ide, "via-ide"); + object_initialize_child(obj, "uhci1", &s->uhci[0], "vt82c686b-usb-uhci"); + object_initialize_child(obj, "uhci2", &s->uhci[1], "vt82c686b-usb-uhci"); } static const TypeInfo via_isa_info = { @@ -629,6 +633,14 @@ static void via_isa_realize(PCIDevice *d, Error **errp) if (!qdev_realize(DEVICE(&s->ide), BUS(pci_bus), errp)) { return; } + + /* Functions 2-3: USB Ports */ + for (i = 0; i < ARRAY_SIZE(s->uhci); i++) { + qdev_prop_set_int32(DEVICE(&s->uhci[i]), "addr", d->devfn + 2 + i); + if (!qdev_realize(DEVICE(&s->uhci[i]), BUS(pci_bus), errp)) { + return; + } + } } /* TYPE_VT82C686B_ISA */ diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c index 32605901e7..dc92223b76 100644 --- a/hw/mips/fuloong2e.c +++ b/hw/mips/fuloong2e.c @@ -208,9 +208,6 @@ static void vt82c686b_southbridge_init(PCIBus *pci_bus, int slot, qemu_irq intc, dev = PCI_DEVICE(object_resolve_path_component(OBJECT(via), "ide")); pci_ide_create_devs(dev); - pci_create_simple(pci_bus, PCI_DEVFN(slot, 2), "vt82c686b-usb-uhci"); - pci_create_simple(pci_bus, PCI_DEVFN(slot, 3), "vt82c686b-usb-uhci"); - dev = pci_create_simple(pci_bus, PCI_DEVFN(slot, 4), TYPE_VT82C686B_PM); *i2c_bus = I2C_BUS(qdev_get_child_bus(DEVICE(dev), "i2c")); diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c index 8bc528a560..85cca6f7a6 100644 --- a/hw/ppc/pegasos2.c +++ b/hw/ppc/pegasos2.c @@ -168,10 +168,6 @@ static void pegasos2_init(MachineState *machine) dev = PCI_DEVICE(object_resolve_path_component(OBJECT(via), "ide")); pci_ide_create_devs(dev); - /* VT8231 function 2-3: USB Ports */ - pci_create_simple(pci_bus, PCI_DEVFN(12, 2), "vt82c686b-usb-uhci"); - pci_create_simple(pci_bus, PCI_DEVFN(12, 3), "vt82c686b-usb-uhci"); - /* VT8231 function 4: Power Management Controller */ dev = pci_create_simple(pci_bus, PCI_DEVFN(12, 4), TYPE_VT8231_PM); i2c_bus = I2C_BUS(qdev_get_child_bus(DEVICE(dev), "i2c"));
The USB functions can be enabled/disabled through the ISA function. Also its interrupt routing can be influenced there. Signed-off-by: Bernhard Beschow <shentey@gmail.com> --- hw/isa/vt82c686.c | 12 ++++++++++++ hw/mips/fuloong2e.c | 3 --- hw/ppc/pegasos2.c | 4 ---- 3 files changed, 12 insertions(+), 7 deletions(-)