Hi, all!
HW:860T custom board
SW:devel kernel 2.4.20-pre7 nfs mount on eldk
Problem:Can not adjust time in linux shell(with 'date -s' command)
RTC really runs when I use 'date' it says sometime around 1970's
and it runs when power up.
With 'date -s' command it returned time had been changed.
However after a reset,the time go back to 1970's again :-(
I try with 'hwclock' and it says below:
bash-2.04# hwclock --debug
hwclock 2.4c/util-linux-2.11f
Using /dev/rtc interface to clock.
Last drift adjustment done at 0 seconds after 1969
Last calibration done at 0 seconds after 1969
Hardware clock is on unknown time
Assuming hardware clock is kept in local time.
Waiting for clock tick...
/dev/rtc does not have interrupt functions. Waiting in loop for time from
/dev/rtc to change
...got clock tick
Time read from Hardware Clock: 1970/01/09 21:28:28
Hw clock time : 1970/01/09 21:28:28 = 786508 seconds since 1969
Fri Jan 9 21:28:28 1970 -0.188839 seconds
I guess it never really write value to RTC reg!!!
Hope help!
ps:I open /dev/rtc option in the kernel.
Regards!
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
With 'date -s' command it returned time had been changed.
However after a reset,the time go back to 1970's again :-(
I try with 'hwclock' and it says below:
bash-2.04# hwclock --debug
hwclock 2.4c/util-linux-2.11f
Using /dev/rtc interface to clock.
Last drift adjustment done at 0 seconds after 1969
Last calibration done at 0 seconds after 1969
Hardware clock is on unknown time
Assuming hardware clock is kept in local time.
Waiting for clock tick...
/dev/rtc does not have interrupt functions. Waiting in loop for time from
/dev/rtc to change
...got clock tick
Time read from Hardware Clock: 1970/01/09 21:28:28
Hw clock time : 1970/01/09 21:28:28 = 786508 seconds since 1969
Fri Jan 9 21:28:28 1970 -0.188839 seconds
`hwclock` with no arguments seems to be the same as `hwclock --show`. I
would recommend `hwclock -w`.
-Hollis
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
From: Alex Zeffertt <hidden> Date: 2002-10-17 16:02:23
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
HOWTO USE
root@860# insmod rtc.o
root@860# mknod /dev/rtc c 10 135
root@860# rtc # (help text)
root@860# rtc r # (read RTC)
root@860# rtc w [opts] # (write to RTC)
NOTES
1. date and "date -s" only set a software clock ("xtime")
2. the software clock is initialised from a h/w RTC at boot
3. to make a date change persistent across reboots make sure you set
the RTC using rtc.
4. "rtc w" without further opts will set the RTC to equal the
software clock ("xtime")
5. Make sure your 860 has a 32k RTC xtal oscilator, and Keep Alive
PoWeR seperate from the main supply and XIN.
Alex
Hi, all!
HW:860T custom board
SW:devel kernel 2.4.20-pre7 nfs mount on eldk
Problem:Can not adjust time in linux shell(with 'date -s' command)
RTC really runs when I use 'date' it says sometime around 1970's
and it runs when power up.
With 'date -s' command it returned time had been changed.
However after a reset,the time go back to 1970's again :-(
I try with 'hwclock' and it says below:
bash-2.04# hwclock --debug
hwclock 2.4c/util-linux-2.11f
Using /dev/rtc interface to clock.
Last drift adjustment done at 0 seconds after 1969
Last calibration done at 0 seconds after 1969
Hardware clock is on unknown time
Assuming hardware clock is kept in local time.
Waiting for clock tick...
/dev/rtc does not have interrupt functions. Waiting in loop for time from
/dev/rtc to change
...got clock tick
Time read from Hardware Clock: 1970/01/09 21:28:28
Hw clock time : 1970/01/09 21:28:28 = 786508 seconds since 1969
Fri Jan 9 21:28:28 1970 -0.188839 seconds
I guess it never really write value to RTC reg!!!
Hope help!
ps:I open /dev/rtc option in the kernel.
Regards!
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this is to
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions which
do what their name implies. Then enable CONFIG_PPC_RTC
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
From: Alex Zeffertt <hidden> Date: 2002-10-17 16:18:21
On Thu, 17 Oct 2002, Tom Rini wrote:
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this is to
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions which
do what their name implies. Then enable CONFIG_PPC_RTC
You're right. This is actually what the module I have sent you does!
The reason I wrote the module was merely to provide a way for userland
programs to set the RTC.
Alex
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
On Thu, Oct 17, 2002 at 05:18:21PM +0100, Alex Zeffertt wrote:
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this is to
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions which
do what their name implies. Then enable CONFIG_PPC_RTC
You're right. This is actually what the module I have sent you does!
The reason I wrote the module was merely to provide a way for userland
programs to set the RTC.
Er, okay. But why not just modify
m8xx_setup.c::m8xx_get_rtc_time/m8xx_set_rtc_time to allow for the
get/set routines there to be overriden ? Doing that would be nice and
clean, and also allow the 'new' genrtc driver in 2.5 to just work as
well.
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
From: Marius Groeger <hidden> Date: 2002-10-17 16:34:56
On Thu, 17 Oct 2002, Tom Rini wrote:
On Thu, Oct 17, 2002 at 05:18:21PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this is to
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions which
do what their name implies. Then enable CONFIG_PPC_RTC
You're right. This is actually what the module I have sent you does!
The reason I wrote the module was merely to provide a way for userland
programs to set the RTC.
Er, okay. But why not just modify
m8xx_setup.c::m8xx_get_rtc_time/m8xx_set_rtc_time to allow for the
get/set routines there to be overriden ? Doing that would be nice and
clean, and also allow the 'new' genrtc driver in 2.5 to just work as
well.
Probably a little late, but: see also drivers/macintosh/rtc.c which is
a perfectly generic rtc driver at a perfectly non-generic location.
Don't mix this up with drivers/char/rtc.c, which is the other way
round. Shudder.
Regards,
Marius
-----------------------------------------------------------------------------
Marius Groeger SYSGO Real-Time Solutions AG mgroeger@sysgo.de
Software Engineering Embedded and Real-Time Software www.sysgo.de
Voice: +49-6136-9948-0 Am Pfaffenstein 14 www.osek.de
FAX: +49-6136-9948-10 55270 Klein-Winternheim, Germany www.elinos.com
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
From: Alex Zeffertt <hidden> Date: 2002-10-17 16:36:17
On Thu, 17 Oct 2002, Tom Rini wrote:
On Thu, Oct 17, 2002 at 05:18:21PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this is to
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions which
do what their name implies. Then enable CONFIG_PPC_RTC
You're right. This is actually what the module I have sent you does!
The reason I wrote the module was merely to provide a way for userland
programs to set the RTC.
Er, okay. But why not just modify
m8xx_setup.c::m8xx_get_rtc_time/m8xx_set_rtc_time to allow for the
get/set routines there to be overriden ? Doing that would be nice and
clean, and also allow the 'new' genrtc driver in 2.5 to just work as
well.
I don't understand. Why do you need to modify these functions? They
already work! All I have done is to create a character driver that calls
them (via their pointers ppc_md.set_rtc_time, and ppc_md.get_rtc_time).
The driver registers itself on the standard rtc major and minor numbers
and supports the standard RTC_RD_TIME/RTC_SET_TIME ioctls.
What is genrtc? (I'm not using 2.5 yet.)
Alex
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
On Thu, Oct 17, 2002 at 06:34:56PM +0200, Marius Groeger wrote:
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:18:21PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this is to
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions which
do what their name implies. Then enable CONFIG_PPC_RTC
You're right. This is actually what the module I have sent you does!
The reason I wrote the module was merely to provide a way for userland
programs to set the RTC.
Er, okay. But why not just modify
m8xx_setup.c::m8xx_get_rtc_time/m8xx_set_rtc_time to allow for the
get/set routines there to be overriden ? Doing that would be nice and
clean, and also allow the 'new' genrtc driver in 2.5 to just work as
well.
Probably a little late, but: see also drivers/macintosh/rtc.c which is
a perfectly generic rtc driver at a perfectly non-generic location.
Don't mix this up with drivers/char/rtc.c, which is the other way
round. Shudder.
Right. drivers/macintosh/rtc.c is what makes use of
ppc_md.set/get_rtc_time. Thankfully in 2.5 there's now
drivers/char/genrtc.c, which is generic and has replaced
drivers/macintosh/rtc.c (and uses the same ppc_md hooks, when the driver
is compiled on PPC).
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
From: Alex Zeffertt <hidden> Date: 2002-10-17 16:41:46
On Thu, 17 Oct 2002, Marius Groeger wrote:
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:18:21PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this is to
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions which
do what their name implies. Then enable CONFIG_PPC_RTC
You're right. This is actually what the module I have sent you does!
The reason I wrote the module was merely to provide a way for userland
programs to set the RTC.
Er, okay. But why not just modify
m8xx_setup.c::m8xx_get_rtc_time/m8xx_set_rtc_time to allow for the
get/set routines there to be overriden ? Doing that would be nice and
clean, and also allow the 'new' genrtc driver in 2.5 to just work as
well.
Probably a little late, but: see also drivers/macintosh/rtc.c which is
a perfectly generic rtc driver at a perfectly non-generic location.
Don't mix this up with drivers/char/rtc.c, which is the other way
round. Shudder.
Actually, that's where I got the kernel part of the code I just sent. :-)
The userland bit I wrote myself.
I've just remembered. To get this driver to work you have to change a
line in m8xx_setup.c from:
unsigned long __init m8xx_get_rtc_time(void)
to:
unsigned long m8xx_get_rtc_time(void)
Alex
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
On Thu, Oct 17, 2002 at 05:36:17PM +0100, Alex Zeffertt wrote:
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:18:21PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this is to
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions which
do what their name implies. Then enable CONFIG_PPC_RTC
You're right. This is actually what the module I have sent you does!
The reason I wrote the module was merely to provide a way for userland
programs to set the RTC.
Er, okay. But why not just modify
m8xx_setup.c::m8xx_get_rtc_time/m8xx_set_rtc_time to allow for the
get/set routines there to be overriden ? Doing that would be nice and
clean, and also allow the 'new' genrtc driver in 2.5 to just work as
well.
I don't understand. Why do you need to modify these functions? They
already work! All I have done is to create a character driver that calls
them (via their pointers ppc_md.set_rtc_time, and ppc_md.get_rtc_time).
The driver registers itself on the standard rtc major and minor numbers
and supports the standard RTC_RD_TIME/RTC_SET_TIME ioctls.
I don't understand what you did at all then (and you sent a binary file,
not rtc.c so I can't really see). drivers/macintosh/rtc.c is already a
'generic' RTC driver for PPC, which already works on 8xx (and has,
officially since maybe 2.4.18 or 2.4.19, and much longer in the PPC
community trees). So why did you have to write anything, if you used
the m8xx_set_rtc_time / m8xx_get_rtc_time functions in m8xx_setup.c ?
What is genrtc? (I'm not using 2.5 yet.)
It's a generic RTC driver, which lets arch specific (which can then be
board-specific) files determine how to exactly access the RTC hw, since
most things like date checking, some ioctls (except for the hw-specific
parts) are all generic.
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
I am sure that I have defined the CONFIG_PPC_RTC in the kernel
(General setup--->Support for /dev/rtc).
In order to track whether m8xx_get_rtc_time/m8xx_set_rtc_time
been called in hwclock I and 2 printk in them as following:
/* The RTC on the MPC8xx is an internal register.
* We want to protect this during power down, so we need to unlock,
* modify, and re-lock.
*/
static int
m8xx_set_rtc_time(unsigned long time)
{
printk("enter set rtc\n");
((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_rtck = KAPWR_KEY;
((volatile immap_t *)IMAP_ADDR)->im_sit.sit_rtc = time;
((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_rtck = ~KAPWR_KEY;
return(0);
}
static unsigned long
m8xx_get_rtc_time(void)
{
/* Get time from the RTC. */
printk("enter get rtc\n");
return((unsigned long)(((immap_t *)IMAP_ADDR)->im_sit.sit_rtc));
}
and when booting the kernel and when using hwclock --show
many "enter get rtc" pop up (about 1000),
so I am sure get function is called.
but when call hwclock -s --date 'Oct 18 2002',it hangs serveral
seconds and return no "enter set rtc' msg.
bash-2.04# hwclock -s --date 'Oct 18 9:00 2002' --debug
hwclock 2.4c/util-linux-2.11f
Using /dev/rtc interface to clock.
Last drift adjustment done at 0 seconds after 1969
Last calibration done at 0 seconds after 1969
Hardware clock is on unknown time
Assuming hardware clock is kept in local time.
Waiting for clock tick...
/dev/rtc does not have interrupt functions. Waiting in loop for time from
/dev/r
tc to change
Timed out waiting for time change.
...got clock tick
So I am not sure the set function works or not?
----- Original Message -----
From: "Tom Rini" <redacted>
To: "Alex Zeffertt" <redacted>
Cc: "leeyang" <redacted>; <redacted>
Sent: Friday, October 18, 2002 1:05 AM
Subject: Re: 860 rtc problem
On Thu, Oct 17, 2002 at 05:36:17PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:18:21PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, Tom Rini wrote:
quoted
On Thu, Oct 17, 2002 at 05:02:23PM +0100, Alex Zeffertt wrote:
quoted
On Thu, 17 Oct 2002, leeyang wrote:
Hi,
I've written a rtc driver for the mpc860. See attached files.
HOWTO BUILD
1. Edit KERNEL_DIR in Makefile
2. make (builds rtc.o and rtc)
This appears to be a binary file. And the easiest way to do this
is to
quoted
quoted
quoted
quoted
make ppc_md.set_rtc_time / ppc_md.get_rtc_time point to functions
which
quoted
quoted
quoted
quoted
do what their name implies. Then enable CONFIG_PPC_RTC
You're right. This is actually what the module I have sent you
does!
quoted
quoted
quoted
The reason I wrote the module was merely to provide a way for
userland
quoted
quoted
quoted
programs to set the RTC.
Er, okay. But why not just modify
m8xx_setup.c::m8xx_get_rtc_time/m8xx_set_rtc_time to allow for the
get/set routines there to be overriden ? Doing that would be nice and
clean, and also allow the 'new' genrtc driver in 2.5 to just work as
well.
I don't understand. Why do you need to modify these functions? They
already work! All I have done is to create a character driver that
calls
quoted
them (via their pointers ppc_md.set_rtc_time, and ppc_md.get_rtc_time).
The driver registers itself on the standard rtc major and minor numbers
and supports the standard RTC_RD_TIME/RTC_SET_TIME ioctls.
I don't understand what you did at all then (and you sent a binary file,
not rtc.c so I can't really see). drivers/macintosh/rtc.c is already a
'generic' RTC driver for PPC, which already works on 8xx (and has,
officially since maybe 2.4.18 or 2.4.19, and much longer in the PPC
community trees). So why did you have to write anything, if you used
the m8xx_set_rtc_time / m8xx_get_rtc_time functions in m8xx_setup.c ?
quoted
What is genrtc? (I'm not using 2.5 yet.)
It's a generic RTC driver, which lets arch specific (which can then be
board-specific) files determine how to exactly access the RTC hw, since
most things like date checking, some ioctls (except for the hw-specific
parts) are all generic.
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
Thanks for all your replys and it had been sloved!
Very shy to say that I type wrong shell command with hwclock.
I used 'hwclock -s --date 'Oct 19 2002' 'before and it is wrong,
I miss an equation mark!!!
It should be 'hwclock -s --date='Oct 19 2002'.
without that mark hwclock think nothing to write and do nothing
so did not really write rtc.
Thx again to your kind fellows:-)
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/