Lines Matching defs:cluster
73 * All cluster mode values are not applicable on all SoCs. The following
105 * @cores: list of R5 cores within the cluster
152 * @cluster: cached pointer to parent cluster structure
162 struct k3_r5_cluster *cluster;
282 static int k3_r5_lockstep_reset(struct k3_r5_cluster *cluster)
288 list_for_each_entry(core, &cluster->cores, elem) {
299 list_for_each_entry(core, &cluster->cores, elem) {
312 list_for_each_entry_continue_reverse(core, &cluster->cores, elem) {
317 core = list_last_entry(&cluster->cores, struct k3_r5_core, elem);
319 list_for_each_entry_from_reverse(core, &cluster->cores, elem) {
327 static int k3_r5_lockstep_release(struct k3_r5_cluster *cluster)
333 list_for_each_entry_reverse(core, &cluster->cores, elem) {
345 list_for_each_entry_reverse(core, &cluster->cores, elem) {
357 list_for_each_entry_continue(core, &cluster->cores, elem) {
361 core = list_first_entry(&cluster->cores, struct k3_r5_core, elem);
363 list_for_each_entry_from(core, &cluster->cores, elem) {
434 * cluster in this mode. The function uses the same reset logic as LockStep
441 struct k3_r5_cluster *cluster = kproc->cluster;
455 ret = (cluster->mode == CLUSTER_MODE_LOCKSTEP ||
456 cluster->mode == CLUSTER_MODE_SINGLECPU) ?
457 k3_r5_lockstep_release(cluster) : k3_r5_split_release(core);
470 if (cluster->soc_data->tcm_ecc_autoinit && !mem_init_dis) {
508 struct k3_r5_cluster *cluster = kproc->cluster;
514 ret = (cluster->mode == CLUSTER_MODE_LOCKSTEP ||
515 cluster->mode == CLUSTER_MODE_SINGLECPU) ?
516 k3_r5_lockstep_reset(cluster) : k3_r5_split_reset(core);
543 struct k3_r5_cluster *cluster = kproc->cluster;
564 if (cluster->mode == CLUSTER_MODE_LOCKSTEP) {
565 list_for_each_entry_reverse(core, &cluster->cores, elem) {
579 list_for_each_entry_continue(core, &cluster->cores, elem) {
615 struct k3_r5_cluster *cluster = kproc->cluster;
620 if (cluster->mode == CLUSTER_MODE_LOCKSTEP) {
621 list_for_each_entry(core, &cluster->cores, elem) {
639 list_for_each_entry_from_reverse(core, &cluster->cores, elem) {
800 * Each R5FSS has a cluster-level setting for configuring the processor
819 * cluster mode. Another eFUSE register bit dictates if the R5F cluster only
820 * supports a Single-CPU mode. All cluster level settings like Cluster mode and
824 * The function behavior is different based on the cluster mode. The R5F cores
834 struct k3_r5_cluster *cluster = kproc->cluster;
844 core0 = list_first_entry(&cluster->cores, struct k3_r5_core, elem);
845 if (cluster->mode == CLUSTER_MODE_LOCKSTEP ||
846 cluster->mode == CLUSTER_MODE_SINGLECPU ||
847 cluster->mode == CLUSTER_MODE_SINGLECORE) {
865 if (single_cpu && cluster->mode == CLUSTER_MODE_SPLIT) {
866 dev_err(cluster->dev, "split-mode not permitted, force configuring for single-cpu mode\n");
867 cluster->mode = CLUSTER_MODE_SINGLECPU;
871 if (!lockstep_en && cluster->mode == CLUSTER_MODE_LOCKSTEP) {
872 dev_err(cluster->dev, "lockstep mode not permitted, force configuring for split-mode\n");
873 cluster->mode = CLUSTER_MODE_SPLIT;
886 if (cluster->mode == CLUSTER_MODE_SINGLECPU ||
887 cluster->mode == CLUSTER_MODE_SINGLECORE) {
916 if (cluster->mode == CLUSTER_MODE_LOCKSTEP) {
922 list_for_each_entry(temp, &cluster->cores, elem) {
1072 struct k3_r5_cluster *cluster = kproc->cluster;
1077 if (cluster->mode == CLUSTER_MODE_LOCKSTEP ||
1078 cluster->mode == CLUSTER_MODE_SINGLECPU ||
1079 cluster->mode == CLUSTER_MODE_SINGLECORE ||
1080 !cluster->soc_data->tcm_is_double)
1083 core0 = list_first_entry(&cluster->cores, struct k3_r5_core, elem);
1105 * and cluster mode parsed originally from kernel DT are updated to reflect the
1111 struct k3_r5_cluster *cluster = kproc->cluster;
1119 enum cluster_mode mode = cluster->mode;
1122 core0 = list_first_entry(&cluster->cores, struct k3_r5_core, elem);
1193 /* fixup TCMs, cluster & core flags to actual values in IPC-only mode */
1196 cluster->mode = mode;
1209 struct k3_r5_cluster *cluster = platform_get_drvdata(pdev);
1218 core1 = list_last_entry(&cluster->cores, struct k3_r5_core, elem);
1219 list_for_each_entry(core, &cluster->cores, elem) {
1241 kproc->cluster = cluster;
1279 if (cluster->mode == CLUSTER_MODE_LOCKSTEP ||
1280 cluster->mode == CLUSTER_MODE_SINGLECPU ||
1281 cluster->mode == CLUSTER_MODE_SINGLECORE)
1305 if (cluster->mode == CLUSTER_MODE_SPLIT && core == core1) {
1316 struct k3_r5_cluster *cluster = platform_get_drvdata(data);
1327 core = (cluster->mode == CLUSTER_MODE_LOCKSTEP ||
1328 cluster->mode == CLUSTER_MODE_SINGLECPU) ?
1329 list_first_entry(&cluster->cores, struct k3_r5_core, elem) :
1330 list_last_entry(&cluster->cores, struct k3_r5_core, elem);
1332 list_for_each_entry_from_reverse(core, &cluster->cores, elem) {
1639 struct k3_r5_cluster *cluster = platform_get_drvdata(data);
1643 list_for_each_entry_safe_reverse(core, temp, &cluster->cores, elem) {
1652 struct k3_r5_cluster *cluster = platform_get_drvdata(pdev);
1680 list_add_tail(&core->elem, &cluster->cores);
1694 struct k3_r5_cluster *cluster;
1705 cluster = devm_kzalloc(dev, sizeof(*cluster), GFP_KERNEL);
1706 if (!cluster)
1709 cluster->dev = dev;
1710 cluster->soc_data = data;
1711 INIT_LIST_HEAD(&cluster->cores);
1713 ret = of_property_read_u32(np, "ti,cluster-mode", &cluster->mode);
1715 dev_err(dev, "invalid format for ti,cluster-mode, ret = %d\n",
1730 cluster->mode = data->single_cpu_mode ?
1733 cluster->mode = CLUSTER_MODE_SINGLECORE;
1736 if ((cluster->mode == CLUSTER_MODE_SINGLECPU && !data->single_cpu_mode) ||
1737 (cluster->mode == CLUSTER_MODE_SINGLECORE && !data->is_single_core)) {
1738 dev_err(dev, "Cluster mode = %d is not supported on this SoC\n", cluster->mode);
1744 dev_err(dev, "MCU cluster requires both R5F cores to be enabled but num_cores is set to = %d\n",
1755 platform_set_drvdata(pdev, cluster);