From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
To: <linux-kernel@vger.kernel.org>, <iommu@lists.linux.dev>,
<joro@8bytes.org>, <jgg@nvidia.com>
Cc: <yi.l.liu@intel.com>, <kevin.tian@intel.com>,
<nicolinc@nvidia.com>, <vasant.hegde@amd.com>,
<jon.grimm@amd.com>, <santosh.shukla@amd.com>,
<sairaj.arunkodilkar@amd.com>, <jay.chen@amd.com>,
<wvw@google.com>, <wnliu@google.com>, <dantuluris@google.com>,
<chriscli@google.com>, <kpsingh@google.com>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Subject: [PATCH 03/22] iommu/amd: Detect and initialize AMD vIOMMU feature
Date: Mon, 30 Mar 2026 08:41:47 +0000 [thread overview]
Message-ID: <20260330084206.9251-4-suravee.suthikulpanit@amd.com> (raw)
In-Reply-To: <20260330084206.9251-1-suravee.suthikulpanit@amd.com>
The feature is advertised w/ EFR[VIOMMUSup]. Please see the AMD IOMMU
specification[1] for more detail.
Introduce a new global variable amd_iommu_viommu, which is used to
control the feature enablement in the driver. Currently, the feature
is default to disabled. Once the feature is fully supported, it will be
changed to enabled by default along with a command-line option to disable
if needed.
[1] https://docs.amd.com/v/u/en-US/48882_3.10_PUB
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
---
drivers/iommu/amd/Makefile | 2 +-
drivers/iommu/amd/amd_iommu.h | 2 ++
drivers/iommu/amd/amd_iommu_types.h | 1 +
drivers/iommu/amd/amd_viommu.h | 22 ++++++++++++++++++++++
drivers/iommu/amd/init.c | 13 +++++++++++++
drivers/iommu/amd/viommu.c | 29 +++++++++++++++++++++++++++++
6 files changed, 68 insertions(+), 1 deletion(-)
create mode 100644 drivers/iommu/amd/amd_viommu.h
create mode 100644 drivers/iommu/amd/viommu.c
diff --git a/drivers/iommu/amd/Makefile b/drivers/iommu/amd/Makefile
index 94b8ef2acb18..e1e824b9c7b0 100644
--- a/drivers/iommu/amd/Makefile
+++ b/drivers/iommu/amd/Makefile
@@ -1,4 +1,4 @@
# SPDX-License-Identifier: GPL-2.0-only
obj-y += iommu.o init.o quirks.o ppr.o pasid.o
-obj-$(CONFIG_AMD_IOMMU_IOMMUFD) += iommufd.o nested.o
+obj-$(CONFIG_AMD_IOMMU_IOMMUFD) += iommufd.o nested.o viommu.o
obj-$(CONFIG_AMD_IOMMU_DEBUGFS) += debugfs.o
diff --git a/drivers/iommu/amd/amd_iommu.h b/drivers/iommu/amd/amd_iommu.h
index 7308c6f1835c..c440f2745b38 100644
--- a/drivers/iommu/amd/amd_iommu.h
+++ b/drivers/iommu/amd/amd_iommu.h
@@ -33,6 +33,8 @@ void amd_iommu_debugfs_setup(void);
static inline void amd_iommu_debugfs_setup(void) {}
#endif
+extern bool amd_iommu_viommu;
+
/* Needed for interrupt remapping */
int amd_iommu_prepare(void);
int amd_iommu_enable(void);
diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_iommu_types.h
index 31f7f426bab6..c5f779d76fc4 100644
--- a/drivers/iommu/amd/amd_iommu_types.h
+++ b/drivers/iommu/amd/amd_iommu_types.h
@@ -106,6 +106,7 @@
#define FEATURE_HASUP BIT_ULL(49)
#define FEATURE_EPHSUP BIT_ULL(50)
#define FEATURE_HDSUP BIT_ULL(52)
+#define FEATURE_VIOMMU BIT_ULL(55)
#define FEATURE_SNP BIT_ULL(63)
diff --git a/drivers/iommu/amd/amd_viommu.h b/drivers/iommu/amd/amd_viommu.h
new file mode 100644
index 000000000000..45c2b71af4ba
--- /dev/null
+++ b/drivers/iommu/amd/amd_viommu.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2026 Advanced Micro Devices, Inc.
+ */
+
+#ifndef AMD_VIOMMU_H
+#define AMD_VIOMMU_H
+
+#if IS_ENABLED(CONFIG_AMD_IOMMU_IOMMUFD)
+
+int amd_viommu_init(struct amd_iommu *iommu);
+
+#else
+
+static inline int amd_viommu_init(struct amd_iommu *iommu)
+{
+ return 0;
+}
+
+#endif /* CONFIG_AMD_IOMMU_IOMMUFD */
+
+#endif /* AMD_VIOMMU_H */
diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
index b1c344ed7dbd..a1cc6aa6f7dc 100644
--- a/drivers/iommu/amd/init.c
+++ b/drivers/iommu/amd/init.c
@@ -34,6 +34,7 @@
#include <linux/crash_dump.h>
#include "amd_iommu.h"
+#include "amd_viommu.h"
#include "../irq_remapping.h"
#include "../iommu-pages.h"
@@ -193,6 +194,9 @@ bool amdr_ivrs_remap_support __read_mostly;
bool amd_iommu_force_isolation __read_mostly;
+/* VIOMMU enabling flag */
+bool amd_iommu_viommu;
+
unsigned long amd_iommu_pgsize_bitmap __ro_after_init = AMD_IOMMU_PGSIZES;
enum iommu_init_state {
@@ -2198,6 +2202,10 @@ static int __init iommu_init_pci(struct amd_iommu *iommu)
if (check_feature(FEATURE_PPR) && amd_iommu_alloc_ppr_log(iommu))
return -ENOMEM;
+ ret = amd_viommu_init(iommu);
+ if (ret)
+ pr_err("Failed to initialize vIOMMU.\n");
+
if (iommu->cap & (1UL << IOMMU_CAP_NPCACHE)) {
pr_info("Using strict mode due to virtualization\n");
iommu_set_dma_strict();
@@ -2291,6 +2299,9 @@ static void print_iommu_info(void)
if (check_feature2(FEATURE_SEVSNPIO_SUP))
pr_cont(" SEV-TIO");
+ if (check_feature(FEATURE_VIOMMU))
+ pr_cont(" vIOMMU");
+
pr_cont("\n");
}
@@ -2303,6 +2314,8 @@ static void print_iommu_info(void)
pr_info("V2 page table enabled (Paging mode : %d level)\n",
amd_iommu_gpt_level);
}
+ if (amd_iommu_viommu)
+ pr_info("AMD-Vi: vIOMMU enabled\n");
}
static int __init amd_iommu_init_pci(void)
diff --git a/drivers/iommu/amd/viommu.c b/drivers/iommu/amd/viommu.c
new file mode 100644
index 000000000000..f4b5f96d4785
--- /dev/null
+++ b/drivers/iommu/amd/viommu.c
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2023 Advanced Micro Devices, Inc.
+ */
+
+#define pr_fmt(fmt) "AMD-Vi: " fmt
+#define dev_fmt(fmt) pr_fmt(fmt)
+
+#include <linux/iommu.h>
+#include <linux/iommufd.h>
+#include <linux/amd-iommu.h>
+#include <uapi/linux/iommufd.h>
+
+#include <asm/iommu.h>
+#include <asm/set_memory.h>
+
+#include "iommufd.h"
+#include "amd_iommu.h"
+#include "amd_iommu_types.h"
+#include "amd_viommu.h"
+
+int __init amd_viommu_init(struct amd_iommu *iommu)
+{
+ if (!amd_iommu_viommu ||
+ !check_feature(FEATURE_VIOMMU))
+ return 0;
+
+ return 0;
+}
--
2.34.1
next prev parent reply other threads:[~2026-03-30 8:42 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-30 8:41 [PATCH 00/22] iommu/amd: Introduce AMD Hardware-accelerated Virtualized IOMMU (vIOMMU) Support Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 01/22] iommu/amd: Make amd_iommu_completion_wait() non-static Suravee Suthikulpanit
2026-03-30 9:39 ` Nicolin Chen
2026-03-30 8:41 ` [PATCH 02/22] iommu/amd: Introduce vIOMMU-specific events and event info Suravee Suthikulpanit
2026-03-30 9:34 ` Nicolin Chen
2026-04-06 3:25 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` Suravee Suthikulpanit [this message]
2026-03-31 5:12 ` iommu/amd: Initialize IOMMU Private Address (IPA) space mapping region Weinan Liu
2026-04-06 8:32 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 04/22] iommu/amd: Introduce IOMMUFD vIOMMU support for AMD Suravee Suthikulpanit
2026-04-07 6:46 ` [PATCH 4/22] " Weinan Liu
2026-05-12 15:14 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 05/22] iommu/amd: Introduce vIOMMU Guest-ID (GID) Suravee Suthikulpanit
2026-04-07 7:01 ` Weinan Liu
2026-05-12 15:07 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 06/22] iommu/amd: Map vIOMMU VF MMIO and VF Control MMIO regions Suravee Suthikulpanit
2026-03-31 5:30 ` Weinan Liu
2026-04-06 8:57 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 07/22] iommu/amd: Add support for AMD vIOMMU VF MMIO region Suravee Suthikulpanit
2026-03-31 5:55 ` Weinan Liu
2026-04-06 9:03 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 08/22] iommu/amd: Introduce Reset vMMIO Command Suravee Suthikulpanit
2026-04-07 7:20 ` [PATCH 8/22] " Weinan Liu
2026-03-30 8:41 ` [PATCH 09/22] iommu/amd: Introduce domain for IOMMU Private Address (IPA) region Suravee Suthikulpanit
2026-03-30 12:20 ` Jason Gunthorpe
2026-04-06 3:48 ` Suthikulpanit, Suravee
2026-04-06 11:47 ` Jason Gunthorpe
2026-03-30 8:41 ` [PATCH 10/22] iommu/amd: Assign IOMMU Private Address domain to IOMMU Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 11/22] iommu/amd: Allocate and map vIOMMU private regions Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 12/22] iommu/amd: Add helper functions to manage private address region for each VM Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 13/22] iommu/amd: Add helper functions to manage DevID / DomID mapping tables Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 14/22] iommu/amd: Introduce IOMMUFD vDevice support for AMD Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 15/22] iommu/amd: Introduce helper function for updating domain ID mapping table Suravee Suthikulpanit
2026-03-30 12:17 ` Jason Gunthorpe
2026-04-06 3:49 ` Suthikulpanit, Suravee
2026-03-30 8:42 ` [PATCH 16/22] iommu/amd: Introduce helper function for updating device " Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 17/22] iommu/amd: Introduce vIOMMU Translation DTE Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 18/22] iommufd: Introduce iommufd_viommu_ops.hw_queue_init Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 19/22] iommu/amd: Add support for vIOMMU HW queues initialization Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 20/22] iommufd: Introduce vIOMMU option via IOMMU_OPTION ioctl Suravee Suthikulpanit
2026-03-30 12:15 ` Jason Gunthorpe
2026-04-06 17:02 ` Suthikulpanit, Suravee
2026-03-30 8:42 ` [PATCH 21/22] iommu/amd: Handle set/get option for AMD vIOMMU hw_queue Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 22/22] iommu/amd: Introduce logic to check and enable vIOMMU feature Suravee Suthikulpanit
2026-03-30 12:15 ` Jason Gunthorpe
2026-04-06 3:51 ` Suthikulpanit, Suravee
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=20260330084206.9251-4-suravee.suthikulpanit@amd.com \
--to=suravee.suthikulpanit@amd.com \
--cc=chriscli@google.com \
--cc=dantuluris@google.com \
--cc=iommu@lists.linux.dev \
--cc=jay.chen@amd.com \
--cc=jgg@nvidia.com \
--cc=jon.grimm@amd.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kpsingh@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=sairaj.arunkodilkar@amd.com \
--cc=santosh.shukla@amd.com \
--cc=vasant.hegde@amd.com \
--cc=wnliu@google.com \
--cc=wvw@google.com \
--cc=yi.l.liu@intel.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
all inboxes | Powered by JetHome®