mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-25 15:51:41 +01:00
Merge pull request #4 from riscv/avpatel/master
Remove PLAT_<xyz> defines from platform and firmwares
This commit is contained in:
@@ -59,7 +59,7 @@ OR
|
|||||||
`make PLATFORM=<platform_subdir> I=<install_directory> install`
|
`make PLATFORM=<platform_subdir> I=<install_directory> install`
|
||||||
|
|
||||||
In addition, we can also specify platform specific command-line
|
In addition, we can also specify platform specific command-line
|
||||||
options to top-level make (such as `PLAT_<xyz>` or `FW_<abc>`)
|
options to top-level make (such as `PLATFORM_<xyz>` or `FW_<abc>`)
|
||||||
which are described under `docs/platform/<platform_name>.md` OR
|
which are described under `docs/platform/<platform_name>.md` OR
|
||||||
`docs/firmware/<firmware_name>.md`.
|
`docs/firmware/<firmware_name>.md`.
|
||||||
|
|
||||||
|
@@ -122,18 +122,29 @@ _start_warm:
|
|||||||
csrw mie, zero
|
csrw mie, zero
|
||||||
csrw mip, zero
|
csrw mip, zero
|
||||||
|
|
||||||
/* set MSIE bit to receive IPI */
|
/* Set MSIE bit to receive IPI */
|
||||||
li a2, MIP_MSIP
|
li a2, MIP_MSIP
|
||||||
csrw mie, a2
|
csrw mie, a2
|
||||||
|
|
||||||
|
/* Preload per-HART details
|
||||||
|
* s6 -> HART ID
|
||||||
|
* s7 -> HART Count
|
||||||
|
* s8 -> HART Stack Size
|
||||||
|
*/
|
||||||
|
csrr s6, mhartid
|
||||||
|
la a4, platform
|
||||||
|
lwu s7, RISCV_PLATFORM_HART_COUNT_OFFSET(a4)
|
||||||
|
lwu s8, RISCV_PLATFORM_HART_STACK_SIZE_OFFSET(a4)
|
||||||
|
|
||||||
/* HART ID should be within expected limit */
|
/* HART ID should be within expected limit */
|
||||||
csrr a6, mhartid
|
csrr s6, mhartid
|
||||||
li a5, PLAT_HART_COUNT
|
bge s6, s7, _start_hang
|
||||||
bge a6, a5, _start_hang
|
|
||||||
|
|
||||||
/* Setup scratch space */
|
/* Setup scratch space */
|
||||||
li a5, PLAT_HART_STACK_SIZE
|
la tp, _fw_end
|
||||||
la tp, _stack_end
|
mul a5, s7, s8
|
||||||
mul a5, a5, a6
|
add tp, tp, a5
|
||||||
|
mul a5, s8, s6
|
||||||
sub tp, tp, a5
|
sub tp, tp, a5
|
||||||
li a5, RISCV_SCRATCH_SIZE
|
li a5, RISCV_SCRATCH_SIZE
|
||||||
sub tp, tp, a5
|
sub tp, tp, a5
|
||||||
@@ -143,6 +154,8 @@ _start_warm:
|
|||||||
REG_S zero, RISCV_SCRATCH_TMP0_OFFSET(tp)
|
REG_S zero, RISCV_SCRATCH_TMP0_OFFSET(tp)
|
||||||
la a4, _fw_start
|
la a4, _fw_start
|
||||||
la a5, _fw_end
|
la a5, _fw_end
|
||||||
|
mul t0, s7, s8
|
||||||
|
add a5, a5, t0
|
||||||
sub a5, a5, a4
|
sub a5, a5, a4
|
||||||
REG_S a4, RISCV_SCRATCH_FW_START_OFFSET(tp)
|
REG_S a4, RISCV_SCRATCH_FW_START_OFFSET(tp)
|
||||||
REG_S a5, RISCV_SCRATCH_FW_SIZE_OFFSET(tp)
|
REG_S a5, RISCV_SCRATCH_FW_SIZE_OFFSET(tp)
|
||||||
@@ -180,18 +193,30 @@ _start_warm:
|
|||||||
.section .entry, "ax", %progbits
|
.section .entry, "ax", %progbits
|
||||||
.globl _hartid_to_scratch
|
.globl _hartid_to_scratch
|
||||||
_hartid_to_scratch:
|
_hartid_to_scratch:
|
||||||
add sp, sp, -(2 * __SIZEOF_POINTER__)
|
add sp, sp, -(3 * __SIZEOF_POINTER__)
|
||||||
REG_S a1, (sp)
|
REG_S s0, (sp)
|
||||||
REG_S a2, (__SIZEOF_POINTER__)(sp)
|
REG_S s1, (__SIZEOF_POINTER__)(sp)
|
||||||
li a1, PLAT_HART_STACK_SIZE
|
REG_S s2, (__SIZEOF_POINTER__ * 2)(sp)
|
||||||
la a2, _stack_end
|
/*
|
||||||
mul a1, a1, a0
|
* a0 -> HART ID (passed by caller)
|
||||||
sub a2, a2, a1
|
* s0 -> HART Stack Size
|
||||||
li a1, RISCV_SCRATCH_SIZE
|
* s1 -> HART Stack End
|
||||||
sub a0, a2, a1
|
* s2 -> Temporary
|
||||||
REG_L a1, (sp)
|
*/
|
||||||
REG_L a2, (__SIZEOF_POINTER__)(sp)
|
la s2, platform
|
||||||
add sp, sp, (2 * __SIZEOF_POINTER__)
|
lwu s0, RISCV_PLATFORM_HART_STACK_SIZE_OFFSET(s2)
|
||||||
|
lwu s2, RISCV_PLATFORM_HART_COUNT_OFFSET(s2)
|
||||||
|
mul s2, s2, s0
|
||||||
|
la s1, _fw_end
|
||||||
|
add s1, s1, s2
|
||||||
|
mul s2, s0, a0
|
||||||
|
sub s1, s1, s2
|
||||||
|
li s2, RISCV_SCRATCH_SIZE
|
||||||
|
sub a0, s1, s2
|
||||||
|
REG_L s0, (sp)
|
||||||
|
REG_L s1, (__SIZEOF_POINTER__)(sp)
|
||||||
|
REG_L s2, (__SIZEOF_POINTER__ * 2)(sp)
|
||||||
|
add sp, sp, (3 * __SIZEOF_POINTER__)
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.align 3
|
.align 3
|
||||||
|
@@ -61,18 +61,6 @@
|
|||||||
|
|
||||||
. = ALIGN(0x1000); /* Ensure next section is page aligned */
|
. = ALIGN(0x1000); /* Ensure next section is page aligned */
|
||||||
|
|
||||||
.stack :
|
|
||||||
{
|
|
||||||
PROVIDE(_stack_start = .);
|
|
||||||
*(.stack)
|
|
||||||
*(.stack.*)
|
|
||||||
. = . + (PLAT_HART_STACK_SIZE * PLAT_HART_COUNT);
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE(_stack_end = .);
|
|
||||||
}
|
|
||||||
|
|
||||||
. = ALIGN(0x1000); /* Ensure next section is page aligned */
|
|
||||||
|
|
||||||
.bss :
|
.bss :
|
||||||
{
|
{
|
||||||
PROVIDE(_bss_start = .);
|
PROVIDE(_bss_start = .);
|
||||||
|
@@ -81,6 +81,11 @@
|
|||||||
#define RISCV_SCRATCH_IPI_TYPE_OFFSET (9 * __SIZEOF_POINTER__)
|
#define RISCV_SCRATCH_IPI_TYPE_OFFSET (9 * __SIZEOF_POINTER__)
|
||||||
#define RISCV_SCRATCH_SIZE 256
|
#define RISCV_SCRATCH_SIZE 256
|
||||||
|
|
||||||
|
#define RISCV_PLATFORM_NAME_OFFSET (0x0)
|
||||||
|
#define RISCV_PLATFORM_FEATURES_OFFSET (0x40)
|
||||||
|
#define RISCV_PLATFORM_HART_COUNT_OFFSET (0x48)
|
||||||
|
#define RISCV_PLATFORM_HART_STACK_SIZE_OFFSET (0x4c)
|
||||||
|
|
||||||
#define RISCV_TRAP_REGS_zero 0
|
#define RISCV_TRAP_REGS_zero 0
|
||||||
#define RISCV_TRAP_REGS_ra 1
|
#define RISCV_TRAP_REGS_ra 1
|
||||||
#define RISCV_TRAP_REGS_sp 2
|
#define RISCV_TRAP_REGS_sp 2
|
||||||
|
@@ -7,12 +7,8 @@
|
|||||||
# SPDX-License-Identifier: BSD-2-Clause
|
# SPDX-License-Identifier: BSD-2-Clause
|
||||||
#
|
#
|
||||||
|
|
||||||
# Essential defines required by SBI platform
|
|
||||||
platform-cppflags-y = -DPLAT_NAME="Kendryte K210"
|
|
||||||
platform-cppflags-y+= -DPLAT_HART_COUNT=2
|
|
||||||
platform-cppflags-y+= -DPLAT_HART_STACK_SIZE=4096
|
|
||||||
|
|
||||||
# Compiler flags
|
# Compiler flags
|
||||||
|
platform-cppflags-y =
|
||||||
platform-cflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
platform-cflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
||||||
platform-asflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
platform-asflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
||||||
platform-ldflags-y =
|
platform-ldflags-y =
|
||||||
|
@@ -38,7 +38,7 @@ static char k210_console_getc(void)
|
|||||||
static int k210_cold_irqchip_init(void)
|
static int k210_cold_irqchip_init(void)
|
||||||
{
|
{
|
||||||
return plic_cold_irqchip_init(PLIC_BASE_ADDR, PLIC_NUM_SOURCES,
|
return plic_cold_irqchip_init(PLIC_BASE_ADDR, PLIC_NUM_SOURCES,
|
||||||
PLAT_HART_COUNT);
|
K210_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int k210_warm_irqchip_init(u32 core_id)
|
static int k210_warm_irqchip_init(u32 core_id)
|
||||||
@@ -50,12 +50,12 @@ static int k210_warm_irqchip_init(u32 core_id)
|
|||||||
|
|
||||||
static int k210_cold_ipi_init(void)
|
static int k210_cold_ipi_init(void)
|
||||||
{
|
{
|
||||||
return clint_cold_ipi_init(CLINT_BASE_ADDR, PLAT_HART_COUNT);
|
return clint_cold_ipi_init(CLINT_BASE_ADDR, K210_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int k210_cold_timer_init(void)
|
static int k210_cold_timer_init(void)
|
||||||
{
|
{
|
||||||
return clint_cold_timer_init(CLINT_BASE_ADDR, PLAT_HART_COUNT);
|
return clint_cold_timer_init(CLINT_BASE_ADDR, K210_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int k210_system_reboot(u32 type)
|
static int k210_system_reboot(u32 type)
|
||||||
@@ -76,11 +76,11 @@ static int k210_system_shutdown(u32 type)
|
|||||||
|
|
||||||
struct sbi_platform platform = {
|
struct sbi_platform platform = {
|
||||||
|
|
||||||
.name = STRINGIFY(PLAT_NAME),
|
.name = "Kendryte K210",
|
||||||
.features = SBI_PLATFORM_HAS_MMIO_TIMER_VALUE,
|
.features = SBI_PLATFORM_HAS_MMIO_TIMER_VALUE,
|
||||||
|
|
||||||
.hart_count = PLAT_HART_COUNT,
|
.hart_count = K210_HART_COUNT,
|
||||||
.hart_stack_size = PLAT_HART_STACK_SIZE,
|
.hart_stack_size = K210_HART_STACK_SIZE,
|
||||||
.disabled_hart_mask = 0,
|
.disabled_hart_mask = 0,
|
||||||
|
|
||||||
.console_init = k210_console_init,
|
.console_init = k210_console_init,
|
||||||
|
@@ -18,12 +18,15 @@
|
|||||||
|
|
||||||
#include <sbi/riscv_asm.h>
|
#include <sbi/riscv_asm.h>
|
||||||
|
|
||||||
|
#define K210_HART_COUNT 2
|
||||||
|
#define K210_HART_STACK_SIZE 4096
|
||||||
|
|
||||||
/* Register base address */
|
/* Register base address */
|
||||||
|
|
||||||
/* Under Coreplex */
|
/* Under Coreplex */
|
||||||
#define CLINT_BASE_ADDR (0x02000000U)
|
#define CLINT_BASE_ADDR (0x02000000U)
|
||||||
#define PLIC_BASE_ADDR (0x0C000000U)
|
#define PLIC_BASE_ADDR (0x0C000000U)
|
||||||
#define PLIC_NUM_CORES (PLAT_HART_COUNT)
|
#define PLIC_NUM_CORES (K210_HART_COUNT)
|
||||||
|
|
||||||
/* Under TileLink */
|
/* Under TileLink */
|
||||||
#define GPIOHS_BASE_ADDR (0x38001000U)
|
#define GPIOHS_BASE_ADDR (0x38001000U)
|
||||||
|
@@ -7,12 +7,8 @@
|
|||||||
# SPDX-License-Identifier: BSD-2-Clause
|
# SPDX-License-Identifier: BSD-2-Clause
|
||||||
#
|
#
|
||||||
|
|
||||||
# Essential defines required by SBI platform
|
|
||||||
platform-cppflags-y = -DPLAT_NAME="QEMU SiFive Unleashed"
|
|
||||||
platform-cppflags-y+= -DPLAT_HART_COUNT=1
|
|
||||||
platform-cppflags-y+= -DPLAT_HART_STACK_SIZE=8192
|
|
||||||
|
|
||||||
# Compiler flags
|
# Compiler flags
|
||||||
|
platform-cppflags-y =
|
||||||
platform-cflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
platform-cflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
||||||
platform-asflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
platform-asflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
||||||
platform-ldflags-y =
|
platform-ldflags-y =
|
||||||
|
@@ -14,6 +14,9 @@
|
|||||||
#include <plat/serial/sifive-uart.h>
|
#include <plat/serial/sifive-uart.h>
|
||||||
#include <plat/sys/clint.h>
|
#include <plat/sys/clint.h>
|
||||||
|
|
||||||
|
#define SIFIVE_U_HART_COUNT 1
|
||||||
|
#define SIFIVE_U_HART_STACK_SIZE 8192
|
||||||
|
|
||||||
#define SIFIVE_U_SYS_CLK 1000000000
|
#define SIFIVE_U_SYS_CLK 1000000000
|
||||||
#define SIFIVE_U_PERIPH_CLK (SIFIVE_U_SYS_CLK / 2)
|
#define SIFIVE_U_PERIPH_CLK (SIFIVE_U_SYS_CLK / 2)
|
||||||
|
|
||||||
@@ -31,7 +34,7 @@ static int sifive_u_cold_final_init(void)
|
|||||||
u32 i;
|
u32 i;
|
||||||
void *fdt = sbi_scratch_thishart_arg1_ptr();
|
void *fdt = sbi_scratch_thishart_arg1_ptr();
|
||||||
|
|
||||||
for (i = 0; i < PLAT_HART_COUNT; i++)
|
for (i = 0; i < SIFIVE_U_HART_COUNT; i++)
|
||||||
plic_fdt_fixup(fdt, "riscv,plic0", 2 * i);
|
plic_fdt_fixup(fdt, "riscv,plic0", 2 * i);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -71,7 +74,7 @@ static int sifive_u_cold_irqchip_init(void)
|
|||||||
{
|
{
|
||||||
return plic_cold_irqchip_init(SIFIVE_U_PLIC_ADDR,
|
return plic_cold_irqchip_init(SIFIVE_U_PLIC_ADDR,
|
||||||
SIFIVE_U_PLIC_NUM_SOURCES,
|
SIFIVE_U_PLIC_NUM_SOURCES,
|
||||||
PLAT_HART_COUNT);
|
SIFIVE_U_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sifive_u_warm_irqchip_init(u32 target_hart)
|
static int sifive_u_warm_irqchip_init(u32 target_hart)
|
||||||
@@ -84,13 +87,13 @@ static int sifive_u_warm_irqchip_init(u32 target_hart)
|
|||||||
static int sifive_u_cold_ipi_init(void)
|
static int sifive_u_cold_ipi_init(void)
|
||||||
{
|
{
|
||||||
return clint_cold_ipi_init(SIFIVE_U_CLINT_ADDR,
|
return clint_cold_ipi_init(SIFIVE_U_CLINT_ADDR,
|
||||||
PLAT_HART_COUNT);
|
SIFIVE_U_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sifive_u_cold_timer_init(void)
|
static int sifive_u_cold_timer_init(void)
|
||||||
{
|
{
|
||||||
return clint_cold_timer_init(SIFIVE_U_CLINT_ADDR,
|
return clint_cold_timer_init(SIFIVE_U_CLINT_ADDR,
|
||||||
PLAT_HART_COUNT);
|
SIFIVE_U_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sifive_u_system_down(u32 type)
|
static int sifive_u_system_down(u32 type)
|
||||||
@@ -100,10 +103,10 @@ static int sifive_u_system_down(u32 type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct sbi_platform platform = {
|
struct sbi_platform platform = {
|
||||||
.name = STRINGIFY(PLAT_NAME),
|
.name = "QEMU SiFive Unleashed",
|
||||||
.features = SBI_PLATFORM_DEFAULT_FEATURES,
|
.features = SBI_PLATFORM_DEFAULT_FEATURES,
|
||||||
.hart_count = PLAT_HART_COUNT,
|
.hart_count = SIFIVE_U_HART_COUNT,
|
||||||
.hart_stack_size = PLAT_HART_STACK_SIZE,
|
.hart_stack_size = SIFIVE_U_HART_STACK_SIZE,
|
||||||
.disabled_hart_mask = 0,
|
.disabled_hart_mask = 0,
|
||||||
.pmp_region_count = sifive_u_pmp_region_count,
|
.pmp_region_count = sifive_u_pmp_region_count,
|
||||||
.pmp_region_info = sifive_u_pmp_region_info,
|
.pmp_region_info = sifive_u_pmp_region_info,
|
||||||
|
@@ -7,12 +7,8 @@
|
|||||||
# SPDX-License-Identifier: BSD-2-Clause
|
# SPDX-License-Identifier: BSD-2-Clause
|
||||||
#
|
#
|
||||||
|
|
||||||
# Essential defines required by SBI platform
|
|
||||||
platform-cppflags-y = -DPLAT_NAME="QEMU Virt Machine"
|
|
||||||
platform-cppflags-y+= -DPLAT_HART_COUNT=8
|
|
||||||
platform-cppflags-y+= -DPLAT_HART_STACK_SIZE=8192
|
|
||||||
|
|
||||||
# Compiler flags
|
# Compiler flags
|
||||||
|
platform-cppflags-y =
|
||||||
platform-cflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
platform-cflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
||||||
platform-asflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
platform-asflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
||||||
platform-ldflags-y =
|
platform-ldflags-y =
|
||||||
|
@@ -14,6 +14,9 @@
|
|||||||
#include <plat/serial/uart8250.h>
|
#include <plat/serial/uart8250.h>
|
||||||
#include <plat/sys/clint.h>
|
#include <plat/sys/clint.h>
|
||||||
|
|
||||||
|
#define VIRT_HART_COUNT 8
|
||||||
|
#define VIRT_HART_STACK_SIZE 8192
|
||||||
|
|
||||||
#define VIRT_TEST_ADDR 0x100000
|
#define VIRT_TEST_ADDR 0x100000
|
||||||
|
|
||||||
#define VIRT_CLINT_ADDR 0x2000000
|
#define VIRT_CLINT_ADDR 0x2000000
|
||||||
@@ -31,7 +34,7 @@ static int virt_cold_final_init(void)
|
|||||||
u32 i;
|
u32 i;
|
||||||
void *fdt = sbi_scratch_thishart_arg1_ptr();
|
void *fdt = sbi_scratch_thishart_arg1_ptr();
|
||||||
|
|
||||||
for (i = 0; i < PLAT_HART_COUNT; i++)
|
for (i = 0; i < VIRT_HART_COUNT; i++)
|
||||||
plic_fdt_fixup(fdt, "riscv,plic0", 2 * i);
|
plic_fdt_fixup(fdt, "riscv,plic0", 2 * i);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -72,7 +75,7 @@ static int virt_cold_irqchip_init(void)
|
|||||||
{
|
{
|
||||||
return plic_cold_irqchip_init(VIRT_PLIC_ADDR,
|
return plic_cold_irqchip_init(VIRT_PLIC_ADDR,
|
||||||
VIRT_PLIC_NUM_SOURCES,
|
VIRT_PLIC_NUM_SOURCES,
|
||||||
PLAT_HART_COUNT);
|
VIRT_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int virt_warm_irqchip_init(u32 target_hart)
|
static int virt_warm_irqchip_init(u32 target_hart)
|
||||||
@@ -85,13 +88,13 @@ static int virt_warm_irqchip_init(u32 target_hart)
|
|||||||
static int virt_cold_ipi_init(void)
|
static int virt_cold_ipi_init(void)
|
||||||
{
|
{
|
||||||
return clint_cold_ipi_init(VIRT_CLINT_ADDR,
|
return clint_cold_ipi_init(VIRT_CLINT_ADDR,
|
||||||
PLAT_HART_COUNT);
|
VIRT_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int virt_cold_timer_init(void)
|
static int virt_cold_timer_init(void)
|
||||||
{
|
{
|
||||||
return clint_cold_timer_init(VIRT_CLINT_ADDR,
|
return clint_cold_timer_init(VIRT_CLINT_ADDR,
|
||||||
PLAT_HART_COUNT);
|
VIRT_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int virt_system_down(u32 type)
|
static int virt_system_down(u32 type)
|
||||||
@@ -101,10 +104,10 @@ static int virt_system_down(u32 type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct sbi_platform platform = {
|
struct sbi_platform platform = {
|
||||||
.name = STRINGIFY(PLAT_NAME),
|
.name = "QEMU Virt Machine",
|
||||||
.features = SBI_PLATFORM_DEFAULT_FEATURES,
|
.features = SBI_PLATFORM_DEFAULT_FEATURES,
|
||||||
.hart_count = PLAT_HART_COUNT,
|
.hart_count = VIRT_HART_COUNT,
|
||||||
.hart_stack_size = PLAT_HART_STACK_SIZE,
|
.hart_stack_size = VIRT_HART_STACK_SIZE,
|
||||||
.disabled_hart_mask = 0,
|
.disabled_hart_mask = 0,
|
||||||
.pmp_region_count = virt_pmp_region_count,
|
.pmp_region_count = virt_pmp_region_count,
|
||||||
.pmp_region_info = virt_pmp_region_info,
|
.pmp_region_info = virt_pmp_region_info,
|
||||||
|
@@ -7,12 +7,8 @@
|
|||||||
# SPDX-License-Identifier: BSD-2-Clause
|
# SPDX-License-Identifier: BSD-2-Clause
|
||||||
#
|
#
|
||||||
|
|
||||||
# Essential defines required by SBI platform
|
|
||||||
platform-cppflags-y = -DPLAT_NAME="SiFive HiFive U540"
|
|
||||||
platform-cppflags-y+= -DPLAT_HART_COUNT=5
|
|
||||||
platform-cppflags-y+= -DPLAT_HART_STACK_SIZE=8192
|
|
||||||
|
|
||||||
# Compiler flags
|
# Compiler flags
|
||||||
|
platform-cppflags-y =
|
||||||
platform-cflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
platform-cflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
||||||
platform-asflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
platform-asflags-y =-mabi=lp64 -march=rv64imafdc -mcmodel=medany
|
||||||
platform-ldflags-y =
|
platform-ldflags-y =
|
||||||
|
@@ -15,6 +15,9 @@
|
|||||||
#include <plat/serial/sifive-uart.h>
|
#include <plat/serial/sifive-uart.h>
|
||||||
#include <plat/sys/clint.h>
|
#include <plat/sys/clint.h>
|
||||||
|
|
||||||
|
#define SIFIVE_U_HART_COUNT 5
|
||||||
|
#define SIFIVE_U_HART_STACK_SIZE 8192
|
||||||
|
|
||||||
#define SIFIVE_U_SYS_CLK 1000000000
|
#define SIFIVE_U_SYS_CLK 1000000000
|
||||||
|
|
||||||
#define SIFIVE_U_CLINT_ADDR 0x2000000
|
#define SIFIVE_U_CLINT_ADDR 0x2000000
|
||||||
@@ -41,7 +44,7 @@ static int sifive_u_cold_final_init(void)
|
|||||||
void *fdt = sbi_scratch_thishart_arg1_ptr();
|
void *fdt = sbi_scratch_thishart_arg1_ptr();
|
||||||
|
|
||||||
plic_fdt_fixup(fdt, "riscv,plic0", 0);
|
plic_fdt_fixup(fdt, "riscv,plic0", 0);
|
||||||
for (i = 1; i < PLAT_HART_COUNT; i++)
|
for (i = 1; i < SIFIVE_U_HART_COUNT; i++)
|
||||||
plic_fdt_fixup(fdt, "riscv,plic0", 2 * i - 1);
|
plic_fdt_fixup(fdt, "riscv,plic0", 2 * i - 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -91,7 +94,7 @@ static int sifive_u_cold_irqchip_init(void)
|
|||||||
{
|
{
|
||||||
return plic_cold_irqchip_init(SIFIVE_U_PLIC_ADDR,
|
return plic_cold_irqchip_init(SIFIVE_U_PLIC_ADDR,
|
||||||
SIFIVE_U_PLIC_NUM_SOURCES,
|
SIFIVE_U_PLIC_NUM_SOURCES,
|
||||||
PLAT_HART_COUNT);
|
SIFIVE_U_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sifive_u_warm_irqchip_init(u32 target_hart)
|
static int sifive_u_warm_irqchip_init(u32 target_hart)
|
||||||
@@ -104,13 +107,13 @@ static int sifive_u_warm_irqchip_init(u32 target_hart)
|
|||||||
static int sifive_u_cold_ipi_init(void)
|
static int sifive_u_cold_ipi_init(void)
|
||||||
{
|
{
|
||||||
return clint_cold_ipi_init(SIFIVE_U_CLINT_ADDR,
|
return clint_cold_ipi_init(SIFIVE_U_CLINT_ADDR,
|
||||||
PLAT_HART_COUNT);
|
SIFIVE_U_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sifive_u_cold_timer_init(void)
|
static int sifive_u_cold_timer_init(void)
|
||||||
{
|
{
|
||||||
return clint_cold_timer_init(SIFIVE_U_CLINT_ADDR,
|
return clint_cold_timer_init(SIFIVE_U_CLINT_ADDR,
|
||||||
PLAT_HART_COUNT);
|
SIFIVE_U_HART_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sifive_u_system_down(u32 type)
|
static int sifive_u_system_down(u32 type)
|
||||||
@@ -120,10 +123,10 @@ static int sifive_u_system_down(u32 type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct sbi_platform platform = {
|
struct sbi_platform platform = {
|
||||||
.name = STRINGIFY(PLAT_NAME),
|
.name = "SiFive HiFive U540",
|
||||||
.features = SBI_PLATFORM_DEFAULT_FEATURES,
|
.features = SBI_PLATFORM_DEFAULT_FEATURES,
|
||||||
.hart_count = PLAT_HART_COUNT,
|
.hart_count = SIFIVE_U_HART_COUNT,
|
||||||
.hart_stack_size = PLAT_HART_STACK_SIZE,
|
.hart_stack_size = SIFIVE_U_HART_STACK_SIZE,
|
||||||
.disabled_hart_mask = ~(1 << SIFIVE_U_HARITD_ENABLED),
|
.disabled_hart_mask = ~(1 << SIFIVE_U_HARITD_ENABLED),
|
||||||
.pmp_region_count = sifive_u_pmp_region_count,
|
.pmp_region_count = sifive_u_pmp_region_count,
|
||||||
.pmp_region_info = sifive_u_pmp_region_info,
|
.pmp_region_info = sifive_u_pmp_region_info,
|
||||||
|
Reference in New Issue
Block a user