[PATCH] drm/imx: Add more RGB swizzling options
Liu Ying
victor.liu at nxp.com
Sun Oct 19 22:37:16 PDT 2025
On 10/17/2025, Marek Vasut wrote:
> Add additional buffer format swizzling options beyond XR24, the
> hardware is capable of sampling other formats, fill them in.
This would make me change my patch series of adding i.MX8qxp DC
prefetch engine support, because that patch series supports only XR24.
But, I don't mind doing that as long as this doesn't support RG24 and
BG24.
>
> Signed-off-by: Marek Vasut <marek.vasut at mailbox.org>
The subject prefix should be specific to "drm/imx: dc-plane:".
> ---
> Cc: Abel Vesa <abelvesa at kernel.org>
> Cc: Conor Dooley <conor+dt at kernel.org>
> Cc: Fabio Estevam <festevam at gmail.com>
> Cc: Krzysztof Kozlowski <krzk+dt at kernel.org>
> Cc: Laurent Pinchart <Laurent.pinchart at ideasonboard.com>
> Cc: Liu Ying <victor.liu at nxp.com>
> Cc: Lucas Stach <l.stach at pengutronix.de>
> Cc: Peng Fan <peng.fan at nxp.com>
> Cc: Pengutronix Kernel Team <kernel at pengutronix.de>
> Cc: Rob Herring <robh at kernel.org>
> Cc: Shawn Guo <shawnguo at kernel.org>
> Cc: Thomas Zimmermann <tzimmermann at suse.de>
> Cc: devicetree at vger.kernel.org
> Cc: dri-devel at lists.freedesktop.org
> Cc: imx at lists.linux.dev
> Cc: linux-arm-kernel at lists.infradead.org
> Cc: linux-clk at vger.kernel.org
> ---
> Liu, please test on MX8qxp , I do not have that hardware.
I've tested XB24, RX24, BX24 and RG16 on i.MX8qxp MEK board.
> ---
> drivers/gpu/drm/imx/dc/dc-fu.c | 40 +++++++++++++++++++++++++++++++
> drivers/gpu/drm/imx/dc/dc-plane.c | 8 +++++++
> 2 files changed, 48 insertions(+)
>
> diff --git a/drivers/gpu/drm/imx/dc/dc-fu.c b/drivers/gpu/drm/imx/dc/dc-fu.c
> index 1d8f74babef8a..397af0e9b0236 100644
> --- a/drivers/gpu/drm/imx/dc/dc-fu.c
> +++ b/drivers/gpu/drm/imx/dc/dc-fu.c
> @@ -65,6 +65,46 @@ static const struct dc_fu_pixel_format pixel_formats[] = {
> DRM_FORMAT_XRGB8888,
> R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(0),
> R_SHIFT(16) | G_SHIFT(8) | B_SHIFT(0) | A_SHIFT(0),
> + }, {
> + DRM_FORMAT_ARGB8888,
Since we only support primary plane and this one contains alpha component,
I'd prefer to seeing it being supported when overlay plane is enabled in the
future, not now.
Same to the other formats with alpha component.
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(8),
> + R_SHIFT(16) | G_SHIFT(8) | B_SHIFT(0) | A_SHIFT(24),
> + }, {
> + DRM_FORMAT_ABGR8888,
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(8),
> + R_SHIFT(0) | G_SHIFT(8) | B_SHIFT(16) | A_SHIFT(24),
> + }, {
> + DRM_FORMAT_XBGR8888,
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(0),
> + R_SHIFT(0) | G_SHIFT(8) | B_SHIFT(16) | A_SHIFT(0),
> + }, {
> + DRM_FORMAT_RGBA8888,
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(8),
> + R_SHIFT(24) | G_SHIFT(16) | B_SHIFT(8) | A_SHIFT(0),
> + }, {
> + DRM_FORMAT_RGBX8888,
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(0),
> + R_SHIFT(24) | G_SHIFT(16) | B_SHIFT(8) | A_SHIFT(0),
> + }, {
> + DRM_FORMAT_BGRA8888,
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(8),
> + R_SHIFT(8) | G_SHIFT(16) | B_SHIFT(24) | A_SHIFT(0),
> + }, {
> + DRM_FORMAT_BGRX8888,
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(0),
> + R_SHIFT(8) | G_SHIFT(16) | B_SHIFT(24) | A_SHIFT(0),
> + }, {
> + DRM_FORMAT_RGB888,
This is not in dc_plane_formats[] below.
Also, I don't think the prefetch engines(DPRC + PRG) of i.MX8qxp/qm DC
support this pixel format, though the DC itself seems to support it(but
NXP downstream kernel doesn't support it). So, in order not to support
bypassing the prefetch engines in runtime(which makes the driver a lot
more complicated), I hope that we don't bother to support it(even forever).
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(0),
> + R_SHIFT(16) | G_SHIFT(8) | B_SHIFT(0) | A_SHIFT(0),
> + }, {
> + DRM_FORMAT_BGR888,
Ditto.
> + R_BITS(8) | G_BITS(8) | B_BITS(8) | A_BITS(0),
> + R_SHIFT(0) | G_SHIFT(8) | B_SHIFT(16) | A_SHIFT(0),
> + }, {
> + DRM_FORMAT_RGB565,
> + R_BITS(5) | G_BITS(6) | B_BITS(5) | A_BITS(0),
> + R_SHIFT(11) | G_SHIFT(5) | B_SHIFT(0) | A_SHIFT(0),
> },
> };
>
> diff --git a/drivers/gpu/drm/imx/dc/dc-plane.c b/drivers/gpu/drm/imx/dc/dc-plane.c
> index e40d5d66c5c1f..68d32b76fab95 100644
> --- a/drivers/gpu/drm/imx/dc/dc-plane.c
> +++ b/drivers/gpu/drm/imx/dc/dc-plane.c
> @@ -33,6 +33,14 @@ do { \
>
> static const uint32_t dc_plane_formats[] = {
> DRM_FORMAT_XRGB8888,
> + DRM_FORMAT_ARGB8888,
> + DRM_FORMAT_ABGR8888,
> + DRM_FORMAT_XBGR8888,
> + DRM_FORMAT_RGBA8888,
> + DRM_FORMAT_RGBX8888,
> + DRM_FORMAT_BGRA8888,
> + DRM_FORMAT_BGRX8888,
> + DRM_FORMAT_RGB565,
I suppose that this patch may support only the below formats for now.
+ DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_RGBX8888,
+ DRM_FORMAT_BGRX8888,
+ DRM_FORMAT_RGB565,
> };
>
> static const struct drm_plane_funcs dc_plane_funcs = {
--
Regards,
Liu Ying
More information about the linux-arm-kernel
mailing list