add rdma bypass shadow register function Signed-off-by: Yongqiang Niu <yongqiang.niu@xxxxxxxxxxxx> --- drivers/gpu/drm/mediatek/mtk_disp_rdma.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c index 0683bef..91ed6c6 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c @@ -46,12 +46,16 @@ #define RDMA_FIFO_PSEUDO_SIZE(bytes) (((bytes) / 16) << 16) #define RDMA_OUTPUT_VALID_FIFO_THRESHOLD(bytes) ((bytes) / 16) #define RDMA_FIFO_SIZE(rdma) ((rdma)->data->fifo_size) +#define DISP_REG_RDMA_SHADOW_UPDATE 0x00bc +#define DISP_RDMA_BYPASS_SHADOW BIT(1) +#define DISP_RDMA_READ_WORK_REG BIT(2) #define DISP_RDMA_MEM_START_ADDR 0x0f00 #define RDMA_MEM_GMC 0x40402020 struct mtk_disp_rdma_data { unsigned int fifo_size; + bool has_shadow; }; /** @@ -125,6 +129,21 @@ static void mtk_rdma_stop(struct mtk_ddp_comp *comp) rdma_update_bits(comp, DISP_REG_RDMA_GLOBAL_CON, RDMA_ENGINE_EN, 0); } +static void mtk_rdma_bypass_shadow(struct mtk_ddp_comp *comp) +{ + struct mtk_disp_rdma *rdma = comp_to_rdma(comp); + + if (rdma->data->has_shadow) { + pr_err("disable rdma shadow\n"); + mtk_ddp_write_mask(NULL, DISP_RDMA_BYPASS_SHADOW, comp, + DISP_REG_RDMA_SHADOW_UPDATE, + DISP_RDMA_BYPASS_SHADOW); + mtk_ddp_write_mask(NULL, DISP_RDMA_READ_WORK_REG, comp, + DISP_REG_RDMA_SHADOW_UPDATE, + DISP_RDMA_READ_WORK_REG); + } +} + static void mtk_rdma_config(struct mtk_ddp_comp *comp, unsigned int width, unsigned int height, unsigned int vrefresh, unsigned int bpc, struct cmdq_pkt *cmdq_pkt) @@ -238,6 +257,7 @@ static void mtk_rdma_layer_config(struct mtk_ddp_comp *comp, unsigned int idx, .config = mtk_rdma_config, .start = mtk_rdma_start, .stop = mtk_rdma_stop, + .bypass_shadow = mtk_rdma_bypass_shadow, .enable_vblank = mtk_rdma_enable_vblank, .disable_vblank = mtk_rdma_disable_vblank, .layer_nr = mtk_rdma_layer_nr, -- 1.8.1.1.dirty