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 commitefacfce5f8
("ARM: shmobile: Introduce ARCH_SHMOBILE_MULTI"), but drivers/sh was compiled for both ARCH_SHMOBILE_LEGACY and ARCH_SHMOBILE_MULTI until commitbf98c1eac1
("ARM: Rename ARCH_SHMOBILE to ARCH_SHMOBILE_LEGACY"). Inspired by a patch from Ben Dooks <ben.dooks@codethink.co.uk>. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
This commit is contained in:
Родитель
c9eaa447e7
Коммит
3c90c55dcd
|
@ -119,7 +119,7 @@ obj-$(CONFIG_SGI_SN) += sn/
|
|||
obj-y += firmware/
|
||||
obj-$(CONFIG_CRYPTO) += crypto/
|
||||
obj-$(CONFIG_SUPERH) += sh/
|
||||
obj-$(CONFIG_ARCH_SHMOBILE_LEGACY) += sh/
|
||||
obj-$(CONFIG_ARCH_SHMOBILE) += sh/
|
||||
ifndef CONFIG_ARCH_USES_GETTIMEOFFSET
|
||||
obj-y += clocksource/
|
||||
endif
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
#
|
||||
# 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-$(CONFIG_MAPLE) += maple/
|
||||
obj-$(CONFIG_SUPERHYWAY) += superhyway/
|
||||
|
||||
obj-y += pm_runtime.o
|
||||
obj-y += pm_runtime.o
|
||||
|
|
|
@ -50,8 +50,25 @@ static struct pm_clk_notifier_block platform_bus_notifier = {
|
|||
.con_ids = { NULL, },
|
||||
};
|
||||
|
||||
static bool default_pm_on;
|
||||
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
|
@ -59,7 +76,8 @@ core_initcall(sh_pm_runtime_init);
|
|||
|
||||
static int __init sh_pm_runtime_late_init(void)
|
||||
{
|
||||
pm_genpd_poweroff_unused();
|
||||
if (default_pm_on)
|
||||
pm_genpd_poweroff_unused();
|
||||
return 0;
|
||||
}
|
||||
late_initcall(sh_pm_runtime_late_init);
|
||||
|
|
Загрузка…
Ссылка в новой задаче