Skip to content

Commit c06efe3

Browse files
committed
Add SYS_GetCoreFrequency
Fix ticks_to_cycles
1 parent 03757c9 commit c06efe3

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

gc/ogc/system.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ void SYS_DumpPMC(void);
311311
void SYS_StopPMC(void);
312312
void SYS_ResetPMC(void);
313313
f32 SYS_GetCoreMultiplier(void);
314+
u32 SYS_GetCoreFrequency(void);
314315
s8 SYS_GetCoreTemperature(void);
315316

316317

gc/ogc/timesupp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#define TB_NSPERUS 1000
2929
#define TB_USPERTICK 10000
3030

31-
#define ticks_to_cycles(ticks) (((u64)(ticks)*(u64)((TB_CORE_CLOCK*2)/TB_TIMER_CLOCK))/2)
31+
#define ticks_to_cycles(ticks) (((u64)(ticks)*(u64)((TB_CORE_CLOCK*2)/(TB_TIMER_CLOCK*1000)))/2)
3232
#define ticks_to_secs(ticks) ((u64)(ticks)/(u64)(TB_TIMER_CLOCK*1000))
3333
#define ticks_to_millisecs(ticks) ((u64)(ticks)/(u64)(TB_TIMER_CLOCK))
3434
#define ticks_to_microsecs(ticks) (((u64)(ticks)*8)/(u64)(TB_TIMER_CLOCK/125))

libogc/system.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1969,13 +1969,13 @@ f32 SYS_GetCoreMultiplier(void)
19691969
{
19701970
u32 pvr,hid1;
19711971

1972-
const f32 pll_cfg_table4[] = {
1972+
static const f32 pll_cfg_table4[] = {
19731973
2.5, 7.5, 7.0, 1.0,
19741974
2.0, 6.5, 10.0, 4.5,
19751975
3.0, 5.5, 4.0, 5.0,
19761976
8.0, 6.0, 3.5, 0.0
19771977
};
1978-
const f32 pll_cfg_table5[] = {
1978+
static const f32 pll_cfg_table5[] = {
19791979
0.0, 0.0, 5.0, 1.0, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5,
19801980
5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5,
19811981
10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0,
@@ -1998,11 +1998,26 @@ f32 SYS_GetCoreMultiplier(void)
19981998
}
19991999
break;
20002000
case 0x700:
2001-
return pll_cfg_table5[_SHIFTR(hid1,27,5)];
2001+
switch(_SHIFTR(pvr,16,4)) {
2002+
case 0x1:
2003+
return pll_cfg_table5[_SHIFTR(hid1,27,5)];
2004+
default:
2005+
return pll_cfg_table4[_SHIFTR(hid1,28,4)];
2006+
}
2007+
break;
20022008
}
20032009
return 0.0;
20042010
}
20052011

2012+
u32 SYS_GetCoreFrequency(void)
2013+
{
2014+
u32 clock;
2015+
clock = *((u32*)0x800000fc);
2016+
if(!clock) clock = TB_BUS_CLOCK * SYS_GetCoreMultiplier();
2017+
if(!clock) clock = TB_CORE_CLOCK;
2018+
return clock;
2019+
}
2020+
20062021
s8 SYS_GetCoreTemperature(void)
20072022
{
20082023
s32 i,ret;

0 commit comments

Comments
 (0)