Am Donnerstag, den 07.03.2013, 20:53 +0400 schrieb Аладышев Константин:
AGESA code have two mechanisms to run tasks on AP cores. The first one is used before "Relinquish control of APs", and the second one is used after it.
I doubt in the second one, cause it is used only in probe filter initialization (and now OS can't boot with this feature)
I walked "RunLateApTaskOnAllAPs(..)" function [the second mechanism] step by step and didn't find of how system transmits task poinetrs to APs. It seems like code executes on BSC (boot strap core) as many times as APs present in system.
AGESA code is very complicated, we traveles a lot to final function, that is located in the same file. If someone look at code, I drew little scheme of this travel. Here it is: http://tinypic.com/r/25sx7p3/6 Maybe i'am missing something, but I can't see the point, where agesa transmits pointers to APs.
Also i put LibAmdMsrRead function in DisableAllCaches function and read MSRs containing NodeId and BSC bits. And for all cases of its execution DisableAllCaches prints that NodeId=0 and BSC=1. If i didn't mess up, it proves my theory above.
So... How does "RunLateApTaskOnAllAPs(..)" work?
In the #coreboot IRC channel, Aladyshev pointed out that coreboot uses AGESA version 1.2 and the proprietary vendor BIOS of his Supermicro boards uses AGESA version 1.5. So it might be a good idea to check the changes between these versions.
Thanks,
Paul