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 <nicol...@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 <pr...@google.com> > -- > 2.43.0 >