I got it! The culprit is the code that does this in BIOS: [MSR 0x122] |= 3;
So, just blank (NOP) out that piece of code in BIOS and have fun with x64. I don't have any experience with BIOS modding, but I am familiar with assembly language programming and almost everything in Intel SDM.
It took me quite some time to figure out there are 2 places to patch (for bootstrap processor and application processors).
Below are some notes to help you gain confidence that nothing fishy is being added. Use your hex editor compare function to compare between the BIOS file from Asus and my patched version.
Original (starting point):
1025C-ASUS-1301.ROM
2097152 bytes
SHA-256: 73bae3b7e061e4d6054e70b0405150ed93258d39b5561bdfb902554edd3e0a4f
Code:
//32-bit mode
53 push ebx
6aff push 0xffffffff
53 push ebx
6a03 push 0x3
6822010000 push 0x122
e85c240000 call func //NOP out this instruction
83c414 add esp,0x14
//32-bit mode
b922010000 mov ecx,0x122
0f32 rdmsr
0c03 or al,0x3
0f30 wrmsr //NOP out this instruction
After NOP out the 2 locations with 0x90 (7 bytes in total),
SHA-256: af673c221dd145ea9faa495b5fac21d945541396a72cec3943ec1581e4a7167b
With that, you can enjoy your x64 system.
Optionally, you can update the microcode as well. I discovered Acer AOD270 BIOS has a newer version of the microcode.
In Asus 1025C (and old BIOS version of Acer AOD270): Version 0x010C, 2011-11-23
In Acer AOD270: Version 0x010D, 2011-12-22
With new microcode,
SHA-256: f568ec0f4ec31cc0a12b469a5092a233285bcfb018c6bdbd05a3ba5b765ad347
Note the hashes are on 2097152-byte ROM file, not zip file.