Add bootcount to AT91
PATCH 1/1 Add bootcount to AT91
From: Anders Darander <[email protected]>
Use AT91_GPBR 3 as a bootcount register.
--- cpu/arm926ejs/at91/cpu.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-)
cpu/arm926ejs/at91/cpu.c +28 -0
@@ -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 */
Signature · 1 line
1.6.6
PATCH 1/1 Add bootcount to AT91
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
Quoted 56 lines · Anders Darander
From: Anders Darander <[email protected]>
Use
AT91_GPBR3 as a bootcount register.Signed-off-by Anders Darander <[email protected]>---
?cpu/arm926ejs/at91/cpu.c | ? 28 ++++++++++++++++++++++++++++ ?1 files changed, 28 insertions(+), 0 deletions(-)cpu/arm926ejs/at91/cpu.c +0
-0@@ -31,6 +31,11 @@?#define
AT91_MAIN_CLOCK0
?#endifcpu/arm926ejs/at91/cpu.c +5
-0+/* 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)
?{
? ? ? ?returnat91_clock_init(AT91_MAIN_CLOCK);cpu/arm926ejs/at91/cpu.c +0
-0@@ -52,3 +57,26 @@ int print_cpuinfo(void) ? ? ? ?return 0; ?}?#endif
cpu/arm926ejs/at91/cpu.c +23
-1+ +#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
Signature · 4 lines
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."
PATCH 1/1 Add bootcount to AT91
In reply to Anders DaranderHi,
Quoted 4 lines · Anders Darander
From: Anders Darander <[email protected]>
Use
AT91_GPBR3 as a bootcount register.
As a followup to Werners list of patches not incorporated (from some time ago), I'd just like to get a comment on the status of this patch.
Should it get reworked somehow, or could it be integrated?
Regards,
Anders Darander
PATCH 1/1 Add bootcount to AT91
Quoted 9 lines · Anders Darander
Hi,
Quoted 4 lines · Anders Darander
From: Anders Darander <[email protected]>
Use
AT91_GPBR3 as a bootcount register.
Quoted 8 lines
As a followup to Werners list of patches not incorporated (from some time ago), I'd just like to get a comment on the status of this patch.
Should it get reworked somehow, or could it be integrated?
Regards,
Anders Darander
Please send me a link to the original patch.
I will take a look
Tom
PATCH 1/1 Add bootcount to AT91
Hi Tom,
Quoted 7 lines · Tom
Quoted 3 lines
From: Anders Darander <[email protected]>
Quoted 2 lines
Use
AT91_GPBR3 as a bootcount register.Please send me a link to the original patch.
I will take a look
Tom
Here is the link from Werners patch-status mail:
http://article.gmane.org/gmane.comp.boot-loaders.u-boot/73640
(Sorry for bumping this thread that many times... I'm pretty sure that you're quite busy...)
Best regards,
Anders Darander
PATCH 1/1 Add bootcount to AT91
Quoted 10 lines · Anders Darander
Hi Tom,
Quoted 6 lines · Tom
Quoted 2 lines
From: Anders Darander <[email protected]>
Quoted 1 line
Use
AT91_GPBR3 as a bootcount register.Please send me a link to the original patch.
I will take a look
Tom
Quoted 5 lines
Here is the link from Werners patch-status mail:
http://article.gmane.org/gmane.comp.boot-loaders.u-boot/73640(Sorry for bumping this thread that many times... I'm pretty sure that you're quite busy...)
No problem.
Its quite all right to ping me.
I have added your patch to what will be reviewed this week. Tom
Quoted 3 lines
Best regards,
Anders Darander
PATCH 1/1 Add bootcount to AT91
Hi Tom,
Any news on this?
Best regards,
Anders
Quoted 30 lines · Tom
Quoted 13 lines · Anders Darander
Hi Tom,
Quoted 8 lines · Tom
Quoted 4 lines
From: Anders Darander <[email protected]>
Quoted 2 lines
Use
AT91_GPBR3 as a bootcount register.Please send me a link to the original patch.
I will take a look
TomQuoted 5 lines
Here is the link from Werners patch-status mail:
http://article.gmane.org/gmane.comp.boot-loaders.u-boot/73640(Sorry ?for bumping this thread that many times... I'm pretty sure that you're quite busy...)
No problem.
Its quite all right to ping me.
I have added your patch to what will be reviewed this week. TomQuoted 3 lines
Best regards,
Anders Darander
Signature · 4 lines
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."
PATCH 1/1 Add bootcount to AT91
In reply to Anders DaranderQuoted 17 lines · Anders Darander
From: Anders Darander <[email protected]>
Use
AT91_GPBR3 as a bootcount register.Signed-off-by Anders Darander <[email protected]>--- cpu/arm926ejs/at91/cpu.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-)cpu/arm926ejs/at91/cpu.c +0
-0
cpu/arm926ejs/at91/cpu.c line 35
Quoted 5 lines
cpu/arm926ejs/at91/cpu.c +2
-0@@ -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. */
multi-line comments are
/*
*Comment lines
*/
Quoted 9 lines
cpu/arm926ejs/at91/cpu.c +3
-0+#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 ; }
cpu/arm926ejs/at91/cpu.c int print_cpuinfo(void) · line 68
Quoted 10 lines
cpu/arm926ejs/at91/cpu.c +9
-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;
implied length of a is 16 bits.
the parameter type passed in should be explicitly cast/masked to u16.
I see sharing the 32 bits this way is how mpc5xxx does it..
But
mpc8260, mpc83xx, mpc8xx, ppc4xx, ipx store the bootcount_magic and the parameter as 2 32bit values.
Is there a memory limitation on why you can not follow what most of the others are doing ? If there is, please add the explanation as a comment.
Thank you for pinging me,
Tom
PATCH 1/1 Add bootcount to AT91
Hi Tom,
Thanks for your comments.
Quoted 15 lines · Tom
Quoted 9 lines · Anders Darander
From: Anders Darander <[email protected]>
cpu/arm926ejs/at91/cpu.c +0
-0@@ -31,6 +31,11 @@?#define
AT91_MAIN_CLOCK0
?#endif
?+/* The at91sam9260 has 4 GPBR (0-3), we'll use the last one, nr 3,
+ * to keep track of the bootcount. */multi-line comments are
/*
?*Comment lines
?*/
Correct, I'll fix this.
Quoted 16 lines
Quoted 16 lines
cpu/arm926ejs/at91/cpu.c +2
-0+#define AT91_GPBR_BOOTCOUNT_REGISTER 3 +#define AT91_BOOTCOUNT_ADDRESS (AT91_GPBR +4*AT91_GPBR_BOOTCOUNT_REGISTER)
+
?intarch_cpu_init(void)
?{
? ? ? ?returnat91_clock_init(AT91_MAIN_CLOCK);cpu/arm926ejs/at91/cpu.c +0
-0@@ -52,3 +57,26 @@ int print_cpuinfo(void) ? ? ? ?return 0; ?}?#endif
cpu/arm926ejs/at91/cpu.c +5
-0+ +#ifdef CONFIG_BOOTCOUNT_LIMIT + +void bootcount_store (ulong a) +{
Quoted 8 lines
Quoted 5 lines
+ ? ? ? volatile ulong
*save_addr=
+ ? ? ? ? ? ? ? (volatile ulong *)(AT91_BASE_SYS +AT91_BOOTCOUNT_ADDRESS);
+
+ ? ? ?*save_addr= (BOOTCOUNT_MAGIC&0xffff0000) | a;implied length of a is 16 bits.
the ?parameter type passed in should be explicitly cast/masked to u16.
Correct, I'll fix this.
Quoted 10 lines
I see sharing the 32 bits this way is how mpc5xxx does it..
But
mpc8260, mpc83xx, mpc8xx, ppc4xx, ipx store the
bootcount_magicand the parameter as 2 32bit values.Is there a memory limitation on why you can not follow what most of the others
are doing ? If there is, please add the explanation as a comment.
Well, I think I'd prefer to keep the boocount and the magic to share a 32-bit register; the main reason being that the AT91SAM9260 only has 4 GPBR, i.e. only four registers that keep it's data between resets. I'll add a comment about this.
Best regards,
Anders
Signature · 4 lines
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."