mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v3 00/10] drm/bridge: cdns-dsi: Fix the color-shift issue
@ 2024-06-17 10:53 Aradhya Bhatia
  2024-06-17 10:53 ` [PATCH v3 01/10] drm/bridge: cdns-dsi: Fix OF node pointer Aradhya Bhatia
                   ` (9 more replies)
  0 siblings, 10 replies; 18+ messages in thread
From: Aradhya Bhatia @ 2024-06-17 10:53 UTC (permalink / raw)
  To: Dmitry Baryshkov, Tomi Valkeinen, Andrzej Hajda, Neil Armstrong,
	Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Maarten Lankhorst, Maxime Ripard, Jyri Sarha, Thomas Zimmermann,
	David Airlie, Daniel Vetter
  Cc: DRI Development List, Linux Kernel List, Dominik Haller,
	Sam Ravnborg, Thierry Reding, Kieran Bingham, Nishanth Menon,
	Vignesh Raghavendra, Praneeth Bajjuri, Udit Kumar,
	Devarsh Thakkar, Jayesh Choudhary, Jai Luthra, Aradhya Bhatia

Hello all,

This series provides some crucial fixes and improvements for the Cadence's DSI
TX (cdns-dsi) controller found commonly in Texas Instruments' J7 family of SoCs
as well as in AM62P.

Along with that, this series aims to fix the color-shift issue that has been
going on with the DSI controller. This controller requires to be enabled before
the previous entity enables its stream[0]. It's a strict requirement which, if
not followed, causes the colors to "shift" on the display. The fix happens in
2 steps.

    1. The bridge pre_enable calls have been shifted before the crtc_enable and
       the bridge post_disable calls have been shifted after the crtc_disable.
       This has been done as per the definition of bridge pre_enable.

       "The display pipe (i.e. clocks and timing signals) feeding this bridge
       will not yet be running when this callback is called".

       Since CRTC is also a source feeding the bridge, it should not be enabled
       before the bridges in the pipeline are pre_enabled.

       The sequence of enable after this patch will look like:

	        bridge[n]_pre_enable
	        ...
	        bridge[1]_pre_enable

	        crtc_enable
	        encoder_enable

	        bridge[1]_enable
	        ...
	        bridge[n]_enable

       and vice-versa for the bridge chain disable sequence.


    2. The cdns-dsi enable / disable sequences have now been moved to pre_enable
       and post_disable sequences. This is the only way to have cdns-dsi drivers
       be up and ready before the previous entity is enables its streaming.

The DSI also spec requires the Clock and Data Lanes be ready before the DSI TX
enables its stream[0]. A patch has been added to make the code wait for that to
happen. Going ahead with further DSI (and DSS configuration), while the lanes
are not ready, has been found to be another reason for shift in colors.

All these patches have been tested on TI's vendor tree kernel with more devices,
but for the mainline, these patches have been tested with J721E based
BeagleboneAI64 along with a RaspberryPi 7" DSI panel. The extra patches can be
found in the "next_dsi-v2-tests" branch of my github fork[1] for anyone who
would like to test them.

Thanks,
Aradhya


[0]: Section 12.6.5.7.3: "Start-up Procedure" [For DSI TX controller]
     in TDA4VM Technical Reference Manual https://www.ti.com/lit/zip/spruil1

[1]: https://github.com/aradhya07/linux-ab/tree/next_dsi-v3-finals-test

Change Log:

  - Changes in v3:
    - Reword the commit message for patch "drm/bridge: cdns-dsi: Fix OF node
      pointer".
    - Add a new helper API to figure out DSI host input pixel format
      in patch "drm/mipi-dsi: Add helper to find input format".
    - Use a common function for bridge pre-enable and enable, and bridge disable
      and post-disable, to avoid code duplication.
    - Add T-b tag from Dominik Haller in patch 5/10. (Missed to add it in v2).
    - Add R-b tag from Dmitry Baryshkov for patch 8/10.

  - Changes in v2:
    - Drop patch "drm/tidss: Add CRTC mode_fixup"
    - Split patch "drm/bridge: cdns-dsi: Fix minor bugs" into 4 separate ones
    - Drop support for early_enable/late_disable APIs and instead re-order the
      pre_enable / post_disable APIs to be called before / after crtc_enable /
      crtc_disable.
    - Drop support for early_enable/late_disable in cdns-dsi and use
      pre_enable/post_disable APIs instead to do bridge enable/disable.


