123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- From cc255f5132cf39e9154340cf58780f8c763c6481 Mon Sep 17 00:00:00 2001
- From: Ross Burton <ross.burton@arm.com>
- Date: Thu, 23 Jan 2025 17:06:08 +0000
- Subject: [PATCH] Revert "serial: 8250_omap: Drop pm_runtime_irq_safe()"
- This reverts commit 8700a7ea5519fb0b3bad2362adfeac358c2119ce.
- Upstream-Status: Inappropriate
- Signed-off-by: Ross Burton <ross.burton@arm.com>
- ---
- drivers/tty/serial/8250/8250_omap.c | 29 ++++++++---------------------
- 1 file changed, 8 insertions(+), 21 deletions(-)
- diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
- index 0dd68bdbfbcf7..db24d7d1dcb67 100644
- --- a/drivers/tty/serial/8250/8250_omap.c
- +++ b/drivers/tty/serial/8250/8250_omap.c
- @@ -8,7 +8,6 @@
- *
- */
-
- -#include <linux/atomic.h>
- #include <linux/clk.h>
- #include <linux/device.h>
- #include <linux/io.h>
- @@ -134,7 +133,6 @@ struct omap8250_priv {
-
- u8 tx_trigger;
- u8 rx_trigger;
- - atomic_t active;
- bool is_suspending;
- int wakeirq;
- u32 latency;
- @@ -636,23 +634,14 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id)
- unsigned int iir, lsr;
- int ret;
-
- - pm_runtime_get_noresume(port->dev);
- -
- - /* Shallow idle state wake-up to an IO interrupt? */
- - if (atomic_add_unless(&priv->active, 1, 1)) {
- - priv->latency = priv->calc_latency;
- - schedule_work(&priv->qos_work);
- - }
- -
- #ifdef CONFIG_SERIAL_8250_DMA
- if (up->dma) {
- ret = omap_8250_dma_handle_irq(port);
- - pm_runtime_mark_last_busy(port->dev);
- - pm_runtime_put(port->dev);
- return IRQ_RETVAL(ret);
- }
- #endif
-
- + serial8250_rpm_get(up);
- lsr = serial_port_in(port, UART_LSR);
- iir = serial_port_in(port, UART_IIR);
- ret = serial8250_handle_irq(port, iir);
- @@ -701,8 +690,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id)
- schedule_delayed_work(&up->overrun_backoff, delay);
- }
-
- - pm_runtime_mark_last_busy(port->dev);
- - pm_runtime_put(port->dev);
- + serial8250_rpm_put(up);
-
- return IRQ_RETVAL(ret);
- }
- @@ -1314,8 +1302,11 @@ static int omap_8250_dma_handle_irq(struct uart_port *port)
- u16 status;
- u8 iir;
-
- + serial8250_rpm_get(up);
- +
- iir = serial_port_in(port, UART_IIR);
- if (iir & UART_IIR_NO_INT) {
- + serial8250_rpm_put(up);
- return IRQ_HANDLED;
- }
-
- @@ -1348,6 +1339,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port)
-
- uart_unlock_and_check_sysrq(port);
-
- + serial8250_rpm_put(up);
- return 1;
- }
-
- @@ -1539,6 +1531,8 @@ static int omap8250_probe(struct platform_device *pdev)
- if (!of_get_available_child_count(pdev->dev.of_node))
- pm_runtime_set_autosuspend_delay(&pdev->dev, -1);
-
- + pm_runtime_irq_safe(&pdev->dev);
- +
- pm_runtime_get_sync(&pdev->dev);
-
- omap_serial_fill_features_erratas(&up, priv);
- @@ -1776,7 +1770,6 @@ static int omap8250_runtime_suspend(struct device *dev)
-
- priv->latency = PM_QOS_CPU_LATENCY_DEFAULT_VALUE;
- schedule_work(&priv->qos_work);
- - atomic_set(&priv->active, 0);
-
- return 0;
- }
- @@ -1786,10 +1779,6 @@ static int omap8250_runtime_resume(struct device *dev)
- struct omap8250_priv *priv = dev_get_drvdata(dev);
- struct uart_8250_port *up = NULL;
-
- - /* Did the hardware wake to a device IO interrupt before a wakeirq? */
- - if (atomic_read(&priv->active))
- - return 0;
- -
- if (priv->line >= 0)
- up = serial8250_get_port(priv->line);
-
- @@ -1805,10 +1794,8 @@ static int omap8250_runtime_resume(struct device *dev)
- uart_port_unlock_irq(&up->port);
- }
-
- - atomic_set(&priv->active, 1);
- priv->latency = priv->calc_latency;
- schedule_work(&priv->qos_work);
- -
- return 0;
- }
-
- --
- 2.43.0
|