Linux-mediatek Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1
@ 2023-10-16 10:39 Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 01/23] dt-bindings: display: mediatek: ethdr: Add compatible for MT8188 Hsiao Chien Sung
                   ` (18 more replies)
  0 siblings, 19 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:39 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

This series is based on mediatek-drm-next.

Changes in v8:
- Power on/off the components with .power_on() and .power_off()
- Remove mtk_padding_config()
- Remove Reviewed-by tags in "drm/mediatek: Add Padding to OVL adaptor"
  because of the modifications.

Changes in v7:
- Start/Stop the components in OVL Adaptor with function pointers
- Refine Padding driver
- Fix underrun when the layer is switching off

Changes in v6:
- Separate the commits into smaller ones
- Add DPI input mode setting
- Fix VDOSYS1 power-on issues

Changes in v5:
- Reuse .clk_enable/.clk_disable in struct mtk_ddp_comp_funcs
  in mtk_disp_ovl_adaptor.c
- Adjust commits order

Changes in v4:
- Add new functions in mtk_disp_ovl_adaptor.c to enable/disable
  components and reuse them when clock enable/disable
- Rename components in mtk_disp_ovl_adaptor.c and sort them in
  alphabetical order

Changes in v3:
- Define macro MMSYS_RST_NR in mtk-mmsys.h and update reset table
- Fix typos (ETDHR -> ETHDR, VSNYC -> VSYNC)
- Rebase dt-bindings on linux-next
- Refine description of Padding
- Squash reset bit map commits for VDO0 and VDO1 into one

Changes in v2:
- Remove redundant compatibles of MT8188 because it shares the same
  configuration with MT8195
- Separate dt-bindings by modules
- Support reset bit mapping in mmsys driver

Hsiao Chien Sung (23):
  dt-bindings: display: mediatek: ethdr: Add compatible for MT8188
  dt-bindings: display: mediatek: mdp-rdma: Add compatible for MT8188
  dt-bindings: display: mediatek: merge: Add compatible for MT8188
  dt-bindings: display: mediatek: padding: Add MT8188
  dt-bindings: arm: mediatek: Add compatible for MT8188
  dt-bindings: reset: mt8188: Add VDOSYS reset control bits
  soc: mediatek: Support MT8188 VDOSYS1 in mtk-mmsys
  soc: mediatek: Support MT8188 VDOSYS1 Padding in mtk-mmsys
  soc: mediatek: Support reset bit mapping in mmsys driver
  soc: mediatek: Add MT8188 VDOSYS reset bit map
  drm/mediatek: Rename OVL_ADAPTOR_TYPE_RDMA
  drm/mediatek: Refine device table of OVL adaptor
  drm/mediatek: Sort OVL adaptor components
  drm/mediatek: Add component ID to component match structure
  drm/mediatek: Manage component's clock with function pointers
  drm/mediatek: Start/Stop components with function pointers
  drm/mediatek: Support MT8188 Padding in display driver
  drm/mediatek: Add Padding to OVL adaptor
  drm/mediatek: Return error if MDP RDMA failed to enable the clock
  drm/mediatek: Remove the redundant driver data for DPI
  drm/mediatek: Fix underrun in VDO1 when switches off the layer
  drm/mediatek: Power on devices in OVL adaptor when atomic enable
  drm/mediatek: Support MT8188 VDOSYS1 in display driver

 .../bindings/arm/mediatek/mediatek,mmsys.yaml |   1 +
 .../display/mediatek/mediatek,ethdr.yaml      |   6 +-
 .../display/mediatek/mediatek,mdp-rdma.yaml   |   6 +-
 .../display/mediatek/mediatek,merge.yaml      |   3 +
 .../display/mediatek/mediatek,padding.yaml    |  81 +++++
 drivers/gpu/drm/mediatek/Makefile             |   3 +-
 drivers/gpu/drm/mediatek/mtk_disp_drv.h       |   8 +
 drivers/gpu/drm/mediatek/mtk_disp_merge.c     |   2 +-
 .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 283 +++++++++++-------
 drivers/gpu/drm/mediatek/mtk_dpi.c            |  16 +-
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c       |  28 +-
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c   |   2 +
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h   |  20 ++
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        |   5 +-
 drivers/gpu/drm/mediatek/mtk_drm_drv.h        |   2 +-
 drivers/gpu/drm/mediatek/mtk_mdp_rdma.c       |  19 +-
 drivers/gpu/drm/mediatek/mtk_padding.c        | 160 ++++++++++
 drivers/soc/mediatek/mt8188-mmsys.h           | 210 +++++++++++++
 drivers/soc/mediatek/mtk-mmsys.c              |  27 ++
 drivers/soc/mediatek/mtk-mmsys.h              |  32 ++
 drivers/soc/mediatek/mtk-mutex.c              |  51 ++++
 include/dt-bindings/reset/mt8188-resets.h     |  75 +++++
 include/linux/soc/mediatek/mtk-mmsys.h        |   8 +
 23 files changed, 895 insertions(+), 153 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,padding.yaml
 create mode 100644 drivers/gpu/drm/mediatek/mtk_padding.c

--
2.18.0



^ permalink raw reply	[flat|nested] 37+ messages in thread

* [PATCH v8 01/23] dt-bindings: display: mediatek: ethdr: Add compatible for MT8188
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
@ 2023-10-16 10:39 ` Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 02/23] dt-bindings: display: mediatek: mdp-rdma: " Hsiao Chien Sung
                   ` (17 subsequent siblings)
  18 siblings, 0 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:39 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

Add compatible name for MediaTek MT8188 ETHDR.

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 .../bindings/display/mediatek/mediatek,ethdr.yaml           | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml
index 801fa66ae615..677882348ede 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,ethdr.yaml
@@ -23,7 +23,11 @@ description:
 
 properties:
   compatible:
-    const: mediatek,mt8195-disp-ethdr
+    oneOf:
+      - const: mediatek,mt8195-disp-ethdr
+      - items:
+          - const: mediatek,mt8188-disp-ethdr
+          - const: mediatek,mt8195-disp-ethdr
 
   reg:
     maxItems: 7
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 02/23] dt-bindings: display: mediatek: mdp-rdma: Add compatible for MT8188
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 01/23] dt-bindings: display: mediatek: ethdr: Add compatible for MT8188 Hsiao Chien Sung
@ 2023-10-16 10:39 ` Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 03/23] dt-bindings: display: mediatek: merge: " Hsiao Chien Sung
                   ` (16 subsequent siblings)
  18 siblings, 0 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:39 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

Add compatible name for MediaTek MT8188 MDP-RDMA.

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 .../bindings/display/mediatek/mediatek,mdp-rdma.yaml        | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,mdp-rdma.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,mdp-rdma.yaml
index dd12e2ff685c..7570a0684967 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,mdp-rdma.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,mdp-rdma.yaml
@@ -21,7 +21,11 @@ description:
 
 properties:
   compatible:
-    const: mediatek,mt8195-vdo1-rdma
+    oneOf:
+      - const: mediatek,mt8195-vdo1-rdma
+      - items:
+          - const: mediatek,mt8188-vdo1-rdma
+          - const: mediatek,mt8195-vdo1-rdma
 
   reg:
     maxItems: 1
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 03/23] dt-bindings: display: mediatek: merge: Add compatible for MT8188
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 01/23] dt-bindings: display: mediatek: ethdr: Add compatible for MT8188 Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 02/23] dt-bindings: display: mediatek: mdp-rdma: " Hsiao Chien Sung
@ 2023-10-16 10:39 ` Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 07/23] soc: mediatek: Support MT8188 VDOSYS1 in mtk-mmsys Hsiao Chien Sung
                   ` (15 subsequent siblings)
  18 siblings, 0 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:39 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

Add compatible name for MediaTek MT8188 MERGE.

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 .../devicetree/bindings/display/mediatek/mediatek,merge.yaml   | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/display/mediatek/mediatek,merge.yaml b/Documentation/devicetree/bindings/display/mediatek/mediatek,merge.yaml
index eead5cb8636e..5c678695162e 100644
--- a/Documentation/devicetree/bindings/display/mediatek/mediatek,merge.yaml
+++ b/Documentation/devicetree/bindings/display/mediatek/mediatek,merge.yaml
@@ -27,6 +27,9 @@ properties:
       - items:
           - const: mediatek,mt6795-disp-merge
           - const: mediatek,mt8173-disp-merge
+      - items:
+          - const: mediatek,mt8188-disp-merge
+          - const: mediatek,mt8195-disp-merge
 
   reg:
     maxItems: 1
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 07/23] soc: mediatek: Support MT8188 VDOSYS1 in mtk-mmsys
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (2 preceding siblings ...)
  2023-10-16 10:39 ` [PATCH v8 03/23] dt-bindings: display: mediatek: merge: " Hsiao Chien Sung
@ 2023-10-16 10:39 ` Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 08/23] soc: mediatek: Support MT8188 VDOSYS1 Padding " Hsiao Chien Sung
                   ` (14 subsequent siblings)
  18 siblings, 0 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:39 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

- Add register definitions for MT8188
- Add VDOSYS1 routing table
- Update MUTEX definitions accordingly
- Set VSYNC length from 0x40 (default) to 1 since ETHDR is bypassed

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 drivers/soc/mediatek/mt8188-mmsys.h | 126 ++++++++++++++++++++++++++++
 drivers/soc/mediatek/mtk-mmsys.c    |  13 +++
 drivers/soc/mediatek/mtk-mmsys.h    |  29 +++++++
 drivers/soc/mediatek/mtk-mutex.c    |  35 ++++++++
 4 files changed, 203 insertions(+)

diff --git a/drivers/soc/mediatek/mt8188-mmsys.h b/drivers/soc/mediatek/mt8188-mmsys.h
index 448cc3761b43..a9490c3c4256 100644
--- a/drivers/soc/mediatek/mt8188-mmsys.h
+++ b/drivers/soc/mediatek/mt8188-mmsys.h
@@ -67,6 +67,56 @@
 #define MT8188_SOUT_DSC_WRAP0_OUT_TO_VPP_MERGE		BIT(18)
 #define MT8188_SOUT_DSC_WRAP0_OUT_TO_DISP_WDMA0		BIT(19)
 
+#define MT8188_VDO1_HDR_TOP_CFG					0xd00
+#define MT8188_VDO1_MIXER_IN1_ALPHA				0xd30
+#define MT8188_VDO1_MIXER_IN1_PAD				0xd40
+#define MT8188_VDO1_MIXER_VSYNC_LEN				0xd5c
+#define MT8188_VDO1_MERGE0_ASYNC_CFG_WD				0xe30
+#define MT8188_VDO1_HDRBE_ASYNC_CFG_WD				0xe70
+#define MT8188_VDO1_VPP_MERGE0_P0_SEL_IN			0xf04
+#define MT8188_VPP_MERGE0_P0_SEL_IN_FROM_MDP_RDMA0		1
+#define MT8188_VDO1_VPP_MERGE0_P1_SEL_IN			0xf08
+#define MT8188_VPP_MERGE0_P1_SEL_IN_FROM_MDP_RDMA1		1
+#define MT8188_VDO1_DISP_DPI1_SEL_IN				0xf10
+#define MT8188_DISP_DPI1_SEL_IN_FROM_VPP_MERGE4_MOUT		0
+#define MT8188_VDO1_DISP_DP_INTF0_SEL_IN			0xf14
+#define MT8188_DISP_DP_INTF0_SEL_IN_FROM_VPP_MERGE4_MOUT	0
+#define MT8188_VDO1_MERGE4_SOUT_SEL				0xf18
+#define MT8188_MERGE4_SOUT_TO_DPI1_SEL				BIT(2)
+#define MT8188_MERGE4_SOUT_TO_DP_INTF0_SEL			BIT(3)
+#define MT8188_VDO1_MIXER_IN1_SEL_IN				0xf24
+#define MT8188_MIXER_IN1_SEL_IN_FROM_MERGE0_ASYNC_SOUT		1
+#define MT8188_VDO1_MIXER_IN2_SEL_IN				0xf28
+#define MT8188_MIXER_IN2_SEL_IN_FROM_MERGE1_ASYNC_SOUT		1
+#define MT8188_VDO1_MIXER_IN3_SEL_IN				0xf2c
+#define MT8188_MIXER_IN3_SEL_IN_FROM_MERGE2_ASYNC_SOUT		1
+#define MT8188_VDO1_MIXER_IN4_SEL_IN				0xf30
+#define MT8188_MIXER_IN4_SEL_IN_FROM_MERGE3_ASYNC_SOUT		1
+#define MT8188_VDO1_MIXER_OUT_SOUT_SEL				0xf34
+#define MT8188_MIXER_SOUT_TO_MERGE4_ASYNC_SEL			1
+#define MT8188_VDO1_VPP_MERGE1_P0_SEL_IN			0xf3c
+#define MT8188_VPP_MERGE1_P0_SEL_IN_FROM_MDP_RDMA2		1
+#define MT8188_VDO1_MERGE0_ASYNC_SOUT_SEL			0xf40
+#define MT8188_SOUT_TO_MIXER_IN1_SEL				1
+#define MT8188_VDO1_MERGE1_ASYNC_SOUT_SEL			0xf44
+#define MT8188_SOUT_TO_MIXER_IN2_SEL				1
+#define MT8188_VDO1_MERGE2_ASYNC_SOUT_SEL			0xf48
+#define MT8188_SOUT_TO_MIXER_IN3_SEL				1
+#define MT8188_VDO1_MERGE3_ASYNC_SOUT_SEL			0xf4c
+#define MT8188_SOUT_TO_MIXER_IN4_SEL				1
+#define MT8188_VDO1_MERGE4_ASYNC_SEL_IN				0xf50
+#define MT8188_MERGE4_ASYNC_SEL_IN_FROM_MIXER_OUT_SOUT		1
+#define MT8188_VDO1_MIXER_IN1_SOUT_SEL				0xf58
+#define MT8188_MIXER_IN1_SOUT_TO_DISP_MIXER			0
+#define MT8188_VDO1_MIXER_IN2_SOUT_SEL				0xf5c
+#define MT8188_MIXER_IN2_SOUT_TO_DISP_MIXER			0
+#define MT8188_VDO1_MIXER_IN3_SOUT_SEL				0xf60
+#define MT8188_MIXER_IN3_SOUT_TO_DISP_MIXER			0
+#define MT8188_VDO1_MIXER_IN4_SOUT_SEL				0xf64
+#define MT8188_MIXER_IN4_SOUT_TO_DISP_MIXER			0
+#define MT8188_VDO1_MIXER_SOUT_SEL_IN				0xf68
+#define MT8188_MIXER_SOUT_SEL_IN_FROM_DISP_MIXER		0
+
 static const struct mtk_mmsys_routes mmsys_mt8188_routing_table[] = {
 	{
 		DDP_COMPONENT_OVL0, DDP_COMPONENT_RDMA0,
@@ -146,4 +196,80 @@ static const struct mtk_mmsys_routes mmsys_mt8188_routing_table[] = {
 	},
 };
 
+static const struct mtk_mmsys_routes mmsys_mt8188_vdo1_routing_table[] = {
+	{
+		DDP_COMPONENT_MDP_RDMA0, DDP_COMPONENT_MERGE1,
+		MT8188_VDO1_VPP_MERGE0_P0_SEL_IN, GENMASK(0, 0),
+		MT8188_VPP_MERGE0_P0_SEL_IN_FROM_MDP_RDMA0
+	}, {
+		DDP_COMPONENT_MDP_RDMA1, DDP_COMPONENT_MERGE1,
+		MT8188_VDO1_VPP_MERGE0_P1_SEL_IN, GENMASK(0, 0),
+		MT8188_VPP_MERGE0_P1_SEL_IN_FROM_MDP_RDMA1
+	}, {
+		DDP_COMPONENT_MDP_RDMA2, DDP_COMPONENT_MERGE2,
+		MT8188_VDO1_VPP_MERGE1_P0_SEL_IN, GENMASK(0, 0),
+		MT8188_VPP_MERGE1_P0_SEL_IN_FROM_MDP_RDMA2
+	}, {
+		DDP_COMPONENT_MERGE1, DDP_COMPONENT_ETHDR_MIXER,
+		MT8188_VDO1_MERGE0_ASYNC_SOUT_SEL, GENMASK(1, 0),
+		MT8188_SOUT_TO_MIXER_IN1_SEL
+	}, {
+		DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER,
+		MT8188_VDO1_MERGE1_ASYNC_SOUT_SEL, GENMASK(1, 0),
+		MT8188_SOUT_TO_MIXER_IN2_SEL
+	}, {
+		DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER,
+		MT8188_VDO1_MERGE2_ASYNC_SOUT_SEL, GENMASK(1, 0),
+		MT8188_SOUT_TO_MIXER_IN3_SEL
+	}, {
+		DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER,
+		MT8188_VDO1_MERGE3_ASYNC_SOUT_SEL, GENMASK(1, 0),
+		MT8188_SOUT_TO_MIXER_IN4_SEL
+	}, {
+		DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+		MT8188_VDO1_MIXER_OUT_SOUT_SEL, GENMASK(0, 0),
+		MT8188_MIXER_SOUT_TO_MERGE4_ASYNC_SEL
+	}, {
+		DDP_COMPONENT_MERGE1, DDP_COMPONENT_ETHDR_MIXER,
+		MT8188_VDO1_MIXER_IN1_SEL_IN, GENMASK(0, 0),
+		MT8188_MIXER_IN1_SEL_IN_FROM_MERGE0_ASYNC_SOUT
+	}, {
+		DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER,
+		MT8188_VDO1_MIXER_IN2_SEL_IN, GENMASK(0, 0),
+		MT8188_MIXER_IN2_SEL_IN_FROM_MERGE1_ASYNC_SOUT
+	}, {
+		DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER,
+		MT8188_VDO1_MIXER_IN3_SEL_IN, GENMASK(0, 0),
+		MT8188_MIXER_IN3_SEL_IN_FROM_MERGE2_ASYNC_SOUT
+	}, {
+		DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER,
+		MT8188_VDO1_MIXER_IN4_SEL_IN, GENMASK(0, 0),
+		MT8188_MIXER_IN4_SEL_IN_FROM_MERGE3_ASYNC_SOUT
+	}, {
+		DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+		MT8188_VDO1_MIXER_SOUT_SEL_IN, GENMASK(2, 0),
+		MT8188_MIXER_SOUT_SEL_IN_FROM_DISP_MIXER
+	}, {
+		DDP_COMPONENT_ETHDR_MIXER, DDP_COMPONENT_MERGE5,
+		MT8188_VDO1_MERGE4_ASYNC_SEL_IN, GENMASK(2, 0),
+		MT8188_MERGE4_ASYNC_SEL_IN_FROM_MIXER_OUT_SOUT
+	}, {
+		DDP_COMPONENT_MERGE5, DDP_COMPONENT_DPI1,
+		MT8188_VDO1_DISP_DPI1_SEL_IN, GENMASK(1, 0),
+		MT8188_DISP_DPI1_SEL_IN_FROM_VPP_MERGE4_MOUT
+	}, {
+		DDP_COMPONENT_MERGE5, DDP_COMPONENT_DPI1,
+		MT8188_VDO1_MERGE4_SOUT_SEL, GENMASK(1, 0),
+		MT8188_MERGE4_SOUT_TO_DPI1_SEL
+	}, {
+		DDP_COMPONENT_MERGE5, DDP_COMPONENT_DP_INTF1,
+		MT8188_VDO1_DISP_DP_INTF0_SEL_IN, GENMASK(1, 0),
+		MT8188_DISP_DP_INTF0_SEL_IN_FROM_VPP_MERGE4_MOUT
+	}, {
+		DDP_COMPONENT_MERGE5, DDP_COMPONENT_DP_INTF1,
+		MT8188_VDO1_MERGE4_SOUT_SEL, GENMASK(3, 0),
+		MT8188_MERGE4_SOUT_TO_DP_INTF0_SEL
+	}
+};
+
 #endif /* __SOC_MEDIATEK_MT8188_MMSYS_H */
diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index 9619faa796e8..b1db09e19905 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -89,6 +89,14 @@ static const struct mtk_mmsys_driver_data mt8188_vdosys0_driver_data = {
 	.num_routes = ARRAY_SIZE(mmsys_mt8188_routing_table),
 };
 
+static const struct mtk_mmsys_driver_data mt8188_vdosys1_driver_data = {
+	.clk_driver = "clk-mt8188-vdo1",
+	.routes = mmsys_mt8188_vdo1_routing_table,
+	.num_routes = ARRAY_SIZE(mmsys_mt8188_vdo1_routing_table),
+	.num_resets = 96,
+	.vsync_len = 1,
+};
+
 static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
 	.clk_driver = "clk-mt8192-mm",
 	.routes = mmsys_mt8192_routing_table,
@@ -169,6 +177,10 @@ void mtk_mmsys_ddp_connect(struct device *dev,
 		if (cur == routes[i].from_comp && next == routes[i].to_comp)
 			mtk_mmsys_update_bits(mmsys, routes[i].addr, routes[i].mask,
 					      routes[i].val, NULL);
+
+	if (mmsys->data->vsync_len)
+		mtk_mmsys_update_bits(mmsys, MT8188_VDO1_MIXER_VSYNC_LEN, GENMASK(31, 0),
+				      mmsys->data->vsync_len, NULL);
 }
 EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect);
 
