VirtualBox

Ignore:
Timestamp:
Sep 27, 2023 1:34:02 PM (17 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
159276
Message:

EFI/FirmwareNew: Make edk2-stable202308 build on all supported platforms (using gcc at least, msvc not tested yet), bugref:4643

Location:
trunk/src/VBox/Devices/EFI/FirmwareNew
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/FirmwareNew

  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Library/PlatformBootManagerLib/PlatformBm.c

    r99404 r101291  
    194194      DEBUG_VERBOSE,
    195195      "%a: %g: %r\n",
    196       __FUNCTION__,
     196      __func__,
    197197      ProtocolGuid,
    198198      Status
     
    265265                        );
    266266  if (EFI_ERROR (Status)) {
    267     DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __FUNCTION__, ReportText, Status));
     267    DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __func__, ReportText, Status));
    268268    return FALSE;
    269269  }
     
    414414
    415415PciError:
    416   DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __FUNCTION__, ReportText, Status));
     416  DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __func__, ReportText, Status));
    417417  return FALSE;
    418418}
     
    441441    EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE,
    442442    "%a: %s: %r\n",
    443     __FUNCTION__,
     443    __func__,
    444444    ReportText,
    445445    Status
     
    467467      DEBUG_ERROR,
    468468      "%a: %s: handle %p: device path not found\n",
    469       __FUNCTION__,
     469      __func__,
    470470      ReportText,
    471471      Handle
     
    479479      DEBUG_ERROR,
    480480      "%a: %s: adding to ConOut: %r\n",
    481       __FUNCTION__,
     481      __func__,
    482482      ReportText,
    483483      Status
     
    491491      DEBUG_ERROR,
    492492      "%a: %s: adding to ErrOut: %r\n",
    493       __FUNCTION__,
     493      __func__,
    494494      ReportText,
    495495      Status
     
    501501    DEBUG_VERBOSE,
    502502    "%a: %s: added to ConOut and ErrOut\n",
    503     __FUNCTION__,
     503    __func__,
    504504    ReportText
    505505    ));
     
    702702      EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE,
    703703      "%a: removing stale Boot#%04x %s: %r\n",
    704       __FUNCTION__,
     704      __func__,
    705705      (UINT32)BootOptions[Index].OptionNumber,
    706706      DevicePathString == NULL ? L"<unavailable>" : DevicePathString,
     
    880880    EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE,
    881881    "%a: SetVariable(%s, %u): %r\n",
    882     __FUNCTION__,
     882    __func__,
    883883    EFI_TIME_OUT_VARIABLE_NAME,
    884884    FrontPageTimeout,
     
    937937  }
    938938
    939   Print (L"Press ESCAPE within 10 seconds for boot options ");
     939  Print (L"Press ESCAPE within %u seconds for boot options ", PcdGet16 (PcdPlatformBootTimeOut));
    940940  //
    941941  // Process QEMU's -kernel command line option. The kernel booted this way
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Library/PlatformBootManagerLib/QemuKernel.c

    r99404 r101291  
    6767      DEBUG_ERROR,
    6868      "%a: QemuStartKernelImage(): %r\n",
    69       __FUNCTION__,
     69      __func__,
    7070      Status
    7171      ));
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Library/PrePiHobListPointerLib/PrePiHobListPointer.c

    r99404 r101291  
    3232
    3333  if (FirmwareContext == NULL) {
    34     DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __FUNCTION__));
     34    DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __func__));
    3535    return NULL;
    3636  }
     
    5757
    5858  if (FirmwareContext == NULL) {
    59     DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __FUNCTION__));
     59    DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __func__));
    6060    return EFI_NOT_READY;
    6161  }
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Library/VirtNorFlashPlatformLib/VirtNorFlashStaticLib.c

    r99404 r101291  
    2525  FixedPcdGet32 (PcdOvmfFdBaseAddress),
    2626  FixedPcdGet64 (PcdFlashNvStorageVariableBase),
    27   FixedPcdGet32 (PcdOvmfFirmwareFdSize),
     27  FixedPcdGet32 (PcdOvmfFirmwareFdSize) -
     28  (FixedPcdGet64 (PcdFlashNvStorageVariableBase) - FixedPcdGet32 (PcdOvmfFdBaseAddress)),
    2829  QEMU_NOR_BLOCK_SIZE
    2930};
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc

    r99404 r101291  
    8484  CpuExceptionHandlerLib|UefiCpuPkg/Library/BaseRiscV64CpuExceptionHandlerLib/BaseRiscV64CpuExceptionHandlerLib.inf
    8585  RiscVSbiLib|MdePkg/Library/BaseRiscVSbiLib/BaseRiscVSbiLib.inf
     86  RiscVMmuLib|UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf
    8687  PlatformBootManagerLib|OvmfPkg/RiscVVirt/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
    8788  ResetSystemLib|OvmfPkg/RiscVVirt/Library/ResetSystemLib/BaseResetSystemLib.inf
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/RiscVVirt.fdf.inc

    r99404 r101291  
    1111DEFINE BLOCK_SIZE                  = 0x1000
    1212
     13DEFINE PFLASH0_BASE                = 0x20000000
    1314DEFINE PFLASH1_BASE                = 0x22000000
    1415
    15 DEFINE FW_BASE_ADDRESS             = $(PFLASH1_BASE)
    16 DEFINE FW_SIZE                     = 0x00800000
    17 DEFINE FW_BLOCKS                   = 0x800
     16DEFINE CODE_BASE_ADDRESS           = $(PFLASH0_BASE)
     17DEFINE CODE_SIZE                   = 0x00800000
     18DEFINE CODE_BLOCKS                 = 0x800
    1819
    19 DEFINE CODE_BASE_ADDRESS           = $(FW_BASE_ADDRESS)
    20 DEFINE CODE_SIZE                   = 0x00740000
    21 DEFINE CODE_BLOCKS                 = 0x740
    22 
     20DEFINE VARS_BASE_ADDRESS            = $(PFLASH1_BASE)
    2321DEFINE VARS_SIZE                    = 0x000C0000
    2422DEFINE VARS_BLOCK_SIZE              = 0x40000
     
    3028# all of sub regions of EFI Variable
    3129#
    32 DEFINE VARS_OFFSET                   = $(CODE_SIZE)
     30DEFINE VARS_OFFSET                   = 0x00000000
    3331DEFINE VARS_LIVE_SIZE                = 0x00040000
    3432DEFINE VARS_FTW_WORKING_OFFSET       = $(VARS_OFFSET) + $(VARS_LIVE_SIZE)
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc

    r99404 r101291  
    8686
    8787  TimerLib|UefiCpuPkg/Library/BaseRiscV64CpuTimerLib/BaseRiscV64CpuTimerLib.inf
    88   VirtNorFlashPlatformLib|OvmfPkg/RiscVVirt/Library/VirtNorFlashPlatformLib/VirtNorFlashStaticLib.inf
     88  VirtNorFlashPlatformLib|OvmfPkg/RiscVVirt/Library/VirtNorFlashPlatformLib/VirtNorFlashDeviceTreeLib.inf
    8989
    9090  CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
     
    114114
    115115[LibraryClasses.common.DXE_DRIVER]
     116  AcpiPlatformLib|OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf
    116117  ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
    117118  PciExpressLib|OvmfPkg/Library/BaseCachingPciExpressLib/BaseCachingPciExpressLib.inf
     
    172173  gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE
    173174  gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
    174 
    175 
    176   #
    177   # Enable the non-executable DXE stack. (This gets set up by DxeIpl)
    178   #
    179   gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|TRUE
    180175
    181176!if $(SECURE_BOOT_ENABLE) == TRUE
     
    428423
    429424  #
     425  # SATA
     426  #
     427  MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
     428  MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
     429  MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
     430
     431  #
    430432  # NVME Driver
    431433  #
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/RiscVVirtQemu.fdf

    r99404 r101291  
    1313
    1414################################################################################
    15 [FD.RISCV_VIRT]
    16 BaseAddress   = $(FW_BASE_ADDRESS)|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress
    17 Size          = $(FW_SIZE)|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize
     15[FD.RISCV_VIRT_CODE]
     16BaseAddress   = $(CODE_BASE_ADDRESS)|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress
     17Size          = $(CODE_SIZE)|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize
    1818ErasePolarity = 1
    1919BlockSize     = $(BLOCK_SIZE)
    20 NumBlocks     = $(FW_BLOCKS)
     20NumBlocks     = $(CODE_BLOCKS)
    2121
    22220x00000000|$(CODE_SIZE)
    2323gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize
    2424FV = FVMAIN_COMPACT
     25
     26################################################################################
     27[FD.RISCV_VIRT_VARS]
     28BaseAddress   = $(VARS_BASE_ADDRESS)
     29Size          = $(VARS_SIZE)
     30ErasePolarity = 1
     31BlockSize     = $(VARS_BLOCK_SIZE)
     32NumBlocks     = $(VARS_BLOCKS)
    2533
    2634!include VarStore.fdf.inc
     
    4654READ_LOCK_STATUS   = TRUE
    4755
     56APRIORI DXE {
     57  INF  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
     58  INF  MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
     59  INF  MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
     60  INF  MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
     61  INF  EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf
     62  INF  UefiCpuPkg/CpuDxeRiscV64/CpuDxeRiscV64.inf
     63  INF  OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.inf
     64}
     65
    4866#
    4967# DXE Phase modules
     
    137155INF  MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
    138156INF  MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
     157
     158#
     159# SATA
     160#
     161INF  MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
     162INF  MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
     163INF  MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
    139164
    140165#
     
    226251
    227252[Rule.Common.SEC]
    228   FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
    229     PE32     PE32   Align=4K $(INF_OUTPUT)/$(MODULE_NAME).efi
     253  FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED FIXED {
     254    PE32     PE32    Align = Auto    $(INF_OUTPUT)/$(MODULE_NAME).efi
    230255    UI       STRING ="$(MODULE_NAME)" Optional
    231256    VERSION  STRING ="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
    232257  }
    233258
    234 [Rule.Common.PEI_CORE]
    235   FILE PEI_CORE = $(NAMED_GUID) {
    236     PE32     PE32   Align=4K    $(INF_OUTPUT)/$(MODULE_NAME).efi
    237     UI       STRING ="$(MODULE_NAME)" Optional
    238     VERSION  STRING ="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
    239   }
    240 
    241 [Rule.Common.PEIM]
    242   FILE PEIM = $(NAMED_GUID) {
    243      PEI_DEPEX PEI_DEPEX Optional        $(INF_OUTPUT)/$(MODULE_NAME).depex
    244      PE32     PE32   Align=4K         $(INF_OUTPUT)/$(MODULE_NAME).efi
    245      UI       STRING="$(MODULE_NAME)" Optional
    246      VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
    247   }
    248 
    249259[Rule.Common.DXE_CORE]
    250260  FILE DXE_CORE = $(NAMED_GUID) {
    251     PE32     PE32   Align=4K $(INF_OUTPUT)/$(MODULE_NAME).efi
     261    PE32     PE32    $(INF_OUTPUT)/$(MODULE_NAME).efi
    252262    UI       STRING="$(MODULE_NAME)" Optional
    253263    VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
     
    257267  FILE DRIVER = $(NAMED_GUID) {
    258268    DXE_DEPEX    DXE_DEPEX Optional      $(INF_OUTPUT)/$(MODULE_NAME).depex
    259     PE32     PE32   Align=4K $(INF_OUTPUT)/$(MODULE_NAME).efi
     269    PE32     PE32    $(INF_OUTPUT)/$(MODULE_NAME).efi
    260270    UI       STRING="$(MODULE_NAME)" Optional
    261271    VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
     
    265275  FILE DRIVER = $(NAMED_GUID) {
    266276    DXE_DEPEX    DXE_DEPEX Optional      $(INF_OUTPUT)/$(MODULE_NAME).depex
    267     PE32     PE32   Align = 4K    $(INF_OUTPUT)/$(MODULE_NAME).efi
     277    PE32     PE32    $(INF_OUTPUT)/$(MODULE_NAME).efi
    268278    UI       STRING="$(MODULE_NAME)" Optional
    269279    VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
     
    273283  FILE DRIVER = $(NAMED_GUID) {
    274284    DXE_DEPEX    DXE_DEPEX Optional      $(INF_OUTPUT)/$(MODULE_NAME).depex
    275     PE32     PE32  Align=4K $(INF_OUTPUT)/$(MODULE_NAME).efi
     285    PE32     PE32  $(INF_OUTPUT)/$(MODULE_NAME).efi
    276286    UI       STRING="$(MODULE_NAME)" Optional
    277287    VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
     
    281291  FILE DRIVER = $(NAMED_GUID) {
    282292    DXE_DEPEX DXE_DEPEX Optional      |.depex
    283     PE32      PE32   Align=4K   |.efi
     293    PE32      PE32                    |.efi
    284294    UI        STRING="$(MODULE_NAME)" Optional
    285295    VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
     
    288298[Rule.Common.UEFI_APPLICATION]
    289299  FILE APPLICATION = $(NAMED_GUID) {
    290     PE32     PE32   Align=4K  $(INF_OUTPUT)/$(MODULE_NAME).efi
     300    PE32     PE32    $(INF_OUTPUT)/$(MODULE_NAME).efi
    291301    UI       STRING="$(MODULE_NAME)" Optional
    292302    VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
     
    295305[Rule.Common.UEFI_APPLICATION.BINARY]
    296306  FILE APPLICATION = $(NAMED_GUID) {
    297     PE32      PE32  Align=4K  |.efi
     307    PE32      PE32                    |.efi
    298308    UI        STRING="$(MODULE_NAME)" Optional
    299309    VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
     
    304314    RAW ACPI               |.acpi
    305315    RAW ASL                |.aml
    306   }
     316    UI        STRING="$(MODULE_NAME)" Optional
     317  }
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/Memory.c

    r99404 r101291  
    4040
    4141/**
    42   Build reserved memory range resource HOB.
    43 
    44   @param  MemoryBase     Reserved memory range base address.
    45   @param  MemorySize     Reserved memory range size.
    46 
    47 **/
    48 STATIC
    49 VOID
    50 AddReservedMemoryBaseSizeHob (
    51   EFI_PHYSICAL_ADDRESS  MemoryBase,
    52   UINT64                MemorySize
    53   )
    54 {
    55   BuildResourceDescriptorHob (
    56     EFI_RESOURCE_MEMORY_RESERVED,
    57     EFI_RESOURCE_ATTRIBUTE_PRESENT     |
    58     EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
    59     EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
    60     EFI_RESOURCE_ATTRIBUTE_TESTED,
    61     MemoryBase,
    62     MemorySize
    63     );
    64 }
    65 
    66 /**
    6742  Create memory range resource HOB using the memory base
    6843  address and size.
     
    7550VOID
    7651AddMemoryBaseSizeHob (
    77   EFI_PHYSICAL_ADDRESS  MemoryBase,
    78   UINT64                MemorySize
     52  IN EFI_PHYSICAL_ADDRESS  MemoryBase,
     53  IN UINT64                MemorySize
    7954  )
    8055{
     
    10479VOID
    10580AddMemoryRangeHob (
    106   EFI_PHYSICAL_ADDRESS  MemoryBase,
    107   EFI_PHYSICAL_ADDRESS  MemoryLimit
     81  IN EFI_PHYSICAL_ADDRESS  MemoryBase,
     82  IN EFI_PHYSICAL_ADDRESS  MemoryLimit
    10883  )
    10984{
    11085  AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase));
    111 }
    112 
    113 /**
    114   Configure MMU
    115 **/
    116 STATIC
    117 VOID
    118 InitMmu (
    119   )
    120 {
    121   //
    122   // Set supervisor translation mode to Bare mode
    123   //
    124   RiscVSetSupervisorAddressTranslationRegister ((UINT64)SATP_MODE_OFF << 60);
    125   DEBUG ((DEBUG_INFO, "%a: Set Supervisor address mode to bare-metal mode.\n", __FUNCTION__));
    12686}
    12787
     
    13393VOID
    13494InitializeRamRegions (
    135   EFI_PHYSICAL_ADDRESS  SystemMemoryBase,
    136   UINT64                SystemMemorySize,
    137   EFI_PHYSICAL_ADDRESS  MmodeResvBase,
    138   UINT64                MmodeResvSize
    139   )
    140 {
    141   /*
    142    * M-mode FW can be loaded anywhere in memory but should not overlap
    143    * with the EDK2. This can happen if some other boot code loads the
    144    * M-mode firmware.
    145    *
    146    * The M-mode firmware memory should be marked as reserved memory
    147    * so that OS doesn't use it.
    148    */
    149   DEBUG ((
    150     DEBUG_INFO,
    151     "%a: M-mode FW Memory Start:0x%lx End:0x%lx\n",
    152     __FUNCTION__,
    153     MmodeResvBase,
    154     MmodeResvBase + MmodeResvSize
    155     ));
    156   AddReservedMemoryBaseSizeHob (MmodeResvBase, MmodeResvSize);
    157 
    158   if (MmodeResvBase > SystemMemoryBase) {
    159     AddMemoryRangeHob (SystemMemoryBase, MmodeResvBase);
    160   }
    161 
     95  IN EFI_PHYSICAL_ADDRESS  SystemMemoryBase,
     96  IN UINT64                SystemMemorySize
     97  )
     98{
    16299  AddMemoryRangeHob (
    163     MmodeResvBase + MmodeResvSize,
     100    SystemMemoryBase,
    164101    SystemMemoryBase + SystemMemorySize
    165102    );
     103}
     104
     105/** Get the number of cells for a given property
     106
     107  @param[in]  Fdt   Pointer to Device Tree (DTB)
     108  @param[in]  Node  Node
     109  @param[in]  Name  Name of the property
     110
     111  @return           Number of cells.
     112**/
     113STATIC
     114INT32
     115GetNumCells (
     116  IN VOID         *Fdt,
     117  IN INT32        Node,
     118  IN CONST CHAR8  *Name
     119  )
     120{
     121  CONST INT32  *Prop;
     122  INT32        Len;
     123  UINT32       Val;
     124
     125  Prop = fdt_getprop (Fdt, Node, Name, &Len);
     126  if (Prop == NULL) {
     127    return Len;
     128  }
     129
     130  if (Len != sizeof (*Prop)) {
     131    return -FDT_ERR_BADNCELLS;
     132  }
     133
     134  Val = fdt32_to_cpu (*Prop);
     135  if (Val > FDT_MAX_NCELLS) {
     136    return -FDT_ERR_BADNCELLS;
     137  }
     138
     139  return (INT32)Val;
     140}
     141
     142/** Mark reserved memory ranges in the EFI memory map
     143
     144 * As per DT spec v0.4 Section 3.5.4,
     145 * "Reserved regions with the no-map property must be listed in the
     146 * memory map with type EfiReservedMemoryType. All other reserved
     147 * regions must be listed with type EfiBootServicesData."
     148
     149  @param FdtPointer Pointer to FDT
     150
     151**/
     152STATIC
     153VOID
     154AddReservedMemoryMap (
     155  IN VOID  *FdtPointer
     156  )
     157{
     158  CONST INT32           *RegProp;
     159  INT32                 Node;
     160  INT32                 SubNode;
     161  INT32                 Len;
     162  EFI_PHYSICAL_ADDRESS  Addr;
     163  UINT64                Size;
     164  INTN                  NumRsv, i;
     165  INT32                 NumAddrCells, NumSizeCells;
     166
     167  NumRsv = fdt_num_mem_rsv (FdtPointer);
     168
     169  /* Look for an existing entry and add it to the efi mem map. */
     170  for (i = 0; i < NumRsv; i++) {
     171    if (fdt_get_mem_rsv (FdtPointer, i, &Addr, &Size) != 0) {
     172      continue;
     173    }
     174
     175    BuildMemoryAllocationHob (
     176      Addr,
     177      Size,
     178      EfiReservedMemoryType
     179      );
     180  }
     181
     182  /* process reserved-memory */
     183  Node = fdt_subnode_offset (FdtPointer, 0, "reserved-memory");
     184  if (Node >= 0) {
     185    NumAddrCells = GetNumCells (FdtPointer, Node, "#address-cells");
     186    if (NumAddrCells <= 0) {
     187      return;
     188    }
     189
     190    NumSizeCells = GetNumCells (FdtPointer, Node, "#size-cells");
     191    if (NumSizeCells <= 0) {
     192      return;
     193    }
     194
     195    fdt_for_each_subnode (SubNode, FdtPointer, Node) {
     196      RegProp = fdt_getprop (FdtPointer, SubNode, "reg", &Len);
     197
     198      if ((RegProp != 0) && (Len == ((NumAddrCells + NumSizeCells) * sizeof (INT32)))) {
     199        Addr = fdt32_to_cpu (RegProp[0]);
     200
     201        if (NumAddrCells > 1) {
     202          Addr = (Addr << 32) | fdt32_to_cpu (RegProp[1]);
     203        }
     204
     205        RegProp += NumAddrCells;
     206        Size     = fdt32_to_cpu (RegProp[0]);
     207
     208        if (NumSizeCells > 1) {
     209          Size = (Size << 32) | fdt32_to_cpu (RegProp[1]);
     210        }
     211
     212        DEBUG ((
     213          DEBUG_INFO,
     214          "%a: Adding Reserved Memory Addr = 0x%llx, Size = 0x%llx\n",
     215          __func__,
     216          Addr,
     217          Size
     218          ));
     219
     220        if (fdt_getprop (FdtPointer, SubNode, "no-map", &Len)) {
     221          BuildMemoryAllocationHob (
     222            Addr,
     223            Size,
     224            EfiReservedMemoryType
     225            );
     226        } else {
     227          BuildMemoryAllocationHob (
     228            Addr,
     229            Size,
     230            EfiBootServicesData
     231            );
     232        }
     233      }
     234    }
     235  }
    166236}
    167237
     
    184254  INT32                       Len;
    185255  VOID                        *FdtPointer;
    186   EFI_PHYSICAL_ADDRESS        MmodeResvBase;
    187   UINT64                      MmodeResvSize;
    188256
    189257  FirmwareContext = NULL;
     
    191259
    192260  if (FirmwareContext == NULL) {
    193     DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __FUNCTION__));
     261    DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __func__));
    194262    return EFI_UNSUPPORTED;
    195263  }
     
    197265  FdtPointer = (VOID *)FirmwareContext->FlattenedDeviceTree;
    198266  if (FdtPointer == NULL) {
    199     DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __FUNCTION__));
     267    DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __func__));
    200268    return EFI_UNSUPPORTED;
    201   }
    202 
    203   /* try to locate the reserved memory opensbi node */
    204   Node = fdt_path_offset (FdtPointer, "/reserved-memory/mmode_resv0");
    205   if (Node >= 0) {
    206     RegProp = fdt_getprop (FdtPointer, Node, "reg", &Len);
    207     if ((RegProp != 0) && (Len == (2 * sizeof (UINT64)))) {
    208       MmodeResvBase = fdt64_to_cpu (ReadUnaligned64 (RegProp));
    209       MmodeResvSize = fdt64_to_cpu (ReadUnaligned64 (RegProp + 1));
    210     }
    211269  }
    212270
     
    231289          DEBUG_INFO,
    232290          "%a: System RAM @ 0x%lx - 0x%lx\n",
    233           __FUNCTION__,
     291          __func__,
    234292          CurBase,
    235293          CurBase + CurSize - 1
    236294          ));
    237295
    238         if ((MmodeResvBase >= CurBase) && ((MmodeResvBase + MmodeResvSize) <= (CurBase + CurSize))) {
    239           InitializeRamRegions (
    240             CurBase,
    241             CurSize,
    242             MmodeResvBase,
    243             MmodeResvSize
    244             );
    245         } else {
    246           AddMemoryBaseSizeHob (CurBase, CurSize);
    247         }
     296        InitializeRamRegions (
     297          CurBase,
     298          CurSize
     299          );
    248300      } else {
    249301        DEBUG ((
    250302          DEBUG_ERROR,
    251303          "%a: Failed to parse FDT memory node\n",
    252           __FUNCTION__
     304          __func__
    253305          ));
    254306      }
     
    256308  }
    257309
    258   InitMmu ();
     310  AddReservedMemoryMap (FdtPointer);
     311
     312  /* Make sure SEC is booting with bare mode */
     313  ASSERT ((RiscVGetSupervisorAddressTranslationRegister () & SATP64_MODE) == (SATP_MODE_OFF << SATP64_MODE_SHIFT));
    259314
    260315  BuildMemoryTypeInformationHob ();
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/Platform.c

    r99404 r101291  
    2323
    2424/**
     25  Build memory map I/O range resource HOB using the
     26  base address and size.
     27
     28  @param  MemoryBase     Memory map I/O base.
     29  @param  MemorySize     Memory map I/O size.
     30
     31**/
     32STATIC
     33VOID
     34AddIoMemoryBaseSizeHob (
     35  EFI_PHYSICAL_ADDRESS  MemoryBase,
     36  UINT64                MemorySize
     37  )
     38{
     39  /* Align to EFI_PAGE_SIZE */
     40  MemorySize = ALIGN_VALUE (MemorySize, EFI_PAGE_SIZE);
     41  BuildResourceDescriptorHob (
     42    EFI_RESOURCE_MEMORY_MAPPED_IO,
     43    EFI_RESOURCE_ATTRIBUTE_PRESENT     |
     44    EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
     45    EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
     46    EFI_RESOURCE_ATTRIBUTE_TESTED,
     47    MemoryBase,
     48    MemorySize
     49    );
     50}
     51
     52/**
     53  Populate IO resources from FDT that not added to GCD by its
     54  driver in the DXE phase.
     55
     56  @param  FdtBase       Fdt base address
     57  @param  Compatible    Compatible string
     58
     59**/
     60STATIC
     61VOID
     62PopulateIoResources (
     63  VOID         *FdtBase,
     64  CONST CHAR8  *Compatible
     65  )
     66{
     67  UINT64  *Reg;
     68  INT32   Node, LenP;
     69
     70  Node = fdt_node_offset_by_compatible (FdtBase, -1, Compatible);
     71  while (Node != -FDT_ERR_NOTFOUND) {
     72    Reg = (UINT64 *)fdt_getprop (FdtBase, Node, "reg", &LenP);
     73    if (Reg) {
     74      ASSERT (LenP == (2 * sizeof (UINT64)));
     75      AddIoMemoryBaseSizeHob (SwapBytes64 (Reg[0]), SwapBytes64 (Reg[1]));
     76    }
     77
     78    Node = fdt_node_offset_by_compatible (FdtBase, Node, Compatible);
     79  }
     80}
     81
     82/**
    2583  @retval EFI_SUCCESS            The address of FDT is passed in HOB.
    2684          EFI_UNSUPPORTED        Can't locate FDT.
     
    44102
    45103  if (FirmwareContext == NULL) {
    46     DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __FUNCTION__));
     104    DEBUG ((DEBUG_ERROR, "%a: Firmware Context is NULL\n", __func__));
    47105    return EFI_UNSUPPORTED;
    48106  }
     
    50108  FdtPointer = (VOID *)FirmwareContext->FlattenedDeviceTree;
    51109  if (FdtPointer == NULL) {
    52     DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __FUNCTION__));
     110    DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __func__));
    53111    return EFI_UNSUPPORTED;
    54112  }
    55113
    56   DEBUG ((DEBUG_INFO, "%a: Build FDT HOB - FDT at address: 0x%x \n", __FUNCTION__, FdtPointer));
     114  DEBUG ((DEBUG_INFO, "%a: Build FDT HOB - FDT at address: 0x%x \n", __func__, FdtPointer));
    57115  Base = FdtPointer;
    58116  if (fdt_check_header (Base) != 0) {
    59     DEBUG ((DEBUG_ERROR, "%a: Corrupted DTB\n", __FUNCTION__));
     117    DEBUG ((DEBUG_ERROR, "%a: Corrupted DTB\n", __func__));
    60118    return EFI_UNSUPPORTED;
    61119  }
     
    65123  NewBase  = AllocatePages (FdtPages);
    66124  if (NewBase == NULL) {
    67     DEBUG ((DEBUG_ERROR, "%a: Could not allocate memory for DTB\n", __FUNCTION__));
     125    DEBUG ((DEBUG_ERROR, "%a: Could not allocate memory for DTB\n", __func__));
    68126    return EFI_UNSUPPORTED;
    69127  }
     
    73131  FdtHobData = BuildGuidHob (&gFdtHobGuid, sizeof *FdtHobData);
    74132  if (FdtHobData == NULL) {
    75     DEBUG ((DEBUG_ERROR, "%a: Could not build FDT Hob\n", __FUNCTION__));
     133    DEBUG ((DEBUG_ERROR, "%a: Could not build FDT Hob\n", __func__));
    76134    return EFI_UNSUPPORTED;
    77135  }
     
    81139  BuildFvHob (PcdGet32 (PcdOvmfDxeMemFvBase), PcdGet32 (PcdOvmfDxeMemFvSize));
    82140
     141  PopulateIoResources (Base, "ns16550a");
     142  PopulateIoResources (Base, "qemu,fw-cfg-mmio");
     143  PopulateIoResources (Base, "virtio,mmio");
     144
    83145  return EFI_SUCCESS;
    84146}
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/SecEntry.S

    r99404 r101291  
    77
    88#include "SecMain.h"
    9 
    10 .text
    11 .align 3
    129
    1310ASM_FUNC (_ModuleEntryPoint)
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/SecMain.c

    r99404 r101291  
    22  RISC-V SEC phase module for Qemu Virt.
    33
    4   Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
     4  Copyright (c) 2008 - 2023, Intel Corporation. All rights reserved.<BR>
    55  Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<BR>
    66
     
    5858  UINT32                      StackSize;
    5959
     60  SerialPortInitialize ();
     61
    6062  //
    6163  // Report Status Code to indicate entering SEC core
     
    6466    DEBUG_INFO,
    6567    "%a() BootHartId: 0x%x, DeviceTreeAddress=0x%x\n",
    66     __FUNCTION__,
     68    __func__,
    6769    BootHartId,
    6870    DeviceTreeAddress
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/SecMain.h

    r99404 r101291  
    3030#include <Library/PlatformInitLib.h>
    3131#include <Library/PrePiHobListPointerLib.h>
     32#include <Library/SerialPortLib.h>
    3233#include <Register/RiscV64/RiscVImpl.h>
    3334
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/SecMain.inf

    r99404 r101291  
    4949  MemoryAllocationLib
    5050  HobLib
     51  SerialPortLib
    5152
    5253[Ppis]
  • trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/VarStore.fdf.inc

    r99404 r101291  
    2626  0x8D, 0x2B, 0xF1, 0xFF, 0x96, 0x76, 0x8B, 0x4C,
    2727  0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50,
    28   # FvLength: 0x20000
    29   0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
     28  # FvLength: 0xC0000
     29  0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
    3030  # Signature "_FVH"       # Attributes
    3131  0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00,
    3232  # HeaderLength # CheckSum # ExtHeaderOffset #Reserved #Revision
    33   0x48, 0x00, 0x39, 0xF1, 0x00, 0x00, 0x00, 0x02,
    34   # Blockmap[0]: 0x20 Blocks * 0x1000 Bytes / Block
    35   0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
     33  0x48, 0x00, 0x28, 0x09, 0x00, 0x00, 0x00, 0x02,
     34  # Blockmap[0]: 0x3 Blocks * 0x40000 Bytes / Block
     35  0x3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
    3636  # Blockmap[1]: End
    3737  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     
    6161gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
    6262#
    63 #NV_FTW_WROK
     63#NV_FTW_WORK
    6464#
    6565DATA = {
     
    6969  0xa0, 0xce, 0x65,  0x0, 0xfd, 0x9f, 0x1b, 0x95,
    7070  # Crc:UINT32            #WorkingBlockValid:1, WorkingBlockInvalid:1, Reserved
    71   0x2c, 0xaf, 0x2c, 0x64, 0xFE, 0xFF, 0xFF, 0xFF,
     71  0x5b, 0xe7, 0xc6, 0x86, 0xFE, 0xFF, 0xFF, 0xFF,
    7272  # WriteQueueSize: UINT64
    73   0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
     73  0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
    7474}
    7575
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette