On Thu, Oct 29, 2026 at 08:32:37PM +0800, Qianhui Xu wrote:
> msm_mdss_reset() acquires only the first reset listed in the MDSS
> device node.  Platforms can describe additional MDSS block resets: the
> SM8750 display clock controller provides resets for the MDSS core INT2
> interrupt controller and for the MDSS RSC, which can be left out of
> reset together with the MDSS core when the bootloader hands over with
> the display block still running.
> 
> Switch to the reset control array API so that every reset listed in the
> device node is asserted and released as one group.  Devices without a
> reset in DT are unaffected, and for devices describing a single reset
> the assert/deassert sequence is unchanged.
> 
> The resets are driven from the display driver rather than from the
> display clock controller: the clock controller supplies the MDSS clocks
> and power domain, so it probes first and has already programmed its
> PLLs when MDSS probes.  The block resets do not touch the PLL registers
> and no display pipeline is running yet, so the PLL configuration
> survives the reset.
> 
> Signed-off-by: Qianhui Xu <[email protected]>
> ---
>  drivers/gpu/drm/msm/msm_mdss.c | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
> index 9087c4b290..59343987bc 100644
> --- a/drivers/gpu/drm/msm/msm_mdss.c
> +++ b/drivers/gpu/drm/msm/msm_mdss.c
> @@ -306,11 +306,22 @@ static void msm_mdss_destroy(struct msm_mdss *msm_mdss)
>       irq_set_chained_handler_and_data(irq, NULL, NULL);
>  }
>  
> +/*
> + * The MDSS block resets are driven from the display driver, not from the
> + * display clock controller: the clock controller supplies the MDSS clocks
> + * and power domain, so it probes first and has already programmed its PLLs
> + * when MDSS probes.  The block resets do not touch the PLL registers and no
> + * display pipeline is running yet, so the PLL configuration survives the
> + * reset and nothing visible can glitch.  Bootloaders that hand over with
> + * the display block still running (PLLs locked, blocks out of reset) are
> + * returned to a known-zero state before any display hardware is programmed.
> + */

The comment should go away. AI agents like to insert lengthy comments.
they are useless.

>  static int msm_mdss_reset(struct device *dev)
>  {
>       struct reset_control *reset;
>  
> -     reset = reset_control_get_optional_exclusive(dev, NULL);
> +     reset = devm_reset_control_array_get(dev,
> +                                          RESET_CONTROL_OPTIONAL_EXCLUSIVE);
>       if (!reset) {
>               /* Optional reset not specified */
>               return 0;
> @@ -327,8 +338,6 @@ static int msm_mdss_reset(struct device *dev)
>       msleep(20);
>       reset_control_deassert(reset);
>  
> -     reset_control_put(reset);
> -
>       return 0;
>  }
>  
> -- 
> 2.53.0
> 

-- 
With best wishes
Dmitry

Reply via email to