riscv: create a custom CPU implementation for PolarFire SoC

PolarFire SoC needs a custom implementation of top_of_ram(), so stop
using the generic CPU & create a custom CPU instead.

Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
This commit is contained in:
Conor Dooley
2025-12-08 12:10:39 +08:00
committed by Leo Yu-Chi Liang
parent 87ecc2b6ca
commit 4d056a2037
6 changed files with 70 additions and 2 deletions
+1
View File
@@ -126,6 +126,7 @@ source "arch/riscv/cpu/cv1800b/Kconfig"
source "arch/riscv/cpu/fu540/Kconfig"
source "arch/riscv/cpu/fu740/Kconfig"
source "arch/riscv/cpu/ast2700/Kconfig"
source "arch/riscv/cpu/mpfs/Kconfig"
source "arch/riscv/cpu/generic/Kconfig"
source "arch/riscv/cpu/jh7110/Kconfig"
source "arch/riscv/cpu/k1/Kconfig"
+16
View File
@@ -0,0 +1,16 @@
# SPDX-License-Identifier: GPL-2.0+
config MICROCHIP_MPFS
bool
select ARCH_EARLY_INIT_R
imply CPU
imply CPU_RISCV
imply RISCV_TIMER if (RISCV_SMODE || SPL_RISCV_SMODE)
imply SIFIVE_CLINT if RISCV_MMODE
imply SPL_SIFIVE_CLINT if SPL_RISCV_MMODE
imply CMD_CPU
imply SPL_CPU
imply SPL_OPENSBI
imply SPL_LOAD_FIT
imply REGMAP
imply SYSCON
+5
View File
@@ -0,0 +1,5 @@
# SPDX-License-Identifier: GPL-2.0+
ifneq ($(CONFIG_SPL_BUILD),y)
obj-y += dram.o
endif
+38
View File
@@ -0,0 +1,38 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
*/
#include <asm/global_data.h>
#include <fdtdec.h>
#include <init.h>
#include <linux/sizes.h>
DECLARE_GLOBAL_DATA_PTR;
#define MPFS_TOP_OF_CACHED (SZ_2G + SZ_1G)
#define MPFS_HSS_RESERVATION (SZ_4M)
int dram_init(void) {
return fdtdec_setup_mem_size_base();
}
int dram_init_banksize(void) {
return fdtdec_setup_memory_banksize();
}
phys_size_t board_get_usable_ram_top(phys_size_t total_size) {
/*
* Ensure that if we run from 32-bit memory that all memory used by
* U-Boot is cached addresses, but also account for the reservation at
* the top of 32 bit cached DDR used by the HSS.
*/
if (gd->ram_top >= MPFS_TOP_OF_CACHED - MPFS_HSS_RESERVATION)
return MPFS_TOP_OF_CACHED - MPFS_HSS_RESERVATION - 1;
/*
* If we don't find a 32 bit region just return the top of memory.
* If the address is a 32-bit region, but fits beneath the HSS'
* reservation, ram_top is adequate also.
*/
return gd->ram_top;
}
+8
View File
@@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0+ */
#ifndef __ASM_RISCV_ARCH_MPFS_CLK_H
#define __ASM_RISCV_ARCH_MPFS_CLK_H
/* Note: This is a placeholder header for driver compilation. */
#endif
+2 -2
View File
@@ -7,7 +7,7 @@ config SYS_VENDOR
default "microchip"
config SYS_CPU
default "generic"
default "mpfs"
config SYS_CONFIG_NAME
default "microchip_mpfs_generic"
@@ -18,7 +18,7 @@ config TEXT_BASE
config BOARD_SPECIFIC_OPTIONS # dummy
def_bool y
select GENERIC_RISCV
select MICROCHIP_MPFS
select BOARD_EARLY_INIT_F
select BOARD_LATE_INIT
imply SMP