Laszlo,

I do not believe any X64 PEI testing has not been performed with this module.  
We will investigate a fix.

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