Date: Sat, 25 Nov 2017 15:14:41 +0000 (UTC) From: Kyle Evans <kevans@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r326190 - in head/sys/arm/allwinner: a83t clkng Message-ID: <201711251514.vAPFEfPI080387@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kevans Date: Sat Nov 25 15:14:40 2017 New Revision: 326190 URL: https://svnweb.freebsd.org/changeset/base/326190 Log: Add r-ccu support for the Allwinner a83t The r-ccu on the a83t differs from the others only by what it names the ar100 parents. Export the _CCU macros (now converted to an enu) so that ccu_sun8i_r can differentiate between a83t r-ccu and the others, then add the compat string for the a83t r-ccu. Reviewed by: manu Approved by: emaste (mentor, implicit) Differential Revision: https://reviews.freebsd.org/D13206 Modified: head/sys/arm/allwinner/a83t/files.a83t head/sys/arm/allwinner/clkng/aw_ccung.c head/sys/arm/allwinner/clkng/aw_ccung.h head/sys/arm/allwinner/clkng/ccu_sun8i_r.c Modified: head/sys/arm/allwinner/a83t/files.a83t ============================================================================== --- head/sys/arm/allwinner/a83t/files.a83t Sat Nov 25 14:51:40 2017 (r326189) +++ head/sys/arm/allwinner/a83t/files.a83t Sat Nov 25 15:14:40 2017 (r326190) @@ -1,5 +1,6 @@ # $FreeBSD$ arm/allwinner/clkng/ccu_a83t.c standard +arm/allwinner/clkng/ccu_sun8i_r.c standard arm/allwinner/a83t/a83t_padconf.c standard arm/allwinner/a83t/a83t_r_padconf.c standard Modified: head/sys/arm/allwinner/clkng/aw_ccung.c ============================================================================== --- head/sys/arm/allwinner/clkng/aw_ccung.c Sat Nov 25 14:51:40 2017 (r326189) +++ head/sys/arm/allwinner/clkng/aw_ccung.c Sat Nov 25 15:14:40 2017 (r326190) @@ -78,6 +78,7 @@ __FBSDID("$FreeBSD$"); #if defined(SOC_ALLWINNER_A83T) #include <arm/allwinner/clkng/ccu_a83t.h> +#include <arm/allwinner/clkng/ccu_sun8i_r.h> #endif #include "clkdev_if.h" @@ -88,28 +89,6 @@ static struct resource_spec aw_ccung_spec[] = { { -1, 0 } }; -#if defined(SOC_ALLWINNER_H3) || defined(SOC_ALLWINNER_H5) -#define H3_CCU 1 -#define H3_R_CCU 2 -#endif - -#if defined(SOC_ALLWINNER_A31) -#define A31_CCU 3 -#endif - -#if defined(SOC_ALLWINNER_A64) -#define A64_CCU 4 -#define A64_R_CCU 5 -#endif - -#if defined(SOC_ALLWINNER_A13) -#define A13_CCU 6 -#endif - -#if defined(SOC_ALLWINNER_A83T) -#define A83T_CCU 7 -#endif - static struct ofw_compat_data compat_data[] = { #if defined(SOC_ALLWINNER_A31) { "allwinner,sun5i-a13-ccu", A13_CCU}, @@ -127,6 +106,7 @@ static struct ofw_compat_data compat_data[] = { #endif #if defined(SOC_ALLWINNER_A83T) { "allwinner,sun8i-a83t-ccu", A83T_CCU }, + { "allwinner,sun8i-a83t-r-ccu", A83T_R_CCU }, #endif {NULL, 0 } }; @@ -373,6 +353,9 @@ aw_ccung_attach(device_t dev) #if defined(SOC_ALLWINNER_A83T) case A83T_CCU: ccu_a83t_register_clocks(sc); + break; + case A83T_R_CCU: + ccu_sun8i_r_register_clocks(sc); break; #endif } Modified: head/sys/arm/allwinner/clkng/aw_ccung.h ============================================================================== --- head/sys/arm/allwinner/clkng/aw_ccung.h Sat Nov 25 14:51:40 2017 (r326189) +++ head/sys/arm/allwinner/clkng/aw_ccung.h Sat Nov 25 15:14:40 2017 (r326190) @@ -29,6 +29,17 @@ #ifndef __CCU_NG_H__ #define __CCU_NG_H__ +enum aw_ccung_type { + H3_CCU = 1, + H3_R_CCU, + A31_CCU, + A64_CCU, + A64_R_CCU, + A13_CCU, + A83T_CCU, + A83T_R_CCU, +}; + struct aw_ccung_softc { device_t dev; struct resource *res; Modified: head/sys/arm/allwinner/clkng/ccu_sun8i_r.c ============================================================================== --- head/sys/arm/allwinner/clkng/ccu_sun8i_r.c Sat Nov 25 14:51:40 2017 (r326189) +++ head/sys/arm/allwinner/clkng/ccu_sun8i_r.c Sat Nov 25 15:14:40 2017 (r326190) @@ -70,6 +70,7 @@ static struct aw_ccung_gate ccu_sun8i_r_gates[] = { }; static const char *ar100_parents[] = {"osc32k", "osc24M", "pll_periph0", "iosc"}; +static const char *a83t_ar100_parents[] = {"osc16M-d512", "osc24M", "pll_periph", "osc16M"}; PREDIV_CLK(ar100_clk, CLK_AR100, /* id */ "ar100", ar100_parents, /* name, parents */ 0x00, /* offset */ @@ -77,6 +78,13 @@ PREDIV_CLK(ar100_clk, CLK_AR100, /* id */ 4, 2, 0, AW_CLK_FACTOR_POWER_OF_TWO, /* div */ 8, 5, 0, AW_CLK_FACTOR_HAS_COND, /* prediv */ 16, 2, 2); /* prediv condition */ +PREDIV_CLK(a83t_ar100_clk, CLK_AR100, /* id */ + "ar100", a83t_ar100_parents, /* name, parents */ + 0x00, /* offset */ + 16, 2, /* mux */ + 4, 2, 0, AW_CLK_FACTOR_POWER_OF_TWO, /* div */ + 8, 5, 0, AW_CLK_FACTOR_HAS_COND, /* prediv */ + 16, 2, 2); /* prediv condition */ static const char *ahb0_parents[] = {"ar100"}; FIXED_CLK(ahb0_clk, @@ -96,10 +104,14 @@ DIV_CLK(apb0_clk, 0, 2, /* shift, width */ 0, NULL); /* flags, div table */ -static struct aw_clk_prediv_mux_def *prediv_mux_clks[] = { +static struct aw_clk_prediv_mux_def *r_ccu_prediv_mux_clks[] = { &ar100_clk, }; +static struct aw_clk_prediv_mux_def *a83t_r_ccu_prediv_mux_clks[] = { + &a83t_ar100_clk, +}; + static struct clk_div_def *div_clks[] = { &apb0_clk, }; @@ -112,11 +124,18 @@ void ccu_sun8i_r_register_clocks(struct aw_ccung_softc *sc) { int i; + struct aw_clk_prediv_mux_def **prediv_mux_clks; sc->resets = ccu_sun8i_r_resets; sc->nresets = nitems(ccu_sun8i_r_resets); sc->gates = ccu_sun8i_r_gates; sc->ngates = nitems(ccu_sun8i_r_gates); + + /* a83t names the parents differently than the others */ + if (sc->type == A83T_R_CCU) + prediv_mux_clks = a83t_r_ccu_prediv_mux_clks; + else + prediv_mux_clks = r_ccu_prediv_mux_clks; for (i = 0; i < nitems(prediv_mux_clks); i++) aw_clk_prediv_mux_register(sc->clkdom, prediv_mux_clks[i]);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201711251514.vAPFEfPI080387>