mirror-linux/drivers/gpu/drm/bridge
Michael Walle ff3d5d04db
drm: bridge: samsung-dsim: Don't use FORCE_STOP_STATE
The FORCE_STOP_STATE bit is unsuitable to force the DSI link into LP-11
mode. It seems the bridge internally queues DSI packets and when the
FORCE_STOP_STATE bit is cleared, they are sent in close succession
without any useful timing (this also means that the DSI lanes won't go
into LP-11 mode). The length of this gibberish varies between 1ms and
5ms. This sometimes breaks an attached bridge (TI SN65DSI84 in this
case). In our case, the bridge will fail in about 1 per 500 reboots.

The FORCE_STOP_STATE handling was introduced to have the DSI lanes in
LP-11 state during the .pre_enable phase. But as it turns out, none of
this is needed at all. Between samsung_dsim_init() and
samsung_dsim_set_display_enable() the lanes are already in LP-11 mode.
The code as it was before commit 20c827683d ("drm: bridge:
samsung-dsim: Fix init during host transfer") and 0c14d31306 ("drm:
bridge: samsung-dsim: Fix i.MX8M enable flow to meet spec") was correct
in this regard.

This patch basically reverts both commits. It was tested on an i.MX8M
SoC with an SN65DSI84 bridge. The signals were probed and the DSI
packets were decoded during initialization and link start-up. After this
patch the first DSI packet on the link is a VSYNC packet and the timing
is correct.

Command mode between .pre_enable and .enable was also briefly tested by
a quick hack. There was no DSI link partner which would have responded,
but it was made sure the DSI packet was send on the link. As a side
note, the command mode seems to just work in HS mode. I couldn't find
that the bridge will handle commands in LP mode.

Fixes: 20c827683d ("drm: bridge: samsung-dsim: Fix init during host transfer")
Fixes: 0c14d31306 ("drm: bridge: samsung-dsim: Fix i.MX8M enable flow to meet spec")
Signed-off-by: Michael Walle <mwalle@kernel.org>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231113164344.1612602-1-mwalle@kernel.org
2024-01-26 22:48:47 +09:00
..
adv7511 drm: adv7511: Add hpd_override_enable variable to struct adv7511_chip_info 2023-10-16 11:09:33 +02:00
analogix drm/bridge: anx7625: Ensure bridge is suspended in disable() 2024-01-22 08:53:42 -08:00
cadence drm/bridge: cdns-mhdp8546: Fix use of uninitialized variable 2023-12-07 09:21:44 +02:00
imx drm/bridge: imx93-mipi-dsi: Fix a couple of building warnings 2023-11-28 17:10:30 +01:00
synopsys drm: remove I2C_CLASS_DDC support 2024-01-18 21:10:41 +01:00
Kconfig Linux 6.7-rc5 2023-12-12 11:32:33 +10:00
Makefile drm/bridge: implement generic DP HPD bridge 2023-12-04 16:07:29 +02:00
aux-bridge.c drm/bridge: properly refcount DT nodes in aux bridge drivers 2023-12-19 02:06:16 +02:00
aux-hpd-bridge.c drm/bridge: properly refcount DT nodes in aux bridge drivers 2023-12-19 02:06:16 +02:00
chipone-icn6211.c drm/bridge: icn6211: Convert to use maple tree register cache 2023-10-02 09:09:18 +02:00
chrontel-ch7033.c drm/bridge: fix -Wunused-const-variable= warning 2023-07-31 11:14:24 +02:00
cros-ec-anx7688.c drm: Switch i2c drivers back to use .probe() 2023-05-30 16:55:16 -07:00
display-connector.c drm: Explicitly include correct DT includes 2023-07-21 09:12:43 +02:00
fsl-ldb.c drm: Explicitly include correct DT includes 2023-07-21 09:12:43 +02:00
ite-it6505.c Linux 6.5-rc7 2023-08-24 07:26:06 +10:00
ite-it66121.c drm: bridge: it66121: ->get_edid callback must not return err pointers 2023-09-15 13:00:08 +02:00
lontium-lt8912b.c drm/bridge: lt8912b: Add power supplies 2023-12-04 14:00:00 +01:00
lontium-lt9211.c drm/bridge: lt9211: Convert to use maple tree register cache 2023-10-02 09:09:19 +02:00
lontium-lt9611.c Revert "drm/bridge: lt9611: Do not generate HFP/HBP/HSA and EOT packet" 2023-08-04 10:26:29 +02:00
lontium-lt9611uxc.c drm/bridge: lt9611uxc: fix the race in the error path 2023-10-16 11:44:27 +02:00
lvds-codec.c drm/bridge: lvds-codec: Implement atomic_get_input_bus_fmts for LVDS encoder 2023-08-11 15:09:59 +02:00
megachips-stdpxxxx-ge-b850v3-fw.c drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: switch to drm_do_get_edid() 2023-10-13 16:28:58 +02:00
nwl-dsi.c drm: Explicitly include correct DT includes 2023-07-21 09:12:43 +02:00
nwl-dsi.h
nxp-ptn3460.c drm/bridge: nxp-ptn3460: simplify some error checking 2023-12-06 16:20:23 +01:00
panel.c Revert "drm/bridge: panel: Add a device link between drm device and panel device" 2023-11-28 11:07:30 +01:00
parade-ps8622.c drm: Explicitly include correct DT includes 2023-07-21 09:12:43 +02:00
parade-ps8640.c drm/bridge: parade-ps8640: Make sure we drop the AUX mutex in the error case 2024-01-17 12:08:02 -08:00
samsung-dsim.c drm: bridge: samsung-dsim: Don't use FORCE_STOP_STATE 2024-01-26 22:48:47 +09:00
sii902x.c drm/bridge: sii902x: Fix audio codec unregistration 2024-01-16 09:58:16 +01:00
sii9234.c drm: Switch i2c drivers back to use .probe() 2023-05-30 16:55:16 -07:00
sil-sii8620.c drm/bridge: fix -Wunused-const-variable= warning 2023-07-31 11:14:24 +02:00
sil-sii8620.h
simple-bridge.c drm: Explicitly include correct DT includes 2023-07-21 09:12:43 +02:00
tc358762.c drm/bridge: tc358762: Handle HS/VS polarity 2023-06-22 11:13:31 +02:00
tc358764.c drm/bridge: tc358764: Use BIT() macro for actual bits 2023-06-22 11:02:58 +02:00
tc358767.c drm/bridge: tc358767: Fix return value on error case 2023-12-07 09:21:44 +02:00
tc358768.c drm/bridge: tc358768: Attempt to fix DSI horizontal timings 2023-09-20 13:54:08 +02:00
tc358775.c drm: Switch i2c drivers back to use .probe() 2023-05-30 16:55:16 -07:00
thc63lvd1024.c
ti-dlpc3433.c drm/bridge: dpc3433: Convert to use maple tree register cache 2023-10-02 09:09:17 +02:00
ti-sn65dsi83.c drm/bridge: sn65dsi83: Convert to use maple tree register cache 2023-10-02 09:09:20 +02:00
ti-sn65dsi86.c drm-next for 6.8: 2024-01-12 11:32:19 -08:00
ti-tfp410.c drm/bridge: fix -Wunused-const-variable= warning 2023-07-31 11:14:24 +02:00
ti-tpd12s015.c drm/bridge: tpd12s015: Convert to platform remove callback returning void 2023-11-21 09:17:53 +01:00