Edit: sorry. I didn’t describe the context.
My old GE60-16GC laptop has two SO-DIMM slots. This laptop has been working with 2×8GByte DDR3L memory sticks (modules) for quite some time.
As programs become more and more memory-demanding over the years, even 2×8 = 16 GB of total memory turns to be inadequate. On this old laptop, I’ve been frequently seeing >90% of system memory usage for several months. Therefore I’m looking for memory upgrades for it, despite this laptop can be definitely called “obsolete” nowadays.
As all two memory slots are already occupied, I have to replace existing 8GB memory sticks with larger 16GB ones.
However it was not quite clear whether 16GB memory sticks work with 4th gen (Haswell) Intel Core CPUs. I found that there were rumors saying that although Haswell CPUs do not officially supports 16GB memory sticks, this issue may still be just a software-level limitation which roots in the memory initialization code of BIOS, called the MRC (memory reference code).
The rumors said that because 16GB(yte) memory sticks (modules) are made of 8Gbit DRAM chips, and the MRC doesn’t know how to deal with such 8Gbit DRAM chips, as soon as the MRC finds that a memory stick marks itself as being made of such 8Gbit chips in its SPD data, the system hangs (does not boot) .
ASUS did officially release BIOS upgrades to support such 16GB memory sticks, which somehow made this rumor convincing to me - although such BIOS upgrades are limited to several desktop motherboards only (and it’s for IvyBridge-E X79 platform, not Haswell), I didn’t hear ASUS doing the same for mobile platform (laptops).
I decided to validate whether this rumor is factually correct. So far the outcomings is not good - (on my old Haswell laptop) it does seem to be hardware-level limit rather than a software one.
When browsing this old post, I heard that it might not be a hardware limitation that Haswell CPUs cannot take 8Gbit chips (16GB DDR3 module): [OFFER] Var. ASUS Sabertooth X79 BIOSes (NVMe/Bifurc./uCode/OpROM) - #80 by Lost_N_BIOS
I found a link to notebookreview forums. Thanks to the web archive project, such post can still be recovered, and the next page contains two snippets of assembly code.
I can find that two snippets of code in my BIOS as well - althought it’s not 100% exactly the same.
Out of curiosity, I installed one 16GB DDR3L module together with another 8GB one to my GE60-16GC laptop.
The system can boot as usual, and both two modules can be detected by either BIOS or HWINFO etc. RwEverything can read out SPD info of both two modules as well.
However the 16GB module does not actually work: either (bare-metal) memtest86+ or (under Windows) taskmgr.exe etc does not show full 16+8=24GB of memory, there’s just 8GB available.
If I take out the 8GB one, then the system won’t boot with the 16GB one alone, just black screen, and I have to unplug the power supply to forcibly shut it down.
Now I don’t know what exactly is going on - does my experiment reveal that it is indeed a hardware limit?
After all it does not match with the “MRC makes the system hang” rumor when both 16GB and 8GB modules are present. (edit: according to the rumors, the MRC should make the system hang as soon as it detects a 16GB module - however as mentioned above the system didn’t hang with such 16GB+8GB configuration)
I can’t see the corresponding code which execute the “artificially hang when SPD byte #4 is 0x05” logic in quoted assembly code snippet either.
Or maybe it’s still a theoretically unlockable software limitation, which requires a BIOS mod?
Furthermore, I tried to modify the first snippet of code (which contains look up table) to see what would happen.
(edit: the original BIOS code has a cap which limits capacity of individual memory module to not more than 16GB. 16GB module does not hit this hard-coded software cap coded here actually)
If I lower the cap from 16GB to some smaller value like 15GB, then the BIOS won’t detect the 16GB module, but it’s still detectable by HWINFO. (edit: thus, it’s at least verified that this code path is definitely executed)