Created
December 14, 2015 00:14
-
-
Save aeickho/ab3954b7212d65bb2732 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -r -u ath79.3.10/clock.c ath79.3.18/clock.c | |
--- ath79.3.10/clock.c 2015-12-14 01:12:20.413654166 +0100 | |
+++ ath79.3.18/clock.c 2015-12-14 01:11:45.206275171 +0100 | |
@@ -16,6 +16,7 @@ | |
#include <linux/init.h> | |
#include <linux/err.h> | |
#include <linux/clk.h> | |
+#include <linux/clkdev.h> | |
#include <asm/div64.h> | |
@@ -31,92 +32,132 @@ | |
unsigned long rate; | |
}; | |
-static struct clk ath79_ref_clk; | |
-static struct clk ath79_cpu_clk; | |
-static struct clk ath79_ddr_clk; | |
-static struct clk ath79_ahb_clk; | |
-static struct clk ath79_wdt_clk; | |
-static struct clk ath79_uart_clk; | |
+static void __init ath79_add_sys_clkdev(const char *id, unsigned long rate) | |
+{ | |
+ struct clk *clk; | |
+ int err; | |
+ | |
+ clk = kzalloc(sizeof(*clk), GFP_KERNEL); | |
+ if (!clk) | |
+ panic("failed to allocate %s clock structure", id); | |
+ | |
+ clk->rate = rate; | |
+ | |
+ err = clk_register_clkdev(clk, id, NULL); | |
+ if (err) | |
+ panic("unable to register %s clock device", id); | |
+} | |
static void __init ar71xx_clocks_init(void) | |
{ | |
+ unsigned long ref_rate; | |
+ unsigned long cpu_rate; | |
+ unsigned long ddr_rate; | |
+ unsigned long ahb_rate; | |
u32 pll; | |
u32 freq; | |
u32 div; | |
- ath79_ref_clk.rate = AR71XX_BASE_FREQ; | |
+ ref_rate = AR71XX_BASE_FREQ; | |
pll = ath79_pll_rr(AR71XX_PLL_REG_CPU_CONFIG); | |
div = ((pll >> AR71XX_PLL_DIV_SHIFT) & AR71XX_PLL_DIV_MASK) + 1; | |
- freq = div * ath79_ref_clk.rate; | |
+ freq = div * ref_rate; | |
div = ((pll >> AR71XX_CPU_DIV_SHIFT) & AR71XX_CPU_DIV_MASK) + 1; | |
- ath79_cpu_clk.rate = freq / div; | |
+ cpu_rate = freq / div; | |
div = ((pll >> AR71XX_DDR_DIV_SHIFT) & AR71XX_DDR_DIV_MASK) + 1; | |
- ath79_ddr_clk.rate = freq / div; | |
+ ddr_rate = freq / div; | |
div = (((pll >> AR71XX_AHB_DIV_SHIFT) & AR71XX_AHB_DIV_MASK) + 1) * 2; | |
- ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | |
+ ahb_rate = cpu_rate / div; | |
+ | |
+ ath79_add_sys_clkdev("ref", ref_rate); | |
+ ath79_add_sys_clkdev("cpu", cpu_rate); | |
+ ath79_add_sys_clkdev("ddr", ddr_rate); | |
+ ath79_add_sys_clkdev("ahb", ahb_rate); | |
- ath79_wdt_clk.rate = ath79_ahb_clk.rate; | |
- ath79_uart_clk.rate = ath79_ahb_clk.rate; | |
+ clk_add_alias("wdt", NULL, "ahb", NULL); | |
+ clk_add_alias("uart", NULL, "ahb", NULL); | |
} | |
static void __init ar724x_clocks_init(void) | |
{ | |
+ unsigned long ref_rate; | |
+ unsigned long cpu_rate; | |
+ unsigned long ddr_rate; | |
+ unsigned long ahb_rate; | |
u32 pll; | |
u32 freq; | |
u32 div; | |
- ath79_ref_clk.rate = AR724X_BASE_FREQ; | |
+ ref_rate = AR724X_BASE_FREQ; | |
pll = ath79_pll_rr(AR724X_PLL_REG_CPU_CONFIG); | |
div = ((pll >> AR724X_PLL_DIV_SHIFT) & AR724X_PLL_DIV_MASK); | |
- freq = div * ath79_ref_clk.rate; | |
+ freq = div * ref_rate; | |
div = ((pll >> AR724X_PLL_REF_DIV_SHIFT) & AR724X_PLL_REF_DIV_MASK); | |
freq *= div; | |
- ath79_cpu_clk.rate = freq; | |
+ cpu_rate = freq; | |
div = ((pll >> AR724X_DDR_DIV_SHIFT) & AR724X_DDR_DIV_MASK) + 1; | |
- ath79_ddr_clk.rate = freq / div; | |
+ ddr_rate = freq / div; | |
div = (((pll >> AR724X_AHB_DIV_SHIFT) & AR724X_AHB_DIV_MASK) + 1) * 2; | |
- ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | |
+ ahb_rate = cpu_rate / div; | |
+ | |
+ ath79_add_sys_clkdev("ref", ref_rate); | |
+ ath79_add_sys_clkdev("cpu", cpu_rate); | |
+ ath79_add_sys_clkdev("ddr", ddr_rate); | |
+ ath79_add_sys_clkdev("ahb", ahb_rate); | |
- ath79_wdt_clk.rate = ath79_ahb_clk.rate; | |
- ath79_uart_clk.rate = ath79_ahb_clk.rate; | |
+ clk_add_alias("wdt", NULL, "ahb", NULL); | |
+ clk_add_alias("uart", NULL, "ahb", NULL); | |
} | |
static void __init ar913x_clocks_init(void) | |
{ | |
+ unsigned long ref_rate; | |
+ unsigned long cpu_rate; | |
+ unsigned long ddr_rate; | |
+ unsigned long ahb_rate; | |
u32 pll; | |
u32 freq; | |
u32 div; | |
- ath79_ref_clk.rate = AR913X_BASE_FREQ; | |
+ ref_rate = AR913X_BASE_FREQ; | |
pll = ath79_pll_rr(AR913X_PLL_REG_CPU_CONFIG); | |
div = ((pll >> AR913X_PLL_DIV_SHIFT) & AR913X_PLL_DIV_MASK); | |
- freq = div * ath79_ref_clk.rate; | |
+ freq = div * ref_rate; | |
- ath79_cpu_clk.rate = freq; | |
+ cpu_rate = freq; | |
div = ((pll >> AR913X_DDR_DIV_SHIFT) & AR913X_DDR_DIV_MASK) + 1; | |
- ath79_ddr_clk.rate = freq / div; | |
+ ddr_rate = freq / div; | |
div = (((pll >> AR913X_AHB_DIV_SHIFT) & AR913X_AHB_DIV_MASK) + 1) * 2; | |
- ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | |
+ ahb_rate = cpu_rate / div; | |
- ath79_wdt_clk.rate = ath79_ahb_clk.rate; | |
- ath79_uart_clk.rate = ath79_ahb_clk.rate; | |
+ ath79_add_sys_clkdev("ref", ref_rate); | |
+ ath79_add_sys_clkdev("cpu", cpu_rate); | |
+ ath79_add_sys_clkdev("ddr", ddr_rate); | |
+ ath79_add_sys_clkdev("ahb", ahb_rate); | |
+ | |
+ clk_add_alias("wdt", NULL, "ahb", NULL); | |
+ clk_add_alias("uart", NULL, "ahb", NULL); | |
} | |
static void __init ar933x_clocks_init(void) | |
{ | |
+ unsigned long ref_rate; | |
+ unsigned long cpu_rate; | |
+ unsigned long ddr_rate; | |
+ unsigned long ahb_rate; | |
u32 clock_ctrl; | |
u32 cpu_config; | |
u32 freq; | |
@@ -124,21 +165,21 @@ | |
t = ath79_reset_rr(AR933X_RESET_REG_BOOTSTRAP); | |
if (t & AR933X_BOOTSTRAP_REF_CLK_40) | |
- ath79_ref_clk.rate = (40 * 1000 * 1000); | |
+ ref_rate = (40 * 1000 * 1000); | |
else | |
- ath79_ref_clk.rate = (25 * 1000 * 1000); | |
+ ref_rate = (25 * 1000 * 1000); | |
clock_ctrl = ath79_pll_rr(AR933X_PLL_CLOCK_CTRL_REG); | |
if (clock_ctrl & AR933X_PLL_CLOCK_CTRL_BYPASS) { | |
- ath79_cpu_clk.rate = ath79_ref_clk.rate; | |
- ath79_ahb_clk.rate = ath79_ref_clk.rate; | |
- ath79_ddr_clk.rate = ath79_ref_clk.rate; | |
+ cpu_rate = ref_rate; | |
+ ahb_rate = ref_rate; | |
+ ddr_rate = ref_rate; | |
} else { | |
cpu_config = ath79_pll_rr(AR933X_PLL_CPU_CONFIG_REG); | |
t = (cpu_config >> AR933X_PLL_CPU_CONFIG_REFDIV_SHIFT) & | |
AR933X_PLL_CPU_CONFIG_REFDIV_MASK; | |
- freq = ath79_ref_clk.rate / t; | |
+ freq = ref_rate / t; | |
t = (cpu_config >> AR933X_PLL_CPU_CONFIG_NINT_SHIFT) & | |
AR933X_PLL_CPU_CONFIG_NINT_MASK; | |
@@ -153,19 +194,24 @@ | |
t = ((clock_ctrl >> AR933X_PLL_CLOCK_CTRL_CPU_DIV_SHIFT) & | |
AR933X_PLL_CLOCK_CTRL_CPU_DIV_MASK) + 1; | |
- ath79_cpu_clk.rate = freq / t; | |
+ cpu_rate = freq / t; | |
t = ((clock_ctrl >> AR933X_PLL_CLOCK_CTRL_DDR_DIV_SHIFT) & | |
AR933X_PLL_CLOCK_CTRL_DDR_DIV_MASK) + 1; | |
- ath79_ddr_clk.rate = freq / t; | |
+ ddr_rate = freq / t; | |
t = ((clock_ctrl >> AR933X_PLL_CLOCK_CTRL_AHB_DIV_SHIFT) & | |
AR933X_PLL_CLOCK_CTRL_AHB_DIV_MASK) + 1; | |
- ath79_ahb_clk.rate = freq / t; | |
+ ahb_rate = freq / t; | |
} | |
- ath79_wdt_clk.rate = ath79_ahb_clk.rate; | |
- ath79_uart_clk.rate = ath79_ref_clk.rate; | |
+ ath79_add_sys_clkdev("ref", ref_rate); | |
+ ath79_add_sys_clkdev("cpu", cpu_rate); | |
+ ath79_add_sys_clkdev("ddr", ddr_rate); | |
+ ath79_add_sys_clkdev("ahb", ahb_rate); | |
+ | |
+ clk_add_alias("wdt", NULL, "ahb", NULL); | |
+ clk_add_alias("uart", NULL, "ref", NULL); | |
} | |
static u32 __init ar934x_get_pll_freq(u32 ref, u32 ref_div, u32 nint, u32 nfrac, | |
@@ -174,12 +220,12 @@ | |
u64 t; | |
u32 ret; | |
- t = ath79_ref_clk.rate; | |
+ t = ref; | |
t *= nint; | |
do_div(t, ref_div); | |
ret = t; | |
- t = ath79_ref_clk.rate; | |
+ t = ref; | |
t *= nfrac; | |
do_div(t, ref_div * frac); | |
ret += t; | |
@@ -190,6 +236,10 @@ | |
static void __init ar934x_clocks_init(void) | |
{ | |
+ unsigned long ref_rate; | |
+ unsigned long cpu_rate; | |
+ unsigned long ddr_rate; | |
+ unsigned long ahb_rate; | |
u32 pll, out_div, ref_div, nint, nfrac, frac, clk_ctrl, postdiv; | |
u32 cpu_pll, ddr_pll; | |
u32 bootstrap; | |
@@ -199,9 +249,9 @@ | |
bootstrap = ath79_reset_rr(AR934X_RESET_REG_BOOTSTRAP); | |
if (bootstrap & AR934X_BOOTSTRAP_REF_CLK_40) | |
- ath79_ref_clk.rate = 40 * 1000 * 1000; | |
+ ref_rate = 40 * 1000 * 1000; | |
else | |
- ath79_ref_clk.rate = 25 * 1000 * 1000; | |
+ ref_rate = 25 * 1000 * 1000; | |
pll = __raw_readl(dpll_base + AR934X_SRIF_CPU_DPLL2_REG); | |
if (pll & AR934X_SRIF_DPLL2_LOCAL_PLL) { | |
@@ -227,7 +277,7 @@ | |
frac = 1 << 6; | |
} | |
- cpu_pll = ar934x_get_pll_freq(ath79_ref_clk.rate, ref_div, nint, | |
+ cpu_pll = ar934x_get_pll_freq(ref_rate, ref_div, nint, | |
nfrac, frac, out_div); | |
pll = __raw_readl(dpll_base + AR934X_SRIF_DDR_DPLL2_REG); | |
@@ -254,7 +304,7 @@ | |
frac = 1 << 10; | |
} | |
- ddr_pll = ar934x_get_pll_freq(ath79_ref_clk.rate, ref_div, nint, | |
+ ddr_pll = ar934x_get_pll_freq(ref_rate, ref_div, nint, | |
nfrac, frac, out_div); | |
clk_ctrl = ath79_pll_rr(AR934X_PLL_CPU_DDR_CLK_CTRL_REG); | |
@@ -263,49 +313,58 @@ | |
AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_POST_DIV_MASK; | |
if (clk_ctrl & AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_PLL_BYPASS) | |
- ath79_cpu_clk.rate = ath79_ref_clk.rate; | |
+ cpu_rate = ref_rate; | |
else if (clk_ctrl & AR934X_PLL_CPU_DDR_CLK_CTRL_CPUCLK_FROM_CPUPLL) | |
- ath79_cpu_clk.rate = cpu_pll / (postdiv + 1); | |
+ cpu_rate = cpu_pll / (postdiv + 1); | |
else | |
- ath79_cpu_clk.rate = ddr_pll / (postdiv + 1); | |
+ cpu_rate = ddr_pll / (postdiv + 1); | |
postdiv = (clk_ctrl >> AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_POST_DIV_SHIFT) & | |
AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_POST_DIV_MASK; | |
if (clk_ctrl & AR934X_PLL_CPU_DDR_CLK_CTRL_DDR_PLL_BYPASS) | |
- ath79_ddr_clk.rate = ath79_ref_clk.rate; | |
+ ddr_rate = ref_rate; | |
else if (clk_ctrl & AR934X_PLL_CPU_DDR_CLK_CTRL_DDRCLK_FROM_DDRPLL) | |
- ath79_ddr_clk.rate = ddr_pll / (postdiv + 1); | |
+ ddr_rate = ddr_pll / (postdiv + 1); | |
else | |
- ath79_ddr_clk.rate = cpu_pll / (postdiv + 1); | |
+ ddr_rate = cpu_pll / (postdiv + 1); | |
postdiv = (clk_ctrl >> AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_POST_DIV_SHIFT) & | |
AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_POST_DIV_MASK; | |
if (clk_ctrl & AR934X_PLL_CPU_DDR_CLK_CTRL_AHB_PLL_BYPASS) | |
- ath79_ahb_clk.rate = ath79_ref_clk.rate; | |
+ ahb_rate = ref_rate; | |
else if (clk_ctrl & AR934X_PLL_CPU_DDR_CLK_CTRL_AHBCLK_FROM_DDRPLL) | |
- ath79_ahb_clk.rate = ddr_pll / (postdiv + 1); | |
+ ahb_rate = ddr_pll / (postdiv + 1); | |
else | |
- ath79_ahb_clk.rate = cpu_pll / (postdiv + 1); | |
+ ahb_rate = cpu_pll / (postdiv + 1); | |
+ | |
+ ath79_add_sys_clkdev("ref", ref_rate); | |
+ ath79_add_sys_clkdev("cpu", cpu_rate); | |
+ ath79_add_sys_clkdev("ddr", ddr_rate); | |
+ ath79_add_sys_clkdev("ahb", ahb_rate); | |
- ath79_wdt_clk.rate = ath79_ref_clk.rate; | |
- ath79_uart_clk.rate = ath79_ref_clk.rate; | |
+ clk_add_alias("wdt", NULL, "ref", NULL); | |
+ clk_add_alias("uart", NULL, "ref", NULL); | |
iounmap(dpll_base); | |
} | |
static void __init qca955x_clocks_init(void) | |
{ | |
+ unsigned long ref_rate; | |
+ unsigned long cpu_rate; | |
+ unsigned long ddr_rate; | |
+ unsigned long ahb_rate; | |
u32 pll, out_div, ref_div, nint, frac, clk_ctrl, postdiv; | |
u32 cpu_pll, ddr_pll; | |
u32 bootstrap; | |
bootstrap = ath79_reset_rr(QCA955X_RESET_REG_BOOTSTRAP); | |
if (bootstrap & QCA955X_BOOTSTRAP_REF_CLK_40) | |
- ath79_ref_clk.rate = 40 * 1000 * 1000; | |
+ ref_rate = 40 * 1000 * 1000; | |
else | |
- ath79_ref_clk.rate = 25 * 1000 * 1000; | |
+ ref_rate = 25 * 1000 * 1000; | |
pll = ath79_pll_rr(QCA955X_PLL_CPU_CONFIG_REG); | |
out_div = (pll >> QCA955X_PLL_CPU_CONFIG_OUTDIV_SHIFT) & | |
@@ -317,8 +376,8 @@ | |
frac = (pll >> QCA955X_PLL_CPU_CONFIG_NFRAC_SHIFT) & | |
QCA955X_PLL_CPU_CONFIG_NFRAC_MASK; | |
- cpu_pll = nint * ath79_ref_clk.rate / ref_div; | |
- cpu_pll += frac * ath79_ref_clk.rate / (ref_div * (1 << 6)); | |
+ cpu_pll = nint * ref_rate / ref_div; | |
+ cpu_pll += frac * ref_rate / (ref_div * (1 << 6)); | |
cpu_pll /= (1 << out_div); | |
pll = ath79_pll_rr(QCA955X_PLL_DDR_CONFIG_REG); | |
@@ -331,8 +390,8 @@ | |
frac = (pll >> QCA955X_PLL_DDR_CONFIG_NFRAC_SHIFT) & | |
QCA955X_PLL_DDR_CONFIG_NFRAC_MASK; | |
- ddr_pll = nint * ath79_ref_clk.rate / ref_div; | |
- ddr_pll += frac * ath79_ref_clk.rate / (ref_div * (1 << 10)); | |
+ ddr_pll = nint * ref_rate / ref_div; | |
+ ddr_pll += frac * ref_rate / (ref_div * (1 << 10)); | |
ddr_pll /= (1 << out_div); | |
clk_ctrl = ath79_pll_rr(QCA955X_PLL_CLK_CTRL_REG); | |
@@ -341,34 +400,39 @@ | |
QCA955X_PLL_CLK_CTRL_CPU_POST_DIV_MASK; | |
if (clk_ctrl & QCA955X_PLL_CLK_CTRL_CPU_PLL_BYPASS) | |
- ath79_cpu_clk.rate = ath79_ref_clk.rate; | |
+ cpu_rate = ref_rate; | |
else if (clk_ctrl & QCA955X_PLL_CLK_CTRL_CPUCLK_FROM_CPUPLL) | |
- ath79_cpu_clk.rate = ddr_pll / (postdiv + 1); | |
+ cpu_rate = ddr_pll / (postdiv + 1); | |
else | |
- ath79_cpu_clk.rate = cpu_pll / (postdiv + 1); | |
+ cpu_rate = cpu_pll / (postdiv + 1); | |
postdiv = (clk_ctrl >> QCA955X_PLL_CLK_CTRL_DDR_POST_DIV_SHIFT) & | |
QCA955X_PLL_CLK_CTRL_DDR_POST_DIV_MASK; | |
if (clk_ctrl & QCA955X_PLL_CLK_CTRL_DDR_PLL_BYPASS) | |
- ath79_ddr_clk.rate = ath79_ref_clk.rate; | |
+ ddr_rate = ref_rate; | |
else if (clk_ctrl & QCA955X_PLL_CLK_CTRL_DDRCLK_FROM_DDRPLL) | |
- ath79_ddr_clk.rate = cpu_pll / (postdiv + 1); | |
+ ddr_rate = cpu_pll / (postdiv + 1); | |
else | |
- ath79_ddr_clk.rate = ddr_pll / (postdiv + 1); | |
+ ddr_rate = ddr_pll / (postdiv + 1); | |
postdiv = (clk_ctrl >> QCA955X_PLL_CLK_CTRL_AHB_POST_DIV_SHIFT) & | |
QCA955X_PLL_CLK_CTRL_AHB_POST_DIV_MASK; | |
if (clk_ctrl & QCA955X_PLL_CLK_CTRL_AHB_PLL_BYPASS) | |
- ath79_ahb_clk.rate = ath79_ref_clk.rate; | |
+ ahb_rate = ref_rate; | |
else if (clk_ctrl & QCA955X_PLL_CLK_CTRL_AHBCLK_FROM_DDRPLL) | |
- ath79_ahb_clk.rate = ddr_pll / (postdiv + 1); | |
+ ahb_rate = ddr_pll / (postdiv + 1); | |
else | |
- ath79_ahb_clk.rate = cpu_pll / (postdiv + 1); | |
+ ahb_rate = cpu_pll / (postdiv + 1); | |
- ath79_wdt_clk.rate = ath79_ref_clk.rate; | |
- ath79_uart_clk.rate = ath79_ref_clk.rate; | |
+ ath79_add_sys_clkdev("ref", ref_rate); | |
+ ath79_add_sys_clkdev("cpu", cpu_rate); | |
+ ath79_add_sys_clkdev("ddr", ddr_rate); | |
+ ath79_add_sys_clkdev("ahb", ahb_rate); | |
+ | |
+ clk_add_alias("wdt", NULL, "ref", NULL); | |
+ clk_add_alias("uart", NULL, "ref", NULL); | |
} | |
void __init ath79_clocks_init(void) | |
@@ -387,46 +451,27 @@ | |
qca955x_clocks_init(); | |
else | |
BUG(); | |
- | |
- pr_info("Clocks: CPU:%lu.%03luMHz, DDR:%lu.%03luMHz, AHB:%lu.%03luMHz, " | |
- "Ref:%lu.%03luMHz", | |
- ath79_cpu_clk.rate / 1000000, | |
- (ath79_cpu_clk.rate / 1000) % 1000, | |
- ath79_ddr_clk.rate / 1000000, | |
- (ath79_ddr_clk.rate / 1000) % 1000, | |
- ath79_ahb_clk.rate / 1000000, | |
- (ath79_ahb_clk.rate / 1000) % 1000, | |
- ath79_ref_clk.rate / 1000000, | |
- (ath79_ref_clk.rate / 1000) % 1000); | |
} | |
-/* | |
- * Linux clock API | |
- */ | |
-struct clk *clk_get(struct device *dev, const char *id) | |
+unsigned long __init | |
+ath79_get_sys_clk_rate(const char *id) | |
{ | |
- if (!strcmp(id, "ref")) | |
- return &ath79_ref_clk; | |
- | |
- if (!strcmp(id, "cpu")) | |
- return &ath79_cpu_clk; | |
- | |
- if (!strcmp(id, "ddr")) | |
- return &ath79_ddr_clk; | |
- | |
- if (!strcmp(id, "ahb")) | |
- return &ath79_ahb_clk; | |
+ struct clk *clk; | |
+ unsigned long rate; | |
- if (!strcmp(id, "wdt")) | |
- return &ath79_wdt_clk; | |
+ clk = clk_get(NULL, id); | |
+ if (IS_ERR(clk)) | |
+ panic("unable to get %s clock, err=%d", id, (int) PTR_ERR(clk)); | |
- if (!strcmp(id, "uart")) | |
- return &ath79_uart_clk; | |
+ rate = clk_get_rate(clk); | |
+ clk_put(clk); | |
- return ERR_PTR(-ENOENT); | |
+ return rate; | |
} | |
-EXPORT_SYMBOL(clk_get); | |
+/* | |
+ * Linux clock API | |
+ */ | |
int clk_enable(struct clk *clk) | |
{ | |
return 0; | |
@@ -443,8 +488,3 @@ | |
return clk->rate; | |
} | |
EXPORT_SYMBOL(clk_get_rate); | |
- | |
-void clk_put(struct clk *clk) | |
-{ | |
-} | |
-EXPORT_SYMBOL(clk_put); | |
diff -r -u ath79.3.10/common.h ath79.3.18/common.h | |
--- ath79.3.10/common.h 2015-12-14 01:12:20.413654166 +0100 | |
+++ ath79.3.18/common.h 2015-12-14 01:11:45.190275452 +0100 | |
@@ -15,12 +15,13 @@ | |
#define __ATH79_COMMON_H | |
#include <linux/types.h> | |
-#include <linux/init.h> | |
#define ATH79_MEM_SIZE_MIN (2 * 1024 * 1024) | |
#define ATH79_MEM_SIZE_MAX (128 * 1024 * 1024) | |
void ath79_clocks_init(void); | |
+unsigned long ath79_get_sys_clk_rate(const char *id); | |
+ | |
void ath79_ddr_wb_flush(unsigned int reg); | |
void ath79_gpio_function_enable(u32 mask); | |
diff -r -u ath79.3.10/dev-common.c ath79.3.18/dev-common.c | |
--- ath79.3.10/dev-common.c 2015-12-14 01:12:20.413654166 +0100 | |
+++ ath79.3.18/dev-common.c 2015-12-14 01:11:45.122276652 +0100 | |
@@ -20,7 +20,6 @@ | |
#include <asm/mach-ath79/ath79.h> | |
#include <asm/mach-ath79/ar71xx_regs.h> | |
-#include <asm/mach-ath79/ar933x_uart_platform.h> | |
#include "common.h" | |
#include "dev-common.h" | |
@@ -68,34 +67,27 @@ | |
}, | |
}; | |
-static struct ar933x_uart_platform_data ar933x_uart_data; | |
static struct platform_device ar933x_uart_device = { | |
.name = "ar933x-uart", | |
.id = -1, | |
.resource = ar933x_uart_resources, | |
.num_resources = ARRAY_SIZE(ar933x_uart_resources), | |
- .dev = { | |
- .platform_data = &ar933x_uart_data, | |
- }, | |
}; | |
void __init ath79_register_uart(void) | |
{ | |
- struct clk *clk; | |
+ unsigned long uart_clk_rate; | |
- clk = clk_get(NULL, "uart"); | |
- if (IS_ERR(clk)) | |
- panic("unable to get UART clock, err=%ld", PTR_ERR(clk)); | |
+ uart_clk_rate = ath79_get_sys_clk_rate("uart"); | |
if (soc_is_ar71xx() || | |
soc_is_ar724x() || | |
soc_is_ar913x() || | |
soc_is_ar934x() || | |
soc_is_qca955x()) { | |
- ath79_uart_data[0].uartclk = clk_get_rate(clk); | |
+ ath79_uart_data[0].uartclk = uart_clk_rate; | |
platform_device_register(&ath79_uart_device); | |
} else if (soc_is_ar933x()) { | |
- ar933x_uart_data.uartclk = clk_get_rate(clk); | |
platform_device_register(&ar933x_uart_device); | |
} else { | |
BUG(); | |
diff -r -u ath79.3.10/Kconfig ath79.3.18/Kconfig | |
--- ath79.3.10/Kconfig 2015-12-14 01:12:20.413654166 +0100 | |
+++ ath79.3.18/Kconfig 2015-12-14 01:11:45.094277146 +0100 | |
@@ -74,34 +74,26 @@ | |
endmenu | |
config SOC_AR71XX | |
- select USB_ARCH_HAS_EHCI | |
- select USB_ARCH_HAS_OHCI | |
select HW_HAS_PCI | |
def_bool n | |
config SOC_AR724X | |
- select USB_ARCH_HAS_EHCI | |
- select USB_ARCH_HAS_OHCI | |
select HW_HAS_PCI | |
select PCI_AR724X if PCI | |
def_bool n | |
config SOC_AR913X | |
- select USB_ARCH_HAS_EHCI | |
def_bool n | |
config SOC_AR933X | |
- select USB_ARCH_HAS_EHCI | |
def_bool n | |
config SOC_AR934X | |
- select USB_ARCH_HAS_EHCI | |
select HW_HAS_PCI | |
select PCI_AR724X if PCI | |
def_bool n | |
config SOC_QCA955X | |
- select USB_ARCH_HAS_EHCI | |
select HW_HAS_PCI | |
select PCI_AR724X if PCI | |
def_bool n | |
diff -r -u ath79.3.10/mach-ap136.c ath79.3.18/mach-ap136.c | |
--- ath79.3.10/mach-ap136.c 2015-12-14 01:12:20.413654166 +0100 | |
+++ ath79.3.18/mach-ap136.c 2015-12-14 01:11:45.198275310 +0100 | |
@@ -132,7 +132,7 @@ | |
ath79_register_pci(); | |
} | |
#else | |
-static inline void ap136_pci_init(void) {} | |
+static inline void ap136_pci_init(u8 *eeprom) {} | |
#endif /* CONFIG_PCI */ | |
static void __init ap136_setup(void) | |
diff -r -u ath79.3.10/mach-db120.c ath79.3.18/mach-db120.c | |
--- ath79.3.10/mach-db120.c 2015-12-14 01:12:20.413654166 +0100 | |
+++ ath79.3.18/mach-db120.c 2015-12-14 01:11:45.050277921 +0100 | |
@@ -113,7 +113,7 @@ | |
ath79_register_pci(); | |
} | |
#else | |
-static inline void db120_pci_init(void) {} | |
+static inline void db120_pci_init(u8 *eeprom) {} | |
#endif /* CONFIG_PCI */ | |
static void __init db120_setup(void) | |
diff -r -u ath79.3.10/setup.c ath79.3.18/setup.c | |
--- ath79.3.10/setup.c 2015-12-14 01:12:20.413654166 +0100 | |
+++ ath79.3.18/setup.c 2015-12-14 01:11:45.110276863 +0100 | |
@@ -182,7 +182,7 @@ | |
return ath79_sys_type; | |
} | |
-unsigned int __cpuinit get_c0_compare_int(void) | |
+unsigned int get_c0_compare_int(void) | |
{ | |
return CP0_LEGACY_COMPARE_IRQ; | |
} | |
@@ -200,7 +200,6 @@ | |
ath79_detect_sys_type(); | |
detect_memory_region(0, ATH79_MEM_SIZE_MIN, ATH79_MEM_SIZE_MAX); | |
- ath79_clocks_init(); | |
_machine_restart = ath79_restart; | |
_machine_halt = ath79_halt; | |
@@ -209,13 +208,25 @@ | |
void __init plat_time_init(void) | |
{ | |
- struct clk *clk; | |
+ unsigned long cpu_clk_rate; | |
+ unsigned long ahb_clk_rate; | |
+ unsigned long ddr_clk_rate; | |
+ unsigned long ref_clk_rate; | |
+ | |
+ ath79_clocks_init(); | |
- clk = clk_get(NULL, "cpu"); | |
- if (IS_ERR(clk)) | |
- panic("unable to get CPU clock, err=%ld", PTR_ERR(clk)); | |
+ cpu_clk_rate = ath79_get_sys_clk_rate("cpu"); | |
+ ahb_clk_rate = ath79_get_sys_clk_rate("ahb"); | |
+ ddr_clk_rate = ath79_get_sys_clk_rate("ddr"); | |
+ ref_clk_rate = ath79_get_sys_clk_rate("ref"); | |
+ | |
+ pr_info("Clocks: CPU:%lu.%03luMHz, DDR:%lu.%03luMHz, AHB:%lu.%03luMHz, Ref:%lu.%03luMHz", | |
+ cpu_clk_rate / 1000000, (cpu_clk_rate / 1000) % 1000, | |
+ ddr_clk_rate / 1000000, (ddr_clk_rate / 1000) % 1000, | |
+ ahb_clk_rate / 1000000, (ahb_clk_rate / 1000) % 1000, | |
+ ref_clk_rate / 1000000, (ref_clk_rate / 1000) % 1000); | |
- mips_hpt_frequency = clk_get_rate(clk) / 2; | |
+ mips_hpt_frequency = cpu_clk_rate / 2; | |
} | |
static int __init ath79_setup(void) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment