[U-Boot] [PATCH] Add bootcount to AT91

Anders Darander anders.darander at gmail.com
Wed Jan 20 10:02:53 CET 2010


Hi all,

As the merge window has closed, I'd just like to bump my old mail
below and ask for comments. Currently the actual register to use is
hard-coded. I'm unsure of what the current status is when it comes to
include new architecture specific CONFIG_*-options.

The bootcount-feature is supported in u-boot for some PPC-boards. The
patch below is basically a rip-off of one of these features, adapted
for the AT91SAM9-architecture. It is tested on an olimex board with an
at91sam9260.

I'd be very happy if we could get this feature mainlined. (I've also
got some replies off-list, from people wanting to use this feature.)

Thanks in advance!
Best regards,
Anders

On Thu, Jan 14, 2010 at 15:00, Anders Darander
<anders.darander at gmail.com> wrote:
> From: Anders Darander <ad at datarespons.se>
>
> Use AT91_GPBR 3 as a bootcount register.
>
> Signed-off-by: Anders Darander <ad at datarespons.se>
> ---
>  cpu/arm926ejs/at91/cpu.c |   28 ++++++++++++++++++++++++++++
>  1 files changed, 28 insertions(+), 0 deletions(-)
>
> diff --git a/cpu/arm926ejs/at91/cpu.c b/cpu/arm926ejs/at91/cpu.c
> index f2f7b62..09c1376 100644
> --- a/cpu/arm926ejs/at91/cpu.c
> +++ b/cpu/arm926ejs/at91/cpu.c
> @@ -31,6 +31,11 @@
>  #define 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(AT91_MAIN_CLOCK);
> @@ -52,3 +57,26 @@ int print_cpuinfo(void)
>        return 0;
>  }
>  #endif
> +
> +#ifdef CONFIG_BOOTCOUNT_LIMIT
> +
> +void bootcount_store (ulong a)
> +{
> +       volatile ulong *save_addr =
> +               (volatile ulong *)(AT91_BASE_SYS + AT91_BOOTCOUNT_ADDRESS);
> +
> +       *save_addr = (BOOTCOUNT_MAGIC & 0xffff0000) | a;
> +}
> +
> +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 */
> --
> 1.6.6
>
>



-- 
Anders Darander
EPO guidelines 1978: "If the contribution to the known art resides
solely in a computer program then the subject matter is not
patentable in whatever manner it may be presented in the claims."


More information about the U-Boot mailing list