svn commit: r314672 - head/sys/arm/broadcom/bcm2835
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Sat Mar 4 17:34:38 UTC 2017
Author: gonzo
Date: Sat Mar 4 17:34:36 2017
New Revision: 314672
URL: https://svnweb.freebsd.org/changeset/base/314672
Log:
[rpi] rpi3 should use the same cpufreq logic as rpi2, not rpi-b
RPi3 cpufreq is more like that on RPi2. Setting arm frequency
above min (say, "sysctl hw.cpufreq.arm_freq=600000001") turns on
turbo mode, and the firmware automatically raises voltage, sets
frequency to max 1200MHz, and throttle when overheat, etc.
Swap if/else parts and use SOC_BCM2835 def so RPi3 can share the
same cpufreq logic as RPi2, instead of falling to that for RPi.
Submitted by: Jia-Shiun Li <jiashiun at gmail.com>
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D9640
Modified:
head/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c
Modified: head/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c
==============================================================================
--- head/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c Sat Mar 4 16:59:55 2017 (r314671)
+++ head/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c Sat Mar 4 17:34:36 2017 (r314672)
@@ -66,16 +66,16 @@ __FBSDID("$FreeBSD$");
#define HZ2MHZ(freq) ((freq) / (1000 * 1000))
#define MHZ2HZ(freq) ((freq) * (1000 * 1000))
-#ifdef SOC_BCM2836
-#define OFFSET2MVOLT(val) (((val) / 1000))
-#define MVOLT2OFFSET(val) (((val) * 1000))
-#define DEFAULT_ARM_FREQUENCY 600
-#define DEFAULT_LOWEST_FREQ 600
-#else
+#ifdef SOC_BCM2835
#define OFFSET2MVOLT(val) (1200 + ((val) * 25))
#define MVOLT2OFFSET(val) (((val) - 1200) / 25)
#define DEFAULT_ARM_FREQUENCY 700
#define DEFAULT_LOWEST_FREQ 300
+#else
+#define OFFSET2MVOLT(val) (((val) / 1000))
+#define MVOLT2OFFSET(val) (((val) * 1000))
+#define DEFAULT_ARM_FREQUENCY 600
+#define DEFAULT_LOWEST_FREQ 600
#endif
#define DEFAULT_CORE_FREQUENCY 250
#define DEFAULT_SDRAM_FREQUENCY 400
@@ -1544,7 +1544,20 @@ bcm2835_cpufreq_make_freq_list(device_t
if (min_freq > cpufreq_lowest_freq)
min_freq = cpufreq_lowest_freq;
-#ifdef SOC_BCM2836
+#ifdef SOC_BCM2835
+ /* from freq to min_freq */
+ for (idx = 0; idx < *count && freq >= min_freq; idx++) {
+ if (freq > sc->arm_min_freq)
+ volts = sc->max_voltage_core;
+ else
+ volts = sc->min_voltage_core;
+ sets[idx].freq = freq;
+ sets[idx].volts = volts;
+ sets[idx].lat = TRANSITION_LATENCY;
+ sets[idx].dev = dev;
+ freq -= MHZSTEP;
+ }
+#else
/* XXX RPi2 have only 900/600MHz */
idx = 0;
volts = sc->min_voltage_core;
@@ -1560,19 +1573,6 @@ bcm2835_cpufreq_make_freq_list(device_t
sets[idx].dev = dev;
idx++;
}
-#else
- /* from freq to min_freq */
- for (idx = 0; idx < *count && freq >= min_freq; idx++) {
- if (freq > sc->arm_min_freq)
- volts = sc->max_voltage_core;
- else
- volts = sc->min_voltage_core;
- sets[idx].freq = freq;
- sets[idx].volts = volts;
- sets[idx].lat = TRANSITION_LATENCY;
- sets[idx].dev = dev;
- freq -= MHZSTEP;
- }
#endif
*count = idx;
More information about the svn-src-head
mailing list