bootcount: Make bootcount magic configurable
authorMarek Vasut <marex@denx.de>
Wed, 10 Oct 2018 22:13:54 +0000 (00:13 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 19 Oct 2018 18:16:43 +0000 (14:16 -0400)
Add new Kconfig option, SYS_BOOTCOUNT_MAGIC, to select the boot
counter magic word. This can be useful ie. in case the entire
boot counter register is not usable.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Tom Rini <trini@konsulko.com>
drivers/bootcount/Kconfig
drivers/bootcount/bootcount.c
drivers/bootcount/bootcount_at91.c
drivers/bootcount/bootcount_davinci.c
drivers/bootcount/bootcount_ram.c
include/common.h

index 9a0bd516d93b58d0903300533a2e8a748a8a6a4d..67033637c0d6bcf5bd01c96c5e8a81f8d66d418e 100644 (file)
@@ -127,4 +127,10 @@ config SYS_BOOTCOUNT_ADDR
        help
          Set the address used for reading and writing the boot counter.
 
+config SYS_BOOTCOUNT_MAGIC
+       hex "Magic value for the boot counter"
+       default 0xB001C041
+       help
+         Set the magic value used for the boot counter.
+
 endif
index 646c563f8a4a5f7d400ff1af39a77ea822fbf19e..66c1284c5bb0e7eb305529e0d1b238753763d26e 100644 (file)
@@ -16,13 +16,13 @@ __weak void bootcount_store(ulong a)
        uintptr_t flush_end;
 
 #if defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD)
-       raw_bootcount_store(reg, (BOOTCOUNT_MAGIC & 0xffff0000) | a);
+       raw_bootcount_store(reg, (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000) | a);
 
        flush_end = roundup(CONFIG_SYS_BOOTCOUNT_ADDR + 4,
                            CONFIG_SYS_CACHELINE_SIZE);
 #else
        raw_bootcount_store(reg, a);
-       raw_bootcount_store(reg + 4, BOOTCOUNT_MAGIC);
+       raw_bootcount_store(reg + 4, CONFIG_SYS_BOOTCOUNT_MAGIC);
 
        flush_end = roundup(CONFIG_SYS_BOOTCOUNT_ADDR + 8,
                            CONFIG_SYS_CACHELINE_SIZE);
@@ -37,12 +37,12 @@ __weak ulong bootcount_load(void)
 #if defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD)
        u32 tmp = raw_bootcount_load(reg);
 
-       if ((tmp & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000))
+       if ((tmp & 0xffff0000) != (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000))
                return 0;
        else
                return (tmp & 0x0000ffff);
 #else
-       if (raw_bootcount_load(reg + 4) != BOOTCOUNT_MAGIC)
+       if (raw_bootcount_load(reg + 4) != CONFIG_SYS_BOOTCOUNT_MAGIC)
                return 0;
        else
                return raw_bootcount_load(reg);
index 3092ba56c04f2a69280217a1843d88ef74028e7a..c4ab5ceafabdf03828ecd53310a13cfd7a5376a7 100644 (file)
@@ -6,15 +6,16 @@
 #include <asm/arch/at91_gpbr.h>
 
 /*
- * We combine the BOOTCOUNT_MAGIC and bootcount in one 32-bit register.
- * This is done so we need to use only one of the four GPBR registers.
+ * We combine the CONFIG_SYS_BOOTCOUNT_MAGIC and bootcount in one 32-bit
+ * register. This is done so we need to use only one of the four GPBR
+ * registers.
  */
 void bootcount_store(ulong a)
 {
        at91_gpbr_t *gpbr = (at91_gpbr_t *) ATMEL_BASE_GPBR;
 
-       writel((BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff),
-               &gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT]);
+       writel((CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff),
+              &gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT]);
 }
 
 ulong bootcount_load(void)
@@ -22,7 +23,7 @@ ulong bootcount_load(void)
        at91_gpbr_t *gpbr = (at91_gpbr_t *) ATMEL_BASE_GPBR;
 
        ulong val = readl(&gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT]);
-       if ((val & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000))
+       if ((val & 0xffff0000) != (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000))
                return 0;
        else
                return val & 0x0000ffff;
index 7101ad9413ecf60bc08958214a1790738afdef30..6326957d7b044f8eff93ef69b834d7ee8880fda1 100644 (file)
@@ -24,7 +24,7 @@ void bootcount_store(ulong a)
        writel(RTC_KICK0R_WE, &reg->kick0r);
        writel(RTC_KICK1R_WE, &reg->kick1r);
        raw_bootcount_store(&reg->scratch2,
-                           (BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff));
+               (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff));
 }
 
 ulong bootcount_load(void)
@@ -34,7 +34,7 @@ ulong bootcount_load(void)
                (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR;
 
        val = raw_bootcount_load(&reg->scratch2);
-       if ((val & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000))
+       if ((val & 0xffff0000) != (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000))
                return 0;
        else
                return val & 0x0000ffff;
index e514a57286b94c6abd04777bb800024872ca807c..edef36724b0587f4de9efbf7fa56ad22e9d8f6e3 100644 (file)
@@ -28,7 +28,7 @@ void bootcount_store(ulong a)
                size += gd->bd->bi_dram[i].size;
        save_addr = (ulong *)(size - BOOTCOUNT_ADDR);
        writel(a, save_addr);
-       writel(BOOTCOUNT_MAGIC, &save_addr[1]);
+       writel(CONFIG_SYS_BOOTCOUNT_MAGIC, &save_addr[1]);
 
        for (i = 0; i < REPEAT_PATTERN; i++)
                writel(patterns[i % NBR_OF_PATTERNS],
index 83b3bdc58dfa8c826d7e50993a93b11d4bbb3856..8b9f859c07f8bc4bc5ffde2b07e54c0a321742e8 100644 (file)
@@ -385,7 +385,6 @@ uint        dpram_alloc(uint size);
 uint   dpram_alloc_align(uint size,uint align);
 void   bootcount_store (ulong);
 ulong  bootcount_load (void);
-#define BOOTCOUNT_MAGIC                0xB001C041
 
 /* $(CPU)/.../<eth> */
 void mii_init (void);