sam460ex, rtc-m41t80 incorrect behaviour with kernel >=linux-2.6.38

acrux acrux_it at libero.it
Wed Dec 14 07:13:44 EST 2011


On Mon, 12 Dec 2011 14:47:53 -0800
John Stultz <john.stultz at linaro.org> wrote:

> On Sun, 2011-12-04 at 03:29 +0100, acrux_it at libero.it wrote:
> > Acube Sam460ex is a 460ex SoC (PowerPC) based board with m41t81
> > like RTC. The wrong beahviour it seems to be caused this commit:
> > 
> > Thu, 3 Feb 2011 21:02:35 +0000 (13:02 -0800)
> > commit	16380c153a69c3784d2afaddfe0a22f353046cf6
> > RTC: Convert rtc drivers to use the alarm_irq_enable method
> > http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=commit;
> > h=16380c153a69c3784d2afaddfe0a22f353046cf6
> 
> Yea. This was reported earlier, but it seems none of the proposed
> solutions have been implemented.
> 
> The cause is that the m41t80 driver's alarm functionality is somehow
> broken. The alarm mode is actually now used for UIE, so where before
> 2.6.38, UIE mode returned -EINVAL, it will now succeed, setting the
> alarm to fire a second away.
> 
> However, since the alarm code is broken, no alarm arrives and you get
> the timeout you see.
> 
> Could you test the following patch to see if it resolves the issue for
> you? If it does, I'll queue it for inclusion.
> 
> thanks
> -john
> 


hallo John,
CC to linuxppc-dev at lists.ozlabs.org


thanks for your time, this escamotage works fine.
I tested your patch against linux-2.6.38.8 and linux-3.1.5.

Tested-by: Nico Macrionitis <acrux at cruxppc.org>


cheers,
Nico



> 
> [PATCH] rtc: m41t80: Workaround broken alarm functionality
> 
> The m41t80 driver doesn't seem to have a functional alarm.
> 
> This causes failures when the generic core sees alarm functions,
> but then cannot use them properly for things like UIE mode.
> 
> Disabling the alarm functions allows proper error reporting,
> and possible fallback to emulated modes. Once someone fixes
> the alarm functions, this can be restored.
> 
> Signed-off-by: John Stultz <john.stultz at linaro.org>
> ---
>  drivers/rtc/rtc-m41t80.c |    9 +++++++++
>  1 files changed, 9 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c
> index eda128f..64aedd8 100644
> --- a/drivers/rtc/rtc-m41t80.c
> +++ b/drivers/rtc/rtc-m41t80.c
> @@ -357,10 +357,19 @@ static int m41t80_rtc_read_alarm(struct device
> *dev, struct rtc_wkalrm *t) static struct rtc_class_ops
> m41t80_rtc_ops = { .read_time = m41t80_rtc_read_time,
>  	.set_time = m41t80_rtc_set_time,
> +	/*
> +	 * XXX - m41t80 alarm functionality is reported broken.
> +	 * until it is fixed, don't register alarm functions.
> +	 *
>  	.read_alarm = m41t80_rtc_read_alarm,
>  	.set_alarm = m41t80_rtc_set_alarm,
> +	*/
>  	.proc = m41t80_rtc_proc,
> +	/*
> +	 * See above comment on broken alarm
> +	 *
>  	.alarm_irq_enable = m41t80_rtc_alarm_irq_enable,
> +	*/
>  };
>  
>  #if defined(CONFIG_RTC_INTF_SYSFS) || defined
>  #(CONFIG_RTC_INTF_SYSFS_MODULE)
> -- 
> 1.7.3.2.146.gca209
> 
> 
> 


-- 
GNU/Linux on Power Architecture
CRUX PPC - http://cruxppc.org/



More information about the Linuxppc-dev mailing list