5aa19f3eeb
CPU frequency scaling is basically useless without scaling the memory frequency. On the i.MX233, the EMI (external memory interface) and DRAM blocks are responsable for the DDR settings. This commits implements emi frequency scaling. Only some settings are implemented and the timings values only apply to mDDR (extracted from Sigmatel linux port) and have been checked to work on the Fuze+ and Zen X-Fi2/3. This feature is still disabled by default but I expected some battery life savings by boosting higher to 454MHz and unboosting lower to 64MHz. Note that changing the emi frequency is particularly tricky and to avoid writing it entirely in assembly we rely on the compiler to not use the stack except in the prolog and epilog (because it's in dram which is disabled when doing the change) and to put constant pools in iram which should always be true if the compiler isn't completely dumb and since the code itself is put in iram. If this proves to be insufficient, one can always switch the stack to the irq stack since interrupts are disabled during the change. Change-Id: If6ef5357f7ff091130ca1063e48536c6028f23ba |
||
---|---|---|
.. | ||
asm | ||
common | ||
decompressor | ||
drivers | ||
export | ||
include | ||
libc | ||
target | ||
test | ||
usbstack | ||
arabjoin.c | ||
arabjoin.h | ||
ata_idle_notify.c | ||
backlight-sw-fading.c | ||
backlight.c | ||
bidi.c | ||
buflib.c | ||
COPYING | ||
core_alloc.c | ||
debug.c | ||
eeprom_settings.c | ||
enc_base.c | ||
events.c | ||
firmware.make | ||
font.c | ||
font_cache.c | ||
general.c | ||
hangul.c | ||
ifp_usb_serial.c | ||
kernel.c | ||
load_code.c | ||
logf.c | ||
lru.c | ||
panic.c | ||
pcm.c | ||
pcm_mixer.c | ||
pcm_sampr.c | ||
powermgmt.c | ||
profile.c | ||
README | ||
rolo.c | ||
rom.lds | ||
screendump.c | ||
scroll_engine.c | ||
sdmmc.c | ||
sound.c | ||
SOURCES | ||
storage.c | ||
system.c | ||
thread.c | ||
timer.c | ||
tuner.c | ||
usb.c |
See docs/README