Lines Matching defs:cluster
112 #define CPU_IDX(cluster, cpu) ((cluster << 2) + cpu)
120 /* Turn off cluster when CPU hotplug off */
122 /* Turn off cluster when CPU MCDI off */
136 static bool clst_single_pwr(int cluster, int cpu)
140 int my_idx = (cluster << 2) + cpu;
143 return !(pwr_stat & (cpu_mask[cluster] & ~BIT(cpu_pwr_bit[my_idx])));
146 static bool clst_single_on(int cluster, int cpu)
149 int my_idx = (cluster << 2) + cpu;
152 return !(on_stat & (cpu_mask[cluster] & ~BIT(my_idx)));
170 static void plat_cluster_pwrdwn_common(uint64_t mpidr, int cluster)
172 if (cluster > 0)
180 static void plat_cluster_pwron_common(uint64_t mpidr, int cluster)
182 if (cluster > 0) {
212 static void mcdi_ctrl_before_hotplug_on(int cluster, int cpu)
215 mcdi_pause_clr(cluster, CPU_IDX(cluster, cpu), OFF);
216 mcdi_pause_set(cluster, CPU_IDX(cluster, cpu), ON);
220 static void mcdi_ctrl_before_hotplug_off(int cluster, int cpu, bool cluster_off)
223 mcdi_pause_set(cluster_off ? cluster : -1,
224 CPU_IDX(cluster, cpu), OFF);
227 static void mcdi_ctrl_cluster_cpu_off(int cluster, int cpu, bool cluster_off)
232 sspm_standbywfi_irq_enable(CPU_IDX(cluster, cpu));
235 sspm_cluster_pwr_off_notify(cluster);
237 sspm_cluster_pwr_on_notify(cluster);
253 static void hotplug_ctrl_cluster_on(int cluster, int cpu)
256 mcdi_hotplug_clr(cluster, CPU_IDX(cluster, cpu), OFF);
257 mcdi_hotplug_set(cluster, -1, ON);
258 mcdi_hotplug_wait_ack(cluster, -1, ON);
260 /* power on cluster */
261 if (!spm_get_cluster_powerstate(cluster))
262 spm_poweron_cluster(cluster);
266 static void hotplug_ctrl_cpu_on(int cluster, int cpu)
269 mcdi_hotplug_set(cluster, CPU_IDX(cluster, cpu), ON);
271 spm_poweron_cpu(cluster, cpu);
274 static void hotplug_ctrl_cpu_on_finish(int cluster, int cpu)
276 spm_disable_cpu_auto_off(cluster, cpu);
279 mcdi_hotplug_clr(cluster, CPU_IDX(cluster, cpu), ON);
281 mcdi_pause_clr(cluster, CPU_IDX(cluster, cpu), ON);
283 mcdi_avail_cpu_mask_set(BIT(CPU_IDX(cluster, cpu)));
286 static void hotplug_ctrl_cluster_cpu_off(int cluster, int cpu, bool cluster_off)
288 mcdi_avail_cpu_mask_clr(BIT(CPU_IDX(cluster, cpu)));
291 mcdi_hotplug_set(cluster_off ? cluster : -1,
292 CPU_IDX(cluster, cpu), OFF);
294 spm_enable_cpu_auto_off(cluster, cpu);
297 spm_enable_cluster_auto_off(cluster);
299 spm_set_cpu_power_off(cluster, cpu);
306 int cluster = MPIDR_AFFLVL1_VAL(mpidr);
307 int clst_pwr = spm_get_cluster_powerstate(cluster);
310 mcdi_ctrl_before_hotplug_on(cluster, cpu);
311 hotplug_ctrl_cluster_on(cluster, cpu);
314 /* init cpu reset arch as AARCH64 of cluster */
316 mcucfg_init_archstate(cluster, i, 1);
317 mcucfg_set_bootaddr(cluster, i, secure_entrypoint);
321 hotplug_ctrl_cpu_on(cluster, cpu);
330 int cluster = MPIDR_AFFLVL1_VAL(mpidr);
334 clst_single_on(cluster, cpu));
339 plat_cluster_pwrdwn_common(mpidr, cluster);
341 mcdi_ctrl_before_hotplug_off(cluster, cpu, cluster_off);
342 hotplug_ctrl_cluster_cpu_off(cluster, cpu, cluster_off);
349 int cluster = MPIDR_AFFLVL1_VAL(mpidr);
354 plat_cluster_pwron_common(mpidr, cluster);
358 hotplug_ctrl_cpu_on_finish(cluster, cpu);
365 int cluster = MPIDR_AFFLVL1_VAL(mpidr);
369 bool cluster_off = MCDI_C2 && afflvl1 && clst_single_pwr(cluster, cpu);
376 plat_cluster_pwrdwn_common(mpidr, cluster);
398 mcdi_ctrl_cluster_cpu_off(cluster, cpu, cluster_off);
405 int cluster = MPIDR_AFFLVL1_VAL(mpidr);
434 plat_cluster_pwron_common(mpidr, cluster);
577 /* Init cpu reset arch as AARCH64 of cluster 0 */