deleted file mode 100644
@@ -1,760 +0,0 @@
-/** @file
-*
-* Copyright (c) 2011-2014, ARM Limited. All rights reserved.<BR>
-* Copyright (c) 2014 - 2016, AMD Inc. All rights reserved.<BR>
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/**
-
- Derived from:
- ArmPkg/Library/BdsLib/BdsLinuxFdt.c
-
-**/
-
-#include <Library/PcdLib.h>
-#include <libfdt.h>
-
-#include <Library/BdsLib/BdsInternal.h>
-
-#include <Guid/ArmMpCoreInfo.h>
-#include <Protocol/AmdMpCoreInfo.h>
-
-#define LINUX_FDT_MAX_OFFSET (PcdGet64 (PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxFdtMaxOffset))
-
-
-// Additional size that could be used for FDT entries added by the UEFI OS Loader
-// Estimation based on: EDID (300bytes) + bootargs (200bytes) + initrd region (20bytes)
-// + system memory region (20bytes) + mp_core entries (200 bytes)
-#define FDT_ADDITIONAL_ENTRIES_SIZE 0x300
-
-
-EFI_STATUS
-GetSystemMemoryResources (
- IN LIST_ENTRY *ResourceList
- );
-
-VOID
-DebugDumpFdt (
- IN VOID* FdtBlob
- );
-
-#define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1))
-#define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a))))
-#define GET_CELL(p) (p += 4, *((const UINT32 *)(p-4)))
-
-//
-// PMU interrupts per core
-//
-#pragma pack(push, 1)
-typedef struct {
- UINT32 Flag; // 0 == SPI
- UINT32 IntId; // GSIV == IntId+32
- UINT32 Type; // 4 == Level-Sensitive, Active-High
-} PMU_INTERRUPT;
-#pragma pack(pop)
-
-#define PMU_INT_FLAG_SPI 0
-#define PMU_INT_TYPE_HIGH_LEVEL 4
-
-
-typedef struct {
- UINTN Base;
- UINTN Size;
-} FdtRegion;
-
-
-STATIC
-UINTN
-cpu_to_fdtn (UINTN x) {
- if (sizeof (UINTN) == sizeof (UINT32)) {
- return cpu_to_fdt32 (x);
- } else {
- return cpu_to_fdt64 (x);
- }
-}
-
-
-STATIC
-BOOLEAN
-ClusterInRange(
- IN ARM_CORE_INFO *ArmCoreInfoTable,
- IN UINTN ClusterId,
- IN UINTN LowIndex,
- IN UINTN HighIndex
- )
-{
- do {
- if (ClusterId == ArmCoreInfoTable[LowIndex].ClusterId)
- return TRUE;
- } while (++LowIndex <= HighIndex);
-
- return FALSE;
-}
-
-
-STATIC
-UINTN
-NumberOfCoresInCluster(
- IN ARM_CORE_INFO *ArmCoreInfoTable,
- IN UINTN NumberOfEntries,
- IN UINTN ClusterId
- )
-{
- UINTN Index, Cores;
-
- Cores = 0;
- for (Index = 0; Index < NumberOfEntries; ++Index) {
- if (ClusterId == ArmCoreInfoTable[Index].ClusterId)
- ++Cores;
- }
-
- return Cores;
-}
-
-
-STATIC
-UINTN
-NumberOfClustersInTable(
- IN ARM_CORE_INFO *ArmCoreInfoTable,
- IN UINTN NumberOfEntries
- )
-{
- UINTN Index, Cores, Clusters, ClusterId;
-
- Index = 0;
- Clusters = 0;
- Cores = NumberOfEntries;
- while (Cores) {
- ++Clusters;
- ClusterId = ArmCoreInfoTable[Index].ClusterId;
- Cores -= NumberOfCoresInCluster (ArmCoreInfoTable,
- NumberOfEntries,
- ClusterId);
- if (Cores) {
- do {
- ++Index;
- } while (ClusterInRange (ArmCoreInfoTable,
- ArmCoreInfoTable[Index].ClusterId,
- 0, Index-1));
- }
- }
-
- return Clusters;
-}
-
-
-STATIC
-int
-fdt_alloc_phandle(
- IN VOID *blob
- )
-{
-
- int offset, phandle = 0;
-
- for (offset = fdt_next_node(blob, -1, NULL); offset >= 0;
- offset = fdt_next_node(blob, offset, NULL)) {
- phandle = MAX(phandle, fdt_get_phandle(blob, offset));
- }
-
- return phandle + 1;
-}
-
-
-STATIC
-BOOLEAN
-IsLinuxReservedRegion (
- IN EFI_MEMORY_TYPE MemoryType
- )
-{
- switch(MemoryType) {
- case EfiRuntimeServicesCode:
- case EfiRuntimeServicesData:
- case EfiUnusableMemory:
- case EfiACPIReclaimMemory:
- case EfiACPIMemoryNVS:
- case EfiReservedMemoryType:
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-STATIC
-VOID
-SetDeviceStatus (
- IN VOID *fdt,
- IN CHAR8 *device,
- IN BOOLEAN enable
- )
-{
- int node, subnode, rc;
-
- node = fdt_subnode_offset (fdt, 0, "smb");
- if (node >= 0) {
- subnode = fdt_subnode_offset (fdt, node, device);
- if (subnode >= 0) {
- rc = fdt_setprop_string(fdt, subnode, "status", enable ? "ok" : "disabled");
- if (rc) {
- DEBUG((EFI_D_ERROR,"%a: Could not set 'status' property for '%a' node\n",
- __FUNCTION__, device));
- }
- }
- }
-}
-
-#if DO_XGBE
-STATIC
-VOID
-SetMacAddress (
- IN VOID *fdt,
- IN CHAR8 *device,
- IN UINT64 mac_addr
- )
-{
- int node, subnode, rc;
-
- node = fdt_subnode_offset (fdt, 0, "smb");
- if (node >= 0) {
- subnode = fdt_subnode_offset (fdt, node, device);
- if (subnode >= 0) {
- rc = fdt_setprop(fdt, subnode, "mac-address", (void *)&mac_addr, 6);
- if (rc) {
- DEBUG((EFI_D_ERROR,"%a: Could not set 'mac-address' property for '%a' node\n",
- __FUNCTION__, device));
- }
- }
- }
-}
-#endif
-
-VOID
-SetSocIdStatus (
- IN VOID *fdt
- )
-{
- UINT32 SocId;
- BOOLEAN IsRevB1;
-
- SocId = PcdGet32 (PcdSocCpuId);
- IsRevB1 = (SocId & 0xFF0) && (SocId & 0x00F);
-
- SetDeviceStatus (fdt, "sata@e0d00000",
- IsRevB1 && FixedPcdGet8(PcdSata1PortCount) > 0);
- SetDeviceStatus (fdt, "gpio@e0020000", IsRevB1);
- SetDeviceStatus (fdt, "gpio@e0030000", IsRevB1);
- SetDeviceStatus (fdt, "gwdt@e0bb0000", IsRevB1);
-#if DO_KCS
- SetDeviceStatus (fdt, "kcs@e0010000", IsRevB1);
-#else
- SetDeviceStatus (fdt, "kcs@e0010000", FALSE);
-#endif
-}
-
-VOID
-SetXgbeStatus (
- IN VOID *fdt
- )
-{
-#if DO_XGBE
- SetDeviceStatus (fdt, "xgmac@e0700000", TRUE);
- SetDeviceStatus (fdt, "phy@e1240800", TRUE);
- SetDeviceStatus (fdt, "xgmac@e0900000", TRUE);
- SetDeviceStatus (fdt, "phy@e1240c00", TRUE);
-
- SetMacAddress (fdt, "xgmac@e0700000", PcdGet64 (PcdEthMacA));
- SetMacAddress (fdt, "xgmac@e0900000", PcdGet64 (PcdEthMacB));
-#else
- SetDeviceStatus (fdt, "xgmac@e0700000", FALSE);
- SetDeviceStatus (fdt, "phy@e1240800", FALSE);
- SetDeviceStatus (fdt, "xgmac@e0900000", FALSE);
- SetDeviceStatus (fdt, "phy@e1240c00", FALSE);
-#endif
-}
-
-
-/**
-** Relocate the FDT blob to a more appropriate location for the Linux kernel.
-** This function will allocate memory for the relocated FDT blob.
-**
-** @retval EFI_SUCCESS on success.
-** @retval EFI_OUT_OF_RESOURCES or EFI_INVALID_PARAMETER on failure.
-*/
-STATIC
-EFI_STATUS
-RelocateFdt (
- EFI_PHYSICAL_ADDRESS OriginalFdt,
- UINTN OriginalFdtSize,
- EFI_PHYSICAL_ADDRESS *RelocatedFdt,
- UINTN *RelocatedFdtSize,
- EFI_PHYSICAL_ADDRESS *RelocatedFdtAlloc
- )
-{
- EFI_STATUS Status;
- INTN Error;
- UINT64 FdtAlignment;
-
- *RelocatedFdtSize = OriginalFdtSize + FDT_ADDITIONAL_ENTRIES_SIZE;
-
- // If FDT load address needs to be aligned, allocate more space.
- FdtAlignment = PcdGet32 (PcdArmLinuxFdtAlignment);
- if (FdtAlignment != 0) {
- *RelocatedFdtSize += FdtAlignment;
- }
-
- // Try below a watermark address.
- Status = EFI_NOT_FOUND;
- if (PcdGet32 (PcdArmLinuxFdtMaxOffset) != 0) {
- *RelocatedFdt = LINUX_FDT_MAX_OFFSET;
- Status = gBS->AllocatePages (AllocateMaxAddress, EfiBootServicesData,
- EFI_SIZE_TO_PAGES (*RelocatedFdtSize), RelocatedFdt);
- if (EFI_ERROR (Status)) {
- DEBUG ((EFI_D_WARN, "Warning: Failed to load FDT below address 0x%lX (%r). Will try again at a random address anywhere.\n", *RelocatedFdt, Status));
- }
- }
-
- // Try anywhere there is available space.
- if (EFI_ERROR (Status)) {
- Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesData,
- EFI_SIZE_TO_PAGES (*RelocatedFdtSize), RelocatedFdt);
- if (EFI_ERROR (Status)) {
- ASSERT_EFI_ERROR (Status);
- return EFI_OUT_OF_RESOURCES;
- } else {
- DEBUG ((EFI_D_WARN, "WARNING: Loaded FDT at random address 0x%lX.\nWARNING: There is a risk of accidental overwriting by other code/data.\n", *RelocatedFdt));
- }
- }
-
- *RelocatedFdtAlloc = *RelocatedFdt;
- if (FdtAlignment != 0) {
- *RelocatedFdt = ALIGN (*RelocatedFdt, FdtAlignment);
- }
-
- // Load the Original FDT tree into the new region
- Error = fdt_open_into ((VOID*)(UINTN) OriginalFdt,
- (VOID*)(UINTN)(*RelocatedFdt), *RelocatedFdtSize);
- if (Error) {
- DEBUG ((EFI_D_ERROR, "fdt_open_into(): %a\n", fdt_strerror (Error)));
- gBS->FreePages (*RelocatedFdtAlloc, EFI_SIZE_TO_PAGES (*RelocatedFdtSize));
- return EFI_INVALID_PARAMETER;
- }
-
- DEBUG_CODE_BEGIN();
- // DebugDumpFdt ((VOID*)(UINTN)(*RelocatedFdt));
- DEBUG_CODE_END();
-
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-AmdStyxPrepareFdt (
- IN CONST CHAR8* CommandLineArguments,
- IN EFI_PHYSICAL_ADDRESS InitrdImage,
- IN UINTN InitrdImageSize,
- IN OUT EFI_PHYSICAL_ADDRESS *FdtBlobBase,
- IN OUT UINTN *FdtBlobSize
- )
-{
- EFI_STATUS Status;
- EFI_PHYSICAL_ADDRESS NewFdtBlobBase;
- EFI_PHYSICAL_ADDRESS NewFdtBlobAllocation;
- UINTN NewFdtBlobSize;
- VOID *fdt;
- int err;
- int node;
- int cpu_node;
- int lenp;
- CONST VOID *BootArg;
- EFI_PHYSICAL_ADDRESS InitrdImageStart;
- EFI_PHYSICAL_ADDRESS InitrdImageEnd;
- FdtRegion Region;
- UINTN Index;
- CHAR8 Name[10];
- LIST_ENTRY ResourceList;
- BDS_SYSTEM_MEMORY_RESOURCE *Resource;
- ARM_CORE_INFO *ArmCoreInfoTable;
- UINTN ArmCoreCount;
- UINT32 PrimaryClusterId;
- UINT32 PrimaryCoreId;
- UINTN MemoryMapSize;
- EFI_MEMORY_DESCRIPTOR *MemoryMap;
- EFI_MEMORY_DESCRIPTOR *MemoryMapPtr;
- UINTN MapKey;
- UINTN DescriptorSize;
- UINT32 DescriptorVersion;
- UINTN Pages;
- UINTN OriginalFdtSize;
- int map_node;
- int cluster_node;
- int pmu_node;
- PMU_INTERRUPT PmuInt;
- int phandle[NUM_CORES];
- UINT32 ClusterIndex, CoreIndex;
- UINT32 ClusterCount, CoresInCluster;
- UINT32 ClusterId;
- UINTN MpId, MbAddr;
- AMD_MP_CORE_INFO_PROTOCOL *AmdMpCoreInfoProtocol;
-
- //
- // Sanity checks on the original FDT blob.
- //
- err = fdt_check_header ((VOID*)(UINTN)(*FdtBlobBase));
- if (err != 0) {
- Print (L"ERROR: Device Tree header not valid (err:%d)\n", err);
- return EFI_INVALID_PARAMETER;
- }
-
- // The original FDT blob might have been loaded partially.
- // Check that it is not the case.
- OriginalFdtSize = (UINTN)fdt_totalsize ((VOID*)(UINTN)(*FdtBlobBase));
- if (OriginalFdtSize > *FdtBlobSize) {
- Print (L"ERROR: Incomplete FDT. Only %d/%d bytes have been loaded.\n",
- *FdtBlobSize, OriginalFdtSize);
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Relocate the FDT to its final location.
- //
- NewFdtBlobAllocation = 0;
- Status = RelocateFdt (*FdtBlobBase, OriginalFdtSize,
- &NewFdtBlobBase, &NewFdtBlobSize, &NewFdtBlobAllocation);
- if (EFI_ERROR (Status)) {
- goto FAIL_RELOCATE_FDT;
- }
- fdt = (VOID*)(UINTN)NewFdtBlobBase;
-
- node = fdt_subnode_offset (fdt, 0, "chosen");
- if (node < 0) {
- // The 'chosen' node does not exist, create it
- node = fdt_add_subnode(fdt, 0, "chosen");
- if (node < 0) {
- DEBUG((EFI_D_ERROR,"Error on finding 'chosen' node\n"));
- Status = EFI_INVALID_PARAMETER;
- goto FAIL_COMPLETE_FDT;
- }
- }
-
- DEBUG_CODE_BEGIN();
- BootArg = fdt_getprop(fdt, node, "bootargs", &lenp);
- if (BootArg != NULL) {
- DEBUG((EFI_D_ERROR,"BootArg: %a\n",BootArg));
- }
- DEBUG_CODE_END();
-
- //
- // Set Linux CmdLine
- //
- if ((CommandLineArguments != NULL) && (AsciiStrLen (CommandLineArguments) > 0)) {
- err = fdt_setprop(fdt, node, "bootargs", CommandLineArguments, AsciiStrSize(CommandLineArguments));
- if (err) {
- DEBUG((EFI_D_ERROR,"Fail to set new 'bootarg' (err:%d)\n",err));
- }
- }
-
- //
- // Set Linux Initrd
- //
- if (InitrdImageSize != 0) {
- InitrdImageStart = cpu_to_fdt64 (InitrdImage);
- err = fdt_setprop(fdt, node, "linux,initrd-start", &InitrdImageStart, sizeof(EFI_PHYSICAL_ADDRESS));
- if (err) {
- DEBUG((EFI_D_ERROR,"Fail to set new 'linux,initrd-start' (err:%d)\n",err));
- }
- InitrdImageEnd = cpu_to_fdt64 (InitrdImage + InitrdImageSize);
- err = fdt_setprop(fdt, node, "linux,initrd-end", &InitrdImageEnd, sizeof(EFI_PHYSICAL_ADDRESS));
- if (err) {
- DEBUG((EFI_D_ERROR,"Fail to set new 'linux,initrd-start' (err:%d)\n",err));
- }
- }
-
- //
- // Set Physical memory setup if does not exist
- //
- node = fdt_subnode_offset(fdt, 0, "memory");
- if (node < 0) {
- // The 'memory' node does not exist, create it
- node = fdt_add_subnode(fdt, 0, "memory");
- if (node >= 0) {
- fdt_setprop_string(fdt, node, "name", "memory");
- fdt_setprop_string(fdt, node, "device_type", "memory");
-
- GetSystemMemoryResources (&ResourceList);
- Resource = (BDS_SYSTEM_MEMORY_RESOURCE*)ResourceList.ForwardLink;
-
- Region.Base = cpu_to_fdtn ((UINTN)Resource->PhysicalStart);
- Region.Size = cpu_to_fdtn ((UINTN)Resource->ResourceLength);
-
- err = fdt_setprop(fdt, node, "reg", &Region, sizeof(Region));
- if (err) {
- DEBUG((EFI_D_ERROR,"Fail to set new 'memory region' (err:%d)\n",err));
- }
- }
- }
-
- //
- // Add the memory regions reserved by the UEFI Firmware
- //
-
- // Retrieve the UEFI Memory Map
- MemoryMap = NULL;
- MemoryMapSize = 0;
- Status = gBS->GetMemoryMap (&MemoryMapSize, MemoryMap, &MapKey, &DescriptorSize, &DescriptorVersion);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- // The UEFI specification advises to allocate more memory for the MemoryMap buffer between successive
- // calls to GetMemoryMap(), since allocation of the new buffer may potentially increase memory map size.
- Pages = EFI_SIZE_TO_PAGES (MemoryMapSize) + 1;
- MemoryMap = AllocatePages (Pages);
- if (MemoryMap == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto FAIL_COMPLETE_FDT;
- }
- Status = gBS->GetMemoryMap (&MemoryMapSize, MemoryMap, &MapKey, &DescriptorSize, &DescriptorVersion);
- }
-
- // Go through the list and add the reserved region to the Device Tree
- if (!EFI_ERROR(Status)) {
- MemoryMapPtr = MemoryMap;
- for (Index = 0; Index < (MemoryMapSize / DescriptorSize); Index++) {
- if (IsLinuxReservedRegion ((EFI_MEMORY_TYPE)MemoryMapPtr->Type)) {
- DEBUG((DEBUG_VERBOSE, "Reserved region of type %d [0x%lX, 0x%lX]\n",
- MemoryMapPtr->Type,
- (UINTN)MemoryMapPtr->PhysicalStart,
- (UINTN)(MemoryMapPtr->PhysicalStart + MemoryMapPtr->NumberOfPages * EFI_PAGE_SIZE)));
- err = fdt_add_mem_rsv(fdt, MemoryMapPtr->PhysicalStart, MemoryMapPtr->NumberOfPages * EFI_PAGE_SIZE);
- if (err != 0) {
- Print(L"Warning: Fail to add 'memreserve' (err:%d)\n", err);
- }
- }
- MemoryMapPtr = (EFI_MEMORY_DESCRIPTOR*)((UINTN)MemoryMapPtr + DescriptorSize);
- }
- }
-
- //
- // Setup Arm Mpcore Info if it is a multi-core or multi-cluster platforms.
- //
- // For 'cpus' and 'cpu' device tree nodes bindings, refer to this file
- // in the kernel documentation:
- // Documentation/devicetree/bindings/arm/cpus.txt
- //
- Status = gBS->LocateProtocol (
- &gAmdMpCoreInfoProtocolGuid,
- NULL,
- (VOID **)&AmdMpCoreInfoProtocol
- );
- ASSERT_EFI_ERROR (Status);
-
- // Get pointer to ARM core info table
- ArmCoreInfoTable = AmdMpCoreInfoProtocol->GetArmCoreInfoTable (&ArmCoreCount);
- ASSERT (ArmCoreInfoTable != NULL);
- ASSERT (ArmCoreCount <= NUM_CORES);
-
- // Get Id from primary CPU
- MpId = (UINTN) ArmReadMpidr ();
- PrimaryClusterId = GET_CLUSTER_ID((UINT32) MpId);
- PrimaryCoreId = GET_CORE_ID((UINT32) MpId);
-
- // Remove existing 'pmu' node and create a new one
- pmu_node = fdt_subnode_offset (fdt, 0, "pmu");
- if (pmu_node >= 0) {
- fdt_del_node (fdt, pmu_node);
- }
- pmu_node = fdt_add_subnode(fdt, 0, "pmu");
- if (pmu_node >= 0) {
- // append PMU interrupts
- for (Index = 0; Index < ArmCoreCount; Index++) {
- MpId = (UINTN) GET_MPID (ArmCoreInfoTable[Index].ClusterId,
- ArmCoreInfoTable[Index].CoreId);
-
- Status = AmdMpCoreInfoProtocol->GetPmuSpiFromMpId (MpId, &PmuInt.IntId);
- if (EFI_ERROR (Status)) {
- DEBUG ((EFI_D_ERROR, "FDT: Error getting PMU interrupt for MpId '0x%x'\n", MpId));
- goto FAIL_COMPLETE_FDT;
- }
-
- PmuInt.Flag = cpu_to_fdt32(PMU_INT_FLAG_SPI);
- PmuInt.IntId = cpu_to_fdt32(PmuInt.IntId);
- PmuInt.Type = cpu_to_fdt32(PMU_INT_TYPE_HIGH_LEVEL);
- fdt_appendprop(fdt, pmu_node, "interrupts", &PmuInt, sizeof(PmuInt));
- }
- fdt_setprop_string(fdt, pmu_node, "compatible", "arm,armv8-pmuv3");
- } else {
- DEBUG((EFI_D_ERROR,"FDT: Error creating 'pmu' node\n"));
- Status = EFI_INVALID_PARAMETER;
- goto FAIL_COMPLETE_FDT;
- }
-
- // Remove existing 'psci' node if feature not supported
- node = fdt_subnode_offset (fdt, 0, "psci");
- if (node >= 0) {
- if (!FixedPcdGetBool (PcdPsciOsSupport)) {
- fdt_del_node (fdt, node);
- }
- } else if (FixedPcdGetBool (PcdPsciOsSupport) &&
- FixedPcdGetBool (PcdTrustedFWSupport)) {
- // Add 'psci' node if not present
- node = fdt_add_subnode(fdt, 0, "psci");
- if (node >= 0) {
- fdt_setprop_string(fdt, node, "compatible", "arm,psci-0.2");
- fdt_appendprop_string(fdt, node, "compatible", "arm,psci");
- fdt_setprop_string(fdt, node, "method", "smc");
- } else {
- DEBUG((EFI_D_ERROR,"FDT: Error creating 'psci' node\n"));
- Status = EFI_INVALID_PARAMETER;
- goto FAIL_COMPLETE_FDT;
- }
- }
-
- // Remove existing 'cpus' node and create a new one
- node = fdt_subnode_offset (fdt, 0, "cpus");
- if (node >= 0) {
- fdt_del_node (fdt, node);
- }
- node = fdt_add_subnode(fdt, 0, "cpus");
- if (node >= 0) {
- // Configure the 'cpus' node
- fdt_setprop_string(fdt, node, "name", "cpus");
- fdt_setprop_cell (fdt, node, "#address-cells", sizeof (UINTN) / 4);
- fdt_setprop_cell(fdt, node, "#size-cells", 0);
- } else {
- DEBUG((EFI_D_ERROR,"FDT: Error creating 'cpus' node\n"));
- Status = EFI_INVALID_PARAMETER;
- goto FAIL_COMPLETE_FDT;
- }
-
- //
- // Walk the processor table in reverse order for proper listing in FDT
- //
- Index = ArmCoreCount;
- while (Index--) {
- // Create 'cpu' node
- AsciiSPrint (Name, sizeof(Name), "CPU%d", Index);
- cpu_node = fdt_add_subnode (fdt, node, Name);
- if (cpu_node < 0) {
- DEBUG ((EFI_D_ERROR, "FDT: Error on creating '%a' node\n", Name));
- Status = EFI_INVALID_PARAMETER;
- goto FAIL_COMPLETE_FDT;
- }
- phandle[Index] = fdt_alloc_phandle(fdt);
- fdt_setprop_cell (fdt, cpu_node, "phandle", phandle[Index]);
- fdt_setprop_cell (fdt, cpu_node, "linux,phandle", phandle[Index]);
-
- if (FixedPcdGetBool (PcdPsciOsSupport) &&
- FixedPcdGetBool (PcdTrustedFWSupport)) {
- fdt_setprop_string(fdt, cpu_node, "enable-method", "psci");
- } else {
- fdt_setprop_string(fdt, cpu_node, "enable-method", "spin-table");
- MbAddr = ArmCoreInfoTable[Index].MailboxSetAddress;
- MbAddr = cpu_to_fdtn (MbAddr);
- fdt_setprop (fdt, cpu_node, "cpu-release-addr", &MbAddr, sizeof (MbAddr));
- }
- MpId = (UINTN) GET_MPID (ArmCoreInfoTable[Index].ClusterId,
- ArmCoreInfoTable[Index].CoreId);
- MpId = cpu_to_fdtn (MpId);
- fdt_setprop (fdt, cpu_node, "reg", &MpId, sizeof (MpId));
- fdt_setprop_string(fdt, cpu_node, "compatible", "arm,armv8");
- fdt_setprop_string (fdt, cpu_node, "device_type", "cpu");
-
- // If it is not the primary core than the cpu should be disabled
- if (((ArmCoreInfoTable[Index].ClusterId != PrimaryClusterId) ||
- (ArmCoreInfoTable[Index].CoreId != PrimaryCoreId))) {
- fdt_setprop_string(fdt, cpu_node, "status", "disabled");
- }
- }
-
- // Remove existing 'cpu-map' node and create a new one
- map_node = fdt_subnode_offset (fdt, node, "cpu-map");
- if (map_node >= 0) {
- fdt_del_node (fdt, map_node);
- }
- map_node = fdt_add_subnode(fdt, node, "cpu-map");
- if (map_node >= 0) {
- ClusterIndex = ArmCoreCount - 1;
- ClusterCount = NumberOfClustersInTable (ArmCoreInfoTable,
- ArmCoreCount);
- while (ClusterCount--) {
- // Create 'cluster' node
- AsciiSPrint (Name, sizeof(Name), "cluster%d", ClusterCount);
- cluster_node = fdt_add_subnode (fdt, map_node, Name);
- if (cluster_node < 0) {
- DEBUG ((EFI_D_ERROR, "FDT: Error creating '%a' node\n", Name));
- Status = EFI_INVALID_PARAMETER;
- goto FAIL_COMPLETE_FDT;
- }
-
- ClusterId = ArmCoreInfoTable[ClusterIndex].ClusterId;
- CoreIndex = ClusterIndex;
- CoresInCluster = NumberOfCoresInCluster (ArmCoreInfoTable,
- ArmCoreCount,
- ClusterId);
- while (CoresInCluster--) {
- // Create 'core' node
- AsciiSPrint (Name, sizeof(Name), "core%d", CoresInCluster);
- cpu_node = fdt_add_subnode (fdt, cluster_node, Name);
- if (cpu_node < 0) {
- DEBUG ((EFI_D_ERROR, "FDT: Error creating '%a' node\n", Name));
- Status = EFI_INVALID_PARAMETER;
- goto FAIL_COMPLETE_FDT;
- }
- fdt_setprop_cell (fdt, cpu_node, "cpu", phandle[CoreIndex]);
-
- // iterate to next core in cluster
- if (CoresInCluster) {
- do {
- --CoreIndex;
- } while (ClusterId != ArmCoreInfoTable[CoreIndex].ClusterId);
- }
- }
-
- // iterate to next cluster
- if (ClusterCount) {
- do {
- --ClusterIndex;
- } while (ClusterInRange (ArmCoreInfoTable,
- ArmCoreInfoTable[ClusterIndex].ClusterId,
- ClusterIndex + 1,
- ArmCoreCount - 1));
- }
- }
- } else {
- DEBUG((EFI_D_ERROR,"FDT: Error creating 'cpu-map' node\n"));
- Status = EFI_INVALID_PARAMETER;
- goto FAIL_COMPLETE_FDT;
- }
-
- SetSocIdStatus (fdt);
- SetXgbeStatus (fdt);
-
- DEBUG_CODE_BEGIN();
- // DebugDumpFdt (fdt);
- DEBUG_CODE_END();
-
- // If we succeeded to generate the new Device Tree then free the old Device Tree
- gBS->FreePages (*FdtBlobBase, EFI_SIZE_TO_PAGES (*FdtBlobSize));
-
- // Update the real size of the Device Tree
- fdt_pack ((VOID*)(UINTN)(NewFdtBlobBase));
-
- *FdtBlobBase = NewFdtBlobBase;
- *FdtBlobSize = (UINTN)fdt_totalsize ((VOID*)(UINTN)(NewFdtBlobBase));
- return EFI_SUCCESS;
-
-FAIL_COMPLETE_FDT:
- gBS->FreePages (NewFdtBlobAllocation, EFI_SIZE_TO_PAGES (NewFdtBlobSize));
-
-FAIL_RELOCATE_FDT:
- *FdtBlobSize = (UINTN)fdt_totalsize ((VOID*)(UINTN)(*FdtBlobBase));
- // Return success even if we failed to update the FDT blob.
- // The original one is still valid.
- return EFI_SUCCESS;
-}
-
deleted file mode 100644
@@ -1,274 +0,0 @@
-/** @file
-
- Copyright (c) 2014 - 2016, AMD Inc. All rights reserved.<BR>
-
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "FdtDxe.h"
-
-extern EFI_BOOT_SERVICES *gBS;
-
-EFI_EVENT mFdtReadyToBootEvent;
-
-VOID
-EFIAPI
-FdtReadyToBoot (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-EFI_STATUS
-EFIAPI
-FdtOverrideDevicePath(
- IN CHAR16 *FdtFileName,
- OUT EFI_DEVICE_PATH **FdtDevicePath
- );
-
-
-/**
- *---------------------------------------------------------------------------------------
- *
- * FdtDxeEntryPoint
- *
- * Description:
- * Entry point of the FDT Runtime Driver.
- *
- * Control flow:
- * Configure reserved regions.
- *
- * Parameters:
- * @param[in] ImageHandle The firmware allocate handle for the
- * EFI image.
- * @param[in] *SystemTable Pointer to the EFI System Table.
- *
- * @return EFI_STATUS
- *
- *------------------------------------------------------------------------------------
- **/
-EFI_STATUS
-EFIAPI
-FdtDxeEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_ERROR, "FdtDxe Loaded\n"));
-
- //
- // Ready-To-Boot callback
- //
- Status = EfiCreateEventReadyToBootEx(
- TPL_CALLBACK,
- FdtReadyToBoot,
- NULL,
- &mFdtReadyToBootEvent
- );
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
-
-/**
- *---------------------------------------------------------------------------------------
- *
- * FdtReadyToBoot
- *
- * Description:
- * Ready-2-Boot Event Callback for EFI_EVENT_SIGNAL_READY_TO_BOOT.
- *
- * Control flow:
- * 1. Read FDT blob
- * 2. Edit FDT table
- * 3. Submit FDT to EFI system table
- *
- * Parameters:
- * @param[in] Event EFI_EVENT notification.
- * @param[in] *Context Pointer to the Event Context.
- *
- * @return VOID
- *
- *---------------------------------------------------------------------------------------
- **/
-VOID
-EFIAPI
-FdtReadyToBoot (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
- UINTN Index;
- EFI_STATUS Status;
- UINT32 AuthenticationStatus;
- EFI_GUID *FdtGuid = FixedPcdGetPtr(PcdStyxFdt);
- UINT8 *FdtBlobBase = NULL;
- UINTN FdtBlobSize = 0;
- EFI_DEVICE_PATH *FdtDevicePath;
-
- // Search for FDT blob in EFI partition
- Status = FdtOverrideDevicePath(L"fdt.dtb", &FdtDevicePath);
- if (!EFI_ERROR (Status)) {
- DEBUG ((EFI_D_ERROR, "%a: Loading Override FDT blob...\n", __FUNCTION__));
-
- FdtBlobBase = (UINT8 *)(UINTN)LINUX_FDT_MAX_OFFSET;
- Status = BdsLoadImage (FdtDevicePath,
- AllocateMaxAddress,
- (EFI_PHYSICAL_ADDRESS *)&FdtBlobBase,
- &FdtBlobSize);
- if (!EFI_ERROR (Status) && FdtBlobBase && FdtBlobSize)
- goto LOAD_FDT_BLOB;
- else
- goto LOAD_FDT_ERROR;
- }
-
- DEBUG ((EFI_D_ERROR, "%a: Loading Embedded FDT blob...\n", __FUNCTION__));
- HandleBuffer = NULL;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- ASSERT_EFI_ERROR (Status);
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &FvProtocol
- );
- if (!EFI_ERROR (Status)) {
- Status = FvProtocol->ReadSection (
- FvProtocol,
- FdtGuid,
- EFI_SECTION_RAW,
- 0,
- (VOID **)&FdtBlobBase,
- &FdtBlobSize,
- &AuthenticationStatus
- );
- if (!EFI_ERROR (Status) && FdtBlobBase && FdtBlobSize)
- goto LOAD_FDT_BLOB;
- }
- }
-
-LOAD_FDT_ERROR:
- DEBUG ((EFI_D_ERROR, "%a: Error loading FDT blob!\n", __FUNCTION__));
- goto LOAD_FDT_DONE;
-
-LOAD_FDT_BLOB:
- Status = AmdStyxPrepareFdt(NULL, 0, 0, (EFI_PHYSICAL_ADDRESS *)&FdtBlobBase, &FdtBlobSize);
- ASSERT_EFI_ERROR (Status);
-
- // Install the FDT blob into EFI system configuration table
- Status = gBS->InstallConfigurationTable (&gFdtTableGuid, (VOID *)FdtBlobBase);
- ASSERT_EFI_ERROR (Status);
- DEBUG ((EFI_D_ERROR, "%a: FDT ready!\n", __FUNCTION__));
-
-LOAD_FDT_DONE:
- gBS->CloseEvent (mFdtReadyToBootEvent);
- return;
-}
-
-/**
-*---------------------------------------------------------------------------------------
-*
-* FdtOverrideDevicePath
-*
-* Description:
-* Looks for a user-provided FDT blob to override the default file built with the UEFI image.
-*
-* Parameters:
-* @param[in] FdtFileName Name of the FDT blob located in the EFI partition.
-* @param[out] FdtDevicePath EFI Device Path of the FDT blob.
-*
-* @return EFI_SUCCESS The function completed successfully.
-* @return EFI_NOT_FOUND The protocol could not be located.
-* @return EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
-*
-*---------------------------------------------------------------------------------------
-**/
-EFI_STATUS
-EFIAPI
-FdtOverrideDevicePath(
- IN CHAR16 *FdtFileName,
- OUT EFI_DEVICE_PATH **FdtDevicePath
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevPathProtocol;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
- UINTN Index;
- EFI_STATUS Status;
- CHAR16 *DevPathText;
- EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *VolProtocol;
- EFI_FILE_PROTOCOL *FileProtocol;
- EFI_FILE_PROTOCOL *FileHandle;
- CHAR16 FilePathText[120];
-
- HandleBuffer = NULL;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleFileSystemProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer);
- if (EFI_ERROR (Status))
- return Status;
-
- for (Index = 0; Index < HandleCount; Index++) {
- DevPathProtocol = NULL;
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &DevPathProtocol);
-
- if (!EFI_ERROR (Status)) {
- VolProtocol = NULL;
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiSimpleFileSystemProtocolGuid,
- (VOID **) &VolProtocol);
-
- if (!EFI_ERROR (Status)) {
- FileProtocol = NULL;
- Status = VolProtocol->OpenVolume(VolProtocol, &FileProtocol);
-
- if (!EFI_ERROR (Status)) {
- FileHandle = NULL;
- Status = FileProtocol->Open(FileProtocol,
- &FileHandle,
- FdtFileName,
- EFI_FILE_MODE_READ,
- 0);
-
- if (!EFI_ERROR (Status)) {
- FileProtocol->Close(FileHandle);
- DevPathText = ConvertDevicePathToText(DevPathProtocol, TRUE, FALSE);
- StrCpy(FilePathText, DevPathText);
- StrCat(FilePathText, L"/");
- StrCat(FilePathText, FdtFileName);
- *FdtDevicePath = ConvertTextToDevicePath (FilePathText);
- return EFI_SUCCESS;
- }
- }
- }
- }
- }
-
- return Status;
-}
-
deleted file mode 100644
@@ -1,54 +0,0 @@
-/** @file
-
- Copyright (c) 2014 - 2016, AMD Inc. All rights reserved.<BR>
-
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __FDT_DXE__H_
-#define __FDT_DXE__H_
-
-#include <Uefi.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-
-#include <Library/BaseLib.h>
-#include <Library/BdsLib.h>
-#include <Library/PcdLib.h>
-#include <Library/DebugLib.h>
-#include <Library/DevicePathLib.h>
-#include <Guid/DxeServices.h>
-#include <Library/DxeServicesTableLib.h>
-
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/SimpleFileSystem.h>
-#include <Protocol/LoadFile.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/DevicePathFromText.h>
-
-#define LINUX_FDT_MAX_OFFSET (PcdGet64 (PcdSystemMemoryBase) + PcdGet32(PcdArmLinuxFdtMaxOffset))
-
-VOID
-EFIAPI
-AmdStyxParkSecondaryCores(
- VOID
- );
-
-EFI_STATUS
-AmdStyxPrepareFdt (
- IN CONST CHAR8* CommandLineArguments,
- IN EFI_PHYSICAL_ADDRESS InitrdImage,
- IN UINTN InitrdImageSize,
- IN OUT EFI_PHYSICAL_ADDRESS *FdtBlobBase,
- IN OUT UINTN *FdtBlobSize
- );
-
-
-#endif // __FDT_DXE__H_
deleted file mode 100644
@@ -1,76 +0,0 @@
-#/* @file
-#
-# Copyright (c) 2014 - 2016, AMD Inc. All rights reserved.<BR>
-#
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#*/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = FdtDxe
- FILE_GUID = 17f50855-6484-4b56-814b-1a88702d88e1
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- ENTRY_POINT = FdtDxeEntryPoint
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = AARCH64
-#
-#
-
-[Sources.common]
- FdtDxe.c
- BdsLinuxFdt.c
- LinuxLoaderHelper.c
-
-[Packages]
- ArmPkg/ArmPkg.dec
- EmbeddedPkg/EmbeddedPkg.dec
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- AmdModulePkg/AmdModulePkg.dec
- OpenPlatformPkg/Platforms/AMD/Styx/AmdStyx.dec
- ShellPkg/ShellPkg.dec
-
-[LibraryClasses]
- UefiDriverEntryPoint
- DxeServicesTableLib
- BdsLib
- FdtLib
- PcdLib
- DevicePathLib
-
-[Guids]
- gEfiEventReadyToBootGuid ## CONSUMED
- gEfiDxeServicesTableGuid ## CONSUMED
- gFdtTableGuid ## CONSUMED
-
-[Protocols]
- gEfiFirmwareVolume2ProtocolGuid ## CONSUMED
- gAmdMpCoreInfoProtocolGuid ## CONSUMED
-
-[Pcd]
- gAmdStyxTokenSpaceGuid.PcdStyxFdt
- gAmdStyxTokenSpaceGuid.PcdSocCpuId
- gAmdStyxTokenSpaceGuid.PcdEthMacA
- gAmdStyxTokenSpaceGuid.PcdEthMacB
- gArmTokenSpaceGuid.PcdSystemMemoryBase
-
-[FixedPcd]
- gArmTokenSpaceGuid.PcdArmLinuxFdtMaxOffset
- gArmTokenSpaceGuid.PcdArmLinuxFdtAlignment
- gAmdStyxTokenSpaceGuid.PcdPsciOsSupport
- gAmdStyxTokenSpaceGuid.PcdTrustedFWSupport
- gAmdStyxTokenSpaceGuid.PcdSata1PortCount
-
-[Depex]
- TRUE
deleted file mode 100644
@@ -1,173 +0,0 @@
-/** @file
-*
-* Copyright (c) 2011-2015, ARM Limited. All rights reserved.
-* Copyright (c) 2015 - 2016, AMD Inc. All rights reserved.<BR>
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/**
-
- Derived from:
- ArmPkg/Library/BdsLib/LinuxLoader.h
-
-**/
-
-#ifndef __LINUX_LOADER_H__
-#define __LINUX_LOADER_H__
-
-#include <Library/BdsLib.h>
-#include <Library/DebugLib.h>
-#include <Library/HiiLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/PerformanceLib.h>
-#include <Library/PrintLib.h>
-#include <Library/ShellLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-
-#include <Protocol/EfiShellParameters.h>
-#include <Protocol/EfiShell.h>
-
-#include <libfdt.h>
-
-//
-// Definitions
-//
-
-#define MAX_MSG_LEN 80
-
-#define LINUX_UIMAGE_SIGNATURE 0x56190527
-#define LINUX_KERNEL_MAX_OFFSET (SystemMemoryBase + PcdGet32(PcdArmLinuxKernelMaxOffset))
-#define LINUX_ATAG_MAX_OFFSET (SystemMemoryBase + PcdGet32(PcdArmLinuxAtagMaxOffset))
-#define LINUX_FDT_MAX_OFFSET (SystemMemoryBase + PcdGet32(PcdArmLinuxFdtMaxOffset))
-
-#define ARM_FDT_MACHINE_TYPE 0xFFFFFFFF
-
-// Additional size that could be used for FDT entries added by the UEFI OS Loader
-// Estimation based on: EDID (300bytes) + bootargs (200bytes) + initrd region (20bytes)
-// + system memory region (20bytes) + mp_core entries (200 bytes)
-#define FDT_ADDITIONAL_ENTRIES_SIZE 0x300
-
-//
-// Global variables
-//
-extern CONST EFI_GUID mLinuxLoaderHiiGuid;
-extern EFI_HANDLE mLinuxLoaderHiiHandle;
-
-//
-// Local Types
-//
-typedef struct _SYSTEM_MEMORY_RESOURCE {
- LIST_ENTRY Link; // This attribute must be the first entry of this structure (to avoid pointer computation)
- EFI_PHYSICAL_ADDRESS PhysicalStart;
- UINT64 ResourceLength;
-} SYSTEM_MEMORY_RESOURCE;
-
-typedef VOID (*LINUX_KERNEL)(UINT32 Zero, UINT32 Arch, UINTN ParametersBase);
-
-//
-// Functions
-//
-EFI_STATUS
-PrintHii (
- IN CONST CHAR8 *Language OPTIONAL,
- IN CONST EFI_STRING_ID HiiFormatStringId,
- ...
- );
-
-VOID
-PrintHelp (
- IN CONST CHAR8 *Language OPTIONAL
- );
-
-EFI_STATUS
-ProcessShellParameters (
- OUT CHAR16 **KernelPath,
- OUT CHAR16 **FdtPath,
- OUT CHAR16 **InitrdPath,
- OUT CHAR16 **LinuxCommandLine,
- OUT UINTN *AtagMachineType
- );
-
-EFI_STATUS
-ProcessAppCommandLine (
- OUT CHAR16 **KernelTextDevicePath,
- OUT CHAR16 **FdtTextDevicePath,
- OUT CHAR16 **InitrdTextDevicePath,
- OUT CHAR16 **LinuxCommandLine,
- OUT UINTN *AtagMachineType
- );
-
-VOID
-PrintPerformance (
- VOID
- );
-
-EFI_STATUS
-GetSystemMemoryResources (
- IN LIST_ENTRY *ResourceList
- );
-
-EFI_STATUS
-PrepareFdt (
- IN EFI_PHYSICAL_ADDRESS SystemMemoryBase,
- IN CONST CHAR8* CommandLineArguments,
- IN EFI_PHYSICAL_ADDRESS InitrdImage,
- IN UINTN InitrdImageSize,
- IN OUT EFI_PHYSICAL_ADDRESS *FdtBlobBase,
- IN OUT UINTN *FdtBlobSize
- );
-
-/**
- Start a Linux kernel from a Device Path
-
- @param SystemMemoryBase Base of the system memory
- @param LinuxKernel Device Path to the Linux Kernel
- @param Parameters Linux kernel arguments
- @param Fdt Device Path to the Flat Device Tree
- @param MachineType ARM machine type value
-
- @retval EFI_SUCCESS All drivers have been connected
- @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found
- @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results.
- @retval RETURN_UNSUPPORTED ATAG is not support by this architecture
-
-**/
-EFI_STATUS
-BootLinuxAtag (
- IN EFI_PHYSICAL_ADDRESS SystemMemoryBase,
- IN EFI_DEVICE_PATH_PROTOCOL* LinuxKernelDevicePath,
- IN EFI_DEVICE_PATH_PROTOCOL* InitrdDevicePath,
- IN CONST CHAR8* CommandLineArguments,
- IN UINTN MachineType
- );
-
-/**
- Start a Linux kernel from a Device Path
-
- @param[in] LinuxKernelDevicePath Device Path to the Linux Kernel
- @param[in] InitrdDevicePath Device Path to the Initrd
- @param[in] Arguments Linux kernel arguments
-
- @retval EFI_SUCCESS All drivers have been connected
- @retval EFI_NOT_FOUND The Linux kernel Device Path has not been found
- @retval EFI_OUT_OF_RESOURCES There is not enough resource memory to store the matching results.
-
-**/
-EFI_STATUS
-BootLinuxFdt (
- IN EFI_PHYSICAL_ADDRESS SystemMemoryBase,
- IN EFI_DEVICE_PATH_PROTOCOL* LinuxKernelDevicePath,
- IN EFI_DEVICE_PATH_PROTOCOL* InitrdDevicePath,
- IN EFI_DEVICE_PATH_PROTOCOL* FdtDevicePath,
- IN CONST CHAR8* Arguments
- );
-
-#endif /* __LINUX_LOADER_H__ */
deleted file mode 100644
@@ -1,200 +0,0 @@
-/** @file
-*
-* Copyright (c) 2011-2015, ARM Limited. All rights reserved.
-* Copyright (c) 2014 - 2016, AMD Inc. All rights reserved.
-*
-* This program and the accompanying materials
-* are licensed and made available under the terms and conditions of the BSD License
-* which accompanies this distribution. The full text of the license may be found at
-* http://opensource.org/licenses/bsd-license.php
-*
-* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-/**
-
- Derived from:
- ArmPkg/Application/LinuxLoader/LinuxLoaderHelper.c
-
-**/
-
-
-#include <PiDxe.h>
-#include <Library/HobLib.h>
-#include <Library/TimerLib.h>
-#include <Library/SerialPortLib.h>
-
-#include "LinuxLoader.h"
-
-STATIC CONST CHAR8 *mTokenList[] = {
- /*"SEC",*/
- "PEI",
- "DXE",
- "BDS",
- NULL
-};
-
-VOID
-PrintPerformance (
- VOID
- )
-{
- UINTN Key;
- CONST VOID *Handle;
- CONST CHAR8 *Token, *Module;
- UINT64 Start, Stop, TimeStamp;
- UINT64 Delta, TicksPerSecond, Milliseconds;
- UINTN Index;
- CHAR8 Buffer[100];
- UINTN CharCount;
- BOOLEAN CountUp;
-
- TicksPerSecond = GetPerformanceCounterProperties (&Start, &Stop);
- if (Start < Stop) {
- CountUp = TRUE;
- } else {
- CountUp = FALSE;
- }
-
- TimeStamp = 0;
- Key = 0;
- do {
- Key = GetPerformanceMeasurement (Key, (CONST VOID **)&Handle, &Token, &Module, &Start, &Stop);
- if (Key != 0) {
- for (Index = 0; mTokenList[Index] != NULL; Index++) {
- if (AsciiStriCmp (mTokenList[Index], Token) == 0) {
- Delta = CountUp ? (Stop - Start) : (Start - Stop);
- TimeStamp += Delta;
- Milliseconds = DivU64x64Remainder (MultU64x32 (Delta, 1000), TicksPerSecond, NULL);
- CharCount = AsciiSPrint (Buffer, sizeof (Buffer), "%6a %6ld ms\n", Token, Milliseconds);
- SerialPortWrite ((UINT8 *) Buffer, CharCount);
- break;
- }
- }
- }
- } while (Key != 0);
-
- CharCount = AsciiSPrint (Buffer, sizeof (Buffer), "Total Time = %ld ms\n\n",
- DivU64x64Remainder (MultU64x32 (TimeStamp, 1000), TicksPerSecond, NULL));
- SerialPortWrite ((UINT8 *) Buffer, CharCount);
-}
-
-STATIC
-EFI_STATUS
-InsertSystemMemoryResources (
- LIST_ENTRY *ResourceList,
- EFI_HOB_RESOURCE_DESCRIPTOR *ResHob
- )
-{
- SYSTEM_MEMORY_RESOURCE *NewResource;
- LIST_ENTRY *Link;
- LIST_ENTRY *NextLink;
- LIST_ENTRY AttachedResources;
- SYSTEM_MEMORY_RESOURCE *Resource;
- EFI_PHYSICAL_ADDRESS NewResourceEnd;
-
- if (IsListEmpty (ResourceList)) {
- NewResource = AllocateZeroPool (sizeof (SYSTEM_MEMORY_RESOURCE));
- NewResource->PhysicalStart = ResHob->PhysicalStart;
- NewResource->ResourceLength = ResHob->ResourceLength;
- InsertTailList (ResourceList, &NewResource->Link);
- return EFI_SUCCESS;
- }
-
- InitializeListHead (&AttachedResources);
-
- Link = ResourceList->ForwardLink;
- ASSERT (Link != NULL);
- while (Link != ResourceList) {
- Resource = (SYSTEM_MEMORY_RESOURCE*)Link;
-
- // Sanity Check. The resources should not overlapped.
- ASSERT (!((ResHob->PhysicalStart >= Resource->PhysicalStart) && (ResHob->PhysicalStart < (Resource->PhysicalStart + Resource->ResourceLength))));
- ASSERT (!((ResHob->PhysicalStart + ResHob->ResourceLength - 1 >= Resource->PhysicalStart) &&
- ((ResHob->PhysicalStart + ResHob->ResourceLength - 1) < (Resource->PhysicalStart + Resource->ResourceLength))));
-
- // The new resource is attached after this resource descriptor
- if (ResHob->PhysicalStart == Resource->PhysicalStart + Resource->ResourceLength) {
- Resource->ResourceLength = Resource->ResourceLength + ResHob->ResourceLength;
-
- NextLink = RemoveEntryList (&Resource->Link);
- InsertTailList (&AttachedResources, &Resource->Link);
- Link = NextLink;
- }
- // The new resource is attached before this resource descriptor
- else if (ResHob->PhysicalStart + ResHob->ResourceLength == Resource->PhysicalStart) {
- Resource->PhysicalStart = ResHob->PhysicalStart;
- Resource->ResourceLength = Resource->ResourceLength + ResHob->ResourceLength;
-
- NextLink = RemoveEntryList (&Resource->Link);
- InsertTailList (&AttachedResources, &Resource->Link);
- Link = NextLink;
- } else {
- Link = Link->ForwardLink;
- }
- }
-
- if (!IsListEmpty (&AttachedResources)) {
- // See if we can merge the attached resource with other resources
-
- NewResource = (SYSTEM_MEMORY_RESOURCE*)GetFirstNode (&AttachedResources);
- Link = RemoveEntryList (&NewResource->Link);
- while (!IsListEmpty (&AttachedResources)) {
- // Merge resources
- Resource = (SYSTEM_MEMORY_RESOURCE*)Link;
-
- // Ensure they overlap each other
- ASSERT (
- ((NewResource->PhysicalStart >= Resource->PhysicalStart) && (NewResource->PhysicalStart < (Resource->PhysicalStart + Resource->ResourceLength))) ||
- (((NewResource->PhysicalStart + NewResource->ResourceLength) >= Resource->PhysicalStart) && ((NewResource->PhysicalStart + NewResource->ResourceLength) < (Resource->PhysicalStart + Resource->ResourceLength)))
- );
-
- NewResourceEnd = MAX (NewResource->PhysicalStart + NewResource->ResourceLength, Resource->PhysicalStart + Resource->ResourceLength);
- NewResource->PhysicalStart = MIN (NewResource->PhysicalStart, Resource->PhysicalStart);
- NewResource->ResourceLength = NewResourceEnd - NewResource->PhysicalStart;
-
- Link = RemoveEntryList (Link);
- }
- } else {
- // None of the Resource of the list is attached to this ResHob. Create a new entry for it
- NewResource = AllocateZeroPool (sizeof (SYSTEM_MEMORY_RESOURCE));
- NewResource->PhysicalStart = ResHob->PhysicalStart;
- NewResource->ResourceLength = ResHob->ResourceLength;
- }
- InsertTailList (ResourceList, &NewResource->Link);
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-GetSystemMemoryResources (
- IN LIST_ENTRY *ResourceList
- )
-{
- EFI_HOB_RESOURCE_DESCRIPTOR *ResHob;
-
- InitializeListHead (ResourceList);
-
- // Find the first System Memory Resource Descriptor
- ResHob = (EFI_HOB_RESOURCE_DESCRIPTOR *)GetFirstHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR);
- while ((ResHob != NULL) && (ResHob->ResourceType != EFI_RESOURCE_SYSTEM_MEMORY)) {
- ResHob = (EFI_HOB_RESOURCE_DESCRIPTOR *)GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, (VOID *)((UINTN)ResHob + ResHob->Header.HobLength));
- }
-
- // Did not find any
- if (ResHob == NULL) {
- return EFI_NOT_FOUND;
- } else {
- InsertSystemMemoryResources (ResourceList, ResHob);
- }
-
- ResHob = (EFI_HOB_RESOURCE_DESCRIPTOR *)GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, (VOID *)((UINTN)ResHob + ResHob->Header.HobLength));
- while (ResHob != NULL) {
- if (ResHob->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) {
- InsertSystemMemoryResources (ResourceList, ResHob);
- }
- ResHob = (EFI_HOB_RESOURCE_DESCRIPTOR *)GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, (VOID *)((UINTN)ResHob + ResHob->Header.HobLength));
- }
-
- return EFI_SUCCESS;
-}
Now that all platforms have been ported over, drive a wooden stake through the heart of FdtDxe and remove it from the tree. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/AMD/Styx/Drivers/FdtDxe/BdsLinuxFdt.c | 760 -------------------- Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.c | 274 ------- Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.h | 54 -- Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf | 76 -- Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoader.h | 173 ----- Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoaderHelper.c | 200 ------ 6 files changed, 1537 deletions(-)