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

Reply via email to