FAILED: patch "[PATCH] drm/msm/dsi: dsi_phy_14nm: Take ready-bit into account in" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 90b7c1c66132c20e8a550006011a3cbfb73dbfc1 Mon Sep 17 00:00:00 2001
From: Marijn Suijten <[email protected]>
Date: Mon, 6 Sep 2021 22:25:51 +0200
Subject: [PATCH] drm/msm/dsi: dsi_phy_14nm: Take ready-bit into account in
poll_for_ready
The downstream driver models this PLL lock check as an if-elseif-else. The only way to reach the else case where pll_locked=true [1] is by succeeding both readl_poll_timeout_atomic calls (which return zero on success) in the if _and_ elseif condition. Hence both the "lock" and "ready" bit need to be tested in the SM_READY_STATUS register before considering the PLL locked and ready to go.
Tested on the Sony Xperia XA2 Ultra (nile-discovery, sdm630).
drivers/gpu/drm/msm/dsi/phy/dsi_phy_14nm.c +15 -15
@@ -110,14 +110,13 @@ static struct dsi_pll_14nm *pll_14nm_list[DSI_MAX];static bool pll_14nm_poll_for_ready (struct dsi_pll_14nm *pll_14nm,u32 nb_tries,u32 timeout_us) { -bool pll_locked = false; +bool pll_locked = false, pll_ready = false;void __iomem *base = pll_14nm->phy->pll_base;u32 tries, val; tries = nb_tries;while (tries--) { - val =dsi_phy_read (base + - REG_DSI_14nm_PHY_PLL_RESET_SM_READY_STATUS); + val =dsi_phy_read (base + REG_DSI_14nm_PHY_PLL_RESET_SM_READY_STATUS); pll_locked = !!(val &BIT (5 ));if (pll_locked)
@@ -126,23 +125,24 @@ static bool pll_14nm_poll_for_ready(struct dsi_pll_14nm *pll_14nm,udelay (timeout_us); } -if (!pll_locked) { - tries = nb_tries; -while (tries--) { - val =dsi_phy_read (base + - REG_DSI_14nm_PHY_PLL_RESET_SM_READY_STATUS); - pll_locked = !!(val &BIT (0 )); +if (!pll_locked) + goto out; -if (pll_locked) -break ; + tries = nb_tries; +while (tries--) { + val =dsi_phy_read (base + REG_DSI_14nm_PHY_PLL_RESET_SM_READY_STATUS); + pll_ready = !!(val &BIT (0 )); -udelay (timeout_us); - } +if (pll_ready) +break ; + +udelay (timeout_us); } -DBG ("DSI PLL is %slocked" , pll_locked ?"" :"*not* " ); +out: +DBG ("DSI PLL is %slocked, %sready" , pll_locked ?"" :"*not* " , pll_ready ?"" :"*not* " ); -return pll_locked; +return pll_locked && pll_ready; }static void dsi_pll_14nm_config_init (struct dsi_pll_config *pconf)