/**************************************************************************
* Description
* Reset chipset and reboot main CPU. This function will never return.
*
* Parameters
* Void.
* Returns
* None.
*
* Return Value List
* void : None.
* Remarks
* None.
**************************************************************************/
.globl hal_soc_reset
.ent hal_soc_reset
hal_soc_reset:
mfc0 t0, C0_STATUS # Get CP0 Status Register
li t1, ~SR_IEC
and t0, t1
mtc0 t0, C0_STATUS # Clear IEC bit in C0_STATUS
ehb
li s8, HAL_BOOT_TYPE_WARM # Cold boot function ID
move s7, zero # Current time
move s6, zero # Don't care
move s5, zero # Don't care
move s4, zero # Don't care
# Try watchdog reset
lui t0, (SOC_REG_BASE_DOG >> 16)
li t1, 0xFFFFFFFF
sw t1, 0x20(t0)
li t1, 3
sw t1, 0x24(t0)
# If EJTAG connected, try SW reset
lui t0, (SOC_REG_BASE_SYS >> 16)
li t2, 0x00000000
sw t2, 0xFC(t0) # Dynamic clock change prepare
lw t1, 0x90(t0)
li t2, ~0x80000000 # Prepare reset whole chip
and t1, t2
sw t1, 0x90(t0)
not t2
or t1, t2 # Reboot, keeping old clock configuration
li t2, 0x80000000
sw t2, 0xFC(t0) # Dynamic clock change start
sw t1, 0x90(t0)
li t2, 0xC0006C00
sw t2, 0xFC(t0) # Dynamic clock change go
1: b 1b # Never return
nop
.end hal_soc_reset
* Description
* Reset chipset and reboot main CPU. This function will never return.
*
* Parameters
* Void.
* Returns
* None.
*
* Return Value List
* void : None.
* Remarks
* None.
**************************************************************************/
.globl hal_soc_reset
.ent hal_soc_reset
hal_soc_reset:
mfc0 t0, C0_STATUS # Get CP0 Status Register
li t1, ~SR_IEC
and t0, t1
mtc0 t0, C0_STATUS # Clear IEC bit in C0_STATUS
ehb
li s8, HAL_BOOT_TYPE_WARM # Cold boot function ID
move s7, zero # Current time
move s6, zero # Don't care
move s5, zero # Don't care
move s4, zero # Don't care
# Try watchdog reset
lui t0, (SOC_REG_BASE_DOG >> 16)
li t1, 0xFFFFFFFF
sw t1, 0x20(t0)
li t1, 3
sw t1, 0x24(t0)
# If EJTAG connected, try SW reset
lui t0, (SOC_REG_BASE_SYS >> 16)
li t2, 0x00000000
sw t2, 0xFC(t0) # Dynamic clock change prepare
lw t1, 0x90(t0)
li t2, ~0x80000000 # Prepare reset whole chip
and t1, t2
sw t1, 0x90(t0)
not t2
or t1, t2 # Reboot, keeping old clock configuration
li t2, 0x80000000
sw t2, 0xFC(t0) # Dynamic clock change start
sw t1, 0x90(t0)
li t2, 0xC0006C00
sw t2, 0xFC(t0) # Dynamic clock change go
1: b 1b # Never return
nop
.end hal_soc_reset