[PATCH v4, 01/10] soc: mediatek: mmsys: create mmsys folder

Matthias Brugger matthias.bgg at gmail.com
Wed Feb 10 11:59:56 UTC 2021



On 09/02/2021 16:38, Enric Balletbo Serra wrote:
> Hi Yongqiang Niu,
> 
> Thank you for your patch.
> 
> Missatge de Yongqiang Niu <yongqiang.niu at mediatek.com> del dia dt., 5
> de gen. 2021 a les 4:07:
>>
>> the mmsys will more and more complicated after support
>> more and more SoCs, add an independent folder will be
>> more clear
>>
>> Signed-off-by: Yongqiang Niu <yongqiang.niu at mediatek.com>
>> ---
>>  drivers/soc/mediatek/Makefile          |   2 +-
> 
> It will not apply cleanly anymore after the below commit that is
> already queued. Maybe you could rebase the patches and resend them
> again?
> 

Please don't do that, as I pointed out in [1] I don't like the approach of a new
folder. If you disagree please let me know why. Otherwise please send a new
version with the changes suggested by me :)

Regards,
Matthias

[1]
https://lore.kernel.org/linux-mediatek/4cadc9f0-0761-7609-abac-d2211b097bda@gmail.com/

> commit e1e4f7fea37572f0ccf3887430e52c491e9accb6
> Author: CK Hu <ck.hu at mediatek.com>
> Date:   Tue Jul 21 15:46:06 2020 +0800
> 
>     soc / drm: mediatek: Move mtk mutex driver to soc folder
> 
>     mtk mutex is used by DRM and MDP driver, and its function is SoC-specific,
>     so move it to soc folder.
> 
> With that fixed,
> 
> Reviewed-by: Enric Balletbo i Serra <enric.balletbo at collabora.com>
> 
> Thanks,
>   Enric
> 
>>  drivers/soc/mediatek/mmsys/Makefile    |   2 +
>>  drivers/soc/mediatek/mmsys/mtk-mmsys.c | 373 +++++++++++++++++++++++++++++++++
>>  drivers/soc/mediatek/mtk-mmsys.c       | 373 ---------------------------------
>>  4 files changed, 376 insertions(+), 374 deletions(-)
>>  create mode 100644 drivers/soc/mediatek/mmsys/Makefile
>>  create mode 100644 drivers/soc/mediatek/mmsys/mtk-mmsys.c
>>  delete mode 100644 drivers/soc/mediatek/mtk-mmsys.c
>>
>> diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile
>> index b6908db..eca9774 100644
>> --- a/drivers/soc/mediatek/Makefile
>> +++ b/drivers/soc/mediatek/Makefile
>> @@ -5,4 +5,4 @@ obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o
>>  obj-$(CONFIG_MTK_PMIC_WRAP) += mtk-pmic-wrap.o
>>  obj-$(CONFIG_MTK_SCPSYS) += mtk-scpsys.o
>>  obj-$(CONFIG_MTK_SCPSYS_PM_DOMAINS) += mtk-pm-domains.o
>> -obj-$(CONFIG_MTK_MMSYS) += mtk-mmsys.o
>> +obj-$(CONFIG_MTK_MMSYS) += mmsys/
>> diff --git a/drivers/soc/mediatek/mmsys/Makefile b/drivers/soc/mediatek/mmsys/Makefile
>> new file mode 100644
>> index 0000000..f44eadc
>> --- /dev/null
>> +++ b/drivers/soc/mediatek/mmsys/Makefile
>> @@ -0,0 +1,2 @@
>> +# SPDX-License-Identifier: GPL-2.0-only
>> +obj-$(CONFIG_MTK_MMSYS) += mtk-mmsys.o
>> diff --git a/drivers/soc/mediatek/mmsys/mtk-mmsys.c b/drivers/soc/mediatek/mmsys/mtk-mmsys.c
>> new file mode 100644
>> index 0000000..18f9397
>> --- /dev/null
>> +++ b/drivers/soc/mediatek/mmsys/mtk-mmsys.c
>> @@ -0,0 +1,373 @@
>> +// SPDX-License-Identifier: GPL-2.0-only
>> +/*
>> + * Copyright (c) 2014 MediaTek Inc.
>> + * Author: James Liao <jamesjj.liao at mediatek.com>
>> + */
>> +
>> +#include <linux/device.h>
>> +#include <linux/io.h>
>> +#include <linux/of_device.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/soc/mediatek/mtk-mmsys.h>
>> +
>> +#define DISP_REG_CONFIG_DISP_OVL0_MOUT_EN      0x040
>> +#define DISP_REG_CONFIG_DISP_OVL1_MOUT_EN      0x044
>> +#define DISP_REG_CONFIG_DISP_OD_MOUT_EN                0x048
>> +#define DISP_REG_CONFIG_DISP_GAMMA_MOUT_EN     0x04c
>> +#define DISP_REG_CONFIG_DISP_UFOE_MOUT_EN      0x050
>> +#define DISP_REG_CONFIG_DISP_COLOR0_SEL_IN     0x084
>> +#define DISP_REG_CONFIG_DISP_COLOR1_SEL_IN     0x088
>> +#define DISP_REG_CONFIG_DSIE_SEL_IN            0x0a4
>> +#define DISP_REG_CONFIG_DSIO_SEL_IN            0x0a8
>> +#define DISP_REG_CONFIG_DPI_SEL_IN             0x0ac
>> +#define DISP_REG_CONFIG_DISP_RDMA2_SOUT                0x0b8
>> +#define DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN     0x0c4
>> +#define DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN     0x0c8
>> +#define DISP_REG_CONFIG_MMSYS_CG_CON0          0x100
>> +
>> +#define DISP_REG_CONFIG_DISP_OVL_MOUT_EN       0x030
>> +#define DISP_REG_CONFIG_OUT_SEL                        0x04c
>> +#define DISP_REG_CONFIG_DSI_SEL                        0x050
>> +#define DISP_REG_CONFIG_DPI_SEL                        0x064
>> +
>> +#define OVL0_MOUT_EN_COLOR0                    0x1
>> +#define OD_MOUT_EN_RDMA0                       0x1
>> +#define OD1_MOUT_EN_RDMA1                      BIT(16)
>> +#define UFOE_MOUT_EN_DSI0                      0x1
>> +#define COLOR0_SEL_IN_OVL0                     0x1
>> +#define OVL1_MOUT_EN_COLOR1                    0x1
>> +#define GAMMA_MOUT_EN_RDMA1                    0x1
>> +#define RDMA0_SOUT_DPI0                                0x2
>> +#define RDMA0_SOUT_DPI1                                0x3
>> +#define RDMA0_SOUT_DSI1                                0x1
>> +#define RDMA0_SOUT_DSI2                                0x4
>> +#define RDMA0_SOUT_DSI3                                0x5
>> +#define RDMA1_SOUT_DPI0                                0x2
>> +#define RDMA1_SOUT_DPI1                                0x3
>> +#define RDMA1_SOUT_DSI1                                0x1
>> +#define RDMA1_SOUT_DSI2                                0x4
>> +#define RDMA1_SOUT_DSI3                                0x5
>> +#define RDMA2_SOUT_DPI0                                0x2
>> +#define RDMA2_SOUT_DPI1                                0x3
>> +#define RDMA2_SOUT_DSI1                                0x1
>> +#define RDMA2_SOUT_DSI2                                0x4
>> +#define RDMA2_SOUT_DSI3                                0x5
>> +#define DPI0_SEL_IN_RDMA1                      0x1
>> +#define DPI0_SEL_IN_RDMA2                      0x3
>> +#define DPI1_SEL_IN_RDMA1                      (0x1 << 8)
>> +#define DPI1_SEL_IN_RDMA2                      (0x3 << 8)
>> +#define DSI0_SEL_IN_RDMA1                      0x1
>> +#define DSI0_SEL_IN_RDMA2                      0x4
>> +#define DSI1_SEL_IN_RDMA1                      0x1
>> +#define DSI1_SEL_IN_RDMA2                      0x4
>> +#define DSI2_SEL_IN_RDMA1                      (0x1 << 16)
>> +#define DSI2_SEL_IN_RDMA2                      (0x4 << 16)
>> +#define DSI3_SEL_IN_RDMA1                      (0x1 << 16)
>> +#define DSI3_SEL_IN_RDMA2                      (0x4 << 16)
>> +#define COLOR1_SEL_IN_OVL1                     0x1
>> +
>> +#define OVL_MOUT_EN_RDMA                       0x1
>> +#define BLS_TO_DSI_RDMA1_TO_DPI1               0x8
>> +#define BLS_TO_DPI_RDMA1_TO_DSI                        0x2
>> +#define DSI_SEL_IN_BLS                         0x0
>> +#define DPI_SEL_IN_BLS                         0x0
>> +#define DSI_SEL_IN_RDMA                                0x1
>> +
>> +struct mtk_mmsys_driver_data {
>> +       const char *clk_driver;
>> +};
>> +
>> +static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
>> +       .clk_driver = "clk-mt2701-mm",
>> +};
>> +
>> +static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = {
>> +       .clk_driver = "clk-mt2712-mm",
>> +};
>> +
>> +static const struct mtk_mmsys_driver_data mt6779_mmsys_driver_data = {
>> +       .clk_driver = "clk-mt6779-mm",
>> +};
>> +
>> +static const struct mtk_mmsys_driver_data mt6797_mmsys_driver_data = {
>> +       .clk_driver = "clk-mt6797-mm",
>> +};
>> +
>> +static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
>> +       .clk_driver = "clk-mt8173-mm",
>> +};
>> +
>> +static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
>> +       .clk_driver = "clk-mt8183-mm",
>> +};
>> +
>> +static unsigned int mtk_mmsys_ddp_mout_en(enum mtk_ddp_comp_id cur,
>> +                                         enum mtk_ddp_comp_id next,
>> +                                         unsigned int *addr)
>> +{
>> +       unsigned int value;
>> +
>> +       if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_COLOR0) {
>> +               *addr = DISP_REG_CONFIG_DISP_OVL0_MOUT_EN;
>> +               value = OVL0_MOUT_EN_COLOR0;
>> +       } else if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_RDMA0) {
>> +               *addr = DISP_REG_CONFIG_DISP_OVL_MOUT_EN;
>> +               value = OVL_MOUT_EN_RDMA;
>> +       } else if (cur == DDP_COMPONENT_OD0 && next == DDP_COMPONENT_RDMA0) {
>> +               *addr = DISP_REG_CONFIG_DISP_OD_MOUT_EN;
>> +               value = OD_MOUT_EN_RDMA0;
>> +       } else if (cur == DDP_COMPONENT_UFOE && next == DDP_COMPONENT_DSI0) {
>> +               *addr = DISP_REG_CONFIG_DISP_UFOE_MOUT_EN;
>> +               value = UFOE_MOUT_EN_DSI0;
>> +       } else if (cur == DDP_COMPONENT_OVL1 && next == DDP_COMPONENT_COLOR1) {
>> +               *addr = DISP_REG_CONFIG_DISP_OVL1_MOUT_EN;
>> +               value = OVL1_MOUT_EN_COLOR1;
>> +       } else if (cur == DDP_COMPONENT_GAMMA && next == DDP_COMPONENT_RDMA1) {
>> +               *addr = DISP_REG_CONFIG_DISP_GAMMA_MOUT_EN;
>> +               value = GAMMA_MOUT_EN_RDMA1;
>> +       } else if (cur == DDP_COMPONENT_OD1 && next == DDP_COMPONENT_RDMA1) {
>> +               *addr = DISP_REG_CONFIG_DISP_OD_MOUT_EN;
>> +               value = OD1_MOUT_EN_RDMA1;
>> +       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DPI0) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> +               value = RDMA0_SOUT_DPI0;
>> +       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DPI1) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> +               value = RDMA0_SOUT_DPI1;
>> +       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DSI1) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> +               value = RDMA0_SOUT_DSI1;
>> +       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DSI2) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> +               value = RDMA0_SOUT_DSI2;
>> +       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DSI3) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> +               value = RDMA0_SOUT_DSI3;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI1) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> +               value = RDMA1_SOUT_DSI1;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI2) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> +               value = RDMA1_SOUT_DSI2;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI3) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> +               value = RDMA1_SOUT_DSI3;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI0) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> +               value = RDMA1_SOUT_DPI0;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI1) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> +               value = RDMA1_SOUT_DPI1;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DPI0) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> +               value = RDMA2_SOUT_DPI0;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DPI1) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> +               value = RDMA2_SOUT_DPI1;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI1) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> +               value = RDMA2_SOUT_DSI1;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI2) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> +               value = RDMA2_SOUT_DSI2;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI3) {
>> +               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> +               value = RDMA2_SOUT_DSI3;
>> +       } else {
>> +               value = 0;
>> +       }
>> +
>> +       return value;
>> +}
>> +
>> +static unsigned int mtk_mmsys_ddp_sel_in(enum mtk_ddp_comp_id cur,
>> +                                        enum mtk_ddp_comp_id next,
>> +                                        unsigned int *addr)
>> +{
>> +       unsigned int value;
>> +
>> +       if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_COLOR0) {
>> +               *addr = DISP_REG_CONFIG_DISP_COLOR0_SEL_IN;
>> +               value = COLOR0_SEL_IN_OVL0;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI0) {
>> +               *addr = DISP_REG_CONFIG_DPI_SEL_IN;
>> +               value = DPI0_SEL_IN_RDMA1;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI1) {
>> +               *addr = DISP_REG_CONFIG_DPI_SEL_IN;
>> +               value = DPI1_SEL_IN_RDMA1;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI0) {
>> +               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> +               value = DSI0_SEL_IN_RDMA1;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI1) {
>> +               *addr = DISP_REG_CONFIG_DSIO_SEL_IN;
>> +               value = DSI1_SEL_IN_RDMA1;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI2) {
>> +               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> +               value = DSI2_SEL_IN_RDMA1;
>> +       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI3) {
>> +               *addr = DISP_REG_CONFIG_DSIO_SEL_IN;
>> +               value = DSI3_SEL_IN_RDMA1;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DPI0) {
>> +               *addr = DISP_REG_CONFIG_DPI_SEL_IN;
>> +               value = DPI0_SEL_IN_RDMA2;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DPI1) {
>> +               *addr = DISP_REG_CONFIG_DPI_SEL_IN;
>> +               value = DPI1_SEL_IN_RDMA2;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI0) {
>> +               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> +               value = DSI0_SEL_IN_RDMA2;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI1) {
>> +               *addr = DISP_REG_CONFIG_DSIO_SEL_IN;
>> +               value = DSI1_SEL_IN_RDMA2;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI2) {
>> +               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> +               value = DSI2_SEL_IN_RDMA2;
>> +       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI3) {
>> +               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> +               value = DSI3_SEL_IN_RDMA2;
>> +       } else if (cur == DDP_COMPONENT_OVL1 && next == DDP_COMPONENT_COLOR1) {
>> +               *addr = DISP_REG_CONFIG_DISP_COLOR1_SEL_IN;
>> +               value = COLOR1_SEL_IN_OVL1;
>> +       } else if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DSI0) {
>> +               *addr = DISP_REG_CONFIG_DSI_SEL;
>> +               value = DSI_SEL_IN_BLS;
>> +       } else {
>> +               value = 0;
>> +       }
>> +
>> +       return value;
>> +}
>> +
>> +static void mtk_mmsys_ddp_sout_sel(void __iomem *config_regs,
>> +                                  enum mtk_ddp_comp_id cur,
>> +                                  enum mtk_ddp_comp_id next)
>> +{
>> +       if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DSI0) {
>> +               writel_relaxed(BLS_TO_DSI_RDMA1_TO_DPI1,
>> +                              config_regs + DISP_REG_CONFIG_OUT_SEL);
>> +       } else if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DPI0) {
>> +               writel_relaxed(BLS_TO_DPI_RDMA1_TO_DSI,
>> +                              config_regs + DISP_REG_CONFIG_OUT_SEL);
>> +               writel_relaxed(DSI_SEL_IN_RDMA,
>> +                              config_regs + DISP_REG_CONFIG_DSI_SEL);
>> +               writel_relaxed(DPI_SEL_IN_BLS,
>> +                              config_regs + DISP_REG_CONFIG_DPI_SEL);
>> +       }
>> +}
>> +
>> +void mtk_mmsys_ddp_connect(struct device *dev,
>> +                          enum mtk_ddp_comp_id cur,
>> +                          enum mtk_ddp_comp_id next)
>> +{
>> +       void __iomem *config_regs = dev_get_drvdata(dev);
>> +       unsigned int addr, value, reg;
>> +
>> +       value = mtk_mmsys_ddp_mout_en(cur, next, &addr);
>> +       if (value) {
>> +               reg = readl_relaxed(config_regs + addr) | value;
>> +               writel_relaxed(reg, config_regs + addr);
>> +       }
>> +
>> +       mtk_mmsys_ddp_sout_sel(config_regs, cur, next);
>> +
>> +       value = mtk_mmsys_ddp_sel_in(cur, next, &addr);
>> +       if (value) {
>> +               reg = readl_relaxed(config_regs + addr) | value;
>> +               writel_relaxed(reg, config_regs + addr);
>> +       }
>> +}
>> +EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect);
>> +
>> +void mtk_mmsys_ddp_disconnect(struct device *dev,
>> +                             enum mtk_ddp_comp_id cur,
>> +                             enum mtk_ddp_comp_id next)
>> +{
>> +       void __iomem *config_regs = dev_get_drvdata(dev);
>> +       unsigned int addr, value, reg;
>> +
>> +       value = mtk_mmsys_ddp_mout_en(cur, next, &addr);
>> +       if (value) {
>> +               reg = readl_relaxed(config_regs + addr) & ~value;
>> +               writel_relaxed(reg, config_regs + addr);
>> +       }
>> +
>> +       value = mtk_mmsys_ddp_sel_in(cur, next, &addr);
>> +       if (value) {
>> +               reg = readl_relaxed(config_regs + addr) & ~value;
>> +               writel_relaxed(reg, config_regs + addr);
>> +       }
>> +}
>> +EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
>> +
>> +static int mtk_mmsys_probe(struct platform_device *pdev)
>> +{
>> +       const struct mtk_mmsys_driver_data *data;
>> +       struct device *dev = &pdev->dev;
>> +       struct platform_device *clks;
>> +       struct platform_device *drm;
>> +       void __iomem *config_regs;
>> +       int ret;
>> +
>> +       config_regs = devm_platform_ioremap_resource(pdev, 0);
>> +       if (IS_ERR(config_regs)) {
>> +               ret = PTR_ERR(config_regs);
>> +               dev_err(dev, "Failed to ioremap mmsys registers: %d\n", ret);
>> +               return ret;
>> +       }
>> +
>> +       platform_set_drvdata(pdev, config_regs);
>> +
>> +       data = of_device_get_match_data(&pdev->dev);
>> +
>> +       clks = platform_device_register_data(&pdev->dev, data->clk_driver,
>> +                                            PLATFORM_DEVID_AUTO, NULL, 0);
>> +       if (IS_ERR(clks))
>> +               return PTR_ERR(clks);
>> +
>> +       drm = platform_device_register_data(&pdev->dev, "mediatek-drm",
>> +                                           PLATFORM_DEVID_AUTO, NULL, 0);
>> +       if (IS_ERR(drm)) {
>> +               platform_device_unregister(clks);
>> +               return PTR_ERR(drm);
>> +       }
>> +
>> +       return 0;
>> +}
>> +
>> +static const struct of_device_id of_match_mtk_mmsys[] = {
>> +       {
>> +               .compatible = "mediatek,mt2701-mmsys",
>> +               .data = &mt2701_mmsys_driver_data,
>> +       },
>> +       {
>> +               .compatible = "mediatek,mt2712-mmsys",
>> +               .data = &mt2712_mmsys_driver_data,
>> +       },
>> +       {
>> +               .compatible = "mediatek,mt6779-mmsys",
>> +               .data = &mt6779_mmsys_driver_data,
>> +       },
>> +       {
>> +               .compatible = "mediatek,mt6797-mmsys",
>> +               .data = &mt6797_mmsys_driver_data,
>> +       },
>> +       {
>> +               .compatible = "mediatek,mt8173-mmsys",
>> +               .data = &mt8173_mmsys_driver_data,
>> +       },
>> +       {
>> +               .compatible = "mediatek,mt8183-mmsys",
>> +               .data = &mt8183_mmsys_driver_data,
>> +       },
>> +       { }
>> +};
>> +
>> +static struct platform_driver mtk_mmsys_drv = {
>> +       .driver = {
>> +               .name = "mtk-mmsys",
>> +               .of_match_table = of_match_mtk_mmsys,
>> +       },
>> +       .probe = mtk_mmsys_probe,
>> +};
>> +
>> +builtin_platform_driver(mtk_mmsys_drv);
>> diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
>> deleted file mode 100644
>> index 18f9397..0000000
>> --- a/drivers/soc/mediatek/mtk-mmsys.c
>> +++ /dev/null
>> @@ -1,373 +0,0 @@
>> -// SPDX-License-Identifier: GPL-2.0-only
>> -/*
>> - * Copyright (c) 2014 MediaTek Inc.
>> - * Author: James Liao <jamesjj.liao at mediatek.com>
>> - */
>> -
>> -#include <linux/device.h>
>> -#include <linux/io.h>
>> -#include <linux/of_device.h>
>> -#include <linux/platform_device.h>
>> -#include <linux/soc/mediatek/mtk-mmsys.h>
>> -
>> -#define DISP_REG_CONFIG_DISP_OVL0_MOUT_EN      0x040
>> -#define DISP_REG_CONFIG_DISP_OVL1_MOUT_EN      0x044
>> -#define DISP_REG_CONFIG_DISP_OD_MOUT_EN                0x048
>> -#define DISP_REG_CONFIG_DISP_GAMMA_MOUT_EN     0x04c
>> -#define DISP_REG_CONFIG_DISP_UFOE_MOUT_EN      0x050
>> -#define DISP_REG_CONFIG_DISP_COLOR0_SEL_IN     0x084
>> -#define DISP_REG_CONFIG_DISP_COLOR1_SEL_IN     0x088
>> -#define DISP_REG_CONFIG_DSIE_SEL_IN            0x0a4
>> -#define DISP_REG_CONFIG_DSIO_SEL_IN            0x0a8
>> -#define DISP_REG_CONFIG_DPI_SEL_IN             0x0ac
>> -#define DISP_REG_CONFIG_DISP_RDMA2_SOUT                0x0b8
>> -#define DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN     0x0c4
>> -#define DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN     0x0c8
>> -#define DISP_REG_CONFIG_MMSYS_CG_CON0          0x100
>> -
>> -#define DISP_REG_CONFIG_DISP_OVL_MOUT_EN       0x030
>> -#define DISP_REG_CONFIG_OUT_SEL                        0x04c
>> -#define DISP_REG_CONFIG_DSI_SEL                        0x050
>> -#define DISP_REG_CONFIG_DPI_SEL                        0x064
>> -
>> -#define OVL0_MOUT_EN_COLOR0                    0x1
>> -#define OD_MOUT_EN_RDMA0                       0x1
>> -#define OD1_MOUT_EN_RDMA1                      BIT(16)
>> -#define UFOE_MOUT_EN_DSI0                      0x1
>> -#define COLOR0_SEL_IN_OVL0                     0x1
>> -#define OVL1_MOUT_EN_COLOR1                    0x1
>> -#define GAMMA_MOUT_EN_RDMA1                    0x1
>> -#define RDMA0_SOUT_DPI0                                0x2
>> -#define RDMA0_SOUT_DPI1                                0x3
>> -#define RDMA0_SOUT_DSI1                                0x1
>> -#define RDMA0_SOUT_DSI2                                0x4
>> -#define RDMA0_SOUT_DSI3                                0x5
>> -#define RDMA1_SOUT_DPI0                                0x2
>> -#define RDMA1_SOUT_DPI1                                0x3
>> -#define RDMA1_SOUT_DSI1                                0x1
>> -#define RDMA1_SOUT_DSI2                                0x4
>> -#define RDMA1_SOUT_DSI3                                0x5
>> -#define RDMA2_SOUT_DPI0                                0x2
>> -#define RDMA2_SOUT_DPI1                                0x3
>> -#define RDMA2_SOUT_DSI1                                0x1
>> -#define RDMA2_SOUT_DSI2                                0x4
>> -#define RDMA2_SOUT_DSI3                                0x5
>> -#define DPI0_SEL_IN_RDMA1                      0x1
>> -#define DPI0_SEL_IN_RDMA2                      0x3
>> -#define DPI1_SEL_IN_RDMA1                      (0x1 << 8)
>> -#define DPI1_SEL_IN_RDMA2                      (0x3 << 8)
>> -#define DSI0_SEL_IN_RDMA1                      0x1
>> -#define DSI0_SEL_IN_RDMA2                      0x4
>> -#define DSI1_SEL_IN_RDMA1                      0x1
>> -#define DSI1_SEL_IN_RDMA2                      0x4
>> -#define DSI2_SEL_IN_RDMA1                      (0x1 << 16)
>> -#define DSI2_SEL_IN_RDMA2                      (0x4 << 16)
>> -#define DSI3_SEL_IN_RDMA1                      (0x1 << 16)
>> -#define DSI3_SEL_IN_RDMA2                      (0x4 << 16)
>> -#define COLOR1_SEL_IN_OVL1                     0x1
>> -
>> -#define OVL_MOUT_EN_RDMA                       0x1
>> -#define BLS_TO_DSI_RDMA1_TO_DPI1               0x8
>> -#define BLS_TO_DPI_RDMA1_TO_DSI                        0x2
>> -#define DSI_SEL_IN_BLS                         0x0
>> -#define DPI_SEL_IN_BLS                         0x0
>> -#define DSI_SEL_IN_RDMA                                0x1
>> -
>> -struct mtk_mmsys_driver_data {
>> -       const char *clk_driver;
>> -};
>> -
>> -static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = {
>> -       .clk_driver = "clk-mt2701-mm",
>> -};
>> -
>> -static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = {
>> -       .clk_driver = "clk-mt2712-mm",
>> -};
>> -
>> -static const struct mtk_mmsys_driver_data mt6779_mmsys_driver_data = {
>> -       .clk_driver = "clk-mt6779-mm",
>> -};
>> -
>> -static const struct mtk_mmsys_driver_data mt6797_mmsys_driver_data = {
>> -       .clk_driver = "clk-mt6797-mm",
>> -};
>> -
>> -static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = {
>> -       .clk_driver = "clk-mt8173-mm",
>> -};
>> -
>> -static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = {
>> -       .clk_driver = "clk-mt8183-mm",
>> -};
>> -
>> -static unsigned int mtk_mmsys_ddp_mout_en(enum mtk_ddp_comp_id cur,
>> -                                         enum mtk_ddp_comp_id next,
>> -                                         unsigned int *addr)
>> -{
>> -       unsigned int value;
>> -
>> -       if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_COLOR0) {
>> -               *addr = DISP_REG_CONFIG_DISP_OVL0_MOUT_EN;
>> -               value = OVL0_MOUT_EN_COLOR0;
>> -       } else if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_RDMA0) {
>> -               *addr = DISP_REG_CONFIG_DISP_OVL_MOUT_EN;
>> -               value = OVL_MOUT_EN_RDMA;
>> -       } else if (cur == DDP_COMPONENT_OD0 && next == DDP_COMPONENT_RDMA0) {
>> -               *addr = DISP_REG_CONFIG_DISP_OD_MOUT_EN;
>> -               value = OD_MOUT_EN_RDMA0;
>> -       } else if (cur == DDP_COMPONENT_UFOE && next == DDP_COMPONENT_DSI0) {
>> -               *addr = DISP_REG_CONFIG_DISP_UFOE_MOUT_EN;
>> -               value = UFOE_MOUT_EN_DSI0;
>> -       } else if (cur == DDP_COMPONENT_OVL1 && next == DDP_COMPONENT_COLOR1) {
>> -               *addr = DISP_REG_CONFIG_DISP_OVL1_MOUT_EN;
>> -               value = OVL1_MOUT_EN_COLOR1;
>> -       } else if (cur == DDP_COMPONENT_GAMMA && next == DDP_COMPONENT_RDMA1) {
>> -               *addr = DISP_REG_CONFIG_DISP_GAMMA_MOUT_EN;
>> -               value = GAMMA_MOUT_EN_RDMA1;
>> -       } else if (cur == DDP_COMPONENT_OD1 && next == DDP_COMPONENT_RDMA1) {
>> -               *addr = DISP_REG_CONFIG_DISP_OD_MOUT_EN;
>> -               value = OD1_MOUT_EN_RDMA1;
>> -       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DPI0) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> -               value = RDMA0_SOUT_DPI0;
>> -       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DPI1) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> -               value = RDMA0_SOUT_DPI1;
>> -       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DSI1) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> -               value = RDMA0_SOUT_DSI1;
>> -       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DSI2) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> -               value = RDMA0_SOUT_DSI2;
>> -       } else if (cur == DDP_COMPONENT_RDMA0 && next == DDP_COMPONENT_DSI3) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN;
>> -               value = RDMA0_SOUT_DSI3;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI1) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> -               value = RDMA1_SOUT_DSI1;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI2) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> -               value = RDMA1_SOUT_DSI2;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI3) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> -               value = RDMA1_SOUT_DSI3;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI0) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> -               value = RDMA1_SOUT_DPI0;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI1) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN;
>> -               value = RDMA1_SOUT_DPI1;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DPI0) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> -               value = RDMA2_SOUT_DPI0;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DPI1) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> -               value = RDMA2_SOUT_DPI1;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI1) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> -               value = RDMA2_SOUT_DSI1;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI2) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> -               value = RDMA2_SOUT_DSI2;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI3) {
>> -               *addr = DISP_REG_CONFIG_DISP_RDMA2_SOUT;
>> -               value = RDMA2_SOUT_DSI3;
>> -       } else {
>> -               value = 0;
>> -       }
>> -
>> -       return value;
>> -}
>> -
>> -static unsigned int mtk_mmsys_ddp_sel_in(enum mtk_ddp_comp_id cur,
>> -                                        enum mtk_ddp_comp_id next,
>> -                                        unsigned int *addr)
>> -{
>> -       unsigned int value;
>> -
>> -       if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_COLOR0) {
>> -               *addr = DISP_REG_CONFIG_DISP_COLOR0_SEL_IN;
>> -               value = COLOR0_SEL_IN_OVL0;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI0) {
>> -               *addr = DISP_REG_CONFIG_DPI_SEL_IN;
>> -               value = DPI0_SEL_IN_RDMA1;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI1) {
>> -               *addr = DISP_REG_CONFIG_DPI_SEL_IN;
>> -               value = DPI1_SEL_IN_RDMA1;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI0) {
>> -               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> -               value = DSI0_SEL_IN_RDMA1;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI1) {
>> -               *addr = DISP_REG_CONFIG_DSIO_SEL_IN;
>> -               value = DSI1_SEL_IN_RDMA1;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI2) {
>> -               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> -               value = DSI2_SEL_IN_RDMA1;
>> -       } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI3) {
>> -               *addr = DISP_REG_CONFIG_DSIO_SEL_IN;
>> -               value = DSI3_SEL_IN_RDMA1;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DPI0) {
>> -               *addr = DISP_REG_CONFIG_DPI_SEL_IN;
>> -               value = DPI0_SEL_IN_RDMA2;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DPI1) {
>> -               *addr = DISP_REG_CONFIG_DPI_SEL_IN;
>> -               value = DPI1_SEL_IN_RDMA2;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI0) {
>> -               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> -               value = DSI0_SEL_IN_RDMA2;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI1) {
>> -               *addr = DISP_REG_CONFIG_DSIO_SEL_IN;
>> -               value = DSI1_SEL_IN_RDMA2;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI2) {
>> -               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> -               value = DSI2_SEL_IN_RDMA2;
>> -       } else if (cur == DDP_COMPONENT_RDMA2 && next == DDP_COMPONENT_DSI3) {
>> -               *addr = DISP_REG_CONFIG_DSIE_SEL_IN;
>> -               value = DSI3_SEL_IN_RDMA2;
>> -       } else if (cur == DDP_COMPONENT_OVL1 && next == DDP_COMPONENT_COLOR1) {
>> -               *addr = DISP_REG_CONFIG_DISP_COLOR1_SEL_IN;
>> -               value = COLOR1_SEL_IN_OVL1;
>> -       } else if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DSI0) {
>> -               *addr = DISP_REG_CONFIG_DSI_SEL;
>> -               value = DSI_SEL_IN_BLS;
>> -       } else {
>> -               value = 0;
>> -       }
>> -
>> -       return value;
>> -}
>> -
>> -static void mtk_mmsys_ddp_sout_sel(void __iomem *config_regs,
>> -                                  enum mtk_ddp_comp_id cur,
>> -                                  enum mtk_ddp_comp_id next)
>> -{
>> -       if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DSI0) {
>> -               writel_relaxed(BLS_TO_DSI_RDMA1_TO_DPI1,
>> -                              config_regs + DISP_REG_CONFIG_OUT_SEL);
>> -       } else if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DPI0) {
>> -               writel_relaxed(BLS_TO_DPI_RDMA1_TO_DSI,
>> -                              config_regs + DISP_REG_CONFIG_OUT_SEL);
>> -               writel_relaxed(DSI_SEL_IN_RDMA,
>> -                              config_regs + DISP_REG_CONFIG_DSI_SEL);
>> -               writel_relaxed(DPI_SEL_IN_BLS,
>> -                              config_regs + DISP_REG_CONFIG_DPI_SEL);
>> -       }
>> -}
>> -
>> -void mtk_mmsys_ddp_connect(struct device *dev,
>> -                          enum mtk_ddp_comp_id cur,
>> -                          enum mtk_ddp_comp_id next)
>> -{
>> -       void __iomem *config_regs = dev_get_drvdata(dev);
>> -       unsigned int addr, value, reg;
>> -
>> -       value = mtk_mmsys_ddp_mout_en(cur, next, &addr);
>> -       if (value) {
>> -               reg = readl_relaxed(config_regs + addr) | value;
>> -               writel_relaxed(reg, config_regs + addr);
>> -       }
>> -
>> -       mtk_mmsys_ddp_sout_sel(config_regs, cur, next);
>> -
>> -       value = mtk_mmsys_ddp_sel_in(cur, next, &addr);
>> -       if (value) {
>> -               reg = readl_relaxed(config_regs + addr) | value;
>> -               writel_relaxed(reg, config_regs + addr);
>> -       }
>> -}
>> -EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect);
>> -
>> -void mtk_mmsys_ddp_disconnect(struct device *dev,
>> -                             enum mtk_ddp_comp_id cur,
>> -                             enum mtk_ddp_comp_id next)
>> -{
>> -       void __iomem *config_regs = dev_get_drvdata(dev);
>> -       unsigned int addr, value, reg;
>> -
>> -       value = mtk_mmsys_ddp_mout_en(cur, next, &addr);
>> -       if (value) {
>> -               reg = readl_relaxed(config_regs + addr) & ~value;
>> -               writel_relaxed(reg, config_regs + addr);
>> -       }
>> -
>> -       value = mtk_mmsys_ddp_sel_in(cur, next, &addr);
>> -       if (value) {
>> -               reg = readl_relaxed(config_regs + addr) & ~value;
>> -               writel_relaxed(reg, config_regs + addr);
>> -       }
>> -}
>> -EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_disconnect);
>> -
>> -static int mtk_mmsys_probe(struct platform_device *pdev)
>> -{
>> -       const struct mtk_mmsys_driver_data *data;
>> -       struct device *dev = &pdev->dev;
>> -       struct platform_device *clks;
>> -       struct platform_device *drm;
>> -       void __iomem *config_regs;
>> -       int ret;
>> -
>> -       config_regs = devm_platform_ioremap_resource(pdev, 0);
>> -       if (IS_ERR(config_regs)) {
>> -               ret = PTR_ERR(config_regs);
>> -               dev_err(dev, "Failed to ioremap mmsys registers: %d\n", ret);
>> -               return ret;
>> -       }
>> -
>> -       platform_set_drvdata(pdev, config_regs);
>> -
>> -       data = of_device_get_match_data(&pdev->dev);
>> -
>> -       clks = platform_device_register_data(&pdev->dev, data->clk_driver,
>> -                                            PLATFORM_DEVID_AUTO, NULL, 0);
>> -       if (IS_ERR(clks))
>> -               return PTR_ERR(clks);
>> -
>> -       drm = platform_device_register_data(&pdev->dev, "mediatek-drm",
>> -                                           PLATFORM_DEVID_AUTO, NULL, 0);
>> -       if (IS_ERR(drm)) {
>> -               platform_device_unregister(clks);
>> -               return PTR_ERR(drm);
>> -       }
>> -
>> -       return 0;
>> -}
>> -
>> -static const struct of_device_id of_match_mtk_mmsys[] = {
>> -       {
>> -               .compatible = "mediatek,mt2701-mmsys",
>> -               .data = &mt2701_mmsys_driver_data,
>> -       },
>> -       {
>> -               .compatible = "mediatek,mt2712-mmsys",
>> -               .data = &mt2712_mmsys_driver_data,
>> -       },
>> -       {
>> -               .compatible = "mediatek,mt6779-mmsys",
>> -               .data = &mt6779_mmsys_driver_data,
>> -       },
>> -       {
>> -               .compatible = "mediatek,mt6797-mmsys",
>> -               .data = &mt6797_mmsys_driver_data,
>> -       },
>> -       {
>> -               .compatible = "mediatek,mt8173-mmsys",
>> -               .data = &mt8173_mmsys_driver_data,
>> -       },
>> -       {
>> -               .compatible = "mediatek,mt8183-mmsys",
>> -               .data = &mt8183_mmsys_driver_data,
>> -       },
>> -       { }
>> -};
>> -
>> -static struct platform_driver mtk_mmsys_drv = {
>> -       .driver = {
>> -               .name = "mtk-mmsys",
>> -               .of_match_table = of_match_mtk_mmsys,
>> -       },
>> -       .probe = mtk_mmsys_probe,
>> -};
>> -
>> -builtin_platform_driver(mtk_mmsys_drv);
>> --
>> 1.8.1.1.dirty
>> _______________________________________________
>> Linux-mediatek mailing list
>> Linux-mediatek at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-mediatek


More information about the dri-devel mailing list