@@ -431,6 +443,7 @@ static const struct of_device_id of_match_mtk_mmsys[] = {
 	{ .compatible = "mediatek,mt8183-mmsys", .data = &mt8183_mmsys_driver_data },
 	{ .compatible = "mediatek,mt8186-mmsys", .data = &mt8186_mmsys_driver_data },
 	{ .compatible = "mediatek,mt8188-vdosys0", .data = &mt8188_vdosys0_driver_data },
+	{ .compatible = "mediatek,mt8188-vdosys1", .data = &mt8188_vdosys1_driver_data },
 	{ .compatible = "mediatek,mt8192-mmsys", .data = &mt8192_mmsys_driver_data },
 	/* "mediatek,mt8195-mmsys" compatible is deprecated */
 	{ .compatible = "mediatek,mt8195-mmsys", .data = &mt8195_vdosys0_driver_data },
diff --git a/drivers/soc/mediatek/mtk-mmsys.h b/drivers/soc/mediatek/mtk-mmsys.h
index 6725403d2e3a..49851bc7aa9e 100644
--- a/drivers/soc/mediatek/mtk-mmsys.h
+++ b/drivers/soc/mediatek/mtk-mmsys.h
@@ -86,6 +86,34 @@ struct mtk_mmsys_routes {
 	u32 val;
 };
 
+/**
+ * struct mtk_mmsys_driver_data - settings for the mmsys
+ * @clk_driver: Clock driver name that the mmsys is using
+ *              (defined in drivers/clk/mediatek/clk-*.c).
+ * @routes: Routing table of the mmsys.
+ *          It provides mux settings from one module to another.
+ * @num_routes: Array size of the routes.
+ * @sw0_rst_offset: Register offset for the reset control.
+ * @num_resets: Number of reset bits that are defined
+ * @is_vppsys: Whether the mmsys is VPPSYS (Video Processing Pipe)
+ *             or VDOSYS (Video). Only VDOSYS needs to be added to drm driver.
+ * @vsync_len: VSYNC length of the MIXER.
+ *             VSYNC is usually triggered by the connector, so its length is a
+ *             fixed value when the frame rate is decided, but ETHDR and
+ *             MIXER generate their own VSYNC due to hardware design, therefore
+ *             MIXER has to sync with ETHDR by adjusting VSYNC length.
+ *             On MT8195, there is no such setting so we use the gap between
+ *             falling edge and rising edge of SOF (Start of Frame) signal to
+ *             do the job, but since MT8188, VSYNC_LEN setting is introduced to
+ *             solve the problem and is given 0x40 (ticks) as the default value.
+ *             Please notice that this value has to be set to 1 (minimum) if
+ *             ETHDR is bypassed, otherwise MIXER could wait too long and causing
+ *             underflow.
+ *
+ * Each MMSYS (multi-media system) may have different settings, they may use
+ * different clock sources, mux settings, reset control ...etc., and these
+ * differences are all stored here.
+ */
 struct mtk_mmsys_driver_data {
 	const char *clk_driver;
 	const struct mtk_mmsys_routes *routes;
@@ -93,6 +121,7 @@ struct mtk_mmsys_driver_data {
 	const u16 sw0_rst_offset;
 	const u32 num_resets;
 	const bool is_vppsys;
+	const u8 vsync_len;
 };
 
 /*
diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index b92cffec7be7..988a678819d9 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -134,6 +134,22 @@
 #define MT8188_MUTEX_MOD_DISP_POSTMASK0		24
 #define MT8188_MUTEX_MOD2_DISP_PWM0		33
 
+#define MT8188_MUTEX_MOD_DISP1_MDP_RDMA0	0
+#define MT8188_MUTEX_MOD_DISP1_MDP_RDMA1	1
+#define MT8188_MUTEX_MOD_DISP1_MDP_RDMA2	2
+#define MT8188_MUTEX_MOD_DISP1_MDP_RDMA3	3
+#define MT8188_MUTEX_MOD_DISP1_MDP_RDMA4	4
+#define MT8188_MUTEX_MOD_DISP1_MDP_RDMA5	5
+#define MT8188_MUTEX_MOD_DISP1_MDP_RDMA6	6
+#define MT8188_MUTEX_MOD_DISP1_MDP_RDMA7	7
+#define MT8188_MUTEX_MOD_DISP1_VPP_MERGE0	20
+#define MT8188_MUTEX_MOD_DISP1_VPP_MERGE1	21
+#define MT8188_MUTEX_MOD_DISP1_VPP_MERGE2	22
+#define MT8188_MUTEX_MOD_DISP1_VPP_MERGE3	23
+#define MT8188_MUTEX_MOD_DISP1_VPP_MERGE4	24
+#define MT8188_MUTEX_MOD_DISP1_DISP_MIXER	30
+#define MT8188_MUTEX_MOD_DISP1_DP_INTF1		39
+
 #define MT8195_MUTEX_MOD_DISP_OVL0		0
 #define MT8195_MUTEX_MOD_DISP_WDMA0		1
 #define MT8195_MUTEX_MOD_DISP_RDMA0		2
@@ -265,6 +281,7 @@
 #define MT8183_MUTEX_SOF_DPI0			2
 #define MT8188_MUTEX_SOF_DSI0			1
 #define MT8188_MUTEX_SOF_DP_INTF0		3
+#define MT8188_MUTEX_SOF_DP_INTF1		4
 #define MT8195_MUTEX_SOF_DSI0			1
 #define MT8195_MUTEX_SOF_DSI1			2
 #define MT8195_MUTEX_SOF_DP_INTF0		3
@@ -276,6 +293,7 @@
 #define MT8183_MUTEX_EOF_DPI0			(MT8183_MUTEX_SOF_DPI0 << 6)
 #define MT8188_MUTEX_EOF_DSI0			(MT8188_MUTEX_SOF_DSI0 << 7)
 #define MT8188_MUTEX_EOF_DP_INTF0		(MT8188_MUTEX_SOF_DP_INTF0 << 7)
+#define MT8188_MUTEX_EOF_DP_INTF1		(MT8188_MUTEX_SOF_DP_INTF1 << 7)
 #define MT8195_MUTEX_EOF_DSI0			(MT8195_MUTEX_SOF_DSI0 << 7)
 #define MT8195_MUTEX_EOF_DSI1			(MT8195_MUTEX_SOF_DSI1 << 7)
 #define MT8195_MUTEX_EOF_DP_INTF0		(MT8195_MUTEX_SOF_DP_INTF0 << 7)
@@ -446,6 +464,21 @@ static const unsigned int mt8188_mutex_mod[DDP_COMPONENT_ID_MAX] = {
 	[DDP_COMPONENT_DSI0] = MT8188_MUTEX_MOD_DISP_DSI0,
 	[DDP_COMPONENT_PWM0] = MT8188_MUTEX_MOD2_DISP_PWM0,
 	[DDP_COMPONENT_DP_INTF0] = MT8188_MUTEX_MOD_DISP_DP_INTF0,
+	[DDP_COMPONENT_DP_INTF1] = MT8188_MUTEX_MOD_DISP1_DP_INTF1,
+	[DDP_COMPONENT_ETHDR_MIXER] = MT8188_MUTEX_MOD_DISP1_DISP_MIXER,
+	[DDP_COMPONENT_MDP_RDMA0] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA0,
+	[DDP_COMPONENT_MDP_RDMA1] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA1,
+	[DDP_COMPONENT_MDP_RDMA2] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA2,
+	[DDP_COMPONENT_MDP_RDMA3] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA3,
+	[DDP_COMPONENT_MDP_RDMA4] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA4,
+	[DDP_COMPONENT_MDP_RDMA5] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA5,
+	[DDP_COMPONENT_MDP_RDMA6] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA6,
+	[DDP_COMPONENT_MDP_RDMA7] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA7,
+	[DDP_COMPONENT_MERGE1] = MT8188_MUTEX_MOD_DISP1_VPP_MERGE0,
+	[DDP_COMPONENT_MERGE2] = MT8188_MUTEX_MOD_DISP1_VPP_MERGE1,
+	[DDP_COMPONENT_MERGE3] = MT8188_MUTEX_MOD_DISP1_VPP_MERGE2,
+	[DDP_COMPONENT_MERGE4] = MT8188_MUTEX_MOD_DISP1_VPP_MERGE3,
+	[DDP_COMPONENT_MERGE5] = MT8188_MUTEX_MOD_DISP1_VPP_MERGE4,
 };
 
 static const unsigned int mt8192_mutex_mod[DDP_COMPONENT_ID_MAX] = {
@@ -606,6 +639,8 @@ static const unsigned int mt8188_mutex_sof[DDP_MUTEX_SOF_MAX] = {
 		MT8188_MUTEX_SOF_DSI0 | MT8188_MUTEX_EOF_DSI0,
 	[MUTEX_SOF_DP_INTF0] =
 		MT8188_MUTEX_SOF_DP_INTF0 | MT8188_MUTEX_EOF_DP_INTF0,
+	[MUTEX_SOF_DP_INTF1] =
+		MT8188_MUTEX_SOF_DP_INTF1 | MT8188_MUTEX_EOF_DP_INTF1,
 };
 
 static const unsigned int mt8195_mutex_sof[DDP_MUTEX_SOF_MAX] = {
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 08/23] soc: mediatek: Support MT8188 VDOSYS1 Padding in mtk-mmsys
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (3 preceding siblings ...)
  2023-10-16 10:39 ` [PATCH v8 07/23] soc: mediatek: Support MT8188 VDOSYS1 in mtk-mmsys Hsiao Chien Sung
@ 2023-10-16 10:39 ` Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 09/23] soc: mediatek: Support reset bit mapping in mmsys driver Hsiao Chien Sung
                   ` (13 subsequent siblings)
  18 siblings, 0 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:39 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

- Add Padding components
- Add Mutex module definitions for Padding

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 drivers/soc/mediatek/mtk-mutex.c       | 16 ++++++++++++++++
 include/linux/soc/mediatek/mtk-mmsys.h |  8 ++++++++
 2 files changed, 24 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index 988a678819d9..d52ce093adb7 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -142,6 +142,14 @@
 #define MT8188_MUTEX_MOD_DISP1_MDP_RDMA5	5
 #define MT8188_MUTEX_MOD_DISP1_MDP_RDMA6	6
 #define MT8188_MUTEX_MOD_DISP1_MDP_RDMA7	7
+#define MT8188_MUTEX_MOD_DISP1_PADDING0		8
+#define MT8188_MUTEX_MOD_DISP1_PADDING1		9
+#define MT8188_MUTEX_MOD_DISP1_PADDING2		10
+#define MT8188_MUTEX_MOD_DISP1_PADDING3		11
+#define MT8188_MUTEX_MOD_DISP1_PADDING4		12
+#define MT8188_MUTEX_MOD_DISP1_PADDING5		13
+#define MT8188_MUTEX_MOD_DISP1_PADDING6		14
+#define MT8188_MUTEX_MOD_DISP1_PADDING7		15
 #define MT8188_MUTEX_MOD_DISP1_VPP_MERGE0	20
 #define MT8188_MUTEX_MOD_DISP1_VPP_MERGE1	21
 #define MT8188_MUTEX_MOD_DISP1_VPP_MERGE2	22
@@ -474,6 +482,14 @@ static const unsigned int mt8188_mutex_mod[DDP_COMPONENT_ID_MAX] = {
 	[DDP_COMPONENT_MDP_RDMA5] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA5,
 	[DDP_COMPONENT_MDP_RDMA6] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA6,
 	[DDP_COMPONENT_MDP_RDMA7] = MT8188_MUTEX_MOD_DISP1_MDP_RDMA7,
+	[DDP_COMPONENT_PADDING0] = MT8188_MUTEX_MOD_DISP1_PADDING0,
+	[DDP_COMPONENT_PADDING1] = MT8188_MUTEX_MOD_DISP1_PADDING1,
+	[DDP_COMPONENT_PADDING2] = MT8188_MUTEX_MOD_DISP1_PADDING2,
+	[DDP_COMPONENT_PADDING3] = MT8188_MUTEX_MOD_DISP1_PADDING3,
+	[DDP_COMPONENT_PADDING4] = MT8188_MUTEX_MOD_DISP1_PADDING4,
+	[DDP_COMPONENT_PADDING5] = MT8188_MUTEX_MOD_DISP1_PADDING5,
+	[DDP_COMPONENT_PADDING6] = MT8188_MUTEX_MOD_DISP1_PADDING6,
+	[DDP_COMPONENT_PADDING7] = MT8188_MUTEX_MOD_DISP1_PADDING7,
 	[DDP_COMPONENT_MERGE1] = MT8188_MUTEX_MOD_DISP1_VPP_MERGE0,
 	[DDP_COMPONENT_MERGE2] = MT8188_MUTEX_MOD_DISP1_VPP_MERGE1,
 	[DDP_COMPONENT_MERGE3] = MT8188_MUTEX_MOD_DISP1_VPP_MERGE2,
diff --git a/include/linux/soc/mediatek/mtk-mmsys.h b/include/linux/soc/mediatek/mtk-mmsys.h
index 2475ef914746..4885b065b849 100644
--- a/include/linux/soc/mediatek/mtk-mmsys.h
+++ b/include/linux/soc/mediatek/mtk-mmsys.h
@@ -62,6 +62,14 @@ enum mtk_ddp_comp_id {
 	DDP_COMPONENT_OVL_2L1,
 	DDP_COMPONENT_OVL_2L2,
 	DDP_COMPONENT_OVL1,
+	DDP_COMPONENT_PADDING0,
+	DDP_COMPONENT_PADDING1,
+	DDP_COMPONENT_PADDING2,
+	DDP_COMPONENT_PADDING3,
+	DDP_COMPONENT_PADDING4,
+	DDP_COMPONENT_PADDING5,
+	DDP_COMPONENT_PADDING6,
+	DDP_COMPONENT_PADDING7,
 	DDP_COMPONENT_POSTMASK0,
 	DDP_COMPONENT_PWM0,
 	DDP_COMPONENT_PWM1,
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 09/23] soc: mediatek: Support reset bit mapping in mmsys driver
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (4 preceding siblings ...)
  2023-10-16 10:39 ` [PATCH v8 08/23] soc: mediatek: Support MT8188 VDOSYS1 Padding " Hsiao Chien Sung
@ 2023-10-16 10:39 ` Hsiao Chien Sung
  2023-10-16 10:39 ` [PATCH v8 12/23] drm/mediatek: Refine device table of OVL adaptor Hsiao Chien Sung
                   ` (12 subsequent siblings)
  18 siblings, 0 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:39 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

- Reset ID must starts from 0 and be consecutive, but
  the reset bits in our hardware design is not continuous,
  some bits are left unused, we need a map to solve the problem
- Use old style 1-to-1 mapping if .rst_tb is not defined

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 drivers/soc/mediatek/mtk-mmsys.c | 9 +++++++++
 drivers/soc/mediatek/mtk-mmsys.h | 3 +++
 2 files changed, 12 insertions(+)

diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
index b1db09e19905..3a7108eefe9d 100644
--- a/drivers/soc/mediatek/mtk-mmsys.c
+++ b/drivers/soc/mediatek/mtk-mmsys.c
@@ -314,6 +314,15 @@ static int mtk_mmsys_reset_update(struct reset_controller_dev *rcdev, unsigned l
 	u32 offset;
 	u32 reg;
 
+	if (mmsys->data->rst_tb) {
+		if (id >= mmsys->data->num_resets) {
+			dev_err(rcdev->dev, "Invalid reset ID: %lu (>=%u)\n",
+				id, mmsys->data->num_resets);
+			return -EINVAL;
+		}
+		id = mmsys->data->rst_tb[id];
+	}
+
 	offset = (id / MMSYS_SW_RESET_PER_REG) * sizeof(u32);
 	id = id % MMSYS_SW_RESET_PER_REG;
 	reg = mmsys->data->sw0_rst_offset + offset;
diff --git a/drivers/soc/mediatek/mtk-mmsys.h b/drivers/soc/mediatek/mtk-mmsys.h
index 49851bc7aa9e..c90419c96a7d 100644
--- a/drivers/soc/mediatek/mtk-mmsys.h
+++ b/drivers/soc/mediatek/mtk-mmsys.h
@@ -78,6 +78,8 @@
 #define DSI_SEL_IN_RDMA				0x1
 #define DSI_SEL_IN_MASK				0x1
 
+#define MMSYS_RST_NR(bank, bit) (((bank) * 32) + (bit))
+
 struct mtk_mmsys_routes {
 	u32 from_comp;
 	u32 to_comp;
@@ -119,6 +121,7 @@ struct mtk_mmsys_driver_data {
 	const struct mtk_mmsys_routes *routes;
 	const unsigned int num_routes;
 	const u16 sw0_rst_offset;
+	const u8 *rst_tb;
 	const u32 num_resets;
 	const bool is_vppsys;
 	const u8 vsync_len;
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 12/23] drm/mediatek: Refine device table of OVL adaptor
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (5 preceding siblings ...)
  2023-10-16 10:39 ` [PATCH v8 09/23] soc: mediatek: Support reset bit mapping in mmsys driver Hsiao Chien Sung
@ 2023-10-16 10:39 ` Hsiao Chien Sung
  2023-10-17  9:40   ` AngeloGioacchino Del Regno
  2023-10-16 10:40 ` [PATCH v8 13/23] drm/mediatek: Sort OVL adaptor components Hsiao Chien Sung
                   ` (11 subsequent siblings)
  18 siblings, 1 reply; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:39 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

- Adjust indentation to align with other files
- Sort device table in alphabetical order
- Add sentinel to device table

Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
index 33b0f74937a2..1b39ee6957fc 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
@@ -385,17 +385,10 @@ static int ovl_adaptor_comp_get_id(struct device *dev, struct device_node *node,
 }
 
 static const struct of_device_id mtk_ovl_adaptor_comp_dt_ids[] = {
-	{
-		.compatible = "mediatek,mt8195-vdo1-rdma",
-		.data = (void *)OVL_ADAPTOR_TYPE_MDP_RDMA,
-	}, {
-		.compatible = "mediatek,mt8195-disp-merge",
-		.data = (void *)OVL_ADAPTOR_TYPE_MERGE,
-	}, {
-		.compatible = "mediatek,mt8195-disp-ethdr",
-		.data = (void *)OVL_ADAPTOR_TYPE_ETHDR,
-	},
-	{},
+	{ .compatible = "mediatek,mt8195-disp-ethdr", .data = (void *)OVL_ADAPTOR_TYPE_ETHDR },
+	{ .compatible = "mediatek,mt8195-disp-merge", .data = (void *)OVL_ADAPTOR_TYPE_MERGE },
+	{ .compatible = "mediatek,mt8195-vdo1-rdma", .data = (void *)OVL_ADAPTOR_TYPE_MDP_RDMA },
+	{ /* sentinel */ }
 };
 
 static int compare_of(struct device *dev, void *data)
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 13/23] drm/mediatek: Sort OVL adaptor components
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (6 preceding siblings ...)
  2023-10-16 10:39 ` [PATCH v8 12/23] drm/mediatek: Refine device table of OVL adaptor Hsiao Chien Sung
@ 2023-10-16 10:40 ` Hsiao Chien Sung
  2023-10-17  9:40   ` AngeloGioacchino Del Regno
  2023-10-16 10:40 ` [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers Hsiao Chien Sung
                   ` (10 subsequent siblings)
  18 siblings, 1 reply; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:40 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

Sort OVL adaptor components' names in alphabetical order.

Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c    | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
index 1b39ee6957fc..094e508ac70b 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
@@ -26,13 +26,14 @@
 #define MTK_OVL_ADAPTOR_LAYER_NUM 4
 
 enum mtk_ovl_adaptor_comp_type {
-	OVL_ADAPTOR_TYPE_MDP_RDMA = 0,
-	OVL_ADAPTOR_TYPE_MERGE,
 	OVL_ADAPTOR_TYPE_ETHDR,
+	OVL_ADAPTOR_TYPE_MDP_RDMA,
+	OVL_ADAPTOR_TYPE_MERGE,
 	OVL_ADAPTOR_TYPE_NUM,
 };
 
 enum mtk_ovl_adaptor_comp_id {
+	OVL_ADAPTOR_ETHDR0,
 	OVL_ADAPTOR_MDP_RDMA0,
 	OVL_ADAPTOR_MDP_RDMA1,
 	OVL_ADAPTOR_MDP_RDMA2,
@@ -45,7 +46,6 @@ enum mtk_ovl_adaptor_comp_id {
 	OVL_ADAPTOR_MERGE1,
 	OVL_ADAPTOR_MERGE2,
 	OVL_ADAPTOR_MERGE3,
-	OVL_ADAPTOR_ETHDR0,
 	OVL_ADAPTOR_ID_MAX
 };
 
@@ -61,12 +61,13 @@ struct mtk_disp_ovl_adaptor {
 };
 
 static const char * const private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
+	[OVL_ADAPTOR_TYPE_ETHDR]	= "ethdr",
 	[OVL_ADAPTOR_TYPE_MDP_RDMA]	= "vdo1-rdma",
 	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
-	[OVL_ADAPTOR_TYPE_ETHDR]	= "ethdr",
 };
 
 static const struct ovl_adaptor_comp_match comp_matches[OVL_ADAPTOR_ID_MAX] = {
+	[OVL_ADAPTOR_ETHDR0]	= { OVL_ADAPTOR_TYPE_ETHDR, 0 },
 	[OVL_ADAPTOR_MDP_RDMA0]	= { OVL_ADAPTOR_TYPE_MDP_RDMA, 0 },
 	[OVL_ADAPTOR_MDP_RDMA1]	= { OVL_ADAPTOR_TYPE_MDP_RDMA, 1 },
 	[OVL_ADAPTOR_MDP_RDMA2]	= { OVL_ADAPTOR_TYPE_MDP_RDMA, 2 },
@@ -79,7 +80,6 @@ static const struct ovl_adaptor_comp_match comp_matches[OVL_ADAPTOR_ID_MAX] = {
 	[OVL_ADAPTOR_MERGE1]	= { OVL_ADAPTOR_TYPE_MERGE, 2 },
 	[OVL_ADAPTOR_MERGE2]	= { OVL_ADAPTOR_TYPE_MERGE, 3 },
 	[OVL_ADAPTOR_MERGE3]	= { OVL_ADAPTOR_TYPE_MERGE, 4 },
-	[OVL_ADAPTOR_ETHDR0]	= { OVL_ADAPTOR_TYPE_ETHDR, 0 },
 };
 
 void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int idx,
@@ -313,6 +313,7 @@ size_t mtk_ovl_adaptor_get_num_formats(struct device *dev)
 
 void mtk_ovl_adaptor_add_comp(struct device *dev, struct mtk_mutex *mutex)
 {
+	mtk_mutex_add_comp(mutex, DDP_COMPONENT_ETHDR_MIXER);
 	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA0);
 	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA1);
 	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MDP_RDMA2);
@@ -325,11 +326,11 @@ void mtk_ovl_adaptor_add_comp(struct device *dev, struct mtk_mutex *mutex)
 	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MERGE2);
 	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MERGE3);
 	mtk_mutex_add_comp(mutex, DDP_COMPONENT_MERGE4);
-	mtk_mutex_add_comp(mutex, DDP_COMPONENT_ETHDR_MIXER);
 }
 
 void mtk_ovl_adaptor_remove_comp(struct device *dev, struct mtk_mutex *mutex)
 {
+	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_ETHDR_MIXER);
 	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA0);
 	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA1);
 	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MDP_RDMA2);
@@ -342,11 +343,11 @@ void mtk_ovl_adaptor_remove_comp(struct device *dev, struct mtk_mutex *mutex)
 	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MERGE2);
 	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MERGE3);
 	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_MERGE4);
-	mtk_mutex_remove_comp(mutex, DDP_COMPONENT_ETHDR_MIXER);
 }
 
 void mtk_ovl_adaptor_connect(struct device *dev, struct device *mmsys_dev, unsigned int next)
 {
+	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_ETHDR_MIXER, next);
 	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MDP_RDMA0, DDP_COMPONENT_MERGE1);
 	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MDP_RDMA1, DDP_COMPONENT_MERGE1);
 	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MDP_RDMA2, DDP_COMPONENT_MERGE2);
@@ -354,11 +355,11 @@ void mtk_ovl_adaptor_connect(struct device *dev, struct device *mmsys_dev, unsig
 	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER);
 	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER);
 	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER);
-	mtk_mmsys_ddp_connect(mmsys_dev, DDP_COMPONENT_ETHDR_MIXER, next);
 }
 
 void mtk_ovl_adaptor_disconnect(struct device *dev, struct device *mmsys_dev, unsigned int next)
 {
+	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_ETHDR_MIXER, next);
 	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MDP_RDMA0, DDP_COMPONENT_MERGE1);
 	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MDP_RDMA1, DDP_COMPONENT_MERGE1);
 	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MDP_RDMA2, DDP_COMPONENT_MERGE2);
@@ -366,7 +367,6 @@ void mtk_ovl_adaptor_disconnect(struct device *dev, struct device *mmsys_dev, un
 	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MERGE2, DDP_COMPONENT_ETHDR_MIXER);
 	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MERGE3, DDP_COMPONENT_ETHDR_MIXER);
 	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_MERGE4, DDP_COMPONENT_ETHDR_MIXER);
-	mtk_mmsys_ddp_disconnect(mmsys_dev, DDP_COMPONENT_ETHDR_MIXER, next);
 }
 
 static int ovl_adaptor_comp_get_id(struct device *dev, struct device_node *node,
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (7 preceding siblings ...)
  2023-10-16 10:40 ` [PATCH v8 13/23] drm/mediatek: Sort OVL adaptor components Hsiao Chien Sung
@ 2023-10-16 10:40 ` Hsiao Chien Sung
  2023-10-17  9:41   ` AngeloGioacchino Del Regno
  2023-10-17  9:47   ` AngeloGioacchino Del Regno
  2023-10-16 10:40 ` [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor Hsiao Chien Sung
                   ` (9 subsequent siblings)
  18 siblings, 2 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:40 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

By registering component related functions to the pointers,
we can easily manage them within a for-loop and simplify the
logic of clock control significantly.

Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 111 +++++++-----------
 1 file changed, 44 insertions(+), 67 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
index 60e5dfe9ef0d..fffef2a4f919 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
@@ -53,6 +53,7 @@ struct ovl_adaptor_comp_match {
 	enum mtk_ovl_adaptor_comp_type type;
 	enum mtk_ddp_comp_id comp_id;
 	int alias_id;
+	const struct mtk_ddp_comp_funcs *funcs;
 };
 
 struct mtk_disp_ovl_adaptor {
@@ -67,20 +68,35 @@ static const char * const private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
 	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
 };
 
+static const struct mtk_ddp_comp_funcs _ethdr = {
+	.clk_enable = mtk_ethdr_clk_enable,
+	.clk_disable = mtk_ethdr_clk_disable,
+};
+
+static const struct mtk_ddp_comp_funcs _merge = {
+	.clk_enable = mtk_merge_clk_enable,
+	.clk_disable = mtk_merge_clk_disable,
+};
+
+static const struct mtk_ddp_comp_funcs _rdma = {
+	.clk_enable = mtk_mdp_rdma_clk_enable,
+	.clk_disable = mtk_mdp_rdma_clk_disable,
+};
+
 static const struct ovl_adaptor_comp_match comp_matches[OVL_ADAPTOR_ID_MAX] = {
-	[OVL_ADAPTOR_ETHDR0] = { OVL_ADAPTOR_TYPE_ETHDR, DDP_COMPONENT_ETHDR_MIXER, 0 },
-	[OVL_ADAPTOR_MDP_RDMA0] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA0, 0 },
-	[OVL_ADAPTOR_MDP_RDMA1] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA1, 1 },
-	[OVL_ADAPTOR_MDP_RDMA2] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA2, 2 },
-	[OVL_ADAPTOR_MDP_RDMA3] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA3, 3 },
-	[OVL_ADAPTOR_MDP_RDMA4] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA4, 4 },
-	[OVL_ADAPTOR_MDP_RDMA5] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA5, 5 },
-	[OVL_ADAPTOR_MDP_RDMA6] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA6, 6 },
-	[OVL_ADAPTOR_MDP_RDMA7] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA7, 7 },
-	[OVL_ADAPTOR_MERGE0] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE1, 1 },
-	[OVL_ADAPTOR_MERGE1] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE2, 2 },
-	[OVL_ADAPTOR_MERGE2] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE3, 3 },
-	[OVL_ADAPTOR_MERGE3] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE4, 4 },
+	[OVL_ADAPTOR_ETHDR0] = { OVL_ADAPTOR_TYPE_ETHDR, DDP_COMPONENT_ETHDR_MIXER, 0, &_ethdr },
+	[OVL_ADAPTOR_MDP_RDMA0] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA0, 0, &_rdma },
+	[OVL_ADAPTOR_MDP_RDMA1] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA1, 1, &_rdma },
+	[OVL_ADAPTOR_MDP_RDMA2] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA2, 2, &_rdma },
+	[OVL_ADAPTOR_MDP_RDMA3] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA3, 3, &_rdma },
+	[OVL_ADAPTOR_MDP_RDMA4] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA4, 4, &_rdma },
+	[OVL_ADAPTOR_MDP_RDMA5] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA5, 5, &_rdma },
+	[OVL_ADAPTOR_MDP_RDMA6] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA6, 6, &_rdma },
+	[OVL_ADAPTOR_MDP_RDMA7] = { OVL_ADAPTOR_TYPE_MDP_RDMA, DDP_COMPONENT_MDP_RDMA7, 7, &_rdma },
+	[OVL_ADAPTOR_MERGE0] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE1, 1, &_merge },
+	[OVL_ADAPTOR_MERGE1] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE2, 2, &_merge },
+	[OVL_ADAPTOR_MERGE2] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE3, 3, &_merge },
+	[OVL_ADAPTOR_MERGE3] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE4, 4, &_merge },
 };
 
 void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int idx,
@@ -186,73 +202,34 @@ void mtk_ovl_adaptor_stop(struct device *dev)
 
 int mtk_ovl_adaptor_clk_enable(struct device *dev)
 {
-	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
-	struct device *comp;
-	int ret;
 	int i;
-
-	for (i = 0; i < OVL_ADAPTOR_MERGE0; i++) {
-		comp = ovl_adaptor->ovl_adaptor_comp[i];
-		ret = pm_runtime_get_sync(comp);
-		if (ret < 0) {
-			dev_err(dev, "Failed to enable power domain %d, err %d\n", i, ret);
-			goto pwr_err;
-		}
-	}
+	int ret;
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
 
 	for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) {
-		comp = ovl_adaptor->ovl_adaptor_comp[i];
-
-		if (i < OVL_ADAPTOR_MERGE0)
-			ret = mtk_mdp_rdma_clk_enable(comp);
-		else if (i < OVL_ADAPTOR_ETHDR0)
-			ret = mtk_merge_clk_enable(comp);
-		else
-			ret = mtk_ethdr_clk_enable(comp);
+		dev = ovl_adaptor->ovl_adaptor_comp[i];
+		if (!dev)
+			continue;
+		ret = comp_matches[i].funcs->clk_enable(dev);
 		if (ret) {
-			dev_err(dev, "Failed to enable clock %d, err %d\n", i, ret);
-			goto clk_err;
+			while (--i >= 0)
+				comp_matches[i].funcs->clk_disable(dev);
+			return ret;
 		}
 	}
-
-	return ret;
-
-clk_err:
-	while (--i >= 0) {
-		comp = ovl_adaptor->ovl_adaptor_comp[i];
-		if (i < OVL_ADAPTOR_MERGE0)
-			mtk_mdp_rdma_clk_disable(comp);
-		else if (i < OVL_ADAPTOR_ETHDR0)
-			mtk_merge_clk_disable(comp);
-		else
-			mtk_ethdr_clk_disable(comp);
-	}
-	i = OVL_ADAPTOR_MERGE0;
-
-pwr_err:
-	while (--i >= 0)
-		pm_runtime_put(ovl_adaptor->ovl_adaptor_comp[i]);
-
-	return ret;
+	return 0;
 }
 
 void mtk_ovl_adaptor_clk_disable(struct device *dev)
 {
-	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
-	struct device *comp;
 	int i;
+	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
 
 	for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) {
-		comp = ovl_adaptor->ovl_adaptor_comp[i];
-
-		if (i < OVL_ADAPTOR_MERGE0) {
-			mtk_mdp_rdma_clk_disable(comp);
-			pm_runtime_put(comp);
-		} else if (i < OVL_ADAPTOR_ETHDR0) {
-			mtk_merge_clk_disable(comp);
-		} else {
-			mtk_ethdr_clk_disable(comp);
-		}
+		dev = ovl_adaptor->ovl_adaptor_comp[i];
+		if (!dev)
+			continue;
+		comp_matches[i].funcs->clk_disable(dev);
 	}
 }
 
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (8 preceding siblings ...)
  2023-10-16 10:40 ` [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers Hsiao Chien Sung
@ 2023-10-16 10:40 ` Hsiao Chien Sung
  2023-10-17  9:39   ` CK Hu (胡俊光)
  2023-10-17  9:47   ` AngeloGioacchino Del Regno
  2023-10-16 10:40 ` [PATCH v8 20/23] drm/mediatek: Remove the redundant driver data for DPI Hsiao Chien Sung
                   ` (8 subsequent siblings)
  18 siblings, 2 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:40 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

Add MT8188 Padding to OVL adaptor to probe the driver.

Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 26 +++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
index 354ba6186166..b80425360e76 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
@@ -29,6 +29,7 @@ enum mtk_ovl_adaptor_comp_type {
 	OVL_ADAPTOR_TYPE_ETHDR,
 	OVL_ADAPTOR_TYPE_MDP_RDMA,
 	OVL_ADAPTOR_TYPE_MERGE,
+	OVL_ADAPTOR_TYPE_PADDING,
 	OVL_ADAPTOR_TYPE_NUM,
 };
 
@@ -46,6 +47,14 @@ enum mtk_ovl_adaptor_comp_id {
 	OVL_ADAPTOR_MERGE1,
 	OVL_ADAPTOR_MERGE2,
 	OVL_ADAPTOR_MERGE3,
+	OVL_ADAPTOR_PADDING0,
+	OVL_ADAPTOR_PADDING1,
+	OVL_ADAPTOR_PADDING2,
+	OVL_ADAPTOR_PADDING3,
+	OVL_ADAPTOR_PADDING4,
+	OVL_ADAPTOR_PADDING5,
+	OVL_ADAPTOR_PADDING6,
+	OVL_ADAPTOR_PADDING7,
 	OVL_ADAPTOR_ID_MAX
 };
 
@@ -66,6 +75,7 @@ static const char * const private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
 	[OVL_ADAPTOR_TYPE_ETHDR]	= "ethdr",
 	[OVL_ADAPTOR_TYPE_MDP_RDMA]	= "vdo1-rdma",
 	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
+	[OVL_ADAPTOR_TYPE_PADDING]	= "padding",
 };
 
 static const struct mtk_ddp_comp_funcs _ethdr = {
@@ -80,6 +90,13 @@ static const struct mtk_ddp_comp_funcs _merge = {
 	.clk_disable = mtk_merge_clk_disable,
 };
 
+static const struct mtk_ddp_comp_funcs _padding = {
+	.clk_enable = mtk_padding_clk_enable,
+	.clk_disable = mtk_padding_clk_disable,
+	.start = mtk_padding_start,
+	.stop = mtk_padding_stop,
+};
+
 static const struct mtk_ddp_comp_funcs _rdma = {
 	.clk_enable = mtk_mdp_rdma_clk_enable,
 	.clk_disable = mtk_mdp_rdma_clk_disable,
@@ -99,6 +116,14 @@ static const struct ovl_adaptor_comp_match comp_matches[OVL_ADAPTOR_ID_MAX] = {
 	[OVL_ADAPTOR_MERGE1] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE2, 2, &_merge },
 	[OVL_ADAPTOR_MERGE2] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE3, 3, &_merge },
 	[OVL_ADAPTOR_MERGE3] = { OVL_ADAPTOR_TYPE_MERGE, DDP_COMPONENT_MERGE4, 4, &_merge },
+	[OVL_ADAPTOR_PADDING0] = { OVL_ADAPTOR_TYPE_PADDING, DDP_COMPONENT_PADDING0, 0, &_padding },
+	[OVL_ADAPTOR_PADDING1] = { OVL_ADAPTOR_TYPE_PADDING, DDP_COMPONENT_PADDING1, 1, &_padding },
+	[OVL_ADAPTOR_PADDING2] = { OVL_ADAPTOR_TYPE_PADDING, DDP_COMPONENT_PADDING2, 2, &_padding },
+	[OVL_ADAPTOR_PADDING3] = { OVL_ADAPTOR_TYPE_PADDING, DDP_COMPONENT_PADDING3, 3, &_padding },
+	[OVL_ADAPTOR_PADDING4] = { OVL_ADAPTOR_TYPE_PADDING, DDP_COMPONENT_PADDING4, 4, &_padding },
+	[OVL_ADAPTOR_PADDING5] = { OVL_ADAPTOR_TYPE_PADDING, DDP_COMPONENT_PADDING5, 5, &_padding },
+	[OVL_ADAPTOR_PADDING6] = { OVL_ADAPTOR_TYPE_PADDING, DDP_COMPONENT_PADDING6, 6, &_padding },
+	[OVL_ADAPTOR_PADDING7] = { OVL_ADAPTOR_TYPE_PADDING, DDP_COMPONENT_PADDING7, 7, &_padding },
 };
 
 void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int idx,
@@ -369,6 +394,7 @@ static int ovl_adaptor_comp_get_id(struct device *dev, struct device_node *node,
 }
 
 static const struct of_device_id mtk_ovl_adaptor_comp_dt_ids[] = {
+	{ .compatible = "mediatek,mt8188-padding", .data = (void *)OVL_ADAPTOR_TYPE_PADDING },
 	{ .compatible = "mediatek,mt8195-disp-ethdr", .data = (void *)OVL_ADAPTOR_TYPE_ETHDR },
 	{ .compatible = "mediatek,mt8195-disp-merge", .data = (void *)OVL_ADAPTOR_TYPE_MERGE },
 	{ .compatible = "mediatek,mt8195-vdo1-rdma", .data = (void *)OVL_ADAPTOR_TYPE_MDP_RDMA },
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 20/23] drm/mediatek: Remove the redundant driver data for DPI
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (9 preceding siblings ...)
  2023-10-16 10:40 ` [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor Hsiao Chien Sung
@ 2023-10-16 10:40 ` Hsiao Chien Sung
  2023-10-17  9:49   ` AngeloGioacchino Del Regno
  2023-10-16 10:40 ` [PATCH v8 21/23] drm/mediatek: Fix underrun in VDO1 when switches off the layer Hsiao Chien Sung
                   ` (7 subsequent siblings)
  18 siblings, 1 reply; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:40 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

DPI input is in 1T2P mode on both MT8195 and MT8188.
Remove the redundant driver data to align the settings, or
the screen will glitch.

Fixes: 2847cd7e6403 ("drm/mediatek: Add mt8188 dpi compatibles and platform data")

Reviewed-by: CK Hu <ck.hu@mediatek.com>
Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_dpi.c | 16 +---------------
 1 file changed, 1 insertion(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
index 1bf6041dd88b..d633f1ca3e71 100644
--- a/drivers/gpu/drm/mediatek/mtk_dpi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
@@ -967,20 +967,6 @@ static const struct mtk_dpi_conf mt8186_conf = {
 	.csc_enable_bit = CSC_ENABLE,
 };
 
-static const struct mtk_dpi_conf mt8188_dpintf_conf = {
-	.cal_factor = mt8195_dpintf_calculate_factor,
-	.max_clock_khz = 600000,
-	.output_fmts = mt8195_output_fmts,
-	.num_output_fmts = ARRAY_SIZE(mt8195_output_fmts),
-	.pixels_per_iter = 4,
-	.input_2pixel = false,
-	.dimension_mask = DPINTF_HPW_MASK,
-	.hvsize_mask = DPINTF_HSIZE_MASK,
-	.channel_swap_shift = DPINTF_CH_SWAP,
-	.yuv422_en_bit = DPINTF_YUV422_EN,
-	.csc_enable_bit = DPINTF_CSC_ENABLE,
-};
-
 static const struct mtk_dpi_conf mt8192_conf = {
 	.cal_factor = mt8183_calculate_factor,
 	.reg_h_fre_con = 0xe0,
@@ -1104,7 +1090,7 @@ static const struct of_device_id mtk_dpi_of_ids[] = {
 	{ .compatible = "mediatek,mt8173-dpi", .data = &mt8173_conf },
 	{ .compatible = "mediatek,mt8183-dpi", .data = &mt8183_conf },
 	{ .compatible = "mediatek,mt8186-dpi", .data = &mt8186_conf },
-	{ .compatible = "mediatek,mt8188-dp-intf", .data = &mt8188_dpintf_conf },
+	{ .compatible = "mediatek,mt8188-dp-intf", .data = &mt8195_dpintf_conf },
 	{ .compatible = "mediatek,mt8192-dpi", .data = &mt8192_conf },
 	{ .compatible = "mediatek,mt8195-dp-intf", .data = &mt8195_dpintf_conf },
 	{ /* sentinel */ },
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v8 21/23] drm/mediatek: Fix underrun in VDO1 when switches off the layer
  2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
                   ` (10 preceding siblings ...)
  2023-10-16 10:40 ` [PATCH v8 20/23] drm/mediatek: Remove the redundant driver data for DPI Hsiao Chien Sung
@ 2023-10-16 10:40 ` Hsiao Chien Sung
  2023-10-17  9:45   ` CK Hu (胡俊光)
  2023-10-17  9:50   ` AngeloGioacchino Del Regno
       [not found] ` <20231016104010.3270-5-shawn.sung@mediatek.com>
                   ` (6 subsequent siblings)
  18 siblings, 2 replies; 37+ messages in thread
From: Hsiao Chien Sung @ 2023-10-16 10:40 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno, CK Hu, Krzysztof Kozlowski,
	Matthias Brugger, Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	Mauro Carvalho Chehab, linux-kernel, dri-devel, Yongqiang Niu,
	Johnson Wang, Nancy . Lin, linux-mediatek, linux-arm-kernel,
	Daniel Vetter, Jason-JH . Lin, Hans Verkuil, Hsiao Chien Sung,
	Sean Paul, devicetree

Do not reset Merge while using CMDQ because reset API doesn't
wait for frame done event as CMDQ does and could lead to
underrun when the layer is switching off.

Fixes: aaf94f7c3ae6 ("drm/mediatek: Add display merge async reset control")

Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_disp_merge.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_disp_merge.c b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
index fd14a59bc951..c19fb1836034 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
@@ -104,7 +104,7 @@ void mtk_merge_stop_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt)
 	mtk_ddp_write(cmdq_pkt, 0, &priv->cmdq_reg, priv->regs,
 		      DISP_REG_MERGE_CTRL);
 
-	if (priv->async_clk)
+	if (!cmdq_pkt && priv->async_clk)
 		reset_control_reset(priv->reset_ctl);
 }
 
-- 
2.18.0



^ permalink raw reply related	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 04/23] dt-bindings: display: mediatek: padding: Add MT8188
       [not found] ` <20231016104010.3270-5-shawn.sung@mediatek.com>
@ 2023-10-17  9:31   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:31 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:39, Hsiao Chien Sung ha scritto:
> Padding is a new hardware module on MediaTek MT8188,
> add dt-bindings for it.
> 
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>




^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 17/23] drm/mediatek: Support MT8188 Padding in display driver
       [not found] ` <20231016104010.3270-18-shawn.sung@mediatek.com>
@ 2023-10-17  9:36   ` CK Hu (胡俊光)
  2023-10-17  9:44   ` AngeloGioacchino Del Regno
  1 sibling, 0 replies; 37+ messages in thread
From: CK Hu (胡俊光) @ 2023-10-17  9:36 UTC (permalink / raw)
  To: Shawn Sung (宋孝謙), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Hi, Hsiao-chien:

On Mon, 2023-10-16 at 18:40 +0800, Hsiao Chien Sung wrote:
> Padding is a new display module on MT8188, it provides ability
> to add pixels to width and height of a layer with specified colors.
> 
> Due to hardware design, Mixer in VDOSYS1 requires width of a layer
> to be 2-pixel-align, or 4-pixel-align when ETHDR is enabled,
> we need Padding to deal with odd width.

Reviewed-by: CK Hu <ck.hu@mediatek.com>

> 
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> ---
>  drivers/gpu/drm/mediatek/Makefile       |   3 +-
>  drivers/gpu/drm/mediatek/mtk_disp_drv.h |   4 +
>  drivers/gpu/drm/mediatek/mtk_drm_drv.c  |   1 +
>  drivers/gpu/drm/mediatek/mtk_drm_drv.h  |   2 +-
>  drivers/gpu/drm/mediatek/mtk_padding.c  | 160
> ++++++++++++++++++++++++
>  5 files changed, 168 insertions(+), 2 deletions(-)
>  create mode 100644 drivers/gpu/drm/mediatek/mtk_padding.c
> 
> diff --git a/drivers/gpu/drm/mediatek/Makefile
> b/drivers/gpu/drm/mediatek/Makefile
> index d4d193f60271..5e4436403b8d 100644
> --- a/drivers/gpu/drm/mediatek/Makefile
> +++ b/drivers/gpu/drm/mediatek/Makefile
> @@ -16,7 +16,8 @@ mediatek-drm-y := mtk_disp_aal.o \
>  		  mtk_dsi.o \
>  		  mtk_dpi.o \
>  		  mtk_ethdr.o \
> -		  mtk_mdp_rdma.o
> +		  mtk_mdp_rdma.o \
> +		  mtk_padding.o
>  
>  obj-$(CONFIG_DRM_MEDIATEK) += mediatek-drm.o
>  
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> index bf06ccb65652..e2b602037ac3 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> @@ -159,4 +159,8 @@ void mtk_mdp_rdma_config(struct device *dev,
> struct mtk_mdp_rdma_cfg *cfg,
>  const u32 *mtk_mdp_rdma_get_formats(struct device *dev);
>  size_t mtk_mdp_rdma_get_num_formats(struct device *dev);
>  
> +int mtk_padding_clk_enable(struct device *dev);
> +void mtk_padding_clk_disable(struct device *dev);
> +void mtk_padding_start(struct device *dev);
> +void mtk_padding_stop(struct device *dev);
>  #endif
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index cdce165c092e..62e6e9785443 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -1025,6 +1025,7 @@ static struct platform_driver * const
> mtk_drm_drivers[] = {
>  	&mtk_dsi_driver,
>  	&mtk_ethdr_driver,
>  	&mtk_mdp_rdma_driver,
> +	&mtk_padding_driver,
>  };
>  
>  static int __init mtk_drm_init(void)
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> index 8dca68ea1b94..d2efd715699f 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> @@ -72,5 +72,5 @@ extern struct platform_driver mtk_dpi_driver;
>  extern struct platform_driver mtk_dsi_driver;
>  extern struct platform_driver mtk_ethdr_driver;
>  extern struct platform_driver mtk_mdp_rdma_driver;
> -
> +extern struct platform_driver mtk_padding_driver;
>  #endif /* MTK_DRM_DRV_H */
> diff --git a/drivers/gpu/drm/mediatek/mtk_padding.c
> b/drivers/gpu/drm/mediatek/mtk_padding.c
> new file mode 100644
> index 000000000000..fa2e7fc9c7bd
> --- /dev/null
> +++ b/drivers/gpu/drm/mediatek/mtk_padding.c
> @@ -0,0 +1,160 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (c) 2023 MediaTek Inc.
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/component.h>
> +#include <linux/module.h>
> +#include <linux/of_device.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_runtime.h>
> +#include <linux/soc/mediatek/mtk-cmdq.h>
> +
> +#include "mtk_disp_drv.h"
> +#include "mtk_drm_crtc.h"
> +#include "mtk_drm_ddp_comp.h"
> +
> +#define PADDING_CONTROL_REG	0x00
> +#define PADDING_BYPASS			BIT(0)
> +#define PADDING_ENABLE			BIT(1)
> +#define PADDING_PIC_SIZE_REG	0x04
> +#define PADDING_H_REG		0x08 /* horizontal */
> +#define PADDING_V_REG		0x0c /* vertical */
> +#define PADDING_COLOR_REG	0x10
> +
> +/**
> + * struct mtk_padding - basic information of Padding
> + * @clk: Clock of the module
> + * @reg: Virtual address of the Padding for CPU to access
> + * @cmdq_reg: CMDQ setting of the Padding
> + *
> + * Every Padding should have different clock source, register base,
> and
> + * CMDQ settings, we stored these differences all together.
> + */
> +struct mtk_padding {
> +	struct clk		*clk;
> +	void __iomem		*reg;
> +	struct cmdq_client_reg	cmdq_reg;
> +};
> +
> +int mtk_padding_clk_enable(struct device *dev)
> +{
> +	struct mtk_padding *padding = dev_get_drvdata(dev);
> +
> +	return clk_prepare_enable(padding->clk);
> +}
> +
> +void mtk_padding_clk_disable(struct device *dev)
> +{
> +	struct mtk_padding *padding = dev_get_drvdata(dev);
> +
> +	clk_disable_unprepare(padding->clk);
> +}
> +
> +void mtk_padding_start(struct device *dev)
> +{
> +	struct mtk_padding *padding = dev_get_drvdata(dev);
> +
> +	writel(PADDING_ENABLE | PADDING_BYPASS,
> +	       padding->reg + PADDING_CONTROL_REG);
> +
> +	/*
> +	 * notice that even the padding is in bypass mode,
> +	 * all the settings must be cleared to 0 or
> +	 * undefined behaviors could happen
> +	 */
> +	writel(0, padding->reg + PADDING_PIC_SIZE_REG);
> +	writel(0, padding->reg + PADDING_H_REG);
> +	writel(0, padding->reg + PADDING_V_REG);
> +	writel(0, padding->reg + PADDING_COLOR_REG);
> +}
> +
> +void mtk_padding_stop(struct device *dev)
> +{
> +	struct mtk_padding *padding = dev_get_drvdata(dev);
> +
> +	writel(0, padding->reg + PADDING_CONTROL_REG);
> +}
> +
> +static int mtk_padding_bind(struct device *dev, struct device
> *master, void *data)
> +{
> +	return 0;
> +}
> +
> +static void mtk_padding_unbind(struct device *dev, struct device
> *master, void *data)
> +{
> +}
> +
> +static const struct component_ops mtk_padding_component_ops = {
> +	.bind	= mtk_padding_bind,
> +	.unbind = mtk_padding_unbind,
> +};
> +
> +static int mtk_padding_probe(struct platform_device *pdev)
> +{
> +	struct device *dev = &pdev->dev;
> +	struct mtk_padding *priv;
> +	struct resource *res;
> +	int ret;
> +
> +	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
> +	if (!priv)
> +		return -ENOMEM;
> +
> +	priv->clk = devm_clk_get(dev, NULL);
> +	if (IS_ERR(priv->clk)) {
> +		dev_err(dev, "failed to get clk\n");
> +		return PTR_ERR(priv->clk);
> +	}
> +
> +	priv->reg = devm_platform_get_and_ioremap_resource(pdev, 0,
> &res);
> +	if (IS_ERR(priv->reg)) {
> +		dev_err(dev, "failed to do ioremap\n");
> +		return PTR_ERR(priv->reg);
> +	}
> +
> +#if IS_REACHABLE(CONFIG_MTK_CMDQ)
> +	ret = cmdq_dev_get_client_reg(dev, &priv->cmdq_reg, 0);
> +	if (ret) {
> +		dev_err(dev, "failed to get gce client reg\n");
> +		return ret;
> +	}
> +#endif
> +
> +	platform_set_drvdata(pdev, priv);
> +
> +	ret = devm_pm_runtime_enable(dev);
> +	if (ret)
> +		return ret;
> +
> +	ret = component_add(dev, &mtk_padding_component_ops);
> +	if (ret) {
> +		pm_runtime_disable(dev);
> +		return dev_err_probe(dev, ret, "failed to add
> component\n");
> +	}
> +
> +	return 0;
> +}
> +
> +static int mtk_padding_remove(struct platform_device *pdev)
> +{
> +	component_del(&pdev->dev, &mtk_padding_component_ops);
> +	return 0;
> +}
> +
> +static const struct of_device_id mtk_padding_driver_dt_match[] = {
> +	{ .compatible = "mediatek,mt8188-padding" },
> +	{ /* sentinel */ }
> +};
> +MODULE_DEVICE_TABLE(of, mtk_padding_driver_dt_match);
> +
> +struct platform_driver mtk_padding_driver = {
> +	.probe		= mtk_padding_probe,
> +	.remove		= mtk_padding_remove,
> +	.driver		= {
> +		.name	= "mediatek-padding",
> +		.owner	= THIS_MODULE,
> +		.of_match_table = mtk_padding_driver_dt_match,
> +	},
> +};

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor
  2023-10-16 10:40 ` [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor Hsiao Chien Sung
@ 2023-10-17  9:39   ` CK Hu (胡俊光)
  2023-10-17  9:47   ` AngeloGioacchino Del Regno
  1 sibling, 0 replies; 37+ messages in thread
From: CK Hu (胡俊光) @ 2023-10-17  9:39 UTC (permalink / raw)
  To: Shawn Sung (宋孝謙), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Hi, Hsiao-chien:

On Mon, 2023-10-16 at 18:40 +0800, Hsiao Chien Sung wrote:
> Add MT8188 Padding to OVL adaptor to probe the driver.

Reviewed-by: CK Hu <ck.hu@mediatek.com>

> 
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> ---
>  .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 26
> +++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> index 354ba6186166..b80425360e76 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> @@ -29,6 +29,7 @@ enum mtk_ovl_adaptor_comp_type {
>  	OVL_ADAPTOR_TYPE_ETHDR,
>  	OVL_ADAPTOR_TYPE_MDP_RDMA,
>  	OVL_ADAPTOR_TYPE_MERGE,
> +	OVL_ADAPTOR_TYPE_PADDING,
>  	OVL_ADAPTOR_TYPE_NUM,
>  };
>  
> @@ -46,6 +47,14 @@ enum mtk_ovl_adaptor_comp_id {
>  	OVL_ADAPTOR_MERGE1,
>  	OVL_ADAPTOR_MERGE2,
>  	OVL_ADAPTOR_MERGE3,
> +	OVL_ADAPTOR_PADDING0,
> +	OVL_ADAPTOR_PADDING1,
> +	OVL_ADAPTOR_PADDING2,
> +	OVL_ADAPTOR_PADDING3,
> +	OVL_ADAPTOR_PADDING4,
> +	OVL_ADAPTOR_PADDING5,
> +	OVL_ADAPTOR_PADDING6,
> +	OVL_ADAPTOR_PADDING7,
>  	OVL_ADAPTOR_ID_MAX
>  };
>  
> @@ -66,6 +75,7 @@ static const char * const
> private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
>  	[OVL_ADAPTOR_TYPE_ETHDR]	= "ethdr",
>  	[OVL_ADAPTOR_TYPE_MDP_RDMA]	= "vdo1-rdma",
>  	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
> +	[OVL_ADAPTOR_TYPE_PADDING]	= "padding",
>  };
>  
>  static const struct mtk_ddp_comp_funcs _ethdr = {
> @@ -80,6 +90,13 @@ static const struct mtk_ddp_comp_funcs _merge = {
>  	.clk_disable = mtk_merge_clk_disable,
>  };
>  
> +static const struct mtk_ddp_comp_funcs _padding = {
> +	.clk_enable = mtk_padding_clk_enable,
> +	.clk_disable = mtk_padding_clk_disable,
> +	.start = mtk_padding_start,
> +	.stop = mtk_padding_stop,
> +};
> +
>  static const struct mtk_ddp_comp_funcs _rdma = {
>  	.clk_enable = mtk_mdp_rdma_clk_enable,
>  	.clk_disable = mtk_mdp_rdma_clk_disable,
> @@ -99,6 +116,14 @@ static const struct ovl_adaptor_comp_match
> comp_matches[OVL_ADAPTOR_ID_MAX] = {
>  	[OVL_ADAPTOR_MERGE1] = { OVL_ADAPTOR_TYPE_MERGE,
> DDP_COMPONENT_MERGE2, 2, &_merge },
>  	[OVL_ADAPTOR_MERGE2] = { OVL_ADAPTOR_TYPE_MERGE,
> DDP_COMPONENT_MERGE3, 3, &_merge },
>  	[OVL_ADAPTOR_MERGE3] = { OVL_ADAPTOR_TYPE_MERGE,
> DDP_COMPONENT_MERGE4, 4, &_merge },
> +	[OVL_ADAPTOR_PADDING0] = { OVL_ADAPTOR_TYPE_PADDING,
> DDP_COMPONENT_PADDING0, 0, &_padding },
> +	[OVL_ADAPTOR_PADDING1] = { OVL_ADAPTOR_TYPE_PADDING,
> DDP_COMPONENT_PADDING1, 1, &_padding },
> +	[OVL_ADAPTOR_PADDING2] = { OVL_ADAPTOR_TYPE_PADDING,
> DDP_COMPONENT_PADDING2, 2, &_padding },
> +	[OVL_ADAPTOR_PADDING3] = { OVL_ADAPTOR_TYPE_PADDING,
> DDP_COMPONENT_PADDING3, 3, &_padding },
> +	[OVL_ADAPTOR_PADDING4] = { OVL_ADAPTOR_TYPE_PADDING,
> DDP_COMPONENT_PADDING4, 4, &_padding },
> +	[OVL_ADAPTOR_PADDING5] = { OVL_ADAPTOR_TYPE_PADDING,
> DDP_COMPONENT_PADDING5, 5, &_padding },
> +	[OVL_ADAPTOR_PADDING6] = { OVL_ADAPTOR_TYPE_PADDING,
> DDP_COMPONENT_PADDING6, 6, &_padding },
> +	[OVL_ADAPTOR_PADDING7] = { OVL_ADAPTOR_TYPE_PADDING,
> DDP_COMPONENT_PADDING7, 7, &_padding },
>  };
>  
>  void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int
> idx,
> @@ -369,6 +394,7 @@ static int ovl_adaptor_comp_get_id(struct device
> *dev, struct device_node *node,
>  }
>  
>  static const struct of_device_id mtk_ovl_adaptor_comp_dt_ids[] = {
> +	{ .compatible = "mediatek,mt8188-padding", .data = (void
> *)OVL_ADAPTOR_TYPE_PADDING },
>  	{ .compatible = "mediatek,mt8195-disp-ethdr", .data = (void
> *)OVL_ADAPTOR_TYPE_ETHDR },
>  	{ .compatible = "mediatek,mt8195-disp-merge", .data = (void
> *)OVL_ADAPTOR_TYPE_MERGE },
>  	{ .compatible = "mediatek,mt8195-vdo1-rdma", .data = (void
> *)OVL_ADAPTOR_TYPE_MDP_RDMA },

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 11/23] drm/mediatek: Rename OVL_ADAPTOR_TYPE_RDMA
       [not found] ` <20231016104010.3270-12-shawn.sung@mediatek.com>
@ 2023-10-17  9:40   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:40 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:39, Hsiao Chien Sung ha scritto:
> Rename OVL_ADAPTOR_TYPE_RDMA to OVL_ADAPTOR_TYPE_MDP_RDMA
> to align the naming rule of mtk_ovl_adaptor_comp_id.
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>



^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 12/23] drm/mediatek: Refine device table of OVL adaptor
  2023-10-16 10:39 ` [PATCH v8 12/23] drm/mediatek: Refine device table of OVL adaptor Hsiao Chien Sung
@ 2023-10-17  9:40   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:40 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:39, Hsiao Chien Sung ha scritto:
> - Adjust indentation to align with other files
> - Sort device table in alphabetical order
> - Add sentinel to device table
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>



^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 13/23] drm/mediatek: Sort OVL adaptor components
  2023-10-16 10:40 ` [PATCH v8 13/23] drm/mediatek: Sort OVL adaptor components Hsiao Chien Sung
@ 2023-10-17  9:40   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:40 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> Sort OVL adaptor components' names in alphabetical order.
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>




^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 14/23] drm/mediatek: Add component ID to component match structure
       [not found] ` <20231016104010.3270-15-shawn.sung@mediatek.com>
@ 2023-10-17  9:40   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:40 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> Add component ID to component match structure so we can
> configure them with a for-loop.
> 
> The main reason we do such code refactoring is that
> there is a new hardware component called "Padding" since
> MT8188, while MT8195 doesn't have this module, we can't
> use the original logic to manage the components.
> 
> While MT8195 does not define Padding in the device tree,
> the corresponding components will be NULL and being skipped
> by the functions.
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>



^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers
  2023-10-16 10:40 ` [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers Hsiao Chien Sung
@ 2023-10-17  9:41   ` AngeloGioacchino Del Regno
  2023-10-17  9:47   ` AngeloGioacchino Del Regno
  1 sibling, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:41 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> By registering component related functions to the pointers,
> we can easily manage them within a for-loop and simplify the
> logic of clock control significantly.
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>



^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 16/23] drm/mediatek: Start/Stop components with function pointers
       [not found] ` <20231016104010.3270-17-shawn.sung@mediatek.com>
@ 2023-10-17  9:41   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:41 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> By registering component related functions to the pointers,
> we can easily manage them within a for-loop and simplify the
> logic of component start/stop process.
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>



^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 17/23] drm/mediatek: Support MT8188 Padding in display driver
       [not found] ` <20231016104010.3270-18-shawn.sung@mediatek.com>
  2023-10-17  9:36   ` [PATCH v8 17/23] drm/mediatek: Support MT8188 Padding in display driver CK Hu (胡俊光)
@ 2023-10-17  9:44   ` AngeloGioacchino Del Regno
  2023-10-17 11:17     ` Shawn Sung (宋孝謙)
  1 sibling, 1 reply; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:44 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> Padding is a new display module on MT8188, it provides ability
> to add pixels to width and height of a layer with specified colors.
> 
> Due to hardware design, Mixer in VDOSYS1 requires width of a layer
> to be 2-pixel-align, or 4-pixel-align when ETHDR is enabled,
> we need Padding to deal with odd width.
> 
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> ---
>   drivers/gpu/drm/mediatek/Makefile       |   3 +-
>   drivers/gpu/drm/mediatek/mtk_disp_drv.h |   4 +
>   drivers/gpu/drm/mediatek/mtk_drm_drv.c  |   1 +
>   drivers/gpu/drm/mediatek/mtk_drm_drv.h  |   2 +-
>   drivers/gpu/drm/mediatek/mtk_padding.c  | 160 ++++++++++++++++++++++++
>   5 files changed, 168 insertions(+), 2 deletions(-)
>   create mode 100644 drivers/gpu/drm/mediatek/mtk_padding.c
> 
> diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile
> index d4d193f60271..5e4436403b8d 100644
> --- a/drivers/gpu/drm/mediatek/Makefile
> +++ b/drivers/gpu/drm/mediatek/Makefile
> @@ -16,7 +16,8 @@ mediatek-drm-y := mtk_disp_aal.o \
>   		  mtk_dsi.o \
>   		  mtk_dpi.o \
>   		  mtk_ethdr.o \
> -		  mtk_mdp_rdma.o
> +		  mtk_mdp_rdma.o \
> +		  mtk_padding.o
>   
>   obj-$(CONFIG_DRM_MEDIATEK) += mediatek-drm.o
>   
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> index bf06ccb65652..e2b602037ac3 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> @@ -159,4 +159,8 @@ void mtk_mdp_rdma_config(struct device *dev, struct mtk_mdp_rdma_cfg *cfg,
>   const u32 *mtk_mdp_rdma_get_formats(struct device *dev);
>   size_t mtk_mdp_rdma_get_num_formats(struct device *dev);
>   
> +int mtk_padding_clk_enable(struct device *dev);
> +void mtk_padding_clk_disable(struct device *dev);
> +void mtk_padding_start(struct device *dev);
> +void mtk_padding_stop(struct device *dev);
>   #endif
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index cdce165c092e..62e6e9785443 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -1025,6 +1025,7 @@ static struct platform_driver * const mtk_drm_drivers[] = {
>   	&mtk_dsi_driver,
>   	&mtk_ethdr_driver,
>   	&mtk_mdp_rdma_driver,
> +	&mtk_padding_driver,
>   };
>   
>   static int __init mtk_drm_init(void)
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> index 8dca68ea1b94..d2efd715699f 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h
> @@ -72,5 +72,5 @@ extern struct platform_driver mtk_dpi_driver;
>   extern struct platform_driver mtk_dsi_driver;
>   extern struct platform_driver mtk_ethdr_driver;
>   extern struct platform_driver mtk_mdp_rdma_driver;
> -
> +extern struct platform_driver mtk_padding_driver;
>   #endif /* MTK_DRM_DRV_H */
> diff --git a/drivers/gpu/drm/mediatek/mtk_padding.c b/drivers/gpu/drm/mediatek/mtk_padding.c
> new file mode 100644
> index 000000000000..fa2e7fc9c7bd
> --- /dev/null
> +++ b/drivers/gpu/drm/mediatek/mtk_padding.c
> @@ -0,0 +1,160 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (c) 2023 MediaTek Inc.
> + */
> +

..snip..

> +
> +static const struct of_device_id mtk_padding_driver_dt_match[] = {
> +	{ .compatible = "mediatek,mt8188-padding" },
> +	{ /* sentinel */ }
> +};
> +MODULE_DEVICE_TABLE(of, mtk_padding_driver_dt_match);
> +
> +struct platform_driver mtk_padding_driver = {
> +	.probe		= mtk_padding_probe,
> +	.remove		= mtk_padding_remove,
> +	.driver		= {
> +		.name	= "mediatek-padding",

Please let's be consistent with the driver names, this should be
"mediatek-disp-padding".

After changing that,

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>



^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 21/23] drm/mediatek: Fix underrun in VDO1 when switches off the layer
  2023-10-16 10:40 ` [PATCH v8 21/23] drm/mediatek: Fix underrun in VDO1 when switches off the layer Hsiao Chien Sung
@ 2023-10-17  9:45   ` CK Hu (胡俊光)
  2023-10-17  9:50   ` AngeloGioacchino Del Regno
  1 sibling, 0 replies; 37+ messages in thread
From: CK Hu (胡俊光) @ 2023-10-17  9:45 UTC (permalink / raw)
  To: Shawn Sung (宋孝謙), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Hi, Hsiao-chien:

On Mon, 2023-10-16 at 18:40 +0800, Hsiao Chien Sung wrote:
> Do not reset Merge while using CMDQ because reset API doesn't
> wait for frame done event as CMDQ does and could lead to
> underrun when the layer is switching off.

Reviewed-by: CK Hu <ck.hu@mediatek.com>

> 
> Fixes: aaf94f7c3ae6 ("drm/mediatek: Add display merge async reset
> control")
> 
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_disp_merge.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> index fd14a59bc951..c19fb1836034 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> @@ -104,7 +104,7 @@ void mtk_merge_stop_cmdq(struct device *dev,
> struct cmdq_pkt *cmdq_pkt)
>  	mtk_ddp_write(cmdq_pkt, 0, &priv->cmdq_reg, priv->regs,
>  		      DISP_REG_MERGE_CTRL);
>  
> -	if (priv->async_clk)
> +	if (!cmdq_pkt && priv->async_clk)
>  		reset_control_reset(priv->reset_ctl);
>  }
>  

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers
  2023-10-16 10:40 ` [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers Hsiao Chien Sung
  2023-10-17  9:41   ` AngeloGioacchino Del Regno
@ 2023-10-17  9:47   ` AngeloGioacchino Del Regno
  2023-10-17 10:50     ` Shawn Sung (宋孝謙)
  1 sibling, 1 reply; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:47 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> By registering component related functions to the pointers,
> we can easily manage them within a for-loop and simplify the
> logic of clock control significantly.
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> ---
>   .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 111 +++++++-----------
>   1 file changed, 44 insertions(+), 67 deletions(-)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> index 60e5dfe9ef0d..fffef2a4f919 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> @@ -53,6 +53,7 @@ struct ovl_adaptor_comp_match {
>   	enum mtk_ovl_adaptor_comp_type type;
>   	enum mtk_ddp_comp_id comp_id;
>   	int alias_id;
> +	const struct mtk_ddp_comp_funcs *funcs;
>   };
>   
>   struct mtk_disp_ovl_adaptor {
> @@ -67,20 +68,35 @@ static const char * const private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
>   	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
>   };
>   
> +static const struct mtk_ddp_comp_funcs _ethdr = {

Sorry I just noticed that; can you please remove the leading "_" from all
of those?

_ethdr -> ethdr or mtk_ethdr
_merge -> merge or mtk_merge
_rdma  -> rdma  or mtk_rdma

Thanks,
Angelo



^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor
  2023-10-16 10:40 ` [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor Hsiao Chien Sung
  2023-10-17  9:39   ` CK Hu (胡俊光)
@ 2023-10-17  9:47   ` AngeloGioacchino Del Regno
  2023-10-17 11:09     ` Shawn Sung (宋孝謙)
  1 sibling, 1 reply; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:47 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> Add MT8188 Padding to OVL adaptor to probe the driver.
> 
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.

> ---
>   .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 26 +++++++++++++++++++
>   1 file changed, 26 insertions(+)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> index 354ba6186166..b80425360e76 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> @@ -29,6 +29,7 @@ enum mtk_ovl_adaptor_comp_type {
>   	OVL_ADAPTOR_TYPE_ETHDR,
>   	OVL_ADAPTOR_TYPE_MDP_RDMA,
>   	OVL_ADAPTOR_TYPE_MERGE,
> +	OVL_ADAPTOR_TYPE_PADDING,
>   	OVL_ADAPTOR_TYPE_NUM,
>   };
>   
> @@ -46,6 +47,14 @@ enum mtk_ovl_adaptor_comp_id {
>   	OVL_ADAPTOR_MERGE1,
>   	OVL_ADAPTOR_MERGE2,
>   	OVL_ADAPTOR_MERGE3,
> +	OVL_ADAPTOR_PADDING0,
> +	OVL_ADAPTOR_PADDING1,
> +	OVL_ADAPTOR_PADDING2,
> +	OVL_ADAPTOR_PADDING3,
> +	OVL_ADAPTOR_PADDING4,
> +	OVL_ADAPTOR_PADDING5,
> +	OVL_ADAPTOR_PADDING6,
> +	OVL_ADAPTOR_PADDING7,
>   	OVL_ADAPTOR_ID_MAX
>   };
>   
> @@ -66,6 +75,7 @@ static const char * const private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
>   	[OVL_ADAPTOR_TYPE_ETHDR]	= "ethdr",
>   	[OVL_ADAPTOR_TYPE_MDP_RDMA]	= "vdo1-rdma",
>   	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
> +	[OVL_ADAPTOR_TYPE_PADDING]	= "padding",
>   };
>   
>   static const struct mtk_ddp_comp_funcs _ethdr = {
> @@ -80,6 +90,13 @@ static const struct mtk_ddp_comp_funcs _merge = {
>   	.clk_disable = mtk_merge_clk_disable,
>   };
>   
> +static const struct mtk_ddp_comp_funcs _padding = {

Please, _padding -> padding or mtk_padding


Thanks,
Angelo


^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 19/23] drm/mediatek: Return error if MDP RDMA failed to enable the clock
       [not found] ` <20231016104010.3270-20-shawn.sung@mediatek.com>
@ 2023-10-17  9:48   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:48 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> Return the result of clk_prepare_enable() instead of
> always returns 0.
> 
> Fixes: f8946e2b6bb2 ("drm/mediatek: Add display MDP RDMA support for MT8195")
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>




^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 20/23] drm/mediatek: Remove the redundant driver data for DPI
  2023-10-16 10:40 ` [PATCH v8 20/23] drm/mediatek: Remove the redundant driver data for DPI Hsiao Chien Sung
@ 2023-10-17  9:49   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:49 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> DPI input is in 1T2P mode on both MT8195 and MT8188.
> Remove the redundant driver data to align the settings, or
> the screen will glitch.
> 
> Fixes: 2847cd7e6403 ("drm/mediatek: Add mt8188 dpi compatibles and platform data")
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>




^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 21/23] drm/mediatek: Fix underrun in VDO1 when switches off the layer
  2023-10-16 10:40 ` [PATCH v8 21/23] drm/mediatek: Fix underrun in VDO1 when switches off the layer Hsiao Chien Sung
  2023-10-17  9:45   ` CK Hu (胡俊光)
@ 2023-10-17  9:50   ` AngeloGioacchino Del Regno
  1 sibling, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:50 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> Do not reset Merge while using CMDQ because reset API doesn't
> wait for frame done event as CMDQ does and could lead to
> underrun when the layer is switching off.
> 
> Fixes: aaf94f7c3ae6 ("drm/mediatek: Add display merge async reset control")
> 
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>




^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 22/23] drm/mediatek: Power on devices in OVL adaptor when atomic enable
       [not found] ` <20231016104010.3270-23-shawn.sung@mediatek.com>
@ 2023-10-17  9:54   ` AngeloGioacchino Del Regno
  2023-10-17 11:04     ` Shawn Sung (宋孝謙)
  2023-10-18  2:02   ` CK Hu (胡俊光)
  1 sibling, 1 reply; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17  9:54 UTC (permalink / raw)
  To: Hsiao Chien Sung, CK Hu, Krzysztof Kozlowski, Matthias Brugger,
	Rob Herring
  Cc: Nathan Lu, Chun-Kuang Hu, Moudy Ho, Philipp Zabel, David Airlie,
	linux-kernel, dri-devel, Yongqiang Niu, Johnson Wang, Nancy . Lin,
	linux-mediatek, linux-arm-kernel, Daniel Vetter, Jason-JH . Lin,
	Hans Verkuil, Mauro Carvalho Chehab, Sean Paul, devicetree

Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> Different from OVL, OVL adaptor is a pseudo device so we didn't
> define it in the device tree, consequently, pm_runtime_resume_and_get()
> called by .atomic_enable() powers on no device in OVL adaptor and
> leads to power outage in the corresponding IOMMU.
> 
> To resolve the issue, we implement a function to power on the RDMAs
> in OVL adaptor, and the system will make sure the IOMMU is powered on
> as well because of the device link (iommus) in the RDMA nodes in DTS.
> 
> Fixes: 5db12f5d843b ("media: drm/mediatek: Add pm runtime support for ovl and rdma")
> 
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> ---
>   drivers/gpu/drm/mediatek/mtk_disp_drv.h       |  4 ++
>   .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 62 +++++++++++++++++++
>   drivers/gpu/drm/mediatek/mtk_drm_crtc.c       | 28 +++------
>   drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c   |  2 +
>   drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h   | 20 ++++++
>   drivers/gpu/drm/mediatek/mtk_mdp_rdma.c       | 16 +++++
>   6 files changed, 111 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> index e2b602037ac3..c44f5b31bab5 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> @@ -109,6 +109,8 @@ void mtk_ovl_adaptor_connect(struct device *dev, struct device *mmsys_dev,
>   			     unsigned int next);
>   void mtk_ovl_adaptor_disconnect(struct device *dev, struct device *mmsys_dev,
>   				unsigned int next);
> +int mtk_ovl_adaptor_power_on(struct device *dev);
> +void mtk_ovl_adaptor_power_off(struct device *dev);
>   int mtk_ovl_adaptor_clk_enable(struct device *dev);
>   void mtk_ovl_adaptor_clk_disable(struct device *dev);
>   void mtk_ovl_adaptor_config(struct device *dev, unsigned int w,
> @@ -150,6 +152,8 @@ void mtk_rdma_disable_vblank(struct device *dev);
>   const u32 *mtk_rdma_get_formats(struct device *dev);
>   size_t mtk_rdma_get_num_formats(struct device *dev);
>   
> +int mtk_mdp_rdma_power_on(struct device *dev);
> +void mtk_mdp_rdma_power_off(struct device *dev);
>   int mtk_mdp_rdma_clk_enable(struct device *dev);
>   void mtk_mdp_rdma_clk_disable(struct device *dev);
>   void mtk_mdp_rdma_start(struct device *dev, struct cmdq_pkt *cmdq_pkt);
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> index b80425360e76..8de57a5f5518 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> @@ -98,6 +98,8 @@ static const struct mtk_ddp_comp_funcs _padding = {
>   };
>   
>   static const struct mtk_ddp_comp_funcs _rdma = {
> +	.power_on = mtk_mdp_rdma_power_on,
> +	.power_off = mtk_mdp_rdma_power_off,
>   	.clk_enable = mtk_mdp_rdma_clk_enable,
>   	.clk_disable = mtk_mdp_rdma_clk_disable,
>   };
> @@ -241,6 +243,66 @@ void mtk_ovl_adaptor_stop(struct device *dev)
>   	}
>   }
>   
> +/**
> + * mtk_ovl_adaptor_power_on - Power on devices in OVL adaptor
> + * @dev: device to be powered on
> + *
> + * Different from OVL, OVL adaptor is a pseudo device so
> + * we didn't define it in the device tree, pm_runtime_resume_and_get()
> + * called by .atomic_enable() power on no device in OVL adaptor,
> + * we have to implement a function to do the job instead.
> + *
> + * returns:
> + * zero on success, errno on failures.

You're almost there! There's just one mistake making this invalid kerneldoc;
change to...

  * Return: Zero for success or negative number for failure.

https://docs.kernel.org/doc-guide/kernel-doc.html

> + */
> +int mtk_ovl_adaptor_power_on(struct device *dev)
> +{
> +	int i, ret;
> +	struct mtk_disp_ovl_adaptor *ovl_adaptor = dev_get_drvdata(dev);
> +
> +	for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) {
> +		if (!ovl_adaptor->ovl_adaptor_comp[i] ||
> +		    !comp_matches[i].funcs->power_on)
> +			continue;
> +
> +		/*
> +		 * do not power on the devices that don't define
> +		 * .power_off() function
> +		 */
> +		if (!comp_matches[i].funcs->power_off) {
> +			dev_warn(dev, ".power_off() is undefined\n");
> +			continue;
> +		}
> +
> +		ret = comp_matches[i].funcs->power_on(ovl_adaptor->ovl_adaptor_comp[i]);
> +		if (ret < 0) {
> +			mtk_ovl_adaptor_power_off(dev);
> +			return ret;
> +		}
> +	}
> +	return 0;
> +}
> +
> +/**
> + * mtk_ovl_adaptor_power_off - Power off devices in OVL adaptor
> + * @dev: device to be powered off
> + *
> + * call .power_off() function if defined

  * Calls the .power_off() ovl_adaptor component callback if it is present.

> + */

Regards,
Angelo



^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers
  2023-10-17  9:47   ` AngeloGioacchino Del Regno
@ 2023-10-17 10:50     ` Shawn Sung (宋孝謙)
  2023-10-17 11:57       ` AngeloGioacchino Del Regno
  0 siblings, 1 reply; 37+ messages in thread
From: Shawn Sung (宋孝謙) @ 2023-10-17 10:50 UTC (permalink / raw)
  To: CK Hu (胡俊光), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Hi Angelo,

On Tue, 2023-10-17 at 11:47 +0200, AngeloGioacchino Del Regno wrote:
> Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> > By registering component related functions to the pointers,
> > we can easily manage them within a for-loop and simplify the
> > logic of clock control significantly.
> > 
> > Reviewed-by: CK Hu <ck.hu@mediatek.com>
> > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> > ---
> >   .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 111 +++++++----
> > -------
> >   1 file changed, 44 insertions(+), 67 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > index 60e5dfe9ef0d..fffef2a4f919 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > @@ -53,6 +53,7 @@ struct ovl_adaptor_comp_match {
> >   	enum mtk_ovl_adaptor_comp_type type;
> >   	enum mtk_ddp_comp_id comp_id;
> >   	int alias_id;
> > +	const struct mtk_ddp_comp_funcs *funcs;
> >   };
> >   
> >   struct mtk_disp_ovl_adaptor {
> > @@ -67,20 +68,35 @@ static const char * const
> > private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
> >   	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
> >   };
> >   
> > +static const struct mtk_ddp_comp_funcs _ethdr = {
> 
> Sorry I just noticed that; can you please remove the leading "_" from
> all
> of those?
> 
> _ethdr -> ethdr or mtk_ethdr
> _merge -> merge or mtk_merge
> _rdma  -> rdma  or mtk_rdma
> 
> Thanks,
> Angelo
> 

Sure. Will do in the next version.
The reason I didn't use mtk_* is simply because of the column width
will exceed 100 characaters.

Thanks,
Shawn

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 22/23] drm/mediatek: Power on devices in OVL adaptor when atomic enable
  2023-10-17  9:54   ` [PATCH v8 22/23] drm/mediatek: Power on devices in OVL adaptor when atomic enable AngeloGioacchino Del Regno
@ 2023-10-17 11:04     ` Shawn Sung (宋孝謙)
  0 siblings, 0 replies; 37+ messages in thread
From: Shawn Sung (宋孝謙) @ 2023-10-17 11:04 UTC (permalink / raw)
  To: CK Hu (胡俊光), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Hi Angelo,

On Tue, 2023-10-17 at 11:54 +0200, AngeloGioacchino Del Regno wrote:
> Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> > Different from OVL, OVL adaptor is a pseudo device so we didn't
> > define it in the device tree, consequently,
> > pm_runtime_resume_and_get()
> > called by .atomic_enable() powers on no device in OVL adaptor and
> > leads to power outage in the corresponding IOMMU.
> > 
> > To resolve the issue, we implement a function to power on the RDMAs
> > in OVL adaptor, and the system will make sure the IOMMU is powered
> > on
> > as well because of the device link (iommus) in the RDMA nodes in
> > DTS.
> > 
> > Fixes: 5db12f5d843b ("media: drm/mediatek: Add pm runtime support
> > for ovl and rdma")
> > 
> > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> > ---
> >   drivers/gpu/drm/mediatek/mtk_disp_drv.h       |  4 ++
> >   .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 62
> > +++++++++++++++++++
> >   drivers/gpu/drm/mediatek/mtk_drm_crtc.c       | 28 +++------
> >   drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c   |  2 +
> >   drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h   | 20 ++++++
> >   drivers/gpu/drm/mediatek/mtk_mdp_rdma.c       | 16 +++++
> >   6 files changed, 111 insertions(+), 21 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> > b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> > index e2b602037ac3..c44f5b31bab5 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> > @@ -109,6 +109,8 @@ void mtk_ovl_adaptor_connect(struct device
> > *dev, struct device *mmsys_dev,
> >   			     unsigned int next);
> >   void mtk_ovl_adaptor_disconnect(struct device *dev, struct device
> > *mmsys_dev,
> >   				unsigned int next);
> > +int mtk_ovl_adaptor_power_on(struct device *dev);
> > +void mtk_ovl_adaptor_power_off(struct device *dev);
> >   int mtk_ovl_adaptor_clk_enable(struct device *dev);
> >   void mtk_ovl_adaptor_clk_disable(struct device *dev);
> >   void mtk_ovl_adaptor_config(struct device *dev, unsigned int w,
> > @@ -150,6 +152,8 @@ void mtk_rdma_disable_vblank(struct device
> > *dev);
> >   const u32 *mtk_rdma_get_formats(struct device *dev);
> >   size_t mtk_rdma_get_num_formats(struct device *dev);
> >   
> > +int mtk_mdp_rdma_power_on(struct device *dev);
> > +void mtk_mdp_rdma_power_off(struct device *dev);
> >   int mtk_mdp_rdma_clk_enable(struct device *dev);
> >   void mtk_mdp_rdma_clk_disable(struct device *dev);
> >   void mtk_mdp_rdma_start(struct device *dev, struct cmdq_pkt
> > *cmdq_pkt);
> > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > index b80425360e76..8de57a5f5518 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > @@ -98,6 +98,8 @@ static const struct mtk_ddp_comp_funcs _padding =
> > {
> >   };
> >   
> >   static const struct mtk_ddp_comp_funcs _rdma = {
> > +	.power_on = mtk_mdp_rdma_power_on,
> > +	.power_off = mtk_mdp_rdma_power_off,
> >   	.clk_enable = mtk_mdp_rdma_clk_enable,
> >   	.clk_disable = mtk_mdp_rdma_clk_disable,
> >   };
> > @@ -241,6 +243,66 @@ void mtk_ovl_adaptor_stop(struct device *dev)
> >   	}
> >   }
> >   
> > +/**
> > + * mtk_ovl_adaptor_power_on - Power on devices in OVL adaptor
> > + * @dev: device to be powered on
> > + *
> > + * Different from OVL, OVL adaptor is a pseudo device so
> > + * we didn't define it in the device tree,
> > pm_runtime_resume_and_get()
> > + * called by .atomic_enable() power on no device in OVL adaptor,
> > + * we have to implement a function to do the job instead.
> > + *
> > + * returns:
> > + * zero on success, errno on failures.
> 
> You're almost there! There's just one mistake making this invalid
> kerneldoc;
> change to...
> 
>   * Return: Zero for success or negative number for failure.
> 
> 
https://urldefense.com/v3/__https://docs.kernel.org/doc-guide/kernel-doc.html__;!!CTRNKA9wMg0ARbw!kAfpT6aSoiHbv1EviMygmToxfzcWTHgbJ13w--JKWitq0e_Im6koKGFFXnCt_ZZ_BD4IoqqG9vuBBU20M8gW0hTHyG_mh7qX$
>  

Thank you for pointing this out and giving an example.
Will change this in the next version.

> > +/**
> > + * mtk_ovl_adaptor_power_off - Power off devices in OVL adaptor
> > + * @dev: device to be powered off
> > + *
> > + * call .power_off() function if defined
> 
>   * Calls the .power_off() ovl_adaptor component callback if it is
> present.
> 
> > + */
> 
> Regards,
> Angelo
> 

Got it, will modify it in the next version.

Thanks,
Shawn


^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor
  2023-10-17  9:47   ` AngeloGioacchino Del Regno
@ 2023-10-17 11:09     ` Shawn Sung (宋孝謙)
  0 siblings, 0 replies; 37+ messages in thread
From: Shawn Sung (宋孝謙) @ 2023-10-17 11:09 UTC (permalink / raw)
  To: CK Hu (胡俊光), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Hi Angelo,

On Tue, 2023-10-17 at 11:47 +0200, AngeloGioacchino Del Regno wrote:
> Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
> > Add MT8188 Padding to OVL adaptor to probe the driver.
> > 
> > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.
> > ---
> >   .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 26
> > +++++++++++++++++++
> >   1 file changed, 26 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > index 354ba6186166..b80425360e76 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> > @@ -29,6 +29,7 @@ enum mtk_ovl_adaptor_comp_type {
> >   	OVL_ADAPTOR_TYPE_ETHDR,
> >   	OVL_ADAPTOR_TYPE_MDP_RDMA,
> >   	OVL_ADAPTOR_TYPE_MERGE,
> > +	OVL_ADAPTOR_TYPE_PADDING,
> >   	OVL_ADAPTOR_TYPE_NUM,
> >   };
> >   
> > @@ -46,6 +47,14 @@ enum mtk_ovl_adaptor_comp_id {
> >   	OVL_ADAPTOR_MERGE1,
> >   	OVL_ADAPTOR_MERGE2,
> >   	OVL_ADAPTOR_MERGE3,
> > +	OVL_ADAPTOR_PADDING0,
> > +	OVL_ADAPTOR_PADDING1,
> > +	OVL_ADAPTOR_PADDING2,
> > +	OVL_ADAPTOR_PADDING3,
> > +	OVL_ADAPTOR_PADDING4,
> > +	OVL_ADAPTOR_PADDING5,
> > +	OVL_ADAPTOR_PADDING6,
> > +	OVL_ADAPTOR_PADDING7,
> >   	OVL_ADAPTOR_ID_MAX
> >   };
> >   
> > @@ -66,6 +75,7 @@ static const char * const
> > private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
> >   	[OVL_ADAPTOR_TYPE_ETHDR]	= "ethdr",
> >   	[OVL_ADAPTOR_TYPE_MDP_RDMA]	= "vdo1-rdma",
> >   	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
> > +	[OVL_ADAPTOR_TYPE_PADDING]	= "padding",
> >   };
> >   
> >   static const struct mtk_ddp_comp_funcs _ethdr = {
> > @@ -80,6 +90,13 @@ static const struct mtk_ddp_comp_funcs _merge =
> > {
> >   	.clk_disable = mtk_merge_clk_disable,
> >   };
> >   
> > +static const struct mtk_ddp_comp_funcs _padding = {
> 
> Please, _padding -> padding or mtk_padding
> 
> 
> Thanks,
> Angelo

Got it. Will change in the next version.

Thanks,
Shawn

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 17/23] drm/mediatek: Support MT8188 Padding in display driver
  2023-10-17  9:44   ` AngeloGioacchino Del Regno
@ 2023-10-17 11:17     ` Shawn Sung (宋孝謙)
  0 siblings, 0 replies; 37+ messages in thread
From: Shawn Sung (宋孝謙) @ 2023-10-17 11:17 UTC (permalink / raw)
  To: CK Hu (胡俊光), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Hi Angelo,

On Tue, 2023-10-17 at 11:44 +0200, AngeloGioacchino Del Regno wrote:
> +static const struct of_device_id mtk_padding_driver_dt_match[] = {
> > +	{ .compatible = "mediatek,mt8188-padding" },
> > +	{ /* sentinel */ }
> > +};
> > +MODULE_DEVICE_TABLE(of, mtk_padding_driver_dt_match);
> > +
> > +struct platform_driver mtk_padding_driver = {
> > +	.probe		= mtk_padding_probe,
> > +	.remove		= mtk_padding_remove,
> > +	.driver		= {
> > +		.name	= "mediatek-padding",
> 
> Please let's be consistent with the driver names, this should be
> "mediatek-disp-padding".
> 
> After changing that,
> 
> Reviewed-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> 

Will change in the next version.

Thanks,
Shawn

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers
  2023-10-17 10:50     ` Shawn Sung (宋孝謙)
@ 2023-10-17 11:57       ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 37+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-10-17 11:57 UTC (permalink / raw)
  To: Shawn Sung (宋孝謙),
	CK Hu (胡俊光), matthias.bgg@gmail.com,
	robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Il 17/10/23 12:50, Shawn Sung (宋孝謙) ha scritto:
> Hi Angelo,
> 
> On Tue, 2023-10-17 at 11:47 +0200, AngeloGioacchino Del Regno wrote:
>> Il 16/10/23 12:40, Hsiao Chien Sung ha scritto:
>>> By registering component related functions to the pointers,
>>> we can easily manage them within a for-loop and simplify the
>>> logic of clock control significantly.
>>>
>>> Reviewed-by: CK Hu <ck.hu@mediatek.com>
>>> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
>>> ---
>>>    .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 111 +++++++----
>>> -------
>>>    1 file changed, 44 insertions(+), 67 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
>>> b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
>>> index 60e5dfe9ef0d..fffef2a4f919 100644
>>> --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
>>> +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
>>> @@ -53,6 +53,7 @@ struct ovl_adaptor_comp_match {
>>>    	enum mtk_ovl_adaptor_comp_type type;
>>>    	enum mtk_ddp_comp_id comp_id;
>>>    	int alias_id;
>>> +	const struct mtk_ddp_comp_funcs *funcs;
>>>    };
>>>    
>>>    struct mtk_disp_ovl_adaptor {
>>> @@ -67,20 +68,35 @@ static const char * const
>>> private_comp_stem[OVL_ADAPTOR_TYPE_NUM] = {
>>>    	[OVL_ADAPTOR_TYPE_MERGE]	= "merge",
>>>    };
>>>    
>>> +static const struct mtk_ddp_comp_funcs _ethdr = {
>>
>> Sorry I just noticed that; can you please remove the leading "_" from
>> all
>> of those?
>>
>> _ethdr -> ethdr or mtk_ethdr
>> _merge -> merge or mtk_merge
>> _rdma  -> rdma  or mtk_rdma
>>
>> Thanks,
>> Angelo
>>
> 
> Sure. Will do in the next version.
> The reason I didn't use mtk_* is simply because of the column width
> will exceed 100 characaters.
> 

Okay that would not be good, I guess that just `ethdr`, `merge`, `rdma` will
be fine then.

Cheers,
Angelo

> Thanks,
> Shawn





^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 22/23] drm/mediatek: Power on devices in OVL adaptor when atomic enable
       [not found] ` <20231016104010.3270-23-shawn.sung@mediatek.com>
  2023-10-17  9:54   ` [PATCH v8 22/23] drm/mediatek: Power on devices in OVL adaptor when atomic enable AngeloGioacchino Del Regno
@ 2023-10-18  2:02   ` CK Hu (胡俊光)
  2023-10-18  4:54     ` Shawn Sung (宋孝謙)
  1 sibling, 1 reply; 37+ messages in thread
From: CK Hu (胡俊光) @ 2023-10-18  2:02 UTC (permalink / raw)
  To: Shawn Sung (宋孝謙), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	Moudy Ho (何宗原), daniel@ffwll.ch,
	devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Nancy Lin (林欣螢),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	mchehab@kernel.org, airlied@gmail.com,
	linux-arm-kernel@lists.infradead.org

Hi, Hsiao-chien:

On Mon, 2023-10-16 at 18:40 +0800, Hsiao Chien Sung wrote:
> Different from OVL, OVL adaptor is a pseudo device so we didn't
> define it in the device tree, consequently,
> pm_runtime_resume_and_get()
> called by .atomic_enable() powers on no device in OVL adaptor and
> leads to power outage in the corresponding IOMMU.
> 
> To resolve the issue, we implement a function to power on the RDMAs
> in OVL adaptor, and the system will make sure the IOMMU is powered on
> as well because of the device link (iommus) in the RDMA nodes in DTS.
> 
> Fixes: 5db12f5d843b ("media: drm/mediatek: Add pm runtime support for
> ovl and rdma")
> 
> Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_disp_drv.h       |  4 ++
>  .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c   | 62
> +++++++++++++++++++
>  drivers/gpu/drm/mediatek/mtk_drm_crtc.c       | 28 +++------
>  drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c   |  2 +
>  drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h   | 20 ++++++
>  drivers/gpu/drm/mediatek/mtk_mdp_rdma.c       | 16 +++++
>  6 files changed, 111 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> index e2b602037ac3..c44f5b31bab5 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> @@ -109,6 +109,8 @@ void mtk_ovl_adaptor_connect(struct device *dev,
> struct device *mmsys_dev,
>  			     unsigned int next);
>  void mtk_ovl_adaptor_disconnect(struct device *dev, struct device
> *mmsys_dev,
>  				unsigned int next);
> +int mtk_ovl_adaptor_power_on(struct device *dev);
> +void mtk_ovl_adaptor_power_off(struct device *dev);
>  int mtk_ovl_adaptor_clk_enable(struct device *dev);
>  void mtk_ovl_adaptor_clk_disable(struct device *dev);
>  void mtk_ovl_adaptor_config(struct device *dev, unsigned int w,
> @@ -150,6 +152,8 @@ void mtk_rdma_disable_vblank(struct device *dev);
>  const u32 *mtk_rdma_get_formats(struct device *dev);
>  size_t mtk_rdma_get_num_formats(struct device *dev);
>  
> +int mtk_mdp_rdma_power_on(struct device *dev);
> +void mtk_mdp_rdma_power_off(struct device *dev);
>  int mtk_mdp_rdma_clk_enable(struct device *dev);
>  void mtk_mdp_rdma_clk_disable(struct device *dev);
>  void mtk_mdp_rdma_start(struct device *dev, struct cmdq_pkt
> *cmdq_pkt);
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> index b80425360e76..8de57a5f5518 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c
> @@ -98,6 +98,8 @@ static const struct mtk_ddp_comp_funcs _padding = {
>  };
>  
>  static const struct mtk_ddp_comp_funcs _rdma = {
> +	.power_on = mtk_mdp_rdma_power_on,
> +	.power_off = mtk_mdp_rdma_power_off,
>  	.clk_enable = mtk_mdp_rdma_clk_enable,
>  	.clk_disable = mtk_mdp_rdma_clk_disable,
>  };
> @@ -241,6 +243,66 @@ void mtk_ovl_adaptor_stop(struct device *dev)
>  	}
>  }
>  
> +/**
> + * mtk_ovl_adaptor_power_on - Power on devices in OVL adaptor
> + * @dev: device to be powered on
> + *
> + * Different from OVL, OVL adaptor is a pseudo device so
> + * we didn't define it in the device tree,
> pm_runtime_resume_and_get()
> + * called by .atomic_enable() power on no device in OVL adaptor,
> + * we have to implement a function to do the job instead.
> + *
> + * returns:
> + * zero on success, errno on failures.
> + */
> +int mtk_ovl_adaptor_power_on(struct device *dev)
> +{
> +	int i, ret;
> +	struct mtk_disp_ovl_adaptor *ovl_adaptor =
> dev_get_drvdata(dev);
> +
> +	for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) {
> +		if (!ovl_adaptor->ovl_adaptor_comp[i] ||
> +		    !comp_matches[i].funcs->power_on)
> +			continue;

To simplify the code, you could call mtk_ddp_comp_power_on() for all
sub device, and drop power_on()/power_off() of mdp_rdma.

Regards,
CK

> +
> +		/*
> +		 * do not power on the devices that don't define
> +		 * .power_off() function
> +		 */
> +		if (!comp_matches[i].funcs->power_off) {
> +			dev_warn(dev, ".power_off() is undefined\n");
> +			continue;
> +		}
> +
> +		ret = comp_matches[i].funcs->power_on(ovl_adaptor-
> >ovl_adaptor_comp[i]);
> +		if (ret < 0) {
> +			mtk_ovl_adaptor_power_off(dev);
> +			return ret;
> +		}
> +	}
> +	return 0;
> +}
> +
> +/**
> + * mtk_ovl_adaptor_power_off - Power off devices in OVL adaptor
> + * @dev: device to be powered off
> + *
> + * call .power_off() function if defined
> + */
> +void mtk_ovl_adaptor_power_off(struct device *dev)
> +{
> +	int i;
> +	struct mtk_disp_ovl_adaptor *ovl_adaptor =
> dev_get_drvdata(dev);
> +
> +	for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) {
> +		if (!ovl_adaptor->ovl_adaptor_comp[i] ||
> +		    !comp_matches[i].funcs->power_off)
> +			continue;
> +
> +		comp_matches[i].funcs->power_off(ovl_adaptor-
> >ovl_adaptor_comp[i]);
> +	}
> +}
> +
>  int mtk_ovl_adaptor_clk_enable(struct device *dev)
>  {
>  	int i;
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> index a0b2ba3cbcdb..c7edd80be428 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> @@ -6,7 +6,6 @@
>  #include <linux/clk.h>
>  #include <linux/dma-mapping.h>
>  #include <linux/mailbox_controller.h>
> -#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>
> @@ -362,22 +361,16 @@ static int mtk_crtc_ddp_hw_init(struct
> mtk_drm_crtc *mtk_crtc, struct drm_atomic
>  		drm_connector_list_iter_end(&conn_iter);
>  	}
>  
> -	ret = pm_runtime_resume_and_get(crtc->dev->dev);
> -	if (ret < 0) {
> -		DRM_ERROR("Failed to enable power domain: %d\n", ret);
> -		return ret;
> -	}
> -
>  	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;
> +		goto error;
>  	}
>  
>  	ret = mtk_crtc_ddp_clk_enable(mtk_crtc);
>  	if (ret < 0) {
>  		DRM_ERROR("Failed to enable component clocks: %d\n",
> ret);
> -		goto err_mutex_unprepare;
> +		goto error;
>  	}
>  
>  	for (i = 0; i < mtk_crtc->ddp_comp_nr - 1; i++) {
> @@ -426,16 +419,13 @@ static int mtk_crtc_ddp_hw_init(struct
> mtk_drm_crtc *mtk_crtc, struct drm_atomic
>  
>  	return 0;
>  
> -err_mutex_unprepare:
> +error:
>  	mtk_mutex_unprepare(mtk_crtc->mutex);
> -err_pm_runtime_put:
> -	pm_runtime_put(crtc->dev->dev);
>  	return ret;
>  }
>  
>  static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
>  {
> -	struct drm_device *drm = mtk_crtc->base.dev;
>  	struct drm_crtc *crtc = &mtk_crtc->base;
>  	int i;
>  
> @@ -465,8 +455,6 @@ static void mtk_crtc_ddp_hw_fini(struct
> mtk_drm_crtc *mtk_crtc)
>  	mtk_crtc_ddp_clk_disable(mtk_crtc);
>  	mtk_mutex_unprepare(mtk_crtc->mutex);
>  
> -	pm_runtime_put(drm->dev);
> -
>  	if (crtc->state->event && !crtc->state->active) {
>  		spin_lock_irq(&crtc->dev->event_lock);
>  		drm_crtc_send_vblank_event(crtc, crtc->state->event);
> @@ -774,7 +762,7 @@ static void mtk_drm_crtc_atomic_enable(struct
> drm_crtc *crtc,
>  		return;
>  	}
>  
> -	ret = pm_runtime_resume_and_get(comp->dev);
> +	ret = mtk_ddp_comp_power_on(comp);
>  	if (ret < 0) {
>  		DRM_DEV_ERROR(comp->dev, "Failed to enable power
> domain: %d\n", ret);
>  		return;
> @@ -782,7 +770,7 @@ static void mtk_drm_crtc_atomic_enable(struct
> drm_crtc *crtc,
>  
>  	ret = mtk_crtc_ddp_hw_init(mtk_crtc, state);
>  	if (ret) {
> -		pm_runtime_put(comp->dev);
> +		mtk_ddp_comp_power_off(comp);
>  		return;
>  	}
>  
> @@ -795,7 +783,7 @@ static void mtk_drm_crtc_atomic_disable(struct
> drm_crtc *crtc,
>  {
>  	struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
>  	struct mtk_ddp_comp *comp = mtk_crtc->ddp_comp[0];
> -	int i, ret;
> +	int i;
>  
>  	DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id);
>  	if (!mtk_crtc->enabled)
> @@ -825,9 +813,7 @@ static void mtk_drm_crtc_atomic_disable(struct
> drm_crtc *crtc,
>  
>  	drm_crtc_vblank_off(crtc);
>  	mtk_crtc_ddp_hw_fini(mtk_crtc);
> -	ret = pm_runtime_put(comp->dev);
> -	if (ret < 0)
> -		DRM_DEV_ERROR(comp->dev, "Failed to disable power
> domain: %d\n", ret);
> +	mtk_ddp_comp_power_off(comp);
>  
>  	mtk_crtc->enabled = false;
>  }
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> index 10402e07a4a7..9940909c7435 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> @@ -396,6 +396,8 @@ static const struct mtk_ddp_comp_funcs ddp_ufoe =
> {
>  };
>  
>  static const struct mtk_ddp_comp_funcs ddp_ovl_adaptor = {
> +	.power_on = mtk_ovl_adaptor_power_on,
> +	.power_off = mtk_ovl_adaptor_power_off,
>  	.clk_enable = mtk_ovl_adaptor_clk_enable,
>  	.clk_disable = mtk_ovl_adaptor_clk_disable,
>  	.config = mtk_ovl_adaptor_config,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> index 1c1d670cfe41..2597dd7ac0d2 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> @@ -7,6 +7,7 @@
>  #define MTK_DRM_DDP_COMP_H
>  
>  #include <linux/io.h>
> +#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>
> @@ -46,6 +47,8 @@ enum mtk_ddp_comp_type {
>  struct mtk_ddp_comp;
>  struct cmdq_pkt;
>  struct mtk_ddp_comp_funcs {
> +	int (*power_on)(struct device *dev);
> +	void (*power_off)(struct device *dev);
>  	int (*clk_enable)(struct device *dev);
>  	void (*clk_disable)(struct device *dev);
>  	void (*config)(struct device *dev, unsigned int w,
> @@ -91,6 +94,23 @@ struct mtk_ddp_comp {
>  	int encoder_index;
>  };
>  
> +static inline int mtk_ddp_comp_power_on(struct mtk_ddp_comp *comp)
> +{
> +	if (comp->funcs && comp->funcs->power_on)
> +		return comp->funcs->power_on(comp->dev);
> +	else
> +		return pm_runtime_resume_and_get(comp->dev);
> +	return 0;
> +}
> +
> +static inline void mtk_ddp_comp_power_off(struct mtk_ddp_comp *comp)
> +{
> +	if (comp->funcs && comp->funcs->power_off)
> +		comp->funcs->power_off(comp->dev);
> +	else
> +		pm_runtime_put(comp->dev);
> +}
> +
>  static inline int mtk_ddp_comp_clk_enable(struct mtk_ddp_comp *comp)
>  {
>  	if (comp->funcs && comp->funcs->clk_enable)
> diff --git a/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
> b/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
> index cb36a961786f..8feeb6dce217 100644
> --- a/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
> +++ b/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c
> @@ -243,6 +243,22 @@ size_t mtk_mdp_rdma_get_num_formats(struct
> device *dev)
>  	return ARRAY_SIZE(formats);
>  }
>  
> +int mtk_mdp_rdma_power_on(struct device *dev)
> +{
> +	int ret = pm_runtime_resume_and_get(dev);
> +
> +	if (ret < 0) {
> +		dev_err(dev, "Failed to power on: %d\n", ret);
> +		return ret;
> +	}
> +	return 0;
> +}
> +
> +void mtk_mdp_rdma_power_off(struct device *dev)
> +{
> +	pm_runtime_put(dev);
> +}
> +
>  int mtk_mdp_rdma_clk_enable(struct device *dev)
>  {
>  	struct mtk_mdp_rdma *rdma = dev_get_drvdata(dev);

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v8 22/23] drm/mediatek: Power on devices in OVL adaptor when atomic enable
  2023-10-18  2:02   ` CK Hu (胡俊光)
@ 2023-10-18  4:54     ` Shawn Sung (宋孝謙)
  0 siblings, 0 replies; 37+ messages in thread
From: Shawn Sung (宋孝謙) @ 2023-10-18  4:54 UTC (permalink / raw)
  To: CK Hu (胡俊光), matthias.bgg@gmail.com,
	angelogioacchino.delregno@collabora.com, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org
  Cc: Nathan Lu (呂東霖), chunkuang.hu@kernel.org,
	daniel@ffwll.ch, devicetree@vger.kernel.org,
	Jason-JH Lin (林睿祥),
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	sean@poorly.run, johnson.wang@mediatek.corp-partner.google.com,
	Moudy Ho (何宗原),
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu (牛永强),
	hverkuil-cisco@xs4all.nl, p.zabel@pengutronix.de,
	Nancy Lin (林欣螢), mchehab@kernel.org,
	airlied@gmail.com, linux-arm-kernel@lists.infradead.org

Hi CK,

On Wed, 2023-10-18 at 02:02 +0000, CK Hu (胡俊光) wrote:
> Hi, Hsiao-chien:
> 
> On Mon, 2023-10-16 at 18:40 +0800, Hsiao Chien Sung wrote:
> > Different from OVL, OVL adaptor is a pseudo device so we didn't
> > define it in the device tree, consequently,
> > pm_runtime_resume_and_get()
> > called by .atomic_enable() powers on no device in OVL adaptor and
> > leads to power outage in the corresponding IOMMU.
> > 
... snip ...
> > +int mtk_ovl_adaptor_power_on(struct device *dev)
> > +{
> > +	int i, ret;
> > +	struct mtk_disp_ovl_adaptor *ovl_adaptor =
> > dev_get_drvdata(dev);
> > +
> > +	for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) {
> > +		if (!ovl_adaptor->ovl_adaptor_comp[i] ||
> > +		    !comp_matches[i].funcs->power_on)
> > +			continue;
> 
> To simplify the code, you could call mtk_ddp_comp_power_on() for all
> sub device, and drop power_on()/power_off() of mdp_rdma.
> 
> Regards,
> CK
> 

Since ovl_adaptor_comp is a `struct device`, we can't reuse
mtk_ddp_comp_power_on() here. Had submited a new version (v9) and wrap
the power off procedure as a static inline function to reuse it.

Regards,
Shawn



^ permalink raw reply	[flat|nested] 37+ messages in thread

end of thread, other threads:[~2023-10-18  4:55 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-16 10:39 [PATCH v8 00/23] Add display driver for MT8188 VDOSYS1 Hsiao Chien Sung
2023-10-16 10:39 ` [PATCH v8 01/23] dt-bindings: display: mediatek: ethdr: Add compatible for MT8188 Hsiao Chien Sung
2023-10-16 10:39 ` [PATCH v8 02/23] dt-bindings: display: mediatek: mdp-rdma: " Hsiao Chien Sung
2023-10-16 10:39 ` [PATCH v8 03/23] dt-bindings: display: mediatek: merge: " Hsiao Chien Sung
2023-10-16 10:39 ` [PATCH v8 07/23] soc: mediatek: Support MT8188 VDOSYS1 in mtk-mmsys Hsiao Chien Sung
2023-10-16 10:39 ` [PATCH v8 08/23] soc: mediatek: Support MT8188 VDOSYS1 Padding " Hsiao Chien Sung
2023-10-16 10:39 ` [PATCH v8 09/23] soc: mediatek: Support reset bit mapping in mmsys driver Hsiao Chien Sung
2023-10-16 10:39 ` [PATCH v8 12/23] drm/mediatek: Refine device table of OVL adaptor Hsiao Chien Sung
2023-10-17  9:40   ` AngeloGioacchino Del Regno
2023-10-16 10:40 ` [PATCH v8 13/23] drm/mediatek: Sort OVL adaptor components Hsiao Chien Sung
2023-10-17  9:40   ` AngeloGioacchino Del Regno
2023-10-16 10:40 ` [PATCH v8 15/23] drm/mediatek: Manage component's clock with function pointers Hsiao Chien Sung
2023-10-17  9:41   ` AngeloGioacchino Del Regno
2023-10-17  9:47   ` AngeloGioacchino Del Regno
2023-10-17 10:50     ` Shawn Sung (宋孝謙)
2023-10-17 11:57       ` AngeloGioacchino Del Regno
2023-10-16 10:40 ` [PATCH v8 18/23] drm/mediatek: Add Padding to OVL adaptor Hsiao Chien Sung
2023-10-17  9:39   ` CK Hu (胡俊光)
2023-10-17  9:47   ` AngeloGioacchino Del Regno
2023-10-17 11:09     ` Shawn Sung (宋孝謙)
2023-10-16 10:40 ` [PATCH v8 20/23] drm/mediatek: Remove the redundant driver data for DPI Hsiao Chien Sung
2023-10-17  9:49   ` AngeloGioacchino Del Regno
2023-10-16 10:40 ` [PATCH v8 21/23] drm/mediatek: Fix underrun in VDO1 when switches off the layer Hsiao Chien Sung
2023-10-17  9:45   ` CK Hu (胡俊光)
2023-10-17  9:50   ` AngeloGioacchino Del Regno
     [not found] ` <20231016104010.3270-5-shawn.sung@mediatek.com>
2023-10-17  9:31   ` [PATCH v8 04/23] dt-bindings: display: mediatek: padding: Add MT8188 AngeloGioacchino Del Regno
     [not found] ` <20231016104010.3270-12-shawn.sung@mediatek.com>
2023-10-17  9:40   ` [PATCH v8 11/23] drm/mediatek: Rename OVL_ADAPTOR_TYPE_RDMA AngeloGioacchino Del Regno
     [not found] ` <20231016104010.3270-15-shawn.sung@mediatek.com>
2023-10-17  9:40   ` [PATCH v8 14/23] drm/mediatek: Add component ID to component match structure AngeloGioacchino Del Regno
     [not found] ` <20231016104010.3270-17-shawn.sung@mediatek.com>
2023-10-17  9:41   ` [PATCH v8 16/23] drm/mediatek: Start/Stop components with function pointers AngeloGioacchino Del Regno
     [not found] ` <20231016104010.3270-18-shawn.sung@mediatek.com>
2023-10-17  9:36   ` [PATCH v8 17/23] drm/mediatek: Support MT8188 Padding in display driver CK Hu (胡俊光)
2023-10-17  9:44   ` AngeloGioacchino Del Regno
2023-10-17 11:17     ` Shawn Sung (宋孝謙)
     [not found] ` <20231016104010.3270-20-shawn.sung@mediatek.com>
2023-10-17  9:48   ` [PATCH v8 19/23] drm/mediatek: Return error if MDP RDMA failed to enable the clock AngeloGioacchino Del Regno
     [not found] ` <20231016104010.3270-23-shawn.sung@mediatek.com>
2023-10-17  9:54   ` [PATCH v8 22/23] drm/mediatek: Power on devices in OVL adaptor when atomic enable AngeloGioacchino Del Regno
2023-10-17 11:04     ` Shawn Sung (宋孝謙)
2023-10-18  2:02   ` CK Hu (胡俊光)
2023-10-18  4:54     ` Shawn Sung (宋孝謙)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox