Jump to content

Chameleon RC5 mode with mem detection enabled and automatic P-States & C-States generation for native power managment


kozlek
 Share

1,214 posts in this topic

Recommended Posts

I've just noticed that, and corrected chameleon to fit my needs. We're gonna need an option in boot.plist to force it, isn't ?

 

We could parse in chameleon CPU specification string to check if it i5 or i7 with the same model number.

Link to comment
Share on other sites

@ mozodojo, rekursor and other developers

 

My friend got the issue of CPU info as same as Trauma! did.

 

My friend's PC spec:

 

CPU : Intel® Core™ i5 Processors 750 2.66 GHz

Mainboard : GA-P55A-UD3P (rev. 1.0)

Display : Asus GT240 / 1G DDR3

Ram : Kingtons DDR3 Bus 1333 4GB

 

In About This Mac, it showed the system as i7. Also, P-States was not generated. I have two pictures from my friend.

 

Thank you.

 

5c0voo.png

33oi0lf.jpg

Link to comment
Share on other sites

I added this to the end of setup_nhm in dram_controllers.c and it seems to get the QPI multiplier OK on my system.

 

unsigned long qpimult;

qpimult = pci_config_read32(PCIADDR(nhm_bus, 2, 1), 0x50);

qpimult &= 0x7F;

DBG("qpimult %d\n", qpimult);

Link to comment
Share on other sites

And what about the extended model number ?

is it the same ?

If not, we can distinguish them :)

 

Extmodel shows 0x1 in chameleon. Maybe our Model/Ext.Model resolving algo has a mistake?

Link to comment
Share on other sites

Extmodel shows 0x1 in chameleon. Maybe our Model/Ext.Model resolving algo has a mistake?

 

I noticed a difference with what cpu-z/cpu-x shows and what sysctl(and debug output from boot) shows and thought I was just missing something.

 

sysctl and boot:

machdep.cpu.model: 26 (1Ah)

machdep.cpu.extmodel: 1

 

cpu-z and netkas' cpu-x:

model A

ext model 1A

 

EDIT: According to Intel doc 241618.pdf(pg 20&21) the boot code is doing the right thing and the model numbers are correct according to the spec. I don't know what's up with cpu-z/x?

Link to comment
Share on other sites

I hacked smbios_patcher.c to detect SMbusspeed. Probably should move the nhm_bus business into Platform.CPU and scan_platform. Here's a boot file for anyone with Core i7/i5/i3 if they want to test. Look in System Profiler under Processor Interconnect Speed.

 

 

boot.zip

 

Credit to rek for the bus detection code.

 

include "pci.h"

...

			switch (Platform.CPU.Model)
			{
				case 0x0F: // Intel Core (65nm)
				case 0x17: // Intel Core (45nm)
				case 0x1C: // Intel Atom (45nm)
					return 0; // TODO: populate bus speed for these processors
				case 0x19: // Intel Core i5 650 @3.20 Ghz
				case 0x1A: // Intel Core i7 LGA1366 (45nm)
				case 0x1E: // Intel Core i5, i7 LGA1156 (45nm)
				case 0x1F: // Intel Core i5, i7 LGA1156 (45nm) ???
				case 0x25: // Intel Core i3, i5, i7 LGA1156 (32nm)
				case 0x2C: // Intel Core i7 LGA1366 (32nm) 6 Core
				case 0x2E: // Intel Core i7 LGA1366 (45nm) 6 Core ???
				{
					int nhm_bus = 0x3F;
					static long possible_nhm_bus[] = {0xFF, 0x7F, 0x3F};
					unsigned long did, vid;
					int i;

					// Nehalem supports Scrubbing
					// First, locate the PCI bus where the MCH is located
					for(i = 0; i < sizeof(possible_nhm_bus); i++)
					{
						vid = pci_config_read16(PCIADDR(possible_nhm_bus[i], 3, 4), 0x00);
						did = pci_config_read16(PCIADDR(possible_nhm_bus[i], 3, 4), 0x02);
						vid &= 0xFFFF;
						did &= 0xFF00;

						if(vid == 0x8086 && did >= 0x2C00)
							nhm_bus = possible_nhm_bus[i]; 
					}

					unsigned long qpimult, qpibusspeed;
					qpimult = pci_config_read32(PCIADDR(nhm_bus, 2, 1), 0x50);
					qpimult &= 0x7F;
					DBG("qpimult %d\n", qpimult);
					qpibusspeed = (qpimult * (Platform.CPU.FSBFrequency/1000000)) << 1;
					DBG("qpibusspeed %d\n", qpibusspeed);
					return qpibusspeed;
				}
			}
