Commit 60219c56 authored by Yang Ling's avatar Yang Ling Committed by Ralf Baechle

MIPS: Add RTC support for Loongson1C board

The patch adds RTC support for Loongson1C board, and enable the external
crystal when the RTC is first powered up.
Signed-off-by: default avatarYang Ling <gnaygnil@gmail.com>
Cc: keguang.zhang@gmail.com
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/14214/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 9f3b8081
...@@ -30,5 +30,6 @@ void __init ls1x_clk_init(void); ...@@ -30,5 +30,6 @@ void __init ls1x_clk_init(void);
void __init ls1x_dma_set_platdata(struct plat_ls1x_dma *pdata); void __init ls1x_dma_set_platdata(struct plat_ls1x_dma *pdata);
void __init ls1x_nand_set_platdata(struct plat_ls1x_nand *pdata); void __init ls1x_nand_set_platdata(struct plat_ls1x_nand *pdata);
void __init ls1x_serial_set_uartclk(struct platform_device *pdev); void __init ls1x_serial_set_uartclk(struct platform_device *pdev);
void __init ls1x_rtc_set_extclk(struct platform_device *pdev);
#endif /* __ASM_MACH_LOONGSON32_PLATFORM_H */ #endif /* __ASM_MACH_LOONGSON32_PLATFORM_H */
...@@ -23,6 +23,10 @@ ...@@ -23,6 +23,10 @@
#include <dma.h> #include <dma.h>
#include <nand.h> #include <nand.h>
#define LS1X_RTC_CTRL ((void __iomem *)KSEG1ADDR(LS1X_RTC_BASE + 0x40))
#define RTC_EXTCLK_OK (BIT(5) | BIT(8))
#define RTC_EXTCLK_EN BIT(8)
/* 8250/16550 compatible UART */ /* 8250/16550 compatible UART */
#define LS1X_UART(_id) \ #define LS1X_UART(_id) \
{ \ { \
...@@ -66,6 +70,15 @@ void __init ls1x_serial_set_uartclk(struct platform_device *pdev) ...@@ -66,6 +70,15 @@ void __init ls1x_serial_set_uartclk(struct platform_device *pdev)
p->uartclk = clk_get_rate(clk); p->uartclk = clk_get_rate(clk);
} }
void __init ls1x_rtc_set_extclk(struct platform_device *pdev)
{
u32 val;
val = __raw_readl(LS1X_RTC_CTRL);
if (!(val & RTC_EXTCLK_OK))
__raw_writel(val | RTC_EXTCLK_EN, LS1X_RTC_CTRL);
}
/* CPUFreq */ /* CPUFreq */
static struct plat_ls1x_cpufreq ls1x_cpufreq_pdata = { static struct plat_ls1x_cpufreq ls1x_cpufreq_pdata = {
.clk_name = "cpu_clk", .clk_name = "cpu_clk",
......
# #
# Makefile for loongson1B based machines. # Makefile for loongson1C based machines.
# #
obj-y += board.o obj-y += board.o
/* /*
* Copyright (c) 2016 Ling Yang <gnaygnil@gmail.com> * Copyright (c) 2016 Yang Ling <gnaygnil@gmail.com>
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
...@@ -12,17 +12,16 @@ ...@@ -12,17 +12,16 @@
static struct platform_device *ls1c_platform_devices[] __initdata = { static struct platform_device *ls1c_platform_devices[] __initdata = {
&ls1x_uart_pdev, &ls1x_uart_pdev,
&ls1x_eth0_pdev, &ls1x_eth0_pdev,
&ls1x_rtc_pdev,
}; };
static int __init ls1c_platform_init(void) static int __init ls1c_platform_init(void)
{ {
int err;
ls1x_serial_set_uartclk(&ls1x_uart_pdev); ls1x_serial_set_uartclk(&ls1x_uart_pdev);
ls1x_rtc_set_extclk(&ls1x_rtc_pdev);
err = platform_add_devices(ls1c_platform_devices, return platform_add_devices(ls1c_platform_devices,
ARRAY_SIZE(ls1c_platform_devices)); ARRAY_SIZE(ls1c_platform_devices));
return err;
} }
arch_initcall(ls1c_platform_init); arch_initcall(ls1c_platform_init);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment