From: Auger Eric <eric.auger@redhat.com>
To: Linu Cherian <linuc.decode@gmail.com>
Cc: eric.auger.pro@gmail.com, peter.maydell@linaro.org,
qemu-arm@nongnu.org, qemu-devel@nongnu.org,
prem.mallappa@gmail.com, alex.williamson@redhat.com,
mohun106@gmail.com, drjones@redhat.com, tcain@qti.qualcomm.com,
Radha.Chintakuntla@cavium.com, Sunil.Goutham@cavium.com,
mst@redhat.com, jean-philippe.brucker@arm.com, tn@semihalf.com,
will.deacon@arm.com, robin.murphy@arm.com, peterx@redhat.com,
bharat.bhushan@nxp.com, christoffer.dall@linaro.org,
wtownsen@redhat.com, linu.cherian@cavium.com
Subject: Re: [Qemu-devel] [Qemu-arm] [PATCH v7 00/20] ARM SMMUv3 Emulation Support
Date: Tue, 12 Sep 2017 08:38:47 +0200 [thread overview]
Message-ID: <c2f77265-f363-00db-fffe-97731ad0744c@redhat.com> (raw)
In-Reply-To: <20170912061815.GA23124@virtx40>
Hi Linu,
On 12/09/2017 08:18, Linu Cherian wrote:
> Hi Eric,
>
> On Fri Sep 01, 2017 at 07:21:03PM +0200, Eric Auger wrote:
>> This series implements the emulation code for ARM SMMUv3.
>>
>> Changes since v6:
>> - DPDK testpmd now running on guest with 2 assigned VFs
>> - Changed the instantiation method: add the following option to
>> the QEMU command line
>> -device smmuv3 # for virtio/vhost use cases
>> -device smmuv3,caching-mode # for vfio use cases (based on [1])
>> - splitted the series into smaller patches to allow the review
>> - the VFIO integration based on "tlbi-on-map" smmuv3 driver
>> is isolated from the rest: last 2 patches, not for upstream.
>> This is shipped for testing/bench until a better solution is found.
>> - Reworked permission flag checks and event generation
>>
>> testing:
>> - in dt and ACPI modes
>> - virtio-net-pci and vhost-net devices using dma ops with various
>> guest page sizes [2]
>> - assigned VFs using dma ops [3]:
>> - AMD Overdrive and igbvf passthrough (using gsi direct mapping)
>> - Cavium ThunderX and ixgbevf passthrough (using KVM MSI routing)
>> - DPDK testpmd on guest running with VFIO user space drivers (2 igbvf) [3]
>> with guest and host page size equal (4kB)
>>
>> Known limitations:
>> - no VMSAv8-32 suport
>> - no nested stage support (S1 + S2)
>> - no support for HYP mappings
>> - register fine emulation, commands, interrupts and errors were
>> not accurately tested. Handling is sufficient to run use cases
>> described above though.
>> - interrupts and event generation not observed yet.
>>
>
> By design, shouldnt this work on hardware with smmuv2 implementations as well.
> ie. Guest with smmuv3 emulation + Host with smmuv2 hardware.
Yes indeed. I am mostly testing with a host featuring smmuv2 at the moment.
Thanks
Eric
>
> Or Is there any known limitations for this ?
>
>> Best Regards
>>
>> Eric
>>
>> This series can be found at:
>> v7: https://github.com/eauger/qemu/tree/v2.10.0-SMMU-v7
>> Previous version at:
>> v6: https://github.com/eauger/qemu/tree/v2.10.0-rc2-SMMU-v6
>>
>> References:
>> [1] [RFC v2 0/4] arm-smmu-v3 tlbi-on-map option
>> https://lkml.org/lkml/2017/8/11/426
>>
>> [2] qemu cmd line excerpt:
>> -device smmuv3 \
>> -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0,vhost=off \
>> -device virtio-net-pci,netdev=tap0,mac=6a:f5:10:b1:3d:d2,iommu_platform,disable-modern=off,disable-legacy=on \
>> [3] use -device smmuv3,caching-mode
>>
>>
>> History:
>> v6 -> v7:
>> - see above
>>
>> v5 -> v6:
>> - Rebase on 2.10 and IOMMUMemoryRegion
>> - add ACPI TLBI_ON_MAP support (VFIO integration also works in
>> ACPI mode)
>> - fix block replay
>> - handle implementation defined SMMU_CMD_TLBI_NH_VA_AM cmd
>> (goes along with TLBI_ON_MAP FW quirk)
>> - replay systematically unmap the whole range first
>> - smmuv3_map_hook does not unmap anymore and the unmap is done
>> before the replay
>> - add and use smmuv3_context_device_invalidate instead of
>> blindly replaying everything
>>
>> v4 -> v5:
>> - initial_level now part of SMMUTransCfg
>> - smmu_page_walk_64 takes into account the max input size
>> - implement sys->iommu_ops.replay and sys->iommu_ops.notify_flag_changed
>> - smmuv3_translate: bug fix: don't walk on bypass
>> - smmu_update_qreg: fix PROD index update
>> - I did not yet address Peter's comments as the code is not mature enough
>> to be split into sub patches.
>>
>> v3 -> v4 [Eric]:
>> - page table walk rewritten to allow scan of the page table within a
>> range of IOVA. This prepares for VFIO integration and replay.
>> - configuration parsing partially reworked.
>> - do not advertise unsupported/untested features: S2, S1 + S2, HYP,
>> PRI, ATS, ..
>> - added ACPI table generation
>> - migrated to dynamic traces
>> - mingw compilation fix
>>
>> v2 -> v3 [Eric]:
>> - rebased on 2.9
>> - mostly code and patch reorganization to ease the review process
>> - optional patches removed. They may be handled separately. I am currently
>> working on ACPI enablement.
>> - optional instantiation of the smmu in mach-virt
>> - removed [2/9] (fdt functions) since not mandated
>> - start splitting main patch into base and derived object
>> - no new function feature added
>>
>> v1 -> v2 [Prem]:
>> - Adopted review comments from Eric Auger
>> - Make SMMU_DPRINTF to internally call qemu_log
>> (since translation requests are too many, we need control
>> on the type of log we want)
>> - SMMUTransCfg modified to suite simplicity
>> - Change RegInfo to uint64 register array
>> - Code cleanup
>> - Test cleanups
>> - Reshuffled patches
>>
>> v0 -> v1 [Prem]:
>> - As per SMMUv3 spec 16.0 (only is_ste_consistant() is noticeable)
>> - Reworked register access/update logic
>> - Factored out translation code for
>> - single point bug fix
>> - sharing/removal in future
>> - (optional) Unit tests added, with PCI test device
>> - S1 with 4k/64k, S1+S2 with 4k/64k
>> - (S1 or S2) only can be verified by Linux 4.7 driver
>> - (optional) Priliminary ACPI support
>>
>> v0 [Prem]:
>> - Implements SMMUv3 spec 11.0
>> - Supported for PCIe devices,
>> - Command Queue and Event Queue supported
>> - LPAE only, S1 is supported and Tested, S2 not tested
>> - BE mode Translation not supported
>> - IRQ support (legacy, no MSI)
>>
>> Eric Auger (18):
>> hw/arm/smmu-common: smmu base device and datatypes
>> hw/arm/smmu-common: IOMMU memory region and address space setup
>> hw/arm/smmu-common: smmu_read/write_sysmem
>> hw/arm/smmu-common: VMSAv8-64 page table walk
>> hw/arm/smmuv3: Wired IRQ and GERROR helpers
>> hw/arm/smmuv3: Queue helpers
>> hw/arm/smmuv3: Implement MMIO write operations
>> hw/arm/smmuv3: Event queue recording helper
>> hw/arm/smmuv3: Implement translate callback
>> target/arm/kvm: Translate the MSI doorbell in kvm_arch_fixup_msi_route
>> hw/arm/smmuv3: Implement data structure and TLB invalidation
>> notifications
>> hw/arm/smmuv3: Implement IOMMU memory region replay callback
>> hw/arm/virt: Store the PCI host controller dt phandle
>> hw/arm/sysbus-fdt: Pass the VirtMachineState to the node creation
>> functions
>> hw/arm/sysbus-fdt: Pass the platform bus base address in
>> PlatformBusFDTData
>> hw/arm/sysbus-fdt: Allow smmuv3 dynamic instantiation
>> hw/arm/smmuv3: [not for upstream] add SMMU_CMD_TLBI_NH_VA_AM handling
>> hw/arm/smmuv3: [not for upstream] Add caching-mode option
>>
>> Prem Mallappa (2):
>> hw/arm/smmuv3: Skeleton
>> hw/arm/virt-acpi-build: Add smmuv3 node in IORT table
>>
>> default-configs/aarch64-softmmu.mak | 1 +
>> hw/arm/Makefile.objs | 1 +
>> hw/arm/smmu-common.c | 527 ++++++++++++++++
>> hw/arm/smmu-internal.h | 105 ++++
>> hw/arm/smmuv3-internal.h | 584 +++++++++++++++++
>> hw/arm/smmuv3.c | 1181 +++++++++++++++++++++++++++++++++++
>> hw/arm/sysbus-fdt.c | 129 +++-
>> hw/arm/trace-events | 48 ++
>> hw/arm/virt-acpi-build.c | 63 +-
>> hw/arm/virt.c | 6 +-
>> include/hw/acpi/acpi-defs.h | 15 +
>> include/hw/arm/smmu-common.h | 123 ++++
>> include/hw/arm/smmuv3.h | 80 +++
>> include/hw/arm/sysbus-fdt.h | 2 +
>> include/hw/arm/virt.h | 15 +
>> target/arm/kvm.c | 27 +
>> target/arm/trace-events | 3 +
>> 17 files changed, 2886 insertions(+), 24 deletions(-)
>> create mode 100644 hw/arm/smmu-common.c
>> create mode 100644 hw/arm/smmu-internal.h
>> create mode 100644 hw/arm/smmuv3-internal.h
>> create mode 100644 hw/arm/smmuv3.c
>> create mode 100644 include/hw/arm/smmu-common.h
>> create mode 100644 include/hw/arm/smmuv3.h
>>
>> --
>> 2.5.5
>>
>>
>
next prev parent reply other threads:[~2017-09-12 6:39 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-01 17:21 [Qemu-devel] [PATCH v7 00/20] ARM SMMUv3 Emulation Support Eric Auger
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 01/20] hw/arm/smmu-common: smmu base device and datatypes Eric Auger
2017-09-27 17:38 ` Peter Maydell
2017-09-28 7:57 ` Auger Eric
2017-09-30 8:28 ` Prem Mallappa
2017-10-02 7:43 ` Auger Eric
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 02/20] hw/arm/smmu-common: IOMMU memory region and address space setup Eric Auger
2017-10-09 14:39 ` Peter Maydell
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 03/20] hw/arm/smmu-common: smmu_read/write_sysmem Eric Auger
2017-10-09 14:46 ` Peter Maydell
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 04/20] hw/arm/smmu-common: VMSAv8-64 page table walk Eric Auger
2017-10-09 15:36 ` Peter Maydell
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 05/20] hw/arm/smmuv3: Skeleton Eric Auger
2017-09-08 10:52 ` [Qemu-devel] [Qemu-arm] " Linu Cherian
2017-09-08 15:18 ` Auger Eric
2017-09-12 6:14 ` Linu Cherian
2017-10-09 16:17 ` [Qemu-devel] " Peter Maydell
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 06/20] hw/arm/smmuv3: Wired IRQ and GERROR helpers Eric Auger
2017-10-09 17:01 ` Peter Maydell
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 07/20] hw/arm/smmuv3: Queue helpers Eric Auger
2017-10-09 17:12 ` Peter Maydell
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 08/20] hw/arm/smmuv3: Implement MMIO write operations Eric Auger
2017-10-09 17:17 ` Peter Maydell
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 09/20] hw/arm/smmuv3: Event queue recording helper Eric Auger
2017-10-09 17:34 ` Peter Maydell
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 10/20] hw/arm/smmuv3: Implement translate callback Eric Auger
2017-10-09 17:45 ` Peter Maydell
2018-02-06 12:19 ` Auger Eric
2018-02-06 12:43 ` Peter Maydell
2018-02-06 12:56 ` Auger Eric
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 11/20] target/arm/kvm: Translate the MSI doorbell in kvm_arch_fixup_msi_route Eric Auger
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 12/20] hw/arm/smmuv3: Implement data structure and TLB invalidation notifications Eric Auger
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 13/20] hw/arm/smmuv3: Implement IOMMU memory region replay callback Eric Auger
2017-09-14 9:27 ` [Qemu-devel] [Qemu-arm] " Linu Cherian
2017-09-14 14:31 ` Tomasz Nowicki
2017-09-14 14:43 ` Tomasz Nowicki
2017-09-15 7:30 ` Auger Eric
2017-09-15 7:41 ` Auger Eric
2017-09-15 10:42 ` tn
2017-09-15 13:19 ` Auger Eric
2017-09-15 14:50 ` Auger Eric
2017-09-18 9:50 ` Tomasz Nowicki
2017-09-15 7:23 ` Auger Eric
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 14/20] hw/arm/virt: Store the PCI host controller dt phandle Eric Auger
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 15/20] hw/arm/sysbus-fdt: Pass the VirtMachineState to the node creation functions Eric Auger
2017-10-09 17:47 ` Peter Maydell
2017-11-13 13:00 ` Auger Eric
2017-11-13 13:08 ` Peter Maydell
2017-11-13 13:37 ` Auger Eric
2017-11-13 13:44 ` Peter Maydell
2017-11-13 13:59 ` Auger Eric
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 16/20] hw/arm/sysbus-fdt: Pass the platform bus base address in PlatformBusFDTData Eric Auger
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 17/20] hw/arm/sysbus-fdt: Allow smmuv3 dynamic instantiation Eric Auger
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 18/20] hw/arm/virt-acpi-build: Add smmuv3 node in IORT table Eric Auger
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 19/20] hw/arm/smmuv3: [not for upstream] add SMMU_CMD_TLBI_NH_VA_AM handling Eric Auger
2017-10-09 17:48 ` Peter Maydell
2017-10-17 15:06 ` [Qemu-devel] [Qemu-arm] " Linu Cherian
2017-09-01 17:21 ` [Qemu-devel] [PATCH v7 20/20] hw/arm/smmuv3: [not for upstream] Add caching-mode option Eric Auger
2017-10-09 17:49 ` Peter Maydell
2017-09-07 12:39 ` [Qemu-devel] [PATCH v7 00/20] ARM SMMUv3 Emulation Support Peter Maydell
2017-09-08 8:35 ` Auger Eric
2017-09-08 5:47 ` Michael S. Tsirkin
2017-09-08 8:36 ` Auger Eric
2017-09-12 6:18 ` [Qemu-devel] [Qemu-arm] " Linu Cherian
2017-09-12 6:38 ` Auger Eric [this message]
2017-09-28 6:43 ` Linu Cherian
2017-09-28 7:13 ` Peter Xu
2017-09-28 7:54 ` Auger Eric
2017-09-28 9:21 ` Linu Cherian
2017-10-24 5:38 ` Linu Cherian
2017-10-24 10:20 ` Will Deacon
2017-10-24 17:06 ` Linu Cherian
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c2f77265-f363-00db-fffe-97731ad0744c@redhat.com \
--to=eric.auger@redhat.com \
--cc=Radha.Chintakuntla@cavium.com \
--cc=Sunil.Goutham@cavium.com \
--cc=alex.williamson@redhat.com \
--cc=bharat.bhushan@nxp.com \
--cc=christoffer.dall@linaro.org \
--cc=drjones@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=jean-philippe.brucker@arm.com \
--cc=linu.cherian@cavium.com \
--cc=linuc.decode@gmail.com \
--cc=mohun106@gmail.com \
--cc=mst@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=prem.mallappa@gmail.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=robin.murphy@arm.com \
--cc=tcain@qti.qualcomm.com \
--cc=tn@semihalf.com \
--cc=will.deacon@arm.com \
--cc=wtownsen@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).