[U-Boot] cmd_date.c error or itention?

Reinhard Meyer reinhard.meyer at emk-elektronik.de
Mon Jul 5 16:33:15 CEST 2010


Wolfgang Denk schrieb:
> Dear "Reinhard Meyer (-VC)",
> 
> In message <4C31C596.5020905 at emk-elektronik.de> you wrote:
>> cmd_data.c codes the following:
> ...
>> 			rcode = rtc_get (&tm);
>>
>> 			if(!rcode) {
>> 				/* insert new date & time */
>> 				if (mk_date (argv[1], &tm) != 0) {
>> 					puts ("## Bad date format\n");
>> 					break;
>> 				}
>> 				/* and write to RTC */
>> 				rcode = rtc_set (&tm);
>> 				if(rcode)
>> 					puts("## Set date failed\n");
>> 			} else {
>> 				puts("## Get date failed\n");
>> 			}
> ...
>> Now I have implemented rtc_get() such that it returns an error code
>> when the time is corrupt/has never been set.
> 
> It is considered kind of "normal" that a RTC may return "corrupt"
> data. This is not an error, as it will be fixed when setting the date.
> An error condition is something that really makes the RTC unusable,
> like non-functioning communication on the I2C bus (if your RTC is
> connected to that), or reading a Low Voltage error status from the RTC
> status register, etc.
> 
>> However the "if(!rcode)" then prevents the time to be set!
> 
> Well, if you cannot eliably communicate with the RTC when reading,
> there is little sense trying to write to it - on contrary, this might
> even be dangerous.
> 
>> Is that intentional and rtc_get() should never return an error ??
>> Or is it an oversight, and a patch would be welcome ?
> 
> The behaviour is intentional, but rtc_get() can of course return
> error codes - only your expectation when this is the case is
> different from mine.
>
Dear Wolfgang,

of course that depends on what is considered an error.

As well as there is a difference between read error and file not found,
there well might be a difference in clock nonfunctional and time invalid...

But alas, I will make rtc_get not return an error and zero out the tm
structure instead when the driver KNOWS the date is not correct.

And btw. a low voltage status error from the clock does not necessaryly
mean the clock cannot be set again, that status (and thats exactly what
I intended to return) just could mean that the backup voltage was too low
during a system unpowered time to guarantee a proper date but since
(in our case) the backup power comes from a GoldCap a new set of the
clock would heal that status.

And if the clock really would be defective
 				/* and write to RTC */
 				rcode = rtc_set (&tm);
 				if(rcode)
 					puts("## Set date failed\n");
would still give a proper error message!

Reinhard
-------------- next part --------------
A non-text attachment was scrubbed...
Name: reinhard_meyer.vcf
Type: text/x-vcard
Size: 370 bytes
Desc: not available
Url : http://lists.denx.de/pipermail/u-boot/attachments/20100705/fc2c372e/attachment.vcf 


More information about the U-Boot mailing list