void __init_or_cpufreq s5pv210_setup_clocks(void) { struct clk *xtal_clk; unsigned long vpllsrc; unsigned long armclk; unsigned long hclk_msys; unsigned long hclk_dsys; unsigned long hclk_psys; unsigned long pclk_msys; unsigned long pclk_dsys; unsigned long pclk_psys; unsigned long apll; unsigned long mpll; unsigned long epll; unsigned long vpll; unsigned int ptr; u32 clkdiv0, clkdiv1; /* Set functions for clk_fout_epll */ clk_fout_epll.enable = s5p_epll_enable; clk_fout_epll.ops = &s5pv210_epll_ops; clk_fout_vpll.enable = s5pv210_vpll_enable; clk_fout_vpll.ops = &s5pv210_vpll_ops; printk(KERN_DEBUG "%s: registering clocks\n", __func__); clkdiv0 = __raw_readl(S5P_CLK_DIV0); clkdiv1 = __raw_readl(S5P_CLK_DIV1); printk(KERN_DEBUG "%s: clkdiv0 = %08x, clkdiv1 = %08x\n", __func__, clkdiv0, clkdiv1); xtal_clk = clk_get(NULL, "xtal"); BUG_ON(IS_ERR(xtal_clk)); xtal = clk_get_rate(xtal_clk); clk_put(xtal_clk); printk(KERN_DEBUG "%s: xtal is %ld\n", __func__, xtal); apll = s5p_get_pll45xx(xtal, __raw_readl(S5P_APLL_CON), pll_4508); mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON), pll_4502); epll = s5p_get_pll46xx(xtal, __raw_readl(S5P_EPLL_CON), __raw_readl(S5P_EPLL_CON1), pll_4600); vpllsrc = clk_get_rate(&clk_vpllsrc.clk); vpll = s5p_get_pll45xx(vpllsrc, __raw_readl(S5P_VPLL_CON), pll_4502); clk_fout_apll.ops = &clk_fout_apll_ops; clk_fout_mpll.rate = mpll; clk_fout_epll.rate = epll; clk_fout_vpll.rate = vpll; printk(KERN_INFO "S5PV210: PLL settings, A=%ld, M=%ld, E=%ld V=%ld", apll, mpll, epll, vpll); armclk = clk_get_rate(&clk_armclk.clk); hclk_msys = clk_get_rate(&clk_hclk_msys.clk); hclk_dsys = clk_get_rate(&clk_hclk_dsys.clk); hclk_psys = clk_get_rate(&clk_hclk_psys.clk); pclk_msys = clk_get_rate(&clk_pclk_msys.clk); pclk_dsys = clk_get_rate(&clk_pclk_dsys.clk); pclk_psys = clk_get_rate(&clk_pclk_psys.clk); printk(KERN_INFO "S5PV210: ARMCLK=%ld, HCLKM=%ld, HCLKD=%ld\n" "HCLKP=%ld, PCLKM=%ld, PCLKD=%ld, PCLKP=%ld\n", armclk, hclk_msys, hclk_dsys, hclk_psys, pclk_msys, pclk_dsys, pclk_psys); clk_f.rate = armclk; clk_h.rate = hclk_psys; clk_p.rate = pclk_psys; for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++) s3c_set_clksrc(&clksrcs[ptr], true); }
void __init_or_cpufreq s5pv310_setup_clocks(void) { struct clk *xtal_clk; unsigned long apll; unsigned long mpll; unsigned long epll; unsigned long vpll; unsigned long vpllsrc; unsigned long xtal; unsigned long armclk; unsigned long aclk_corem0; unsigned long aclk_cores; unsigned long aclk_corem1; unsigned long periphclk; unsigned long sclk_dmc; unsigned long aclk_cored; unsigned long aclk_corep; unsigned long aclk_acp; unsigned long pclk_acp; unsigned int ptr; printk(KERN_DEBUG "%s: registering clocks\n", __func__); xtal_clk = clk_get(NULL, "xtal"); BUG_ON(IS_ERR(xtal_clk)); xtal = clk_get_rate(xtal_clk); clk_put(xtal_clk); printk(KERN_DEBUG "%s: xtal is %ld\n", __func__, xtal); apll = s5p_get_pll45xx(xtal, __raw_readl(S5P_APLL_CON0), pll_4508); mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON0), pll_4508); epll = s5p_get_pll46xx(xtal, __raw_readl(S5P_EPLL_CON0), __raw_readl(S5P_EPLL_CON1), pll_4500); vpllsrc = clk_get_rate(&clk_vpllsrc.clk); vpll = s5p_get_pll46xx(vpllsrc, __raw_readl(S5P_VPLL_CON0), __raw_readl(S5P_VPLL_CON1), pll_4502); clk_fout_apll.rate = apll; clk_fout_mpll.rate = mpll; clk_fout_epll.rate = epll; clk_fout_vpll.rate = vpll; printk(KERN_INFO "S5PV310: PLL settings, A=%ld, M=%ld, E=%ld V=%ld", apll, mpll, epll, vpll); armclk = clk_get_rate(&clk_armclk.clk); aclk_corem0 = clk_get_rate(&clk_aclk_corem0.clk); aclk_cores = clk_get_rate(&clk_aclk_cores.clk); aclk_corem1 = clk_get_rate(&clk_aclk_corem1.clk); periphclk = clk_get_rate(&clk_periphclk.clk); sclk_dmc = clk_get_rate(&clk_sclk_dmc.clk); aclk_cored = clk_get_rate(&clk_aclk_cored.clk); aclk_corep = clk_get_rate(&clk_aclk_corep.clk); aclk_acp = clk_get_rate(&clk_aclk_acp.clk); pclk_acp = clk_get_rate(&clk_pclk_acp.clk); printk(KERN_INFO "S5PV310: ARMCLK=%ld, COREM0=%ld, CORES=%ld\n" "COREM1=%ld, PERI=%ld, DMC=%ld, CORED=%ld\n" "COREP=%ld, ACLK_ACP=%ld, PCLK_ACP=%ld", armclk, aclk_corem0, aclk_cores, aclk_corem1, periphclk, sclk_dmc, aclk_cored, aclk_corep, aclk_acp, pclk_acp); clk_f.rate = armclk; clk_h.rate = sclk_dmc; clk_p.rate = periphclk; for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++) s3c_set_clksrc(&clksrcs[ptr], true); }
void __init_or_cpufreq s5pv210_setup_clocks(void) { struct clk *xtal_clk; unsigned long vpllsrc; unsigned long armclk; unsigned long hclk_msys; unsigned long hclk_dsys; unsigned long hclk_psys; unsigned long pclk_msys; unsigned long pclk_dsys; unsigned long pclk_psys; unsigned long apll; unsigned long mpll; unsigned long epll; unsigned long vpll; unsigned int ptr; u32 clkdiv0, clkdiv1; struct clksrc_clk *pclkSrc; /* Set functions for clk_fout_epll */ clk_fout_epll.enable = s5p_epll_enable; clk_fout_epll.ops = &s5pv210_epll_ops; printk(KERN_DEBUG "%s: registering clocks\n", __func__); clkdiv0 = __raw_readl(S5P_CLK_DIV0); clkdiv1 = __raw_readl(S5P_CLK_DIV1); printk(KERN_DEBUG "%s: clkdiv0 = %08x, clkdiv1 = %08x\n", __func__, clkdiv0, clkdiv1); xtal_clk = clk_get(NULL, "xtal"); BUG_ON(IS_ERR(xtal_clk)); xtal = clk_get_rate(xtal_clk); clk_put(xtal_clk); printk(KERN_DEBUG "%s: xtal is %ld\n", __func__, xtal); apll = s5p_get_pll45xx(xtal, __raw_readl(S5P_APLL_CON), pll_4508); mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON), pll_4502); epll = s5p_get_pll46xx(xtal, __raw_readl(S5P_EPLL_CON), __raw_readl(S5P_EPLL_CON1), pll_4600); vpllsrc = clk_get_rate(&clk_vpllsrc.clk); vpll = s5p_get_pll45xx(vpllsrc, __raw_readl(S5P_VPLL_CON), pll_4502); clk_fout_apll.ops = &clk_fout_apll_ops; clk_fout_mpll.rate = mpll; clk_fout_epll.rate = epll; clk_fout_vpll.rate = vpll; printk(KERN_INFO "S5PV210: PLL settings, A=%ld, M=%ld, E=%ld V=%ld", apll, mpll, epll, vpll); armclk = clk_get_rate(&clk_armclk.clk); hclk_msys = clk_get_rate(&clk_hclk_msys.clk); hclk_dsys = clk_get_rate(&clk_hclk_dsys.clk); hclk_psys = clk_get_rate(&clk_hclk_psys.clk); pclk_msys = clk_get_rate(&clk_pclk_msys.clk); pclk_dsys = clk_get_rate(&clk_pclk_dsys.clk); pclk_psys = clk_get_rate(&clk_pclk_psys.clk); printk(KERN_INFO "S5PV210: ARMCLK=%ld, HCLKM=%ld, HCLKD=%ld\n" "HCLKP=%ld, PCLKM=%ld, PCLKD=%ld, PCLKP=%ld\n", armclk, hclk_msys, hclk_dsys, hclk_psys, pclk_msys, pclk_dsys, pclk_psys); clk_f.rate = armclk; clk_h.rate = hclk_psys; clk_p.rate = pclk_psys; /*Assign clock source and rates for IP's*/ for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++) { pclkSrc = &clksrcs[ptr]; if (!strcmp(pclkSrc->clk.name, "sclk_mdnie")) { clk_set_parent(&pclkSrc->clk, &clk_mout_mpll.clk); clk_set_rate(&pclkSrc->clk, 167*MHZ); } else if (!strcmp(pclkSrc->clk.name, "sclk_mmc")) { clk_set_parent(&pclkSrc->clk, &clk_mout_mpll.clk); if (pclkSrc->clk.id == 0) clk_set_rate(&pclkSrc->clk, 52*MHZ); else clk_set_rate(&pclkSrc->clk, 50*MHZ); } else if (!strcmp(pclkSrc->clk.name, "sclk_spi")) { clk_set_parent(&pclkSrc->clk, &clk_mout_epll.clk); } else if (!strcmp(pclkSrc->clk.name, "sclk_cam") && (pclkSrc->clk.id == 0)) { clk_set_parent(&pclkSrc->clk, &clk_xusbxti); } else if (!strcmp(pclkSrc->clk.name, "sclk_g2d")) { clk_set_parent(&pclkSrc->clk, &clk_mout_mpll.clk); clk_set_rate(&pclkSrc->clk, 250*MHZ); } else if (!strcmp(pclkSrc->clk.name, "sclk")) { clk_set_parent(&pclkSrc->clk, &clk_mout_mpll.clk); if (pclkSrc->clk.id == 0) clk_set_rate(&pclkSrc->clk, 133400000); else clk_set_rate(&pclkSrc->clk, 66700000); } /* Display the clock source */ s3c_set_clksrc(pclkSrc, true); } }
void __init_or_cpufreq exynos4_setup_clocks(void) { struct clk *xtal_clk; unsigned long apll = 0; unsigned long mpll = 0; unsigned long epll = 0; unsigned long vpll = 0; unsigned long vpllsrc; unsigned long xtal; unsigned long armclk; unsigned long sclk_dmc; unsigned long aclk_200; unsigned long aclk_100; unsigned long aclk_160; unsigned long aclk_133; unsigned int ptr; printk(KERN_DEBUG "%s: registering clocks\n", __func__); xtal_clk = clk_get(NULL, "xtal"); BUG_ON(IS_ERR(xtal_clk)); xtal = clk_get_rate(xtal_clk); xtal_rate = xtal; clk_put(xtal_clk); printk(KERN_DEBUG "%s: xtal is %ld\n", __func__, xtal); if (soc_is_exynos4210()) { apll = s5p_get_pll45xx(xtal, __raw_readl(S5P_APLL_CON0), pll_4508); mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON0), pll_4508); epll = s5p_get_pll46xx(xtal, __raw_readl(S5P_EPLL_CON0), __raw_readl(S5P_EPLL_CON1), pll_4600); vpllsrc = clk_get_rate(&clk_vpllsrc.clk); vpll = s5p_get_pll46xx(vpllsrc, __raw_readl(S5P_VPLL_CON0), __raw_readl(S5P_VPLL_CON1), pll_4650c); } else if (soc_is_exynos4212() || soc_is_exynos4412()) { apll = s5p_get_pll35xx(xtal, __raw_readl(S5P_APLL_CON0)); mpll = s5p_get_pll35xx(xtal, __raw_readl(S5P_MPLL_CON0)); epll = s5p_get_pll36xx(xtal, __raw_readl(S5P_EPLL_CON0), __raw_readl(S5P_EPLL_CON1)); vpllsrc = clk_get_rate(&clk_vpllsrc.clk); vpll = s5p_get_pll36xx(vpllsrc, __raw_readl(S5P_VPLL_CON0), __raw_readl(S5P_VPLL_CON1)); } else { /* nothing */ } clk_fout_apll.ops = &exynos4_fout_apll_ops; clk_fout_mpll.rate = mpll; clk_fout_epll.rate = epll; clk_fout_vpll.ops = &exynos4_vpll_ops; clk_fout_vpll.rate = vpll; printk(KERN_INFO "EXYNOS4: PLL settings, A=%ld, M=%ld, E=%ld V=%ld", apll, mpll, epll, vpll); armclk = clk_get_rate(&clk_armclk.clk); sclk_dmc = clk_get_rate(&clk_sclk_dmc.clk); aclk_200 = clk_get_rate(&clk_aclk_200.clk); aclk_100 = clk_get_rate(&clk_aclk_100.clk); aclk_160 = clk_get_rate(&clk_aclk_160.clk); aclk_133 = clk_get_rate(&clk_aclk_133.clk); printk(KERN_INFO "EXYNOS4: ARMCLK=%ld, DMC=%ld, ACLK200=%ld\n" "ACLK100=%ld, ACLK160=%ld, ACLK133=%ld\n", armclk, sclk_dmc, aclk_200, aclk_100, aclk_160, aclk_133); clk_f.rate = armclk; clk_h.rate = sclk_dmc; clk_p.rate = aclk_100; for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++) s3c_set_clksrc(&clksrcs[ptr], true); }
void __init_or_cpufreq s5p6450_setup_clocks(void) { struct clk *xtal_clk; unsigned long xtal; unsigned long fclk; unsigned long hclk; unsigned long hclk_low; unsigned long pclk; unsigned long pclk_low; unsigned long apll; unsigned long mpll; unsigned long epll; unsigned long dpll; unsigned int ptr; /* Set S5P6450 functions for clk_fout_epll */ clk_fout_epll.enable = s5p_epll_enable; clk_fout_epll.ops = &s5p6450_epll_ops; clk_48m.enable = s5p64x0_clk48m_ctrl; xtal_clk = clk_get(NULL, "ext_xtal"); BUG_ON(IS_ERR(xtal_clk)); xtal = clk_get_rate(xtal_clk); clk_put(xtal_clk); apll = s5p_get_pll45xx(xtal, __raw_readl(S5P64X0_APLL_CON), pll_4502); mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P64X0_MPLL_CON), pll_4502); epll = s5p_get_pll90xx(xtal, __raw_readl(S5P64X0_EPLL_CON), __raw_readl(S5P64X0_EPLL_CON_K)); dpll = s5p_get_pll46xx(xtal, __raw_readl(S5P6450_DPLL_CON), __raw_readl(S5P6450_DPLL_CON_K), pll_4650c); clk_fout_apll.rate = apll; clk_fout_mpll.rate = mpll; clk_fout_epll.rate = epll; clk_fout_dpll.rate = dpll; printk(KERN_INFO "S5P6450: PLL settings, A=%ld.%ldMHz, M=%ld.%ldMHz," \ " E=%ld.%ldMHz, D=%ld.%ldMHz\n", print_mhz(apll), print_mhz(mpll), print_mhz(epll), print_mhz(dpll)); fclk = clk_get_rate(&clk_armclk.clk); hclk = clk_get_rate(&clk_hclk.clk); pclk = clk_get_rate(&clk_pclk.clk); hclk_low = clk_get_rate(&clk_hclk_low.clk); pclk_low = clk_get_rate(&clk_pclk_low.clk); printk(KERN_INFO "S5P6450: HCLK=%ld.%ldMHz, HCLK_LOW=%ld.%ldMHz," \ " PCLK=%ld.%ldMHz, PCLK_LOW=%ld.%ldMHz\n", print_mhz(hclk), print_mhz(hclk_low), print_mhz(pclk), print_mhz(pclk_low)); clk_f.rate = fclk; clk_h.rate = hclk; clk_p.rate = pclk; for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++) s3c_set_clksrc(&clksrcs[ptr], true); }
void __init_or_cpufreq s5p6450_setup_clocks(void) { struct clk *xtal_clk; unsigned long xtal; unsigned long fclk; unsigned long hclk; unsigned long hclk_low; unsigned long pclk; unsigned long pclk_low; unsigned long epll; unsigned long dpll; unsigned long apll; unsigned long mpll; unsigned int ptr; /* Set S5P6450 functions for clk_fout_epll */ clk_fout_epll.enable = s5p6450_epll_enable; clk_fout_epll.ops = &s5p6450_epll_ops; clk_48m.enable = s5p6450_clk48m_ctrl; xtal_clk = clk_get(NULL, "ext_xtal"); BUG_ON(IS_ERR(xtal_clk)); xtal = clk_get_rate(xtal_clk); clk_put(xtal_clk); epll = s5p_get_pll90xx(xtal, __raw_readl(S5P_EPLL_CON), __raw_readl(S5P_EPLL_CON_K)); dpll = s5p_get_pll46xx(xtal, __raw_readl(S5P_DPLL_CON), __raw_readl(S5P_DPLL_CON_K), pll_4650c); mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON), pll_4502); apll = s5p_get_pll45xx(xtal, __raw_readl(S5P_APLL_CON), pll_4502); clk_fout_mpll.rate = mpll; clk_fout_epll.rate = epll; clk_fout_dpll.rate = dpll; clk_fout_apll.rate = apll; ctable.apll_rate = clk_fout_apll.rate/1000000; switch (ctable.apll_rate) { case IS_ARM_800 : ctable.clock_table_size = ARRAY_SIZE(clock_table_800); ctable.clock_table = clock_table_800; break; case IS_ARM_667: ctable.clock_table_size = ARRAY_SIZE(clock_table_667); ctable.clock_table = clock_table_667; break; case IS_ARM_533: ctable.clock_table_size = ARRAY_SIZE(clock_table_533); ctable.clock_table = clock_table_533; break; default: printk("------------------------- UNKNOW FREQ WARNING !!!!!!!!!--------------- e \n"); } /* if(ctable.apll_rate == IS_ARM_667){ printk("----------------------------------------- 667 Freq table \n"); ctable.clock_table_size = ARRAY_SIZE(clock_table_667); ctable.clock_table = clock_table_667; }else if(ctable.apll_rate == IS_ARM_533) { printk("----------------------------------------- 533 Freq table \n"); ctable.clock_table_size = ARRAY_SIZE(clock_table_533); ctable.clock_table = clock_table_533; } */ printk(KERN_INFO "S5P6450: PLL settings, A=%ld.%ldMHz, M=%ld.%ldMHz," \ " E=%ld.%ldMHz, D=%ld.%ldMHz\n", print_mhz(apll), print_mhz(mpll), print_mhz(epll), print_mhz(dpll)); fclk = clk_get_rate(&clk_armclk.clk); hclk = clk_get_rate(&clk_hclk166.clk); pclk = clk_get_rate(&clk_pclk83.clk); hclk_low = clk_get_rate(&clk_hclk133.clk); pclk_low = clk_get_rate(&clk_pclk66.clk); printk(KERN_INFO "S5P6450: HCLK166=%ld.%ldMHz, HCLK133=%ld.%ldMHz," \ " PCLK83=%ld.%ldMHz, PCLK66=%ld.%ldMHz\n", print_mhz(hclk), print_mhz(hclk_low), print_mhz(pclk), print_mhz(pclk_low)); clk_f.rate = fclk; clk_h.rate = hclk; clk_p.rate = pclk; clk_h_low.rate = hclk_low; for (ptr = 0; ptr < ARRAY_SIZE(clksrc_audio); ptr++) s3c_set_clksrc(clksrc_audio + ptr, true); for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++) s3c_set_clksrc(&clksrcs[ptr], true); }