xref: /openbmc/u-boot/board/ge/common/ge_common.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2647155bcSMartyn Welch /*
3647155bcSMartyn Welch  * Copyright 2017 General Electric Company
4647155bcSMartyn Welch  */
5647155bcSMartyn Welch 
6647155bcSMartyn Welch #include <common.h>
7647155bcSMartyn Welch #include <i2c.h>
8647155bcSMartyn Welch #include <rtc.h>
9647155bcSMartyn Welch 
check_time(void)10647155bcSMartyn Welch void check_time(void)
11647155bcSMartyn Welch {
12647155bcSMartyn Welch 	int ret, i;
13647155bcSMartyn Welch 	struct rtc_time tm;
14647155bcSMartyn Welch 	u8 retry = 3;
15647155bcSMartyn Welch 
16647155bcSMartyn Welch 	unsigned int current_i2c_bus = i2c_get_bus_num();
17647155bcSMartyn Welch 
18647155bcSMartyn Welch 	ret = i2c_set_bus_num(CONFIG_SYS_RTC_BUS_NUM);
19647155bcSMartyn Welch 	if (ret < 0)
20647155bcSMartyn Welch 		return;
21647155bcSMartyn Welch 
22647155bcSMartyn Welch 	rtc_init();
23647155bcSMartyn Welch 
24647155bcSMartyn Welch 	for (i = 0; i < retry; i++) {
25647155bcSMartyn Welch 		ret = rtc_get(&tm);
26647155bcSMartyn Welch 		if (!ret || ret == -EINVAL)
27647155bcSMartyn Welch 			break;
28647155bcSMartyn Welch 	}
29647155bcSMartyn Welch 
30647155bcSMartyn Welch 	if (ret < 0)
31647155bcSMartyn Welch 		env_set("rtc_status", "RTC_ERROR");
32647155bcSMartyn Welch 
33647155bcSMartyn Welch 	if (tm.tm_year > 2037) {
34647155bcSMartyn Welch 		tm.tm_sec  = 0;
35647155bcSMartyn Welch 		tm.tm_min  = 0;
36647155bcSMartyn Welch 		tm.tm_hour = 0;
37647155bcSMartyn Welch 		tm.tm_mday = 1;
38647155bcSMartyn Welch 		tm.tm_wday = 2;
39647155bcSMartyn Welch 		tm.tm_mon  = 1;
40647155bcSMartyn Welch 		tm.tm_year = 2036;
41647155bcSMartyn Welch 
42647155bcSMartyn Welch 		for (i = 0; i < retry; i++) {
43647155bcSMartyn Welch 			ret = rtc_set(&tm);
44647155bcSMartyn Welch 			if (!ret)
45647155bcSMartyn Welch 				break;
46647155bcSMartyn Welch 		}
47647155bcSMartyn Welch 
48647155bcSMartyn Welch 		if (ret < 0)
49647155bcSMartyn Welch 			env_set("rtc_status", "RTC_ERROR");
50647155bcSMartyn Welch 	}
51647155bcSMartyn Welch 
52647155bcSMartyn Welch 	i2c_set_bus_num(current_i2c_bus);
53647155bcSMartyn Welch }
54647155bcSMartyn Welch 
55