Module Name: src Committed By: jmcneill Date: Tue Mar 17 22:29:40 UTC 2015
Modified Files: src/sys/arch/arm/amlogic: amlogic_cpufreq.c amlogic_var.h files.amlogic src/sys/arch/evbarm/amlogic: amlogic_machdep.c src/sys/arch/evbarm/conf: ODROID-C1 Log Message: Add CPUFREQ option to set boot CPU frequency. ODROID-C1 is advertised as quad-core 1.5GHz but boots up at 1.2GHz; add CPUFREQ=1512 to config and make sure to set the correct speed before attaching CPUs. The speed can still be scaled down with machdep.cpu sysctls. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/amlogic/amlogic_cpufreq.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/amlogic/amlogic_var.h \ src/sys/arch/arm/amlogic/files.amlogic cvs rdiff -u -r1.15 -r1.16 src/sys/arch/evbarm/amlogic/amlogic_machdep.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/evbarm/conf/ODROID-C1 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/amlogic/amlogic_cpufreq.c diff -u src/sys/arch/arm/amlogic/amlogic_cpufreq.c:1.1 src/sys/arch/arm/amlogic/amlogic_cpufreq.c:1.2 --- src/sys/arch/arm/amlogic/amlogic_cpufreq.c:1.1 Thu Mar 5 23:43:53 2015 +++ src/sys/arch/arm/amlogic/amlogic_cpufreq.c Tue Mar 17 22:29:40 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: amlogic_cpufreq.c,v 1.1 2015/03/05 23:43:53 jmcneill Exp $ */ +/* $NetBSD: amlogic_cpufreq.c,v 1.2 2015/03/17 22:29:40 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -28,8 +28,10 @@ #include "locators.h" +#include "opt_amlogic.h" + #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: amlogic_cpufreq.c,v 1.1 2015/03/05 23:43:53 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: amlogic_cpufreq.c,v 1.2 2015/03/17 22:29:40 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -73,6 +75,20 @@ static size_t meson8b_cpu_get_available( AMLOGIC_CBUS_OFFSET + (x), (v)) void +amlogic_cpufreq_bootstrap(void) +{ + cpufreq_set_rate = &meson8b_cpu_set_rate; + cpufreq_get_rate = &meson8b_cpu_get_rate; + cpufreq_get_available = &meson8b_cpu_get_available; + +#ifdef CPUFREQ + if (cpufreq_set_rate(CPUFREQ) == 0) { + amlogic_cpufreq_cb(NULL, NULL); + } +#endif +} + +void amlogic_cpufreq_init(void) { const struct sysctlnode *node, *cpunode, *freqnode; @@ -80,10 +96,6 @@ amlogic_cpufreq_init(void) size_t nfreq; int error; - cpufreq_set_rate = &meson8b_cpu_set_rate; - cpufreq_get_rate = &meson8b_cpu_get_rate; - cpufreq_get_available = &meson8b_cpu_get_available; - nfreq = cpufreq_get_available(availfreq, AMLOGIC_CPUFREQ_MAX); if (nfreq == 0) return; @@ -259,7 +271,9 @@ meson8b_cpu_set_rate(u_int rate) CBUS_WRITE(HHI_SYS_PLL_CNTL_REG, cntl); - a9tmr_update_freq(amlogic_get_rate_a9periph()); + if (!cold) { + a9tmr_update_freq(amlogic_get_rate_a9periph()); + } return 0; } Index: src/sys/arch/arm/amlogic/amlogic_var.h diff -u src/sys/arch/arm/amlogic/amlogic_var.h:1.6 src/sys/arch/arm/amlogic/amlogic_var.h:1.7 --- src/sys/arch/arm/amlogic/amlogic_var.h:1.6 Sun Mar 8 12:44:55 2015 +++ src/sys/arch/arm/amlogic/amlogic_var.h Tue Mar 17 22:29:40 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: amlogic_var.h,v 1.6 2015/03/08 12:44:55 jmcneill Exp $ */ +/* $NetBSD: amlogic_var.h,v 1.7 2015/03/17 22:29:40 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -56,6 +56,7 @@ extern struct arm32_bus_dma_tag amlogic_ void amlogic_bootstrap(void); +void amlogic_cpufreq_bootstrap(void); void amlogic_cpufreq_init(void); void amlogic_usbphy_init(int); Index: src/sys/arch/arm/amlogic/files.amlogic diff -u src/sys/arch/arm/amlogic/files.amlogic:1.6 src/sys/arch/arm/amlogic/files.amlogic:1.7 --- src/sys/arch/arm/amlogic/files.amlogic:1.6 Sat Mar 7 21:34:25 2015 +++ src/sys/arch/arm/amlogic/files.amlogic Tue Mar 17 22:29:40 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.amlogic,v 1.6 2015/03/07 21:34:25 jmcneill Exp $ +# $NetBSD: files.amlogic,v 1.7 2015/03/17 22:29:40 jmcneill Exp $ # # Configuration info for Amlogic ARM Peripherals # @@ -51,3 +51,6 @@ defparam opt_amlogic.h CONMODE # Memory parameters defparam opt_amlogic.h MEMSIZE + +# CPU parameters +defparam opt_amlogic.h CPUFREQ Index: src/sys/arch/evbarm/amlogic/amlogic_machdep.c diff -u src/sys/arch/evbarm/amlogic/amlogic_machdep.c:1.15 src/sys/arch/evbarm/amlogic/amlogic_machdep.c:1.16 --- src/sys/arch/evbarm/amlogic/amlogic_machdep.c:1.15 Sun Mar 8 11:22:05 2015 +++ src/sys/arch/evbarm/amlogic/amlogic_machdep.c Tue Mar 17 22:29:40 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: amlogic_machdep.c,v 1.15 2015/03/08 11:22:05 jmcneill Exp $ */ +/* $NetBSD: amlogic_machdep.c,v 1.16 2015/03/17 22:29:40 jmcneill Exp $ */ /* * Machine dependent functions for kernel setup for TI OSK5912 board. @@ -125,7 +125,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: amlogic_machdep.c,v 1.15 2015/03/08 11:22:05 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: amlogic_machdep.c,v 1.16 2015/03/17 22:29:40 jmcneill Exp $"); #include "opt_machdep.h" #include "opt_ddb.h" @@ -436,6 +436,8 @@ initarm(void *arg) db_trap_callback = amlogic_db_trap; + amlogic_cpufreq_bootstrap(); + return initarm_common(KERNEL_VM_BASE, KERNEL_VM_SIZE, NULL, 0); } Index: src/sys/arch/evbarm/conf/ODROID-C1 diff -u src/sys/arch/evbarm/conf/ODROID-C1:1.9 src/sys/arch/evbarm/conf/ODROID-C1:1.10 --- src/sys/arch/evbarm/conf/ODROID-C1:1.9 Mon Mar 16 22:16:42 2015 +++ src/sys/arch/evbarm/conf/ODROID-C1 Tue Mar 17 22:29:40 2015 @@ -1,5 +1,5 @@ # -# $NetBSD: ODROID-C1,v 1.9 2015/03/16 22:16:42 jmcneill Exp $ +# $NetBSD: ODROID-C1,v 1.10 2015/03/17 22:29:40 jmcneill Exp $ # # Odroid-C1 (Amlogic S805) based SBC (Single Board Computer) # @@ -18,6 +18,7 @@ options RTC_OFFSET=0 # hardware clock i # CPU options options CPU_CORTEXA5 +options CPUFREQ=1512 options PMAPCOUNTERS # Architecture options