MIPS: Netlogic: Handle XLP hardware errata
Core configuration register IFU_BRUB_RESERVE has to be setup to handle a silicon errata which can result in a CPU hang. Signed-off-by: Jayachandran C <jchandra@broadcom.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/8902/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
b3b73ae62c
commit
5084e93dfe
|
@ -46,6 +46,8 @@
|
|||
#define CPU_BLOCKID_FPU 9
|
||||
#define CPU_BLOCKID_MAP 10
|
||||
|
||||
#define IFU_BRUB_RESERVE 0x007
|
||||
|
||||
#define ICU_DEFEATURE 0x100
|
||||
|
||||
#define LSU_DEFEATURE 0x304
|
||||
|
|
|
@ -235,6 +235,26 @@ EXPORT(nlm_boot_siblings)
|
|||
mfc0 v0, CP0_EBASE, 1
|
||||
andi v0, 0x3ff /* v0 <- node/core */
|
||||
|
||||
/*
|
||||
* Errata: to avoid potential live lock, setup IFU_BRUB_RESERVE
|
||||
* when running 4 threads per core
|
||||
*/
|
||||
andi v1, v0, 0x3 /* v1 <- thread id */
|
||||
bnez v1, 2f
|
||||
nop
|
||||
|
||||
/* thread 0 of each core. */
|
||||
li t0, CKSEG1ADDR(RESET_DATA_PHYS)
|
||||
lw t1, BOOT_THREAD_MODE(t0) /* t1 <- thread mode */
|
||||
subu t1, 0x3 /* 4-thread per core mode? */
|
||||
bnez t1, 2f
|
||||
nop
|
||||
|
||||
li t0, IFU_BRUB_RESERVE
|
||||
li t1, 0x55
|
||||
mtcr t1, t0
|
||||
_ehb
|
||||
2:
|
||||
beqz v0, 4f /* boot cpu (cpuid == 0)? */
|
||||
nop
|
||||
|
||||
|
|
Loading…
Reference in New Issue