blob: 4c24d521e8c6c1c838a907829a9e59b3c85124f1 [file] [log] [blame]
#include <common.h>
#include "diag.h"
int rtc_test(void)
{
int hour1, minute1, second1;
int hour2, minute2, second2;
int ret_val = 0;
printf("\tRTC test ");
diag_get_rtc_time(&hour1, &minute1, &second1);
/* FIXME: Observation says RTC requires additional udelay(1) to
* read proper value
*/
udelay(1000000);
/* Set a time that changes all the digits after a second */
diag_set_rtc_time(9, 59, 59);
/* Wait for 1 second */
/* Observation says RTC takes additional one second when new time is set */
udelay(2000000);
diag_get_rtc_time(&hour2, &minute2, &second2);
if(hour2 != 10 ||
minute2 != 0 ||
second2 > 1)
{
/* Second should be 0 or max 1 (if error in udealy), not > 1 */
printf("FAILED\n");
printf("\t\tGot: hour %02d minute %02d second %02d\n", hour2, minute2, second2);
printf("\t\tExpected: hour 10 minute 00 second 00\n");
ret_val = 1;
}
else
{
printf("\t\t\t\t\t PASSED\n");
}
/* As incrementing a second here will require complex calculation,
* we will ignore that passed second */
diag_set_rtc_time(hour1, minute1, second1);
return ret_val;
}