Re: [PATCH v2 19/22] iommu/tegra241-cmdqv: Simplify deinit flow in tegra241_cmdqv_remove_vintf()

Pranjal Shrivastava
2025-04-29T22:08:13Z

On Fri, Apr 25, 2025 at 10:58:14PM -0700, Nicolin Chen wrote:
> The current flow of tegra241_cmdqv_remove_vintf() is:
> 1. For each LVCMDQ, tegra241_vintf_remove_lvcmdq():
> a. Disable the LVCMDQ HW
> b. Release the LVCMDQ SW resource
> 2. For current VINTF, tegra241_vintf_hw_deinit():
> c. Disable all LVCMDQ HWs
> d. Disable VINTF HW
>
> Obviously, the step 1.a and the step 2.c are redundant.
>
> Since tegra241_vintf_hw_deinit() disables all of its LVCMDQ HWs, it could
> simplify the flow in tegra241_cmdqv_remove_vintf() by calling that first:
> 1. For current VINTF, tegra241_vintf_hw_deinit():
> a. Disable all LVCMDQ HWs
> b. Disable VINTF HW
> 2. Release all LVCMDQ SW resources
>
> Drop tegra241_vintf_remove_lvcmdq(), and move tegra241_vintf_free_lvcmdq()
> as the new step 2.
>
> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
> ---
> drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 13 +++----------
> 1 file changed, 3 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c
> index ba029f7d24ce..8d418c131b1b 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c
> @@ -628,24 +628,17 @@ static int tegra241_cmdqv_init_vintf(struct tegra241_cmdqv *cmdqv, u16 max_idx,
>
> /* Remove Helpers */
>
> -static void tegra241_vintf_remove_lvcmdq(struct tegra241_vintf *vintf, u16 lidx)
> -{
> - tegra241_vcmdq_hw_deinit(vintf->lvcmdqs[lidx]);
> - tegra241_vintf_free_lvcmdq(vintf, lidx);
> -}
> -
> static void tegra241_cmdqv_remove_vintf(struct tegra241_cmdqv *cmdqv, u16 idx)
> {
> struct tegra241_vintf *vintf = cmdqv->vintfs[idx];
> u16 lidx;
>
> + tegra241_vintf_hw_deinit(vintf);
> +
> /* Remove LVCMDQ resources */
> for (lidx = 0; lidx < vintf->cmdqv->num_lvcmdqs_per_vintf; lidx++)
> if (vintf->lvcmdqs[lidx])
> - tegra241_vintf_remove_lvcmdq(vintf, lidx);
> -
> - /* Remove VINTF resources */
> - tegra241_vintf_hw_deinit(vintf);
> + tegra241_vintf_free_lvcmdq(vintf, lidx);
>
> dev_dbg(cmdqv->dev, "VINTF%u: deallocated\n", vintf->idx);
> tegra241_cmdqv_deinit_vintf(cmdqv, idx);

I don't have access to a HW spec to verify HW behaviour, but the changes
make sense to me.

Acked-by: Pranjal Shrivastava <praan@google.com>

> --
> 2.43.0
>