You've already forked edk2-platforms
mirror of
https://github.com/Dasharo/edk2-platforms.git
synced 2026-03-06 14:51:43 -08:00
Platform/RISC-V: Remove platform dependency from common platform lib
This is the generic library for all RISC-V platforms. Remove the dependencies of SiFive U540 platform. Cc: Sunil V L <sunilvl@ventanamicro.com> Cc: Daniel Schaefer <daniel.schaefer@hpe.com> Signed-off-by: Abner Chang <abner.chang@hpe.com> Reviewed-by: Daniel Schaefer <daniel.schaefer@hpe.com> Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
This commit is contained in:
@@ -25,8 +25,6 @@
|
||||
|
||||
[Sources]
|
||||
Platform.c
|
||||
SifiveFu540.c
|
||||
PlatformOverride.h
|
||||
|
||||
[Packages]
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
@@ -45,6 +43,7 @@
|
||||
PcdLib
|
||||
PrintLib
|
||||
RiscVCpuLib
|
||||
RiscVSpecialPlatformLib
|
||||
|
||||
[FixedPcd]
|
||||
gUefiRiscVPlatformPkgTokenSpaceGuid.PcdBootHartId
|
||||
|
||||
@@ -5,10 +5,16 @@
|
||||
*
|
||||
* Authors:
|
||||
* Anup Patel <anup.patel@wdc.com>
|
||||
|
||||
Copyright (c) 2021, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
*/
|
||||
|
||||
#include <libfdt.h>
|
||||
#include <PlatformOverride.h>
|
||||
#include <Library/RiscVSpecialPlatformLib.h>
|
||||
|
||||
#include <sbi/riscv_asm.h>
|
||||
#include <sbi/sbi_domain.h>
|
||||
#include <sbi/sbi_hartmask.h>
|
||||
@@ -24,11 +30,12 @@
|
||||
#include <sbi_utils/ipi/fdt_ipi.h>
|
||||
#include <sbi_utils/reset/fdt_reset.h>
|
||||
|
||||
extern const struct platform_override sifive_fu540;
|
||||
|
||||
static const struct platform_override *special_platforms[] = {
|
||||
&sifive_fu540,
|
||||
};
|
||||
//
|
||||
// SpecialPlatformArray and NumberOfSpecialPlatform are
|
||||
// provided by RiscVSpecialPlatformLib library.
|
||||
//
|
||||
extern const struct platform_override *special_platforms[];
|
||||
extern INTN NumberOfPlaformsInArray;
|
||||
|
||||
static const struct platform_override *generic_plat = NULL;
|
||||
static const struct fdt_match *generic_plat_match = NULL;
|
||||
@@ -39,7 +46,11 @@ static void fw_platform_lookup_special(void *fdt, int root_offset)
|
||||
const struct platform_override *plat;
|
||||
const struct fdt_match *match;
|
||||
|
||||
for (pos = 0; pos < array_size(special_platforms); pos++) {
|
||||
if (special_platforms == NULL || NumberOfPlaformsInArray == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (pos = 0; pos < (int)NumberOfPlaformsInArray; pos++) {
|
||||
plat = special_platforms[pos];
|
||||
if (!plat->match_table)
|
||||
continue;
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2020 Western Digital Corporation or its affiliates.
|
||||
*
|
||||
* Authors:
|
||||
* Anup Patel <anup.patel@wdc.com>
|
||||
*/
|
||||
|
||||
#ifndef __PLATFORM_OVERRIDE_H__
|
||||
#define __PLATFORM_OVERRIDE_H__
|
||||
|
||||
#include <sbi/sbi_types.h>
|
||||
|
||||
struct platform_override {
|
||||
const struct fdt_match *match_table;
|
||||
u64 (*features)(const struct fdt_match *match);
|
||||
u64 (*tlbr_flush_limit)(const struct fdt_match *match);
|
||||
int (*early_init)(bool cold_boot, const struct fdt_match *match);
|
||||
int (*final_init)(bool cold_boot, const struct fdt_match *match);
|
||||
void (*early_exit)(const struct fdt_match *match);
|
||||
void (*final_exit)(const struct fdt_match *match);
|
||||
int (*system_reset_check)(u32 reset_type, u32 reset_reason,
|
||||
const struct fdt_match *match);
|
||||
void (*system_reset)(u32 reset_type, u32 reset_reason,
|
||||
const struct fdt_match *match);
|
||||
int (*fdt_fixup)(void *fdt, const struct fdt_match *match);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2020 Western Digital Corporation or its affiliates.
|
||||
*
|
||||
* Authors:
|
||||
* Anup Patel <anup.patel@wdc.com>
|
||||
*/
|
||||
|
||||
#include <PlatformOverride.h>
|
||||
#include <sbi_utils/fdt/fdt_helper.h>
|
||||
#include <sbi_utils/fdt/fdt_fixup.h>
|
||||
|
||||
static u64 sifive_fu540_tlbr_flush_limit(const struct fdt_match *match)
|
||||
{
|
||||
/*
|
||||
* The sfence.vma by virtual address does not work on
|
||||
* SiFive FU540 so we return remote TLB flush limit as zero.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sifive_fu540_fdt_fixup(void *fdt, const struct fdt_match *match)
|
||||
{
|
||||
/*
|
||||
* SiFive Freedom U540 has an erratum that prevents S-mode software
|
||||
* to access a PMP protected region using 1GB page table mapping, so
|
||||
* always add the no-map attribute on this platform.
|
||||
*/
|
||||
fdt_reserved_memory_nomap_fixup(fdt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct fdt_match sifive_fu540_match[] = {
|
||||
{ .compatible = "sifive,fu540" },
|
||||
{ .compatible = "sifive,fu540g" },
|
||||
{ .compatible = "sifive,fu540-c000" },
|
||||
{ .compatible = "sifive,hifive-unleashed-a00" },
|
||||
{ },
|
||||
};
|
||||
|
||||
const struct platform_override sifive_fu540 = {
|
||||
.match_table = sifive_fu540_match,
|
||||
.tlbr_flush_limit = sifive_fu540_tlbr_flush_limit,
|
||||
.fdt_fixup = sifive_fu540_fdt_fixup,
|
||||
};
|
||||
Reference in New Issue
Block a user