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

