aboutsummaryrefslogtreecommitdiffstats
path: root/patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch')
-rw-r--r--patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch198
1 files changed, 198 insertions, 0 deletions
diff --git a/patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch b/patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch
new file mode 100644
index 00000000000000..f9d1a536719b3a
--- /dev/null
+++ b/patches.sh7757lcr/drivers-sh-generalize-runtime-pm-platform-stub.patch
@@ -0,0 +1,198 @@
+From ltsi-dev-bounces@lists.linuxfoundation.org Tue Jul 10 22:13:21 2012
+From: "Shimoda, Yoshihiro" <yoshihiro.shimoda.uh@renesas.com>
+Date: Wed, 11 Jul 2012 14:13:16 +0900
+Subject: drivers: sh: Generalize runtime PM platform stub.
+To: ltsi-dev@lists.linuxfoundation.org
+Message-ID: <4FFD0B6C.1060006@renesas.com>
+
+
+>From 11b01cfe8fbb175d81f1049e7c265d5618234357 Mon Sep 17 00:00:00 2001
+From: Paul Mundt <lethal@linux-sh.org>
+Date: Fri, 11 Nov 2011 15:41:50 +0900
+Subject: drivers: sh: Generalize runtime PM platform stub.
+
+The runtime PM platform support stub in use by ARM-based SH/R-Mobile
+platforms contains nothing that's specifically ARM-related and instead of
+wholly generic to anything using the clock framework.
+
+The recent runtime PM changes interact rather badly with the lazy
+disabling of clocks late in the boot process through the clock framework,
+leading to situations where the runtime suspend/resume paths are entered
+without a clock being actively driven due to having been lazily gated
+off.
+
+In order to correct this we can trivially tie in the aforementioned stub
+as a general fallback for all SH platforms that don't presently have
+their own runtime PM implementations (the corner case being SH-based
+SH-Mobile platforms, which have their own stub through the hwblk API --
+which in turn has bitrotted and will be subsequently adapted to use the
+same stub as everyone else), regardless of whether the platforms choose
+to define power domains of their own or not.
+
+This fixes up regressions for clock framework users who also build in
+runtime PM support without any specific power domains of their own, which
+was previously causing the serial console to be lost when warring with
+lazy clock disabling.
+
+Signed-off-by: Paul Mundt <lethal@linux-sh.org>
+(cherry picked from commit 750a7eee7395492960a7aeb3a3a1aa74158ec326)
+Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
+Tested-by: Simon Horman <horms@verge.net.au>
+---
+ arch/arm/mach-shmobile/Makefile | 2 -
+ arch/arm/mach-shmobile/pm_runtime.c | 59 ------------------------------------
+ drivers/sh/Makefile | 8 ++++
+ drivers/sh/pm_runtime.c | 59 ++++++++++++++++++++++++++++++++++++
+ 4 files changed, 68 insertions(+), 60 deletions(-)
+ delete mode 100644 arch/arm/mach-shmobile/pm_runtime.c
+ create mode 100644 drivers/sh/pm_runtime.c
+
+--- a/arch/arm/mach-shmobile/Makefile
++++ b/arch/arm/mach-shmobile/Makefile
+@@ -3,7 +3,7 @@
+ #
+
+ # Common objects
+-obj-y := timer.o console.o clock.o pm_runtime.o
++obj-y := timer.o console.o clock.o
+
+ # CPU objects
+ obj-$(CONFIG_ARCH_SH7367) += setup-sh7367.o clock-sh7367.o intc-sh7367.o
+--- a/arch/arm/mach-shmobile/pm_runtime.c
++++ /dev/null
+@@ -1,59 +0,0 @@
+-/*
+- * arch/arm/mach-shmobile/pm_runtime.c
+- *
+- * Runtime PM support code for SuperH Mobile ARM
+- *
+- * Copyright (C) 2009-2010 Magnus Damm
+- *
+- * This file is subject to the terms and conditions of the GNU General Public
+- * License. See the file "COPYING" in the main directory of this archive
+- * for more details.
+- */
+-
+-#include <linux/init.h>
+-#include <linux/kernel.h>
+-#include <linux/io.h>
+-#include <linux/pm_runtime.h>
+-#include <linux/pm_clock.h>
+-#include <linux/platform_device.h>
+-#include <linux/clk.h>
+-#include <linux/sh_clk.h>
+-#include <linux/bitmap.h>
+-#include <linux/slab.h>
+-
+-#ifdef CONFIG_PM_RUNTIME
+-
+-static int default_platform_runtime_idle(struct device *dev)
+-{
+- /* suspend synchronously to disable clocks immediately */
+- return pm_runtime_suspend(dev);
+-}
+-
+-static struct dev_pm_domain default_pm_domain = {
+- .ops = {
+- .runtime_suspend = pm_clk_suspend,
+- .runtime_resume = pm_clk_resume,
+- .runtime_idle = default_platform_runtime_idle,
+- USE_PLATFORM_PM_SLEEP_OPS
+- },
+-};
+-
+-#define DEFAULT_PM_DOMAIN_PTR (&default_pm_domain)
+-
+-#else
+-
+-#define DEFAULT_PM_DOMAIN_PTR NULL
+-
+-#endif /* CONFIG_PM_RUNTIME */
+-
+-static struct pm_clk_notifier_block platform_bus_notifier = {
+- .pm_domain = DEFAULT_PM_DOMAIN_PTR,
+- .con_ids = { NULL, },
+-};
+-
+-static int __init sh_pm_runtime_init(void)
+-{
+- pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
+- return 0;
+-}
+-core_initcall(sh_pm_runtime_init);
+--- a/drivers/sh/Makefile
++++ b/drivers/sh/Makefile
+@@ -7,3 +7,11 @@ obj-$(CONFIG_HAVE_CLK) += clk/
+ obj-$(CONFIG_MAPLE) += maple/
+ obj-$(CONFIG_SUPERHYWAY) += superhyway/
+ obj-$(CONFIG_GENERIC_GPIO) += pfc.o
++
++#
++# For the moment we only use this framework for ARM-based SH/R-Mobile
++# platforms and generic SH. SH-based SH-Mobile platforms are still using
++# an older framework that is pending up-porting, at which point this
++# special casing can go away.
++#
++obj-$(CONFIG_SUPERH)$(CONFIG_ARCH_SHMOBILE) += pm_runtime.o
+--- /dev/null
++++ b/drivers/sh/pm_runtime.c
+@@ -0,0 +1,59 @@
++/*
++ * arch/arm/mach-shmobile/pm_runtime.c
++ *
++ * Runtime PM support code for SuperH Mobile ARM
++ *
++ * Copyright (C) 2009-2010 Magnus Damm
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file "COPYING" in the main directory of this archive
++ * for more details.
++ */
++
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/io.h>
++#include <linux/pm_runtime.h>
++#include <linux/pm_clock.h>
++#include <linux/platform_device.h>
++#include <linux/clk.h>
++#include <linux/sh_clk.h>
++#include <linux/bitmap.h>
++#include <linux/slab.h>
++
++#ifdef CONFIG_PM_RUNTIME
++
++static int default_platform_runtime_idle(struct device *dev)
++{
++ /* suspend synchronously to disable clocks immediately */
++ return pm_runtime_suspend(dev);
++}
++
++static struct dev_pm_domain default_pm_domain = {
++ .ops = {
++ .runtime_suspend = pm_clk_suspend,
++ .runtime_resume = pm_clk_resume,
++ .runtime_idle = default_platform_runtime_idle,
++ USE_PLATFORM_PM_SLEEP_OPS
++ },
++};
++
++#define DEFAULT_PM_DOMAIN_PTR (&default_pm_domain)
++
++#else
++
++#define DEFAULT_PM_DOMAIN_PTR NULL
++
++#endif /* CONFIG_PM_RUNTIME */
++
++static struct pm_clk_notifier_block platform_bus_notifier = {
++ .pm_domain = DEFAULT_PM_DOMAIN_PTR,
++ .con_ids = { NULL, },
++};
++
++static int __init sh_pm_runtime_init(void)
++{
++ pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
++ return 0;
++}
++core_initcall(sh_pm_runtime_init);