[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250317115830.3416-1-dheerajkumar.srivastava@amd.com>
Date: Mon, 17 Mar 2025 17:28:22 +0530
From: Dheeraj Kumar Srivastava <dheerajkumar.srivastava@....com>
To: <joro@...tes.org>, <will@...nel.org>, <robin.murphy@....com>,
<linux-kernel@...r.kernel.org>, <iommu@...ts.linux.dev>
CC: <suravee.suthikulpanit@....com>, <vasant.hegde@....com>, "Dheeraj Kumar
Srivastava" <dheerajkumar.srivastava@....com>
Subject: [PATCH v4 0/8] Introduce debugfs support in IOMMU
Introducing debugfs support in AMD/IOMMU driver that will allow
userspace to dump below IOMMU information
1) MMIO and Capability register per IOMMU
2) Command buffer
3) Device table entry
4) Interrupt remapping table entry
Analyzing contents of IOMMU data structures helps in understanding IOMMU
capabilities and behavior and debug issues faster.
1. MMIO and Capability registers - Add support to dump MMIO and Capability
registers per IOMMU.
Example:
a. Write MMIO register offset to dump it
$ echo 0x18 > /sys/kernel/debug/iommu/amd/iommu00/mmio
$ cat /sys/kernel/debug/iommu/amd/iommu00/mmio
Output:
$ Offset:0x18 Value:0x000c22000003f48d
b. Write capability register offset to dump it
$ echo 0x10 > /sys/kernel/debug/iommu/amd/iommu00/capability
$ cat /sys/kernel/debug/iommu/amd/iommu00/capability
Output:
$ Offset:0x10 Value:0x00203040
2. Command buffer - Add support to dump per IOMMU command buffer.
Example:
a. cat /sys/kernel/debug/iommu/amd/iommu00/cmdbuf
Output:
CMD Buffer Head Offset:339 Tail Offset:339
0: 00835001 10000001 00009900 00000000
1: 00000000 30000005 fffff003 7fffffff
2: 00835001 10000001 00009901 00000000
3: 00000000 30000005 fffff003 7fffffff
4: 00835001 10000001 00009902 00000000
........................................
........................................
........................................
3. Device table - Add support to dump device table per IOMMU.
Example:
a. Write device id to dump device table entry for that device
$ echo 0000:01:00.0 > /sys/kernel/debug/iommu/amd/devid
$ cat /sys/kernel/debug/iommu/amd/devid
Output:
0000:01:00.0
Dump the device table entry for the input given
$ cat /sys/kernel/debug/iommu/amd/devtbl
Output:
DeviceId QWORD[3] QWORD[2] QWORD[1] QWORD[0] iommu
0000:01:00.0 0000000000000000 20000001373b8013 0000000000000038 6000000114d7b603 iommu3
b. Write device id to dump device table entry for that device
$ echo 01:00.0 > /sys/kernel/debug/iommu/amd/devid
$ cat /sys/kernel/debug/iommu/amd/devid
Output:
0000:01:00.0
Dump the device table entry for the input given
$ cat /sys/kernel/debug/iommu/amd/devtbl
Output:
DeviceId QWORD[3] QWORD[2] QWORD[1] QWORD[0] iommu
0000:01:00.0 0000000000000000 20000001373b8013 0000000000000038 6000000114d7b603 iommu3
4. Interrupt remapping table - Add support to dump IRT table valid entries in
"iommu_irqtbl" file. This supports user input to dump IRT entry for a
specific pci device.
Example:
a. Write device id to dump device table entry for that device
$ echo 0000:01:00.0 > /sys/kernel/debug/iommu/amd/devid
$ cat /sys/kernel/debug/iommu/amd/devid
Output:
0000:01:00.0
Dump the device table entry for the input given
$ cat /sys/kernel/debug/iommu/amd/irtbl
Output:
DeviceId 0000:01:00.0
IRT[0000] 0000000000000020 0000000000000241
IRT[0001] 0000000000000020 0000000000000841
IRT[0002] 0000000000000020 0000000000002041
IRT[0003] 0000000000000020 0000000000008041
IRT[0004] 0000000000000020 0000000000020041
..........................................
..........................................
..........................................
b. Write device id to dump device table entry for that device
$ echo 01:00.0 > /sys/kernel/debug/iommu/amd/devid
$ cat /sys/kernel/debug/iommu/amd/devid
Output:
0000:01:00.0
Dump the device table entry for the input given
$ cat /sys/kernel/debug/iommu/amd/irttbl
Output:
Device 0000:01:00.0
IRT[0000] 0000000000000020 0000000000000241
IRT[0001] 0000000000000020 0000000000000841
IRT[0002] 0000000000000020 0000000000002041
IRT[0003] 0000000000000020 0000000000008041
IRT[0004] 0000000000000020 0000000000020041
..........................................
..........................................
..........................................
Open question:[Suggestion from Bjorn Helgaas] Instead of using device_id input support
"/sys/kernel/debug/iommu/amd/devid", can we create separate directory
"/sys/kernel/debug/iommu/amd/<bdf>/" for per device IOMMU data strcutures
dump.
Changes since v3:
-> Patch 2/8: Print 64 bits instead of 32 bits for MMIO registers dump. Since most of
the MMIO registers are 64 bits.
-> Patch 5/8: Update commit message with the need to add support for device_id input.
-> Patch 3/8: Throw error message mentioning valid capability offset range if user capability
offset's input is not in valid range and input fails.
Changes since v2:
-> Patch 2/8 and 3/8: Use single file mmio and capability for input and output registers
offset and register's dump respctively.
-> Patch 8/8: Correct path for files "irqtbl" and "devtbl" in Documentation
Changes since v1:
-> Patch 2/8 and 3/8: Use kstrtou32_from_user() instead of memdup_user_nul() --> kstrtou32()
-> Patch 4/8: Dump command buffer head and tail offset instead of head and tail pointer registers.
-> Patch 8/8: Fix bot reported warning on v1 patch series.
Dheeraj Kumar Srivastava (8):
iommu/amd: Refactor AMD IOMMU debugfs initial setup
iommu/amd: Add debugfs support to dump IOMMU MMIO registers
iommu/amd: Add debugfs support to dump IOMMU Capability registers
iommu/amd: Add debugfs support to dump IOMMU command buffer
iommu/amd: Add support for device id user input
iommu/amd: Add debugfs support to dump device table
iommu/amd: Add debugfs support to dump IRT Table
iommu/amd: Add documentation for AMD IOMMU debugfs support
Documentation/ABI/testing/debugfs-amd-iommu | 114 +++++++
drivers/iommu/amd/amd_iommu.h | 4 +-
drivers/iommu/amd/amd_iommu_types.h | 7 +
drivers/iommu/amd/debugfs.c | 354 +++++++++++++++++++-
drivers/iommu/amd/init.c | 5 +-
drivers/iommu/amd/iommu.c | 7 -
6 files changed, 470 insertions(+), 21 deletions(-)
create mode 100644 Documentation/ABI/testing/debugfs-amd-iommu
--
2.25.1
Powered by blists - more mailing lists