Understood.
Cool. Thanks for the info.

If you have some clue on the SMM, please let us know.

Thank you
Yao Jiewen

> -----Original Message-----
> From: af...@apple.com [mailto:af...@apple.com]
> Sent: Tuesday, March 12, 2019 12:30 AM
> To: Yao, Jiewen <jiewen....@intel.com>
> Cc: Laszlo Ersek <ler...@redhat.com>; edk2-devel@lists.01.org; Ni, Ray
> <ray...@intel.com>; Dong, Eric <eric.d...@intel.com>
> Subject: Re: [edk2] UefiCpuPkg CpuDxe GDT init question?
> 
> 
> 
> > On Mar 11, 2019, at 9:04 AM, Yao, Jiewen <jiewen....@intel.com> wrote:
> >
> > Thanks Andrew.
> > + More CPU people in our team.
> >
> > Do you want to post your patch there for reference? :-)
> >
> > BTW: Would you please share how to trigger such case at your side?
> > Did you report above 4GB memory to be tested?
> 
> Jiewen,
> 
> I'm working on a chipset that is not open source and I or'ed in
> EFI_RESOURCE_ATTRIBUTE_TESTED to the above 4GB allocation in
> BuildResourceDescriptorHob(). The DXE Core then picked this area for the
> heap, as I seem to remember the 1st loop favors the PHIT, and the 2nd loop
> favors the largest area of free memory.
> 
> > As such all drivers are loaded to above 4GB?
> 
> DXE Core is loaded low, and all the drivers loaded by DXE are in > 4GB
> memory.
> 
> > Do you also allocate BIN to above 4GB?
> >
> 
> No I just marked the above 4G memory as tested.
> 
> Thanks,
> 
> Andrew Fish
> 
> > Thank you
> > Yao Jiewen
> >
> >
> >
> >> -----Original Message-----
> >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> >> Andrew Fish via edk2-devel
> >> Sent: Monday, March 11, 2019 11:59 PM
> >> To: Yao, Jiewen <jiewen....@intel.com>
> >> Cc: edk2-devel <edk2-devel@lists.01.org>; Laszlo Ersek
> <ler...@redhat.com>
> >> Subject: Re: [edk2] UefiCpuPkg CpuDxe GDT init question?
> >>
> >> Jiewen,
> >>
> >> These three fixes got me past the CpuDxe driver:
> >> https://bugzilla.tianocore.org/show_bug.cgi?id=1613
> >>
> >> Now I getting page faults loading SMM....
> >>
> >> Thanks,
> >>
> >> Andrew Fish
> >>
> >>> On Mar 8, 2019, at 7:10 PM, Andrew Fish <af...@apple.com> wrote:
> >>>
> >>>
> >>>
> >>>> On Mar 8, 2019, at 7:08 AM, Laszlo Ersek <ler...@redhat.com
> >> <mailto:ler...@redhat.com>> wrote:
> >>>>
> >>>> On 03/08/19 15:13, Yao, Jiewen wrote:
> >>>>> I guess the historic reason is that AP and BSP share same GDT before.
> As
> >> such, the GDT need to be below 4G, to let AP switch from real mode to
> >> protected mode.
> >>>>> We don't get issue, because Runtime memory is in BIN, and most
> >> platform allocates BIN under 4G.
> >>>>>
> >>>>> Some thought:
> >>>>> 1) I am think we not sure if AP is using same GDT as BSP today. If yes,
> we
> >> need GDT under 4G, by using MaxAddress. If no, there should be no
> >> restriction for BSP GDT. The (UINT32) case should be removed for BSP.
> But
> >> we still AP GDT below 4G, to support wake from INIT-SIPI-SIPI.
> >>>
> >>> Jiewen,
> >>>
> >>> It looks like there are several places that assume memory is < 4 GB in the
> >> CpuDxe driver.
> >>>
> >>> I noticed SetCodeSelector () is using a far jump to change the CS at that
> is
> >> limited < 4 GB. I had to hack around it via:
> >>>  popq    %rax
> >>>  pushq   %rcx
> >>>  pushq   %rax
> >>>  lretq
> >>>
> >>> There is some other crash later on.
> >>>
> >>>
> >>>>> 2) I am not sure why we need runtime memory. Do we need touch
> GDT
> >> at UEFI runtime?
> >>>>
> >>>> I could be confusing things *very badly*, but I vaguely remember that
> >>>> APs could be woken up spuriously later, and they must be able to
> execute
> >>>> code "enough" to go back to sleep.
> >>>>
> >>>> The following commits look relevant:
> >>>>
> >>>> - 7615702169b8 ("UefiCpuPkg/MpInitLib: Add AsmRelocateApLoop()
> >> assembly
> >>>> code", 2016-08-17)
> >>>>
> >>>> - 4d3314f69488 ("UefiCpuPkg/MpInitLib: Place APs in safe loop before
> >>>> hand-off to OS", 2016-08-17)
> >>>>
> >>>> - bf2786dc7900 ("UefiCpuPkg/DxeMpLib: Allocate new safe stack <
> 4GB",
> >>>> 2016-11-28)
> >>>>
> >>>
> >>> If I'm remembering correctly there are optional idle states for the AP. I
> >> think the real mode hlt loop might have used too much power on an UP
> OS.
> >>>
> >>> It is also not clear to me that we don't need the GDT when in real mode.
> In
> >> big-real mode you go to protected mode set the GDT and then it can get
> >> used for big-real so it seems like  the GDT is in play even in real mode.
> >>>
> >>> Thanks,
> >>>
> >>> Andrew Fish
> >>>
> >>>
> >>>> Laszlo
> >>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> Thank you
> >>>>> Yao Jiewen
> >>>>>
> >>>>>
> >>>>>> -----Original Message-----
> >>>>>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org
> >> <mailto:edk2-devel-boun...@lists.01.org>] On Behalf Of
> >>>>>> Laszlo Ersek
> >>>>>> Sent: Friday, March 8, 2019 12:00 AM
> >>>>>> To: Andrew Fish <af...@apple.com <mailto:af...@apple.com>>;
> >> edk2-devel <edk2-devel@lists.01.org <mailto:edk2-devel@lists.01.org>>
> >>>>>> Subject: Re: [edk2] UefiCpuPkg CpuDxe GDT init question?
> >>>>>>
> >>>>>> Hi Andrew,
> >>>>>>
> >>>>>> On 03/07/19 23:37, Andrew Fish via edk2-devel wrote:
> >>>>>>> I'm trying to understand why gdtPtr.Base is casting to (UINT32)?
> >>>>>>> 1) gdtPtr.Base is a a UINTN
> >>>>>>> 2) It is legal for AllocateRuntimePool() to return an address > 4GB
> >>>>>>>
> >>>>>>> It seems like the code should just cast to (UINTN)?
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>
> https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/CpuDxe/CpuG
> >>
> <https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/CpuDxe/Cpu
> >> G>
> >>>>>> dt.c#L151
> >>>>>>
> >>>>>> I think you are right.
> >>>>>>
> >>>>>> I'm missing the background on this too. I tried to see if any
> >>>>>> justification was given in a git commit message, but according to "git
> >>>>>> blame", this code dates back to the original addition of the driver,
> >>>>>> namely commit a47463f28382 ("Add CPU DXE driver for IA32 & X64
> >>>>>> processor
> >>>>>> architectures.", 2009-05-27). The commit message is unhelpful (for
> >> 3119
> >>>>>> lines added).
> >>>>>>
> >>>>>> Thanks
> >>>>>> Laszlo
> >>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> VOID
> >>>>>>> InitGlobalDescriptorTable (
> >>>>>>> VOID
> >>>>>>> )
> >>>>>>> {
> >>>>>>> GDT_ENTRIES *gdt;
> >>>>>>> IA32_DESCRIPTOR gdtPtr;
> >>>>>>>
> >>>>>>> //
> >>>>>>> // Allocate Runtime Data for the GDT
> >>>>>>> //
> >>>>>>> gdt = AllocateRuntimePool (sizeof (GdtTemplate) + 8);
> >>>>>>> ASSERT (gdt != NULL);
> >>>>>>> gdt = ALIGN_POINTER (gdt, 8);
> >>>>>>>
> >>>>>>> //
> >>>>>>> // Initialize all GDT entries
> >>>>>>> //
> >>>>>>> CopyMem (gdt, &GdtTemplate, sizeof (GdtTemplate));
> >>>>>>>
> >>>>>>> //
> >>>>>>> // Write GDT register
> >>>>>>> //
> >>>>>>> gdtPtr.Base = (UINT32)(UINTN)(VOID*) gdt;
> >>>>>>> gdtPtr.Limit = (UINT16) (sizeof (GdtTemplate) - 1);
> >>>>>>> AsmWriteGdtr (&gdtPtr);
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>>
> >>>>>>> Andrew Fish
> >>>>>>> _______________________________________________
> >>>>>>> edk2-devel mailing list
> >>>>>>> edk2-devel@lists.01.org
> >>>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>>>>>>
> >>>>>>
> >>>>>> _______________________________________________
> >>>>>> edk2-devel mailing list
> >>>>>> edk2-devel@lists.01.org
> >>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>
> >> _______________________________________________
> >> edk2-devel mailing list
> >> edk2-devel@lists.01.org
> >> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to