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;
|
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
|
#ifdef BINARY
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
|
@ -4,6 +4,8 @@ extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int pollux_set(volatile unsigned short *memregs, const char *str);
|
int pollux_set(volatile unsigned short *memregs, const char *str);
|
||||||
|
int pollux_set_fromenv(volatile unsigned short *memregs,
|
||||||
|
const char *env_var);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,10 +29,12 @@
|
||||||
|
|
||||||
#include "soc.h"
|
#include "soc.h"
|
||||||
#include "plat_gp2x.h"
|
#include "plat_gp2x.h"
|
||||||
|
#include "pollux_set.h"
|
||||||
#include "../plat.h"
|
#include "../plat.h"
|
||||||
|
|
||||||
static int battdev = -1, mixerdev = -1;
|
static int battdev = -1, mixerdev = -1;
|
||||||
static int cpu_clock_allowed;
|
static int cpu_clock_allowed;
|
||||||
|
static unsigned short saved_memtimex[2];
|
||||||
static unsigned int saved_video_regs[2][6];
|
static unsigned int saved_video_regs[2][6];
|
||||||
static unsigned int timer_drift; // count per real second
|
static unsigned int timer_drift; // count per real second
|
||||||
|
|
||||||
|
@ -59,6 +61,26 @@ static int decode_pll(unsigned int reg)
|
||||||
return v;
|
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_BASE3 0x1980
|
||||||
#define TIMER_REG(x) memregl[(TIMER_BASE3 + x) >> 2]
|
#define TIMER_REG(x) memregl[(TIMER_BASE3 + x) >> 2]
|
||||||
|
|
||||||
|
@ -235,6 +257,11 @@ void pollux_init(void)
|
||||||
}
|
}
|
||||||
memregl = (volatile void *)memregs;
|
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 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[0], 0x4058, ARRAY_SIZE(saved_video_regs[0]));
|
||||||
save_multiple_regs(saved_video_regs[1], 0x4458, ARRAY_SIZE(saved_video_regs[1]));
|
save_multiple_regs(saved_video_regs[1], 0x4458, ARRAY_SIZE(saved_video_regs[1]));
|
||||||
|
@ -305,6 +332,8 @@ void pollux_finish(void)
|
||||||
{
|
{
|
||||||
timer_cleanup();
|
timer_cleanup();
|
||||||
|
|
||||||
|
unset_ram_timings();
|
||||||
|
|
||||||
restore_multiple_regs(0x4058, saved_video_regs[0],
|
restore_multiple_regs(0x4058, saved_video_regs[0],
|
||||||
ARRAY_SIZE(saved_video_regs[0]));
|
ARRAY_SIZE(saved_video_regs[0]));
|
||||||
restore_multiple_regs(0x4458, saved_video_regs[1],
|
restore_multiple_regs(0x4458, saved_video_regs[1],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue