All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: QEMU CAN-FD emulation
       [not found]   ` <20220118114135.Horde.3Jm5PugNZVY8j2cNC8vRLl1@webmailer.ovgu.de>
@ 2022-01-19 11:14     ` Pavel Pisa
  0 siblings, 0 replies; only message in thread
From: Pavel Pisa @ 2022-01-19 11:14 UTC (permalink / raw)
  To: sukreet.pal, QEMU Developers, linux-can

Dear Sukreet Pal,

On Tuesday 18 of January 2022 12:41:35 sukreet.pal@st.ovgu.de wrote:
> Yes, we can push the conversation in qemu mailing list.

Great, may be there is some other input from the list.

Recapitulation:

Sukreet Pal want to use CAN emulation included
in QEMU to test some CAN related software build
for ARM. At this moment, CAN emulation
is available for systems which are equipped by PCI
and for some platform devices on Xilinx

  https://github.com/qemu/qemu/blob/stable-6.1/docs/can.txt

For generic ARM system PCI and SJA1000 driver should
be usable out of the box when appropriate kernel is used.
When I have developed with my students and test and maintain
CAN (SJA1000 and CTU CAN FD) emulation support I use
combination of ARM1176 and VersatilePB for testing.

This setup works for me

Host side (laptop with Debian and without real CAN hardware)

  modprobe can-raw
  modprobe vcan
  ip link add dev can0 type vcan
  ip link set can0 up

The QEMU invoked

qemu-system-arm -cpu arm1176 -m 256 -M versatilepb \
      -kernel kernel-qemu-arm1176-versatilepb \
      -initrd ramdisk.cpio \
      -hda rpi-wheezy-overlay \
      -append "root=/dev/ram console=ttyAMA0" \
      -object can-bus,id=canbus0 \
      -object can-host-socketcan,if=can0,canbus=canbus0,id=canbus0-socketcan \
      -device kvaser_pci,canbus=canbus0 \
      -virtfs local,path=shareddir,security_model=none,mount_tag=shareddir \
      -nographic \

I have some own minimal busybox based initial ramdisk to test QEMU
and kernel from it.

On Monday 17 of January 2022 17:31:32 Pavel Pisa wrote:
> If you can reach shell prompt in the target system
> you should check that Kvaser CAN controller is seen
> on PCI bus.
>
> Try
>
>   lspci -nn
>
> You should see there 10e8:8406. If you do not have lspci
> availabel in the target system, then try
>
>   cat /proc/bus/pci/devices
>
> There should be line
>
>   00xx    10e88406        5e                  1401                    1481
>
> Check that your ARM kernel build includes kvaser_pci driver
> as built in or as the module. I have it as a module.
>
> So my lsmod list
>
>   Module                  Size  Used by    Not tainted
>   kvaser_pci              2332  0
>   sja1000                 6023  1 kvaser_pci
>   can_raw                 6112  0
>   can_dev                 8289  1 sja1000
>   can                    26342  1 can_raw
>   ...

On Tuesday 18 of January 2022 11:08:32 sukreet.pal@st.ovgu.de wrote:
> # lspci -nn
> 00:0c.0 Class 0100: 1000:0012
>
> / # cat /proc/bus/pci/devices
> 0060	10000012	5d	            1001	        50002000	        50000000
>              0	               0	               0	               0
>          100	             400	            2000	               0
>          0	               0	               0	sym53c8xx
>

So it seems that device is not visible on the PCI bus by the kernel.

Suggestion to list QEMU PCI bus devices from QEMU monitor

On Tuesday 18 of January 2022 11:42:49 Pavel Pisa wrote:
> For QEMU monitor access see
>  
> 
https://serverfault.com/questions/587189/how-to-list-all-devices-emulated-in-a-qemu-virtual-machine
>
> Use
>
>   info pci
>
> You should see in the list
>
>     Bus  0, device  XX, function 0:
>     Class 65280: PCI device 10e8:8406
>       PCI subsystem 1af4:1100
>       IRQ 94, pin A
>       BAR0: I/O at 0x1400 [0x147f].
>       BAR1: I/O at 0x1480 [0x14ff].
>       BAR2: I/O at 0x1820 [0x1827].
>       id ""
>
> If this is not in the list then kernel cannot see the device either.

On Tuesday 18 of January 2022 12:41:35 sukreet.pal@st.ovgu.de wrote:
> (qemu) info pci
>    Bus  0, device  11, function 0:
>      Class 2880: PCI device 10ee:0300
>        PCI subsystem 1af4:1100
>        id ""
>    Bus  0, device  12, function 0:
>      SCSI controller: PCI device 1000:0012
>        PCI subsystem 0000:1000
>        IRQ 93.
>        BAR0: I/O at 0x1000 [0x10ff].
>        BAR1: 32 bit memory at 0x50002000 [0x500023ff].
>        BAR2: 32 bit memory at 0x50000000 [0x50001fff].
>        id ""
>    Bus  0, device  13, function 0:
>      Class 65280: PCI device 10e8:8406
>        PCI subsystem 1af4:1100
>        IRQ 94.
>        BAR0: I/O at 0xffffffffffffffff [0x007e].
>        BAR1: I/O at 0xffffffffffffffff [0x007e].
>        BAR2: I/O at 0xffffffffffffffff [0x0006].
>        id ""
>
> I think the kernal can see the devices.

It seems that QEMU report device on the bus but
the kernel does not list device in /proc/bus/pci/devices

> > What is version of your QEMU?
>
> QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.19)
> Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project
> developers (it's the default ubuntu 20.04 qemu version)

In my development repo the last used is

QEMU emulator version 6.0.91 (v6.1.0-rc1-3-g1560ab766e)
Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers

But I have retested with Debian old stable distribution
version

QEMU emulator version 3.1.0 (Debian 1:3.1+dfsg-8+deb10u8)
Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers

and emulation works.

On the report it is strange that device is not seen in the kernel
proc list. It is independent of driver availability.

The strange is even BAR report
  BAR0: I/O at 0xffffffffffffffff [0x007e].  ...
Mine
  BAR0: I/O at 0x1400 [0x147f]. ...

But I expect that BAR FFF value is caused by
unconfigured address. Strange is that the last
bit in the bracket is 0. The BAR fixed
part should respect that it is IO device.

I have seen some warning that PCI I/O devices
mapping is not supported/emulated on VersatilePB.
I have no problems with Kvaser emulation on that
platform with all tested QEMU builds from I think
2.x days.

Test of the other actually supported SJA1000 devices
would not help probably because mioe3680 and pcm3680
are also I/O mapped.

Option is to test our CTU CAN FD which is memory
region mapped

 -device ctucan_pci,canbus0=canbus0-bus,canbus1=canbus0-bus

But t is necessary to build driver for given kernel.
It is available in the repo and has been recently
updated to the required style  

  https://gitlab.fel.cvut.cz/canbus/ctucanfd_ip_core

(I hope to find time and help for mainlining soon).

Best wishes,

                Pavel Pisa
    phone:      +420 603531357
    e-mail:     pisa@cmp.felk.cvut.cz
    Department of Control Engineering FEE CVUT
    Karlovo namesti 13, 121 35, Prague 2
    university: http://dce.fel.cvut.cz/
    personal:   http://cmp.felk.cvut.cz/~pisa
    projects:   https://www.openhub.net/accounts/ppisa
    CAN related:http://canbus.pages.fel.cvut.cz/
    Open Technologies Research Education and Exchange Services
    https://gitlab.fel.cvut.cz/otrees/org/-/wikis/home


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-01-19 11:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20220117143713.Horde.leGGFb7yZC3uaqrqolZYIBE@webmailer.ovgu.de>
     [not found] ` <202201181142.49569.pisa@fel.cvut.cz>
     [not found]   ` <20220118114135.Horde.3Jm5PugNZVY8j2cNC8vRLl1@webmailer.ovgu.de>
2022-01-19 11:14     ` QEMU CAN-FD emulation Pavel Pisa

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.