Module Name: src Committed By: jmcneill Date: Mon Oct 9 14:01:59 UTC 2017
Modified Files: src/sys/arch/arm/sunxi: sun4i_a10_ccu.c sunxi_ccu.h sunxi_ccu_div.c Log Message: Add A10/A20 cpufreq scaling support To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/sunxi/sun4i_a10_ccu.c \ src/sys/arch/arm/sunxi/sunxi_ccu_div.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/sunxi/sunxi_ccu.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/sunxi/sun4i_a10_ccu.c diff -u src/sys/arch/arm/sunxi/sun4i_a10_ccu.c:1.3 src/sys/arch/arm/sunxi/sun4i_a10_ccu.c:1.4 --- src/sys/arch/arm/sunxi/sun4i_a10_ccu.c:1.3 Sat Oct 7 15:12:35 2017 +++ src/sys/arch/arm/sunxi/sun4i_a10_ccu.c Mon Oct 9 14:01:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: sun4i_a10_ccu.c,v 1.3 2017/10/07 15:12:35 jmcneill Exp $ */ +/* $NetBSD: sun4i_a10_ccu.c,v 1.4 2017/10/09 14:01:59 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca> @@ -28,7 +28,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: sun4i_a10_ccu.c,v 1.3 2017/10/07 15:12:35 jmcneill Exp $"); +__KERNEL_RCSID(1, "$NetBSD: sun4i_a10_ccu.c,v 1.4 2017/10/09 14:01:59 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -96,6 +96,18 @@ static const char *apb1_parents[] = { "o static const char *mod_parents[] = { "osc24m", "pll_periph", "pll_ddr" }; static const char *sata_parents[] = { "pll6_periph_sata", "external" }; +static const struct sunxi_ccu_nkmp_tbl sun4i_a10_pll1_table[] = { + { 1008000000, 21, 1, 0, 0 }, + { 960000000, 20, 1, 0, 0 }, + { 912000000, 19, 1, 0, 0 }, + { 864000000, 18, 1, 0, 0 }, + { 720000000, 30, 0, 0, 0 }, + { 528000000, 22, 0, 0, 0 }, + { 312000000, 13, 0, 0, 0 }, + { 144000000, 12, 0, 0, 1 }, + { 0 } +}; + static const struct sunxi_ccu_nkmp_tbl sun4i_a10_ac_dig_table[] = { { 24576000, 86, 0, 21, 3 }, { 0 } @@ -105,15 +117,17 @@ static struct sunxi_ccu_clk sun4i_a10_cc SUNXI_CCU_GATE(A10_CLK_HOSC, "osc24m", "hosc", OSC24M_CFG_REG, 0), - SUNXI_CCU_NKMP(A10_CLK_PLL_CORE, "pll_core", "osc24m", + SUNXI_CCU_NKMP_TABLE(A10_CLK_PLL_CORE, "pll_core", "osc24m", PLL1_CFG_REG, /* reg */ __BITS(12,8), /* n */ __BITS(5,4), /* k */ __BITS(1,0), /* m */ __BITS(17,16), /* p */ __BIT(31), /* enable */ + 0, /* lock */ + sun4i_a10_pll1_table, /* table */ SUNXI_CCU_NKMP_FACTOR_P_POW2 | SUNXI_CCU_NKMP_FACTOR_N_EXACT | - SUNXI_CCU_NKMP_FACTOR_N_ZERO_IS_ONE), + SUNXI_CCU_NKMP_FACTOR_N_ZERO_IS_ONE | SUNXI_CCU_NKMP_SCALE_CLOCK), SUNXI_CCU_NKMP_TABLE(A10_CLK_PLL_AUDIO_BASE, "pll_audio", "osc24m", PLL2_CFG_REG, /* reg */ @@ -158,7 +172,7 @@ static struct sunxi_ccu_clk sun4i_a10_cc CPU_AHB_APB0_CFG_REG, /* reg */ 0, /* div */ __BITS(17,16), /* sel */ - 0), + SUNXI_CCU_DIV_SET_RATE_PARENT), SUNXI_CCU_DIV(A10_CLK_AXI, "axi", axi_parents, CPU_AHB_APB0_CFG_REG, /* reg */ Index: src/sys/arch/arm/sunxi/sunxi_ccu_div.c diff -u src/sys/arch/arm/sunxi/sunxi_ccu_div.c:1.3 src/sys/arch/arm/sunxi/sunxi_ccu_div.c:1.4 --- src/sys/arch/arm/sunxi/sunxi_ccu_div.c:1.3 Thu Oct 5 01:28:47 2017 +++ src/sys/arch/arm/sunxi/sunxi_ccu_div.c Mon Oct 9 14:01:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_ccu_div.c,v 1.3 2017/10/05 01:28:47 jmcneill Exp $ */ +/* $NetBSD: sunxi_ccu_div.c,v 1.4 2017/10/09 14:01:59 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu_div.c,v 1.3 2017/10/05 01:28:47 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu_div.c,v 1.4 2017/10/09 14:01:59 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -114,8 +114,12 @@ sunxi_ccu_div_set_rate(struct sunxi_ccu_ if (clkp_parent == NULL) return ENXIO; - if (div->div == 0) - return ENXIO; + if (div->div == 0) { + if ((div->flags & SUNXI_CCU_DIV_SET_RATE_PARENT) != 0) + return clk_set_rate(clkp_parent, new_rate); + else + return ENXIO; + } val = CCU_READ(sc, div->reg); Index: src/sys/arch/arm/sunxi/sunxi_ccu.h diff -u src/sys/arch/arm/sunxi/sunxi_ccu.h:1.13 src/sys/arch/arm/sunxi/sunxi_ccu.h:1.14 --- src/sys/arch/arm/sunxi/sunxi_ccu.h:1.13 Fri Oct 6 21:09:21 2017 +++ src/sys/arch/arm/sunxi/sunxi_ccu.h Mon Oct 9 14:01:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_ccu.h,v 1.13 2017/10/06 21:09:21 jmcneill Exp $ */ +/* $NetBSD: sunxi_ccu.h,v 1.14 2017/10/09 14:01:59 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca> @@ -206,6 +206,7 @@ struct sunxi_ccu_div { #define SUNXI_CCU_DIV_POWER_OF_TWO __BIT(0) #define SUNXI_CCU_DIV_ZERO_IS_ONE __BIT(1) #define SUNXI_CCU_DIV_TIMES_TWO __BIT(2) +#define SUNXI_CCU_DIV_SET_RATE_PARENT __BIT(3) }; int sunxi_ccu_div_enable(struct sunxi_ccu_softc *,