From: Yongqiang Niu <yongqiang....@mediatek.com>

This patch add RDMA fifo size error handle
rdma fifo size will not always bigger than the calculated threshold
if that case happened, we need set fifo size as the threshold

Signed-off-by: Yongqiang Niu <yongqiang....@mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_disp_rdma.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c 
b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
index b0a5cff..ead38ba 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
@@ -137,11 +137,14 @@ static void mtk_rdma_config(struct mtk_ddp_comp *comp, 
unsigned int width,
 {
        unsigned int threshold;
        unsigned int reg;
+       unsigned int rdma_fifo_size;
        struct mtk_disp_rdma *rdma = comp_to_rdma(comp);
 
        rdma_update_bits(comp, DISP_REG_RDMA_SIZE_CON_0, 0xfff, width);
        rdma_update_bits(comp, DISP_REG_RDMA_SIZE_CON_1, 0xfffff, height);
 
+       rdma_fifo_size = RDMA_FIFO_SIZE(rdma);
+
        /*
         * Enable FIFO underflow since DSI and DPI can't be blocked.
         * Keep the FIFO pseudo size reset default of 8 KiB. Set the
@@ -149,8 +152,12 @@ static void mtk_rdma_config(struct mtk_ddp_comp *comp, 
unsigned int width,
         * account for blanking, and with a pixel depth of 4 bytes:
         */
        threshold = width * height * vrefresh * 4 * 7 / 1000000;
+
+       if (threshold > rdma_fifo_size)
+               threshold = rdma_fifo_size;
+
        reg = RDMA_FIFO_UNDERFLOW_EN |
-             RDMA_FIFO_PSEUDO_SIZE(RDMA_FIFO_SIZE(rdma)) |
+             RDMA_FIFO_PSEUDO_SIZE(rdma_fifo_size) |
              RDMA_OUTPUT_VALID_FIFO_THRESHOLD(threshold);
        writel(reg, comp->regs + DISP_REG_RDMA_FIFO_CON);
 }
-- 
1.8.1.1.dirty

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to