[PATCH v2 06/19] iommu/arm-smmu-v3: Move arm_smmu_rmr_install_bypass_ste()

Michael Shavit mshavit at google.com
Wed Nov 15 05:57:09 PST 2023


On Tue, Nov 14, 2023 at 1:53 AM Jason Gunthorpe <jgg at nvidia.com> wrote:
>
> Logically arm_smmu_init_strtab_linear() is the function that allocates and
> populates the stream table with the initial value of the STEs. After this
> function returns the stream table should be fully ready.
>
> arm_smmu_rmr_install_bypass_ste() adjusts the initial stream table to force
> any SIDs that the FW says have IOMMU_RESV_DIRECT to use bypass. This
> ensures there is no disruption to the identity mapping during boot.
>
> Put arm_smmu_rmr_install_bypass_ste() into arm_smmu_init_strtab_linear(),
> it already executes immediately after arm_smmu_init_strtab_linear().
>
> No functional change intended.
>
> Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
Reviewed-by: Michael Shavit <mshavit at google.com>

> ---
>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> index 13cdb959ec8f58..3fc8787db2dbc1 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> @@ -86,6 +86,8 @@ static struct arm_smmu_option_prop arm_smmu_options[] = {
>         { 0, NULL},
>  };
>
> +static void arm_smmu_rmr_install_bypass_ste(struct arm_smmu_device *smmu);
> +
>  static void parse_driver_options(struct arm_smmu_device *smmu)
>  {
>         int i = 0;
> @@ -3200,6 +3202,9 @@ static int arm_smmu_init_strtab_linear(struct arm_smmu_device *smmu)
>         cfg->strtab_base_cfg = reg;
>
>         arm_smmu_init_bypass_stes(strtab, cfg->num_l1_ents);
> +
> +       /* Check for RMRs and install bypass STEs if any */
> +       arm_smmu_rmr_install_bypass_ste(smmu);
>         return 0;
>  }
>
> @@ -4013,9 +4018,6 @@ static int arm_smmu_device_probe(struct platform_device *pdev)
>         /* Record our private device structure */
>         platform_set_drvdata(pdev, smmu);
>
> -       /* Check for RMRs and install bypass STEs if any */
> -       arm_smmu_rmr_install_bypass_ste(smmu);
> -
>         /* Reset the device */
>         ret = arm_smmu_device_reset(smmu, bypass);
>         if (ret)
> --
> 2.42.0
>



More information about the linux-arm-kernel mailing list