diff options
| author | Jayachandran C <jchandra@broadcom.com> | 2015-01-09 05:43:20 -0500 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2015-04-01 11:21:52 -0400 |
| commit | 5084e93dfeebd171e0ad02cc7ea560364a7f80b3 (patch) | |
| tree | 1cd86fe1fb2f0da8888c562fa926033c16963e0b /arch/mips/netlogic | |
| parent | b3b73ae62ca82744c92c1c2d49381add26d0a8bd (diff) | |
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>
Diffstat (limited to 'arch/mips/netlogic')
| -rw-r--r-- | arch/mips/netlogic/common/reset.S | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/mips/netlogic/common/reset.S b/arch/mips/netlogic/common/reset.S index 701c4bcb9e47..e3e518974e0b 100644 --- a/arch/mips/netlogic/common/reset.S +++ b/arch/mips/netlogic/common/reset.S | |||
| @@ -235,6 +235,26 @@ EXPORT(nlm_boot_siblings) | |||
| 235 | mfc0 v0, CP0_EBASE, 1 | 235 | mfc0 v0, CP0_EBASE, 1 |
| 236 | andi v0, 0x3ff /* v0 <- node/core */ | 236 | andi v0, 0x3ff /* v0 <- node/core */ |
| 237 | 237 | ||
| 238 | /* | ||
| 239 | * Errata: to avoid potential live lock, setup IFU_BRUB_RESERVE | ||
| 240 | * when running 4 threads per core | ||
| 241 | */ | ||
| 242 | andi v1, v0, 0x3 /* v1 <- thread id */ | ||
| 243 | bnez v1, 2f | ||
| 244 | nop | ||
| 245 | |||
| 246 | /* thread 0 of each core. */ | ||
| 247 | li t0, CKSEG1ADDR(RESET_DATA_PHYS) | ||
| 248 | lw t1, BOOT_THREAD_MODE(t0) /* t1 <- thread mode */ | ||
| 249 | subu t1, 0x3 /* 4-thread per core mode? */ | ||
| 250 | bnez t1, 2f | ||
| 251 | nop | ||
| 252 | |||
| 253 | li t0, IFU_BRUB_RESERVE | ||
| 254 | li t1, 0x55 | ||
| 255 | mtcr t1, t0 | ||
| 256 | _ehb | ||
| 257 | 2: | ||
| 238 | beqz v0, 4f /* boot cpu (cpuid == 0)? */ | 258 | beqz v0, 4f /* boot cpu (cpuid == 0)? */ |
| 239 | nop | 259 | nop |
| 240 | 260 | ||
