This is not directly supported by the display controller hardware. However, this can be handled efficiently on tegradc by just passing the chroma planes to the hardware backwards and reporting it as the yuv equivalent. Nvdisplay has a hardware flag to handle the swap in hardware.
YVU420 is required by AOSP for software decoded video playback among other things. An attempt was made to handle this in gralloc by swapping the chroma planes there, but it wasn't working. This kernel implementation is working and is more generic anyways. This has been verified on a SHIELD TV 2019 Pro for the tegradc path and a Jetson TX2 NX for the nvdisplay path. --- Changes in v3: - In patch 1, use the SWAP_UV window group flag instead of manually swapping for nvdisplay - In patch 2, support the chroma swapped variants of the other yuv types - Link to v2: https://lore.kernel.org/r/[email protected] Changes in v2: - In patch 1, simplify pre-nvdisplay path to a swap of the window base address - In patch 1, address sashiko report about failure to copy the new struct entry in duplicate_state - In patch 2, address sashiko report that yvu420 was missing from tegra20_overlays when the targets already support yuv420. - Link to v1: https://lore.kernel.org/r/[email protected] --- Aaron Kling (2): drm/tegra: Support swapping chroma planes drm/tegra: Support YVU formats drivers/gpu/drm/tegra/dc.c | 13 ++++++++++++- drivers/gpu/drm/tegra/hub.c | 9 +++++++-- drivers/gpu/drm/tegra/plane.c | 29 ++++++++++++++++++++++++++++- drivers/gpu/drm/tegra/plane.h | 3 ++- 4 files changed, 49 insertions(+), 5 deletions(-) --- base-commit: 2efb7a11f1aa4d2dc285fe2680cca22cb9f72f64 change-id: 20261008-tegra-drm-yvu420-1dbb7140e54a Best regards, -- Aaron Kling <[email protected]>
