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