return 0;
}
+int pollux_set_fromenv(volatile unsigned short *memregs,
+ const char *env_var)
+{
+ const char *set_string;
+ int ret = -1;
+
+ set_string = getenv(env_var);
+ if (set_string)
+ ret = pollux_set(memregs, set_string);
+ else
+ printf("env var %s not defined.\n", env_var);
+
+ return ret;
+}
+
#ifdef BINARY
#include <sys/types.h>
#include <sys/stat.h>
#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
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]
}
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]));
{
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],