qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH RFC 0/4] ARM SMMUv3 Emulation


From: pmallapp
Subject: [Qemu-devel] [PATCH RFC 0/4] ARM SMMUv3 Emulation
Date: Mon, 11 Jan 2016 19:46:48 +0530

From: Prem Mallappa <address@hidden>

Implementation Notes:

        - SMMUv3 model, as per ARM SMMUv3 11.0 spec
        - Works with Linux Kernel 4.4 SMMUv3 Driver By Will Deacon.
        - Stage1 only
        - only LPAE Translation tables supported
        - BE for translation tables is not supported.
        - Save/Restore not supported "YET".
        - Broadcom variant added, not much different at the moment

Untested
        - Stage2 only
        - Stage1+Stage2 support

Future planned work:
        - MSI(x) support

Test Case setup:
-------------------
 - DPDK + VFIO (DPDK from git master)
 - QEMU (master)
 - Linux Kernel 4.5
 - Bridge interface in Linux

1. Create Bridge interface
- create br0
        sudo brctl addbr br0
- create tap0 tap1 
        sudo ip tuntap add dev tap0 mode tap user ${USER}
        sudo ip tuntap add dev tap1 mode tap user ${USER}

- assign IP address to br0
        sudo ip addr add 20.40.60.80/24 dev br0

2. Launch QEMU (3 ethernet, one unused, the virtio-net is used for NFS)

     pmallapp> aarch64-softmmu/qemu-system-aarch64 -machine type=virt -cpu 
cortex-a57 \
                -m 4192 -smp 4 -nographic \
                -append 'console=ttyAMA0,38400n8 mem=4192M  root=/dev/nfs \
                        nfsroot=10.0.2.2:/srv/nfsroot/v8,vers=3,nolock rw 
e1000e.IntMode=2 \
                        ip=10.0.2.15:10.0.2.2:10.0.2.2:255.255.255.0:prems:eth0 
 ' \
                -kernel 
/home/pmallapp/work/vulcan/armsw/linux/build/arch/arm64/boot/Image \
                -chardev 
socket,id=serial0,host=localhost,port=5000,server,telnet \
                -serial chardev:serial0 \
                -chardev 
socket,id=mon0,host=localhost,port=6001,server,telnet,nowait \
                -monitor chardev:mon0 \
                -device 
pci-bridge,bus=pcie.0,multifunction=on,chassis_nr=2,msi=on,id=pcie.2 \
                -netdev user,id=eth0 \
                -device virtio-net-device,netdev=eth0 \
                -netdev tap,id=eth1,ifname=tap0,script=no,downscript=no \
                -device e1000,netdev=eth1,bus=pcie.2,addr=3 \
                -netdev tap,id=eth2,ifname=tap1,script=no,downscript=no \
                -device virtio-net-pci,netdev=eth2,vectors=0

3. Remove Device from Linux, Add to VFIO, create some reserved Huge pages
        # lspci -nn
        00:00.0 Host bridge [0600]: Red Hat, Inc. Device [1b36:0008]
        00:01.0 PCI bridge [0604]: Red Hat, Inc. QEMU PCI-PCI bridge [1b36:0001]
        00:02.0 Ethernet controller [0200]: Red Hat, Inc Virtio network device 
[1af4:1000]
        01:03.0 Ethernet controller [0200]: Intel Corporation 82540EM Gigabit 
Ethernet Controller [8086:100e] (rev 03)
        
        echo 0000:01:03.0 > /sys/bus/pci/devices/0000:01:03.0/driver/unbind
        echo 8086 100e > /sys/bus/pci/drivers/vfio-pci/new_id

        echo 300 > /proc/sys/vm/nr_hugepages (my case HugePageSize is 2MB)

4. Launch DPDK app, testpmd 
        ./testpmd -c 0xf  -w 0000:01:03.0 -- --rxq=1 --txq= rxd=32  \
                --txd=32 --mbuf-size=32 --total-num-mbufs=1025 
--max-pkt-len=512 -i
        testpmd> set fwd icmpecho
        testpmd> start

5. From host ping any address in 20.40.60.80/24 range
        ping 20.40.60.90 -I br0 -c 10 -r

Prem Mallappa (4):
  arm: smmu: ARM SMMUv3 emulation
  hw: arm: Added smmuv3 files for build
  hw: arm: Add SMMUv3 to virt platform
  devicetree: Added new APIs to make use of more fdt functions

 default-configs/aarch64-softmmu.mak |    1 +
 device_tree.c                       |   35 +
 hw/arm/Makefile.objs                |    1 +
 hw/arm/smmuv3-internal.h            |  343 ++++++++
 hw/arm/smmuv3.c                     | 1530 +++++++++++++++++++++++++++++++++++
 hw/arm/virt.c                       |   62 ++
 include/hw/arm/smmuv3.h             |   39 +
 include/hw/arm/virt.h               |    2 +
 include/sysemu/device_tree.h        |   18 +
 9 files changed, 2031 insertions(+)
 create mode 100644 hw/arm/smmuv3-internal.h
 create mode 100644 hw/arm/smmuv3.c
 create mode 100644 include/hw/arm/smmuv3.h

-- 
2.6.4




reply via email to

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