Blackfin: use on-chip reset func with newer parts

Turns out the documentation is wrong and doing "RAISE 1" does not result
in a software reset, only a core reset.  So when the on-chip rom has a
functioning reset helper, use it.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger 2011-04-30 04:35:21 -04:00
parent 867f54cc35
commit 9aeab10bd4
1 changed files with 34 additions and 36 deletions

View File

@ -9,6 +9,7 @@
#include <common.h> #include <common.h>
#include <command.h> #include <command.h>
#include <asm/blackfin.h> #include <asm/blackfin.h>
#include <asm/mach-common/bits/bootrom.h>
#include "cpu.h" #include "cpu.h"
/* A system soft reset makes external memory unusable so force /* A system soft reset makes external memory unusable so force
@ -29,11 +30,6 @@ static void bfin_reset(void)
*/ */
__builtin_bfin_ssync(); __builtin_bfin_ssync();
/* The bootrom checks to see how it was reset and will
* automatically perform a software reset for us when
* it starts executing after the core reset.
*/
if (ANOMALY_05000353 || ANOMALY_05000386) {
/* Initiate System software reset. */ /* Initiate System software reset. */
bfin_write_SWRST(0x7); bfin_write_SWRST(0x7);
@ -68,7 +64,6 @@ static void bfin_reset(void)
: "a" (15 * 1) : "a" (15 * 1)
: "LC1", "LB1", "LT1" : "LC1", "LB1", "LT1"
); );
}
while (1) while (1)
/* Issue core reset */ /* Issue core reset */
@ -84,7 +79,10 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{ {
if (board_reset) if (board_reset)
board_reset(); board_reset();
if (ANOMALY_05000353 || ANOMALY_05000386)
while (1) while (1)
asm("jump (%0);" : : "a" (bfin_reset)); asm("jump (%0);" : : "a" (bfin_reset));
else
bfrom_SoftReset((void *)(L1_SRAM_SCRATCH_END - 20));
return 0; return 0;
} }