All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/gpu/drm/stm/ltdc.c:1903 ltdc_resume() warn: 'ldev->pixel_clk' from clk_prepare_enable() not released on lines: 1903.
@ 2025-12-14  1:14 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2025-12-14  1:14 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

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:   4a298a43f5e339f48d2dda0665c02b88ee9a4e03
commit: d80667642b0f43580efd489d627dd24aa10ab98f drm/stm: ltdc: support new hardware version for STM32MP25 SoC
date:   4 months ago
:::::: branch date: 7 hours ago
:::::: commit date: 4 months ago
config: nios2-randconfig-r071-20251213 (https://download.01.org/0day-ci/archive/20251214/202512140924.7fwW7iFd-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.5.0

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/202512140924.7fwW7iFd-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

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

* drivers/gpu/drm/stm/ltdc.c:1903 ltdc_resume() warn: 'ldev->pixel_clk' from clk_prepare_enable() not released on lines: 1903.
@ 2026-03-25 20:58 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2026-03-25 20:58 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

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

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

end of thread, other threads:[~2026-03-25 20:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-25 20:58 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
  -- strict thread matches above, loose matches on Subject: below --
2025-12-14  1:14 kernel test robot

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.