Linux Serial subsystem development
 help / color / mirror / Atom feed
* [PATCH] serial: qcom-geni: remove .pm callback, use runtime PM in startup/shutdown
@ 2026-07-10  9:21 Praveen Talari
  2026-07-10 16:10 ` kernel test robot
  0 siblings, 1 reply; 2+ messages in thread
From: Praveen Talari @ 2026-07-10  9:21 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, bjorn.andersson, Konrad Dybcio,
	Andy Shevchenko
  Cc: linux-arm-msm, linux-kernel, linux-serial, Mukesh Kumar Savaliya,
	aniket.randive, chandana.chiluveru, Praveen Talari

The driver currently relies on qcom_geni_serial_pm() through the
uart_ops.pm callback to manage runtime PM references. However, the
callback has a void return type, so failures from
pm_runtime_resume_and_get() cannot be propagated to the caller.

As a result, startup() may continue and access hardware even when the
runtime PM resume operation failed, leading to register accesses while
the device is not powered.

Move runtime PM acquisition to qcom_geni_serial_startup() and release it
to qcom_geni_serial_shutdown(). Since startup() can return an error, PM
resume failures are now detected and propagated before any hardware
initialization is performed. The startup/shutdown pair also provides a
natural place to balance runtime PM references for normal port usage.

During probe, uart_add_one_port() may configure the port before any user
opens the TTY, meaning startup() has not yet been called. To keep the
hardware powered during port registration, wrap uart_add_one_port() with
PM_RUNTIME_ACQUIRE_IF_ENABLED() and PM_RUNTIME_ACQUIRE_ERR(). This
ensures the device is resumed for the duration of registration and that
the runtime PM reference is automatically released afterwards.

By moving runtime PM handling out of uart_ops.pm, resume failures are no
longer silently ignored and all hardware accesses are guaranteed to
occur while the device is powered.

Signed-off-by: Praveen Talari <praveen.talari@oss.qualcomm.com>
---
 drivers/tty/serial/qcom_geni_serial.c | 37 +++++++++++++++++------------------
 1 file changed, 18 insertions(+), 19 deletions(-)

diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c
index 7ead87b4eb65..e16a31b5dc32 100644
--- a/drivers/tty/serial/qcom_geni_serial.c
+++ b/drivers/tty/serial/qcom_geni_serial.c
@@ -1178,6 +1178,8 @@ static void qcom_geni_serial_shutdown(struct uart_port *uport)
 
 	qcom_geni_serial_cancel_tx_cmd(uport);
 	uart_port_unlock_irq(uport);
+
+	pm_runtime_put_sync(uport->dev);
 }
 
 static void qcom_geni_serial_flush_buffer(struct uart_port *uport)
@@ -1246,10 +1248,18 @@ static int qcom_geni_serial_startup(struct uart_port *uport)
 	int ret;
 	struct qcom_geni_serial_port *port = to_dev_port(uport);
 
+	ret = pm_runtime_resume_and_get(uport->dev);
+	if (ret < 0) {
+		dev_err(uport->dev, "Failed to resume and get %d\n", ret);
+		return ret;
+	}
+
 	if (!port->setup) {
 		ret = qcom_geni_serial_port_setup(uport);
-		if (ret)
+		if (ret) {
+			pm_runtime_put_sync(uport->dev);
 			return ret;
+		}
 	}
 
 	uart_port_lock_irq(uport);
@@ -1724,22 +1734,6 @@ static int geni_serial_resource_init(struct uart_port *uport)
 	return 0;
 }
 
-static void qcom_geni_serial_pm(struct uart_port *uport,
-		unsigned int new_state, unsigned int old_state)
-{
-
-	/* If we've never been called, treat it as off */
-	if (old_state == UART_PM_STATE_UNDEFINED)
-		old_state = UART_PM_STATE_OFF;
-
-	if (new_state == UART_PM_STATE_ON && old_state == UART_PM_STATE_OFF)
-		pm_runtime_resume_and_get(uport->dev);
-	else if (new_state == UART_PM_STATE_OFF &&
-		 old_state == UART_PM_STATE_ON)
-		pm_runtime_put_sync(uport->dev);
-
-}
-
 /**
  * qcom_geni_rs485_config - Configure RS485 settings for the UART port
  * @uport: Pointer to the UART port structure
@@ -1778,7 +1772,6 @@ static const struct uart_ops qcom_geni_console_pops = {
 	.poll_put_char	= qcom_geni_serial_poll_put_char,
 	.poll_init = qcom_geni_serial_poll_init,
 #endif
-	.pm = qcom_geni_serial_pm,
 };
 
 static const struct uart_ops qcom_geni_uart_pops = {
@@ -1795,7 +1788,6 @@ static const struct uart_ops qcom_geni_uart_pops = {
 	.type = qcom_geni_serial_get_type,
 	.set_mctrl = qcom_geni_serial_set_mctrl,
 	.get_mctrl = qcom_geni_serial_get_mctrl,
-	.pm = qcom_geni_serial_pm,
 };
 
 static int qcom_geni_serial_probe(struct platform_device *pdev)
@@ -1921,6 +1913,13 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
 
 	devm_pm_runtime_enable(port->se.dev);
 
+	PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
+	ret = PM_RUNTIME_ACQUIRE_ERR(&pm);
+	if (ret < 0) {
+		dev_err(uport->dev, "Failed to resume and get %d\n", ret);
+		goto error;
+	}
+
 	ret = uart_add_one_port(drv, uport);
 	if (ret)
 		goto error;

---
base-commit: b9810cd75b9fb56a3425d391cba3f608502bd474
change-id: 20260709-remove_uart_change_state-a1f7e783aeb0

Best regards,
--  
Praveen Talari <praveen.talari@oss.qualcomm.com>


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

* Re: [PATCH] serial: qcom-geni: remove .pm callback, use runtime PM in startup/shutdown
  2026-07-10  9:21 [PATCH] serial: qcom-geni: remove .pm callback, use runtime PM in startup/shutdown Praveen Talari
@ 2026-07-10 16:10 ` kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2026-07-10 16:10 UTC (permalink / raw)
  To: Praveen Talari, Greg Kroah-Hartman, Jiri Slaby, bjorn.andersson,
	Konrad Dybcio, Andy Shevchenko
  Cc: llvm, oe-kbuild-all, linux-arm-msm, linux-kernel, linux-serial,
	Mukesh Kumar Savaliya, aniket.randive, chandana.chiluveru,
	Praveen Talari

