mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
bootcount: Use predefined count/magic bit masks
Use predefined bit masks in operations where only the magic half or only the count half of the 32-bit value are processed. Signed-off-by: Niko Mauno <niko.mauno@vaisala.com> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
@@ -19,7 +19,7 @@ __weak void bootcount_store(ulong a)
|
||||
uintptr_t flush_end;
|
||||
|
||||
#if defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD)
|
||||
raw_bootcount_store(reg, (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000) | a);
|
||||
raw_bootcount_store(reg, (CONFIG_SYS_BOOTCOUNT_MAGIC & BOOTCOUNT_MAGIC_MASK) | a);
|
||||
|
||||
flush_end = roundup(CONFIG_SYS_BOOTCOUNT_ADDR + 4,
|
||||
CONFIG_SYS_CACHELINE_SIZE);
|
||||
@@ -40,10 +40,10 @@ __weak ulong bootcount_load(void)
|
||||
#if defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD)
|
||||
u32 tmp = raw_bootcount_load(reg);
|
||||
|
||||
if ((tmp & 0xffff0000) != (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000))
|
||||
if ((tmp & BOOTCOUNT_MAGIC_MASK) != (CONFIG_SYS_BOOTCOUNT_MAGIC & BOOTCOUNT_MAGIC_MASK))
|
||||
return 0;
|
||||
else
|
||||
return (tmp & 0x0000ffff);
|
||||
return (tmp & BOOTCOUNT_COUNT_MASK);
|
||||
#else
|
||||
if (raw_bootcount_load(reg + 4) != CONFIG_SYS_BOOTCOUNT_MAGIC)
|
||||
return 0;
|
||||
@@ -74,10 +74,10 @@ static int bootcount_mem_get(struct udevice *dev, u32 *a)
|
||||
if (priv->singleword) {
|
||||
u32 tmp = raw_bootcount_load(reg);
|
||||
|
||||
if ((tmp & 0xffff0000) != (magic & 0xffff0000))
|
||||
if ((tmp & BOOTCOUNT_MAGIC_MASK) != (magic & BOOTCOUNT_MAGIC_MASK))
|
||||
return -ENODEV;
|
||||
|
||||
*a = (tmp & 0x0000ffff);
|
||||
*a = (tmp & BOOTCOUNT_COUNT_MASK);
|
||||
} else {
|
||||
if (raw_bootcount_load(reg + 4) != magic)
|
||||
return -ENODEV;
|
||||
@@ -98,7 +98,7 @@ static int bootcount_mem_set(struct udevice *dev, const u32 a)
|
||||
uintptr_t flush_end;
|
||||
|
||||
if (priv->singleword) {
|
||||
raw_bootcount_store(reg, (magic & 0xffff0000) | a);
|
||||
raw_bootcount_store(reg, (magic & BOOTCOUNT_MAGIC_MASK) | a);
|
||||
flush_end = roundup(priv->base + 4,
|
||||
CONFIG_SYS_CACHELINE_SIZE);
|
||||
} else {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/at91_gpbr.h>
|
||||
#include <bootcount.h>
|
||||
|
||||
/*
|
||||
* We combine the CONFIG_SYS_BOOTCOUNT_MAGIC and bootcount in one 32-bit
|
||||
@@ -13,7 +14,7 @@ void bootcount_store(ulong a)
|
||||
{
|
||||
at91_gpbr_t *gpbr = (at91_gpbr_t *) ATMEL_BASE_GPBR;
|
||||
|
||||
writel((CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff),
|
||||
writel((CONFIG_SYS_BOOTCOUNT_MAGIC & BOOTCOUNT_MAGIC_MASK) | (a & BOOTCOUNT_COUNT_MASK),
|
||||
&gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT]);
|
||||
}
|
||||
|
||||
@@ -22,8 +23,8 @@ 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) != (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000))
|
||||
if ((val & BOOTCOUNT_MAGIC_MASK) != (CONFIG_SYS_BOOTCOUNT_MAGIC & BOOTCOUNT_MAGIC_MASK))
|
||||
return 0;
|
||||
else
|
||||
return val & 0x0000ffff;
|
||||
return val & BOOTCOUNT_COUNT_MASK;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ void bootcount_store(ulong a)
|
||||
writel(RTC_KICK0R_WE, ®->kick0r);
|
||||
writel(RTC_KICK1R_WE, ®->kick1r);
|
||||
raw_bootcount_store(®->scratch2,
|
||||
(CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff));
|
||||
(CONFIG_SYS_BOOTCOUNT_MAGIC & BOOTCOUNT_MAGIC_MASK) | (a & BOOTCOUNT_COUNT_MASK));
|
||||
}
|
||||
|
||||
ulong bootcount_load(void)
|
||||
@@ -34,8 +34,8 @@ ulong bootcount_load(void)
|
||||
(struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR;
|
||||
|
||||
val = raw_bootcount_load(®->scratch2);
|
||||
if ((val & 0xffff0000) != (CONFIG_SYS_BOOTCOUNT_MAGIC & 0xffff0000))
|
||||
if ((val & BOOTCOUNT_MAGIC_MASK) != (CONFIG_SYS_BOOTCOUNT_MAGIC & BOOTCOUNT_MAGIC_MASK))
|
||||
return 0;
|
||||
else
|
||||
return val & 0x0000ffff;
|
||||
return val & BOOTCOUNT_COUNT_MASK;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <asm/io.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <env.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#ifdef CONFIG_DM_BOOTCOUNT
|
||||
|
||||
@@ -59,6 +60,10 @@ int dm_bootcount_set(struct udevice *dev, u32 bootcount);
|
||||
|
||||
#endif
|
||||
|
||||
/* Bit masks for magic and count parts in single word scheme */
|
||||
#define BOOTCOUNT_MAGIC_MASK GENMASK(31, 16)
|
||||
#define BOOTCOUNT_COUNT_MASK GENMASK(15, 0)
|
||||
|
||||
/** bootcount_store() - store the current bootcount */
|
||||
void bootcount_store(ulong);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user