]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Revert "serial: 8250_omap: Set the console genpd always on if no console suspend"
authorGriffin Kroah-Hartman <griffin@kroah.com>
Wed, 14 Aug 2024 11:17:47 +0000 (13:17 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Aug 2024 05:22:10 +0000 (07:22 +0200)
This reverts commit 68e6939ea9ec3d6579eadeab16060339cdeaf940.

Kevin reported that this causes a crash during suspend on platforms that
dont use PM domains.

Link: https://lore.kernel.org/r/7ha5hgpchq.fsf@baylibre.com
Cc: Thomas Richard <thomas.richard@bootlin.com>
Fixes: 68e6939ea9ec ("serial: 8250_omap: Set the console genpd always on if no console suspend")
Cc: stable <stable@kernel.org>
Reported-by: Kevin Hilman <khilman@kernel.org>
Signed-off-by: Griffin Kroah-Hartman <griffin@kroah.com>
Link: https://lore.kernel.org/r/20240814111747.82371-1-griffin@kroah.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_omap.c

index 1af9aed99c6512096979498507680a8ac83b7544..afef1dd4ddf49c070efda75be10a1a2696e91413 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/pm_wakeirq.h>
 #include <linux/dma-mapping.h>
 #include <linux/sys_soc.h>
-#include <linux/pm_domain.h>
 
 #include "8250.h"
 
 #define UART_OMAP_TO_L                 0x26
 #define UART_OMAP_TO_H                 0x27
 
-/*
- * Copy of the genpd flags for the console.
- * Only used if console suspend is disabled
- */
-static unsigned int genpd_flags_console;
-
 struct omap8250_priv {
        void __iomem *membase;
        int line;
@@ -1655,7 +1648,6 @@ static int omap8250_suspend(struct device *dev)
 {
        struct omap8250_priv *priv = dev_get_drvdata(dev);
        struct uart_8250_port *up = serial8250_get_port(priv->line);
-       struct generic_pm_domain *genpd = pd_to_genpd(dev->pm_domain);
        int err = 0;
 
        serial8250_suspend_port(priv->line);
@@ -1666,19 +1658,8 @@ static int omap8250_suspend(struct device *dev)
        if (!device_may_wakeup(dev))
                priv->wer = 0;
        serial_out(up, UART_OMAP_WER, priv->wer);
-       if (uart_console(&up->port)) {
-               if (console_suspend_enabled)
-                       err = pm_runtime_force_suspend(dev);
-               else {
-                       /*
-                        * The pd shall not be powered-off (no console suspend).
-                        * Make copy of genpd flags before to set it always on.
-                        * The original value is restored during the resume.
-                        */
-                       genpd_flags_console = genpd->flags;
-                       genpd->flags |= GENPD_FLAG_ALWAYS_ON;
-               }
-       }
+       if (uart_console(&up->port) && console_suspend_enabled)
+               err = pm_runtime_force_suspend(dev);
        flush_work(&priv->qos_work);
 
        return err;
@@ -1688,16 +1669,12 @@ static int omap8250_resume(struct device *dev)
 {
        struct omap8250_priv *priv = dev_get_drvdata(dev);
        struct uart_8250_port *up = serial8250_get_port(priv->line);
-       struct generic_pm_domain *genpd = pd_to_genpd(dev->pm_domain);
        int err;
 
        if (uart_console(&up->port) && console_suspend_enabled) {
-               if (console_suspend_enabled) {
-                       err = pm_runtime_force_resume(dev);
-                       if (err)
-                               return err;
-               } else
-                       genpd->flags = genpd_flags_console;
+               err = pm_runtime_force_resume(dev);
+               if (err)
+                       return err;
        }
 
        serial8250_resume_port(priv->line);