Merge pull request #4 from riscv/avpatel/master

Remove PLAT_<xyz> defines from platform and firmwares
This commit is contained in:
Atish Patra
2018-12-22 10:02:52 -08:00
committed by GitHub
13 changed files with 94 additions and 80 deletions

View File

@@ -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`.

View File

@@ -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

View File

@@ -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 = .);

View File

@@ -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

View File

@@ -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 =

View File

@@ -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,

View File

@@ -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)

View File

@@ -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 =

View File

@@ -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,

View File

@@ -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 =

View File

@@ -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,

View File

@@ -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 =

View File

@@ -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,