All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: drivers/gpu/drm/stm/ltdc.c:1903 ltdc_resume() warn: 'ldev->pixel_clk' from clk_prepare_enable() not released on lines: 1903.
Date: Thu, 26 Mar 2026 04:58:20 +0800	[thread overview]
Message-ID: <202603260430.nshDUDJM-lkp@intel.com> (raw)

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Yannick Fertre <yannick.fertre@foss.st.com>
CC: "Raphael Gallais-Pou" <raphael.gallais-pou@foss.st.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   bbeb83d3182abe0d245318e274e8531e5dd7a948
commit: d80667642b0f43580efd489d627dd24aa10ab98f drm/stm: ltdc: support new hardware version for STM32MP25 SoC
date:   7 months ago
:::::: branch date: 21 hours ago
:::::: commit date: 7 months ago
config: openrisc-randconfig-r072-20260325 (https://download.01.org/0day-ci/archive/20260326/202603260430.nshDUDJM-lkp@intel.com/config)
compiler: or1k-linux-gcc (GCC) 13.4.0
smatch: v0.5.0-9004-gb810ac53

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202603260430.nshDUDJM-lkp@intel.com/

New smatch warnings:
drivers/gpu/drm/stm/ltdc.c:1903 ltdc_resume() warn: 'ldev->pixel_clk' from clk_prepare_enable() not released on lines: 1903.
drivers/gpu/drm/stm/ltdc.c:2078 ltdc_load() warn: 'ldev->bus_clk' from clk_prepare_enable() not released on lines: 2078.
drivers/gpu/drm/stm/ltdc.c:2078 ltdc_load() warn: 'ldev->pixel_clk' from clk_prepare_enable() not released on lines: 1948.

Old smatch warnings:
drivers/gpu/drm/stm/ltdc.c:939 ltdc_crtc_mode_set_nofb() warn: pm_runtime_get_sync() also returns 1 on success

vim +1903 drivers/gpu/drm/stm/ltdc.c

df61c776657fa5 Yannick Fertré      2019-03-21  1883  
df61c776657fa5 Yannick Fertré      2019-03-21  1884  int ltdc_resume(struct drm_device *ddev)
df61c776657fa5 Yannick Fertré      2019-03-21  1885  {
df61c776657fa5 Yannick Fertré      2019-03-21  1886  	struct ltdc_device *ldev = ddev->dev_private;
df61c776657fa5 Yannick Fertré      2019-03-21  1887  	int ret;
df61c776657fa5 Yannick Fertré      2019-03-21  1888  
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  1889  	drm_dbg_driver(ddev, "\n");
df61c776657fa5 Yannick Fertré      2019-03-21  1890  
df61c776657fa5 Yannick Fertré      2019-03-21  1891  	ret = clk_prepare_enable(ldev->pixel_clk);
df61c776657fa5 Yannick Fertré      2019-03-21  1892  	if (ret) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  1893  		drm_err(ddev, "failed to enable pixel clock (%d)\n", ret);
df61c776657fa5 Yannick Fertré      2019-03-21  1894  		return ret;
df61c776657fa5 Yannick Fertré      2019-03-21  1895  	}
df61c776657fa5 Yannick Fertré      2019-03-21  1896  
d80667642b0f43 Yannick Fertre      2025-08-22  1897  	if (ldev->bus_clk) {
d80667642b0f43 Yannick Fertre      2025-08-22  1898  		ret = clk_prepare_enable(ldev->bus_clk);
d80667642b0f43 Yannick Fertre      2025-08-22  1899  		if (ret)
d80667642b0f43 Yannick Fertre      2025-08-22  1900  			drm_err(ddev, "failed to enable bus clock (%d)\n", ret);
d80667642b0f43 Yannick Fertre      2025-08-22  1901  	}
d80667642b0f43 Yannick Fertre      2025-08-22  1902  
d80667642b0f43 Yannick Fertre      2025-08-22 @1903  	return ret;
df61c776657fa5 Yannick Fertré      2019-03-21  1904  }
df61c776657fa5 Yannick Fertré      2019-03-21  1905  
b759012c5fa761 Yannick Fertre      2017-04-14  1906  int ltdc_load(struct drm_device *ddev)
b759012c5fa761 Yannick Fertre      2017-04-14  1907  {
b759012c5fa761 Yannick Fertre      2017-04-14  1908  	struct platform_device *pdev = to_platform_device(ddev->dev);
b759012c5fa761 Yannick Fertre      2017-04-14  1909  	struct ltdc_device *ldev = ddev->dev_private;
b759012c5fa761 Yannick Fertre      2017-04-14  1910  	struct device *dev = ddev->dev;
b759012c5fa761 Yannick Fertre      2017-04-14  1911  	struct device_node *np = dev->of_node;
b430ff7ef8b016 Yannick Fertre      2020-02-28  1912  	struct drm_bridge *bridge;
b430ff7ef8b016 Yannick Fertre      2020-02-28  1913  	struct drm_panel *panel;
b759012c5fa761 Yannick Fertre      2017-04-14  1914  	struct drm_crtc *crtc;
b759012c5fa761 Yannick Fertre      2017-04-14  1915  	struct reset_control *rstc;
b430ff7ef8b016 Yannick Fertre      2020-02-28  1916  	int irq, i, nb_endpoints;
b430ff7ef8b016 Yannick Fertre      2020-02-28  1917  	int ret = -ENODEV;
b759012c5fa761 Yannick Fertre      2017-04-14  1918  
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  1919  	drm_dbg_driver(ddev, "\n");
b759012c5fa761 Yannick Fertre      2017-04-14  1920  
b430ff7ef8b016 Yannick Fertre      2020-02-28  1921  	/* Get number of endpoints */
b430ff7ef8b016 Yannick Fertre      2020-02-28  1922  	nb_endpoints = of_graph_get_endpoint_count(np);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1923  	if (!nb_endpoints)
b430ff7ef8b016 Yannick Fertre      2020-02-28  1924  		return -ENODEV;
b759012c5fa761 Yannick Fertre      2017-04-14  1925  
b759012c5fa761 Yannick Fertre      2017-04-14  1926  	ldev->pixel_clk = devm_clk_get(dev, "lcd");
b759012c5fa761 Yannick Fertre      2017-04-14  1927  	if (IS_ERR(ldev->pixel_clk)) {
1f358bc6f272b9 Fabien Dessenne     2019-04-24  1928  		if (PTR_ERR(ldev->pixel_clk) != -EPROBE_DEFER)
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  1929  			drm_err(ddev, "Unable to get lcd clock\n");
1f358bc6f272b9 Fabien Dessenne     2019-04-24  1930  		return PTR_ERR(ldev->pixel_clk);
b759012c5fa761 Yannick Fertre      2017-04-14  1931  	}
b759012c5fa761 Yannick Fertre      2017-04-14  1932  
b759012c5fa761 Yannick Fertre      2017-04-14  1933  	if (clk_prepare_enable(ldev->pixel_clk)) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  1934  		drm_err(ddev, "Unable to prepare pixel clock\n");
b759012c5fa761 Yannick Fertre      2017-04-14  1935  		return -ENODEV;
b759012c5fa761 Yannick Fertre      2017-04-14  1936  	}
b759012c5fa761 Yannick Fertre      2017-04-14  1937  
d80667642b0f43 Yannick Fertre      2025-08-22  1938  	if (of_device_is_compatible(np, "st,stm32mp251-ltdc") ||
d80667642b0f43 Yannick Fertre      2025-08-22  1939  	    of_device_is_compatible(np, "st,stm32mp255-ltdc")) {
d80667642b0f43 Yannick Fertre      2025-08-22  1940  		ldev->bus_clk = devm_clk_get(dev, "bus");
d80667642b0f43 Yannick Fertre      2025-08-22  1941  		if (IS_ERR(ldev->bus_clk))
d80667642b0f43 Yannick Fertre      2025-08-22  1942  			return dev_err_probe(dev, PTR_ERR(ldev->bus_clk),
d80667642b0f43 Yannick Fertre      2025-08-22  1943  					     "Unable to get bus clock\n");
d80667642b0f43 Yannick Fertre      2025-08-22  1944  
d80667642b0f43 Yannick Fertre      2025-08-22  1945  		ret = clk_prepare_enable(ldev->bus_clk);
d80667642b0f43 Yannick Fertre      2025-08-22  1946  		if (ret) {
d80667642b0f43 Yannick Fertre      2025-08-22  1947  			drm_err(ddev, "Unable to prepare bus clock\n");
d80667642b0f43 Yannick Fertre      2025-08-22  1948  			return ret;
d80667642b0f43 Yannick Fertre      2025-08-22  1949  		}
d80667642b0f43 Yannick Fertre      2025-08-22  1950  	}
d80667642b0f43 Yannick Fertre      2025-08-22  1951  
b430ff7ef8b016 Yannick Fertre      2020-02-28  1952  	/* Get endpoints if any */
b430ff7ef8b016 Yannick Fertre      2020-02-28  1953  	for (i = 0; i < nb_endpoints; i++) {
b430ff7ef8b016 Yannick Fertre      2020-02-28  1954  		ret = drm_of_find_panel_or_bridge(np, 0, i, &panel, &bridge);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1955  
b430ff7ef8b016 Yannick Fertre      2020-02-28  1956  		/*
b430ff7ef8b016 Yannick Fertre      2020-02-28  1957  		 * If at least one endpoint is -ENODEV, continue probing,
b430ff7ef8b016 Yannick Fertre      2020-02-28  1958  		 * else if at least one endpoint returned an error
b430ff7ef8b016 Yannick Fertre      2020-02-28  1959  		 * (ie -EPROBE_DEFER) then stop probing.
b430ff7ef8b016 Yannick Fertre      2020-02-28  1960  		 */
b430ff7ef8b016 Yannick Fertre      2020-02-28  1961  		if (ret == -ENODEV)
b430ff7ef8b016 Yannick Fertre      2020-02-28  1962  			continue;
b430ff7ef8b016 Yannick Fertre      2020-02-28  1963  		else if (ret)
b430ff7ef8b016 Yannick Fertre      2020-02-28  1964  			goto err;
b430ff7ef8b016 Yannick Fertre      2020-02-28  1965  
b430ff7ef8b016 Yannick Fertre      2020-02-28  1966  		if (panel) {
19dd9780b7ac67 Katya Orlova        2024-02-16  1967  			bridge = drmm_panel_bridge_add(ddev, panel);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1968  			if (IS_ERR(bridge)) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  1969  				drm_err(ddev, "panel-bridge endpoint %d\n", i);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1970  				ret = PTR_ERR(bridge);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1971  				goto err;
b430ff7ef8b016 Yannick Fertre      2020-02-28  1972  			}
b430ff7ef8b016 Yannick Fertre      2020-02-28  1973  		}
b430ff7ef8b016 Yannick Fertre      2020-02-28  1974  
b430ff7ef8b016 Yannick Fertre      2020-02-28  1975  		if (bridge) {
b430ff7ef8b016 Yannick Fertre      2020-02-28  1976  			ret = ltdc_encoder_init(ddev, bridge);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1977  			if (ret) {
648ce7fd186cfb Jagan Teki          2021-07-04  1978  				if (ret != -EPROBE_DEFER)
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  1979  					drm_err(ddev, "init encoder endpoint %d\n", i);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1980  				goto err;
b430ff7ef8b016 Yannick Fertre      2020-02-28  1981  			}
b430ff7ef8b016 Yannick Fertre      2020-02-28  1982  		}
b430ff7ef8b016 Yannick Fertre      2020-02-28  1983  	}
b430ff7ef8b016 Yannick Fertre      2020-02-28  1984  
b430ff7ef8b016 Yannick Fertre      2020-02-28  1985  	rstc = devm_reset_control_get_exclusive(dev, NULL);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1986  
b430ff7ef8b016 Yannick Fertre      2020-02-28  1987  	mutex_init(&ldev->err_lock);
b430ff7ef8b016 Yannick Fertre      2020-02-28  1988  
f42f540b9d0c16 Yannick Fertré      2019-04-03  1989  	if (!IS_ERR(rstc)) {
f42f540b9d0c16 Yannick Fertré      2019-04-03  1990  		reset_control_assert(rstc);
f42f540b9d0c16 Yannick Fertré      2019-04-03  1991  		usleep_range(10, 20);
f42f540b9d0c16 Yannick Fertré      2019-04-03  1992  		reset_control_deassert(rstc);
f42f540b9d0c16 Yannick Fertré      2019-04-03  1993  	}
f42f540b9d0c16 Yannick Fertré      2019-04-03  1994  
50cc9a322b5f4f Anusha Srivatsa     2025-02-25  1995  	ldev->regs = devm_platform_ioremap_resource(pdev, 0);
b759012c5fa761 Yannick Fertre      2017-04-14  1996  	if (IS_ERR(ldev->regs)) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  1997  		drm_err(ddev, "Unable to get ltdc registers\n");
cea3a330ee20e9 Philippe CORNU      2017-07-17  1998  		ret = PTR_ERR(ldev->regs);
cea3a330ee20e9 Philippe CORNU      2017-07-17  1999  		goto err;
b759012c5fa761 Yannick Fertre      2017-04-14  2000  	}
b759012c5fa761 Yannick Fertre      2017-04-14  2001  
734c26450aefaa Yannick Fertre      2021-12-15  2002  	ldev->regmap = devm_regmap_init_mmio(&pdev->dev, ldev->regs, &stm32_ltdc_regmap_cfg);
734c26450aefaa Yannick Fertre      2021-12-15  2003  	if (IS_ERR(ldev->regmap)) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  2004  		drm_err(ddev, "Unable to regmap ltdc registers\n");
734c26450aefaa Yannick Fertre      2021-12-15  2005  		ret = PTR_ERR(ldev->regmap);
734c26450aefaa Yannick Fertre      2021-12-15  2006  		goto err;
734c26450aefaa Yannick Fertre      2021-12-15  2007  	}
734c26450aefaa Yannick Fertre      2021-12-15  2008  
544aa6cefb24d7 Yannick Fertre      2020-01-21  2009  	ret = ltdc_get_caps(ddev);
544aa6cefb24d7 Yannick Fertre      2020-01-21  2010  	if (ret) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  2011  		drm_err(ddev, "hardware identifier (0x%08x) not supported!\n",
544aa6cefb24d7 Yannick Fertre      2020-01-21  2012  			ldev->caps.hw_version);
9e759fc7dcd6d4 Fabien Dessenne     2019-04-24  2013  		goto err;
544aa6cefb24d7 Yannick Fertre      2020-01-21  2014  	}
9e759fc7dcd6d4 Fabien Dessenne     2019-04-24  2015  
ef824286128edd Yannick Fertre      2024-07-12  2016  	/* Disable all interrupts */
ef824286128edd Yannick Fertre      2024-07-12  2017  	regmap_clear_bits(ldev->regmap, LTDC_IER, IER_MASK);
7d008eecb0cfc2 Yannick Fertre      2022-06-03  2018  
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  2019  	drm_dbg_driver(ddev, "ltdc hw version 0x%08x\n", ldev->caps.hw_version);
544aa6cefb24d7 Yannick Fertre      2020-01-21  2020  
7d008eecb0cfc2 Yannick Fertre      2022-06-03  2021  	/* initialize default value for fifo underrun threshold & clear interrupt error counters */
7d008eecb0cfc2 Yannick Fertre      2022-06-03  2022  	ldev->transfer_err = 0;
7d008eecb0cfc2 Yannick Fertre      2022-06-03  2023  	ldev->fifo_err = 0;
7d008eecb0cfc2 Yannick Fertre      2022-06-03  2024  	ldev->fifo_warn = 0;
7d008eecb0cfc2 Yannick Fertre      2022-06-03  2025  	ldev->fifo_threshold = FUT_DFT;
7d008eecb0cfc2 Yannick Fertre      2022-06-03  2026  
544aa6cefb24d7 Yannick Fertre      2020-01-21  2027  	for (i = 0; i < ldev->caps.nb_irq; i++) {
544aa6cefb24d7 Yannick Fertre      2020-01-21  2028  		irq = platform_get_irq(pdev, i);
544aa6cefb24d7 Yannick Fertre      2020-01-21  2029  		if (irq < 0) {
544aa6cefb24d7 Yannick Fertre      2020-01-21  2030  			ret = irq;
544aa6cefb24d7 Yannick Fertre      2020-01-21  2031  			goto err;
544aa6cefb24d7 Yannick Fertre      2020-01-21  2032  		}
b759012c5fa761 Yannick Fertre      2017-04-14  2033  
b759012c5fa761 Yannick Fertre      2017-04-14  2034  		ret = devm_request_threaded_irq(dev, irq, ltdc_irq,
b759012c5fa761 Yannick Fertre      2017-04-14  2035  						ltdc_irq_thread, IRQF_ONESHOT,
b759012c5fa761 Yannick Fertre      2017-04-14  2036  						dev_name(dev), ddev);
b759012c5fa761 Yannick Fertre      2017-04-14  2037  		if (ret) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  2038  			drm_err(ddev, "Failed to register LTDC interrupt\n");
cea3a330ee20e9 Philippe CORNU      2017-07-17  2039  			goto err;
b759012c5fa761 Yannick Fertre      2017-04-14  2040  		}
c188d7ebbebd0b Philippe CORNU      2017-10-26  2041  	}
b759012c5fa761 Yannick Fertre      2017-04-14  2042  
19dd9780b7ac67 Katya Orlova        2024-02-16  2043  	crtc = drmm_kzalloc(ddev, sizeof(*crtc), GFP_KERNEL);
b759012c5fa761 Yannick Fertre      2017-04-14  2044  	if (!crtc) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  2045  		drm_err(ddev, "Failed to allocate crtc\n");
b759012c5fa761 Yannick Fertre      2017-04-14  2046  		ret = -ENOMEM;
b759012c5fa761 Yannick Fertre      2017-04-14  2047  		goto err;
b759012c5fa761 Yannick Fertre      2017-04-14  2048  	}
b759012c5fa761 Yannick Fertre      2017-04-14  2049  
b759012c5fa761 Yannick Fertre      2017-04-14  2050  	ret = ltdc_crtc_init(ddev, crtc);
b759012c5fa761 Yannick Fertre      2017-04-14  2051  	if (ret) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  2052  		drm_err(ddev, "Failed to init crtc\n");
b759012c5fa761 Yannick Fertre      2017-04-14  2053  		goto err;
b759012c5fa761 Yannick Fertre      2017-04-14  2054  	}
b759012c5fa761 Yannick Fertre      2017-04-14  2055  
b759012c5fa761 Yannick Fertre      2017-04-14  2056  	ret = drm_vblank_init(ddev, NB_CRTC);
b759012c5fa761 Yannick Fertre      2017-04-14  2057  	if (ret) {
1e00a12dbb09a7 Raphael Gallais-Pou 2025-08-25  2058  		drm_err(ddev, "Failed calling drm_vblank_init()\n");
b759012c5fa761 Yannick Fertre      2017-04-14  2059  		goto err;
b759012c5fa761 Yannick Fertre      2017-04-14  2060  	}
b759012c5fa761 Yannick Fertre      2017-04-14  2061  
35ab6cfbf21178 Yannick Fertré      2019-06-03  2062  	clk_disable_unprepare(ldev->pixel_clk);
35ab6cfbf21178 Yannick Fertré      2019-06-03  2063  
d80667642b0f43 Yannick Fertre      2025-08-22  2064  	if (ldev->bus_clk)
d80667642b0f43 Yannick Fertre      2025-08-22  2065  		clk_disable_unprepare(ldev->bus_clk);
d80667642b0f43 Yannick Fertre      2025-08-22  2066  
92a57b3fb500e2 Yannick Fertré      2019-09-06  2067  	pinctrl_pm_select_sleep_state(ddev->dev);
92a57b3fb500e2 Yannick Fertré      2019-09-06  2068  
35ab6cfbf21178 Yannick Fertré      2019-06-03  2069  	pm_runtime_enable(ddev->dev);
bdf31bcf3d84ef Philippe CORNU      2017-07-17  2070  
35ab6cfbf21178 Yannick Fertré      2019-06-03  2071  	return 0;
b759012c5fa761 Yannick Fertre      2017-04-14  2072  err:
b759012c5fa761 Yannick Fertre      2017-04-14  2073  	clk_disable_unprepare(ldev->pixel_clk);
b759012c5fa761 Yannick Fertre      2017-04-14  2074  
d80667642b0f43 Yannick Fertre      2025-08-22  2075  	if (ldev->bus_clk)
d80667642b0f43 Yannick Fertre      2025-08-22  2076  		clk_disable_unprepare(ldev->bus_clk);
d80667642b0f43 Yannick Fertre      2025-08-22  2077  
b759012c5fa761 Yannick Fertre      2017-04-14 @2078  	return ret;
b759012c5fa761 Yannick Fertre      2017-04-14  2079  }
b759012c5fa761 Yannick Fertre      2017-04-14  2080  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

             reply	other threads:[~2026-03-25 20:58 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-25 20:58 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-12-14  1:14 drivers/gpu/drm/stm/ltdc.c:1903 ltdc_resume() warn: 'ldev->pixel_clk' from clk_prepare_enable() not released on lines: 1903 kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202603260430.nshDUDJM-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=error27@gmail.com \
    --cc=oe-kbuild@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.