MIPS: Netlogic: Reduce size of reset code

Update thread wakeup function to use scratch registers for saving SP and
RA. Move the register restore code needed for thread 0 to the calling
function. This reduces the size of code copied to the reset vector.

Signed-off-by: Jayachandran C <jchandra@broadcom.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/6910/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
Jayachandran C 2014-05-09 16:35:14 +05:30 committed by Ralf Baechle
parent 2e240ddd09
commit a3deecfaa3
2 changed files with 16 additions and 11 deletions

View File

@ -197,6 +197,9 @@ FEXPORT(nlm_reset_entry)
EXPORT(nlm_boot_siblings) EXPORT(nlm_boot_siblings)
/* core L1D flush before enable threads */ /* core L1D flush before enable threads */
xlp_flush_l1_dcache xlp_flush_l1_dcache
/* save ra and sp, will be used later (only for boot cpu) */
dmtc0 ra, $22, 6
dmtc0 sp, $22, 7
/* Enable hw threads by writing to MAP_THREADMODE of the core */ /* Enable hw threads by writing to MAP_THREADMODE of the core */
li t0, CKSEG1ADDR(RESET_DATA_PHYS) li t0, CKSEG1ADDR(RESET_DATA_PHYS)
lw t1, BOOT_THREAD_MODE(t0) /* t1 <- thread mode */ lw t1, BOOT_THREAD_MODE(t0) /* t1 <- thread mode */
@ -238,14 +241,12 @@ EXPORT(nlm_boot_siblings)
nop nop
/* /*
* For the boot CPU, we have to restore registers and * For the boot CPU, we have to restore ra and sp and return, rest
* return * of the registers will be restored by the caller
*/ */
4: dmfc0 t0, $4, 2 /* restore SP from UserLocal */ 4:
li t1, 0xfadebeef dmfc0 ra, $22, 6
dmtc0 t1, $4, 2 /* restore SP from UserLocal */ dmfc0 sp, $22, 7
PTR_SUBU sp, t0, PT_SIZE
RESTORE_ALL
jr ra jr ra
nop nop
EXPORT(nlm_reset_entry_end) EXPORT(nlm_reset_entry_end)

View File

@ -54,8 +54,9 @@
.set noat .set noat
.set arch=xlr /* for mfcr/mtcr, XLR is sufficient */ .set arch=xlr /* for mfcr/mtcr, XLR is sufficient */
FEXPORT(xlp_boot_core0_siblings) /* "Master" cpu starts from here */ /* Called by the boot cpu to wake up its sibling threads */
dmtc0 sp, $4, 2 /* SP saved in UserLocal */ NESTED(xlp_boot_core0_siblings, PT_SIZE, sp)
/* CPU register contents lost when enabling threads, save them first */
SAVE_ALL SAVE_ALL
sync sync
/* find the location to which nlm_boot_siblings was relocated */ /* find the location to which nlm_boot_siblings was relocated */
@ -65,9 +66,12 @@ FEXPORT(xlp_boot_core0_siblings) /* "Master" cpu starts from here */
dsubu t2, t1 dsubu t2, t1
daddu t2, t0 daddu t2, t0
/* call it */ /* call it */
jr t2 jalr t2
nop nop
/* not reached */ RESTORE_ALL
jr ra
nop
END(xlp_boot_core0_siblings)
NESTED(nlm_boot_secondary_cpus, 16, sp) NESTED(nlm_boot_secondary_cpus, 16, sp)
/* Initialize CP0 Status */ /* Initialize CP0 Status */