1 /* 2 * (C) Copyright 2011 3 * Heiko Schocher, DENX Software Engineering, hs@denx.de. 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8 #include <bootcount.h> 9 #include <asm/davinci_rtc.h> 10 11 void bootcount_store(ulong a) 12 { 13 struct davinci_rtc *reg = 14 (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR; 15 16 /* 17 * write RTC kick register to enable write 18 * for RTC Scratch registers. Scratch0 and 1 are 19 * used for bootcount values. 20 */ 21 writel(RTC_KICK0R_WE, ®->kick0r); 22 writel(RTC_KICK1R_WE, ®->kick1r); 23 raw_bootcount_store(®->scratch0, a); 24 raw_bootcount_store(®->scratch1, BOOTCOUNT_MAGIC); 25 } 26 27 ulong bootcount_load(void) 28 { 29 struct davinci_rtc *reg = 30 (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR; 31 32 if (raw_bootcount_load(®->scratch1) != BOOTCOUNT_MAGIC) 33 return 0; 34 else 35 return raw_bootcount_load(®->scratch0); 36 } 37