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 
check_time(void)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