[U-Boot] [PATCH 1/3] rtc: add driver for internal RTC on kirkwood SoC

From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Prafulla Wadaskar prafulla@marvell.com --- arch/arm/include/asm/arch-kirkwood/kirkwood.h | 2 + drivers/rtc/Makefile | 1 + drivers/rtc/kirkwood.c | 76 +++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 0 deletions(-) create mode 100644 drivers/rtc/kirkwood.c
diff --git a/arch/arm/include/asm/arch-kirkwood/kirkwood.h b/arch/arm/include/asm/arch-kirkwood/kirkwood.h index 0104418..15922eb 100644 --- a/arch/arm/include/asm/arch-kirkwood/kirkwood.h +++ b/arch/arm/include/asm/arch-kirkwood/kirkwood.h @@ -50,6 +50,8 @@ #define KW_MPP_BASE (KW_REGISTER(0x10000)) #define KW_GPIO0_BASE (KW_REGISTER(0x10100)) #define KW_GPIO1_BASE (KW_REGISTER(0x10140)) +#define KW_RTC_TIME (KW_REGISTER(0x10300)) +#define KW_RTC_DATE (KW_REGISTER(0x10304)) #define KW_NANDF_BASE (KW_REGISTER(0x10418)) #define KW_SPI_BASE (KW_REGISTER(0x10600)) #define KW_CPU_WIN_BASE (KW_REGISTER(0x20000)) diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index e4be4a4..ec064d9 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -43,6 +43,7 @@ COBJS-$(CONFIG_RTC_DS174x) += ds174x.o COBJS-$(CONFIG_RTC_DS3231) += ds3231.o COBJS-$(CONFIG_RTC_FTRTC010) += ftrtc010.o COBJS-$(CONFIG_RTC_ISL1208) += isl1208.o +COBJS-$(CONFIG_RTC_KIRKWOOD) += kirkwood.o COBJS-$(CONFIG_RTC_M41T11) += m41t11.o COBJS-$(CONFIG_RTC_M41T60) += m41t60.o COBJS-$(CONFIG_RTC_M41T62) += m41t62.o diff --git a/drivers/rtc/kirkwood.c b/drivers/rtc/kirkwood.c new file mode 100644 index 0000000..5c9bc81 --- /dev/null +++ b/drivers/rtc/kirkwood.c @@ -0,0 +1,76 @@ +/* + * Driver for the RTC in Marvell SoCs. + * + * Based on Linux Kernel driver. + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include <common.h> +#include <command.h> +#include <rtc.h> +#include <bcd.h> +#include <asm/arch/kirkwood.h> + +#if defined(CONFIG_CMD_DATE) + +#define RTC_TIME_REG_OFFS 0 +#define RTC_SECONDS_OFFS 0 +#define RTC_MINUTES_OFFS 8 +#define RTC_HOURS_OFFS 16 +#define RTC_WDAY_OFFS 24 +#define RTC_HOURS_12H_MODE (1 << 22) /* 12 hours mode */ + +#define RTC_DATE_REG_OFFS 4 +#define RTC_MDAY_OFFS 0 +#define RTC_MONTH_OFFS 8 +#define RTC_YEAR_OFFS 16 +#define KIRKWOOD_YEAR_BASE 2000 + +int rtc_set(struct rtc_time *tmp) +{ + ulong rtc_reg; + + GregorianDay (tmp); + + rtc_reg = (bin2bcd(tmp->tm_sec) << RTC_SECONDS_OFFS) | + (bin2bcd(tmp->tm_min) << RTC_MINUTES_OFFS) | + (bin2bcd(tmp->tm_hour) << RTC_HOURS_OFFS) | + (bin2bcd(tmp->tm_wday) << RTC_WDAY_OFFS); + writel(rtc_reg, KW_RTC_TIME); + + rtc_reg = (bin2bcd(tmp->tm_mday) << RTC_MDAY_OFFS) | + (bin2bcd(tmp->tm_mon + 1) << RTC_MONTH_OFFS) | + (bin2bcd(tmp->tm_year - KIRKWOOD_YEAR_BASE) << RTC_YEAR_OFFS); + writel(rtc_reg, KW_RTC_DATE); + + return 0; +} + +int rtc_get(struct rtc_time *tmp) +{ + ulong rtc_time, rtc_date; + + rtc_time = readl(KW_RTC_TIME); + rtc_date = readl(KW_RTC_DATE); + + tmp->tm_sec = bcd2bin(rtc_time & 0x7f); + tmp->tm_min = bcd2bin((rtc_time >> RTC_MINUTES_OFFS) & 0x7f); + tmp->tm_hour = bcd2bin((rtc_time >> RTC_HOURS_OFFS) & 0x3f); /* assume 24 hours mode */ + tmp->tm_mday = bcd2bin(rtc_date & 0x3f); + tmp->tm_wday = bcd2bin((rtc_time >> RTC_WDAY_OFFS) & 0x7); + tmp->tm_mon = bcd2bin((rtc_date >> RTC_MONTH_OFFS) & 0x3f) - 1; + /* hw counts from year 2000, but tm_year is relative to 0 */ + tmp->tm_year = bcd2bin((rtc_date >> RTC_YEAR_OFFS) & 0xff) + KIRKWOOD_YEAR_BASE; + + return 0; +} + +void rtc_reset(void) +{ + return; +} + +#endif /* CONFIG_CMD_DATE */

