linux_dsm_epyc7002/drivers/gpu/drm/panel
Sebastian Reichel 7c4bada12d drm/panel: sony-acx565akm: Fix race condition in probe
The probe routine acquires the reset GPIO using GPIOD_OUT_LOW. Directly
afterwards it calls acx565akm_detect(), which sets the GPIO value to
HIGH. If the bootloader initialized the GPIO to HIGH before the probe
routine was called, there is only a very short time period of a few
instructions where the reset signal is LOW. Exact time depends on
compiler optimizations, kernel configuration and alignment of the stars,
but I expect it to be always way less than 10us. There are no public
datasheets for the panel, but acx565akm_power_on() has a comment with
timings and reset period should be at least 10us. So this potentially
brings the panel into a half-reset state.

The result is, that panel may not work after boot and can get into a
working state by re-enabling it (e.g. by blanking + unblanking), since
that does a clean reset cycle. This bug has recently been hit by Ivaylo
Dimitrov, but there are some older reports which are probably the same
bug. At least Tony Lindgren, Peter Ujfalusi and Jarkko Nikula have
experienced it in 2017 describing the blank/unblank procedure as
possible workaround.

Note, that the bug really goes back in time. It has originally been
introduced in the predecessor of the omapfb driver in commit 3c45d05be3
("OMAPDSS: acx565akm panel: handle gpios in panel driver") in 2012.
That driver eventually got replaced by a newer one, which had the bug
from the beginning in commit 84192742d9 ("OMAPDSS: Add Sony ACX565AKM
panel driver") and still exists in fbdev world. That driver has later
been copied to omapdrm and then was used as a basis for this driver.
Last but not least the omapdrm specific driver has been removed in
commit 45f16c82db ("drm/omap: displays: Remove unused panel drivers").

Reported-by: Jarkko Nikula <jarkko.nikula@bitmer.com>
Reported-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Reported-by: Tony Lindgren <tony@atomide.com>
Reported-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Reported-by: Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com>
Cc: Merlijn Wajer <merlijn@wizzup.org>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Fixes: 1c8fc3f0c5 ("drm/panel: Add driver for the Sony ACX565AKM panel")
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Tested-by: Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com>
Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Tested-by: Jarkko Nikula <jarkko.nikula@bitmer.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20201127200429.129868-1-sebastian.reichel@collabora.com
2020-11-29 22:38:12 +01:00
..
Kconfig drm/panel: s6e63m0: Add DSI transport 2020-09-05 01:23:45 +02:00
Makefile drm/panel: s6e63m0: Add DSI transport 2020-09-05 01:23:45 +02:00
panel-arm-versatile.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-asus-z00t-tm5p5-n35596.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-boe-himax8279d.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-boe-tv101wum-nl6.c drm/panel: Read panel orientation for BOE TV101WUM-NL6 2020-08-16 17:12:18 +02:00
panel-elida-kd35t133.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-feixin-k101-im2ba02.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-feiyang-fy07024di26a30d.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-ilitek-ili9322.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-ilitek-ili9881c.c drm/panel: ilitek-ili9881c: add support for Feixin K101-IM2BYL02 panel 2020-08-15 16:51:00 +02:00
panel-innolux-p079zca.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-jdi-lt070me05000.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-kingdisplay-kd097d04.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-leadtek-ltk050h3146w.c drm/panel: leadtek: Use dev_ based logging 2020-08-18 22:31:48 +02:00
panel-leadtek-ltk500hd1829.c drm/panel: leadtek: Use dev_ based logging 2020-08-18 22:31:48 +02:00
panel-lg-lb035q02.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-lg-lg4573.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-lvds.c drm/panel: lvds: Read panel orientation 2020-08-16 17:12:18 +02:00
panel-mantix-mlaf057we51.c drm/panel: mantix: Fix panel reset 2020-10-23 10:05:17 +02:00
panel-nec-nl8048hl11.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-novatek-nt35510.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-novatek-nt39016.c drm/panel: novatek,nt39016: Remove 'dev' field in priv struct 2020-08-20 18:34:42 +02:00
panel-olimex-lcd-olinuxino.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-orisetech-otm8009a.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-osd-osd101t2587-53ts.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-panasonic-vvx10f034n00.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-raspberrypi-touchscreen.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-raydium-rm67191.c drm/panel: rm67191: Remove CLOCK_NON_CONTINUOUS flag 2020-08-29 23:01:36 +02:00
panel-raydium-rm68200.c drm/panel: raydium: Use dev_ based logging 2020-08-18 22:32:08 +02:00
panel-ronbo-rb070d30.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-samsung-ld9040.c drm/panel: samsung: Use dev_ based logging 2020-08-18 22:31:09 +02:00
panel-samsung-s6d16d0.c drm/panel: samsung: Use dev_ based logging 2020-08-18 22:31:09 +02:00
panel-samsung-s6e3ha2.c drm/panel: samsung: Use dev_ based logging 2020-08-18 22:31:09 +02:00
panel-samsung-s6e8aa0.c drm/panel: samsung: Use dev_ based logging 2020-08-18 22:31:09 +02:00
panel-samsung-s6e63j0x03.c drm/panel: samsung: Use dev_ based logging 2020-08-18 22:31:09 +02:00
panel-samsung-s6e63m0-dsi.c drm/panel: s6e63m0: Fix up DRM_DEV* regression 2020-09-06 21:55:03 +02:00
panel-samsung-s6e63m0-spi.c drm/panel: s6e63m0: Fix up DRM_DEV* regression 2020-09-06 21:55:03 +02:00
panel-samsung-s6e63m0.c drm/panel: s6e63m0: Add missing MODULE_LICENSE 2020-09-10 08:53:06 +02:00
panel-samsung-s6e63m0.h drm/panel: s6e63m0: Add reading functionality 2020-09-05 01:24:26 +02:00
panel-samsung-s6e88a0-ams452ef01.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-seiko-43wvf1g.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-sharp-lq101r1sx01.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-sharp-ls037v7dw01.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-sharp-ls043t1le01.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-simple.c drm: panel: Fix bpc for OrtusTech COM43H4M85ULC panel 2020-08-30 00:10:44 +02:00
panel-sitronix-st7701.c drm/panel: sitronix: Use dev_ based logging 2020-08-18 22:32:23 +02:00
panel-sitronix-st7703.c drm/panel: sitronix: Use dev_ based logging 2020-08-18 22:32:23 +02:00
panel-sitronix-st7789v.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-sony-acx424akp.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-sony-acx565akm.c drm/panel: sony-acx565akm: Fix race condition in probe 2020-11-29 22:38:12 +01:00
panel-tpo-td028ttec1.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-tpo-td043mtea1.c drm/panel: remove return value of function drm_panel_add 2020-08-02 08:59:06 +02:00
panel-tpo-tpg110.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-truly-nt35597.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-visionox-rm69299.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00
panel-xinpeng-xpp055c272.c drm/panel: Use dev_ based logging 2020-08-18 22:32:37 +02:00