2021-01-06 23:19:46

by Chun-Kuang Hu

[permalink] [raw]
Subject: [PATCH v2 0/5] Share mtk mutex driver for both DRM and MDP

mtk mutex is a driver used by DRM and MDP [1], so this series move
mtk mutex driver from DRM folder to soc folder, so it could be used
by DRM and MDP.

Changes in v2:
1. Rebase onto mediatek-drm-next [2].
2. Export symbol for mtk-mutex API.

[1] https://patchwork.kernel.org/patch/11140751/
[2] https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next

CK Hu (5):
drm/mediatek: Remove redundant file including
drm/mediatek: Rename file mtk_drm_ddp to mtk_mutex
drm/mediatek: Change disp/ddp term to mutex in mtk mutex driver
drm/mediatek: Automatically search unclaimed mtk mutex in
mtk_mutex_get()
soc / drm: mediatek: Move mtk mutex driver to soc folder

drivers/gpu/drm/mediatek/Makefile | 1 -
drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 32 +-
drivers/gpu/drm/mediatek/mtk_drm_ddp.h | 28 --
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 3 -
drivers/gpu/drm/mediatek/mtk_drm_drv.h | 1 -
drivers/soc/mediatek/Makefile | 1 +
.../mediatek/mtk-mutex.c} | 328 +++++++++---------
include/linux/soc/mediatek/mtk-mutex.h | 26 ++
8 files changed, 212 insertions(+), 208 deletions(-)
delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_ddp.h
rename drivers/{gpu/drm/mediatek/mtk_drm_ddp.c => soc/mediatek/mtk-mutex.c} (53%)
create mode 100644 include/linux/soc/mediatek/mtk-mutex.h

--
2.17.1


2021-01-06 23:20:15

by Chun-Kuang Hu

[permalink] [raw]
Subject: [PATCH v2 3/5] drm/mediatek: Change disp/ddp term to mutex in mtk mutex driver

From: CK Hu <[email protected]>

mtk mutex is used by both drm and mdp driver, so change disp/ddp term to
mutex to show that it's a common driver for drm and mdp.

Signed-off-by: CK Hu <[email protected]>
Signed-off-by: Chun-Kuang Hu <[email protected]>
---
drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 30 +--
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +-
drivers/gpu/drm/mediatek/mtk_drm_drv.h | 2 +-
drivers/gpu/drm/mediatek/mtk_mutex.c | 305 ++++++++++++------------
drivers/gpu/drm/mediatek/mtk_mutex.h | 26 +-
5 files changed, 182 insertions(+), 183 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index fd97b7d195e3..bba87a036fa8 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -55,7 +55,7 @@ struct mtk_drm_crtc {
#endif

struct device *mmsys_dev;
- struct mtk_disp_mutex *mutex;
+ struct mtk_mutex *mutex;
unsigned int ddp_comp_nr;
struct mtk_ddp_comp **ddp_comp;

@@ -107,7 +107,7 @@ static void mtk_drm_crtc_destroy(struct drm_crtc *crtc)
{
struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);

- mtk_disp_mutex_put(mtk_crtc->mutex);
+ mtk_mutex_put(mtk_crtc->mutex);

drm_crtc_cleanup(crtc);
}
@@ -265,7 +265,7 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc)
return ret;
}

- ret = mtk_disp_mutex_prepare(mtk_crtc->mutex);
+ ret = mtk_mutex_prepare(mtk_crtc->mutex);
if (ret < 0) {
DRM_ERROR("Failed to enable mutex clock: %d\n", ret);
goto err_pm_runtime_put;
@@ -281,11 +281,11 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc)
mtk_mmsys_ddp_connect(mtk_crtc->mmsys_dev,
mtk_crtc->ddp_comp[i]->id,
mtk_crtc->ddp_comp[i + 1]->id);
- mtk_disp_mutex_add_comp(mtk_crtc->mutex,
+ mtk_mutex_add_comp(mtk_crtc->mutex,
mtk_crtc->ddp_comp[i]->id);
}
- mtk_disp_mutex_add_comp(mtk_crtc->mutex, mtk_crtc->ddp_comp[i]->id);
- mtk_disp_mutex_enable(mtk_crtc->mutex);
+ mtk_mutex_add_comp(mtk_crtc->mutex, mtk_crtc->ddp_comp[i]->id);
+ mtk_mutex_enable(mtk_crtc->mutex);

for (i = 0; i < mtk_crtc->ddp_comp_nr; i++) {
struct mtk_ddp_comp *comp = mtk_crtc->ddp_comp[i];
@@ -314,7 +314,7 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc)
return 0;

err_mutex_unprepare:
- mtk_disp_mutex_unprepare(mtk_crtc->mutex);
+ mtk_mutex_unprepare(mtk_crtc->mutex);
err_pm_runtime_put:
pm_runtime_put(crtc->dev->dev);
return ret;
@@ -333,19 +333,19 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
}

