From: Mark Brown Date: Sat, 17 Jan 2015 01:25:15 +0000 (+0000) Subject: Revert "drivers: cpuidle: CPU idle ARM64 driver" X-Git-Tag: firefly_0821_release~3680^2~35^2~1^2~4 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=19a87fdc2aa7a0e37e28ecc147ee696418f3d942;p=firefly-linux-kernel-4.4.55.git Revert "drivers: cpuidle: CPU idle ARM64 driver" This reverts commit 08461b57c19fb68dde8907b87ff38f38f2585f64. --- diff --git a/drivers/cpuidle/Kconfig b/drivers/cpuidle/Kconfig index 842d7ba83101..e4d3913fe330 100644 --- a/drivers/cpuidle/Kconfig +++ b/drivers/cpuidle/Kconfig @@ -48,9 +48,4 @@ config CPU_IDLE_CALXEDA help Select this to enable cpuidle on Calxeda processors. -menu "ARM64 CPU Idle Drivers" -depends on ARM64 -source "drivers/cpuidle/Kconfig.arm64" -endmenu - endif diff --git a/drivers/cpuidle/Kconfig.arm64 b/drivers/cpuidle/Kconfig.arm64 deleted file mode 100644 index b83612c67e6d..000000000000 --- a/drivers/cpuidle/Kconfig.arm64 +++ /dev/null @@ -1,13 +0,0 @@ -# -# ARM64 CPU Idle drivers -# - -config ARM64_CPUIDLE - bool "Generic ARM64 CPU idle Driver" - select OF_IDLE_STATES - help - Select this to enable generic cpuidle driver for ARM v8. - It provides a generic idle driver whose idle states are configured - at run-time through DT nodes. The CPUidle suspend backend is - initialized by the device tree parsing code on matching the entry - method to the respective CPU operations. diff --git a/drivers/cpuidle/Makefile b/drivers/cpuidle/Makefile index d3e662cde224..d41366a7838c 100644 --- a/drivers/cpuidle/Makefile +++ b/drivers/cpuidle/Makefile @@ -8,7 +8,3 @@ obj-$(CONFIG_OF_IDLE_STATES) += of_idle_states.o obj-$(CONFIG_CPU_IDLE_CALXEDA) += cpuidle-calxeda.o obj-$(CONFIG_ARCH_KIRKWOOD) += cpuidle-kirkwood.o - -############################################################################### -# ARM64 drivers -obj-$(CONFIG_ARM64_CPUIDLE) += cpuidle-arm64.o diff --git a/drivers/cpuidle/cpuidle-arm64.c b/drivers/cpuidle/cpuidle-arm64.c deleted file mode 100644 index 2cfde6ce3086..000000000000 --- a/drivers/cpuidle/cpuidle-arm64.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * ARM64 generic CPU idle driver. - * - * Copyright (C) 2014 ARM Ltd. - * Author: Lorenzo Pieralisi - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "of_idle_states.h" - -typedef int (*suspend_init_fn)(struct cpuidle_driver *, - struct device_node *[]); - -struct cpu_suspend_ops { - const char *id; - suspend_init_fn init_fn; -}; - -static const struct cpu_suspend_ops suspend_operations[] __initconst = { - {"arm,psci", psci_dt_register_idle_states}, - {} -}; - -static __init const struct cpu_suspend_ops *get_suspend_ops(const char *str) -{ - int i; - - if (!str) - return NULL; - - for (i = 0; suspend_operations[i].id; i++) - if (!strcmp(suspend_operations[i].id, str)) - return &suspend_operations[i]; - - return NULL; -} - -/* - * arm_enter_idle_state - Programs CPU to enter the specified state - * - * @dev: cpuidle device - * @drv: cpuidle driver - * @idx: state index - * - * Called from the CPUidle framework to program the device to the - * specified target state selected by the governor. - */ -static int arm_enter_idle_state(struct cpuidle_device *dev, - struct cpuidle_driver *drv, int idx) -{ - int ret; - - if (!idx) { - cpu_do_idle(); - return idx; - } - - cpu_pm_enter(); - /* - * Pass idle state index to cpu_suspend which in turn will call - * the CPU ops suspend protocol with idle index as a parameter. - * - * Some states would not require context to be saved and flushed - * to DRAM, so calling cpu_suspend would not be stricly necessary. - * When power domains specifications for ARM CPUs are finalized then - * this code can be optimized to prevent saving registers if not - * needed. - */ - ret = cpu_suspend(idx); - - cpu_pm_exit(); - - return ret ? -1 : idx; -} - -struct cpuidle_driver arm64_idle_driver = { - .name = "arm64_idle", - .owner = THIS_MODULE, -}; - -static struct device_node *state_nodes[CPUIDLE_STATE_MAX] __initdata; - -/* - * arm64_idle_init - * - * Registers the arm64 specific cpuidle driver with the cpuidle - * framework. It relies on core code to parse the idle states - * and initialize them using driver data structures accordingly. - */ -static int __init arm64_idle_init(void) -{ - int i, ret; - const char *entry_method; - struct device_node *idle_states_node; - const struct cpu_suspend_ops *suspend_init; - struct cpuidle_driver *drv = &arm64_idle_driver; - - idle_states_node = of_find_node_by_path("/cpus/idle-states"); - if (!idle_states_node) - return -ENOENT; - - if (of_property_read_string(idle_states_node, "entry-method", - &entry_method)) { - pr_warn(" * %s missing entry-method property\n", - idle_states_node->full_name); - of_node_put(idle_states_node); - return -EOPNOTSUPP; - } - - suspend_init = get_suspend_ops(entry_method); - if (!suspend_init) { - pr_warn("Missing suspend initializer\n"); - of_node_put(idle_states_node); - return -EOPNOTSUPP; - } - - /* - * State at index 0 is standby wfi and considered standard - * on all ARM platforms. If in some platforms simple wfi - * can't be used as "state 0", DT bindings must be implemented - * to work around this issue and allow installing a special - * handler for idle state index 0. - */ - drv->states[0].exit_latency = 1; - drv->states[0].target_residency = 1; - drv->states[0].flags = CPUIDLE_FLAG_TIME_VALID; - strncpy(drv->states[0].name, "ARM WFI", CPUIDLE_NAME_LEN); - strncpy(drv->states[0].desc, "ARM WFI", CPUIDLE_DESC_LEN); - - drv->cpumask = (struct cpumask *) cpu_possible_mask; - /* - * Start at index 1, request idle state nodes to be filled - */ - ret = of_init_idle_driver(drv, state_nodes, 1, true); - if (ret) - return ret; - - if (suspend_init->init_fn(drv, state_nodes)) - return -EOPNOTSUPP; - - for (i = 0; i < drv->state_count; i++) - drv->states[i].enter = arm_enter_idle_state; - - return cpuidle_register(drv, NULL); -} -device_initcall(arm64_idle_init);