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
11void 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