From: Nicolin Chen <nicoleotsuka@xxxxxxxxx> NVIDIA's Grace SoC has a CMDQ-Virtualization (CMDQV) hardware that extends standard ARM SMMUv3 to support multiple command queues with virtualization capabilities. Though this is similar to the ECMDQ in SMMUv3.3, CMDQV provides additional V-Interfaces that allow VMs to have their own interfaces and command queues, and these queues are able to execute a limited set of commands, mainly TLB invalidation commands when running in the guest mode, comparing to the standard SMMUv3 CMDQ. This patch series extends the SMMUv3 driver to support NVIDIA CMDQV and implements it first for in-kernel use. Upon kernel boot some of the vcmdqs will be setup for kernel driver to use, by selecting one of the command queues based on the CPU currently executing to avoid lock contention hot spots with a single queue. Although HW is able to securely expose the additional V-Interfaces and command queues to guest VMs for fast TLB invalidations without a hypervisor trap, due to the ongoing proposal of IOMMUFD [0], we have to postpone the virtualization support that were available in v2, suggested by Alex and Jason [1]. And we envision that it will be added back via IOMMUFD in the months ahead. Thank you! [0] https://lore.kernel.org/lkml/20210919063848.1476776-1-yi.l.liu@xxxxxxxxx/ [1] https://lore.kernel.org/kvm/20210831101549.237151fa.alex.williamson@xxxxxxxxxx/T/#ma07dcfce69fa3f9d59e8b16579f694a0e10798d9 Changelog (details available in PATCH) v2->v3: * Dropped VMID and mdev patches to redesign later based on IOMMUFD. * Separated HYP_OWN part for guest support into a new patch * Added new preparational changes v1->v2: * Added mdev interface support for hypervisor and VMs. * Added preparational changes for mdev interface implementation. * PATCH-12 Changed ->issue_cmdlist() to ->get_cmdq() for a better integration with recently merged ECMDQ-related changes. Nate Watterson (1): iommu/arm-smmu-v3: Add host support for NVIDIA Grace CMDQ-V Nicolin Chen (4): iommu/arm-smmu-v3: Add CS_NONE quirk iommu/arm-smmu-v3: Make arm_smmu_cmdq_init reusable iommu/arm-smmu-v3: Pass cmdq pointer in arm_smmu_cmdq_issue_cmdlist() iommu/nvidia-grace-cmdqv: Limit CMDs for guest owned VINTF MAINTAINERS | 1 + drivers/iommu/Kconfig | 12 + drivers/iommu/arm/arm-smmu-v3/Makefile | 1 + drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 53 ++- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 48 ++ .../arm/arm-smmu-v3/nvidia-grace-cmdqv.c | 446 ++++++++++++++++++ 6 files changed, 542 insertions(+), 19 deletions(-) create mode 100644 drivers/iommu/arm/arm-smmu-v3/nvidia-grace-cmdqv.c -- 2.17.1