Merge branch 'network_master' of https://source.denx.de/u-boot/custodians/u-boot...
[platform/kernel/u-boot.git] / board / ge / common / ge_rtc.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright 2017 General Electric Company
4  */
5
6 #include <common.h>
7 #include <env.h>
8 #include <dm/uclass.h>
9 #include <rtc.h>
10
11 void check_time(void)
12 {
13         struct udevice *dev;
14         int ret, i;
15         struct rtc_time tm;
16         u8 retry = 3;
17
18         ret = uclass_get_device(UCLASS_RTC, 0, &dev);
19         if (ret) {
20                 env_set("rtc_status", "FAIL");
21                 return;
22         }
23
24         for (i = 0; i < retry; i++) {
25                 ret = dm_rtc_get(dev, &tm);
26                 if (!ret || ret == -EINVAL)
27                         break;
28         }
29
30         if (!ret && tm.tm_year > 2037) {
31                 tm.tm_sec  = 0;
32                 tm.tm_min  = 0;
33                 tm.tm_hour = 0;
34                 tm.tm_mday = 1;
35                 tm.tm_wday = 2;
36                 tm.tm_mon  = 1;
37                 tm.tm_year = 2036;
38
39                 for (i = 0; i < retry; i++) {
40                         ret = dm_rtc_set(dev, &tm);
41                         if (!ret)
42                                 break;
43                 }
44
45                 if (ret >= 0)
46                         ret = 2038;
47         }
48
49         if (ret < 0)
50                 env_set("rtc_status", "FAIL");
51         else if (ret == 2038)
52                 env_set("rtc_status", "2038");
53         else
54                 env_set("rtc_status", "OK");
55 }
56