Hi Praveen,

kernel test robot noticed the following build errors:

[auto build test ERROR on b9810cd75b9fb56a3425d391cba3f608502bd474]

url:    https://github.com/intel-lab-lkp/linux/commits/Praveen-Talari/serial-qcom-geni-remove-pm-callback-use-runtime-PM-in-startup-shutdown/20260710-173518
base:   b9810cd75b9fb56a3425d391cba3f608502bd474
patch link:    https://lore.kernel.org/r/20260710-remove_uart_change_state-v1-1-8e8468da22a1%40oss.qualcomm.com
patch subject: [PATCH] serial: qcom-geni: remove .pm callback, use runtime PM in startup/shutdown
config: loongarch-randconfig-002-20260710 (https://download.01.org/0day-ci/archive/20260711/202607110008.JQ2vBeKC-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260711/202607110008.JQ2vBeKC-lkp@intel.com/reproduce)

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>
| Closes: https://lore.kernel.org/oe-kbuild-all/202607110008.JQ2vBeKC-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/tty/serial/qcom_geni_serial.c:1910:4: error: cannot jump from this goto statement to its label
    1910 |                         goto error;
         |                         ^
   drivers/tty/serial/qcom_geni_serial.c:1916:44: note: jump bypasses initialization of variable with __attribute__((cleanup))
    1916 |         PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
         |                                                   ^
   drivers/tty/serial/qcom_geni_serial.c:1901:3: error: cannot jump from this goto statement to its label
    1901 |                 goto error;
         |                 ^
   drivers/tty/serial/qcom_geni_serial.c:1916:44: note: jump bypasses initialization of variable with __attribute__((cleanup))
    1916 |         PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
         |                                                   ^
   drivers/tty/serial/qcom_geni_serial.c:1896:3: error: cannot jump from this goto statement to its label
    1896 |                 goto error;
         |                 ^
   drivers/tty/serial/qcom_geni_serial.c:1916:44: note: jump bypasses initialization of variable with __attribute__((cleanup))
    1916 |         PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
         |                                                   ^
   drivers/tty/serial/qcom_geni_serial.c:1872:3: error: cannot jump from this goto statement to its label
    1872 |                 goto error;
         |                 ^
   drivers/tty/serial/qcom_geni_serial.c:1916:44: note: jump bypasses initialization of variable with __attribute__((cleanup))
    1916 |         PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
         |                                                   ^
   drivers/tty/serial/qcom_geni_serial.c:1866:3: error: cannot jump from this goto statement to its label
    1866 |                 goto error;
         |                 ^
   drivers/tty/serial/qcom_geni_serial.c:1916:44: note: jump bypasses initialization of variable with __attribute__((cleanup))
    1916 |         PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
         |                                                   ^
   drivers/tty/serial/qcom_geni_serial.c:1857:4: error: cannot jump from this goto statement to its label
    1857 |                         goto error;
         |                         ^
   drivers/tty/serial/qcom_geni_serial.c:1916:44: note: jump bypasses initialization of variable with __attribute__((cleanup))
    1916 |         PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
         |                                                   ^
   drivers/tty/serial/qcom_geni_serial.c:1841:3: error: cannot jump from this goto statement to its label
    1841 |                 goto error;
         |                 ^
   drivers/tty/serial/qcom_geni_serial.c:1916:44: note: jump bypasses initialization of variable with __attribute__((cleanup))
    1916 |         PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
         |                                                   ^
   7 errors generated.


vim +1910 drivers/tty/serial/qcom_geni_serial.c

c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1792  
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1793  static int qcom_geni_serial_probe(struct platform_device *pdev)
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1794  {
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1795  	int ret = 0;
71581242164f11 Colin Ian King              2021-04-23  1796  	int line;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1797  	struct qcom_geni_serial_port *port;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1798  	struct uart_port *uport;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1799  	struct resource *res;
066cd1c4e4b9b4 Karthikeyan Ramasubramanian 2018-04-06  1800  	int irq;
8a8a66a1a18a1d Girish Mahadevan            2018-07-13  1801  	struct uart_driver *drv;
40ec6d41c841e2 Bartosz Golaszewski         2022-12-29  1802  	const struct qcom_geni_device_data *data;
8a8a66a1a18a1d Girish Mahadevan            2018-07-13  1803  
40ec6d41c841e2 Bartosz Golaszewski         2022-12-29  1804  	data = of_device_get_match_data(&pdev->dev);
40ec6d41c841e2 Bartosz Golaszewski         2022-12-29  1805  	if (!data)
40ec6d41c841e2 Bartosz Golaszewski         2022-12-29  1806  		return -EINVAL;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1807  
40ec6d41c841e2 Bartosz Golaszewski         2022-12-29  1808  	if (data->console) {
8a8a66a1a18a1d Girish Mahadevan            2018-07-13  1809  		drv = &qcom_geni_console_driver;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1810  		line = of_alias_get_id(pdev->dev.of_node, "serial");
8a8a66a1a18a1d Girish Mahadevan            2018-07-13  1811  	} else {
8a8a66a1a18a1d Girish Mahadevan            2018-07-13  1812  		drv = &qcom_geni_uart_driver;
08b0adb1ae5456 Dmitry Baryshkov            2021-06-22  1813  		line = of_alias_get_id(pdev->dev.of_node, "serial");
08b0adb1ae5456 Dmitry Baryshkov            2021-06-22  1814  		if (line == -ENODEV) /* compat with non-standard aliases */
8a8a66a1a18a1d Girish Mahadevan            2018-07-13  1815  			line = of_alias_get_id(pdev->dev.of_node, "hsuart");
8a8a66a1a18a1d Girish Mahadevan            2018-07-13  1816  	}
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1817  
c3e7966c60745f Zong Jiang                  2025-08-12  1818  	port = get_port_from_line(line, data->console, &pdev->dev);
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1819  	if (IS_ERR(port)) {
6a10635e90e8cb Karthikeyan Ramasubramanian 2018-05-03  1820  		dev_err(&pdev->dev, "Invalid line %d\n", line);
6a10635e90e8cb Karthikeyan Ramasubramanian 2018-05-03  1821  		return PTR_ERR(port);
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1822  	}
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1823  
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1824  	uport = &port->uport;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1825  	/* Don't allow 2 drivers to access the same port */
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1826  	if (uport->private_data)
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1827  		return -ENODEV;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1828  
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1829  	uport->dev = &pdev->dev;
40ec6d41c841e2 Bartosz Golaszewski         2022-12-29  1830  	port->dev_data = data;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1831  	port->se.dev = &pdev->dev;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1832  	port->se.wrapper = dev_get_drvdata(pdev->dev.parent);
4b2601ae3066da Praveen Talari              2025-07-21  1833  
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1834  	ret = port->dev_data->resources_init(uport);
4b2601ae3066da Praveen Talari              2025-07-21  1835  	if (ret)
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1836  		return ret;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1837  
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1838  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1839  	if (!res) {
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1840  		ret = -EINVAL;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1841  		goto error;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1842  	}
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1843  
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1844  	uport->mapbase = res->start;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1845  
4fcc287f3c6924 Anup Kulkarni               2025-06-03  1846  	uport->rs485_config = qcom_geni_rs485_config;
4fcc287f3c6924 Anup Kulkarni               2025-06-03  1847  	uport->rs485_supported = qcom_geni_rs485_supported;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1848  	port->tx_fifo_depth = DEF_FIFO_DEPTH_WORDS;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1849  	port->rx_fifo_depth = DEF_FIFO_DEPTH_WORDS;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1850  	port->tx_fifo_width = DEF_FIFO_WIDTH_BITS;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1851  
40ec6d41c841e2 Bartosz Golaszewski         2022-12-29  1852  	if (!data->console) {
2aaa43c7077833 Bartosz Golaszewski         2022-12-29  1853  		port->rx_buf = devm_kzalloc(uport->dev,
2aaa43c7077833 Bartosz Golaszewski         2022-12-29  1854  					    DMA_RX_BUF_SIZE, GFP_KERNEL);
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1855  		if (!port->rx_buf) {
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1856  			ret = -ENOMEM;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1857  			goto error;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1858  		}
f9d690b6ece7ec satya priya                 2020-03-06  1859  	}
f9d690b6ece7ec satya priya                 2020-03-06  1860  
f3974413cf0209 Akash Asthana               2020-01-06  1861  	port->name = devm_kasprintf(uport->dev, GFP_KERNEL,
f3974413cf0209 Akash Asthana               2020-01-06  1862  			"qcom_geni_serial_%s%d",
f3974413cf0209 Akash Asthana               2020-01-06  1863  			uart_console(uport) ? "console" : "uart", uport->line);
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1864  	if (!port->name) {
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1865  		ret = -ENOMEM;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1866  		goto error;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1867  	}
f3974413cf0209 Akash Asthana               2020-01-06  1868  
066cd1c4e4b9b4 Karthikeyan Ramasubramanian 2018-04-06  1869  	irq = platform_get_irq(pdev, 0);
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1870  	if (irq < 0) {
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1871  		ret = irq;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1872  		goto error;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1873  	}
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1874  
066cd1c4e4b9b4 Karthikeyan Ramasubramanian 2018-04-06  1875  	uport->irq = irq;
8f122698a64b87 Dmitry Safonov              2019-12-13  1876  	uport->has_sysrq = IS_ENABLED(CONFIG_SERIAL_QCOM_GENI_CONSOLE);
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1877  
40ec6d41c841e2 Bartosz Golaszewski         2022-12-29  1878  	if (!data->console)
f3974413cf0209 Akash Asthana               2020-01-06  1879  		port->wakeup_irq = platform_get_irq_optional(pdev, 1);
f3974413cf0209 Akash Asthana               2020-01-06  1880  
9fa3c4b1fa379f Roja Rani Yarubandi         2020-03-04  1881  	if (of_property_read_bool(pdev->dev.of_node, "rx-tx-swap"))
9fa3c4b1fa379f Roja Rani Yarubandi         2020-03-04  1882  		port->rx_tx_swap = true;
9fa3c4b1fa379f Roja Rani Yarubandi         2020-03-04  1883  
9fa3c4b1fa379f Roja Rani Yarubandi         2020-03-04  1884  	if (of_property_read_bool(pdev->dev.of_node, "cts-rts-swap"))
9fa3c4b1fa379f Roja Rani Yarubandi         2020-03-04  1885  		port->cts_rts_swap = true;
9fa3c4b1fa379f Roja Rani Yarubandi         2020-03-04  1886  
e42d6c3ec0c7ad Douglas Anderson            2020-06-26  1887  	port->private_data.drv = drv;
e42d6c3ec0c7ad Douglas Anderson            2020-06-26  1888  	uport->private_data = &port->private_data;
f3974413cf0209 Akash Asthana               2020-01-06  1889  	platform_set_drvdata(pdev, port);
f3974413cf0209 Akash Asthana               2020-01-06  1890  
3e4aaea7a0391d Akash Asthana               2019-10-10  1891  	irq_set_status_flags(uport->irq, IRQ_NOAUTOEN);
3e4aaea7a0391d Akash Asthana               2019-10-10  1892  	ret = devm_request_irq(uport->dev, uport->irq, qcom_geni_serial_isr,
3e4aaea7a0391d Akash Asthana               2019-10-10  1893  			IRQF_TRIGGER_HIGH, port->name, uport);
3e4aaea7a0391d Akash Asthana               2019-10-10  1894  	if (ret) {
3e4aaea7a0391d Akash Asthana               2019-10-10  1895  		dev_err(uport->dev, "Failed to get IRQ ret %d\n", ret);
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1896  		goto error;
3e4aaea7a0391d Akash Asthana               2019-10-10  1897  	}
3e4aaea7a0391d Akash Asthana               2019-10-10  1898  
4fcc287f3c6924 Anup Kulkarni               2025-06-03  1899  	ret = uart_get_rs485_mode(uport);
4fcc287f3c6924 Anup Kulkarni               2025-06-03  1900  	if (ret)
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1901  		goto error;
4fcc287f3c6924 Anup Kulkarni               2025-06-03  1902  
f3974413cf0209 Akash Asthana               2020-01-06  1903  	if (port->wakeup_irq > 0) {
f3974413cf0209 Akash Asthana               2020-01-06  1904  		device_init_wakeup(&pdev->dev, true);
f3974413cf0209 Akash Asthana               2020-01-06  1905  		ret = dev_pm_set_dedicated_wake_irq(&pdev->dev,
8b7103f3195044 Akash Asthana               2019-10-10  1906  						port->wakeup_irq);
8b7103f3195044 Akash Asthana               2019-10-10  1907  		if (ret) {
f3974413cf0209 Akash Asthana               2020-01-06  1908  			device_init_wakeup(&pdev->dev, false);
a53be6945f5123 Viken Dadhaniya             2025-03-27  1909  			ida_free(&port_ida, uport->line);
abffd1e6c4f1c9 Praveen Talari              2025-11-10 @1910  			goto error;
8b7103f3195044 Akash Asthana               2019-10-10  1911  		}
8b7103f3195044 Akash Asthana               2019-10-10  1912  	}
f3974413cf0209 Akash Asthana               2020-01-06  1913  
fb47423dc7bf43 Praveen Talari              2026-01-08  1914  	devm_pm_runtime_enable(port->se.dev);
fb47423dc7bf43 Praveen Talari              2026-01-08  1915  
3db863266714a9 Praveen Talari              2026-07-10  1916  	PM_RUNTIME_ACQUIRE_IF_ENABLED(uport->dev, pm);
3db863266714a9 Praveen Talari              2026-07-10  1917  	ret = PM_RUNTIME_ACQUIRE_ERR(&pm);
3db863266714a9 Praveen Talari              2026-07-10  1918  	if (ret < 0) {
3db863266714a9 Praveen Talari              2026-07-10  1919  		dev_err(uport->dev, "Failed to resume and get %d\n", ret);
3db863266714a9 Praveen Talari              2026-07-10  1920  		goto error;
3db863266714a9 Praveen Talari              2026-07-10  1921  	}
3db863266714a9 Praveen Talari              2026-07-10  1922  
fb47423dc7bf43 Praveen Talari              2026-01-08  1923  	ret = uart_add_one_port(drv, uport);
fb47423dc7bf43 Praveen Talari              2026-01-08  1924  	if (ret)
fb47423dc7bf43 Praveen Talari              2026-01-08  1925  		goto error;
fb47423dc7bf43 Praveen Talari              2026-01-08  1926  
f3974413cf0209 Akash Asthana               2020-01-06  1927  	return 0;
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1928  
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1929  error:
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1930  	dev_pm_domain_detach_list(port->pd_list);
abffd1e6c4f1c9 Praveen Talari              2025-11-10  1931  	return ret;
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1932  }
c4f528795d1add Karthikeyan Ramasubramanian 2018-03-14  1933  

--
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-07-10 16:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-10  9:21 [PATCH] serial: qcom-geni: remove .pm callback, use runtime PM in startup/shutdown Praveen Talari
2026-07-10 16:10 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox