52 lines
1.2 KiB
C
52 lines
1.2 KiB
C
|
|
#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;
|
|
}
|