* 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.