Re: [PATCH RFT v2 0/5] drm: Add and use drm_fb_dma_get_gem_clipped_addr() helper
From: Icenowy Zheng
Date: Thu Sep 17 2026 - 07:34:14 EST
在 2026-09-16三的 11:33 +0800,Chen-Yu Tsai写道:
> Hi,
>
> This is v2 of my drm_fb_dma_get_gem_clipped_addr() series.
>
> Changes since v1:
> - Add and use new drm_framebuffer_get_block_offset() helper (Thomas)
>
>
> This series adds a helper to retrieve the buffer starting address of
> a
> "clipped" framebuffer. This contrasts with drm_fb_dma_get_gem_addr(),
> which gives the address of the full buffer.
Should vs_fb_get_dma_addr() in verisilicon/vs_plane.c be replaced with
this helper too?
I implemented manual framebuffer offset addition here.
Thanks,
Icenowy
>
> Some drivers program their hardware with clipped dimensions, so they
> should be using the clipped buffer address as well, unless the
> hardware
> can advance the scanout directly. (Side note: many drivers still use
> the non-clipped dimensions.)
>
> While at it, also pull out the offset calculation of
> drm_fb_dma_get_gem_addr()
> into a separate helper in drm_framebuffer.[ch], thereby separating
> responsibilities.
>
> The sun4i driver was recently incorrectly converted to use the
> unclipped
> drm_fb_dma_get_gem_addr() helper. This broke offsets into subsampled
> pixel groups, but also exposed the mismatch between the dimensions
> used
> vs the buffer address. Two other drivers were also touched.
>
>
> Patch 1 adds a new helper to return the byte offset into a
> framebuffer
> for the start of the pixel block of the given pixel coordinates.
>
> Patch 2 adds the new helper to return the buffer address based on
> clipped coordinates.
>
> Patch 3 switches the sun4i driver to the new helper, and fixes the
> luma plane buffer address offset for subsampled YUV formats.
>
> Patch 4 converts the imx/dc driver to use the new helper. This fixes
> a
> mismatch between the programmed coordinates and the buffer address.
>
> Patch 5 replaces the open coded buffer address calculation in the
> imx/dcss driver with the new helper. Existing behavior, which might
> be
> wrong, is preserved.
>
>
> Please help test. The series is only compile tested on my end. The
> sun4i
> changes should revert its behavior to before the
> drm_fb_dma_get_gem_addr()
> was adopted. The imx/dcss changes should not have any behavioral
> difference.
>
>
> Thanks
> ChenYu
>
> Chen-Yu Tsai (5):
> drm: Split framebuffer pixel offset calculation from
> drm_fb_dma_get_gem_addr()
> drm/fb-dma-helper: Add drm_fb_dma_get_gem_clipped_addr()
> drm/sun4i: layers: Fix VI buffer address for clipped offsets
> drm/imx/dc: plane: Switch to drm_fb_dma_get_gem_clipped_addr()
> drm/imx/dcss: plane: Switch to drm_fb_dma_get_gem_clipped_addr()
>
> drivers/gpu/drm/drm_fb_dma_helper.c | 61 ++++++++++++++----------
> --
> drivers/gpu/drm/drm_framebuffer.c | 45 +++++++++++++++++++
> drivers/gpu/drm/imx/dc/dc-plane.c | 4 +-
> drivers/gpu/drm/imx/dcss/dcss-plane.c | 34 ++++++--------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 2 +-
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 16 ++++++-
> include/drm/drm_fb_dma_helper.h | 4 ++
> include/drm/drm_framebuffer.h | 3 ++
> 8 files changed, 118 insertions(+), 51 deletions(-)