[U-Boot] [PATCH 09/12] 8360, kmeter1: added bootcount feature.

add CONFIG_BOUTCOUNT_LIMIT feature for 8360 CPU.
The bootcounter uses 8 bytes from the muram, because no other memory was found on this CPU for the bootcount feature. So we must correct the muram size in DTS before booting Linux.
This feature is actual only implemented for MPC8360, because not all 83xx CPU have qe, and therefor no muram, which this feature uses.
This patch also activate this option for the kmeter1 board.
Signed-off-by: Heiko Schocher hs@denx.de --- cpu/mpc83xx/cpu.c | 34 ++++++++++++++++++++++++++++++++++ cpu/mpc83xx/fdt.c | 18 ++++++++++++++++++ 2 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/cpu/mpc83xx/cpu.c b/cpu/mpc83xx/cpu.c index 587fca3..df89411 100644 --- a/cpu/mpc83xx/cpu.c +++ b/cpu/mpc83xx/cpu.c @@ -34,6 +34,10 @@ #include <libfdt.h> #include <tsec.h> #include <netdev.h> +#ifdef CONFIG_BOOTCOUNT_LIMIT +#include <asm/immap_qe.h> +#include <asm/io.h> +#endif
DECLARE_GLOBAL_DATA_PTR;
@@ -385,3 +389,33 @@ int cpu_eth_init(bd_t *bis) #endif return 0; } + +#ifdef CONFIG_BOOTCOUNT_LIMIT + +#if !defined(CONFIG_MPC8360) +#error "CONFIG_BOOTCOUNT_LIMIT only for MPC8360 implemented" +#endif + +#if !defined(CONFIG_BOOTCOUNT_ADDR) +#define CONFIG_BOOTCOUNT_ADDR (0x110000 + QE_MURAM_SIZE - 2 * sizeof(unsigned long)) +#endif + +#include <asm/io.h> + +void bootcount_store (ulong a) +{ + void *reg = (void *)(CONFIG_SYS_IMMR + CONFIG_BOOTCOUNT_ADDR); + out_be32 (reg, a); + out_be32 (reg + 4, BOOTCOUNT_MAGIC); +} + +ulong bootcount_load (void) +{ + void *reg = (void *)(CONFIG_SYS_IMMR + CONFIG_BOOTCOUNT_ADDR); + + if (in_be32 (reg + 4) != BOOTCOUNT_MAGIC) + return 0; + else + return in_be32 (reg); +} +#endif /* CONFIG_BOOTCOUNT_LIMIT */ diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c index f890775..4cc9047 100644 --- a/cpu/mpc83xx/fdt.c +++ b/cpu/mpc83xx/fdt.c @@ -32,6 +32,20 @@ extern void ft_qe_setup(void *blob);
DECLARE_GLOBAL_DATA_PTR;
+#if defined(CONFIG_BOOTCOUNT_LIMIT) && defined(CONFIG_MPC8360) +#include <asm/immap_qe.h> + +void fdt_fixup_muram (void *blob) +{ + ulong data[2]; + + data[0] = 0; + data[1] = QE_MURAM_SIZE - 2 * sizeof(unsigned long); + do_fixup_by_path(blob, "/qe/muram/data-only", "reg", + data, sizeof (data), 0); +} +#endif + void ft_cpu_setup(void *blob, bd_t *bd) { immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; @@ -83,4 +97,8 @@ void ft_cpu_setup(void *blob, bd_t *bd) #endif
fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize); + +#if defined(CONFIG_BOOTCOUNT_LIMIT) + fdt_fixup_muram (blob); +#endif }

On Wed, 11 Feb 2009 19:26:27 +0100 Heiko Schocher hs@denx.de wrote:
add CONFIG_BOUTCOUNT_LIMIT feature for 8360 CPU.
s/BOUT/BOOT/
The bootcounter uses 8 bytes from the muram, because no other memory was found on this CPU for the bootcount feature. So we must correct the muram size in DTS before booting Linux.
This feature is actual only implemented for MPC8360, because not all 83xx CPU have qe, and therefor no muram, which this feature
therefore
uses.
This patch also activate this option for the kmeter1 board.
not that I really like enabling this by default, but this patch doesn't do what you say it does in this last paragraph here (that I can see at least). Can you either rm this paragraph (preferred :) or actually add BOOTCOUNT_LIMIT to the board's config? Btw, what's the rationale for enabling this by default, and for this board?
Thank you Heiko,
Kim

Hello Kim,
Kim Phillips wrote:
On Wed, 11 Feb 2009 19:26:27 +0100 Heiko Schocher hs@denx.de wrote:
add CONFIG_BOUTCOUNT_LIMIT feature for 8360 CPU.
s/BOUT/BOOT/
Ups, I fix it.
The bootcounter uses 8 bytes from the muram, because no other memory was found on this CPU for the bootcount feature. So we must correct the muram size in DTS before booting Linux.
This feature is actual only implemented for MPC8360, because not all 83xx CPU have qe, and therefor no muram, which this feature
therefore
I fix this, too.
uses.
This patch also activate this option for the kmeter1 board.
not that I really like enabling this by default, but this patch doesn't do what you say it does in this last paragraph here (that I can see at
Yes, you are right, this is enabled by patch 10/12 in the common config file for all keymile boards. I remove this from the commit message.
least). Can you either rm this paragraph (preferred :) or actually add BOOTCOUNT_LIMIT to the board's config? Btw, what's the rationale for enabling this by default, and for this board?
The hardware manufacturer wants to use this feature, see:
http://www.denx.de/wiki/DULG/UBootBootCountLimit
This board (btw, all keymile boards) uses this feature, so it should be enabled.
bye Heiko
participants (2)
-
Heiko Schocher
-
Kim Phillips