qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PULL 23/33] hw/arm/xilinx_zynq: Fix USB port instantiation


From: Philippe Mathieu-Daudé
Subject: Re: [PULL 23/33] hw/arm/xilinx_zynq: Fix USB port instantiation
Date: Wed, 19 May 2021 19:50:27 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1

On 2/28/20 5:38 PM, Peter Maydell wrote:
> From: Guenter Roeck <linux@roeck-us.net>
> 
> USB ports on Xilinx Zync must be instantiated as TYPE_CHIPIDEA to work.
> Linux expects and checks various chipidea registers, which do not exist
> with the basic ehci emulation. This patch series fixes the problem.
> 
> Without this patch, USB ports fail to instantiate under Linux.
> 
> ci_hdrc ci_hdrc.0: doesn't support host
> ci_hdrc ci_hdrc.0: no supported roles
> 
> With this patch, USB ports are instantiated, and it is possible
> to boot from USB drive.
> 
> ci_hdrc ci_hdrc.0: EHCI Host Controller
> ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
> ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
> usb 1-1: new full-speed USB device number 2 using ci_hdrc
> usb 1-1: not running at top speed; connect to a high speed hub
> usb 1-1: config 1 interface 0 altsetting 0 endpoint 0x81 has invalid 
> maxpacket 512, setting to 64
> usb 1-1: config 1 interface 0 altsetting 0 endpoint 0x2 has invalid maxpacket 
> 512, setting to 64
> usb-storage 1-1:1.0: USB Mass Storage device detected
> scsi host0: usb-storage 1-1:1.0
> 
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
> Message-id: 20200215122354.13706-2-linux@roeck-us.net
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>  hw/arm/xilinx_zynq.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c
> index 3d439a45d57..571cdcd599e 100644
> --- a/hw/arm/xilinx_zynq.c
> +++ b/hw/arm/xilinx_zynq.c
> @@ -29,6 +29,7 @@
>  #include "hw/loader.h"
>  #include "hw/misc/zynq-xadc.h"
>  #include "hw/ssi/ssi.h"
> +#include "hw/usb/chipidea.h"
>  #include "qemu/error-report.h"
>  #include "hw/sd/sdhci.h"
>  #include "hw/char/cadence_uart.h"
> @@ -225,8 +226,8 @@ static void zynq_init(MachineState *machine)
>      zynq_init_spi_flashes(0xE0007000, pic[81-IRQ_OFFSET], false);
>      zynq_init_spi_flashes(0xE000D000, pic[51-IRQ_OFFSET], true);
>  
> -    sysbus_create_simple("xlnx,ps7-usb", 0xE0002000, pic[53-IRQ_OFFSET]);
> -    sysbus_create_simple("xlnx,ps7-usb", 0xE0003000, pic[76-IRQ_OFFSET]);
> +    sysbus_create_simple(TYPE_CHIPIDEA, 0xE0002000, pic[53 - IRQ_OFFSET]);
> +    sysbus_create_simple(TYPE_CHIPIDEA, 0xE0003000, pic[76 - IRQ_OFFSET]);

FYI this patch makes the xilinx-zynq-a9 crash when built with
--without-default-devices:

./qemu-system-arm -M xilinx-zynq-a9
**
ERROR:qom/object.c:714:object_new_with_type: assertion failed: (type !=
NULL)
Bail out! ERROR:qom/object.c:714:object_new_with_type: assertion failed:
(type != NULL)

(gdb) bt
#0  0x00007ffff52dd7d5 in raise () at /lib64/libc.so.6
#1  0x00007ffff52c6895 in abort () at /lib64/libc.so.6
#2  0x00007ffff6dc4b6c in g_assertion_message_expr.cold () at
/lib64/libglib-2.0.so.0
#3  0x00007ffff6e229ff in g_assertion_message_expr () at
/lib64/libglib-2.0.so.0
#4  0x00005555558d3f01 in object_new_with_type (type=<optimized out>) at
qom/object.c:714
#5  0x00005555558d3f59 in object_new
(typename=typename@entry=0x555555ad4545 "usb-chipidea") at qom/object.c:747
#6  0x00005555558cd526 in qdev_new (name=name@entry=0x555555ad4545
"usb-chipidea") at hw/core/qdev.c:153
#7  0x0000555555739fc6 in sysbus_create_varargs
(name=name@entry=0x555555ad4545 "usb-chipidea",
addr=addr@entry=3758104576) at hw/core/sysbus.c:234
#8  0x0000555555796b57 in sysbus_create_simple (irq=<optimized out>,
addr=3758104576, name=0x555555ad4545 "usb-chipidea") at
/home/phil/source/qemu/include/hw/sysbus.h:104
#9  zynq_init (machine=0x555555de07a0) at hw/arm/xilinx_zynq.c:254
#10 0x000055555573707c in machine_run_board_init
(machine=machine@entry=0x555555de07a0) at hw/core/machine.c:1238
#11 0x0000555555838cff in qemu_init_board () at softmmu/vl.c:2513
#12 qmp_x_exit_preconfig (errp=<optimized out>) at softmmu/vl.c:2587
#13 0x000055555583cbfb in qmp_x_exit_preconfig (errp=<optimized out>) at
softmmu/vl.c:3609
#14 qemu_init (argc=<optimized out>, argv=<optimized out>,
envp=<optimized out>) at softmmu/vl.c:3609
#15 0x0000555555684749 in main (argc=<optimized out>, argv=<optimized
out>, envp=<optimized out>) at softmmu/main.c:49

This is because TYPE_CHIPIDEA is only built when an IMX machine is
selected:

softmmu_ss.add(when: 'CONFIG_IMX', if_true: files('chipidea.c'))

I'll send a fix later.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]