[U-Boot] [PATCH] rtc: imxdi: Initial support

Benoît Thébaudeau benoit.thebaudeau at advansee.com
Sun Aug 5 16:14:17 CEST 2012


On Sun, Aug 5, 2012 at 09:13:29 AM, Stefano Babic wrote:
> On 20/07/2012 16:24, Benoît Thébaudeau wrote:
> > Add support for Freescale's i.MX DryIce RTC, present on i.MX25.
> > 
> > Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau at advansee.com>
> > Cc: Wolfgang Denk <wd at denx.de>
> > Cc: Stefano Babic <sbabic at denx.de>
> > ---
> 
> Hi Benoit,
> 
> 
> just a few comments.
> 
> > +
> > +/*
> > + * Date & Time support for Freescale i.MX DryIce RTC
> > + */
> > +
> > +#include <common.h>
> > +#include <command.h>
> > +#include <rtc.h>
> > +
> > +#if defined(CONFIG_CMD_DATE)
> > +
> > +#include <asm/io.h>
> > +#include <asm/arch/imx-regs.h>
> > +
> > +/* DryIce Register Definitions */
> > +
> > +#define DTCMR     0x00           /* Time Counter MSB Reg */
> > +#define DTCLR     0x04           /* Time Counter LSB Reg */
> > +
> > +#define DCAMR     0x08           /* Clock Alarm MSB Reg */
> > +#define DCALR     0x0c           /* Clock Alarm LSB Reg */
> 
> U-Boot as rule does not allow usage of start address + offset to
> access
> internal registers. Instead of that, please define a proper C
> structure
> with the register's layout. This should be fixed globally for all
> read /
> write accesses.

OK, I'll do that.

> > +/*
> > + * This function attempts to clear the dryice write-error flag.
> > + *
> > + * A dryice write error is similar to a bus fault and should not
> > occur in
> > + * normal operation.  Clearing the flag requires another write, so
> > the root
> > + * cause of the problem may need to be fixed before the flag can
> > be cleared.
> > + */
> > +static void clear_write_error(void)
> > +{
> > +	int cnt;
> > +
> > +	puts("### Warning: RTC - Register write error!\n");
> > +
> > +	/* clear the write error flag */
> > +	__raw_writel(DSR_WEF, IMX_DRYICE_BASE + DSR);
> 
> Ditto
> 
> > +int rtc_get(struct rtc_time *tmp)
> > +{
> > +	unsigned long now;
> > +	int rc;
> > +
> > +	rc = di_init();
> 
> Why is di_init always called ? Should be not checked if it is was
> already initialized and the function should be called only once ?

I think this can be done. I'll check that this does not cause any regression.
I think only the reset function should have to call di_init unconditionally.

Best regards,
Benoît


More information about the U-Boot mailing list