static int __ref __cpu_hotplug(bool out_flag, enum hotplug_cmd cmd) { int i = 0; int ret = 0; #if defined(CONFIG_SCHED_HMP) int hotplug_out_limit = 0; #endif if (exynos_dm_hotplug_disabled()) return 0; #if defined(CONFIG_SCHED_HMP) if (out_flag) { if (do_disable_hotplug) goto blk_out; if (cmd == CMD_SLEEP_PREPARE) { for (i = setup_max_cpus - 1; i >= NR_CLUST0_CPUS; i--) { if (cpu_online(i)) { ret = cpu_down(i); if (ret) goto blk_out; } } for (i = 1; i < nr_sleep_prepare_cpus; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } else if (cmd == CMD_CLUST1_OUT && !in_low_power_mode) { for (i = setup_max_cpus - 1; i >= NR_CLUST0_CPUS; i--) { if (cpu_online(i)) { ret = cpu_down(i); if (ret) goto blk_out; } } } else { if (cmd == CMD_CLUST0_ONE_OUT) { if (!in_low_power_mode) goto blk_out; for (i = NR_CLUST0_CPUS - 2; i > 0; i--) { if (cpu_online(i)) { ret = cpu_down(i); if (ret) goto blk_out; } } } else { if (cluster0_hotplug_in) hotplug_out_limit = NR_CLUST0_CPUS - 2; for (i = setup_max_cpus - 1; i > hotplug_out_limit; i--) { if (cpu_online(i)) { ret = cpu_down(i); if (ret) goto blk_out; } } } } } else { if (in_suspend_prepared) goto blk_out; if (cmd == CMD_CLUST1_IN) { if (in_low_power_mode) goto blk_out; for (i = NR_CLUST0_CPUS; i < setup_max_cpus; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } else { if (cmd == CMD_CLUST0_ONE_IN) { for (i = 1; i < NR_CLUST0_CPUS - 1; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } else if ((cluster1_hotplugged && !do_disable_hotplug) || (cmd == CMD_CLUST0_IN)) { for (i = 1; i < NR_CLUST0_CPUS; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } else { if (lcd_is_on) { for (i = NR_CLUST0_CPUS; i < setup_max_cpus; i++) { if (do_hotplug_out) goto blk_out; if (!cpu_online(i)) { if (i == NR_CLUST0_CPUS) set_hmp_boostpulse(100000); ret = cpu_up(i); if (ret) goto blk_out; } } for (i = 1; i < NR_CLUST0_CPUS; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } else { for (i = 1; i < setup_max_cpus; i++) { if (do_hotplug_out && i >= NR_CLUST0_CPUS) goto blk_out; if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } } } } #else if (out_flag) { if (do_disable_hotplug) goto blk_out; for (i = setup_max_cpus - 1; i > 0; i--) { if (cpu_online(i)) { ret = cpu_down(i); if (ret) goto blk_out; } } } else { if (in_suspend_prepared) goto blk_out; for (i = 1; i < setup_max_cpus; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } #endif blk_out: return ret; }
static int __ref __cpu_hotplug(bool out_flag, enum hotplug_cmd cmd) { int i = 0; int ret = 0; if (exynos_dm_hotplug_disabled()) return 0; #if defined(CONFIG_SCHED_HMP) if (out_flag) { if (do_disable_hotplug) goto blk_out; if (cmd == CMD_BIG_OUT && !in_low_power_mode) { for (i = setup_max_cpus - 1; i >= NR_CA7; i--) { if (cpu_online(i)) { ret = cpu_down(i); if (ret) goto blk_out; } } } else { for (i = setup_max_cpus - 1; i > 0; i--) { if (cpu_online(i)) { ret = cpu_down(i); if (ret) goto blk_out; } } } } else { if (in_suspend_prepared) goto blk_out; if (cmd == CMD_BIG_IN) { if (in_low_power_mode) goto blk_out; for (i = NR_CA7; i < setup_max_cpus; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } else { if ((big_hotpluged && !do_disable_hotplug) || (cmd == CMD_LITTLE_IN)) { for (i = 1; i < NR_CA7; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } else { if (lcd_is_on) { for (i = NR_CA7; i < setup_max_cpus; i++) { if (!cpu_online(i)) { if (i == NR_CA7) set_hmp_boostpulse(100000); ret = cpu_up(i); if (ret) goto blk_out; } } for (i = 1; i < NR_CA7; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } else { for (i = 1; i < setup_max_cpus; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } } } } #else if (out_flag) { if (do_disable_hotplug) goto blk_out; for (i = setup_max_cpus - 1; i > 0; i--) { if (cpu_online(i)) { ret = cpu_down(i); if (ret) goto blk_out; } } } else { if (in_suspend_prepared) goto blk_out; for (i = 1; i < setup_max_cpus; i++) { if (!cpu_online(i)) { ret = cpu_up(i); if (ret) goto blk_out; } } } #endif blk_out: return ret; }