i2c, bootcount: add support for bootcounter on i2c devices
add support for bootcounter on an i2c device. And add a README for all bootcounter options. Signed-off-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
16c550274c
commit
9e50c406c8
20
README
20
README
@ -2855,6 +2855,26 @@ CBFS (Coreboot Filesystem) support
|
||||
The signing part is build into mkimage regardless of this
|
||||
option.
|
||||
|
||||
- bootcount support:
|
||||
CONFIG_BOOTCOUNT_LIMIT
|
||||
|
||||
This enables the bootcounter support, see:
|
||||
http://www.denx.de/wiki/DULG/UBootBootCountLimit
|
||||
|
||||
CONFIG_AT91SAM9XE
|
||||
enable special bootcounter support on at91sam9xe based boards.
|
||||
CONFIG_BLACKFIN
|
||||
enable special bootcounter support on blackfin based boards.
|
||||
CONFIG_SOC_DA8XX
|
||||
enable special bootcounter support on da850 based boards.
|
||||
CONFIG_BOOTCOUNT_RAM
|
||||
enable support for the bootcounter in RAM
|
||||
CONFIG_BOOTCOUNT_I2C
|
||||
enable support for the bootcounter on an i2c (like RTC) device.
|
||||
CONFIG_SYS_I2C_RTC_ADDR = i2c chip address
|
||||
CONFIG_SYS_BOOTCOUNT_ADDR = i2c addr which is used for
|
||||
the bootcounter.
|
||||
CONFIG_BOOTCOUNT_ALEN = address len
|
||||
|
||||
- Show boot progress:
|
||||
CONFIG_SHOW_BOOT_PROGRESS
|
||||
|
@ -9,3 +9,4 @@ obj-$(CONFIG_SOC_DA8XX) += bootcount_davinci.o
|
||||
obj-$(CONFIG_BOOTCOUNT_AM33XX) += bootcount_davinci.o
|
||||
obj-$(CONFIG_BOOTCOUNT_RAM) += bootcount_ram.o
|
||||
obj-$(CONFIG_BOOTCOUNT_ENV) += bootcount_env.o
|
||||
obj-$(CONFIG_BOOTCOUNT_I2C) += bootcount_i2c.o
|
||||
|
44
drivers/bootcount/bootcount_i2c.c
Normal file
44
drivers/bootcount/bootcount_i2c.c
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* (C) Copyright 2013
|
||||
* Heiko Schocher, DENX Software Engineering, hs@denx.de.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <bootcount.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <i2c.h>
|
||||
|
||||
#define BC_MAGIC 0xbc
|
||||
|
||||
void bootcount_store(ulong a)
|
||||
{
|
||||
unsigned char buf[3];
|
||||
int ret;
|
||||
|
||||
buf[0] = BC_MAGIC;
|
||||
buf[1] = (a & 0xff);
|
||||
ret = i2c_write(CONFIG_SYS_I2C_RTC_ADDR, CONFIG_SYS_BOOTCOUNT_ADDR,
|
||||
CONFIG_BOOTCOUNT_ALEN, buf, 2);
|
||||
if (ret != 0)
|
||||
puts("Error writing bootcount\n");
|
||||
}
|
||||
|
||||
ulong bootcount_load(void)
|
||||
{
|
||||
unsigned char buf[3];
|
||||
int ret;
|
||||
|
||||
ret = i2c_read(CONFIG_SYS_I2C_RTC_ADDR, CONFIG_SYS_BOOTCOUNT_ADDR,
|
||||
CONFIG_BOOTCOUNT_ALEN, buf, 2);
|
||||
if (ret != 0) {
|
||||
puts("Error loading bootcount\n");
|
||||
return 0;
|
||||
}
|
||||
if (buf[0] == BC_MAGIC)
|
||||
return buf[1];
|
||||
|
||||
bootcount_store(0);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user