xref: /rk3399_rockchip-uboot/drivers/bootcount/bootcount_i2c.c (revision 1ad6364eeb4f578e423081d1748e8a3fdf1ab01d)
1*9e50c406SHeiko Schocher /*
2*9e50c406SHeiko Schocher  * (C) Copyright 2013
3*9e50c406SHeiko Schocher  * Heiko Schocher, DENX Software Engineering, hs@denx.de.
4*9e50c406SHeiko Schocher  *
5*9e50c406SHeiko Schocher  * SPDX-License-Identifier:	GPL-2.0+
6*9e50c406SHeiko Schocher  */
7*9e50c406SHeiko Schocher 
8*9e50c406SHeiko Schocher #include <bootcount.h>
9*9e50c406SHeiko Schocher #include <linux/compiler.h>
10*9e50c406SHeiko Schocher #include <i2c.h>
11*9e50c406SHeiko Schocher 
12*9e50c406SHeiko Schocher #define BC_MAGIC	0xbc
13*9e50c406SHeiko Schocher 
bootcount_store(ulong a)14*9e50c406SHeiko Schocher void bootcount_store(ulong a)
15*9e50c406SHeiko Schocher {
16*9e50c406SHeiko Schocher 	unsigned char buf[3];
17*9e50c406SHeiko Schocher 	int ret;
18*9e50c406SHeiko Schocher 
19*9e50c406SHeiko Schocher 	buf[0] = BC_MAGIC;
20*9e50c406SHeiko Schocher 	buf[1] = (a & 0xff);
21*9e50c406SHeiko Schocher 	ret = i2c_write(CONFIG_SYS_I2C_RTC_ADDR, CONFIG_SYS_BOOTCOUNT_ADDR,
22*9e50c406SHeiko Schocher 		  CONFIG_BOOTCOUNT_ALEN, buf, 2);
23*9e50c406SHeiko Schocher 	if (ret != 0)
24*9e50c406SHeiko Schocher 		puts("Error writing bootcount\n");
25*9e50c406SHeiko Schocher }
26*9e50c406SHeiko Schocher 
bootcount_load(void)27*9e50c406SHeiko Schocher ulong bootcount_load(void)
28*9e50c406SHeiko Schocher {
29*9e50c406SHeiko Schocher 	unsigned char buf[3];
30*9e50c406SHeiko Schocher 	int ret;
31*9e50c406SHeiko Schocher 
32*9e50c406SHeiko Schocher 	ret = i2c_read(CONFIG_SYS_I2C_RTC_ADDR, CONFIG_SYS_BOOTCOUNT_ADDR,
33*9e50c406SHeiko Schocher 		       CONFIG_BOOTCOUNT_ALEN, buf, 2);
34*9e50c406SHeiko Schocher 	if (ret != 0) {
35*9e50c406SHeiko Schocher 		puts("Error loading bootcount\n");
36*9e50c406SHeiko Schocher 		return 0;
37*9e50c406SHeiko Schocher 	}
38*9e50c406SHeiko Schocher 	if (buf[0] == BC_MAGIC)
39*9e50c406SHeiko Schocher 		return buf[1];
40*9e50c406SHeiko Schocher 
41*9e50c406SHeiko Schocher 	bootcount_store(0);
42*9e50c406SHeiko Schocher 
43*9e50c406SHeiko Schocher 	return 0;
44*9e50c406SHeiko Schocher }
45