X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=gp2x%2Fsoc_pollux.c;fp=gp2x%2Fsoc_pollux.c;h=5b0b3ff0a43ffa9f2ecff11f5037f38c02811b24;hb=9a5a0dc9ff4086a295832709c609276512f54743;hp=bbccede900aa1e337ce0e509f3a2554702e0ebf4;hpb=11166a22ce7ec97d1dc4a2ea00da52979eca5b38;p=libpicofe.git diff --git a/gp2x/soc_pollux.c b/gp2x/soc_pollux.c index bbccede..5b0b3ff 100644 --- a/gp2x/soc_pollux.c +++ b/gp2x/soc_pollux.c @@ -29,10 +29,12 @@ #include "soc.h" #include "plat_gp2x.h" +#include "pollux_set.h" #include "../plat.h" static int battdev = -1, mixerdev = -1; static int cpu_clock_allowed; +static unsigned short saved_memtimex[2]; static unsigned int saved_video_regs[2][6]; static unsigned int timer_drift; // count per real second @@ -59,6 +61,26 @@ static int decode_pll(unsigned int reg) return v; } +/* RAM timings */ +static void set_ram_timings(void) +{ + pollux_set_fromenv(memregs, "POLLUX_RAM_TIMINGS"); +} + +static void unset_ram_timings(void) +{ + int i; + + memregs[0x14802>>1] = saved_memtimex[0]; + memregs[0x14804>>1] = saved_memtimex[1] | 0x8000; + + for (i = 0; i < 0x100000; i++) + if (!(memregs[0x14804>>1] & 0x8000)) + break; + + printf("RAM timings reset to startup values.\n"); +} + #define TIMER_BASE3 0x1980 #define TIMER_REG(x) memregl[(TIMER_BASE3 + x) >> 2] @@ -235,6 +257,11 @@ void pollux_init(void) } memregl = (volatile void *)memregs; + saved_memtimex[0] = memregs[0x14802>>1]; + saved_memtimex[1] = memregs[0x14804>>1]; + + set_ram_timings(); + // save video regs of both MLCs save_multiple_regs(saved_video_regs[0], 0x4058, ARRAY_SIZE(saved_video_regs[0])); save_multiple_regs(saved_video_regs[1], 0x4458, ARRAY_SIZE(saved_video_regs[1])); @@ -305,6 +332,8 @@ void pollux_finish(void) { timer_cleanup(); + unset_ram_timings(); + restore_multiple_regs(0x4058, saved_video_regs[0], ARRAY_SIZE(saved_video_regs[0])); restore_multiple_regs(0x4458, saved_video_regs[1],