在 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(-)
