* Query on Variable Services
@ 2019-01-17 17:23 galla rao
2019-01-17 17:54 ` Andrew Fish
0 siblings, 1 reply; 4+ messages in thread
From: galla rao @ 2019-01-17 17:23 UTC (permalink / raw)
To: edk2-devel
Hi All,
Have a question for Variable services
Given PCD's are initialized
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase | 0xFFE00000
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase |
0xFFE3E000
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase |
0xFFE40000
Do i need to make these regions as *EFI_MEMORY_RUNTIME *through
*gDS->SetMemorySpaceAttributes*
SPI Flash writes within BIOS works good!
*when trying to change BootOrder from efibootmgr, the failure is seen*
It would be useful if someone has faced this issue earlier and can respond
kindly.
Best Regards
Galla
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Query on Variable Services
2019-01-17 17:23 Query on Variable Services galla rao
@ 2019-01-17 17:54 ` Andrew Fish
2019-01-17 18:26 ` galla rao
0 siblings, 1 reply; 4+ messages in thread
From: Andrew Fish @ 2019-01-17 17:54 UTC (permalink / raw)
To: galla rao; +Cc: edk2-devel
Galla,
The PCD value usually get set as the result of the build.
EFI_MEMORY_RUNTIME attribute is used to request a virtual mapping from the OS. When the variable services are called from the OS the run in a virtual address space provided by the OS. Thus trying to access 0xFFE00000 would page fault.
You can run the memmap command from the EFI Shell and see if bit 63 is set. If your SPI controller is a memory mapped hardware device you may also need to map the SPI register via EFI_MEMORY_RUNTIME. The SPI driver also needs to deal with the SetVirtualAddress map event to convert its pointers over to the new OS provided virtual memory space.
Thanks,
Andrew Fish
> On Jan 17, 2019, at 9:23 AM, galla rao <galla.rao80@gmail.com> wrote:
>
> Hi All,
>
> Have a question for Variable services
>
> Given PCD's are initialized
>
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase | 0xFFE00000
>
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase |
> 0xFFE3E000
>
> gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase |
> 0xFFE40000
>
> Do i need to make these regions as *EFI_MEMORY_RUNTIME *through
> *gDS->SetMemorySpaceAttributes*
>
> SPI Flash writes within BIOS works good!
>
> *when trying to change BootOrder from efibootmgr, the failure is seen*
>
> It would be useful if someone has faced this issue earlier and can respond
> kindly.
>
> Best Regards
> Galla
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Query on Variable Services
2019-01-17 17:54 ` Andrew Fish
@ 2019-01-17 18:26 ` galla rao
2019-01-17 18:48 ` Andrew Fish
0 siblings, 1 reply; 4+ messages in thread
From: galla rao @ 2019-01-17 18:26 UTC (permalink / raw)
To: Andrew Fish; +Cc: edk2-devel
Thanks Andrew!
SPI driver has failed the call to, in the log i could see the failure
Status = gDS->SetMemorySpaceAttributes (
BaseAddress,
Length,
GcdDescriptor.Attributes | EFI_MEMORY_RUNTIME
);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_WARN, "Variable driver failed to add EFI_MEMORY_RUNTIME
attribute to Flash.\n"));
}
if this call has failed SetVirtualAddress would not be useful for Virtual
Address conversion for this region I believe
Best Regards
Ranga
On Thu, Jan 17, 2019 at 5:55 PM Andrew Fish <afish@apple.com> wrote:
> Galla,
>
> The PCD value usually get set as the result of the build.
>
> EFI_MEMORY_RUNTIME attribute is used to request a virtual mapping from the
> OS. When the variable services are called from the OS the run in a virtual
> address space provided by the OS. Thus trying to access 0xFFE00000 would
> page fault.
>
> You can run the memmap command from the EFI Shell and see if bit 63 is
> set. If your SPI controller is a memory mapped hardware device you may also
> need to map the SPI register via EFI_MEMORY_RUNTIME. The SPI driver also
> needs to deal with the SetVirtualAddress map event to convert its pointers
> over to the new OS provided virtual memory space.
>
> Thanks,
>
> Andrew Fish
>
>
> > On Jan 17, 2019, at 9:23 AM, galla rao <galla.rao80@gmail.com> wrote:
> >
> > Hi All,
> >
> > Have a question for Variable services
> >
> > Given PCD's are initialized
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase |
> 0xFFE00000
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase |
> > 0xFFE3E000
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase |
> > 0xFFE40000
> >
> > Do i need to make these regions as *EFI_MEMORY_RUNTIME *through
> > *gDS->SetMemorySpaceAttributes*
> >
> > SPI Flash writes within BIOS works good!
> >
> > *when trying to change BootOrder from efibootmgr, the failure is seen*
> >
> > It would be useful if someone has faced this issue earlier and can
> respond
> > kindly.
> >
> > Best Regards
> > Galla
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Query on Variable Services
2019-01-17 18:26 ` galla rao
@ 2019-01-17 18:48 ` Andrew Fish
0 siblings, 0 replies; 4+ messages in thread
From: Andrew Fish @ 2019-01-17 18:48 UTC (permalink / raw)
To: galla rao; +Cc: edk2-devel
> On Jan 17, 2019, at 10:26 AM, galla rao <galla.rao80@gmail.com> wrote:
>
> Thanks Andrew!
>
> SPI driver has failed the call to, in the log i could see the failure
>
> Status = gDS->SetMemorySpaceAttributes (
>
> BaseAddress,
>
> Length,
>
> GcdDescriptor.Attributes | EFI_MEMORY_RUNTIME
>
> );
>
> if (EFI_ERROR (Status)) {
>
> DEBUG ((DEBUG_WARN, "Variable driver failed to add EFI_MEMORY_RUNTIME attribute to Flash. %r \n", Status));
You should dump out the Status value. I guess you could also make sure BaseAddress, and Length look correct.
https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Pi/PiDxeCis.h#L368
/**
Modifies the attributes for a memory region in the global coherency domain of the
processor.
@param BaseAddress The physical address that is the start address of a memory region.
@param Length The size in bytes of the memory region.
@param Attributes The bit mask of attributes to set for the memory region.
@retval EFI_SUCCESS The attributes were set for the memory region.
@retval EFI_INVALID_PARAMETER Length is zero.
@retval EFI_UNSUPPORTED The processor does not support one or more bytes of the memory
resource range specified by BaseAddress and Length.
@retval EFI_UNSUPPORTED The bit mask of attributes is not support for the memory resource
range specified by BaseAddress and Length.
@retval EFI_ACCESS_DENIED The attributes for the memory resource range specified by
BaseAddress and Length cannot be modified.
@retval EFI_OUT_OF_RESOURCES There are not enough system resources to modify the attributes of
the memory resource range.
@retval EFI_NOT_AVAILABLE_YET The attributes cannot be set because CPU architectural protocol is
not available yet.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_SET_MEMORY_SPACE_ATTRIBUTES)(
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN UINT64 Attributes
);
Thanks,
Andrew Fish
>
> }
>
> if this call has failed SetVirtualAddress would not be useful for Virtual Address conversion for this region I believe
>
> Best Regards
> Ranga
>
> On Thu, Jan 17, 2019 at 5:55 PM Andrew Fish <afish@apple.com <mailto:afish@apple.com>> wrote:
> Galla,
>
> The PCD value usually get set as the result of the build.
>
> EFI_MEMORY_RUNTIME attribute is used to request a virtual mapping from the OS. When the variable services are called from the OS the run in a virtual address space provided by the OS. Thus trying to access 0xFFE00000 would page fault.
>
> You can run the memmap command from the EFI Shell and see if bit 63 is set. If your SPI controller is a memory mapped hardware device you may also need to map the SPI register via EFI_MEMORY_RUNTIME. The SPI driver also needs to deal with the SetVirtualAddress map event to convert its pointers over to the new OS provided virtual memory space.
>
> Thanks,
>
> Andrew Fish
>
>
> > On Jan 17, 2019, at 9:23 AM, galla rao <galla.rao80@gmail.com <mailto:galla.rao80@gmail.com>> wrote:
> >
> > Hi All,
> >
> > Have a question for Variable services
> >
> > Given PCD's are initialized
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase | 0xFFE00000
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase |
> > 0xFFE3E000
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase |
> > 0xFFE40000
> >
> > Do i need to make these regions as *EFI_MEMORY_RUNTIME *through
> > *gDS->SetMemorySpaceAttributes*
> >
> > SPI Flash writes within BIOS works good!
> >
> > *when trying to change BootOrder from efibootmgr, the failure is seen*
> >
> > It would be useful if someone has faced this issue earlier and can respond
> > kindly.
> >
> > Best Regards
> > Galla
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org <mailto:edk2-devel@lists.01.org>
> > https://lists.01.org/mailman/listinfo/edk2-devel <https://lists.01.org/mailman/listinfo/edk2-devel>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-01-17 18:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-01-17 17:23 Query on Variable Services galla rao
2019-01-17 17:54 ` Andrew Fish
2019-01-17 18:26 ` galla rao
2019-01-17 18:48 ` Andrew Fish
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox