[PATCH v17 12/12] media: mediatek: jpeg: add jpeg smmu sid setting
Kyrie Wu (吴晗)
Kyrie.Wu at mediatek.com
Fri Oct 9 23:30:04 PDT 2026
On Tue, 2026-09-22 at 13:39 +0200, AngeloGioacchino Del Regno wrote:
> On 9/22/26 11:15, Kyrie Wu wrote:
> > Add a configuration to set jpeg dec & enc smmu sid
> >
> > Signed-off-by: Kyrie Wu <kyrie.wu at mediatek.com>
> > Reviewed-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>
> > ---
> > .../platform/mediatek/jpeg/mtk_jpeg_core.c | 29
> > +++++++++++++++++++
> > .../platform/mediatek/jpeg/mtk_jpeg_core.h | 15 ++++++++++
> > .../platform/mediatek/jpeg/mtk_jpeg_dec_hw.c | 23
> > +++++++++++++++
> > .../platform/mediatek/jpeg/mtk_jpeg_enc_hw.c | 23
> > +++++++++++++++
> > 4 files changed, 90 insertions(+)
> >
>
> ..snip..
>
> > diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c
> > b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c
> > index 07452249b..3058fdf4f 100644
> > --- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c
> > +++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_dec_hw.c
> > @@ -613,6 +613,25 @@ static int mtk_jpegdec_hw_init_irq(struct
> > mtk_jpegdec_comp_dev *dev)
> > return 0;
> > }
> >
> > +static int mtk_jpegdec_smmu_init(struct mtk_jpegdec_comp_dev *dev)
> > +{
> > + struct mtk_jpeg_dev *master_dev = dev->master_dev;
> > +
> > + if (!master_dev->variant->support_smmu)
> > + return 0;
> > +
> > + dev->smmu_regmap =
> > + syscon_regmap_lookup_by_phandle(dev->plat_dev-
> > >dev.of_node,
> > + "mediatek,smmu-
> > config");
>
> Where is this property being introduced? I don't see any binding
> change for this.
>
> Besides, is smmu-config in the multimedia smmu iospace?
> That'd be wrong and wouldn't really work.
>
> Cheers,
> Angelo
Dear Angelo,
Thanks for the question. In the MT8196 DTS, the JPEG decoder and
encoder HW nodes set mediatek,smmu-config to &jpeg_smmuX.
That label refers to a syscon compatible with mediatek,mt8196-jpeg-smmu
at 0x38d0000 (size > 0x1000).
The JPEG iommus entries separately point to &mm_smmu, so the GUSER_ID
writes target the dedicated JPEG SMMU configuration registers,
not the multimedia SMMU I/O space. I will add the missing property and
syscon bindings.
Reagrds,
Kyrie
>
> > + if (IS_ERR(dev->smmu_regmap)) {
> > + return dev_err_probe(dev->dev, PTR_ERR(dev-
> > >smmu_regmap),
> > + "mmap smmu_base
> > failed(%pe)\n",
> > + dev->smmu_regmap);
> > + }
> > +
> > + return 0;
> > +}
> > +
> > static int mtk_jpegdec_hw_probe(struct platform_device *pdev)
> > {
> > struct mtk_jpegdec_clk *jpegdec_clk;
> > @@ -665,6 +684,10 @@ static int mtk_jpegdec_hw_probe(struct
> > platform_device *pdev)
> > master_dev->reg_decbase[i] = dev->reg_base;
> > dev->master_dev = master_dev;
> >
> > + ret = mtk_jpegdec_smmu_init(dev);
> > + if (ret)
> > + return ret;
> > +
> > platform_set_drvdata(pdev, dev);
> > pm_runtime_enable(&pdev->dev);
> >
> > diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
> > b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
> > index c7954af0e..506a49d1a 100644
> > --- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
> > +++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
> > @@ -338,6 +338,25 @@ static int mtk_jpegenc_hw_init_irq(struct
> > mtk_jpegenc_comp_dev *dev)
> > return 0;
> > }
> >
> > +static int mtk_jpegenc_smmu_init(struct mtk_jpegenc_comp_dev *dev)
> > +{
> > + struct mtk_jpeg_dev *master_dev = dev->master_dev;
> > +
> > + if (!master_dev->variant->support_smmu)
> > + return 0;
> > +
> > + dev->smmu_regmap =
> > + syscon_regmap_lookup_by_phandle(dev->plat_dev-
> > >dev.of_node,
> > + "mediatek,smmu-
> > config");
> > + if (IS_ERR(dev->smmu_regmap)) {
> > + return dev_err_probe(dev->dev, PTR_ERR(dev-
> > >smmu_regmap),
> > + "mmap smmu_base
> > failed(%pe)\n",
> > + dev->smmu_regmap);
> > + }
> > +
> > + return 0;
> > +}
> > +
> > static int mtk_jpegenc_hw_probe(struct platform_device *pdev)
> > {
> > struct mtk_jpegenc_clk *jpegenc_clk;
> > @@ -388,6 +407,10 @@ static int mtk_jpegenc_hw_probe(struct
> > platform_device *pdev)
> > master_dev->reg_encbase[i] = dev->reg_base;
> > dev->master_dev = master_dev;
> >
> > + ret = mtk_jpegenc_smmu_init(dev);
> > + if (ret)
> > + return ret;
> > +
> > platform_set_drvdata(pdev, dev);
> > pm_runtime_enable(&pdev->dev);
> >
More information about the Linux-mediatek
mailing list