From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
When we use the ntpserverip environment variable argv[1] may not be set. Printing the error message using the NetNtpServerIP variable ensures the correct output in both cases.
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com --- common/cmd_net.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/common/cmd_net.c b/common/cmd_net.c index 8c6f5c8..e0d7d23 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -324,7 +324,7 @@ int do_sntp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) else NetTimeOffset = simple_strtol (toff, NULL, 10);
if (NetLoop(SNTP) < 0) { - printf("SNTP failed: host %s not responding\n", argv[1]); + printf("SNTP failed: host %pI4 not responding\n", &NetNtpServerIP); return 1; }

From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com --- net/bootp.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/net/bootp.c b/net/bootp.c index 4db63cb..53f37d0 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -228,6 +228,11 @@ static void BootpVendorFieldProcess (u8 * ext) NetOurNISDomain[size] = 0; } break; +#if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_NTPSERVER) + case 42: /* NTP server IP */ + NetCopyIP (&NetNtpServerIP, (IPaddr_t *) (ext + 2)); + break; +#endif /* Application layer fields */ case 43: /* Vendor specific info - Not yet supported */ /* @@ -278,6 +283,9 @@ static void BootpVendorProcess (u8 * ext, int size)
if (NetBootFileSize) debug("NetBootFileSize: %d\n", NetBootFileSize); + + if (NetNtpServerIP) + debug("NetNtpServerIP : %pI4\n", &NetNtpServerIP); } /* * Handle a BOOTP received packet. @@ -538,6 +546,11 @@ static int BootpExtended (u8 * e) *e++ = 32; e += 32; #endif +#if defined(CONFIG_BOOTP_NTPSERVER) + *e++ = 42; + *e++ = 4; + e += 4; +#endif
*e++ = 255; /* End of the list */

On Fri, May 13, 2011 at 1:29 PM, Chris Packham judge.packham@gmail.com wrote:
From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com
Sorry for the spam. I was just trying (and failing) to get git to add the Cc.

From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com --- Changes since v1: - fixed compile error in BootpVendorProcess when CONFIG_CMD_SNTP is not defined
net/bootp.c | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/net/bootp.c b/net/bootp.c index 4db63cb..18c743e 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -228,6 +228,11 @@ static void BootpVendorFieldProcess (u8 * ext) NetOurNISDomain[size] = 0; } break; +#if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_NTPSERVER) + case 42: /* NTP server IP */ + NetCopyIP (&NetNtpServerIP, (IPaddr_t *) (ext + 2)); + break; +#endif /* Application layer fields */ case 43: /* Vendor specific info - Not yet supported */ /* @@ -278,6 +283,11 @@ static void BootpVendorProcess (u8 * ext, int size)
if (NetBootFileSize) debug("NetBootFileSize: %d\n", NetBootFileSize); + +#if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_NTPSERVER) + if (NetNtpServerIP) + debug("NetNtpServerIP : %pI4\n", &NetNtpServerIP); +#endif } /* * Handle a BOOTP received packet. @@ -538,6 +548,11 @@ static int BootpExtended (u8 * e) *e++ = 32; e += 32; #endif +#if defined(CONFIG_BOOTP_NTPSERVER) + *e++ = 42; + *e++ = 4; + e += 4; +#endif
*e++ = 255; /* End of the list */

