[PATCH 3/3] iommu/arm-smmu-qcom: Use identity default domains for MDP5

Rob Clark rob.clark at oss.qualcomm.com
Sat Oct 31 08:28:54 PDT 2026


On Fri, Oct 30, 2026 at 3:05 PM Dmitry Baryshkov
<dmitry.baryshkov at oss.qualcomm.com> wrote:
>
> drm/msm writes the addresses dma_map_sgtable() returns for the DRM
> device into its own page tables, so they have to be physical addresses,
> i.e. the device must not use iommu-dma. On MDP5 platforms the DRM
> device is the "qcom,mdp5" node, which is missing from the client list,
> and the msm8996 MMSS SMMUs have no qcom impl at all, so the device gets
> iommu-dma. On db820c the SoC then resets as soon as the GPU starts.
>
> Add "qcom,mdp5" to the list, which also covers sdm630/660, and give
> msm8996 an impl with just def_domain_type, keeping the bypass emulation
> out of it.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at oss.qualcomm.com>

Reviewed-by: Rob Clark <rob.clark at oss.qualcomm.com>

> ---
>  drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c
> index 795e8ec7e8fa..addba9074217 100644
> --- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c
> +++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c
> @@ -408,6 +408,7 @@ static const struct of_device_id qcom_smmu_client_of_match[] __maybe_unused = {
>         { .compatible = "qcom,adreno-gmu" },
>         { .compatible = "qcom,glymur-mdss" },
>         { .compatible = "qcom,mdp4" },
> +       { .compatible = "qcom,mdp5" },
>         { .compatible = "qcom,mdss" },
>         { .compatible = "qcom,qcm2290-mdss" },
>         { .compatible = "qcom,sar2130p-mdss" },
> @@ -642,6 +643,10 @@ static const struct arm_smmu_impl sdm845_smmu_500_impl = {
>  #endif
>  };
>
> +static const struct arm_smmu_impl msm8996_smmu_impl = {
> +       .def_domain_type = qcom_smmu_def_domain_type,
> +};
> +
>  static const struct arm_smmu_impl qcom_adreno_smmu_v2_impl = {
>         .init_context = qcom_adreno_smmu_init_context,
>         .cfg_probe = qcom_adreno_smmuv2_cfg_probe,
> @@ -711,7 +716,7 @@ static const struct qcom_smmu_config qcom_smmu_impl0_cfg = {
>   * there are not enough context banks.
>   */
>  static const struct qcom_smmu_match_data msm8996_smmu_data = {
> -       .impl = NULL,
> +       .impl = &msm8996_smmu_impl,
>         .adreno_impl = &qcom_adreno_smmu_v2_impl,
>  };
>
>
> --
> 2.47.3
>



More information about the linux-arm-kernel mailing list