Patch "Revert "drm/bridge: ti-sn65dsi83: Fix enable error path"" has been added to the 6.1-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    Revert "drm/bridge: ti-sn65dsi83: Fix enable error path"

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     revert-drm-bridge-ti-sn65dsi83-fix-enable-error-path.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 56a721e0d358c92f0571f860f4fa6e738e1b9de1
Author: Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx>
Date:   Fri Apr 26 14:22:59 2024 +0200

    Revert "drm/bridge: ti-sn65dsi83: Fix enable error path"
    
    [ Upstream commit ad81feb5b6f1f5461641706376dcf7a9914ed2e7 ]
    
    This reverts commit 8a91b29f1f50ce7742cdbe5cf11d17f128511f3f.
    
    The regulator_disable() added by the original commit solves one kind of
    regulator imbalance but adds another one as it allows the regulator to be
    disabled one more time than it is enabled in the following scenario:
    
     1. Start video pipeline -> sn65dsi83_atomic_pre_enable -> regulator_enable
     2. PLL lock fails -> regulator_disable
     3. Stop video pipeline -> sn65dsi83_atomic_disable -> regulator_disable
    
    The reason is clear from the code flow, which looks like this (after
    removing unrelated code):
    
      static void sn65dsi83_atomic_pre_enable()
      {
          regulator_enable(ctx->vcc);
    
          if (PLL failed locking) {
              regulator_disable(ctx->vcc);  <---- added by patch being reverted
              return;
          }
      }
    
      static void sn65dsi83_atomic_disable()
      {
          regulator_disable(ctx->vcc);
      }
    
    The use case for introducing the additional regulator_disable() was
    removing the module for debugging (see link below for the discussion). If
    the module is removed after a .atomic_pre_enable, i.e. with an active
    pipeline from the DRM point of view, .atomic_disable is not called and thus
    the regulator would not be disabled.
    
    According to the discussion however there is no actual use case for
    removing the module with an active pipeline, except for
    debugging/development.
    
    On the other hand, the occurrence of a PLL lock failure is possible due to
    any physical reason (e.g. a temporary hardware failure for electrical
    reasons) so handling it gracefully should be supported. As there is no way
    for .atomic[_pre]_enable to report an error to the core, the only clean way
    to support it is calling regulator_disabled() only in .atomic_disable,
    unconditionally, as it was before.
    
    Link: https://lore.kernel.org/all/15244220.uLZWGnKmhe@steina-w/
    Fixes: 8a91b29f1f50 ("drm/bridge: ti-sn65dsi83: Fix enable error path")
    Reviewed-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx>
    Signed-off-by: Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx>
    Signed-off-by: Robert Foss <rfoss@xxxxxxxxxx>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240426122259.46808-1-luca.ceresoli@xxxxxxxxxxx
    (cherry picked from commit 2940ee03b23281071620dda1d790cd644dabd394)
    Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
index 3f43b44145a89..52008a72bd49a 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
@@ -478,7 +478,6 @@ static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge,
 		dev_err(ctx->dev, "failed to lock PLL, ret=%i\n", ret);
 		/* On failure, disable PLL again and exit. */
 		regmap_write(ctx->regmap, REG_RC_PLL_EN, 0x00);
-		regulator_disable(ctx->vcc);
 		return;
 	}
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux