// SPDX-License-Identifier: GPL-2.0+ | |
/* | |
* Copyright 2017 General Electric Company | |
*/ | |
#include <common.h> | |
#include <env.h> | |
#include <dm/uclass.h> | |
#include <rtc.h> | |
void check_time(void) | |
{ | |
struct udevice *dev; | |
int ret, i; | |
struct rtc_time tm; | |
u8 retry = 3; | |
ret = uclass_get_device(UCLASS_RTC, 0, &dev); | |
if (ret) { | |
env_set("rtc_status", "FAIL"); | |
return; | |
} | |
for (i = 0; i < retry; i++) { | |
ret = dm_rtc_get(dev, &tm); | |
if (!ret || ret == -EINVAL) | |
break; | |
} | |
if (!ret && tm.tm_year > 2037) { | |
tm.tm_sec = 0; | |
tm.tm_min = 0; | |
tm.tm_hour = 0; | |
tm.tm_mday = 1; | |
tm.tm_wday = 2; | |
tm.tm_mon = 1; | |
tm.tm_year = 2036; | |
for (i = 0; i < retry; i++) { | |
ret = dm_rtc_set(dev, &tm); | |
if (!ret) | |
break; | |
} | |
if (ret >= 0) | |
ret = 2038; | |
} | |
if (ret < 0) | |
env_set("rtc_status", "FAIL"); | |
else if (ret == 2038) | |
env_set("rtc_status", "2038"); | |
else | |
env_set("rtc_status", "OK"); | |
} |