/* * (C) Copyright 2011 * Heiko Schocher, DENX Software Engineering, hs@denx.de. * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include void bootcount_store(ulong a) { struct davinci_rtc *reg = (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR; /* * write RTC kick register to enable write * for RTC Scratch registers. Scratch0 and 1 are * used for bootcount values. */ writel(RTC_KICK0R_WE, ®->kick0r); writel(RTC_KICK1R_WE, ®->kick1r); raw_bootcount_store(®->scratch0, a); raw_bootcount_store(®->scratch1, BOOTCOUNT_MAGIC); } ulong bootcount_load(void) { struct davinci_rtc *reg = (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR; if (raw_bootcount_load(®->scratch1) != BOOTCOUNT_MAGIC) return 0; else return raw_bootcount_load(®->scratch0); }