mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 06:31:31 +00:00
powerpc/mpc85xx:Fix Core cluster configuration loop
Different personalities/derivatives of SoC may have reduced cluster. But it is not necessary for last valid DCFG_CCSR_TP_CLUSTER register to have DCFG_CCSR_TP_CLUSTER[EOC] bit set to represent "End of Clusters". EOC bit can still be set in last DCFG_CCSR_TP_CLUSTER register of orignal SoC which may not be valid for the personality. So add initiator type check to find valid cluster. Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com> Signed-off-by: Poonam Aggrwal <poonam.aggrwal@freescale.com> Signed-off-by: Andy Fleming <afleming@freescale.com>
This commit is contained in:
parent
2ae4e8d958
commit
db9a807054
1 changed files with 22 additions and 8 deletions
|
@ -312,19 +312,33 @@ int enable_cluster_l2(void)
|
||||||
|
|
||||||
/* Look through the remaining clusters, and set up their caches */
|
/* Look through the remaining clusters, and set up their caches */
|
||||||
do {
|
do {
|
||||||
|
int j, cluster_valid = 0;
|
||||||
|
|
||||||
l2cache = (void __iomem *)(CONFIG_SYS_FSL_CLUSTER_1_L2 + i * 0x40000);
|
l2cache = (void __iomem *)(CONFIG_SYS_FSL_CLUSTER_1_L2 + i * 0x40000);
|
||||||
|
|
||||||
cluster = in_be32(&gur->tp_cluster[i].lower);
|
cluster = in_be32(&gur->tp_cluster[i].lower);
|
||||||
|
|
||||||
/* set stash ID to (cluster) * 2 + 32 + 1 */
|
/* check that at least one core/accel is enabled in cluster */
|
||||||
clrsetbits_be32(&l2cache->l2csr1, 0xff, 32 + i * 2 + 1);
|
for (j = 0; j < 4; j++) {
|
||||||
|
u32 idx = (cluster >> (j*8)) & TP_CLUSTER_INIT_MASK;
|
||||||
|
u32 type = in_be32(&gur->tp_ityp[idx]);
|
||||||
|
|
||||||
printf("enable l2 for cluster %d %p\n", i, l2cache);
|
if (type & TP_ITYP_AV)
|
||||||
|
cluster_valid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
out_be32(&l2cache->l2csr0, L2CSR0_L2FI|L2CSR0_L2LFC);
|
if (cluster_valid) {
|
||||||
while ((in_be32(&l2cache->l2csr0) &
|
/* set stash ID to (cluster) * 2 + 32 + 1 */
|
||||||
(L2CSR0_L2FI|L2CSR0_L2LFC)) != 0)
|
clrsetbits_be32(&l2cache->l2csr1, 0xff, 32 + i * 2 + 1);
|
||||||
;
|
|
||||||
out_be32(&l2cache->l2csr0, L2CSR0_L2E);
|
printf("enable l2 for cluster %d %p\n", i, l2cache);
|
||||||
|
|
||||||
|
out_be32(&l2cache->l2csr0, L2CSR0_L2FI|L2CSR0_L2LFC);
|
||||||
|
while ((in_be32(&l2cache->l2csr0)
|
||||||
|
& (L2CSR0_L2FI|L2CSR0_L2LFC)) != 0)
|
||||||
|
;
|
||||||
|
out_be32(&l2cache->l2csr0, L2CSR0_L2E);
|
||||||
|
}
|
||||||
i++;
|
i++;
|
||||||
} while (!(cluster & TP_CLUSTER_EOC));
|
} while (!(cluster & TP_CLUSTER_EOC));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue