Changeset 101291 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt
- Timestamp:
- Sep 27, 2023 1:34:02 PM (17 months ago)
- svn:sync-xref-src-repo-rev:
- 159276
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 3 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-156846 /vendor/edk2/current 103735-103757,103769-103776,129194-159268
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Library/PlatformBootManagerLib/PlatformBm.c
r99404 r101291 194 194 DEBUG_VERBOSE, 195 195 "%a: %g: %r\n", 196 __ FUNCTION__,196 __func__, 197 197 ProtocolGuid, 198 198 Status … … 265 265 ); 266 266 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)); 268 268 return FALSE; 269 269 } … … 414 414 415 415 PciError: 416 DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __ FUNCTION__, ReportText, Status));416 DEBUG ((DEBUG_ERROR, "%a: %s: %r\n", __func__, ReportText, Status)); 417 417 return FALSE; 418 418 } … … 441 441 EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE, 442 442 "%a: %s: %r\n", 443 __ FUNCTION__,443 __func__, 444 444 ReportText, 445 445 Status … … 467 467 DEBUG_ERROR, 468 468 "%a: %s: handle %p: device path not found\n", 469 __ FUNCTION__,469 __func__, 470 470 ReportText, 471 471 Handle … … 479 479 DEBUG_ERROR, 480 480 "%a: %s: adding to ConOut: %r\n", 481 __ FUNCTION__,481 __func__, 482 482 ReportText, 483 483 Status … … 491 491 DEBUG_ERROR, 492 492 "%a: %s: adding to ErrOut: %r\n", 493 __ FUNCTION__,493 __func__, 494 494 ReportText, 495 495 Status … … 501 501 DEBUG_VERBOSE, 502 502 "%a: %s: added to ConOut and ErrOut\n", 503 __ FUNCTION__,503 __func__, 504 504 ReportText 505 505 )); … … 702 702 EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE, 703 703 "%a: removing stale Boot#%04x %s: %r\n", 704 __ FUNCTION__,704 __func__, 705 705 (UINT32)BootOptions[Index].OptionNumber, 706 706 DevicePathString == NULL ? L"<unavailable>" : DevicePathString, … … 880 880 EFI_ERROR (Status) ? DEBUG_ERROR : DEBUG_VERBOSE, 881 881 "%a: SetVariable(%s, %u): %r\n", 882 __ FUNCTION__,882 __func__, 883 883 EFI_TIME_OUT_VARIABLE_NAME, 884 884 FrontPageTimeout, … … 937 937 } 938 938 939 Print (L"Press ESCAPE within 10 seconds for boot options ");939 Print (L"Press ESCAPE within %u seconds for boot options ", PcdGet16 (PcdPlatformBootTimeOut)); 940 940 // 941 941 // 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 67 67 DEBUG_ERROR, 68 68 "%a: QemuStartKernelImage(): %r\n", 69 __ FUNCTION__,69 __func__, 70 70 Status 71 71 )); -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Library/PrePiHobListPointerLib/PrePiHobListPointer.c
r99404 r101291 32 32 33 33 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__)); 35 35 return NULL; 36 36 } … … 57 57 58 58 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__)); 60 60 return EFI_NOT_READY; 61 61 } -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Library/VirtNorFlashPlatformLib/VirtNorFlashStaticLib.c
r99404 r101291 25 25 FixedPcdGet32 (PcdOvmfFdBaseAddress), 26 26 FixedPcdGet64 (PcdFlashNvStorageVariableBase), 27 FixedPcdGet32 (PcdOvmfFirmwareFdSize), 27 FixedPcdGet32 (PcdOvmfFirmwareFdSize) - 28 (FixedPcdGet64 (PcdFlashNvStorageVariableBase) - FixedPcdGet32 (PcdOvmfFdBaseAddress)), 28 29 QEMU_NOR_BLOCK_SIZE 29 30 }; -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/RiscVVirt.dsc.inc
r99404 r101291 84 84 CpuExceptionHandlerLib|UefiCpuPkg/Library/BaseRiscV64CpuExceptionHandlerLib/BaseRiscV64CpuExceptionHandlerLib.inf 85 85 RiscVSbiLib|MdePkg/Library/BaseRiscVSbiLib/BaseRiscVSbiLib.inf 86 RiscVMmuLib|UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf 86 87 PlatformBootManagerLib|OvmfPkg/RiscVVirt/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf 87 88 ResetSystemLib|OvmfPkg/RiscVVirt/Library/ResetSystemLib/BaseResetSystemLib.inf -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/RiscVVirt.fdf.inc
r99404 r101291 11 11 DEFINE BLOCK_SIZE = 0x1000 12 12 13 DEFINE PFLASH0_BASE = 0x20000000 13 14 DEFINE PFLASH1_BASE = 0x22000000 14 15 15 DEFINE FW_BASE_ADDRESS = $(PFLASH1_BASE)16 DEFINE FW_SIZE= 0x0080000017 DEFINE FW_BLOCKS= 0x80016 DEFINE CODE_BASE_ADDRESS = $(PFLASH0_BASE) 17 DEFINE CODE_SIZE = 0x00800000 18 DEFINE CODE_BLOCKS = 0x800 18 19 19 DEFINE CODE_BASE_ADDRESS = $(FW_BASE_ADDRESS) 20 DEFINE CODE_SIZE = 0x00740000 21 DEFINE CODE_BLOCKS = 0x740 22 20 DEFINE VARS_BASE_ADDRESS = $(PFLASH1_BASE) 23 21 DEFINE VARS_SIZE = 0x000C0000 24 22 DEFINE VARS_BLOCK_SIZE = 0x40000 … … 30 28 # all of sub regions of EFI Variable 31 29 # 32 DEFINE VARS_OFFSET = $(CODE_SIZE)30 DEFINE VARS_OFFSET = 0x00000000 33 31 DEFINE VARS_LIVE_SIZE = 0x00040000 34 32 DEFINE VARS_FTW_WORKING_OFFSET = $(VARS_OFFSET) + $(VARS_LIVE_SIZE) -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc
r99404 r101291 86 86 87 87 TimerLib|UefiCpuPkg/Library/BaseRiscV64CpuTimerLib/BaseRiscV64CpuTimerLib.inf 88 VirtNorFlashPlatformLib|OvmfPkg/RiscVVirt/Library/VirtNorFlashPlatformLib/VirtNorFlash StaticLib.inf88 VirtNorFlashPlatformLib|OvmfPkg/RiscVVirt/Library/VirtNorFlashPlatformLib/VirtNorFlashDeviceTreeLib.inf 89 89 90 90 CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf … … 114 114 115 115 [LibraryClasses.common.DXE_DRIVER] 116 AcpiPlatformLib|OvmfPkg/Library/AcpiPlatformLib/DxeAcpiPlatformLib.inf 116 117 ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf 117 118 PciExpressLib|OvmfPkg/Library/BaseCachingPciExpressLib/BaseCachingPciExpressLib.inf … … 172 173 gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE 173 174 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|TRUE180 175 181 176 !if $(SECURE_BOOT_ENABLE) == TRUE … … 428 423 429 424 # 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 # 430 432 # NVME Driver 431 433 # -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/RiscVVirtQemu.fdf
r99404 r101291 13 13 14 14 ################################################################################ 15 [FD.RISCV_VIRT ]16 BaseAddress = $( FW_BASE_ADDRESS)|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress17 Size = $( FW_SIZE)|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize15 [FD.RISCV_VIRT_CODE] 16 BaseAddress = $(CODE_BASE_ADDRESS)|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress 17 Size = $(CODE_SIZE)|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize 18 18 ErasePolarity = 1 19 19 BlockSize = $(BLOCK_SIZE) 20 NumBlocks = $( FW_BLOCKS)20 NumBlocks = $(CODE_BLOCKS) 21 21 22 22 0x00000000|$(CODE_SIZE) 23 23 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize 24 24 FV = FVMAIN_COMPACT 25 26 ################################################################################ 27 [FD.RISCV_VIRT_VARS] 28 BaseAddress = $(VARS_BASE_ADDRESS) 29 Size = $(VARS_SIZE) 30 ErasePolarity = 1 31 BlockSize = $(VARS_BLOCK_SIZE) 32 NumBlocks = $(VARS_BLOCKS) 25 33 26 34 !include VarStore.fdf.inc … … 46 54 READ_LOCK_STATUS = TRUE 47 55 56 APRIORI 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 48 66 # 49 67 # DXE Phase modules … … 137 155 INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf 138 156 INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf 157 158 # 159 # SATA 160 # 161 INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf 162 INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf 163 INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf 139 164 140 165 # … … 226 251 227 252 [Rule.Common.SEC] 228 FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {229 PE32 PE32 Align=4K$(INF_OUTPUT)/$(MODULE_NAME).efi253 FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED FIXED { 254 PE32 PE32 Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi 230 255 UI STRING ="$(MODULE_NAME)" Optional 231 256 VERSION STRING ="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) 232 257 } 233 258 234 [Rule.Common.PEI_CORE]235 FILE PEI_CORE = $(NAMED_GUID) {236 PE32 PE32 Align=4K $(INF_OUTPUT)/$(MODULE_NAME).efi237 UI STRING ="$(MODULE_NAME)" Optional238 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).depex244 PE32 PE32 Align=4K $(INF_OUTPUT)/$(MODULE_NAME).efi245 UI STRING="$(MODULE_NAME)" Optional246 VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)247 }248 249 259 [Rule.Common.DXE_CORE] 250 260 FILE DXE_CORE = $(NAMED_GUID) { 251 PE32 PE32 Align=4K$(INF_OUTPUT)/$(MODULE_NAME).efi261 PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi 252 262 UI STRING="$(MODULE_NAME)" Optional 253 263 VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) … … 257 267 FILE DRIVER = $(NAMED_GUID) { 258 268 DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex 259 PE32 PE32 Align=4K$(INF_OUTPUT)/$(MODULE_NAME).efi269 PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi 260 270 UI STRING="$(MODULE_NAME)" Optional 261 271 VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) … … 265 275 FILE DRIVER = $(NAMED_GUID) { 266 276 DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex 267 PE32 PE32 Align = 4K$(INF_OUTPUT)/$(MODULE_NAME).efi277 PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi 268 278 UI STRING="$(MODULE_NAME)" Optional 269 279 VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) … … 273 283 FILE DRIVER = $(NAMED_GUID) { 274 284 DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex 275 PE32 PE32 Align=4K$(INF_OUTPUT)/$(MODULE_NAME).efi285 PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi 276 286 UI STRING="$(MODULE_NAME)" Optional 277 287 VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) … … 281 291 FILE DRIVER = $(NAMED_GUID) { 282 292 DXE_DEPEX DXE_DEPEX Optional |.depex 283 PE32 PE32 Align=4K|.efi293 PE32 PE32 |.efi 284 294 UI STRING="$(MODULE_NAME)" Optional 285 295 VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) … … 288 298 [Rule.Common.UEFI_APPLICATION] 289 299 FILE APPLICATION = $(NAMED_GUID) { 290 PE32 PE32 Align=4K$(INF_OUTPUT)/$(MODULE_NAME).efi300 PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi 291 301 UI STRING="$(MODULE_NAME)" Optional 292 302 VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) … … 295 305 [Rule.Common.UEFI_APPLICATION.BINARY] 296 306 FILE APPLICATION = $(NAMED_GUID) { 297 PE32 PE32 Align=4K|.efi307 PE32 PE32 |.efi 298 308 UI STRING="$(MODULE_NAME)" Optional 299 309 VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) … … 304 314 RAW ACPI |.acpi 305 315 RAW ASL |.aml 306 } 316 UI STRING="$(MODULE_NAME)" Optional 317 } -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/Memory.c
r99404 r101291 40 40 41 41 /** 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 STATIC49 VOID50 AddReservedMemoryBaseSizeHob (51 EFI_PHYSICAL_ADDRESS MemoryBase,52 UINT64 MemorySize53 )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 MemorySize63 );64 }65 66 /**67 42 Create memory range resource HOB using the memory base 68 43 address and size. … … 75 50 VOID 76 51 AddMemoryBaseSizeHob ( 77 EFI_PHYSICAL_ADDRESS MemoryBase,78 UINT64 MemorySize52 IN EFI_PHYSICAL_ADDRESS MemoryBase, 53 IN UINT64 MemorySize 79 54 ) 80 55 { … … 104 79 VOID 105 80 AddMemoryRangeHob ( 106 EFI_PHYSICAL_ADDRESS MemoryBase,107 EFI_PHYSICAL_ADDRESS MemoryLimit81 IN EFI_PHYSICAL_ADDRESS MemoryBase, 82 IN EFI_PHYSICAL_ADDRESS MemoryLimit 108 83 ) 109 84 { 110 85 AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase)); 111 }112 113 /**114 Configure MMU115 **/116 STATIC117 VOID118 InitMmu (119 )120 {121 //122 // Set supervisor translation mode to Bare mode123 //124 RiscVSetSupervisorAddressTranslationRegister ((UINT64)SATP_MODE_OFF << 60);125 DEBUG ((DEBUG_INFO, "%a: Set Supervisor address mode to bare-metal mode.\n", __FUNCTION__));126 86 } 127 87 … … 133 93 VOID 134 94 InitializeRamRegions ( 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 { 162 99 AddMemoryRangeHob ( 163 MmodeResvBase + MmodeResvSize,100 SystemMemoryBase, 164 101 SystemMemoryBase + SystemMemorySize 165 102 ); 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 **/ 113 STATIC 114 INT32 115 GetNumCells ( 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 **/ 152 STATIC 153 VOID 154 AddReservedMemoryMap ( 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 } 166 236 } 167 237 … … 184 254 INT32 Len; 185 255 VOID *FdtPointer; 186 EFI_PHYSICAL_ADDRESS MmodeResvBase;187 UINT64 MmodeResvSize;188 256 189 257 FirmwareContext = NULL; … … 191 259 192 260 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__)); 194 262 return EFI_UNSUPPORTED; 195 263 } … … 197 265 FdtPointer = (VOID *)FirmwareContext->FlattenedDeviceTree; 198 266 if (FdtPointer == NULL) { 199 DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __ FUNCTION__));267 DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __func__)); 200 268 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 }211 269 } 212 270 … … 231 289 DEBUG_INFO, 232 290 "%a: System RAM @ 0x%lx - 0x%lx\n", 233 __ FUNCTION__,291 __func__, 234 292 CurBase, 235 293 CurBase + CurSize - 1 236 294 )); 237 295 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 ); 248 300 } else { 249 301 DEBUG (( 250 302 DEBUG_ERROR, 251 303 "%a: Failed to parse FDT memory node\n", 252 __ FUNCTION__304 __func__ 253 305 )); 254 306 } … … 256 308 } 257 309 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)); 259 314 260 315 BuildMemoryTypeInformationHob (); -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/Platform.c
r99404 r101291 23 23 24 24 /** 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 **/ 32 STATIC 33 VOID 34 AddIoMemoryBaseSizeHob ( 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 **/ 60 STATIC 61 VOID 62 PopulateIoResources ( 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 /** 25 83 @retval EFI_SUCCESS The address of FDT is passed in HOB. 26 84 EFI_UNSUPPORTED Can't locate FDT. … … 44 102 45 103 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__)); 47 105 return EFI_UNSUPPORTED; 48 106 } … … 50 108 FdtPointer = (VOID *)FirmwareContext->FlattenedDeviceTree; 51 109 if (FdtPointer == NULL) { 52 DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __ FUNCTION__));110 DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __func__)); 53 111 return EFI_UNSUPPORTED; 54 112 } 55 113 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)); 57 115 Base = FdtPointer; 58 116 if (fdt_check_header (Base) != 0) { 59 DEBUG ((DEBUG_ERROR, "%a: Corrupted DTB\n", __ FUNCTION__));117 DEBUG ((DEBUG_ERROR, "%a: Corrupted DTB\n", __func__)); 60 118 return EFI_UNSUPPORTED; 61 119 } … … 65 123 NewBase = AllocatePages (FdtPages); 66 124 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__)); 68 126 return EFI_UNSUPPORTED; 69 127 } … … 73 131 FdtHobData = BuildGuidHob (&gFdtHobGuid, sizeof *FdtHobData); 74 132 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__)); 76 134 return EFI_UNSUPPORTED; 77 135 } … … 81 139 BuildFvHob (PcdGet32 (PcdOvmfDxeMemFvBase), PcdGet32 (PcdOvmfDxeMemFvSize)); 82 140 141 PopulateIoResources (Base, "ns16550a"); 142 PopulateIoResources (Base, "qemu,fw-cfg-mmio"); 143 PopulateIoResources (Base, "virtio,mmio"); 144 83 145 return EFI_SUCCESS; 84 146 } -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/SecEntry.S
r99404 r101291 7 7 8 8 #include "SecMain.h" 9 10 .text11 .align 312 9 13 10 ASM_FUNC (_ModuleEntryPoint) -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/SecMain.c
r99404 r101291 2 2 RISC-V SEC phase module for Qemu Virt. 3 3 4 Copyright (c) 2008 - 20 15, Intel Corporation. All rights reserved.<BR>4 Copyright (c) 2008 - 2023, Intel Corporation. All rights reserved.<BR> 5 5 Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<BR> 6 6 … … 58 58 UINT32 StackSize; 59 59 60 SerialPortInitialize (); 61 60 62 // 61 63 // Report Status Code to indicate entering SEC core … … 64 66 DEBUG_INFO, 65 67 "%a() BootHartId: 0x%x, DeviceTreeAddress=0x%x\n", 66 __ FUNCTION__,68 __func__, 67 69 BootHartId, 68 70 DeviceTreeAddress -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/SecMain.h
r99404 r101291 30 30 #include <Library/PlatformInitLib.h> 31 31 #include <Library/PrePiHobListPointerLib.h> 32 #include <Library/SerialPortLib.h> 32 33 #include <Register/RiscV64/RiscVImpl.h> 33 34 -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/Sec/SecMain.inf
r99404 r101291 49 49 MemoryAllocationLib 50 50 HobLib 51 SerialPortLib 51 52 52 53 [Ppis] -
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/RiscVVirt/VarStore.fdf.inc
r99404 r101291 26 26 0x8D, 0x2B, 0xF1, 0xFF, 0x96, 0x76, 0x8B, 0x4C, 27 27 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50, 28 # FvLength: 0x 2000029 0x00, 0x00, 0x0 2, 0x00, 0x00, 0x00, 0x00, 0x00,28 # FvLength: 0xC0000 29 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 30 30 # Signature "_FVH" # Attributes 31 31 0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00, 32 32 # HeaderLength # CheckSum # ExtHeaderOffset #Reserved #Revision 33 0x48, 0x00, 0x 39, 0xF1, 0x00, 0x00, 0x00, 0x02,34 # Blockmap[0]: 0x 20 Blocks * 0x1000 Bytes / Block35 0x 00, 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, 36 36 # Blockmap[1]: End 37 37 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, … … 61 61 gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize 62 62 # 63 #NV_FTW_W ROK63 #NV_FTW_WORK 64 64 # 65 65 DATA = { … … 69 69 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95, 70 70 # Crc:UINT32 #WorkingBlockValid:1, WorkingBlockInvalid:1, Reserved 71 0x 2c, 0xaf, 0x2c, 0x64, 0xFE, 0xFF, 0xFF, 0xFF,71 0x5b, 0xe7, 0xc6, 0x86, 0xFE, 0xFF, 0xFF, 0xFF, 72 72 # WriteQueueSize: UINT64 73 0xE0, 0x 0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0073 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00 74 74 } 75 75
Note:
See TracChangeset
for help on using the changeset viewer.