On 2/26/26 11:50 AM, Shameer Kolothum wrote:
> From: Nicolin Chen <[email protected]>
>
> Replace the stub implementation with real vIOMMU allocation for
> Tegra241 CMDQV.
>
> Free the vIOMMU ID on teardown.
>
> Signed-off-by: Nicolin Chen <[email protected]>
> Signed-off-by: Shameer Kolothum <[email protected]>
> ---
> hw/arm/tegra241-cmdqv.c | 19 +++++++++++++++++--
> 1 file changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c
> index 6959766129..d487612ba2 100644
> --- a/hw/arm/tegra241-cmdqv.c
> +++ b/hw/arm/tegra241-cmdqv.c
> @@ -25,14 +25,29 @@ static void tegra241_cmdqv_write(void *opaque, hwaddr
> offset, uint64_t value,
>
> static void tegra241_cmdqv_free_viommu(SMMUv3State *s)
> {
> + SMMUv3AccelState *accel = s->s_accel;
> + IOMMUFDViommu *viommu = accel->viommu;
> +
> + if (!viommu) {
> + return;
> + }
> + iommufd_backend_free_id(viommu->iommufd, viommu->viommu_id);
> }
>
> static bool
> tegra241_cmdqv_alloc_viommu(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *idev,
> uint32_t *out_viommu_id, Error **errp)
> {
> - error_setg(errp, "NVIDIA Tegra241 CMDQV is unsupported");
> - return false;
> + Tegra241CMDQV *cmdqv = s->s_accel->cmdqv;
> +
> + if (!iommufd_backend_alloc_viommu(idev->iommufd, idev->devid,
> + IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV,
if the only think that differs compared to no cmdq is the type, ie.
IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV vs IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV
+ passing true args, maybe you can just record the type of the cmdqv that is
being used in the smmu_accel device. Then you can get rid of alloc and free
Eric
> + idev->hwpt_id, &cmdqv->cmdqv_data,
> + sizeof(cmdqv->cmdqv_data),
> out_viommu_id,
> + errp)) {
> + return false;
> + }
> + return true;
> }
>
> static void tegra241_cmdqv_reset(SMMUv3State *s)