for (i = 0; i < mtk_crtc->ddp_comp_nr; i++)
- mtk_disp_mutex_remove_comp(mtk_crtc->mutex,
+ mtk_mutex_remove_comp(mtk_crtc->mutex,
mtk_crtc->ddp_comp[i]->id);
- mtk_disp_mutex_disable(mtk_crtc->mutex);
+ mtk_mutex_disable(mtk_crtc->mutex);
for (i = 0; i < mtk_crtc->ddp_comp_nr - 1; i++) {
mtk_mmsys_ddp_disconnect(mtk_crtc->mmsys_dev,
mtk_crtc->ddp_comp[i]->id,
mtk_crtc->ddp_comp[i + 1]->id);
- mtk_disp_mutex_remove_comp(mtk_crtc->mutex,
+ mtk_mutex_remove_comp(mtk_crtc->mutex,
mtk_crtc->ddp_comp[i]->id);
}
- mtk_disp_mutex_remove_comp(mtk_crtc->mutex, mtk_crtc->ddp_comp[i]->id);
+ mtk_mutex_remove_comp(mtk_crtc->mutex, mtk_crtc->ddp_comp[i]->id);
mtk_crtc_ddp_clk_disable(mtk_crtc);
- mtk_disp_mutex_unprepare(mtk_crtc->mutex);
+ mtk_mutex_unprepare(mtk_crtc->mutex);

pm_runtime_put(drm->dev);

@@ -457,9 +457,9 @@ static void mtk_drm_crtc_hw_config(struct mtk_drm_crtc *mtk_crtc)
mtk_crtc->pending_async_planes = true;

if (priv->data->shadow_register) {
- mtk_disp_mutex_acquire(mtk_crtc->mutex);
+ mtk_mutex_acquire(mtk_crtc->mutex);
mtk_crtc_ddp_config(crtc, NULL);
- mtk_disp_mutex_release(mtk_crtc->mutex);
+ mtk_mutex_release(mtk_crtc->mutex);
}
#if IS_REACHABLE(CONFIG_MTK_CMDQ)
if (mtk_crtc->cmdq_client) {
@@ -773,7 +773,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
if (!mtk_crtc->ddp_comp)
return -ENOMEM;

- mtk_crtc->mutex = mtk_disp_mutex_get(priv->mutex_dev, pipe);
+ mtk_crtc->mutex = mtk_mutex_get(priv->mutex_dev, pipe);
if (IS_ERR(mtk_crtc->mutex)) {
ret = PTR_ERR(mtk_crtc->mutex);
dev_err(dev, "Failed to get mutex: %d\n", ret);
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 25a24f69b986..b99a06e6834e 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -588,7 +588,7 @@ static struct platform_driver mtk_drm_platform_driver = {
};

static struct platform_driver * const mtk_drm_drivers[] = {
- &mtk_ddp_driver,
+ &mtk_mutex_driver,
&mtk_disp_color_driver,
&mtk_disp_ovl_driver,
&mtk_disp_rdma_driver,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
index 690e92e9eff9..ae366868d01a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
@@ -46,7 +46,7 @@ struct mtk_drm_private {
struct drm_atomic_state *suspend_state;
};

-extern struct platform_driver mtk_ddp_driver;
+extern struct platform_driver mtk_mutex_driver;
extern struct platform_driver mtk_disp_color_driver;
extern struct platform_driver mtk_disp_ovl_driver;
extern struct platform_driver mtk_disp_rdma_driver;
diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/gpu/drm/mediatek/mtk_mutex.c
index 1c8a253f4788..98a060bf225d 100644
--- a/drivers/gpu/drm/mediatek/mtk_mutex.c
+++ b/drivers/gpu/drm/mediatek/mtk_mutex.c
@@ -9,12 +9,12 @@
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
+#include <linux/soc/mediatek/mtk-mmsys.h>

-#include "mtk_drm_ddp_comp.h"
#include "mtk_mutex.h"

-#define MT2701_DISP_MUTEX0_MOD0 0x2c
-#define MT2701_DISP_MUTEX0_SOF0 0x30
+#define MT2701_MUTEX0_MOD0 0x2c
+#define MT2701_MUTEX0_SOF0 0x30

#define DISP_REG_MUTEX_EN(n) (0x20 + 0x20 * (n))
#define DISP_REG_MUTEX(n) (0x24 + 0x20 * (n))
@@ -79,33 +79,32 @@
#define MT2701_MUTEX_MOD_DISP_RDMA0 10
#define MT2701_MUTEX_MOD_DISP_RDMA1 12

-#define MUTEX_SOF_SINGLE_MODE 0
-#define MUTEX_SOF_DSI0 1
-#define MUTEX_SOF_DSI1 2
-#define MUTEX_SOF_DPI0 3
-#define MUTEX_SOF_DPI1 4
-#define MUTEX_SOF_DSI2 5
-#define MUTEX_SOF_DSI3 6
-#define MT8167_MUTEX_SOF_DPI0 2
-#define MT8167_MUTEX_SOF_DPI1 3
-
-
-struct mtk_disp_mutex {
+#define MT2712_MUTEX_SOF_SINGLE_MODE 0
+#define MT2712_MUTEX_SOF_DSI0 1
+#define MT2712_MUTEX_SOF_DSI1 2
+#define MT2712_MUTEX_SOF_DPI0 3
+#define MT2712_MUTEX_SOF_DPI1 4
+#define MT2712_MUTEX_SOF_DSI2 5
+#define MT2712_MUTEX_SOF_DSI3 6
+#define MT8167_MUTEX_SOF_DPI0 2
+#define MT8167_MUTEX_SOF_DPI1 3
+
+struct mtk_mutex {
int id;
bool claimed;
};

-enum mtk_ddp_mutex_sof_id {
- DDP_MUTEX_SOF_SINGLE_MODE,
- DDP_MUTEX_SOF_DSI0,
- DDP_MUTEX_SOF_DSI1,
- DDP_MUTEX_SOF_DPI0,
- DDP_MUTEX_SOF_DPI1,
- DDP_MUTEX_SOF_DSI2,
- DDP_MUTEX_SOF_DSI3,
+enum mtk_mutex_sof_id {
+ MUTEX_SOF_SINGLE_MODE,
+ MUTEX_SOF_DSI0,
+ MUTEX_SOF_DSI1,
+ MUTEX_SOF_DPI0,
+ MUTEX_SOF_DPI1,
+ MUTEX_SOF_DSI2,
+ MUTEX_SOF_DSI3,
};

-struct mtk_ddp_data {
+struct mtk_mutex_data {
const unsigned int *mutex_mod;
const unsigned int *mutex_sof;
const unsigned int mutex_mod_reg;
@@ -113,12 +112,12 @@ struct mtk_ddp_data {
const bool no_clk;
};

-struct mtk_ddp {
+struct mtk_mutex_ctx {
struct device *dev;
struct clk *clk;
void __iomem *regs;
- struct mtk_disp_mutex mutex[10];
- const struct mtk_ddp_data *data;
+ struct mtk_mutex mutex[10];
+ const struct mtk_mutex_data *data;
};

static const unsigned int mt2701_mutex_mod[DDP_COMPONENT_ID_MAX] = {
@@ -183,150 +182,150 @@ static const unsigned int mt8173_mutex_mod[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_WDMA1] = MT8173_MUTEX_MOD_DISP_WDMA1,
};

-static const unsigned int mt2712_mutex_sof[DDP_MUTEX_SOF_DSI3 + 1] = {
- [DDP_MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
- [DDP_MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0,
- [DDP_MUTEX_SOF_DSI1] = MUTEX_SOF_DSI1,
- [DDP_MUTEX_SOF_DPI0] = MUTEX_SOF_DPI0,
- [DDP_MUTEX_SOF_DPI1] = MUTEX_SOF_DPI1,
- [DDP_MUTEX_SOF_DSI2] = MUTEX_SOF_DSI2,
- [DDP_MUTEX_SOF_DSI3] = MUTEX_SOF_DSI3,
+static const unsigned int mt2712_mutex_sof[MUTEX_SOF_DSI3 + 1] = {
+ [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
+ [MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0,
+ [MUTEX_SOF_DSI1] = MUTEX_SOF_DSI1,
+ [MUTEX_SOF_DPI0] = MUTEX_SOF_DPI0,
+ [MUTEX_SOF_DPI1] = MUTEX_SOF_DPI1,
+ [MUTEX_SOF_DSI2] = MUTEX_SOF_DSI2,
+ [MUTEX_SOF_DSI3] = MUTEX_SOF_DSI3,
};

-static const unsigned int mt8167_mutex_sof[DDP_MUTEX_SOF_DSI3 + 1] = {
- [DDP_MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
- [DDP_MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0,
- [DDP_MUTEX_SOF_DPI0] = MT8167_MUTEX_SOF_DPI0,
- [DDP_MUTEX_SOF_DPI1] = MT8167_MUTEX_SOF_DPI1,
+static const unsigned int mt8167_mutex_sof[MUTEX_SOF_DSI3 + 1] = {
+ [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE,
+ [MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0,
+ [MUTEX_SOF_DPI0] = MT8167_MUTEX_SOF_DPI0,
+ [MUTEX_SOF_DPI1] = MT8167_MUTEX_SOF_DPI1,
};

-static const struct mtk_ddp_data mt2701_ddp_driver_data = {
+static const struct mtk_mutex_data mt2701_mutex_driver_data = {
.mutex_mod = mt2701_mutex_mod,
.mutex_sof = mt2712_mutex_sof,
- .mutex_mod_reg = MT2701_DISP_MUTEX0_MOD0,
- .mutex_sof_reg = MT2701_DISP_MUTEX0_SOF0,
+ .mutex_mod_reg = MT2701_MUTEX0_MOD0,
+ .mutex_sof_reg = MT2701_MUTEX0_SOF0,
};

-static const struct mtk_ddp_data mt2712_ddp_driver_data = {
+static const struct mtk_mutex_data mt2712_mutex_driver_data = {
.mutex_mod = mt2712_mutex_mod,
.mutex_sof = mt2712_mutex_sof,
- .mutex_mod_reg = MT2701_DISP_MUTEX0_MOD0,
- .mutex_sof_reg = MT2701_DISP_MUTEX0_SOF0,
+ .mutex_mod_reg = MT2701_MUTEX0_MOD0,
+ .mutex_sof_reg = MT2701_MUTEX0_SOF0,
};

-static const struct mtk_ddp_data mt8167_ddp_driver_data = {
+static const struct mtk_mutex_data mt8167_mutex_driver_data = {
.mutex_mod = mt8167_mutex_mod,
.mutex_sof = mt8167_mutex_sof,
- .mutex_mod_reg = MT2701_DISP_MUTEX0_MOD0,
- .mutex_sof_reg = MT2701_DISP_MUTEX0_SOF0,
+ .mutex_mod_reg = MT2701_MUTEX0_MOD0,
+ .mutex_sof_reg = MT2701_MUTEX0_SOF0,
.no_clk = true,
};

-static const struct mtk_ddp_data mt8173_ddp_driver_data = {
+static const struct mtk_mutex_data mt8173_mutex_driver_data = {
.mutex_mod = mt8173_mutex_mod,
.mutex_sof = mt2712_mutex_sof,
- .mutex_mod_reg = MT2701_DISP_MUTEX0_MOD0,
- .mutex_sof_reg = MT2701_DISP_MUTEX0_SOF0,
+ .mutex_mod_reg = MT2701_MUTEX0_MOD0,
+ .mutex_sof_reg = MT2701_MUTEX0_SOF0,
};

-struct mtk_disp_mutex *mtk_disp_mutex_get(struct device *dev, unsigned int id)
+struct mtk_mutex *mtk_mutex_get(struct device *dev, unsigned int id)
{
- struct mtk_ddp *ddp = dev_get_drvdata(dev);
+ struct mtk_mutex_ctx *mtx = dev_get_drvdata(dev);

if (id >= 10)
return ERR_PTR(-EINVAL);
- if (ddp->mutex[id].claimed)
+ if (mtx->mutex[id].claimed)
return ERR_PTR(-EBUSY);

- ddp->mutex[id].claimed = true;
+ mtx->mutex[id].claimed = true;

- return &ddp->mutex[id];
+ return &mtx->mutex[id];
}

-void mtk_disp_mutex_put(struct mtk_disp_mutex *mutex)
+void mtk_mutex_put(struct mtk_mutex *mutex)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);

- WARN_ON(&ddp->mutex[mutex->id] != mutex);
+ WARN_ON(&mtx->mutex[mutex->id] != mutex);

mutex->claimed = false;
}

-int mtk_disp_mutex_prepare(struct mtk_disp_mutex *mutex)
+int mtk_mutex_prepare(struct mtk_mutex *mutex)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
- return clk_prepare_enable(ddp->clk);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);
+ return clk_prepare_enable(mtx->clk);
}

-void mtk_disp_mutex_unprepare(struct mtk_disp_mutex *mutex)
+void mtk_mutex_unprepare(struct mtk_mutex *mutex)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
- clk_disable_unprepare(ddp->clk);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);
+ clk_disable_unprepare(mtx->clk);
}

-void mtk_disp_mutex_add_comp(struct mtk_disp_mutex *mutex,
- enum mtk_ddp_comp_id id)
+void mtk_mutex_add_comp(struct mtk_mutex *mutex,
+ enum mtk_ddp_comp_id id)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);
unsigned int reg;
unsigned int sof_id;
unsigned int offset;

- WARN_ON(&ddp->mutex[mutex->id] != mutex);
+ WARN_ON(&mtx->mutex[mutex->id] != mutex);

switch (id) {
case DDP_COMPONENT_DSI0:
- sof_id = DDP_MUTEX_SOF_DSI0;
+ sof_id = MUTEX_SOF_DSI0;
break;
case DDP_COMPONENT_DSI1:
- sof_id = DDP_MUTEX_SOF_DSI0;
+ sof_id = MUTEX_SOF_DSI0;
break;
case DDP_COMPONENT_DSI2:
- sof_id = DDP_MUTEX_SOF_DSI2;
+ sof_id = MUTEX_SOF_DSI2;
break;
case DDP_COMPONENT_DSI3:
- sof_id = DDP_MUTEX_SOF_DSI3;
+ sof_id = MUTEX_SOF_DSI3;
break;
case DDP_COMPONENT_DPI0:
- sof_id = DDP_MUTEX_SOF_DPI0;
+ sof_id = MUTEX_SOF_DPI0;
break;
case DDP_COMPONENT_DPI1:
- sof_id = DDP_MUTEX_SOF_DPI1;
+ sof_id = MUTEX_SOF_DPI1;
break;
default:
- if (ddp->data->mutex_mod[id] < 32) {
- offset = DISP_REG_MUTEX_MOD(ddp->data->mutex_mod_reg,
+ if (mtx->data->mutex_mod[id] < 32) {
+ offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg,
mutex->id);
- reg = readl_relaxed(ddp->regs + offset);
- reg |= 1 << ddp->data->mutex_mod[id];
- writel_relaxed(reg, ddp->regs + offset);
+ reg = readl_relaxed(mtx->regs + offset);
+ reg |= 1 << mtx->data->mutex_mod[id];
+ writel_relaxed(reg, mtx->regs + offset);
} else {
offset = DISP_REG_MUTEX_MOD2(mutex->id);
- reg = readl_relaxed(ddp->regs + offset);
- reg |= 1 << (ddp->data->mutex_mod[id] - 32);
- writel_relaxed(reg, ddp->regs + offset);
+ reg = readl_relaxed(mtx->regs + offset);
+ reg |= 1 << (mtx->data->mutex_mod[id] - 32);
+ writel_relaxed(reg, mtx->regs + offset);
}
return;
}

- writel_relaxed(ddp->data->mutex_sof[sof_id],
- ddp->regs +
- DISP_REG_MUTEX_SOF(ddp->data->mutex_sof_reg, mutex->id));
+ writel_relaxed(mtx->data->mutex_sof[sof_id],
+ mtx->regs +
+ DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex->id));
}

-void mtk_disp_mutex_remove_comp(struct mtk_disp_mutex *mutex,
- enum mtk_ddp_comp_id id)
+void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
+ enum mtk_ddp_comp_id id)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);
unsigned int reg;
unsigned int offset;

- WARN_ON(&ddp->mutex[mutex->id] != mutex);
+ WARN_ON(&mtx->mutex[mutex->id] != mutex);

switch (id) {
case DDP_COMPONENT_DSI0:
@@ -336,129 +335,129 @@ void mtk_disp_mutex_remove_comp(struct mtk_disp_mutex *mutex,
case DDP_COMPONENT_DPI0:
case DDP_COMPONENT_DPI1:
writel_relaxed(MUTEX_SOF_SINGLE_MODE,
- ddp->regs +
- DISP_REG_MUTEX_SOF(ddp->data->mutex_sof_reg,
+ mtx->regs +
+ DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg,
mutex->id));
break;
default:
- if (ddp->data->mutex_mod[id] < 32) {
- offset = DISP_REG_MUTEX_MOD(ddp->data->mutex_mod_reg,
+ if (mtx->data->mutex_mod[id] < 32) {
+ offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg,
mutex->id);
- reg = readl_relaxed(ddp->regs + offset);
- reg &= ~(1 << ddp->data->mutex_mod[id]);
- writel_relaxed(reg, ddp->regs + offset);
+ reg = readl_relaxed(mtx->regs + offset);
+ reg &= ~(1 << mtx->data->mutex_mod[id]);
+ writel_relaxed(reg, mtx->regs + offset);
} else {
offset = DISP_REG_MUTEX_MOD2(mutex->id);
- reg = readl_relaxed(ddp->regs + offset);
- reg &= ~(1 << (ddp->data->mutex_mod[id] - 32));
- writel_relaxed(reg, ddp->regs + offset);
+ reg = readl_relaxed(mtx->regs + offset);
+ reg &= ~(1 << (mtx->data->mutex_mod[id] - 32));
+ writel_relaxed(reg, mtx->regs + offset);
}
break;
}
}

-void mtk_disp_mutex_enable(struct mtk_disp_mutex *mutex)
+void mtk_mutex_enable(struct mtk_mutex *mutex)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);

- WARN_ON(&ddp->mutex[mutex->id] != mutex);
+ WARN_ON(&mtx->mutex[mutex->id] != mutex);

- writel(1, ddp->regs + DISP_REG_MUTEX_EN(mutex->id));
+ writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
}

-void mtk_disp_mutex_disable(struct mtk_disp_mutex *mutex)
+void mtk_mutex_disable(struct mtk_mutex *mutex)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);

- WARN_ON(&ddp->mutex[mutex->id] != mutex);
+ WARN_ON(&mtx->mutex[mutex->id] != mutex);

- writel(0, ddp->regs + DISP_REG_MUTEX_EN(mutex->id));
+ writel(0, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
}

-void mtk_disp_mutex_acquire(struct mtk_disp_mutex *mutex)
+void mtk_mutex_acquire(struct mtk_mutex *mutex)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);
u32 tmp;

- writel(1, ddp->regs + DISP_REG_MUTEX_EN(mutex->id));
- writel(1, ddp->regs + DISP_REG_MUTEX(mutex->id));
- if (readl_poll_timeout_atomic(ddp->regs + DISP_REG_MUTEX(mutex->id),
+ writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
+ writel(1, mtx->regs + DISP_REG_MUTEX(mutex->id));
+ if (readl_poll_timeout_atomic(mtx->regs + DISP_REG_MUTEX(mutex->id),
tmp, tmp & INT_MUTEX, 1, 10000))
pr_err("could not acquire mutex %d\n", mutex->id);
}

-void mtk_disp_mutex_release(struct mtk_disp_mutex *mutex)
+void mtk_mutex_release(struct mtk_mutex *mutex)
{
- struct mtk_ddp *ddp = container_of(mutex, struct mtk_ddp,
- mutex[mutex->id]);
+ struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
+ mutex[mutex->id]);

- writel(0, ddp->regs + DISP_REG_MUTEX(mutex->id));
+ writel(0, mtx->regs + DISP_REG_MUTEX(mutex->id));
}

-static int mtk_ddp_probe(struct platform_device *pdev)
+static int mtk_mutex_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
- struct mtk_ddp *ddp;
+ struct mtk_mutex_ctx *mtx;
struct resource *regs;
int i;

- ddp = devm_kzalloc(dev, sizeof(*ddp), GFP_KERNEL);
- if (!ddp)
+ mtx = devm_kzalloc(dev, sizeof(*mtx), GFP_KERNEL);
+ if (!mtx)
return -ENOMEM;

for (i = 0; i < 10; i++)
- ddp->mutex[i].id = i;
+ mtx->mutex[i].id = i;

- ddp->data = of_device_get_match_data(dev);
+ mtx->data = of_device_get_match_data(dev);

- if (!ddp->data->no_clk) {
- ddp->clk = devm_clk_get(dev, NULL);
- if (IS_ERR(ddp->clk)) {
- if (PTR_ERR(ddp->clk) != -EPROBE_DEFER)
+ if (!mtx->data->no_clk) {
+ mtx->clk = devm_clk_get(dev, NULL);
+ if (IS_ERR(mtx->clk)) {
+ if (PTR_ERR(mtx->clk) != -EPROBE_DEFER)
dev_err(dev, "Failed to get clock\n");
- return PTR_ERR(ddp->clk);
+ return PTR_ERR(mtx->clk);
}
}

regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- ddp->regs = devm_ioremap_resource(dev, regs);
- if (IS_ERR(ddp->regs)) {
+ mtx->regs = devm_ioremap_resource(dev, regs);
+ if (IS_ERR(mtx->regs)) {
dev_err(dev, "Failed to map mutex registers\n");
- return PTR_ERR(ddp->regs);
+ return PTR_ERR(mtx->regs);
}

- platform_set_drvdata(pdev, ddp);
+ platform_set_drvdata(pdev, mtx);

return 0;
}

-static int mtk_ddp_remove(struct platform_device *pdev)
+static int mtk_mutex_remove(struct platform_device *pdev)
{
return 0;
}

-static const struct of_device_id ddp_driver_dt_match[] = {
+static const struct of_device_id mutex_driver_dt_match[] = {
{ .compatible = "mediatek,mt2701-disp-mutex",
- .data = &mt2701_ddp_driver_data},
+ .data = &mt2701_mutex_driver_data},
{ .compatible = "mediatek,mt2712-disp-mutex",
- .data = &mt2712_ddp_driver_data},
+ .data = &mt2712_mutex_driver_data},
{ .compatible = "mediatek,mt8167-disp-mutex",
- .data = &mt8167_ddp_driver_data},
+ .data = &mt8167_mutex_driver_data},
{ .compatible = "mediatek,mt8173-disp-mutex",
- .data = &mt8173_ddp_driver_data},
+ .data = &mt8173_mutex_driver_data},
{},
};
-MODULE_DEVICE_TABLE(of, ddp_driver_dt_match);
+MODULE_DEVICE_TABLE(of, mutex_driver_dt_match);

-struct platform_driver mtk_ddp_driver = {
- .probe = mtk_ddp_probe,
- .remove = mtk_ddp_remove,
+struct platform_driver mtk_mutex_driver = {
+ .probe = mtk_mutex_probe,
+ .remove = mtk_mutex_remove,
.driver = {
- .name = "mediatek-ddp",
+ .name = "mediatek-mutex",
.owner = THIS_MODULE,
- .of_match_table = ddp_driver_dt_match,
+ .of_match_table = mutex_driver_dt_match,
},
};
diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.h b/drivers/gpu/drm/mediatek/mtk_mutex.h
index 3abcc20e88fb..b678e0988a37 100644
--- a/drivers/gpu/drm/mediatek/mtk_mutex.h
+++ b/drivers/gpu/drm/mediatek/mtk_mutex.h
@@ -8,19 +8,19 @@

struct regmap;
struct device;
-struct mtk_disp_mutex;
+struct mtk_mutex;

-struct mtk_disp_mutex *mtk_disp_mutex_get(struct device *dev, unsigned int id);
-int mtk_disp_mutex_prepare(struct mtk_disp_mutex *mutex);
-void mtk_disp_mutex_add_comp(struct mtk_disp_mutex *mutex,
- enum mtk_ddp_comp_id id);
-void mtk_disp_mutex_enable(struct mtk_disp_mutex *mutex);
-void mtk_disp_mutex_disable(struct mtk_disp_mutex *mutex);
-void mtk_disp_mutex_remove_comp(struct mtk_disp_mutex *mutex,
- enum mtk_ddp_comp_id id);
-void mtk_disp_mutex_unprepare(struct mtk_disp_mutex *mutex);
-void mtk_disp_mutex_put(struct mtk_disp_mutex *mutex);
-void mtk_disp_mutex_acquire(struct mtk_disp_mutex *mutex);
-void mtk_disp_mutex_release(struct mtk_disp_mutex *mutex);
+struct mtk_mutex *mtk_mutex_get(struct device *dev, unsigned int id);
+int mtk_mutex_prepare(struct mtk_mutex *mutex);
+void mtk_mutex_add_comp(struct mtk_mutex *mutex,
+ enum mtk_ddp_comp_id id);
+void mtk_mutex_enable(struct mtk_mutex *mutex);
+void mtk_mutex_disable(struct mtk_mutex *mutex);
+void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
+ enum mtk_ddp_comp_id id);
+void mtk_mutex_unprepare(struct mtk_mutex *mutex);
+void mtk_mutex_put(struct mtk_mutex *mutex);
+void mtk_mutex_acquire(struct mtk_mutex *mutex);
+void mtk_mutex_release(struct mtk_mutex *mutex);

#endif /* MTK_MUTEX_H */
--
2.17.1

2021-01-06 23:20:22

by Chun-Kuang Hu

[permalink] [raw]
Subject: [PATCH v2 1/5] drm/mediatek: Remove redundant file including

From: CK Hu <[email protected]>

Those file includings are useless, so remove them.

Signed-off-by: CK Hu <[email protected]>
Signed-off-by: Chun-Kuang Hu <[email protected]>
---
drivers/gpu/drm/mediatek/mtk_drm_ddp.h | 2 --
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 --
2 files changed, 4 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp.h b/drivers/gpu/drm/mediatek/mtk_drm_ddp.h
index 6b691a57be4a..a1ee21d15334 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_ddp.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp.h
@@ -6,8 +6,6 @@
#ifndef MTK_DRM_DDP_H
#define MTK_DRM_DDP_H

-#include "mtk_drm_ddp_comp.h"
-
struct regmap;
struct device;
struct mtk_disp_mutex;
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 8514d68bde32..25a24f69b986 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -10,7 +10,6 @@
#include <linux/of_address.h>
#include <linux/of_platform.h>
#include <linux/pm_runtime.h>
-#include <linux/soc/mediatek/mtk-mmsys.h>
#include <linux/dma-mapping.h>

#include <drm/drm_atomic.h>
@@ -26,7 +25,6 @@
#include <drm/drm_vblank.h>

#include "mtk_drm_crtc.h"
-#include "mtk_drm_ddp.h"
#include "mtk_drm_ddp_comp.h"
#include "mtk_drm_drv.h"
#include "mtk_drm_gem.h"
--
2.17.1

2021-01-06 23:20:48

by Chun-Kuang Hu

[permalink] [raw]
Subject: [PATCH v2 2/5] drm/mediatek: Rename file mtk_drm_ddp to mtk_mutex

From: CK Hu <[email protected]>

After mmsys routing function is moved out of mtk_drm_ddp.c, mtk_drm_ddp.c
has only mtk mutex function, so rename it to match the function in it.

Signed-off-by: CK Hu <[email protected]>
Signed-off-by: Chun-Kuang Hu <[email protected]>
---
drivers/gpu/drm/mediatek/Makefile | 4 ++--
drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +-
drivers/gpu/drm/mediatek/{mtk_drm_ddp.c => mtk_mutex.c} | 2 +-
drivers/gpu/drm/mediatek/{mtk_drm_ddp.h => mtk_mutex.h} | 6 +++---
4 files changed, 7 insertions(+), 7 deletions(-)
rename drivers/gpu/drm/mediatek/{mtk_drm_ddp.c => mtk_mutex.c} (99%)
rename drivers/gpu/drm/mediatek/{mtk_drm_ddp.h => mtk_mutex.h} (92%)

diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile
index a892edec5563..09979c4c340a 100644
--- a/drivers/gpu/drm/mediatek/Makefile
+++ b/drivers/gpu/drm/mediatek/Makefile
@@ -4,13 +4,13 @@ mediatek-drm-y := mtk_disp_color.o \
mtk_disp_ovl.o \
mtk_disp_rdma.o \
mtk_drm_crtc.o \
- mtk_drm_ddp.o \
mtk_drm_ddp_comp.o \
mtk_drm_drv.o \
mtk_drm_gem.o \
mtk_drm_plane.o \
mtk_dsi.o \
- mtk_dpi.o
+ mtk_dpi.o \
+ mtk_mutex.o

obj-$(CONFIG_DRM_MEDIATEK) += mediatek-drm.o

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index bf44a14ea0b6..fd97b7d195e3 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -19,10 +19,10 @@

#include "mtk_drm_drv.h"
#include "mtk_drm_crtc.h"
-#include "mtk_drm_ddp.h"
#include "mtk_drm_ddp_comp.h"
#include "mtk_drm_gem.h"
#include "mtk_drm_plane.h"
+#include "mtk_mutex.h"

/*
* struct mtk_drm_crtc - MediaTek specific crtc structure.
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp.c b/drivers/gpu/drm/mediatek/mtk_mutex.c
similarity index 99%
rename from drivers/gpu/drm/mediatek/mtk_drm_ddp.c
rename to drivers/gpu/drm/mediatek/mtk_mutex.c
index 1f99db6b1a42..1c8a253f4788 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_ddp.c
+++ b/drivers/gpu/drm/mediatek/mtk_mutex.c
@@ -10,8 +10,8 @@
#include <linux/platform_device.h>
#include <linux/regmap.h>

-#include "mtk_drm_ddp.h"
#include "mtk_drm_ddp_comp.h"
+#include "mtk_mutex.h"

#define MT2701_DISP_MUTEX0_MOD0 0x2c
#define MT2701_DISP_MUTEX0_SOF0 0x30
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp.h b/drivers/gpu/drm/mediatek/mtk_mutex.h
similarity index 92%
rename from drivers/gpu/drm/mediatek/mtk_drm_ddp.h
rename to drivers/gpu/drm/mediatek/mtk_mutex.h
index a1ee21d15334..3abcc20e88fb 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_ddp.h
+++ b/drivers/gpu/drm/mediatek/mtk_mutex.h
@@ -3,8 +3,8 @@
* Copyright (c) 2015 MediaTek Inc.
*/

-#ifndef MTK_DRM_DDP_H
-#define MTK_DRM_DDP_H
+#ifndef MTK_MUTEX_H
+#define MTK_MUTEX_H

struct regmap;
struct device;
@@ -23,4 +23,4 @@ void mtk_disp_mutex_put(struct mtk_disp_mutex *mutex);
void mtk_disp_mutex_acquire(struct mtk_disp_mutex *mutex);
void mtk_disp_mutex_release(struct mtk_disp_mutex *mutex);

-#endif /* MTK_DRM_DDP_H */
+#endif /* MTK_MUTEX_H */
--
2.17.1

2021-01-06 23:21:02

by Chun-Kuang Hu

[permalink] [raw]
Subject: [PATCH v2 4/5] drm/mediatek: Automatically search unclaimed mtk mutex in mtk_mutex_get()

From: CK Hu <[email protected]>

Moving mutex resource management from client driver to mutex driver
could prevent client drivers negotiating for resource management.

Signed-off-by: CK Hu <[email protected]>
Signed-off-by: Chun-Kuang Hu <[email protected]>
---
drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +-
drivers/gpu/drm/mediatek/mtk_mutex.c | 16 ++++++++--------
drivers/gpu/drm/mediatek/mtk_mutex.h | 2 +-
3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index bba87a036fa8..1e3a9450680b 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -773,7 +773,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
if (!mtk_crtc->ddp_comp)
return -ENOMEM;

- mtk_crtc->mutex = mtk_mutex_get(priv->mutex_dev, pipe);
+ mtk_crtc->mutex = mtk_mutex_get(priv->mutex_dev);
if (IS_ERR(mtk_crtc->mutex)) {
ret = PTR_ERR(mtk_crtc->mutex);
dev_err(dev, "Failed to get mutex: %d\n", ret);
diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/gpu/drm/mediatek/mtk_mutex.c
index 98a060bf225d..66344759e622 100644
--- a/drivers/gpu/drm/mediatek/mtk_mutex.c
+++ b/drivers/gpu/drm/mediatek/mtk_mutex.c
@@ -228,18 +228,18 @@ static const struct mtk_mutex_data mt8173_mutex_driver_data = {
.mutex_sof_reg = MT2701_MUTEX0_SOF0,
};

-struct mtk_mutex *mtk_mutex_get(struct device *dev, unsigned int id)
+struct mtk_mutex *mtk_mutex_get(struct device *dev)
{
struct mtk_mutex_ctx *mtx = dev_get_drvdata(dev);
+ int i;

- if (id >= 10)
- return ERR_PTR(-EINVAL);
- if (mtx->mutex[id].claimed)
- return ERR_PTR(-EBUSY);
-
- mtx->mutex[id].claimed = true;
+ for (i = 0; i < 10; i++)
+ if (!mtx->mutex[i].claimed) {
+ mtx->mutex[i].claimed = true;
+ return &mtx->mutex[i];
+ }

- return &mtx->mutex[id];
+ return ERR_PTR(-EBUSY);
}

void mtk_mutex_put(struct mtk_mutex *mutex)
diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.h b/drivers/gpu/drm/mediatek/mtk_mutex.h
index b678e0988a37..6fe4ffbde290 100644
--- a/drivers/gpu/drm/mediatek/mtk_mutex.h
+++ b/drivers/gpu/drm/mediatek/mtk_mutex.h
@@ -10,7 +10,7 @@ struct regmap;
struct device;
struct mtk_mutex;

-struct mtk_mutex *mtk_mutex_get(struct device *dev, unsigned int id);
+struct mtk_mutex *mtk_mutex_get(struct device *dev);
int mtk_mutex_prepare(struct mtk_mutex *mutex);
void mtk_mutex_add_comp(struct mtk_mutex *mutex,
enum mtk_ddp_comp_id id);
--
2.17.1

2021-01-06 23:21:12

by Chun-Kuang Hu

[permalink] [raw]
Subject: [PATCH v2 5/5] soc / drm: mediatek: Move mtk mutex driver to soc folder

From: CK Hu <[email protected]>

mtk mutex is used by DRM and MDP driver, and its function is SoC-specific,
so move it to soc folder.

Signed-off-by: CK Hu <[email protected]>
Signed-off-by: Chun-Kuang Hu <[email protected]>
---
drivers/gpu/drm/mediatek/Makefile | 3 +--
drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +-
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
drivers/gpu/drm/mediatek/mtk_drm_drv.h | 1 -
drivers/soc/mediatek/Makefile | 1 +
.../mtk_mutex.c => soc/mediatek/mtk-mutex.c} | 15 +++++++++++++--
.../linux/soc/mediatek/mtk-mutex.h | 0
7 files changed, 16 insertions(+), 7 deletions(-)
rename drivers/{gpu/drm/mediatek/mtk_mutex.c => soc/mediatek/mtk-mutex.c} (96%)
rename drivers/gpu/drm/mediatek/mtk_mutex.h => include/linux/soc/mediatek/mtk-mutex.h (100%)

diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile
index 09979c4c340a..01d06332f767 100644
--- a/drivers/gpu/drm/mediatek/Makefile
+++ b/drivers/gpu/drm/mediatek/Makefile
@@ -9,8 +9,7 @@ mediatek-drm-y := mtk_disp_color.o \
mtk_drm_gem.o \
mtk_drm_plane.o \
mtk_dsi.o \
- mtk_dpi.o \
- mtk_mutex.o
+ mtk_dpi.o

obj-$(CONFIG_DRM_MEDIATEK) += mediatek-drm.o

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index 1e3a9450680b..e9b6788d52cd 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -7,6 +7,7 @@
#include <linux/pm_runtime.h>
#include <linux/soc/mediatek/mtk-cmdq.h>
#include <linux/soc/mediatek/mtk-mmsys.h>
+#include <linux/soc/mediatek/mtk-mutex.h>

#include <asm/barrier.h>
#include <soc/mediatek/smi.h>
@@ -22,7 +23,6 @@
#include "mtk_drm_ddp_comp.h"
#include "mtk_drm_gem.h"
#include "mtk_drm_plane.h"
-#include "mtk_mutex.h"

/*
* struct mtk_drm_crtc - MediaTek specific crtc structure.
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index b99a06e6834e..5d39dd54255d 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -588,7 +588,6 @@ static struct platform_driver mtk_drm_platform_driver = {
};

static struct platform_driver * const mtk_drm_drivers[] = {
- &mtk_mutex_driver,
&mtk_disp_color_driver,
&mtk_disp_ovl_driver,
&mtk_disp_rdma_driver,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
index ae366868d01a..e8238fa4aa2a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
@@ -46,7 +46,6 @@ struct mtk_drm_private {
struct drm_atomic_state *suspend_state;
};

-extern struct platform_driver mtk_mutex_driver;
extern struct platform_driver mtk_disp_color_driver;
extern struct platform_driver mtk_disp_ovl_driver;
extern struct platform_driver mtk_disp_rdma_driver;
diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile
index b6908db534c2..90270f8114ed 100644
--- a/drivers/soc/mediatek/Makefile
+++ b/drivers/soc/mediatek/Makefile
@@ -6,3 +6,4 @@ 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) += mtk-mutex.o
diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/soc/mediatek/mtk-mutex.c
similarity index 96%
rename from drivers/gpu/drm/mediatek/mtk_mutex.c
rename to drivers/soc/mediatek/mtk-mutex.c
index 66344759e622..f531b119da7a 100644
--- a/drivers/gpu/drm/mediatek/mtk_mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -10,8 +10,7 @@
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/soc/mediatek/mtk-mmsys.h>
-
-#include "mtk_mutex.h"
+#include <linux/soc/mediatek/mtk-mutex.h>

#define MT2701_MUTEX0_MOD0 0x2c
#define MT2701_MUTEX0_SOF0 0x30
@@ -241,6 +240,7 @@ struct mtk_mutex *mtk_mutex_get(struct device *dev)

return ERR_PTR(-EBUSY);
}
+EXPORT_SYMBOL_GPL(mtk_mutex_get);

void mtk_mutex_put(struct mtk_mutex *mutex)
{
@@ -251,6 +251,7 @@ void mtk_mutex_put(struct mtk_mutex *mutex)

mutex->claimed = false;
}
+EXPORT_SYMBOL_GPL(mtk_mutex_put);

int mtk_mutex_prepare(struct mtk_mutex *mutex)
{
@@ -258,6 +259,7 @@ int mtk_mutex_prepare(struct mtk_mutex *mutex)
mutex[mutex->id]);
return clk_prepare_enable(mtx->clk);
}
+EXPORT_SYMBOL_GPL(mtk_mutex_prepare);

void mtk_mutex_unprepare(struct mtk_mutex *mutex)
{
@@ -265,6 +267,7 @@ void mtk_mutex_unprepare(struct mtk_mutex *mutex)
mutex[mutex->id]);
clk_disable_unprepare(mtx->clk);
}
+EXPORT_SYMBOL_GPL(mtk_mutex_unprepare);

void mtk_mutex_add_comp(struct mtk_mutex *mutex,
enum mtk_ddp_comp_id id)
@@ -316,6 +319,7 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex,
mtx->regs +
DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex->id));
}
+EXPORT_SYMBOL_GPL(mtk_mutex_add_comp);

void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
enum mtk_ddp_comp_id id)
@@ -355,6 +359,7 @@ void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
break;
}
}
+EXPORT_SYMBOL_GPL(mtk_mutex_remove_comp);

void mtk_mutex_enable(struct mtk_mutex *mutex)
{
@@ -365,6 +370,7 @@ void mtk_mutex_enable(struct mtk_mutex *mutex)

writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
}
+EXPORT_SYMBOL_GPL(mtk_mutex_enable);

void mtk_mutex_disable(struct mtk_mutex *mutex)
{
@@ -375,6 +381,7 @@ void mtk_mutex_disable(struct mtk_mutex *mutex)

writel(0, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
}
+EXPORT_SYMBOL_GPL(mtk_mutex_disable);

void mtk_mutex_acquire(struct mtk_mutex *mutex)
{
@@ -388,6 +395,7 @@ void mtk_mutex_acquire(struct mtk_mutex *mutex)
tmp, tmp & INT_MUTEX, 1, 10000))
pr_err("could not acquire mutex %d\n", mutex->id);
}
+EXPORT_SYMBOL_GPL(mtk_mutex_acquire);

void mtk_mutex_release(struct mtk_mutex *mutex)
{
@@ -396,6 +404,7 @@ void mtk_mutex_release(struct mtk_mutex *mutex)

writel(0, mtx->regs + DISP_REG_MUTEX(mutex->id));
}
+EXPORT_SYMBOL_GPL(mtk_mutex_release);

static int mtk_mutex_probe(struct platform_device *pdev)
{
@@ -461,3 +470,5 @@ struct platform_driver mtk_mutex_driver = {
.of_match_table = mutex_driver_dt_match,
},
};
+
+builtin_platform_driver(mtk_mutex_driver);
diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.h b/include/linux/soc/mediatek/mtk-mutex.h
similarity index 100%
rename from drivers/gpu/drm/mediatek/mtk_mutex.h
rename to include/linux/soc/mediatek/mtk-mutex.h
--
2.17.1

2021-01-19 23:45:23

by Chun-Kuang Hu

[permalink] [raw]
Subject: Re: [PATCH v2 0/5] Share mtk mutex driver for both DRM and MDP

Chun-Kuang Hu <[email protected]> 於 2021年1月7日 週四 上午7:17寫道:
>
> mtk mutex is a driver used by DRM and MDP [1], so this series move
> mtk mutex driver from DRM folder to soc folder, so it could be used
> by DRM and MDP.

Applied [1/5] ~ [4/5] to mediatek-drm-next [1].

[1] https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next

Regards,
Chun-Kuang.

>
> Changes in v2:
> 1. Rebase onto mediatek-drm-next [2].
> 2. Export symbol for mtk-mutex API.
>
> [1] https://patchwork.kernel.org/patch/11140751/
> [2] https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next
>
> CK Hu (5):
> drm/mediatek: Remove redundant file including
> drm/mediatek: Rename file mtk_drm_ddp to mtk_mutex
> drm/mediatek: Change disp/ddp term to mutex in mtk mutex driver
> drm/mediatek: Automatically search unclaimed mtk mutex in
> mtk_mutex_get()
> soc / drm: mediatek: Move mtk mutex driver to soc folder
>
> drivers/gpu/drm/mediatek/Makefile | 1 -
> drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 32 +-
> drivers/gpu/drm/mediatek/mtk_drm_ddp.h | 28 --
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 3 -
> drivers/gpu/drm/mediatek/mtk_drm_drv.h | 1 -
> drivers/soc/mediatek/Makefile | 1 +
> .../mediatek/mtk-mutex.c} | 328 +++++++++---------
> include/linux/soc/mediatek/mtk-mutex.h | 26 ++
> 8 files changed, 212 insertions(+), 208 deletions(-)
> delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_ddp.h
> rename drivers/{gpu/drm/mediatek/mtk_drm_ddp.c => soc/mediatek/mtk-mutex.c} (53%)
> create mode 100644 include/linux/soc/mediatek/mtk-mutex.h
>
> --
> 2.17.1
>

2021-01-20 18:42:53

by Matthias Brugger

[permalink] [raw]
Subject: Re: [PATCH v2 3/5] drm/mediatek: Change disp/ddp term to mutex in mtk mutex driver

On Thu, Jan 07, 2021 at 07:17:27AM +0800, Chun-Kuang Hu wrote:
> From: CK Hu <[email protected]>
>
> mtk mutex is used by both drm and mdp driver, so change disp/ddp term to
> mutex to show that it's a common driver for drm and mdp.
>
> Signed-off-by: CK Hu <[email protected]>
> Signed-off-by: Chun-Kuang Hu <[email protected]>
> ---
> drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 30 +--
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +-
> drivers/gpu/drm/mediatek/mtk_drm_drv.h | 2 +-
> drivers/gpu/drm/mediatek/mtk_mutex.c | 305 ++++++++++++------------
> drivers/gpu/drm/mediatek/mtk_mutex.h | 26 +-
> 5 files changed, 182 insertions(+), 183 deletions(-)
>
[...]
> diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/gpu/drm/mediatek/mtk_mutex.c
> index 1c8a253f4788..98a060bf225d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_mutex.c
> +++ b/drivers/gpu/drm/mediatek/mtk_mutex.c
[...]
>
> -static const struct of_device_id ddp_driver_dt_match[] = {
> +static const struct of_device_id mutex_driver_dt_match[] = {
> { .compatible = "mediatek,mt2701-disp-mutex",
> - .data = &mt2701_ddp_driver_data},
> + .data = &mt2701_mutex_driver_data},
> { .compatible = "mediatek,mt2712-disp-mutex",
> - .data = &mt2712_ddp_driver_data},
> + .data = &mt2712_mutex_driver_data},
> { .compatible = "mediatek,mt8167-disp-mutex",
> - .data = &mt8167_ddp_driver_data},
> + .data = &mt8167_mutex_driver_data},
> { .compatible = "mediatek,mt8173-disp-mutex",
> - .data = &mt8173_ddp_driver_data},
> + .data = &mt8173_mutex_driver_data},
> {},
> };
> -MODULE_DEVICE_TABLE(of, ddp_driver_dt_match);
> +MODULE_DEVICE_TABLE(of, mutex_driver_dt_match);

I think it would make sense in a follow-up patch to update the binding
to use "mediatek,mt2701-mutex" to reflect that mutex is used for drm and
mdp driver. Make sense?

Regards,
Matthias

2021-01-20 18:44:34

by Matthias Brugger

[permalink] [raw]
Subject: Re: [PATCH v2 5/5] soc / drm: mediatek: Move mtk mutex driver to soc folder

On Thu, Jan 07, 2021 at 07:17:29AM +0800, Chun-Kuang Hu wrote:
> From: CK Hu <[email protected]>
>
> mtk mutex is used by DRM and MDP driver, and its function is SoC-specific,
> so move it to soc folder.
>
> Signed-off-by: CK Hu <[email protected]>
> Signed-off-by: Chun-Kuang Hu <[email protected]>

Acked-by: Matthias Brugger <[email protected]>

Please take the patch through your tree. Thanks!

> ---
> drivers/gpu/drm/mediatek/Makefile | 3 +--
> drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +-
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
> drivers/gpu/drm/mediatek/mtk_drm_drv.h | 1 -
> drivers/soc/mediatek/Makefile | 1 +
> .../mtk_mutex.c => soc/mediatek/mtk-mutex.c} | 15 +++++++++++++--
> .../linux/soc/mediatek/mtk-mutex.h | 0
> 7 files changed, 16 insertions(+), 7 deletions(-)
> rename drivers/{gpu/drm/mediatek/mtk_mutex.c => soc/mediatek/mtk-mutex.c} (96%)
> rename drivers/gpu/drm/mediatek/mtk_mutex.h => include/linux/soc/mediatek/mtk-mutex.h (100%)
>
> diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile
> index 09979c4c340a..01d06332f767 100644
> --- a/drivers/gpu/drm/mediatek/Makefile
> +++ b/drivers/gpu/drm/mediatek/Makefile
> @@ -9,8 +9,7 @@ mediatek-drm-y := mtk_disp_color.o \
> mtk_drm_gem.o \
> mtk_drm_plane.o \
> mtk_dsi.o \
> - mtk_dpi.o \
> - mtk_mutex.o
> + mtk_dpi.o
>
> obj-$(CONFIG_DRM_MEDIATEK) += mediatek-drm.o
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> index 1e3a9450680b..e9b6788d52cd 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> @@ -7,6 +7,7 @@
> #include <linux/pm_runtime.h>
> #include <linux/soc/mediatek/mtk-cmdq.h>
> #include <linux/soc/mediatek/mtk-mmsys.h>
> +#include <linux/soc/mediatek/mtk-mutex.h>
>
> #include <asm/barrier.h>
> #include <soc/mediatek/smi.h>
> @@ -22,7 +23,6 @@
> #include "mtk_drm_ddp_comp.h"
> #include "mtk_drm_gem.h"
> #include "mtk_drm_plane.h"
> -#include "mtk_mutex.h"
>
> /*
> * struct mtk_drm_crtc - MediaTek specific crtc structure.
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index b99a06e6834e..5d39dd54255d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -588,7 +588,6 @@ static struct platform_driver mtk_drm_platform_driver = {
> };
>
> static struct platform_driver * const mtk_drm_drivers[] = {
> - &mtk_mutex_driver,
> &mtk_disp_color_driver,
> &mtk_disp_ovl_driver,
> &mtk_disp_rdma_driver,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> index ae366868d01a..e8238fa4aa2a 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> @@ -46,7 +46,6 @@ struct mtk_drm_private {
> struct drm_atomic_state *suspend_state;
> };
>
> -extern struct platform_driver mtk_mutex_driver;
> extern struct platform_driver mtk_disp_color_driver;
> extern struct platform_driver mtk_disp_ovl_driver;
> extern struct platform_driver mtk_disp_rdma_driver;
> diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile
> index b6908db534c2..90270f8114ed 100644
> --- a/drivers/soc/mediatek/Makefile
> +++ b/drivers/soc/mediatek/Makefile
> @@ -6,3 +6,4 @@ 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) += mtk-mutex.o
> diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/soc/mediatek/mtk-mutex.c
> similarity index 96%
> rename from drivers/gpu/drm/mediatek/mtk_mutex.c
> rename to drivers/soc/mediatek/mtk-mutex.c
> index 66344759e622..f531b119da7a 100644
> --- a/drivers/gpu/drm/mediatek/mtk_mutex.c
> +++ b/drivers/soc/mediatek/mtk-mutex.c
> @@ -10,8 +10,7 @@
> #include <linux/platform_device.h>
> #include <linux/regmap.h>
> #include <linux/soc/mediatek/mtk-mmsys.h>
> -
> -#include "mtk_mutex.h"
> +#include <linux/soc/mediatek/mtk-mutex.h>
>
> #define MT2701_MUTEX0_MOD0 0x2c
> #define MT2701_MUTEX0_SOF0 0x30
> @@ -241,6 +240,7 @@ struct mtk_mutex *mtk_mutex_get(struct device *dev)
>
> return ERR_PTR(-EBUSY);
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_get);
>
> void mtk_mutex_put(struct mtk_mutex *mutex)
> {
> @@ -251,6 +251,7 @@ void mtk_mutex_put(struct mtk_mutex *mutex)
>
> mutex->claimed = false;
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_put);
>
> int mtk_mutex_prepare(struct mtk_mutex *mutex)
> {
> @@ -258,6 +259,7 @@ int mtk_mutex_prepare(struct mtk_mutex *mutex)
> mutex[mutex->id]);
> return clk_prepare_enable(mtx->clk);
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_prepare);
>
> void mtk_mutex_unprepare(struct mtk_mutex *mutex)
> {
> @@ -265,6 +267,7 @@ void mtk_mutex_unprepare(struct mtk_mutex *mutex)
> mutex[mutex->id]);
> clk_disable_unprepare(mtx->clk);
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_unprepare);
>
> void mtk_mutex_add_comp(struct mtk_mutex *mutex,
> enum mtk_ddp_comp_id id)
> @@ -316,6 +319,7 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex,
> mtx->regs +
> DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex->id));
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_add_comp);
>
> void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
> enum mtk_ddp_comp_id id)
> @@ -355,6 +359,7 @@ void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
> break;
> }
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_remove_comp);
>
> void mtk_mutex_enable(struct mtk_mutex *mutex)
> {
> @@ -365,6 +370,7 @@ void mtk_mutex_enable(struct mtk_mutex *mutex)
>
> writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_enable);
>
> void mtk_mutex_disable(struct mtk_mutex *mutex)
> {
> @@ -375,6 +381,7 @@ void mtk_mutex_disable(struct mtk_mutex *mutex)
>
> writel(0, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_disable);
>
> void mtk_mutex_acquire(struct mtk_mutex *mutex)
> {
> @@ -388,6 +395,7 @@ void mtk_mutex_acquire(struct mtk_mutex *mutex)
> tmp, tmp & INT_MUTEX, 1, 10000))
> pr_err("could not acquire mutex %d\n", mutex->id);
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_acquire);
>
> void mtk_mutex_release(struct mtk_mutex *mutex)
> {
> @@ -396,6 +404,7 @@ void mtk_mutex_release(struct mtk_mutex *mutex)
>
> writel(0, mtx->regs + DISP_REG_MUTEX(mutex->id));
> }
> +EXPORT_SYMBOL_GPL(mtk_mutex_release);
>
> static int mtk_mutex_probe(struct platform_device *pdev)
> {
> @@ -461,3 +470,5 @@ struct platform_driver mtk_mutex_driver = {
> .of_match_table = mutex_driver_dt_match,
> },
> };
> +
> +builtin_platform_driver(mtk_mutex_driver);
> diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.h b/include/linux/soc/mediatek/mtk-mutex.h
> similarity index 100%
> rename from drivers/gpu/drm/mediatek/mtk_mutex.h
> rename to include/linux/soc/mediatek/mtk-mutex.h
> --
> 2.17.1
>
>
> _______________________________________________
> Linux-mediatek mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-mediatek

2021-01-21 03:38:14

by Chun-Kuang Hu

[permalink] [raw]
Subject: Re: [PATCH v2 3/5] drm/mediatek: Change disp/ddp term to mutex in mtk mutex driver

Hi, Matthias:

Matthias Brugger <[email protected]> 於 2021年1月21日 週四 上午2:27寫道:
>
> On Thu, Jan 07, 2021 at 07:17:27AM +0800, Chun-Kuang Hu wrote:
> > From: CK Hu <[email protected]>
> >
> > mtk mutex is used by both drm and mdp driver, so change disp/ddp term to
> > mutex to show that it's a common driver for drm and mdp.
> >
> > Signed-off-by: CK Hu <[email protected]>
> > Signed-off-by: Chun-Kuang Hu <[email protected]>
> > ---
> > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 30 +--
> > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 2 +-
> > drivers/gpu/drm/mediatek/mtk_mutex.c | 305 ++++++++++++------------
> > drivers/gpu/drm/mediatek/mtk_mutex.h | 26 +-
> > 5 files changed, 182 insertions(+), 183 deletions(-)
> >
> [...]
> > diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/gpu/drm/mediatek/mtk_mutex.c
> > index 1c8a253f4788..98a060bf225d 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_mutex.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_mutex.c
> [...]
> >
> > -static const struct of_device_id ddp_driver_dt_match[] = {
> > +static const struct of_device_id mutex_driver_dt_match[] = {
> > { .compatible = "mediatek,mt2701-disp-mutex",
> > - .data = &mt2701_ddp_driver_data},
> > + .data = &mt2701_mutex_driver_data},
> > { .compatible = "mediatek,mt2712-disp-mutex",
> > - .data = &mt2712_ddp_driver_data},
> > + .data = &mt2712_mutex_driver_data},
> > { .compatible = "mediatek,mt8167-disp-mutex",
> > - .data = &mt8167_ddp_driver_data},
> > + .data = &mt8167_mutex_driver_data},
> > { .compatible = "mediatek,mt8173-disp-mutex",
> > - .data = &mt8173_ddp_driver_data},
> > + .data = &mt8173_mutex_driver_data},
> > {},
> > };
> > -MODULE_DEVICE_TABLE(of, ddp_driver_dt_match);
> > +MODULE_DEVICE_TABLE(of, mutex_driver_dt_match);
>
> I think it would make sense in a follow-up patch to update the binding
> to use "mediatek,mt2701-mutex" to reflect that mutex is used for drm and
> mdp driver. Make sense?

Yes, it make sense. I would try to update the binding, but I wonder
device tree should be backward compatible? Let's discuss in that
follow-up patches.

Regards,
Chun-Kuang.

>
> Regards,
> Matthias

2021-01-21 06:42:07

by Chun-Kuang Hu

[permalink] [raw]
Subject: Re: [PATCH v2 5/5] soc / drm: mediatek: Move mtk mutex driver to soc folder

Hi, Matthias:

Matthias Brugger <[email protected]> 於 2021年1月21日 週四 上午2:33寫道:
>
> On Thu, Jan 07, 2021 at 07:17:29AM +0800, Chun-Kuang Hu wrote:
> > From: CK Hu <[email protected]>
> >
> > mtk mutex is used by DRM and MDP driver, and its function is SoC-specific,
> > so move it to soc folder.
> >
> > Signed-off-by: CK Hu <[email protected]>
> > Signed-off-by: Chun-Kuang Hu <[email protected]>
>
> Acked-by: Matthias Brugger <[email protected]>
>
> Please take the patch through your tree. Thanks!

Applied, thanks.

Regards,
Chun-Kuang.

>
> > ---
> > drivers/gpu/drm/mediatek/Makefile | 3 +--
> > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 -
> > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 1 -
> > drivers/soc/mediatek/Makefile | 1 +
> > .../mtk_mutex.c => soc/mediatek/mtk-mutex.c} | 15 +++++++++++++--
> > .../linux/soc/mediatek/mtk-mutex.h | 0
> > 7 files changed, 16 insertions(+), 7 deletions(-)
> > rename drivers/{gpu/drm/mediatek/mtk_mutex.c => soc/mediatek/mtk-mutex.c} (96%)
> > rename drivers/gpu/drm/mediatek/mtk_mutex.h => include/linux/soc/mediatek/mtk-mutex.h (100%)
> >
> > diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile
> > index 09979c4c340a..01d06332f767 100644
> > --- a/drivers/gpu/drm/mediatek/Makefile
> > +++ b/drivers/gpu/drm/mediatek/Makefile
> > @@ -9,8 +9,7 @@ mediatek-drm-y := mtk_disp_color.o \
> > mtk_drm_gem.o \
> > mtk_drm_plane.o \
> > mtk_dsi.o \
> > - mtk_dpi.o \
> > - mtk_mutex.o
> > + mtk_dpi.o
> >
> > obj-$(CONFIG_DRM_MEDIATEK) += mediatek-drm.o
> >
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > index 1e3a9450680b..e9b6788d52cd 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > @@ -7,6 +7,7 @@
> > #include <linux/pm_runtime.h>
> > #include <linux/soc/mediatek/mtk-cmdq.h>
> > #include <linux/soc/mediatek/mtk-mmsys.h>
> > +#include <linux/soc/mediatek/mtk-mutex.h>
> >
> > #include <asm/barrier.h>
> > #include <soc/mediatek/smi.h>
> > @@ -22,7 +23,6 @@
> > #include "mtk_drm_ddp_comp.h"
> > #include "mtk_drm_gem.h"
> > #include "mtk_drm_plane.h"
> > -#include "mtk_mutex.h"
> >
> > /*
> > * struct mtk_drm_crtc - MediaTek specific crtc structure.
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > index b99a06e6834e..5d39dd54255d 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > @@ -588,7 +588,6 @@ static struct platform_driver mtk_drm_platform_driver = {
> > };
> >
> > static struct platform_driver * const mtk_drm_drivers[] = {
> > - &mtk_mutex_driver,
> > &mtk_disp_color_driver,
> > &mtk_disp_ovl_driver,
> > &mtk_disp_rdma_driver,
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> > index ae366868d01a..e8238fa4aa2a 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> > @@ -46,7 +46,6 @@ struct mtk_drm_private {
> > struct drm_atomic_state *suspend_state;
> > };
> >
> > -extern struct platform_driver mtk_mutex_driver;
> > extern struct platform_driver mtk_disp_color_driver;
> > extern struct platform_driver mtk_disp_ovl_driver;
> > extern struct platform_driver mtk_disp_rdma_driver;
> > diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile
> > index b6908db534c2..90270f8114ed 100644
> > --- a/drivers/soc/mediatek/Makefile
> > +++ b/drivers/soc/mediatek/Makefile
> > @@ -6,3 +6,4 @@ 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) += mtk-mutex.o
> > diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/soc/mediatek/mtk-mutex.c
> > similarity index 96%
> > rename from drivers/gpu/drm/mediatek/mtk_mutex.c
> > rename to drivers/soc/mediatek/mtk-mutex.c
> > index 66344759e622..f531b119da7a 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_mutex.c
> > +++ b/drivers/soc/mediatek/mtk-mutex.c
> > @@ -10,8 +10,7 @@
> > #include <linux/platform_device.h>
> > #include <linux/regmap.h>
> > #include <linux/soc/mediatek/mtk-mmsys.h>
> > -
> > -#include "mtk_mutex.h"
> > +#include <linux/soc/mediatek/mtk-mutex.h>
> >
> > #define MT2701_MUTEX0_MOD0 0x2c
> > #define MT2701_MUTEX0_SOF0 0x30
> > @@ -241,6 +240,7 @@ struct mtk_mutex *mtk_mutex_get(struct device *dev)
> >
> > return ERR_PTR(-EBUSY);
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_get);
> >
> > void mtk_mutex_put(struct mtk_mutex *mutex)
> > {
> > @@ -251,6 +251,7 @@ void mtk_mutex_put(struct mtk_mutex *mutex)
> >
> > mutex->claimed = false;
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_put);
> >
> > int mtk_mutex_prepare(struct mtk_mutex *mutex)
> > {
> > @@ -258,6 +259,7 @@ int mtk_mutex_prepare(struct mtk_mutex *mutex)
> > mutex[mutex->id]);
> > return clk_prepare_enable(mtx->clk);
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_prepare);
> >
> > void mtk_mutex_unprepare(struct mtk_mutex *mutex)
> > {
> > @@ -265,6 +267,7 @@ void mtk_mutex_unprepare(struct mtk_mutex *mutex)
> > mutex[mutex->id]);
> > clk_disable_unprepare(mtx->clk);
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_unprepare);
> >
> > void mtk_mutex_add_comp(struct mtk_mutex *mutex,
> > enum mtk_ddp_comp_id id)
> > @@ -316,6 +319,7 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex,
> > mtx->regs +
> > DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex->id));
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_add_comp);
> >
> > void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
> > enum mtk_ddp_comp_id id)
> > @@ -355,6 +359,7 @@ void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
> > break;
> > }
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_remove_comp);
> >
> > void mtk_mutex_enable(struct mtk_mutex *mutex)
> > {
> > @@ -365,6 +370,7 @@ void mtk_mutex_enable(struct mtk_mutex *mutex)
> >
> > writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_enable);
> >
> > void mtk_mutex_disable(struct mtk_mutex *mutex)
> > {
> > @@ -375,6 +381,7 @@ void mtk_mutex_disable(struct mtk_mutex *mutex)
> >
> > writel(0, mtx->regs + DISP_REG_MUTEX_EN(mutex->id));
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_disable);
> >
> > void mtk_mutex_acquire(struct mtk_mutex *mutex)
> > {
> > @@ -388,6 +395,7 @@ void mtk_mutex_acquire(struct mtk_mutex *mutex)
> > tmp, tmp & INT_MUTEX, 1, 10000))
> > pr_err("could not acquire mutex %d\n", mutex->id);
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_acquire);
> >
> > void mtk_mutex_release(struct mtk_mutex *mutex)
> > {
> > @@ -396,6 +404,7 @@ void mtk_mutex_release(struct mtk_mutex *mutex)
> >
> > writel(0, mtx->regs + DISP_REG_MUTEX(mutex->id));
> > }
> > +EXPORT_SYMBOL_GPL(mtk_mutex_release);
> >
> > static int mtk_mutex_probe(struct platform_device *pdev)
> > {
> > @@ -461,3 +470,5 @@ struct platform_driver mtk_mutex_driver = {
> > .of_match_table = mutex_driver_dt_match,
> > },
> > };
> > +
> > +builtin_platform_driver(mtk_mutex_driver);
> > diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.h b/include/linux/soc/mediatek/mtk-mutex.h
> > similarity index 100%
> > rename from drivers/gpu/drm/mediatek/mtk_mutex.h
> > rename to include/linux/soc/mediatek/mtk-mutex.h
> > --
> > 2.17.1
> >
> >
> > _______________________________________________
> > Linux-mediatek mailing list
> > [email protected]
> > http://lists.infradead.org/mailman/listinfo/linux-mediatek

2021-01-21 08:30:05

by Matthias Brugger

[permalink] [raw]
Subject: Re: [PATCH v2 3/5] drm/mediatek: Change disp/ddp term to mutex in mtk mutex driver

On Thu, Jan 21, 2021 at 07:46:44AM +0800, Chun-Kuang Hu wrote:
> Hi, Matthias:
>
> Matthias Brugger <[email protected]> 於 2021年1月21日 週四 上午2:27寫道:
> >
> > On Thu, Jan 07, 2021 at 07:17:27AM +0800, Chun-Kuang Hu wrote:
> > > From: CK Hu <[email protected]>
> > >
> > > mtk mutex is used by both drm and mdp driver, so change disp/ddp term to
> > > mutex to show that it's a common driver for drm and mdp.
> > >
> > > Signed-off-by: CK Hu <[email protected]>
> > > Signed-off-by: Chun-Kuang Hu <[email protected]>
> > > ---
> > > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 30 +--
> > > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +-
> > > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 2 +-
> > > drivers/gpu/drm/mediatek/mtk_mutex.c | 305 ++++++++++++------------
> > > drivers/gpu/drm/mediatek/mtk_mutex.h | 26 +-
> > > 5 files changed, 182 insertions(+), 183 deletions(-)
> > >
> > [...]
> > > diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/gpu/drm/mediatek/mtk_mutex.c
> > > index 1c8a253f4788..98a060bf225d 100644
> > > --- a/drivers/gpu/drm/mediatek/mtk_mutex.c
> > > +++ b/drivers/gpu/drm/mediatek/mtk_mutex.c
> > [...]
> > >
> > > -static const struct of_device_id ddp_driver_dt_match[] = {
> > > +static const struct of_device_id mutex_driver_dt_match[] = {
> > > { .compatible = "mediatek,mt2701-disp-mutex",
> > > - .data = &mt2701_ddp_driver_data},
> > > + .data = &mt2701_mutex_driver_data},
> > > { .compatible = "mediatek,mt2712-disp-mutex",
> > > - .data = &mt2712_ddp_driver_data},
> > > + .data = &mt2712_mutex_driver_data},
> > > { .compatible = "mediatek,mt8167-disp-mutex",
> > > - .data = &mt8167_ddp_driver_data},
> > > + .data = &mt8167_mutex_driver_data},
> > > { .compatible = "mediatek,mt8173-disp-mutex",
> > > - .data = &mt8173_ddp_driver_data},
> > > + .data = &mt8173_mutex_driver_data},
> > > {},
> > > };
> > > -MODULE_DEVICE_TABLE(of, ddp_driver_dt_match);
> > > +MODULE_DEVICE_TABLE(of, mutex_driver_dt_match);
> >
> > I think it would make sense in a follow-up patch to update the binding
> > to use "mediatek,mt2701-mutex" to reflect that mutex is used for drm and
> > mdp driver. Make sense?
>
> Yes, it make sense. I would try to update the binding, but I wonder
> device tree should be backward compatible? Let's discuss in that
> follow-up patches.
>

From my understanding, we will need to keep the of_device_id entries for
the old binding in the driver (so that old DTs still work) while we
should enforce the new binding. I'm not sure if the yaml has a option
for out-of-date compatibles.

Regards,
Matthias

2021-01-21 23:17:55

by Chun-Kuang Hu

[permalink] [raw]
Subject: Re: [PATCH v2 3/5] drm/mediatek: Change disp/ddp term to mutex in mtk mutex driver

Matthias Brugger <[email protected]> 於 2021年1月21日 週四 下午4:19寫道:
>
> On Thu, Jan 21, 2021 at 07:46:44AM +0800, Chun-Kuang Hu wrote:
> > Hi, Matthias:
> >
> > Matthias Brugger <[email protected]> 於 2021年1月21日 週四 上午2:27寫道:
> > >
> > > On Thu, Jan 07, 2021 at 07:17:27AM +0800, Chun-Kuang Hu wrote:
> > > > From: CK Hu <[email protected]>
> > > >
> > > > mtk mutex is used by both drm and mdp driver, so change disp/ddp term to
> > > > mutex to show that it's a common driver for drm and mdp.
> > > >
> > > > Signed-off-by: CK Hu <[email protected]>
> > > > Signed-off-by: Chun-Kuang Hu <[email protected]>
> > > > ---
> > > > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 30 +--
> > > > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +-
> > > > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 2 +-
> > > > drivers/gpu/drm/mediatek/mtk_mutex.c | 305 ++++++++++++------------
> > > > drivers/gpu/drm/mediatek/mtk_mutex.h | 26 +-
> > > > 5 files changed, 182 insertions(+), 183 deletions(-)
> > > >
> > > [...]
> > > > diff --git a/drivers/gpu/drm/mediatek/mtk_mutex.c b/drivers/gpu/drm/mediatek/mtk_mutex.c
> > > > index 1c8a253f4788..98a060bf225d 100644
> > > > --- a/drivers/gpu/drm/mediatek/mtk_mutex.c
> > > > +++ b/drivers/gpu/drm/mediatek/mtk_mutex.c
> > > [...]
> > > >
> > > > -static const struct of_device_id ddp_driver_dt_match[] = {
> > > > +static const struct of_device_id mutex_driver_dt_match[] = {
> > > > { .compatible = "mediatek,mt2701-disp-mutex",
> > > > - .data = &mt2701_ddp_driver_data},
> > > > + .data = &mt2701_mutex_driver_data},
> > > > { .compatible = "mediatek,mt2712-disp-mutex",
> > > > - .data = &mt2712_ddp_driver_data},
> > > > + .data = &mt2712_mutex_driver_data},
> > > > { .compatible = "mediatek,mt8167-disp-mutex",
> > > > - .data = &mt8167_ddp_driver_data},
> > > > + .data = &mt8167_mutex_driver_data},
> > > > { .compatible = "mediatek,mt8173-disp-mutex",
> > > > - .data = &mt8173_ddp_driver_data},
> > > > + .data = &mt8173_mutex_driver_data},
> > > > {},
> > > > };
> > > > -MODULE_DEVICE_TABLE(of, ddp_driver_dt_match);
> > > > +MODULE_DEVICE_TABLE(of, mutex_driver_dt_match);
> > >
> > > I think it would make sense in a follow-up patch to update the binding
> > > to use "mediatek,mt2701-mutex" to reflect that mutex is used for drm and
> > > mdp driver. Make sense?
> >
> > Yes, it make sense. I would try to update the binding, but I wonder
> > device tree should be backward compatible? Let's discuss in that
> > follow-up patches.
> >
>
> From my understanding, we will need to keep the of_device_id entries for
> the old binding in the driver (so that old DTs still work) while we
> should enforce the new binding. I'm not sure if the yaml has a option
> for out-of-date compatibles.

OK, I would do it so and remove out-f-date compatibles in yaml at
first to see any feedback.

Regards,
Chun-Kuang.

>
> Regards,
> Matthias