Re: [edk2] [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: Allocate framebuffer using EfiRuntimeServicesData
On 22 March 2018 at 15:20, Evan Lloyd <evan.ll...@arm.com> wrote: > Hi Ard. > >> -Original Message- >> From: edk2-devel <edk2-devel-boun...@lists.01.org> On Behalf Of Ard >> Biesheuvel >> Sent: 21 March 2018 18:27 >> To: Girish Pathak <girish.pat...@arm.com> >> Cc: nd <n...@arm.com>; edk2-devel@lists.01.org; Leif Lindholm >> <leif.lindh...@linaro.org>; Stephanie Hughes-Fitt > f...@arm.com>; Arvind Chauhan <arvind.chau...@arm.com> >> Subject: Re: [edk2] [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: >> Allocate framebuffer using EfiRuntimeServicesData >> >> On 21 March 2018 at 19:07, Girish Pathak <girish.pat...@arm.com> >> wrote: >> > >> > >> >> -Original Message- >> >> From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] >> >> Sent: 21 March 2018 03:38 >> >> To: Girish Pathak <girish.pat...@arm.com> >> >> Cc: edk2-devel@lists.01.org; Leif Lindholm >> >> <leif.lindh...@linaro.org>; Matteo Carlini <matteo.carl...@arm.com>; >> >> Stephanie Hughes-Fitt <stephanie.hughes-f...@arm.com>; nd >> >> <n...@arm.com>; Arvind Chauhan <arvind.chau...@arm.com>; Daniil >> Egranov >> >> <daniil.egra...@arm.com>; Thomas Abraham >> <thomas.abra...@arm.com> >> >> Subject: Re: [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: >> >> Allocate framebuffer using EfiRuntimeServicesData >> >> >> >> On 21 March 2018 at 00:18, Girish Pathak <girish.pat...@arm.com> >> wrote: >> >> > As per the UEFI specification(2.7) section 12.9, the GOP >> >> > framebuffer memory can be accessed in the pre-boot and the post >> >> > boot phase (by OS) Therefore the memory type EfiBootServicesData is >> >> > incorrect for the framebuffer memory allocation. Change >> >> > EfiBootServicesData with EfiRuntimeServicesData flag so that >> >> > allocated memory can be access by the OS in the post boot phase. >> >> > >> >> >> >> EfiRuntimeServicesData is intended for allocations that the EFI >> >> runtime services need to access themselves at runtime, and will hence >> >> be virtually remapped by SetVirtualAddressMap(). >> >> >> >> This does not apply to the framebuffer. Even if it may be used at OS >> >> runtime, the firmware itself will never access it, so >> >> EfiRuntimeServicesData is not appropriate >> >> >> >> Please use EfiReservedMemory instead. >> > >> > Specification (UEFI Spec 2_7_A Sept 6.pdf) describes >> > EfiReservedMemoryType as Not usable before and after ExitBootServices, >> See Table 28 & 29 Hence EfiReservedMemoryType is not suitable in this >> case. Agree? >> > >> >> It is not usable as ordinary memory, given that you turn it into 'special' >> memory (with side effects) by turning it into a framebuffer. >> >> So EfiReservedMemory is perfectly appropriate here. > [[Evan Lloyd]] First, I agree EfiReservedMemory is probably the sensible > option. The only alternative would be EfiMemoryMappedIO, and that, as you > have pointed out in the past, introduces alignment requirements. If you are > happy to accept it, I'll ask Girish to go with that. EfiReservedMemory is the only appropriate type to use here, and if the spec is unclear, we should fix that. > However, Girish has a point, if only that the UEFI spec need more clarity on > this, especially as > https://lists.01.org/pipermail/edk2-devel/2017-February/007494.html pretty > much confirms it is the right way to go. In particular, the bald statement > "EfiReservedMemoryTypeNot usable.", seems unfortunate. > > Regards, > Evan > >> ___ >> 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
Re: [edk2] [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: Allocate framebuffer using EfiRuntimeServicesData
Hi Ard. > -Original Message- > From: edk2-devel <edk2-devel-boun...@lists.01.org> On Behalf Of Ard > Biesheuvel > Sent: 21 March 2018 18:27 > To: Girish Pathak <girish.pat...@arm.com> > Cc: nd <n...@arm.com>; edk2-devel@lists.01.org; Leif Lindholm > <leif.lindh...@linaro.org>; Stephanie Hughes-Fitt f...@arm.com>; Arvind Chauhan <arvind.chau...@arm.com> > Subject: Re: [edk2] [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: > Allocate framebuffer using EfiRuntimeServicesData > > On 21 March 2018 at 19:07, Girish Pathak <girish.pat...@arm.com> > wrote: > > > > > >> -Original Message- > >> From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] > >> Sent: 21 March 2018 03:38 > >> To: Girish Pathak <girish.pat...@arm.com> > >> Cc: edk2-devel@lists.01.org; Leif Lindholm > >> <leif.lindh...@linaro.org>; Matteo Carlini <matteo.carl...@arm.com>; > >> Stephanie Hughes-Fitt <stephanie.hughes-f...@arm.com>; nd > >> <n...@arm.com>; Arvind Chauhan <arvind.chau...@arm.com>; Daniil > Egranov > >> <daniil.egra...@arm.com>; Thomas Abraham > <thomas.abra...@arm.com> > >> Subject: Re: [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: > >> Allocate framebuffer using EfiRuntimeServicesData > >> > >> On 21 March 2018 at 00:18, Girish Pathak <girish.pat...@arm.com> > wrote: > >> > As per the UEFI specification(2.7) section 12.9, the GOP > >> > framebuffer memory can be accessed in the pre-boot and the post > >> > boot phase (by OS) Therefore the memory type EfiBootServicesData is > >> > incorrect for the framebuffer memory allocation. Change > >> > EfiBootServicesData with EfiRuntimeServicesData flag so that > >> > allocated memory can be access by the OS in the post boot phase. > >> > > >> > >> EfiRuntimeServicesData is intended for allocations that the EFI > >> runtime services need to access themselves at runtime, and will hence > >> be virtually remapped by SetVirtualAddressMap(). > >> > >> This does not apply to the framebuffer. Even if it may be used at OS > >> runtime, the firmware itself will never access it, so > >> EfiRuntimeServicesData is not appropriate > >> > >> Please use EfiReservedMemory instead. > > > > Specification (UEFI Spec 2_7_A Sept 6.pdf) describes > > EfiReservedMemoryType as Not usable before and after ExitBootServices, > See Table 28 & 29 Hence EfiReservedMemoryType is not suitable in this > case. Agree? > > > > It is not usable as ordinary memory, given that you turn it into 'special' > memory (with side effects) by turning it into a framebuffer. > > So EfiReservedMemory is perfectly appropriate here. [[Evan Lloyd]] First, I agree EfiReservedMemory is probably the sensible option. The only alternative would be EfiMemoryMappedIO, and that, as you have pointed out in the past, introduces alignment requirements. If you are happy to accept it, I'll ask Girish to go with that. However, Girish has a point, if only that the UEFI spec need more clarity on this, especially as https://lists.01.org/pipermail/edk2-devel/2017-February/007494.html pretty much confirms it is the right way to go. In particular, the bald statement "EfiReservedMemoryTypeNot usable.", seems unfortunate. Regards, Evan > ___ > 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
Re: [edk2] [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: Allocate framebuffer using EfiRuntimeServicesData
On 21 March 2018 at 19:07, Girish Pathakwrote: > > >> -Original Message- >> From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] >> Sent: 21 March 2018 03:38 >> To: Girish Pathak >> Cc: edk2-devel@lists.01.org; Leif Lindholm ; >> Matteo Carlini ; Stephanie Hughes-Fitt >> ; nd ; Arvind Chauhan >> ; Daniil Egranov ; >> Thomas Abraham >> Subject: Re: [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: Allocate >> framebuffer using EfiRuntimeServicesData >> >> On 21 March 2018 at 00:18, Girish Pathak wrote: >> > As per the UEFI specification(2.7) section 12.9, the GOP framebuffer >> > memory can be accessed in the pre-boot and the post boot phase (by OS) >> > Therefore the memory type EfiBootServicesData is incorrect for the >> > framebuffer memory allocation. Change EfiBootServicesData with >> > EfiRuntimeServicesData flag so that allocated memory can be access by >> > the OS in the post boot phase. >> > >> >> EfiRuntimeServicesData is intended for allocations that the EFI runtime >> services need to access themselves at runtime, and will hence be virtually >> remapped by SetVirtualAddressMap(). >> >> This does not apply to the framebuffer. Even if it may be used at OS runtime, >> the firmware itself will never access it, so EfiRuntimeServicesData is not >> appropriate >> >> Please use EfiReservedMemory instead. > > Specification (UEFI Spec 2_7_A Sept 6.pdf) describes EfiReservedMemoryType as > Not usable before and after ExitBootServices, See Table 28 & 29 > Hence EfiReservedMemoryType is not suitable in this case. Agree? > It is not usable as ordinary memory, given that you turn it into 'special' memory (with side effects) by turning it into a framebuffer. So EfiReservedMemory is perfectly appropriate here. ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: Allocate framebuffer using EfiRuntimeServicesData
> -Original Message- > From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] > Sent: 21 March 2018 03:38 > To: Girish Pathak> Cc: edk2-devel@lists.01.org; Leif Lindholm ; > Matteo Carlini ; Stephanie Hughes-Fitt > ; nd ; Arvind Chauhan > ; Daniil Egranov ; > Thomas Abraham > Subject: Re: [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: Allocate > framebuffer using EfiRuntimeServicesData > > On 21 March 2018 at 00:18, Girish Pathak wrote: > > As per the UEFI specification(2.7) section 12.9, the GOP framebuffer > > memory can be accessed in the pre-boot and the post boot phase (by OS) > > Therefore the memory type EfiBootServicesData is incorrect for the > > framebuffer memory allocation. Change EfiBootServicesData with > > EfiRuntimeServicesData flag so that allocated memory can be access by > > the OS in the post boot phase. > > > > EfiRuntimeServicesData is intended for allocations that the EFI runtime > services need to access themselves at runtime, and will hence be virtually > remapped by SetVirtualAddressMap(). > > This does not apply to the framebuffer. Even if it may be used at OS runtime, > the firmware itself will never access it, so EfiRuntimeServicesData is not > appropriate > > Please use EfiReservedMemory instead. Specification (UEFI Spec 2_7_A Sept 6.pdf) describes EfiReservedMemoryType as Not usable before and after ExitBootServices, See Table 28 & 29 Hence EfiReservedMemoryType is not suitable in this case. Agree? > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Girish Pathak > > Signed-off-by: Evan Lloyd > > --- > > > Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpr > ess.c | 2 +- > > > > > Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArm > VEx > > press.c | 2 +- > > 2 files changed, 2 insertions(+), 2 deletions(-) > > > > diff --git > > > a/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVEx > pres > > s.c > > > b/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVEx > pres > > s.c index > > > f7cae39c9cc9954ba4cad1bd597ebfc8baf10f11..c0a25a18d3fcfe91a76ee985ee > 58 > > 145b97900fa0 100644 > > --- > > > a/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVEx > pres > > s.c > > +++ > b/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVEx > > +++ press.c > > @@ -176,7 +176,7 @@ LcdPlatformGetVram ( > >} > >Status = gBS->AllocatePages ( > >AllocationType, > > - EfiBootServicesData, > > + EfiRuntimeServicesData, > >EFI_SIZE_TO_PAGES (((UINTN)LCD_VRAM_SIZE)), > >VramBaseAddress > >); > > diff --git > > > a/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdAr > mV > > Express.c > > > b/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdAr > mV > > Express.c index > > > 2f4814a2adbf01517ba14d75ce579ff35c362379..61ddf77e903e6c33a26b2aa8b7 > 61 > > 21e807195a9a 100644 > > --- > > > a/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdAr > mV > > Express.c > > +++ > b/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111Lcd > > +++ ArmVExpress.c > > @@ -232,7 +232,7 @@ LcdPlatformGetVram ( > > // Allocate the VRAM from the DRAM so that nobody else uses it. > > Status = gBS->AllocatePages ( > > AllocateAddress, > > -EfiBootServicesData, > > +EfiRuntimeServicesData, > > EFI_SIZE_TO_PAGES (((UINTN)LCD_VRAM_SIZE)), > > VramBaseAddress > > ); > > -- > > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' > > > > ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: Allocate framebuffer using EfiRuntimeServicesData
On 21 March 2018 at 00:18, Girish Pathakwrote: > As per the UEFI specification(2.7) section 12.9, the GOP framebuffer > memory can be accessed in the pre-boot and the post boot phase (by OS) > Therefore the memory type EfiBootServicesData is incorrect for > the framebuffer memory allocation. Change EfiBootServicesData with > EfiRuntimeServicesData flag so that allocated memory can be access > by the OS in the post boot phase. > EfiRuntimeServicesData is intended for allocations that the EFI runtime services need to access themselves at runtime, and will hence be virtually remapped by SetVirtualAddressMap(). This does not apply to the framebuffer. Even if it may be used at OS runtime, the firmware itself will never access it, so EfiRuntimeServicesData is not appropriate Please use EfiReservedMemory instead. > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Girish Pathak > Signed-off-by: Evan Lloyd > --- > Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c > | 2 +- > > Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c > | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git > a/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c > b/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c > index > f7cae39c9cc9954ba4cad1bd597ebfc8baf10f11..c0a25a18d3fcfe91a76ee985ee58145b97900fa0 > 100644 > --- a/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c > +++ b/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c > @@ -176,7 +176,7 @@ LcdPlatformGetVram ( >} >Status = gBS->AllocatePages ( >AllocationType, > - EfiBootServicesData, > + EfiRuntimeServicesData, >EFI_SIZE_TO_PAGES (((UINTN)LCD_VRAM_SIZE)), >VramBaseAddress >); > diff --git > a/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c > > b/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c > index > 2f4814a2adbf01517ba14d75ce579ff35c362379..61ddf77e903e6c33a26b2aa8b76121e807195a9a > 100644 > --- > a/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c > +++ > b/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c > @@ -232,7 +232,7 @@ LcdPlatformGetVram ( > // Allocate the VRAM from the DRAM so that nobody else uses it. > Status = gBS->AllocatePages ( > AllocateAddress, > -EfiBootServicesData, > +EfiRuntimeServicesData, > EFI_SIZE_TO_PAGES (((UINTN)LCD_VRAM_SIZE)), > VramBaseAddress > ); > -- > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' > > ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
[edk2] [PATCH edk2-platforms v3 12/17] ARM/VExpressPkg: Allocate framebuffer using EfiRuntimeServicesData
As per the UEFI specification(2.7) section 12.9, the GOP framebuffer memory can be accessed in the pre-boot and the post boot phase (by OS) Therefore the memory type EfiBootServicesData is incorrect for the framebuffer memory allocation. Change EfiBootServicesData with EfiRuntimeServicesData flag so that allocated memory can be access by the OS in the post boot phase. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Girish PathakSigned-off-by: Evan Lloyd --- Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c | 2 +- Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c b/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c index f7cae39c9cc9954ba4cad1bd597ebfc8baf10f11..c0a25a18d3fcfe91a76ee985ee58145b97900fa0 100644 --- a/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c +++ b/Platform/ARM/VExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c @@ -176,7 +176,7 @@ LcdPlatformGetVram ( } Status = gBS->AllocatePages ( AllocationType, - EfiBootServicesData, + EfiRuntimeServicesData, EFI_SIZE_TO_PAGES (((UINTN)LCD_VRAM_SIZE)), VramBaseAddress ); diff --git a/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c b/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c index 2f4814a2adbf01517ba14d75ce579ff35c362379..61ddf77e903e6c33a26b2aa8b76121e807195a9a 100644 --- a/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c +++ b/Platform/ARM/VExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c @@ -232,7 +232,7 @@ LcdPlatformGetVram ( // Allocate the VRAM from the DRAM so that nobody else uses it. Status = gBS->AllocatePages ( AllocateAddress, -EfiBootServicesData, +EfiRuntimeServicesData, EFI_SIZE_TO_PAGES (((UINTN)LCD_VRAM_SIZE)), VramBaseAddress ); -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel