As I will soon receive my Ivy Bridge processor and test it on my iMac 2011, I made a simple modification of the intel Microcodes.
People erroneously think that upgrading a firmware's set of microcodes will make the computer support newer processors. This is false. Microcodes are errata. No processor sold should need microcodes to boot. Besides, the operating system loads a newer version of microcodes anyway.
Experience shows that adding microcodes to Mac firmware will make the system less likely to boot.
New processors models for any socket are always made fully compatible with older hardware. Features are added, not deleted. Processor compatibility is limited by badly written firmware. In some cases (
Dell) this is intentional.
When a firmware starts running one of the first things it does is calls
CPUID (op code 0F A2). Good firmware checks the processor family, and if it actually has specific code for multiple families, chooses the appropriate branch. Bad firmware checks for a specific processor model number and halts if it is not an exact match.
To fix the firmware you should do the same kind of disassembly and analysis as I have done for the Mac Pro 2,1 firmware. Start reading from this post:
In the seven years the DELL Precision 690 microcode update thread has been up on the bios-mods.com site no one has figured out how to run Harpertowns or even to boot with quad-core Clovertowns on the wrong motherboard revision. User DeathBringer has however posted this insightful piece of code...
forums.macrumors.com
The Mac Pro 2,1 firmware accepts Clovertowns (CPUID 06F0h), but rejects Harpertowns (CPUID 0670h).
I replaced as planned :
CpuIoDxe BAE7599F-3C6B-43B7-BDF0-9CE07AA91AA6
CpuInitDxe 62D171CB-78CD-4480-8678-C6A2A797A8DE
PchInitDxe DE23ACEE-CF55-4FB6-AA77-984AB53DE823
PchS3Peim 271DD6F2-54CB-45E6-8585-8C923C1AC706
AppleMemoryTest 60A14F6F-55B9-47A3-B067-01A93027F3FE
PowerMgmtDxe F7731B4C-58A2-4DF4-8980-5645D39ECE58
CpuInitPei x2 01359D99-9446-456D-ADA4-50A711C03ADA
MemoryInit x2 3B42EF57-16D3-44CB-8632-9FDB06B41451
PchInitPeim x2 FD236AE7-0791-48C4-B29E-29BDEEE1A838
S3ResumePei x2 8BCEDDD7-E285-4168-9B3F-09AF66C93FFE
CpuS3Pei x2 C866BD71-7C79-4BF1-A93B-066B830D8F9A
The processor-specific parts of the firmware are in the Pre-EFI Initialization section. It contains the PEI modules. The most important is the SEC core module, as it is the first one to be executed.
The EFI drivers in the .DXE modules are not processor specific. They do not need to be changed, unless you want to add new functionality to your Mac, like support for NVMe and APFS booting.
The socket can be used for IvyBridge, the firmware not. This is all this thread is about.
Upgrading a 2011 iMac with a Ivy Bridge CPU would be a great idea. The 2011 iMac is far more upgradable than the slim 2012 models. There is another thread on processor upgrades.
This is a Wiki post with information collected from the entire thread. Before you post, read this first. The difference between Mid 2011 21.5" and 27" concerning CPU upgradability is mainly caused by the available power from the power supply. --- The 21.5" has 210W power supply, the 27" has...
forums.macrumors.com
The GPU also needs to be upgraded to run modern versions of macOS.
iMac 2009 to 2011 MXM3 graphics card upgrade (Lastest update 10/13/2023 - this is the official documentation page - you found it finally!) This is the single and only documentation post. During the last years we constantly updated this post to reflect the lastet development of vBIOS and OCLP...
forums.macrumors.com
Update September 14, 2021:
I extracted the SEC-core module from the 27 inch firmware file provided by
@StephN999 using UEFITool. I then opened it using Hopper Disassembler V4. I found three places where the code looks at the CPUID. Two of these are at the start of the module, where the code loads the microcode.
In the first case the code loads the
CPUID into the EAX registers and scans the section of memory containing the microcodes for a match. If it finds a match, it does another check to see if the CPU is an Arrandale (0x20650), or an "Auburndale" (0x106F0). If so, it does some additional processing.
The last part of the code (wrmsr) writes the start address of the microcode into Model Specific Register 0x79, causing the processor to load the microcode from memory.
I cannot see why the firmware code would reject an Ivy Bridge processor, not even when no microcode is present.