diff options
author | Marek Vasut <marex@denx.de> | 2018-10-11 00:13:54 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-10-19 14:16:43 -0400 |
commit | 758694ff076255115b6cd936b13108db3773ee57 (patch) | |
tree | 1971435494cc09e1c1e1f481d41872c569d76343 /drivers/bootcount | |
parent | 0533fb8b3f81051a5d18c6438b3f8fbb4bc6c84d (diff) | |
download | u-boot-758694ff076255115b6cd936b13108db3773ee57.tar.gz |
bootcount: Make bootcount magic configurable
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>
Diffstat (limited to 'drivers/bootcount')
-rw-r--r-- | drivers/bootcount/Kconfig | 6 | ||||
-rw-r--r-- | drivers/bootcount/bootcount.c | 8 | ||||
-rw-r--r-- | drivers/bootcount/bootcount_at91.c | 11 | ||||
-rw-r--r-- | drivers/bootcount/bootcount_davinci.c | 4 | ||||
-rw-r--r-- | drivers/bootcount/bootcount_ram.c | 2 |
5 files changed, 19 insertions, 12 deletions
diff --git a/drivers/bootcount/Kconfig b/drivers/bootcount/Kconfig index 9a0bd516d9..67033637c0 100644 --- a/drivers/bootcount/Kconfig +++ b/drivers/bootcount/Kconfig @@ -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 diff --git a/drivers/bootcount/bootcount.c b/drivers/bootcount/bootcount.c index 646c563f8a..66c1284c5b 100644 --- a/drivers/bootcount/bootcount.c +++ b/drivers/bootcount/bootcount.c @@ -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); diff --git a/drivers/bootcount/bootcount_at91.c b/drivers/bootcount/bootcount_at91.c index 3092ba56c0..c4ab5ceafa 100644 --- a/drivers/bootcount/bootcount_at91.c +++ b/drivers/bootcount/bootcount_at91.c @@ -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; diff --git a/drivers/bootcount/bootcount_davinci.c b/drivers/bootcount/bootcount_davinci.c index 7101ad9413..6326957d7b 100644 --- a/drivers/bootcount/bootcount_davinci.c +++ b/drivers/bootcount/bootcount_davinci.c @@ -24,7 +24,7 @@ void bootcount_store(ulong a) writel(RTC_KICK0R_WE, ®->kick0r); writel(RTC_KICK1R_WE, ®->kick1r); raw_bootcount_store(®->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(®->scratch2); - if ((val & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000)) + if ((val & 0xffff0000) != (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000)) return 0; else return val & 0x0000ffff; diff --git a/drivers/bootcount/bootcount_ram.c b/drivers/bootcount/bootcount_ram.c index e514a57286..edef36724b 100644 --- a/drivers/bootcount/bootcount_ram.c +++ b/drivers/bootcount/bootcount_ram.c @@ -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], |