]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/bootcount/bootcount_davinci.c
Merge branch 'serial' of git://git.denx.de/u-boot-microblaze
[karo-tx-uboot.git] / drivers / bootcount / bootcount_davinci.c
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, &reg->kick0r);
22         writel(RTC_KICK1R_WE, &reg->kick1r);
23         raw_bootcount_store(&reg->scratch2,
24                             (BOOTCOUNT_MAGIC & 0xffff0000) | (a & 0x0000ffff));
25 }
26
27 ulong bootcount_load(void)
28 {
29         unsigned long val;
30         struct davinci_rtc *reg =
31                 (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR;
32
33         val = raw_bootcount_load(&reg->scratch2);
34         if ((val & 0xffff0000) != (BOOTCOUNT_MAGIC & 0xffff0000))
35                 return 0;
36         else
37                 return val & 0x0000ffff;
38 }