Re: regression: drm/omapdrm: Move commit_modeset_enables() before commit_planes()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19/04/17 18:49, Jyri Sarha wrote:
> On 04/19/17 16:35, Tomi Valkeinen wrote:
>> I was able to reproduce on my very old omap3 beagleboard. Looks very
>> much like a omap3 DSS HW bug to me. The unfortunate thing is that even
>> reverting the patch won't remove the issue, if the userspace happens to
>> configure things in certain order.
>>
>> It looks to me that if the DSS output is enabled without an overlay (the
>> primary plane, normally), DSS gets stuck into a bad state, and only
>> reboot helps (because we can't reset, there's no omap hwmod reset
>> framework).
>>
>> But there should be nothing wrong with that setup, and if there's first
>> been a successful display enable, then later we can enable the DSS
>> without any planes.
> 
> If that is the case, then maybe we could just enable errata i734 (the
> gamma bug) work a round for omap3 too. The work a round makes an
> artificial minimal display setup with GFX plane for one frame, with
> outputs masked, so it could be exactly what we need.

Yep, that did come to my mind and I tested it yesterday. However, I
failed to realize there's the WA init part, and I only made sure the
dispc_errata_i734_wa() is called.

Now that I set the bit in the dispc features, it indeed seems to fix the
issue.

Below is a hack patch for people to try out. It's based on today's
linux-next, but should apply to more or less any semi-recent kernel. If
it works for others, I'll create a proper patch, which drops the
has_gamma_i734_bug flag and always does the WA.

 Tomi

From 657694ed06ab57b61a5523954d15147e73a1e226 Mon Sep 17 00:00:00 2001
From: Tomi Valkeinen <tomi.valkeinen@xxxxxx>
Date: Thu, 20 Apr 2017 09:25:04 +0300
Subject: [PATCH] dispc hackfix


diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c
b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 5ac0145fbae6..6daf23f1ce3d 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -4004,6 +4004,7 @@ static const struct dispc_features
omap24xx_dispc_feats = {
 	.no_framedone_tv	=	true,
 	.set_max_preload	=	false,
 	.last_pixel_inc_missing	=	true,
+	.has_gamma_i734_bug	=	true,
 };

 static const struct dispc_features omap34xx_rev1_0_dispc_feats = {
@@ -4025,6 +4026,7 @@ static const struct dispc_features
omap34xx_rev1_0_dispc_feats = {
 	.no_framedone_tv	=	true,
 	.set_max_preload	=	false,
 	.last_pixel_inc_missing	=	true,
+	.has_gamma_i734_bug	=	true,
 };

 static const struct dispc_features omap34xx_rev3_0_dispc_feats = {
@@ -4046,6 +4048,7 @@ static const struct dispc_features
omap34xx_rev3_0_dispc_feats = {
 	.no_framedone_tv	=	true,
 	.set_max_preload	=	false,
 	.last_pixel_inc_missing	=	true,
+	.has_gamma_i734_bug	=	true,
 };

 static const struct dispc_features omap44xx_dispc_feats = {

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux