Skip to contentSkip to conversation

Add bootcount to AT91

PATCH New Anders Darander 2 participants 9 messages Jan 14, 2010 – Feb 25, 2010 Arm/Microchip (AT91) SoC support

lore
Share & tools
lore
#0 lore raw

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
index f2f7b62..09c1376 100644
@@ -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
#1 lore raw

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_GPBR 3 as a bootcount register.

---
?cpu/arm926ejs/at91/cpu.c | ? 28 ++++++++++++++++++++++++++++ ?1 files changed, 28 insertions(+), 0 deletions(-)

cpu/arm926ejs/at91/cpu.c +0 -0
index f2f7b62..09c1376 100644
@@ -31,6 +31,11 @@

?#define AT91_MAIN_CLOCK 0
?#endif

cpu/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)
?{
? ? ? ?return at91_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."
#2 lore raw

PATCH 1/1 Add bootcount to AT91

In reply to Anders Darander

Hi,

Quoted 4 lines · Anders Darander

From: Anders Darander <[email protected]>

Use AT91_GPBR 3 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

#3 lore raw

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_GPBR 3 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

#4 lore raw

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_GPBR 3 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

#5 lore raw

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_GPBR 3 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

#6 lore raw

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_GPBR 3 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

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."
#7 lore raw

PATCH 1/1 Add bootcount to AT91

In reply to Anders Darander
Quoted 17 lines · Anders Darander

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 +0 -0
index f2f7b62..09c1376 100644

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

#8 lore raw

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_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
?*/

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)
+
?int arch_cpu_init(void)
?{
? ? ? ?return at91_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_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.

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."