|
@@ -39,6 +39,8 @@
|
|
|
|
|
|
#include <mach/regs-s3c2443-clock.h>
|
|
|
|
|
|
+#include <plat/cpu-freq.h>
|
|
|
+
|
|
|
#include <plat/s3c2443.h>
|
|
|
#include <plat/clock.h>
|
|
|
#include <plat/cpu.h>
|
|
@@ -1011,22 +1013,20 @@ static struct clk *clks[] __initdata = {
|
|
|
&clk_prediv,
|
|
|
};
|
|
|
|
|
|
-void __init s3c2443_init_clocks(int xtal)
|
|
|
+void __init_or_cpufreq s3c2443_setup_clocks(void)
|
|
|
{
|
|
|
- unsigned long epllcon = __raw_readl(S3C2443_EPLLCON);
|
|
|
unsigned long mpllcon = __raw_readl(S3C2443_MPLLCON);
|
|
|
unsigned long clkdiv0 = __raw_readl(S3C2443_CLKDIV0);
|
|
|
+ struct clk *xtal_clk;
|
|
|
+ unsigned long xtal;
|
|
|
unsigned long pll;
|
|
|
unsigned long fclk;
|
|
|
unsigned long hclk;
|
|
|
unsigned long pclk;
|
|
|
- struct clk *clkp;
|
|
|
- int ret;
|
|
|
- int ptr;
|
|
|
|
|
|
- /* s3c2443 parents h and p clocks from prediv */
|
|
|
- clk_h.parent = &clk_prediv;
|
|
|
- clk_p.parent = &clk_prediv;
|
|
|
+ xtal_clk = clk_get(NULL, "xtal");
|
|
|
+ xtal = clk_get_rate(xtal_clk);
|
|
|
+ clk_put(xtal_clk);
|
|
|
|
|
|
pll = s3c2443_get_mpll(mpllcon, xtal);
|
|
|
clk_msysclk.rate = pll;
|
|
@@ -1036,13 +1036,29 @@ void __init s3c2443_init_clocks(int xtal)
|
|
|
hclk /= s3c2443_get_hdiv(clkdiv0);
|
|
|
pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1);
|
|
|
|
|
|
- s3c24xx_setup_clocks(xtal, fclk, hclk, pclk);
|
|
|
+ s3c24xx_setup_clocks(fclk, hclk, pclk);
|
|
|
|
|
|
printk("S3C2443: mpll %s %ld.%03ld MHz, cpu %ld.%03ld MHz, mem %ld.%03ld MHz, pclk %ld.%03ld MHz\n",
|
|
|
(mpllcon & S3C2443_PLLCON_OFF) ? "off":"on",
|
|
|
print_mhz(pll), print_mhz(fclk),
|
|
|
print_mhz(hclk), print_mhz(pclk));
|
|
|
|
|
|
+ s3c24xx_setup_clocks(fclk, hclk, pclk);
|
|
|
+}
|
|
|
+
|
|
|
+void __init s3c2443_init_clocks(int xtal)
|
|
|
+{
|
|
|
+ struct clk *clkp;
|
|
|
+ unsigned long epllcon = __raw_readl(S3C2443_EPLLCON);
|
|
|
+ int ret;
|
|
|
+ int ptr;
|
|
|
+
|
|
|
+ /* s3c2443 parents h and p clocks from prediv */
|
|
|
+ clk_h.parent = &clk_prediv;
|
|
|
+ clk_p.parent = &clk_prediv;
|
|
|
+
|
|
|
+ s3c24xx_register_baseclocks(xtal);
|
|
|
+ s3c2443_setup_clocks();
|
|
|
s3c2443_clk_initparents();
|
|
|
|
|
|
for (ptr = 0; ptr < ARRAY_SIZE(clks); ptr++) {
|
|
@@ -1056,7 +1072,6 @@ void __init s3c2443_init_clocks(int xtal)
|
|
|
}
|
|
|
|
|
|
clk_epll.rate = s3c2443_get_epll(epllcon, xtal);
|
|
|
-
|
|
|
clk_usb_bus.parent = &clk_usb_bus_host;
|
|
|
|
|
|
/* ensure usb bus clock is within correct rate of 48MHz */
|