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:
committed by
Leo Yu-Chi Liang
parent
87ecc2b6ca
commit
4d056a2037
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
ifneq ($(CONFIG_SPL_BUILD),y)
|
||||
obj-y += dram.o
|
||||
endif
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user