Lines Matching refs:cluster

25 void mcpm_set_entry_vector(unsigned cpu, unsigned cluster, void *ptr)  in mcpm_set_entry_vector()  argument
28 mcpm_entry_vectors[cluster][cpu] = val; in mcpm_set_entry_vector()
29 sync_cache_w(&mcpm_entry_vectors[cluster][cpu]); in mcpm_set_entry_vector()
34 void mcpm_set_early_poke(unsigned cpu, unsigned cluster, in mcpm_set_early_poke() argument
37 unsigned long *poke = &mcpm_entry_early_pokes[cluster][cpu][0]; in mcpm_set_early_poke()
68 static inline bool mcpm_cluster_unused(unsigned int cluster) in mcpm_cluster_unused() argument
72 cnt |= mcpm_cpu_use_count[cluster][i]; in mcpm_cluster_unused()
76 int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster) in mcpm_cpu_power_up() argument
87 return platform_ops->power_up(cpu, cluster); in mcpm_cpu_power_up()
89 pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); in mcpm_cpu_power_up()
98 cpu_is_down = !mcpm_cpu_use_count[cluster][cpu]; in mcpm_cpu_power_up()
99 cluster_is_down = mcpm_cluster_unused(cluster); in mcpm_cpu_power_up()
101 mcpm_cpu_use_count[cluster][cpu]++; in mcpm_cpu_power_up()
110 BUG_ON(mcpm_cpu_use_count[cluster][cpu] != 1 && in mcpm_cpu_power_up()
111 mcpm_cpu_use_count[cluster][cpu] != 2); in mcpm_cpu_power_up()
114 ret = platform_ops->cluster_powerup(cluster); in mcpm_cpu_power_up()
116 ret = platform_ops->cpu_powerup(cpu, cluster); in mcpm_cpu_power_up()
127 unsigned int mpidr, cpu, cluster; in mcpm_cpu_power_down() local
149 cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); in mcpm_cpu_power_down()
150 pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); in mcpm_cpu_power_down()
152 __mcpm_cpu_going_down(cpu, cluster); in mcpm_cpu_power_down()
155 BUG_ON(__mcpm_cluster_state(cluster) != CLUSTER_UP); in mcpm_cpu_power_down()
157 mcpm_cpu_use_count[cluster][cpu]--; in mcpm_cpu_power_down()
158 BUG_ON(mcpm_cpu_use_count[cluster][cpu] != 0 && in mcpm_cpu_power_down()
159 mcpm_cpu_use_count[cluster][cpu] != 1); in mcpm_cpu_power_down()
160 cpu_going_down = !mcpm_cpu_use_count[cluster][cpu]; in mcpm_cpu_power_down()
161 last_man = mcpm_cluster_unused(cluster); in mcpm_cpu_power_down()
163 if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) { in mcpm_cpu_power_down()
164 platform_ops->cpu_powerdown_prepare(cpu, cluster); in mcpm_cpu_power_down()
165 platform_ops->cluster_powerdown_prepare(cluster); in mcpm_cpu_power_down()
168 __mcpm_outbound_leave_critical(cluster, CLUSTER_DOWN); in mcpm_cpu_power_down()
171 platform_ops->cpu_powerdown_prepare(cpu, cluster); in mcpm_cpu_power_down()
184 __mcpm_cpu_down(cpu, cluster); in mcpm_cpu_power_down()
207 int mcpm_wait_for_cpu_powerdown(unsigned int cpu, unsigned int cluster) in mcpm_wait_for_cpu_powerdown() argument
214 ret = platform_ops->wait_for_powerdown(cpu, cluster); in mcpm_wait_for_cpu_powerdown()
217 __func__, cpu, cluster, ret); in mcpm_wait_for_cpu_powerdown()
242 unsigned int cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); in mcpm_cpu_suspend() local
244 platform_ops->cpu_suspend_prepare(cpu, cluster); in mcpm_cpu_suspend()
252 unsigned int mpidr, cpu, cluster; in mcpm_cpu_powered_up() local
267 cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); in mcpm_cpu_powered_up()
271 cpu_was_down = !mcpm_cpu_use_count[cluster][cpu]; in mcpm_cpu_powered_up()
272 first_man = mcpm_cluster_unused(cluster); in mcpm_cpu_powered_up()
275 platform_ops->cluster_is_up(cluster); in mcpm_cpu_powered_up()
277 mcpm_cpu_use_count[cluster][cpu] = 1; in mcpm_cpu_powered_up()
279 platform_ops->cpu_is_up(cpu, cluster); in mcpm_cpu_powered_up()
294 unsigned int cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); in nocache_trampoline() local
297 mcpm_set_entry_vector(cpu, cluster, cpu_resume); in nocache_trampoline()
300 __mcpm_cpu_going_down(cpu, cluster); in nocache_trampoline()
301 BUG_ON(!__mcpm_outbound_enter_critical(cpu, cluster)); in nocache_trampoline()
303 __mcpm_outbound_leave_critical(cluster, CLUSTER_DOWN); in nocache_trampoline()
304 __mcpm_cpu_down(cpu, cluster); in nocache_trampoline()
344 void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster) in __mcpm_cpu_going_down() argument
346 mcpm_sync.clusters[cluster].cpus[cpu].cpu = CPU_GOING_DOWN; in __mcpm_cpu_going_down()
347 sync_cache_w(&mcpm_sync.clusters[cluster].cpus[cpu].cpu); in __mcpm_cpu_going_down()
357 void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster) in __mcpm_cpu_down() argument
360 mcpm_sync.clusters[cluster].cpus[cpu].cpu = CPU_DOWN; in __mcpm_cpu_down()
361 sync_cache_w(&mcpm_sync.clusters[cluster].cpus[cpu].cpu); in __mcpm_cpu_down()
373 void __mcpm_outbound_leave_critical(unsigned int cluster, int state) in __mcpm_outbound_leave_critical() argument
376 mcpm_sync.clusters[cluster].cluster = state; in __mcpm_outbound_leave_critical()
377 sync_cache_w(&mcpm_sync.clusters[cluster].cluster); in __mcpm_outbound_leave_critical()
392 bool __mcpm_outbound_enter_critical(unsigned int cpu, unsigned int cluster) in __mcpm_outbound_enter_critical() argument
395 struct mcpm_sync_struct *c = &mcpm_sync.clusters[cluster]; in __mcpm_outbound_enter_critical()
398 c->cluster = CLUSTER_GOING_DOWN; in __mcpm_outbound_enter_critical()
399 sync_cache_w(&c->cluster); in __mcpm_outbound_enter_critical()
441 __mcpm_outbound_leave_critical(cluster, CLUSTER_UP); in __mcpm_outbound_enter_critical()
445 int __mcpm_cluster_state(unsigned int cluster) in __mcpm_cluster_state() argument
447 sync_cache_r(&mcpm_sync.clusters[cluster].cluster); in __mcpm_cluster_state()
448 return mcpm_sync.clusters[cluster].cluster; in __mcpm_cluster_state()
466 mcpm_sync.clusters[i].cluster = CLUSTER_DOWN; in mcpm_sync_init()
477 mcpm_sync.clusters[this_cluster].cluster = CLUSTER_UP; in mcpm_sync_init()