...

Link to comment
Share on other sites

I tried the GenerateCStates and GeneratePStates with my overclocked E6420 and it works great, DropSSDT caused a kernel panic as expected.

 

But I've got a question about "Found ACPI CPU: CPU#" messages - is it normal that it outputs 4 (0-3) of them even when I have a dual core processor? Later while booting it says

 

01.08.10 2:27:19	kernel	AppleACPICPU: ProcessorId=0 LocalApicId=0 Enabled
01.08.10 2:27:19	kernel	AppleACPICPU: ProcessorId=1 LocalApicId=1 Enabled
01.08.10 2:27:19	kernel	AppleACPICPU: ProcessorId=2 LocalApicId=2 Disabled
01.08.10 2:27:19	kernel	AppleACPICPU: ProcessorId=3 LocalApicId=3 Disabled

 

Which I understand, but where do the 2 and 3 come from at the first place.

Link to comment
Share on other sites

I tried the GenerateCStates and GeneratePStates with my overclocked E6420 and it works great, DropSSDT caused a kernel panic as expected.

 

But I've got a question about "Found ACPI CPU: CPU#" messages - is it normal that it outputs 4 (0-3) of them even when I have a dual core processor? Later while booting it says

 

01.08.10 2:27:19	kernel	AppleACPICPU: ProcessorId=0 LocalApicId=0 Enabled
01.08.10 2:27:19	kernel	AppleACPICPU: ProcessorId=1 LocalApicId=1 Enabled
01.08.10 2:27:19	kernel	AppleACPICPU: ProcessorId=2 LocalApicId=2 Disabled
01.08.10 2:27:19	kernel	AppleACPICPU: ProcessorId=3 LocalApicId=3 Disabled

 

Which I understand, but where do the 2 and 3 come from at the first place.

 

it's normal according to me 4 processors to be reported -- it's coming from the kernel. i have the same reports in my kernel log, although im with Core 2 Duo.

Link to comment
Share on other sites

it's normal according to me 4 processors to be reported -- it's coming from the kernel. i have the same reports in my kernel, although im with Core 2 Duo.

 

Dunno why everybody gets 50% of those more and later that 50% will be disabled.

 

Edit: Chameleon doesn't seem to get a proper UUID with SMUUID entry from smbios.plist (at least according to the chameleon and says something about UUID=0123456789ABCDEF which isn't clearly my UUID), via SystemId it works though and I don't get that weird UUID.

Link to comment
Share on other sites

Ingram,

according to me the reason you've got 4 cpus reported by the booter ("Found ACPI CPU: CPU#") is that you've 4 cpus declared in the _PR scope in your DSDT like this, although you've Core 2 Duo:

	Scope (_PR)
{
	Processor (P000, 0x00, 0x00000810, 0x06) {}
	Processor (P001, 0x01, 0x00000810, 0x06) {}
	Processor (P002, 0x02, 0x00000810, 0x06) {}
	Processor (P003, 0x03, 0x00000810, 0x06) {}
}

after the booter finishes the kernel reports those 4 cpus (in our case 2 of them are disabled) cause it's the way the kernel is designed... There's nothing to worry about this.

 

try to remove the SMUUID entry from the smbios.plist and add the following into the boot.plist:

	<key>EfiPlatformSystemID</key>
<string>Yes</string>

 

@Rekursor

 

I've managed to install Winbowz... you're right about the Mushkin and G.Skill memory serial numbers -- CPU-Z didn't not reported them, too :( Mushkin and G.Skill have no serial numbers in their DIMMS (or there's no known way to read it). I can live with this. :)

Link to comment
Share on other sites

Ingram,

according to me the reason you've got 4 cpus reported by the booter ("Found ACPI CPU: CPU#") is that you've 4 cpus declared in the _PR scope in your DSDT like this, although you've Core 2 Duo:

	Scope (_PR)
{
	Processor (P000, 0x00, 0x00000810, 0x06) {}
	Processor (P001, 0x01, 0x00000810, 0x06) {}
	Processor (P002, 0x02, 0x00000810, 0x06) {}
	Processor (P003, 0x03, 0x00000810, 0x06) {}
}

after the booter finishes the kernel reports those 4 cpus (in our case 2 of them are disabled) cause it's the way the kernel is designed... There's nothing to worry about this.

 

try to remove the SMUUID entry from the smbios.plist and add the following into the boot.plist:

	<key>EfiPlatformSystemID</key>
<string>Yes</string>

 

@Rekursor

 

I've managed to install Winbowz... you're right about the Mushkin and G.Skill memory serial numbers -- CPU-Z didn't not reported them, too :( Mushkin and G.Skill have no serial numbers in their DIMMS (or there's no known way to read it). I can live with this. :)

 

Alright, I won't worry about the CPU thing anymore.

 

I tried EfiPlatformSystemID but without SystemId it will still output:

No UUID present in SMBIOS System Information Table
[ERROR] UUID='0123456789ABCDEF' syntax error
Customizing SystemID with :

 

About your memory serial numbers - I don't have them on my A-DATA sticks either (not even on windows).

Link to comment
Share on other sites

I tried EfiPlatformSystemID but without SystemId it will still output:

No UUID present in SMBIOS System Information Table
[ERROR] UUID='0123456789ABCDEF' syntax error
Customizing SystemID with :

strange... what is the version of your booter?

see my SMBIOS anf boot plists for reference:

Link to comment
Share on other sites

Just trying this new boot with a Q6600 overclocked to 3.0 Ghz and my results are:

 

-CPU is at lower temp by about 10 to 15 degrees C

-When PC starts, CPU it's at a lower frequency and I have some sound stuttering when playing youtube videos but If I open for. ex. Garage Band the problem goes away.

 

I have this on dsdt.aml

	Scope (_PR)
{
	Processor (CPU0, 0x00, 0x00000410, 0x06) {}
	Processor (CPU1, 0x01, 0x00000410, 0x06) {}
	Processor (CPU2, 0x02, 0x00000410, 0x06) {}
	Processor (CPU3, 0x03, 0x00000410, 0x06) {}
}

 

And I have this on com.apple.Boot.plist

<key>GeneratePStates</key>
<string>Yes</string>
<key>GenerateCStates</key>
<string>Yes</string>
<key>DropSSDT</key>
<string>Yes</string>

 

How to fix this ?

 

 

ps. Also, with this method I don´t get Sleep to work

Link to comment
Share on other sites

Great bootloader, works good on my Hackintosh.

 

But I have one problem, I don't have a Hardware UUID in system profiler..

I use a SMBios.plist file with only SMserial in it.

 

it detects my PC as a iMac 11,1, and it detects my memory OK.

Link to comment
Share on other sites

I hacked smbios_patcher.c to detect SMbusspeed. Probably should move the nhm_bus business into Platform.CPU and scan_platform. Here's a boot file for anyone with Core i7/i5/i3 if they want to test. Look in System Profiler under Processor Interconnect Speed.

 

 

boot.zip

 

Credit to rek for the bus detection code.

 

include "pci.h"

...

			switch (Platform.CPU.Model)
			{
				case 0x0F: // Intel Core (65nm)
				case 0x17: // Intel Core (45nm)
				case 0x1C: // Intel Atom (45nm)
					return 0; // TODO: populate bus speed for these processors
				case 0x19: // Intel Core i5 650 @3.20 Ghz
				case 0x1A: // Intel Core i7 LGA1366 (45nm)
				case 0x1E: // Intel Core i5, i7 LGA1156 (45nm)
				case 0x1F: // Intel Core i5, i7 LGA1156 (45nm) ???
				case 0x25: // Intel Core i3, i5, i7 LGA1156 (32nm)
				case 0x2C: // Intel Core i7 LGA1366 (32nm) 6 Core
				case 0x2E: // Intel Core i7 LGA1366 (45nm) 6 Core ???
				{
					int nhm_bus = 0x3F;
					static long possible_nhm_bus[] = {0xFF, 0x7F, 0x3F};
					unsigned long did, vid;
					int i;

					// Nehalem supports Scrubbing
					// First, locate the PCI bus where the MCH is located
					for(i = 0; i < sizeof(possible_nhm_bus); i++)
					{
						vid = pci_config_read16(PCIADDR(possible_nhm_bus[i], 3, 4), 0x00);
						did = pci_config_read16(PCIADDR(possible_nhm_bus[i], 3, 4), 0x02);
						vid &= 0xFFFF;
						did &= 0xFF00;

						if(vid == 0x8086 && did >= 0x2C00)
							nhm_bus = possible_nhm_bus[i]; 
					}

					unsigned long qpimult, qpibusspeed;
					qpimult = pci_config_read32(PCIADDR(nhm_bus, 2, 1), 0x50);
					qpimult &= 0x7F;
					DBG("qpimult %d\n", qpimult);
					qpibusspeed = (qpimult * (Platform.CPU.FSBFrequency/1000000)) << 1;
					DBG("qpibusspeed %d\n", qpibusspeed);
					return qpibusspeed;
				}
			}
...

 

 

dgobe thanks for this fix.

 

With your booter my Core i7 920 GA EX58UD5 can boot now with DropSSDT=Yes GeneratePStates=Yes GenerateCStates=Yes without Kernel Panic.

 

(Mozodojos booted only wih GenerateCStates=Yes

GeneratePStates panicked)

 

Speedstep works perfectly with unmodified DSDT Scope_PR

 

Qpi interconnect speed is correctly detected 6,48 GT/s overclocked to 21x184.

 

 

Only Memory Speed is detected as 1066 MHZ - should be 1440 MHZ.

 

Update:

 

If I use DropSSDT=Yes System is stuck to slow speed (Geekbench64 7500 instead of 13000).

 

Memory Detection seems to be right my OCZ 1600 Platinum is 1066 ram acc to SPD (Everest).

Link to comment
Share on other sites

Using the latest from trunk (r291)

 

E: I checked your files and I couldn't find any bigger difference.

 

it's realy strange you have no Hardware UUID generated correctly.

Before using and testing Chameleon RC5 i was booting with valv's booter, and before that i was with Asere's booter.

All those 3 boot loaders generate correct Hardware UUID for me.

 

@Taruga:

maybe you would like to take a look at my current DSDT in order to investigate your Sleep issue. I've always Sleep, Wake, Shutdown and Restart 100% working no matter the boot version. There're also my SMBIOS.plist and com.apple.boot.plist attached in one of my previous posts if you would like to compare/ investigate. And about your sound stuttering there was a fix as far as i remember... it's was related to the machine model (i.e. injecting MacPro3,1 or MacPro4,1 via SMBIOS.plist -- trying this for example).

Link to comment
Share on other sites

@Taruga:

maybe you would like to take a look at my current DSDT in order to investigate you Sleep issue. I've always Sleep, Wake, Shutdown and Restart 100% working no matter the boot version. There're also my SMBIOS.plist and com.apple.boot.plist attached in one of my previous posts if you would like to compare/ investigate. And about your sound stuttering there was a fix as far as i remember... it's was related to the machine model (i.e. injecting MacPro3,1 or MacPro4,1 via SMBIOS.plist -- trying this for example).

 

 

I will take a look at your DSDT and see if I can at least get Sleep back, as for the SMBIOS.plist , I've already tested with MacPro3,1 and iMac 11,1 with no difference in sound. Seems that I always have to force load for ex. Garage Band (and then I can close it) for the CPU to get working at higher frequency and avoid the sound issue

Link to comment
Share on other sites

I will take a look at your DSDT and see if I can at least get Sleep back, as for the SMBIOS.plist , I've already tested with MacPro3,1 and iMac 11,1 with no difference in sound. Seems that I always have to force load for ex. Garage Band (and then I can close it) for the CPU to get working at higher frequency and avoid the sound issue

 

huh... strange... did you tested with MacPro4,1? i think there's a simple solution, you've just find it somewhere here. wish you good luck :)

Link to comment
Share on other sites

Taruga, re. sleep: with most bootloaders I have to enable the No Execute (no nx) bit in BIOS for sleep + wake-up to work.

 

Apart from that: welcome back :)

 

Well, If I just replace this 'boot' with my old 'boot' file, I get Sleep back.

 

huh... strange... did you tested with MacPro4,1? i think there's a simple solution, you've just find it somewhere here. wish you good luck :)

 

 

From what I remember, with MacPro4,1 I get a kernel panic

Link to comment
Share on other sites

Taruga, i see... Maybe you could find something in my DSDT. Maybe those sound stutters are somehow related to IRQs in the HPET, or similar in the DSDT (just an assumption)...

Link to comment
Share on other sites

 Share

×
×
  • Create New...