From 6d2e7769e2bafead0e6c8826c465ce0bbbb065ee Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Sat, 22 Jan 2011 18:30:24 +0000 Subject: Better boost calculation for multifrequency CPUs. Frequencies between minimum and maximum count as fractional boost. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29115 a1c6a512-1295-4272-9138-f99709370657 --- apps/debug_menu.c | 19 ++++++++++++++++--- firmware/target/arm/imx31/gigabeat-s/system-target.h | 2 ++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/apps/debug_menu.c b/apps/debug_menu.c index d0b919fea3..2d356ab573 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -272,13 +272,18 @@ static bool dbg_audio_thread(void) } #endif /* !SIMULATOR */ #else /* CONFIG_CODEC == SWCODEC */ -static unsigned int ticks, boost_ticks, freq_sum; +static unsigned int ticks, freq_sum; +#ifndef CPU_MULTI_FREQUENCY +static unsigned int boost_ticks; +#endif static void dbg_audio_task(void) { #ifdef CPUFREQ_NORMAL +#ifndef CPU_MULTI_FREQUENCY if(FREQ > CPUFREQ_NORMAL) boost_ticks++; +#endif freq_sum += FREQ/1000000; /* in MHz */ #endif ticks++; @@ -296,7 +301,10 @@ static bool dbg_buffering_thread(void) size_t filebuflen = audio_get_filebuflen(); /* This is a size_t, but call it a long so it puts a - when it's bad. */ - ticks = boost_ticks = freq_sum = 0; +#ifndef CPU_MULTI_FREQUENCY + boost_ticks = 0; +#endif + ticks = freq_sum = 0; tick_add_task(dbg_audio_task); @@ -378,8 +386,13 @@ static bool dbg_buffering_thread(void) if (ticks > 0) { - int boostquota = boost_ticks * 1000 / ticks; /* in 0.1 % */ int avgclock = freq_sum * 10 / ticks; /* in 100 kHz */ +#ifdef CPU_MULTI_FREQUENCY + int boostquota = (avgclock * 100 - CPUFREQ_NORMAL/1000) / + ((CPUFREQ_MAX - CPUFREQ_NORMAL) / 1000000); /* in 0.1 % */ +#else + int boostquota = boost_ticks * 1000 / ticks; /* in 0.1 % */ +#endif screens[i].putsf(0, line++, "boost:%3d.%d%% (%d.%dMHz)", boostquota/10, boostquota%10, avgclock/10, avgclock%10); } diff --git a/firmware/target/arm/imx31/gigabeat-s/system-target.h b/firmware/target/arm/imx31/gigabeat-s/system-target.h index 4449b570f7..a8f7922dd5 100644 --- a/firmware/target/arm/imx31/gigabeat-s/system-target.h +++ b/firmware/target/arm/imx31/gigabeat-s/system-target.h @@ -31,6 +31,8 @@ /* Overdrive mode */ #define CPUFREQ_MAX 528000000 +#define CPU_MULTI_FREQUENCY 3 + static inline void udelay(unsigned long usecs) { unsigned long stop = GPTCNT + usecs; -- cgit v1.2.3