Blob Blame History Raw
From: Thierry Reding <treding@nvidia.com>
Date: Tue, 14 Nov 2017 16:09:30 +0100
Subject: drm/tegra: fb: Force alpha formats
Git-commit: 71835caa00e8a64ada3c2e30c56468c39c81f60c
Patch-mainline: v4.16-rc1
References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166

Tegra20 and Tegra30 don't actually support the 24-bit RGB formats that
don't have an alpha component. In order to allow the fbdev emulation to
run on those chips, force the 32-bit RGBA formats.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
 drivers/gpu/drm/tegra/fb.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

--- a/drivers/gpu/drm/tegra/fb.c
+++ b/drivers/gpu/drm/tegra/fb.c
@@ -253,6 +253,19 @@ static int tegra_fbdev_probe(struct drm_
 	cmd.height = sizes->surface_height;
 	cmd.pitches[0] = round_up(sizes->surface_width * bytes_per_pixel,
 				  tegra->pitch_align);
+
+	/*
+	 * Early generations of Tegra (Tegra20 and Tegra30) do not support any
+	 * of the X* or *X formats, only their A* or *A equivalents. Force the
+	 * legacy framebuffer format to include an alpha component so that the
+	 * framebuffer emulation can be supported on all generations.
+	 */
+	if (sizes->surface_bpp == 32 && sizes->surface_depth == 24)
+		sizes->surface_depth = 32;
+
+	if (sizes->surface_bpp == 16 && sizes->surface_depth == 15)
+		sizes->surface_depth = 16;
+
 	cmd.pixel_format = drm_mode_legacy_fb_format(sizes->surface_bpp,
 						     sizes->surface_depth);