]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
iommu/tegra241-cmdqv: Reset VCMDQ in tegra241_vcmdq_hw_init_user()
authorNicolin Chen <nicolinc@nvidia.com>
Thu, 29 Jan 2026 22:43:41 +0000 (14:43 -0800)
committerJoerg Roedel <joerg.roedel@amd.com>
Sat, 31 Jan 2026 09:22:08 +0000 (10:22 +0100)
commit80f1a2c2332fee0edccd006fe87fc8a6db94bab3
tree687a1437810adb5ed452a22c1a26732293c8bcc9
parent5815d9303c67cef5f47cd01e73b671e6b9c40ef3
iommu/tegra241-cmdqv: Reset VCMDQ in tegra241_vcmdq_hw_init_user()

The Enable bits in CMDQV/VINTF/VCMDQ_CONFIG registers do not actually reset
the HW registers. So, the driver explicitly clears all the registers when a
VINTF or VCMDQ is being initialized calling its hw_deinit() function.

However, a userspace VCMDQ is not properly reset, unlike an in-kernel VCMDQ
getting reset in tegra241_vcmdq_hw_init().

Meanwhile, tegra241_vintf_hw_init() calling tegra241_vintf_hw_deinit() will
not deinit any VCMDQ, since there is no userspace VCMDQ mapped to the VINTF
at that stage.

Then, this may result in dirty VCMDQ registers, which can fail the VM.

Like tegra241_vcmdq_hw_init(), reset a VCMDQ in tegra241_vcmdq_hw_init() to
fix this bug. This is required by a host kernel.

Fixes: 6717f26ab1e7 ("iommu/tegra241-cmdqv: Add user-space use support")
Cc: stable@vger.kernel.org
Reported-by: Bao Nguyen <ncqb@google.com>
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c