|
|
|
@ -35,6 +35,13 @@ |
|
|
|
|
#define CONFIG_SYS_AT91_MAIN_CLOCK 0 |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* The at91sam9260 has 4 GPBR (0-3), we'll use the last one, nr 3, |
|
|
|
|
* to keep track of the bootcount. |
|
|
|
|
*/ |
|
|
|
|
#define AT91_GPBR_BOOTCOUNT_REGISTER 3 |
|
|
|
|
#define AT91_BOOTCOUNT_ADDRESS (AT91_GPBR + 4*AT91_GPBR_BOOTCOUNT_REGISTER) |
|
|
|
|
|
|
|
|
|
int arch_cpu_init(void) |
|
|
|
|
{ |
|
|
|
|
return at91_clock_init(CONFIG_SYS_AT91_MAIN_CLOCK); |
|
|
|
@ -56,3 +63,30 @@ int print_cpuinfo(void) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_BOOTCOUNT_LIMIT |
|
|
|
|
/*
|
|
|
|
|
* Just as the mpc5xxx, we combine the BOOTCOUNT_MAGIC and boocount |
|
|
|
|
* in one 32-bit register. This is done, as the AT91SAM9260 only has |
|
|
|
|
* 4 GPBR. |
|
|
|
|
*/ |
|
|
|
|
void bootcount_store (ulong a) |
|
|
|
|
{ |
|
|
|
|
volatile ulong *save_addr = |
|
|
|
|
(volatile ulong *)(AT91_BASE_SYS + AT91_BOOTCOUNT_ADDRESS); |
|
|
|
|
|
|
|
|
|
*save_addr = (BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ulong bootcount_load (void) |
|
|
|
|
{ |
|
|
|
|
volatile ulong *save_addr = |
|
|
|
|
(volatile ulong *)(AT91_BASE_SYS + AT91_BOOTCOUNT_ADDRESS); |
|
|
|
|
|
|
|
|
|
if ((*save_addr & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000)) |
|
|
|
|
return 0; |
|
|
|
|
else |
|
|
|
|
return (*save_addr & 0x0000ffff); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif /* CONFIG_BOOTCOUNT_LIMIT */ |
|
|
|
|