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)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 57