mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-04 22:47:44 -04:00
gp2x: pollux: bring back ram timings
This commit is contained in:
parent
11166a22ce
commit
9a5a0dc9ff
3 changed files with 46 additions and 0 deletions
|
@ -337,6 +337,21 @@ again:
|
|||
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>
|
||||
|
|
|
@ -4,6 +4,8 @@ extern "C"
|
|||
#endif
|
||||
|
||||
int pollux_set(volatile unsigned short *memregs, const char *str);
|
||||
int pollux_set_fromenv(volatile unsigned short *memregs,
|
||||
const char *env_var);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -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],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue