提交 db038fee 编写于 作者: J Jayachandran C 提交者: Ralf Baechle

MIPS: Netlogic: Get coremask from FUSE register

Use the FUSE register to get the list of active cores in the CPU
instead of using the CPU reset register, this is the recommended
method.

Also add code to mask the coremask with the default number of cores
for each processor series.
Signed-off-by: NJayachandran C <jchandra@broadcom.com>
Signed-off-by: NJohn Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/6275/
上级 cfec4c63
...@@ -99,7 +99,7 @@ static void xlp_enable_secondary_cores(const cpumask_t *wakeup_mask) ...@@ -99,7 +99,7 @@ static void xlp_enable_secondary_cores(const cpumask_t *wakeup_mask)
{ {
struct nlm_soc_info *nodep; struct nlm_soc_info *nodep;
uint64_t syspcibase; uint64_t syspcibase;
uint32_t syscoremask; uint32_t syscoremask, mask, fusemask;
int core, n, cpu; int core, n, cpu;
for (n = 0; n < NLM_NR_NODES; n++) { for (n = 0; n < NLM_NR_NODES; n++) {
...@@ -111,12 +111,31 @@ static void xlp_enable_secondary_cores(const cpumask_t *wakeup_mask) ...@@ -111,12 +111,31 @@ static void xlp_enable_secondary_cores(const cpumask_t *wakeup_mask)
if (n != 0) if (n != 0)
nlm_node_init(n); nlm_node_init(n);
nodep = nlm_get_node(n); nodep = nlm_get_node(n);
syscoremask = nlm_read_sys_reg(nodep->sysbase, SYS_CPU_RESET);
fusemask = nlm_read_sys_reg(nodep->sysbase,
SYS_EFUSE_DEVICE_CFG_STATUS0);
switch (read_c0_prid() & 0xff00) {
case PRID_IMP_NETLOGIC_XLP3XX:
mask = 0xf;
break;
case PRID_IMP_NETLOGIC_XLP2XX:
mask = 0x3;
break;
case PRID_IMP_NETLOGIC_XLP8XX:
default:
mask = 0xff;
break;
}
/*
* Fused out cores are set in the fusemask, and the remaining
* cores are renumbered to range 0 .. nactive-1
*/
syscoremask = (1 << hweight32(~fusemask & mask)) - 1;
/* The boot cpu */ /* The boot cpu */
if (n == 0) { if (n == 0)
syscoremask |= 1;
nodep->coremask = 1; nodep->coremask = 1;
}
for (core = 0; core < NLM_CORES_PER_NODE; core++) { for (core = 0; core < NLM_CORES_PER_NODE; core++) {
/* we will be on node 0 core 0 */ /* we will be on node 0 core 0 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册