ArmPlatformPkg/ArmVExpressDxe: Load FDT into the EFI Configuration Table
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ronald Cron <Ronald.Cron@arm.com> Reviewed-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16937 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
committed by
oliviermartin
parent
d550b88184
commit
04f1a7096a
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2013-2014, ARM Ltd. All rights reserved.<BR>
|
||||
Copyright (c) 2013-2015, ARM Ltd. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#include <Library/VirtioMmioDeviceLib.h>
|
||||
#include <Library/ArmShellCmdLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
|
||||
#define ARM_FVP_BASE_VIRTIO_BLOCK_BASE 0x1c130000
|
||||
|
||||
@@ -49,6 +50,10 @@ VIRTIO_BLK_DEVICE_PATH mVirtioBlockDevicePath =
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Generic UEFI Entrypoint for 'ArmFvpDxe' driver
|
||||
* See UEFI specification for the details of the parameters
|
||||
*/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ArmFvpInitialise (
|
||||
@@ -56,7 +61,11 @@ ArmFvpInitialise (
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
CONST ARM_VEXPRESS_PLATFORM* Platform;
|
||||
EFI_STATUS Status;
|
||||
CHAR16 *TextDevicePath;
|
||||
UINTN TextDevicePathSize;
|
||||
VOID *Buffer;
|
||||
|
||||
Status = gBS->InstallProtocolInterface (&ImageHandle,
|
||||
&gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE,
|
||||
@@ -65,6 +74,26 @@ ArmFvpInitialise (
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = ArmVExpressGetPlatform (&Platform);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
TextDevicePathSize = StrSize ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)) - sizeof (CHAR16);
|
||||
TextDevicePathSize += StrSize (Platform->FdtName);
|
||||
|
||||
TextDevicePath = AllocatePool (TextDevicePathSize);
|
||||
if (TextDevicePath != NULL) {
|
||||
StrCpy (TextDevicePath, ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)));
|
||||
StrCat (TextDevicePath, Platform->FdtName);
|
||||
Buffer = PcdSetPtr (PcdFdtDevicePaths, &TextDevicePathSize, TextDevicePath);
|
||||
if (Buffer == NULL) {
|
||||
DEBUG ((
|
||||
EFI_D_ERROR,
|
||||
"ArmFvpDxe: Setting of FDT device path in PcdFdtDevicePaths failed - %r\n", EFI_BUFFER_TOO_SMALL
|
||||
));
|
||||
}
|
||||
FreePool (TextDevicePath);
|
||||
}
|
||||
}
|
||||
|
||||
// Declare the Virtio BlockIo device
|
||||
Status = VirtioMmioInstallDevice (ARM_FVP_BASE_VIRTIO_BLOCK_BASE, ImageHandle);
|
||||
if (EFI_ERROR (Status)) {
|
||||
|
Reference in New Issue
Block a user