kopia lustrzana https://github.com/hoglet67/RGBtoHDMI
Improve clock setting
rodzic
ba6c2bde11
commit
52ab7b60ef
37
src/info.c
37
src/info.c
|
@ -63,30 +63,39 @@ void set_clock_rate(int clk_id, unsigned int value) {
|
|||
RPI_PropertyProcess();
|
||||
}
|
||||
|
||||
|
||||
void set_clock_rates(unsigned int cpu, unsigned int core, unsigned int sdram) {
|
||||
static unsigned int old_core = -1;
|
||||
void set_clock_rate_cpu(unsigned int cpu) {
|
||||
static unsigned int old_cpu = -1;
|
||||
if (cpu != old_cpu) {
|
||||
RPI_PropertyInit();
|
||||
RPI_PropertyAddTag(TAG_SET_CLOCK_RATE, ARM_CLK_ID, cpu, 1);
|
||||
RPI_PropertyProcess();
|
||||
calculate_cpu_timings();
|
||||
old_cpu = cpu;
|
||||
}
|
||||
}
|
||||
|
||||
void set_clock_rate_core(unsigned int core) {
|
||||
static unsigned int old_core = -1;
|
||||
if (core != old_core) {
|
||||
delay_in_arm_cycles_cpu_adjust(50000000);
|
||||
}
|
||||
RPI_PropertyInit();
|
||||
RPI_PropertyAddTag(TAG_SET_CLOCK_RATE, ARM_CLK_ID, cpu, 1);
|
||||
RPI_PropertyAddTag(TAG_SET_CLOCK_RATE, CORE_CLK_ID, core, 0);
|
||||
RPI_PropertyAddTag(TAG_SET_CLOCK_RATE, SDRAM_CLK_ID, sdram, 0);
|
||||
RPI_PropertyProcess();
|
||||
|
||||
if (core != old_core) {
|
||||
RPI_PropertyInit();
|
||||
RPI_PropertyAddTag(TAG_SET_CLOCK_RATE, CORE_CLK_ID, core, 0);
|
||||
RPI_PropertyProcess();
|
||||
#ifndef RPI4
|
||||
RPI_AuxMiniUartFlush();
|
||||
RPI_AuxMiniUartInit(115200, 8);
|
||||
#endif
|
||||
old_core = core;
|
||||
}
|
||||
}
|
||||
|
||||
if (cpu != old_cpu) {
|
||||
calculate_cpu_timings();
|
||||
old_cpu = cpu;
|
||||
void set_clock_rate_sdram(unsigned int sdram) {
|
||||
static unsigned int old_sdram = -1;
|
||||
if (sdram != old_sdram) {
|
||||
RPI_PropertyInit();
|
||||
RPI_PropertyAddTag(TAG_SET_CLOCK_RATE, SDRAM_CLK_ID, sdram, 0);
|
||||
RPI_PropertyProcess();
|
||||
old_sdram = sdram;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,8 +23,9 @@ extern char *get_info_string();
|
|||
|
||||
extern unsigned int get_clock_rate(int clk_id);
|
||||
extern void set_clock_rate(int clk_id, unsigned int value);
|
||||
extern void set_clock_rates(unsigned int cpu, unsigned int core, unsigned int sdram);
|
||||
|
||||
extern void set_clock_rate_cpu(unsigned int cpu);
|
||||
extern void set_clock_rate_core(unsigned int core);
|
||||
extern void set_clock_rate_sdram(unsigned int sdram);
|
||||
int get_revision();
|
||||
|
||||
extern float get_temp();
|
||||
|
|
48
src/osd.c
48
src/osd.c
|
@ -1210,29 +1210,6 @@ static int get_feature(int num) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
static void set_clocks(){
|
||||
int auto_cpu = 0;
|
||||
int auto_core = 0;
|
||||
if (auto_overclock)
|
||||
{
|
||||
if (cpu_clock == 700) {
|
||||
auto_cpu = 200; //overclock to 900
|
||||
}
|
||||
if (core_clock == 250) {
|
||||
auto_core = 150; //overclock to 400
|
||||
}
|
||||
}
|
||||
#ifdef RPI4
|
||||
if (core_overclock > 100) { //pi 4 core is already 500 Mhz (all others 400Mhz) so don't overclock unless overclock >100Mhz
|
||||
set_clock_rates((cpu_clock + auto_cpu + cpu_overclock) * 1000000, (core_clock + auto_core + core_overclock - 100) * 1000000, (sdram_clock + sdram_overclock) * 1000000);
|
||||
} else {
|
||||
set_clock_rates((cpu_clock + auto_cpu + cpu_overclock) * 1000000, (core_clock + auto_core) * 1000000, (sdram_clock + sdram_overclock) * 1000000);
|
||||
}
|
||||
#else
|
||||
set_clock_rates((cpu_clock + auto_cpu + cpu_overclock) * 1000000, (core_clock + auto_core + core_overclock) * 1000000, (sdram_clock + sdram_overclock) * 1000000);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void set_feature(int num, int value) {
|
||||
if (value < features[num].min) {
|
||||
value = features[num].min;
|
||||
|
@ -1411,15 +1388,31 @@ static void set_feature(int num, int value) {
|
|||
break;
|
||||
case F_OCLOCK_CPU:
|
||||
cpu_overclock = value;
|
||||
set_clocks();
|
||||
if (auto_overclock && cpu_clock == 700) {
|
||||
set_clock_rate_cpu((cpu_clock + cpu_overclock + 200) * 1000000); //overclock to 900
|
||||
} else {
|
||||
set_clock_rate_cpu((cpu_clock + cpu_overclock) * 1000000);
|
||||
}
|
||||
break;
|
||||
case F_OCLOCK_CORE:
|
||||
core_overclock = value;
|
||||
set_clocks();
|
||||
#ifdef RPI4
|
||||
if (core_overclock > 100) { //pi 4 core is already 500 Mhz (all others 400Mhz) so don't overclock unless overclock >100Mhz
|
||||
set_clock_rate_core((core_clock + core_overclock - 100) * 1000000);
|
||||
} else {
|
||||
set_clock_rate_core(core_clock * 1000000);
|
||||
}
|
||||
#else
|
||||
if (auto_overclock && core_clock == 250) {
|
||||
set_clock_rate_core((core_clock + core_overclock + 150) * 1000000);
|
||||
} else {
|
||||
set_clock_rate_core((core_clock + core_overclock) * 1000000);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case F_OCLOCK_SDRAM:
|
||||
sdram_overclock = value;
|
||||
set_clocks();
|
||||
set_clock_rate_sdram((sdram_clock + sdram_overclock) * 1000000);
|
||||
break;
|
||||
case F_RSTATUS:
|
||||
set_res_status(value);
|
||||
|
@ -5700,8 +5693,11 @@ void osd_init() {
|
|||
}
|
||||
|
||||
cpu_clock = get_clock_rate(ARM_CLK_ID)/1000000;
|
||||
set_clock_rate_cpu(cpu_clock * 1000000); //sets the old value
|
||||
core_clock = get_clock_rate(CORE_CLK_ID)/1000000;
|
||||
set_clock_rate_core(core_clock * 1000000);
|
||||
sdram_clock = get_clock_rate(SDRAM_CLK_ID)/1000000;
|
||||
set_clock_rate_sdram(sdram_clock * 1000000);
|
||||
|
||||
generate_palettes();
|
||||
features[F_PALETTE].max = create_and_scan_palettes(palette_names, palette_array) - 1;
|
||||
|
|
Ładowanie…
Reference in New Issue