Previous versions:

v1: https://lore.kernel.org/all/20240511153051.1355825-1-a-bhatia1@ti.com/
v2: https://lore.kernel.org/all/20240530093621.1925863-1-a-bhatia1@ti.com/

Aradhya Bhatia (10):
  drm/bridge: cdns-dsi: Fix OF node pointer
  drm/bridge: cdns-dsi: Fix the phy_initialized variable
  drm/bridge: cdns-dsi: Fix the link and phy init order
  drm/bridge: cdns-dsi: Fix the clock variable for mode_valid()
  drm/bridge: cdns-dsi: Wait for Clk and Data Lanes to be ready
  drm/bridge: cdns-dsi: Reset the DCS write FIFO
  drm/mipi-dsi: Add helper to find input format
  drm/bridge: cdns-dsi: Support atomic bridge APIs
  drm/atomic-helper: Re-order bridge chain pre-enable and post-disable
  drm/bridge: cdns-dsi: Use pre_enable/post_disable to enable/disable

 .../gpu/drm/bridge/cadence/cdns-dsi-core.c    |  72 +++++---
 drivers/gpu/drm/drm_atomic_helper.c           | 165 ++++++++++++------
 drivers/gpu/drm/drm_mipi_dsi.c                |  37 ++++
 include/drm/drm_atomic_helper.h               |   7 +
 include/drm/drm_mipi_dsi.h                    |   1 +
 5 files changed, 201 insertions(+), 81 deletions(-)


base-commit: 6906a84c482f098d31486df8dc98cead21cce2d0
-- 
2.34.1


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2024-06-19 11:57 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-17 10:53 [PATCH v3 00/10] drm/bridge: cdns-dsi: Fix the color-shift issue Aradhya Bhatia
2024-06-17 10:53 ` [PATCH v3 01/10] drm/bridge: cdns-dsi: Fix OF node pointer Aradhya Bhatia
2024-06-17 11:57   ` Dmitry Baryshkov
2024-06-17 10:53 ` [PATCH v3 02/10] drm/bridge: cdns-dsi: Fix the phy_initialized variable Aradhya Bhatia
2024-06-17 11:59   ` Dmitry Baryshkov
2024-06-17 14:16     ` Aradhya Bhatia
2024-06-17 19:34       ` Dmitry Baryshkov
2024-06-19 11:56         ` Aradhya Bhatia
2024-06-17 10:53 ` [PATCH v3 03/10] drm/bridge: cdns-dsi: Fix the link and phy init order Aradhya Bhatia
2024-06-17 10:53 ` [PATCH v3 04/10] drm/bridge: cdns-dsi: Fix the clock variable for mode_valid() Aradhya Bhatia
2024-06-17 10:53 ` [PATCH v3 05/10] drm/bridge: cdns-dsi: Wait for Clk and Data Lanes to be ready Aradhya Bhatia
2024-06-17 10:53 ` [PATCH v3 06/10] drm/bridge: cdns-dsi: Reset the DCS write FIFO Aradhya Bhatia
2024-06-17 12:04   ` Dmitry Baryshkov
2024-06-17 10:53 ` [PATCH v3 07/10] drm/mipi-dsi: Add helper to find input format Aradhya Bhatia
2024-06-17 12:00   ` Dmitry Baryshkov
2024-06-17 10:53 ` [PATCH v3 08/10] drm/bridge: cdns-dsi: Support atomic bridge APIs Aradhya Bhatia
2024-06-17 10:53 ` [PATCH v3 09/10] drm/atomic-helper: Re-order bridge chain pre-enable and post-disable Aradhya Bhatia
2024-06-17 10:53 ` [PATCH v3 10/10] drm/bridge: cdns-dsi: Use pre_enable/post_disable to enable/disable Aradhya Bhatia

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®