[PATCH v8, 5/6] drm/mediatek: add RDMA fifo size error handle

Chun-Kuang Hu chunkuang.hu at kernel.org
Mon Dec 14 09:54:15 EST 2020


Hi, Yongqiang:

Yongqiang Niu <yongqiang.niu at mediatek.com> 於 2020年12月11日 週五 上午8:45寫道:
>
> On Thu, 2020-12-10 at 23:50 +0800, Chun-Kuang Hu wrote:
> > Hi, Yongqiang:
> >
> > Yongqiang Niu <yongqiang.niu at mediatek.com> 於 2020年12月10日 週四 下午5:08寫道:
> > >
> > > 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.niu at mediatek.com>
> > > ---
> > >  drivers/gpu/drm/mediatek/mtk_disp_rdma.c | 4 ++++
> > >  1 file changed, 4 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
> > > index 794acc5..0508392 100644
> > > --- a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
> > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
> > > @@ -151,6 +151,10 @@ 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;
> >
> > If the formula is not correct, you should fix the formula not work around.
> >
> > Regards,
> > Chun-Kuang.
>
> how about this:
> threshold = max(width * height * vrefresh * 4 * 7 / 1000000,
> rdma_fifo_size);

When I use width = 1920, height = 1080, vrefresh = 60 to calculate, I
get threshold = 2985.
So I think set threshold to half of fifo size is OK for MAX_WIDTH,
MAX_HEIGHT, MAX_VREFRESH (these three may be different in each SoC)

threshold = RDMA_FIFO_PSEUDO_SIZE(rdma_fifo_size) / 2;

But I worry half fifo size is too big for small resolution and let
small resolution too easy to trigger burst read DRAM. So let the
formula to be this:

threshold = RDMA_FIFO_PSEUDO_SIZE(rdma_fifo_size) * width * height *
vrefresh / 2 / MAX_WIDTH / MAX_HEIGHT / MAX_VREFRESH;

How do you think about this?

Regards,
Chun-Kuang.

> >
> > > +
> > >         reg = RDMA_FIFO_UNDERFLOW_EN |
> > >               RDMA_FIFO_PSEUDO_SIZE(rdma_fifo_size) |
> > >               RDMA_OUTPUT_VALID_FIFO_THRESHOLD(threshold);
> > > --
> > > 1.8.1.1.dirty
> > > _______________________________________________
> > > Linux-mediatek mailing list
> > > Linux-mediatek at lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/linux-mediatek
>



More information about the linux-arm-kernel mailing list