Commit 3c27f314 authored by Heiko Stuebner's avatar Heiko Stuebner Committed by Kukjin Kim

ARM: S3C24XX: convert s3c2412 to common clock framework

Convert all machines using these cpus to use the ccf clock driver
instead of the legacy Samsung clock implementation.
Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
Reviewed-by: default avatarTomasz Figa <t.figa@samsung.com>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent ca2e90ac
...@@ -39,9 +39,10 @@ config CPU_S3C2410 ...@@ -39,9 +39,10 @@ config CPU_S3C2410
config CPU_S3C2412 config CPU_S3C2412
bool "SAMSUNG S3C2412" bool "SAMSUNG S3C2412"
depends on SAMSUNG_CLOCK select COMMON_CLK
select CPU_ARM926T select CPU_ARM926T
select CPU_LLSERIAL_S3C2440 select CPU_LLSERIAL_S3C2440
select S3C2412_COMMON_CLK
select S3C2412_DMA if S3C24XX_DMA select S3C2412_DMA if S3C24XX_DMA
select S3C2412_PM if PM select S3C2412_PM if PM
help help
...@@ -363,6 +364,11 @@ config S3C2412_PM_SLEEP ...@@ -363,6 +364,11 @@ config S3C2412_PM_SLEEP
if CPU_S3C2412 if CPU_S3C2412
config S3C2412_COMMON_CLK
bool
help
Build the s3c2412 clock driver based on the common clock framework.
config CPU_S3C2412_ONLY config CPU_S3C2412_ONLY
bool bool
depends on !CPU_S3C2410 && !CPU_S3C2416 && !CPU_S3C2440 && \ depends on !CPU_S3C2410 && !CPU_S3C2416 && !CPU_S3C2440 && \
......
...@@ -21,7 +21,7 @@ obj-$(CONFIG_S3C2410_DMA) += dma-s3c2410.o ...@@ -21,7 +21,7 @@ obj-$(CONFIG_S3C2410_DMA) += dma-s3c2410.o
obj-$(CONFIG_S3C2410_PLL) += pll-s3c2410.o obj-$(CONFIG_S3C2410_PLL) += pll-s3c2410.o
obj-$(CONFIG_S3C2410_PM) += pm-s3c2410.o sleep-s3c2410.o obj-$(CONFIG_S3C2410_PM) += pm-s3c2410.o sleep-s3c2410.o
obj-$(CONFIG_CPU_S3C2412) += s3c2412.o clock-s3c2412.o obj-$(CONFIG_CPU_S3C2412) += s3c2412.o
obj-$(CONFIG_S3C2412_DMA) += dma-s3c2412.o obj-$(CONFIG_S3C2412_DMA) += dma-s3c2412.o
obj-$(CONFIG_S3C2412_PM) += pm-s3c2412.o obj-$(CONFIG_S3C2412_PM) += pm-s3c2412.o
obj-$(CONFIG_S3C2412_PM_SLEEP) += sleep-s3c2412.o obj-$(CONFIG_S3C2412_PM_SLEEP) += sleep-s3c2412.o
......
This diff is collapsed.
...@@ -127,7 +127,6 @@ static struct cpu_table cpu_ids[] __initdata = { ...@@ -127,7 +127,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x32412001, .idcode = 0x32412001,
.idmask = 0xffffffff, .idmask = 0xffffffff,
.map_io = s3c2412_map_io, .map_io = s3c2412_map_io,
.init_clocks = s3c2412_init_clocks,
.init_uarts = s3c2412_init_uarts, .init_uarts = s3c2412_init_uarts,
.init = s3c2412_init, .init = s3c2412_init,
.name = name_s3c2412, .name = name_s3c2412,
...@@ -136,7 +135,6 @@ static struct cpu_table cpu_ids[] __initdata = { ...@@ -136,7 +135,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x32412003, .idcode = 0x32412003,
.idmask = 0xffffffff, .idmask = 0xffffffff,
.map_io = s3c2412_map_io, .map_io = s3c2412_map_io,
.init_clocks = s3c2412_init_clocks,
.init_uarts = s3c2412_init_uarts, .init_uarts = s3c2412_init_uarts,
.init = s3c2412_init, .init = s3c2412_init,
.name = name_s3c2412, .name = name_s3c2412,
...@@ -535,6 +533,13 @@ struct platform_device s3c2443_device_dma = { ...@@ -535,6 +533,13 @@ struct platform_device s3c2443_device_dma = {
}; };
#endif #endif
#ifdef CONFIG_CPU_S3C2412
void __init s3c2412_init_clocks(int xtal)
{
s3c2412_common_clk_init(NULL, xtal, 0, S3C24XX_VA_CLKPWR);
}
#endif
#ifdef CONFIG_CPU_S3C2416 #ifdef CONFIG_CPU_S3C2416
void __init s3c2416_init_clocks(int xtal) void __init s3c2416_init_clocks(int xtal)
{ {
......
...@@ -114,6 +114,10 @@ extern struct platform_device s3c2412_device_dma; ...@@ -114,6 +114,10 @@ extern struct platform_device s3c2412_device_dma;
extern struct platform_device s3c2440_device_dma; extern struct platform_device s3c2440_device_dma;
extern struct platform_device s3c2443_device_dma; extern struct platform_device s3c2443_device_dma;
#ifdef CONFIG_S3C2412_COMMON_CLK
void __init s3c2412_common_clk_init(struct device_node *np, unsigned long xti_f,
unsigned long ext_f, void __iomem *reg_base);
#endif
#ifdef CONFIG_S3C2443_COMMON_CLK #ifdef CONFIG_S3C2443_COMMON_CLK
void __init s3c2443_common_clk_init(struct device_node *np, unsigned long xti_f, void __init s3c2443_common_clk_init(struct device_node *np, unsigned long xti_f,
int current_soc, int current_soc,
......
...@@ -507,11 +507,16 @@ static struct syscore_ops jive_pm_syscore_ops = { ...@@ -507,11 +507,16 @@ static struct syscore_ops jive_pm_syscore_ops = {
static void __init jive_map_io(void) static void __init jive_map_io(void)
{ {
s3c24xx_init_io(jive_iodesc, ARRAY_SIZE(jive_iodesc)); s3c24xx_init_io(jive_iodesc, ARRAY_SIZE(jive_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(jive_uartcfgs, ARRAY_SIZE(jive_uartcfgs)); s3c24xx_init_uarts(jive_uartcfgs, ARRAY_SIZE(jive_uartcfgs));
samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4); samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
} }
static void __init jive_init_time(void)
{
s3c2412_init_clocks(12000000);
samsung_timer_init();
}
static void jive_power_off(void) static void jive_power_off(void)
{ {
printk(KERN_INFO "powering system down...\n"); printk(KERN_INFO "powering system down...\n");
...@@ -665,6 +670,6 @@ MACHINE_START(JIVE, "JIVE") ...@@ -665,6 +670,6 @@ MACHINE_START(JIVE, "JIVE")
.init_irq = s3c2412_init_irq, .init_irq = s3c2412_init_irq,
.map_io = jive_map_io, .map_io = jive_map_io,
.init_machine = jive_machine_init, .init_machine = jive_machine_init,
.init_time = samsung_timer_init, .init_time = jive_init_time,
.restart = s3c2412_restart, .restart = s3c2412_restart,
MACHINE_END MACHINE_END
...@@ -106,11 +106,16 @@ static void __init smdk2413_fixup(struct tag *tags, char **cmdline, ...@@ -106,11 +106,16 @@ static void __init smdk2413_fixup(struct tag *tags, char **cmdline,
static void __init smdk2413_map_io(void) static void __init smdk2413_map_io(void)
{ {
s3c24xx_init_io(smdk2413_iodesc, ARRAY_SIZE(smdk2413_iodesc)); s3c24xx_init_io(smdk2413_iodesc, ARRAY_SIZE(smdk2413_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2413_uartcfgs, ARRAY_SIZE(smdk2413_uartcfgs)); s3c24xx_init_uarts(smdk2413_uartcfgs, ARRAY_SIZE(smdk2413_uartcfgs));
samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4); samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
} }
static void __init smdk2413_init_time(void)
{
s3c2412_init_clocks(12000000);
samsung_timer_init();
}
static void __init smdk2413_machine_init(void) static void __init smdk2413_machine_init(void)
{ /* Turn off suspend on both USB ports, and switch the { /* Turn off suspend on both USB ports, and switch the
* selectable USB port to USB device mode. */ * selectable USB port to USB device mode. */
...@@ -159,6 +164,6 @@ MACHINE_START(SMDK2413, "SMDK2413") ...@@ -159,6 +164,6 @@ MACHINE_START(SMDK2413, "SMDK2413")
.init_irq = s3c2412_init_irq, .init_irq = s3c2412_init_irq,
.map_io = smdk2413_map_io, .map_io = smdk2413_map_io,
.init_machine = smdk2413_machine_init, .init_machine = smdk2413_machine_init,
.init_time = samsung_timer_init, .init_time = smdk2413_init_time,
.restart = s3c2412_restart, .restart = s3c2412_restart,
MACHINE_END MACHINE_END
...@@ -142,11 +142,16 @@ static void __init vstms_fixup(struct tag *tags, char **cmdline, ...@@ -142,11 +142,16 @@ static void __init vstms_fixup(struct tag *tags, char **cmdline,
static void __init vstms_map_io(void) static void __init vstms_map_io(void)
{ {
s3c24xx_init_io(vstms_iodesc, ARRAY_SIZE(vstms_iodesc)); s3c24xx_init_io(vstms_iodesc, ARRAY_SIZE(vstms_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(vstms_uartcfgs, ARRAY_SIZE(vstms_uartcfgs)); s3c24xx_init_uarts(vstms_uartcfgs, ARRAY_SIZE(vstms_uartcfgs));
samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4); samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
} }
static void __init vstms_init_time(void)
{
s3c2412_init_clocks(12000000);
samsung_timer_init();
}
static void __init vstms_init(void) static void __init vstms_init(void)
{ {
s3c_i2c0_set_platdata(NULL); s3c_i2c0_set_platdata(NULL);
...@@ -162,6 +167,6 @@ MACHINE_START(VSTMS, "VSTMS") ...@@ -162,6 +167,6 @@ MACHINE_START(VSTMS, "VSTMS")
.init_irq = s3c2412_init_irq, .init_irq = s3c2412_init_irq,
.init_machine = vstms_init, .init_machine = vstms_init,
.map_io = vstms_map_io, .map_io = vstms_map_io,
.init_time = samsung_timer_init, .init_time = vstms_init_time,
.restart = s3c2412_restart, .restart = s3c2412_restart,
MACHINE_END MACHINE_END
...@@ -173,49 +173,6 @@ void __init s3c2412_map_io(void) ...@@ -173,49 +173,6 @@ void __init s3c2412_map_io(void)
void __init_or_cpufreq s3c2412_setup_clocks(void) void __init_or_cpufreq s3c2412_setup_clocks(void)
{ {
struct clk *xtal_clk;
unsigned long tmp;
unsigned long xtal;
unsigned long fclk;
unsigned long hclk;
unsigned long pclk;
xtal_clk = clk_get(NULL, "xtal");
xtal = clk_get_rate(xtal_clk);
clk_put(xtal_clk);
/* now we've got our machine bits initialised, work out what
* clocks we've got */
fclk = s3c24xx_get_pll(__raw_readl(S3C2410_MPLLCON), xtal * 2);
clk_mpll.rate = fclk;
tmp = __raw_readl(S3C2410_CLKDIVN);
/* work out clock scalings */
hclk = fclk / ((tmp & S3C2412_CLKDIVN_HDIVN_MASK) + 1);
hclk /= ((tmp & S3C2412_CLKDIVN_ARMDIVN) ? 2 : 1);
pclk = hclk / ((tmp & S3C2412_CLKDIVN_PDIVN) ? 2 : 1);
/* print brieft summary of clocks, etc */
printk("S3C2412: core %ld.%03ld MHz, memory %ld.%03ld MHz, peripheral %ld.%03ld MHz\n",
print_mhz(fclk), print_mhz(hclk), print_mhz(pclk));
s3c24xx_setup_clocks(fclk, hclk, pclk);
}
void __init s3c2412_init_clocks(int xtal)
{
/* initialise the clocks here, to allow other things like the
* console to use them
*/
s3c24xx_register_baseclocks(xtal);
s3c2412_setup_clocks();
s3c2412_baseclk_add();
} }
/* need to register the subsystem before we actually register the device, and /* need to register the subsystem before we actually register the device, and
......
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