On 10/28/15 17:54, Kinney, Michael D wrote:
> Laszlo,
> 
> I do not believe any X64 PEI testing has not been performed with this module. 
>  We will investigate a fix.

Thank you.

In any case, in OVMF we might be able to use this module nonetheless,
with the OvmfPkgIa32X64.dsc build (== 32-bit PEI, 64-bit DXE).

Thanks!
Laszlo

> 
> Thanks,
> 
> Mike
> 
>> -----Original Message-----
>> From: Laszlo Ersek [mailto:[email protected]]
>> Sent: Wednesday, October 28, 2015 8:57 AM
>> To: Fan, Jeff; Yao, Jiewen
>> Cc: edk2-devel-01; Kinney, Michael D
>> Subject: about the SMM_S3_RESUME_SMM_64 branch in S3Resume2Pei
>>
>> Hi,
>>
>> I have a question about the following code in
>> "UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c", function
>> S3RestoreConfig2():
>>
>>>     if (SmmS3ResumeState->Signature == SMM_S3_RESUME_SMM_64) {
>>>       //
>>>       // Switch to long mode to complete resume.
>>>       //
>>>
>>>       InterruptStatus = SaveAndDisableInterrupts ();
>>>       //
>>>       // Need to make sure the GDT is loaded with values that support long
>> mode and real mode.
>>>       //
>>>       AsmWriteGdtr (&mGdt);
>>>       //
>>>       // update segment selectors per the new GDT.
>>>       //
>>>       AsmSetDataSelectors (DATA_SEGEMENT_SELECTOR);
>>>       //
>>>       // Restore interrupt state.
>>>       //
>>>       SetInterruptState (InterruptStatus);
>>>
>>>       AsmWriteCr3 ((UINTN)SmmS3ResumeState->SmmS3Cr3);
>>>
>>>       //
>>>       // Disable interrupt of Debug timer, since IDT table cannot work in 
>>> long
>> mode.
>>>       // NOTE: On x64 platforms, because DisablePaging64() will disable
>> interrupts,
>>>       // the code in S3ResumeExecuteBootScript() cannot be halted by soft
>> debugger.
>>>       //
>>>       SaveAndSetDebugTimerInterrupt (FALSE);
>>>
>>>       AsmEnablePaging64 (
>>>         0x38,
>>>         SmmS3ResumeState->SmmS3ResumeEntryPoint,
>>>         (UINT64)(UINTN)AcpiS3Context,
>>>         0,
>>>         SmmS3ResumeState->SmmS3StackBase + SmmS3ResumeState-
>>> SmmS3StackSize
>>>         );
>>>     }
>>
>> At the end of this block, the AsmEnablePaging64() function is called. That 
>> call
>> results in the following call tree, *if* the module was built for X64:
>>
>> AsmEnablePaging64()           [MdePkg/Library/BaseLib/X86EnablePaging64.c]
>>  InternalX86EnablePaging64() [MdePkg/Library/BaseLib/X64/Non-existing.c]
>>    ASSERT (FALSE)
>>
>> This is because the InternalX86EnablePaging64() functionality is unavailable 
>> in
>> BaseLib on X64.
>>
>> My question: how is this branch in S3RestoreConfig2() supposed to work *at
>> all* in an X64 PEI build?
>>
>> Thank you,
>> Laszlo

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to