Hi,
I have a solution for fast tick rates on system clocks running a p55 chipset (core "i" series processor).
I am running a Acer Aspire 5740 Hackintosh with a core i5 430m processor
The issue is caused by an incorrectly set Front Side Bus Frequency.
Step 0(Prerequisites & Setup))
Requirements:
-A p55 PC running OS X Snow Leopard
-Chameleon RC4 Binaries *Installed
-Chameleon RC4 Source Code
-XCode
-Knowledge of Coding (This isn't a tutorial for newbies)
-Knowledge of Chameleon (You must know how to boot your PC and setup your bootloader)
-Basic knowledge of mac os x and unix command line (this isn't a tutorial for newbies)
*and working
(Setup)
Navigate to <root of chameleon source>/i386/libsaio/
Find the files "freq_detect.h, and freq_detect.c"
In freq_detect.c you will find a function named calculate_freq() this function determines your FSB frequency based off your processor's TSC frequency and Core Multiplier, problem is, it has no support for our processors...
STEP 1)
First thing you need to do is enable freq_detect's debug mode by modifying the header
On line 10 of freq_detect.h change:
to:Code:#define DEBUG_FREQ 0
STEP 2)Code:#define DEBUG_FREQ 1
Build the project as you normally would, by navigating to the root folder of the source code in a terminal and using the make command
After this you can replace the built binarys in your current build of chameleon
STEP 3)
Upon startup a prompt will tell you your CPU's model family and extended family numbers, write these down, if you already know them you may skip this part.
<Press Any Key>
After you write them down the test will run to calculate your FSB frequency, it will fail to find the Core Multiplier, and set the FSB to 100MHz, Causing our issues with tick rate among other things.
<Press Enter to continue>
STEP 4)
>WARNING< This is for Core "i" series processors ONLY:
Once you have found your CPU's Model Number and Family number, you can then modify our calculate_freq() function to find the correct multiplier.
In the function you will find that it has support for nehalem model CPUs:
Find this:
well suprisingly, they are similar to our "i" series processors, they have turbo boost, hyper threading etc. And we are only trying to find the multiplier to calculate the correct FSB frequency...Code:/* Nehalem CPU model */ if (cpu_family == 0x06 && (cpu_model == 0x1a || cpu_model == 0x1e)) { msr = rdmsr64(MSR_PLATFORM_INFO); currcoef = (msr >> 8) & 0xff; msr = rdmsr64(MSR_FLEX_RATIO); if ((msr >> 16) & 0x01) { flex_ratio = (msr >> 8) & 0xff; if (currcoef > flex_ratio) currcoef = flex_ratio; } if (currcoef) { DBG("%d\n", currcoef); fsbFrequency = (tscFrequency / currcoef); } cpuFrequency = tscFrequency; }
To do this you need only add the hexadecimal value of your processor's model number to this function, for example, my CPU:
Model 37 Family 6
37 in hex is 25 so I modified my function to:
Replace '0x25' with your CPU's Model Number value in hexadecimal:
Then build your project, (DO NOT DISABLE DEBUG MODE TO BE SURE YOU GET THE DESIRED EFFECT)Code:/* Nehalem CPU model */ if (cpu_family == 0x06 && (cpu_model == 0x1a || cpu_model == 0x1e || cpu_model == 0x25)) { msr = rdmsr64(MSR_PLATFORM_INFO); currcoef = (msr >> 8) & 0xff; msr = rdmsr64(MSR_FLEX_RATIO); if ((msr >> 16) & 0x01) { flex_ratio = (msr >> 8) & 0xff; if (currcoef > flex_ratio) currcoef = flex_ratio; } if (currcoef) { DBG("%d\n", currcoef); fsbFrequency = (tscFrequency / currcoef); } cpuFrequency = tscFrequency; }
I booted my computer up and debug mode reported that my processor had a multiplier of 17 and FSB of 133MHz
You may disable debug mode, rebuild and never touch the source code again
Please post all results here, I will form a list of confirmed CPUs here as you report them working or not.
Confirmed CPUs:
* Core i5 430m (Mobile)



LinkBack URL
About LinkBacks









Reply With Quote

Bookmarks