Commit 3c90c55d authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Simon Horman

drivers: sh: compile drivers/sh/pm_runtime.c if ARCH_SHMOBILE_MULTI

If the kernel is built to support multi-ARM configuration with shmobile
support built in, then drivers/sh is not built. This contains the PM
runtime code in drivers/sh/pm_runtime.c, which implicitly enables the
module clocks for all devices, and thus is quite essential.
Without this, the state of clocks depends on implicit reset state, or on
the bootloader.

If ARCH_SHMOBILE_MULTI then build the drivers/sh directory, but ensure that
bits that may conflict (drivers/sh/clk if the common clock framework is
enabled) or are not used (drivers/sh/intc), are not built.
Also, only enable the PM runtime code when actually running on a shmobile
SoCs that needs it.

ARCH_SHMOBILE_MULTI was added a while ago by commit
efacfce5 ("ARM: shmobile: Introduce
ARCH_SHMOBILE_MULTI"), but drivers/sh was compiled for both
ARCH_SHMOBILE_LEGACY and ARCH_SHMOBILE_MULTI until commit
bf98c1ea ("ARM: Rename ARCH_SHMOBILE to
ARCH_SHMOBILE_LEGACY").

Inspired by a patch from Ben Dooks <ben.dooks@codethink.co.uk>.
Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: default avatarSimon Horman <horms+renesas@verge.net.au>
parent c9eaa447
...@@ -119,7 +119,7 @@ obj-$(CONFIG_SGI_SN) += sn/ ...@@ -119,7 +119,7 @@ obj-$(CONFIG_SGI_SN) += sn/
obj-y += firmware/ obj-y += firmware/
obj-$(CONFIG_CRYPTO) += crypto/ obj-$(CONFIG_CRYPTO) += crypto/
obj-$(CONFIG_SUPERH) += sh/ obj-$(CONFIG_SUPERH) += sh/
obj-$(CONFIG_ARCH_SHMOBILE_LEGACY) += sh/ obj-$(CONFIG_ARCH_SHMOBILE) += sh/
ifndef CONFIG_ARCH_USES_GETTIMEOFFSET ifndef CONFIG_ARCH_USES_GETTIMEOFFSET
obj-y += clocksource/ obj-y += clocksource/
endif endif
......
# #
# Makefile for the SuperH specific drivers. # Makefile for the SuperH specific drivers.
# #
obj-y := intc/ obj-$(CONFIG_SUPERH) += intc/
obj-$(CONFIG_ARCH_SHMOBILE_LEGACY) += intc/
ifneq ($(CONFIG_COMMON_CLK),y)
obj-$(CONFIG_HAVE_CLK) += clk/
endif
obj-$(CONFIG_MAPLE) += maple/
obj-$(CONFIG_SUPERHYWAY) += superhyway/
obj-$(CONFIG_HAVE_CLK) += clk/ obj-y += pm_runtime.o
obj-$(CONFIG_MAPLE) += maple/
obj-$(CONFIG_SUPERHYWAY) += superhyway/
obj-y += pm_runtime.o
...@@ -50,8 +50,25 @@ static struct pm_clk_notifier_block platform_bus_notifier = { ...@@ -50,8 +50,25 @@ static struct pm_clk_notifier_block platform_bus_notifier = {
.con_ids = { NULL, }, .con_ids = { NULL, },
}; };
static bool default_pm_on;
static int __init sh_pm_runtime_init(void) static int __init sh_pm_runtime_init(void)
{ {
if (IS_ENABLED(CONFIG_ARCH_SHMOBILE_MULTI)) {
if (!of_machine_is_compatible("renesas,emev2") &&
!of_machine_is_compatible("renesas,r7s72100") &&
!of_machine_is_compatible("renesas,r8a73a4") &&
!of_machine_is_compatible("renesas,r8a7740") &&
!of_machine_is_compatible("renesas,r8a7778") &&
!of_machine_is_compatible("renesas,r8a7779") &&
!of_machine_is_compatible("renesas,r8a7790") &&
!of_machine_is_compatible("renesas,r8a7791") &&
!of_machine_is_compatible("renesas,sh7372") &&
!of_machine_is_compatible("renesas,sh73a0"))
return 0;
}
default_pm_on = true;
pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier); pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
return 0; return 0;
} }
...@@ -59,7 +76,8 @@ core_initcall(sh_pm_runtime_init); ...@@ -59,7 +76,8 @@ core_initcall(sh_pm_runtime_init);
static int __init sh_pm_runtime_late_init(void) static int __init sh_pm_runtime_late_init(void)
{ {
pm_genpd_poweroff_unused(); if (default_pm_on)
pm_genpd_poweroff_unused();
return 0; return 0;
} }
late_initcall(sh_pm_runtime_late_init); late_initcall(sh_pm_runtime_late_init);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment