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