diff options
Diffstat (limited to 'roms/u-boot/board/ge/common/ge_rtc.c')
-rw-r--r-- | roms/u-boot/board/ge/common/ge_rtc.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/roms/u-boot/board/ge/common/ge_rtc.c b/roms/u-boot/board/ge/common/ge_rtc.c new file mode 100644 index 000000000..48c377804 --- /dev/null +++ b/roms/u-boot/board/ge/common/ge_rtc.c @@ -0,0 +1,56 @@ +// 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"); +} + |