Hello.
On 16-05-2011 6:24, Chris Packham wrote:
From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussenluuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packhamchris.packham@alliedtelesis.co.nz Cc: Ben Warrenbiggerbadderben@gmail.com
[...]
diff --git a/net/bootp.c b/net/bootp.c index 4db63cb..18c743e 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -228,6 +228,11 @@ static void BootpVendorFieldProcess (u8 * ext) NetOurNISDomain[size] = 0; } break; +#if defined(CONFIG_CMD_SNTP)&& defined(CONFIG_BOOTP_NTPSERVER)
- case 42: /* NTP server IP */
NetCopyIP (&NetNtpServerIP, (IPaddr_t *) (ext + 2));
There should be no space between function name and (. You're now supposed to run your patch thru scripts/checkpatch.pl (from Linux source tree).
break;
+#endif /* Application layer fields */ case 43: /* Vendor specific info - Not yet supported */ /* @@ -538,6 +548,11 @@ static int BootpExtended (u8 * e) *e++ = 32; e += 32; #endif +#if defined(CONFIG_BOOTP_NTPSERVER)
- *e++ = 42;
Too many spaces...
- *e++ = 4;
- e += 4;
+#endif
WBR, Sergei

Hi Sergei,
On Mon, May 16, 2011 at 11:57 PM, Sergei Shtylyov sshtylyov@mvista.com wrote:
Hello.
On 16-05-2011 6:24, Chris Packham wrote:
From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussenluuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packhamchris.packham@alliedtelesis.co.nz Cc: Ben Warrenbiggerbadderben@gmail.com
[...]
diff --git a/net/bootp.c b/net/bootp.c index 4db63cb..18c743e 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -228,6 +228,11 @@ static void BootpVendorFieldProcess (u8 * ext) NetOurNISDomain[size] = 0; } break; +#if defined(CONFIG_CMD_SNTP)&& defined(CONFIG_BOOTP_NTPSERVER)
- case 42: /* NTP server IP */
- NetCopyIP (&NetNtpServerIP, (IPaddr_t *) (ext + 2));
There should be no space between function name and (. You're now supposed to run your patch thru scripts/checkpatch.pl (from Linux source tree).
Will fix (and run through checkpatch.pl) in next version.
- break;
+#endif /* Application layer fields */ case 43: /* Vendor specific info - Not yet supported */ /* @@ -538,6 +548,11 @@ static int BootpExtended (u8 * e) *e++ = 32; e += 32; #endif +#if defined(CONFIG_BOOTP_NTPSERVER)
- *e++ = 42;
Too many spaces...
Ditto.
- *e++ = 4;
- e += 4;
+#endif
WBR, Sergei
v3 coming shortly

From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com --- Changes since v1: - fixed compile error in BootpVendorProcess when CONFIG_CMD_SNTP is not defined Changes since v2: - run though checkpatch.pl. Address comments from Sergei.
net/bootp.c | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/net/bootp.c b/net/bootp.c index 4db63cb..45eaab1 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -228,6 +228,11 @@ static void BootpVendorFieldProcess (u8 * ext) NetOurNISDomain[size] = 0; } break; +#if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_NTPSERVER) + case 42: /* NTP server IP */ + NetCopyIP(&NetNtpServerIP, (IPaddr_t *) (ext + 2)); + break; +#endif /* Application layer fields */ case 43: /* Vendor specific info - Not yet supported */ /* @@ -278,6 +283,11 @@ static void BootpVendorProcess (u8 * ext, int size)
if (NetBootFileSize) debug("NetBootFileSize: %d\n", NetBootFileSize); + +#if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_NTPSERVER) + if (NetNtpServerIP) + debug("NetNtpServerIP : %pI4\n", &NetNtpServerIP); +#endif } /* * Handle a BOOTP received packet. @@ -538,6 +548,11 @@ static int BootpExtended (u8 * e) *e++ = 32; e += 32; #endif +#if defined(CONFIG_BOOTP_NTPSERVER) + *e++ = 42; + *e++ = 4; + e += 4; +#endif
*e++ = 255; /* End of the list */

Dear Chris Packham,
In message 1305606559-29993-1-git-send-email-judge.packham@gmail.com you wrote:
From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com
Changes since v1:
- fixed compile error in BootpVendorProcess when CONFIG_CMD_SNTP is not defined
Changes since v2:
- run though checkpatch.pl. Address comments from Sergei.
net/bootp.c | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk

On Fri, May 13, 2011 at 1:29 PM, Chris Packham judge.packham@gmail.com wrote:
From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
When we use the ntpserverip environment variable argv[1] may not be set. Printing the error message using the NetNtpServerIP variable ensures the correct output in both cases.
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com
Sorry for the spam. I was just trying (and failing) to get git to add the Cc.

From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
When we use the ntpserverip environment variable argv[1] may not be set. Printing the error message using the NetNtpServerIP variable ensures the correct output in both cases.
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com --- Changes since v1: - run through checkpatch.pl, fix line > 80 chars
common/cmd_net.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/common/cmd_net.c b/common/cmd_net.c index 8c6f5c8..fae3c7f 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -324,7 +324,8 @@ int do_sntp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) else NetTimeOffset = simple_strtol (toff, NULL, 10);
if (NetLoop(SNTP) < 0) { - printf("SNTP failed: host %s not responding\n", argv[1]); + printf("SNTP failed: host %pI4 not responding\n", + &NetNtpServerIP); return 1; }

Hi Chris,
From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
When we use the ntpserverip environment variable argv[1] may not be set. Printing the error message using the NetNtpServerIP variable ensures the correct output in both cases.
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Ben Warren biggerbadderben@gmail.com
Changes since v1:
- run through checkpatch.pl, fix line > 80 chars
common/cmd_net.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/common/cmd_net.c b/common/cmd_net.c index 8c6f5c8..fae3c7f 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -324,7 +324,8 @@ int do_sntp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) else NetTimeOffset = simple_strtol (toff, NULL, 10);
if (NetLoop(SNTP) < 0) {
printf("SNTP failed: host %s not responding\n", argv[1]);
printf("SNTP failed: host %pI4 not responding\n",
return 1; }&NetNtpServerIP);
Acked-by: Detlev Zundel dzu@denx.de
Cheers Detlev

On Fri, May 13, 2011 at 1:29 PM, Chris Packham judge.packham@gmail.com wrote:
From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Prafulla Wadaskar prafulla@marvell.com
Sorry for the spam. I was just trying (and failing) to get git to add the Cc.

From: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz
Signed-off-by: Luuk Paulussen luuk.paulussen@alliedtelesis.co.nz Acked-by: Chris Packham chris.packham@alliedtelesis.co.nz Cc: Prafulla Wadaskar prafulla@marvell.com --- Changes since v1: - run through checkpatch.pl and fix style issues (spaces before bracket and lines > 80 chars)
arch/arm/include/asm/arch-kirkwood/kirkwood.h | 2 + drivers/rtc/Makefile | 1 + drivers/rtc/kirkwood.c | 79 +++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 0 deletions(-) create mode 100644 drivers/rtc/kirkwood.c
diff --git a/arch/arm/include/asm/arch-kirkwood/kirkwood.h b/arch/arm/include/asm/arch-kirkwood/kirkwood.h index 0104418..15922eb 100644 --- a/arch/arm/include/asm/arch-kirkwood/kirkwood.h +++ b/arch/arm/include/asm/arch-kirkwood/kirkwood.h @@ -50,6 +50,8 @@ #define KW_MPP_BASE (KW_REGISTER(0x10000)) #define KW_GPIO0_BASE (KW_REGISTER(0x10100)) #define KW_GPIO1_BASE (KW_REGISTER(0x10140)) +#define KW_RTC_TIME (KW_REGISTER(0x10300)) +#define KW_RTC_DATE (KW_REGISTER(0x10304)) #define KW_NANDF_BASE (KW_REGISTER(0x10418)) #define KW_SPI_BASE (KW_REGISTER(0x10600)) #define KW_CPU_WIN_BASE (KW_REGISTER(0x20000)) diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index e4be4a4..ec064d9 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -43,6 +43,7 @@ COBJS-$(CONFIG_RTC_DS174x) += ds174x.o COBJS-$(CONFIG_RTC_DS3231) += ds3231.o COBJS-$(CONFIG_RTC_FTRTC010) += ftrtc010.o COBJS-$(CONFIG_RTC_ISL1208) += isl1208.o +COBJS-$(CONFIG_RTC_KIRKWOOD) += kirkwood.o COBJS-$(CONFIG_RTC_M41T11) += m41t11.o COBJS-$(CONFIG_RTC_M41T60) += m41t60.o COBJS-$(CONFIG_RTC_M41T62) += m41t62.o diff --git a/drivers/rtc/kirkwood.c b/drivers/rtc/kirkwood.c new file mode 100644 index 0000000..b08fd91 --- /dev/null +++ b/drivers/rtc/kirkwood.c @@ -0,0 +1,79 @@ +/* + * Driver for the RTC in Marvell SoCs. + * + * Based on Linux Kernel driver. + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include <common.h> +#include <command.h> +#include <rtc.h> +#include <bcd.h> +#include <asm/arch/kirkwood.h> + +#if defined(CONFIG_CMD_DATE) + +#define RTC_TIME_REG_OFFS 0 +#define RTC_SECONDS_OFFS 0 +#define RTC_MINUTES_OFFS 8 +#define RTC_HOURS_OFFS 16 +#define RTC_WDAY_OFFS 24 +#define RTC_HOURS_12H_MODE (1 << 22) /* 12 hours mode */ + +#define RTC_DATE_REG_OFFS 4 +#define RTC_MDAY_OFFS 0 +#define RTC_MONTH_OFFS 8 +#define RTC_YEAR_OFFS 16 +#define KIRKWOOD_YEAR_BASE 2000 + +int rtc_set(struct rtc_time *tmp) +{ + ulong rtc_reg; + + GregorianDay(tmp); + + rtc_reg = (bin2bcd(tmp->tm_sec) << RTC_SECONDS_OFFS) | + (bin2bcd(tmp->tm_min) << RTC_MINUTES_OFFS) | + (bin2bcd(tmp->tm_hour) << RTC_HOURS_OFFS) | + (bin2bcd(tmp->tm_wday) << RTC_WDAY_OFFS); + writel(rtc_reg, KW_RTC_TIME); + + rtc_reg = (bin2bcd(tmp->tm_mday) << RTC_MDAY_OFFS) | + (bin2bcd(tmp->tm_mon + 1) << RTC_MONTH_OFFS) | + (bin2bcd(tmp->tm_year - KIRKWOOD_YEAR_BASE) + << RTC_YEAR_OFFS); + writel(rtc_reg, KW_RTC_DATE); + + return 0; +} + +int rtc_get(struct rtc_time *tmp) +{ + ulong rtc_time, rtc_date; + + rtc_time = readl(KW_RTC_TIME); + rtc_date = readl(KW_RTC_DATE); + + tmp->tm_sec = bcd2bin(rtc_time & 0x7f); + tmp->tm_min = bcd2bin((rtc_time >> RTC_MINUTES_OFFS) & 0x7f); + /* assume 24 hour mode */ + tmp->tm_hour = bcd2bin((rtc_time >> RTC_HOURS_OFFS) & 0x3f); + tmp->tm_mday = bcd2bin(rtc_date & 0x3f); + tmp->tm_wday = bcd2bin((rtc_time >> RTC_WDAY_OFFS) & 0x7); + tmp->tm_mon = bcd2bin((rtc_date >> RTC_MONTH_OFFS) & 0x3f) - 1; + /* hw counts from year 2000, but tm_year is relative to 0 */ + tmp->tm_year = bcd2bin((rtc_date >> RTC_YEAR_OFFS) & 0xff) + + KIRKWOOD_YEAR_BASE; + + return 0; +} + +void rtc_reset(void) +{ + return; +} + +#endif /* CONFIG_CMD_DATE */
participants (4)
-
Chris Packham
-
Detlev Zundel
-
Sergei Shtylyov
-
Wolfgang Denk