Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/mediatek: Add display merge start/stop API for cmdq support

Add merge start/stop API for cmdq support. The ovl_adaptor merges
are configured with each drm plane update. Need to enable/disable
merge with cmdq making sure all the settings taken effect in the
same vblank.

Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
Link: https://patchwork.kernel.org/project/linux-mediatek/patch/20220620091930.27797-6-nancy.lin@mediatek.com/
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>

authored by

Nancy.Lin and committed by
Chun-Kuang Hu
d2ae586f 7e4727f7

+18 -4
+2
drivers/gpu/drm/mediatek/mtk_disp_drv.h
··· 66 66 void mtk_merge_advance_config(struct device *dev, unsigned int l_w, unsigned int r_w, 67 67 unsigned int h, unsigned int vrefresh, unsigned int bpc, 68 68 struct cmdq_pkt *cmdq_pkt); 69 + void mtk_merge_start_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt); 70 + void mtk_merge_stop_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt); 69 71 70 72 void mtk_ovl_bgclr_in_on(struct device *dev); 71 73 void mtk_ovl_bgclr_in_off(struct device *dev);
+16 -4
drivers/gpu/drm/mediatek/mtk_disp_merge.c
··· 68 68 69 69 void mtk_merge_start(struct device *dev) 70 70 { 71 - struct mtk_disp_merge *priv = dev_get_drvdata(dev); 72 - 73 - writel(MERGE_EN, priv->regs + DISP_REG_MERGE_CTRL); 71 + mtk_merge_start_cmdq(dev, NULL); 74 72 } 75 73 76 74 void mtk_merge_stop(struct device *dev) 77 75 { 76 + mtk_merge_stop_cmdq(dev, NULL); 77 + } 78 + 79 + void mtk_merge_start_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt) 80 + { 78 81 struct mtk_disp_merge *priv = dev_get_drvdata(dev); 79 82 80 - writel(0x0, priv->regs + DISP_REG_MERGE_CTRL); 83 + mtk_ddp_write(cmdq_pkt, 1, &priv->cmdq_reg, priv->regs, 84 + DISP_REG_MERGE_CTRL); 85 + } 86 + 87 + void mtk_merge_stop_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt) 88 + { 89 + struct mtk_disp_merge *priv = dev_get_drvdata(dev); 90 + 91 + mtk_ddp_write(cmdq_pkt, 0, &priv->cmdq_reg, priv->regs, 92 + DISP_REG_MERGE_CTRL); 81 93 } 82 94 83 95 static void mtk_merge_fifo_setting(struct mtk_disp_merge *priv,