[PATCH] hw/mips: Improve the default USB settings in the loongson3-virt machine

Thomas Huth posted 1 patch 1 year ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20230525064731.1854107-1-thuth@redhat.com
Maintainers: Huacai Chen <chenhuacai@kernel.org>, Jiaxun Yang <jiaxun.yang@flygoat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>
There is a newer version of this series
hw/mips/loongson3_virt.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
[PATCH] hw/mips: Improve the default USB settings in the loongson3-virt machine
Posted by Thomas Huth 1 year ago
It's possible to compile QEMU without the USB devices (e.g. when using
"--without-default-devices" as option for the "configure" script).
To be still able to run the loongson3-virt machine in default mode with
such a QEMU binary, we have to check here for the availability of the
devices first before instantiating them.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 The alternative would be to use a "#ifdef CONFIG_USB_OHCI_PCI" etc.
 ... not sure what is nicer ... what do you think?

 hw/mips/loongson3_virt.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
index 216812f660..a0afb17030 100644
--- a/hw/mips/loongson3_virt.c
+++ b/hw/mips/loongson3_virt.c
@@ -447,10 +447,14 @@ static inline void loongson3_virt_devices_init(MachineState *machine,
 
     pci_vga_init(pci_bus);
 
-    if (defaults_enabled()) {
+    if (defaults_enabled() && module_object_class_by_name("pci-ohci")) {
         pci_create_simple(pci_bus, -1, "pci-ohci");
-        usb_create_simple(usb_bus_find(-1), "usb-kbd");
-        usb_create_simple(usb_bus_find(-1), "usb-tablet");
+        if (module_object_class_by_name("usb-kbd")) {
+            usb_create_simple(usb_bus_find(-1), "usb-kbd");
+        }
+        if (module_object_class_by_name("usb-tablet")) {
+            usb_create_simple(usb_bus_find(-1), "usb-tablet");
+        }
     }
 
     for (i = 0; i < nb_nics; i++) {
-- 
2.31.1
Re: [PATCH] hw/mips: Improve the default USB settings in the loongson3-virt machine
Posted by Thomas Huth 1 year ago
On 25/05/2023 08.47, Thomas Huth wrote:
> It's possible to compile QEMU without the USB devices (e.g. when using
> "--without-default-devices" as option for the "configure" script).
> To be still able to run the loongson3-virt machine in default mode with
> such a QEMU binary, we have to check here for the availability of the
> devices first before instantiating them.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>   The alternative would be to use a "#ifdef CONFIG_USB_OHCI_PCI" etc.
>   ... not sure what is nicer ... what do you think?
> 
>   hw/mips/loongson3_virt.c | 10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
> index 216812f660..a0afb17030 100644
> --- a/hw/mips/loongson3_virt.c
> +++ b/hw/mips/loongson3_virt.c
> @@ -447,10 +447,14 @@ static inline void loongson3_virt_devices_init(MachineState *machine,
>   
>       pci_vga_init(pci_bus);
>   
> -    if (defaults_enabled()) {
> +    if (defaults_enabled() && module_object_class_by_name("pci-ohci")) {
>           pci_create_simple(pci_bus, -1, "pci-ohci");
> -        usb_create_simple(usb_bus_find(-1), "usb-kbd");
> -        usb_create_simple(usb_bus_find(-1), "usb-tablet");
> +        if (module_object_class_by_name("usb-kbd")) {
> +            usb_create_simple(usb_bus_find(-1), "usb-kbd");
> +        }
> +        if (module_object_class_by_name("usb-tablet")) {
> +            usb_create_simple(usb_bus_find(-1), "usb-tablet");
> +        }
>       }
>   
>       for (i = 0; i < nb_nics; i++) {

Friendly ping!

  Thomas
Re: [PATCH] hw/mips: Improve the default USB settings in the loongson3-virt machine
Posted by Michael Tokarev 1 year ago
07.06.2023 13:26, Thomas Huth wrote:
> On 25/05/2023 08.47, Thomas Huth wrote:
>> It's possible to compile QEMU without the USB devices (e.g. when using
>> "--without-default-devices" as option for the "configure" script).
>> To be still able to run the loongson3-virt machine in default mode with
>> such a QEMU binary, we have to check here for the availability of the
>> devices first before instantiating them.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>   The alternative would be to use a "#ifdef CONFIG_USB_OHCI_PCI" etc.
>>   ... not sure what is nicer ... what do you think?
>>
>>   hw/mips/loongson3_virt.c | 10 +++++++---
>>   1 file changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
>> index 216812f660..a0afb17030 100644
>> --- a/hw/mips/loongson3_virt.c
>> +++ b/hw/mips/loongson3_virt.c
>> @@ -447,10 +447,14 @@ static inline void loongson3_virt_devices_init(MachineState *machine,
>>       pci_vga_init(pci_bus);
>> -    if (defaults_enabled()) {
>> +    if (defaults_enabled() && module_object_class_by_name("pci-ohci")) {
>>           pci_create_simple(pci_bus, -1, "pci-ohci");
>> -        usb_create_simple(usb_bus_find(-1), "usb-kbd");
>> -        usb_create_simple(usb_bus_find(-1), "usb-tablet");
>> +        if (module_object_class_by_name("usb-kbd")) {
>> +            usb_create_simple(usb_bus_find(-1), "usb-kbd");
>> +        }
>> +        if (module_object_class_by_name("usb-tablet")) {
>> +            usb_create_simple(usb_bus_find(-1), "usb-tablet");
>> +        }

It looks like kbd/tablet don't need to have an if around, because
hw/usb/usb-hid.c is always compiled when CONFIG_USB is enabled,
and enabling CONFIG_USB_OHCI automatically selects CONFIG_USB.

I guess this whole code can be guarded by #if CONFIG_USB_OHCI..#endif,
instead of using runtime checking of device availability.

Notes:

Other places don't check if ohci or other usb controllers are available.

We have TYPE_PCI_OHCI #define which isn't used in places where pci-ohci
is requested, - probably need to move it to a common header (it is
defined in hw/usb/hcd-ohci-pci.c now).

roms/config.seabios-128k turns USB_OHCI off.

/mjt

Re: [PATCH] hw/mips: Improve the default USB settings in the loongson3-virt machine
Posted by Thomas Huth 12 months ago
On 08/06/2023 20.31, Michael Tokarev wrote:
> 07.06.2023 13:26, Thomas Huth wrote:
>> On 25/05/2023 08.47, Thomas Huth wrote:
>>> It's possible to compile QEMU without the USB devices (e.g. when using
>>> "--without-default-devices" as option for the "configure" script).
>>> To be still able to run the loongson3-virt machine in default mode with
>>> such a QEMU binary, we have to check here for the availability of the
>>> devices first before instantiating them.
>>>
>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>> ---
>>>   The alternative would be to use a "#ifdef CONFIG_USB_OHCI_PCI" etc.
>>>   ... not sure what is nicer ... what do you think?
>>>
>>>   hw/mips/loongson3_virt.c | 10 +++++++---
>>>   1 file changed, 7 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
>>> index 216812f660..a0afb17030 100644
>>> --- a/hw/mips/loongson3_virt.c
>>> +++ b/hw/mips/loongson3_virt.c
>>> @@ -447,10 +447,14 @@ static inline void 
>>> loongson3_virt_devices_init(MachineState *machine,
>>>       pci_vga_init(pci_bus);
>>> -    if (defaults_enabled()) {
>>> +    if (defaults_enabled() && module_object_class_by_name("pci-ohci")) {
>>>           pci_create_simple(pci_bus, -1, "pci-ohci");
>>> -        usb_create_simple(usb_bus_find(-1), "usb-kbd");
>>> -        usb_create_simple(usb_bus_find(-1), "usb-tablet");
>>> +        if (module_object_class_by_name("usb-kbd")) {
>>> +            usb_create_simple(usb_bus_find(-1), "usb-kbd");
>>> +        }
>>> +        if (module_object_class_by_name("usb-tablet")) {
>>> +            usb_create_simple(usb_bus_find(-1), "usb-tablet");
>>> +        }
> 
> It looks like kbd/tablet don't need to have an if around, because
> hw/usb/usb-hid.c is always compiled when CONFIG_USB is enabled,
> and enabling CONFIG_USB_OHCI automatically selects CONFIG_USB.

Oh, right! So this can be simplified, indeed.

> I guess this whole code can be guarded by #if CONFIG_USB_OHCI..#endif,
> instead of using runtime checking of device availability.

Yes, that's the alternative ... I'll respin the patch with that to see how 
it looks like.

> Notes:
> 
> Other places don't check if ohci or other usb controllers are available.

Those likely use "select" instead of "imply" in their Kconfig, so the OHCI 
controller is always included.

> We have TYPE_PCI_OHCI #define which isn't used in places where pci-ohci
> is requested, - probably need to move it to a common header (it is
> defined in hw/usb/hcd-ohci-pci.c now).

Yes, sounds like a cleanup that could be done in an additional patch.

> roms/config.seabios-128k turns USB_OHCI off.

That's the config of the seabios ROM - not (directly) related to the config 
of the QEMU binaries.

  Thomas