Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 18 additions & 14 deletions lib/pbkit/pbkit.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
#define GPU_IRQ 3

#define XTAL_16MHZ 16.6667f
#define DW_XTAL_16MHZ 16666666
#define DW_XTAL_16MHZ 16666667

#define MAX_EXTRA_BUFFERS 8

Expand Down Expand Up @@ -2808,28 +2808,32 @@ int pb_init(void)

if (mdiv)
{
//Xtal in Xbox is at 16.666 Mhz but we want 31.25Mhz for GPU...
if (((DW_XTAL_16MHZ*ndiv)/(odiv<<pdiv))/mdiv!=233333324)
DWORD num = ((DW_XTAL_16MHZ * ndiv) / (odiv << pdiv)) / mdiv;
DWORD den = 1000000000 / 32; // timer frequency

while (!((num | den) & 1))
{
num >>= 1;
den >>= 1;
}

while ((0x1FFFE < num || 0x1FFFE < den))
{
//This PLL configuration doesn't create a 233.33 Mhz freq from Xtal
//Have this issure reported so we can update source for that case
debugPrint("PLL=%lu\n",((DW_XTAL_16MHZ*ndiv)/(odiv<<pdiv))/mdiv);
return -5;
num >>= 1;
den >>= 1;
}

//program GPU timer
VIDEOREG(NV_PTIMER_NUMERATOR) = (num + 1) >> 1;
VIDEOREG(NV_PTIMER_DENOMINATOR) = (den + 1) >> 1;
VIDEOREG(NV_PTIMER_ALARM_0) = 0xFFFFFFFF;
}
else
{
pb_kill();
return -5; //invalid GPU internal PLL (Phase Locked Loop=GPU freq generator)
}

//program GPU timer in order to obtain 31.25Mhz (we assume PLL creates 233.33Mhz)
VIDEOREG(NV_PTIMER_NUMERATOR)=56968; //233333324/56968*7629=31247365 (31.25Mhz)
VIDEOREG(NV_PTIMER_DENOMINATOR)=7629;

VIDEOREG(NV_PTIMER_ALARM_0)=0xFFFFFFFF;


//The Gpu instance memory is a special place in PRAMIN area (VRAM attached to RAM?)
//Essential Gpu data will be stored there, for, I guess, top speed access.

Expand Down