[U-Boot] [PATCH] MX35: Added bootcounter to mx35
Stefano Babic
sbabic at denx.de
Sun Apr 3 12:22:50 CEST 2011
Added bootcount_load() and bootcount_store(). The
bootcounter is stored in the internal RAM at the address
defined in the configuration file (CONFIG_BOOTCOUNT_ADDRESS).
Signed-off-by: Stefano Babic <sbabic at denx.de>
---
arch/arm/cpu/arm1136/mx35/generic.c | 33 +++++++++++++++++++++++++++++
arch/arm/include/asm/arch-mx35/imx-regs.h | 8 +++++++
include/configs/mx35pdk.h | 11 ++++++++-
3 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/arm1136/mx35/generic.c b/arch/arm/cpu/arm1136/mx35/generic.c
index 1b4ab75..bb47328 100644
--- a/arch/arm/cpu/arm1136/mx35/generic.c
+++ b/arch/arm/cpu/arm1136/mx35/generic.c
@@ -461,3 +461,36 @@ void reset_cpu(ulong addr)
struct wdog_regs *wdog = (struct wdog_regs *)WDOG_BASE_ADDR;
writew(4, &wdog->wcr);
}
+
+#ifdef CONFIG_BOOTCOUNT_LIMIT
+/*
+ * We write the bootcounter as single 32bit
+ * in the IRAM at the address set in configuration
+ * file
+ */
+void bootcount_store(ulong a)
+{
+ int i;
+ u32 *bootcnt = (u32 *) CONFIG_BOOTCOUNT_ADDRESS;
+
+ /*
+ * Experience shows that the bootcounter
+ * must be written at least twice
+ */
+ for (i = 0; i < 3; i++)
+ writel((BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff),
+ bootcnt);
+}
+
+ulong bootcount_load(void)
+{
+ u32 *bootcnt = (u32 *) CONFIG_BOOTCOUNT_ADDRESS;
+
+ ulong val = readl(bootcnt);
+ if ((val & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000))
+ return 0;
+ else
+ return val & 0x0000ffff;
+}
+
+#endif /* CONFIG_BOOTCOUNT_LIMIT */
diff --git a/arch/arm/include/asm/arch-mx35/imx-regs.h b/arch/arm/include/asm/arch-mx35/imx-regs.h
index e741fb0..8fd8888 100644
--- a/arch/arm/include/asm/arch-mx35/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx35/imx-regs.h
@@ -32,6 +32,14 @@
#define IRAM_SIZE 0x00020000 /* 128 KB */
/*
+ * Part of IRAM is used by ROM Bootloader
+ * define IRAM not changed by RBL
+ * (ofssets 0x01B00 : 0x1E000)
+ */
+#define IRAM_USER_BASE_ADDR (IRAM_BASE_ADDR + 0x1B00)
+#define IRAM_USER_SIZE 0x1C500
+
+/*
* AIPS 1
*/
#define AIPS1_BASE_ADDR 0x43F00000
diff --git a/include/configs/mx35pdk.h b/include/configs/mx35pdk.h
index 086355b..02601b3 100644
--- a/include/configs/mx35pdk.h
+++ b/include/configs/mx35pdk.h
@@ -178,10 +178,11 @@
#define PHYS_SDRAM_1_SIZE (128 * 1024 * 1024)
#define iomem_valid_addr(addr, size) \
(addr >= PHYS_SDRAM_1 && addr <= (PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE))
+#define IRAM_PERS_SIZE 256
#define CONFIG_SYS_SDRAM_BASE CSD0_BASE_ADDR
-#define CONFIG_SYS_INIT_RAM_ADDR (IRAM_BASE_ADDR + 0x10000)
-#define CONFIG_SYS_INIT_RAM_SIZE (IRAM_SIZE / 2)
+#define CONFIG_SYS_INIT_RAM_ADDR IRAM_USER_BASE_ADDR
+#define CONFIG_SYS_INIT_RAM_SIZE (IRAM_USER_SIZE - IRAM_PERS_SIZE)
#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_SIZE - \
GENERATED_GBL_DATA_SIZE)
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
@@ -249,6 +250,12 @@
#define CONFIG_SYS_NAND_LARGEPAGE
/*
+ * Bootcounter
+ */
+#define CONFIG_BOOTCOUNT_LIMIT
+#define CONFIG_BOOTCOUNT_ADDRESS (CONFIG_SYS_INIT_RAM_ADDR + \
+ CONFIG_SYS_INIT_RAM_SIZE)
+/*
* Default environment and default scripts
* to update uboot and load kernel
*/
--
1.7.1
More information about the U-Boot
mailing list