mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-12-16 15:02:16 +01:00
Merge branch 'master' of https://source.denx.de/u-boot/custodians/u-boot-riscv
+ riscv: Add Zbb support + riscv: Add preliminary RISC-V falcon mode support + riscv: Remove dram_init_banksize() + andes: rearrange PLICSW scheme + visionfive2: enable bootstage configs
This commit is contained in:
commit
e463222cce
2
Makefile
2
Makefile
@ -2165,7 +2165,7 @@ CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \
|
|||||||
mkimage-out.spl.mkimage mkimage.spl.mkimage imx-boot.map \
|
mkimage-out.spl.mkimage mkimage.spl.mkimage imx-boot.map \
|
||||||
itb.fit.fit itb.fit.itb itb.map spl.map mkimage-out.rom.mkimage \
|
itb.fit.fit itb.fit.itb itb.map spl.map mkimage-out.rom.mkimage \
|
||||||
mkimage.rom.mkimage rom.map simple-bin.map simple-bin-spi.map \
|
mkimage.rom.mkimage rom.map simple-bin.map simple-bin-spi.map \
|
||||||
idbloader-spi.img lib/efi_loader/helloworld_efi.S
|
idbloader-spi.img lib/efi_loader/helloworld_efi.S *.itb
|
||||||
|
|
||||||
# Directories & files removed with 'make mrproper'
|
# Directories & files removed with 'make mrproper'
|
||||||
MRPROPER_DIRS += include/config include/generated spl tpl vpl \
|
MRPROPER_DIRS += include/config include/generated spl tpl vpl \
|
||||||
|
|||||||
@ -187,6 +187,97 @@ config RISCV_ISA_D
|
|||||||
riscv32 ABI from ilp32 to ilp32d and the riscv64 ABI from lp64 to
|
riscv32 ABI from ilp32 to ilp32d and the riscv64 ABI from lp64 to
|
||||||
lp64d.
|
lp64d.
|
||||||
|
|
||||||
|
config RISCV_ISA_ZBB
|
||||||
|
bool "Zbb extension support for bit manipulation instructions"
|
||||||
|
help
|
||||||
|
Adds ZBB extension (basic bit manipulation) to the ISA subsets
|
||||||
|
that the toolchain is allowed to emit when building U-Boot.
|
||||||
|
The Zbb extension provides instructions to accelerate a number
|
||||||
|
of bit-specific operations (count bit population, sign extending,
|
||||||
|
bitrotation, etc) and enables optimized string routines.
|
||||||
|
|
||||||
|
menu "Use assembly optimized implementation of string routines"
|
||||||
|
|
||||||
|
config USE_ARCH_STRLEN
|
||||||
|
bool "Use an assembly optimized implementation of strlen"
|
||||||
|
default y
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strlen using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
config SPL_USE_ARCH_STRLEN
|
||||||
|
bool "Use an assembly optimized implementation of strlen for SPL"
|
||||||
|
default y if USE_ARCH_STRLEN
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
depends on SPL
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strlen using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
config TPL_USE_ARCH_STRLEN
|
||||||
|
bool "Use an assembly optimized implementation of strlen for TPL"
|
||||||
|
default y if USE_ARCH_STRLEN
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
depends on TPL
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strlen using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
config USE_ARCH_STRCMP
|
||||||
|
bool "Use an assembly optimized implementation of strcmp"
|
||||||
|
default y
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strcmp using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
config SPL_USE_ARCH_STRCMP
|
||||||
|
bool "Use an assembly optimized implementation of strcmp for SPL"
|
||||||
|
default y if USE_ARCH_STRCMP
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
depends on SPL
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strcmp using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
config TPL_USE_ARCH_STRCMP
|
||||||
|
bool "Use an assembly optimized implementation of strcmp for TPL"
|
||||||
|
default y if USE_ARCH_STRCMP
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
depends on TPL
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strcmp using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
config USE_ARCH_STRNCMP
|
||||||
|
bool "Use an assembly optimized implementation of strncmp"
|
||||||
|
default y
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strncmp using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
config SPL_USE_ARCH_STRNCMP
|
||||||
|
bool "Use an assembly optimized implementation of strncmp for SPL"
|
||||||
|
default y if USE_ARCH_STRNCMP
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
depends on SPL
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strncmp using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
config TPL_USE_ARCH_STRNCMP
|
||||||
|
bool "Use an assembly optimized implementation of strncmp for TPL"
|
||||||
|
default y if USE_ARCH_STRNCMP
|
||||||
|
depends on RISCV_ISA_ZBB
|
||||||
|
depends on TPL
|
||||||
|
help
|
||||||
|
Enable the generation of an optimized version of strncmp using
|
||||||
|
Zbb extension.
|
||||||
|
|
||||||
|
endmenu
|
||||||
|
|
||||||
config RISCV_ISA_A
|
config RISCV_ISA_A
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
@ -424,4 +515,12 @@ config TPL_USE_ARCH_MEMSET
|
|||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
config SPL_LOAD_FIT_OPENSBI_OS_BOOT
|
||||||
|
bool "Enable SPL (OpenSBI OS boot mode) applying linux from FIT"
|
||||||
|
depends on SPL_LOAD_FIT
|
||||||
|
help
|
||||||
|
Use fw_dynamic from the FIT image, and u-boot SPL will invoke it directly.
|
||||||
|
This is a shortcut boot flow, from u-boot SPL -> OpenSBI -> u-boot proper
|
||||||
|
-> linux to u-boot SPL -> OpenSBI -> linux.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|||||||
@ -24,6 +24,9 @@ endif
|
|||||||
ifeq ($(CONFIG_RISCV_ISA_C),y)
|
ifeq ($(CONFIG_RISCV_ISA_C),y)
|
||||||
ARCH_C = c
|
ARCH_C = c
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(CONFIG_RISCV_ISA_ZBB),y)
|
||||||
|
ARCH_ZBB = _zbb
|
||||||
|
endif
|
||||||
ifeq ($(CONFIG_CMODEL_MEDLOW),y)
|
ifeq ($(CONFIG_CMODEL_MEDLOW),y)
|
||||||
CMODEL = medlow
|
CMODEL = medlow
|
||||||
endif
|
endif
|
||||||
@ -32,7 +35,7 @@ ifeq ($(CONFIG_CMODEL_MEDANY),y)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
RISCV_MARCH = $(ARCH_BASE)$(ARCH_A)$(ARCH_F)$(ARCH_D)$(ARCH_C)
|
RISCV_MARCH = $(ARCH_BASE)$(ARCH_A)$(ARCH_F)$(ARCH_D)$(ARCH_C)$(ARCH_ZBB)
|
||||||
ABI = $(ABI_BASE)$(ABI_D)
|
ABI = $(ABI_BASE)$(ABI_D)
|
||||||
|
|
||||||
# Newer binutils versions default to ISA spec version 20191213 which moves some
|
# Newer binutils versions default to ISA spec version 20191213 which moves some
|
||||||
|
|||||||
@ -20,19 +20,3 @@ int dram_init_banksize(void)
|
|||||||
{
|
{
|
||||||
return fdtdec_setup_memory_banksize();
|
return fdtdec_setup_memory_banksize();
|
||||||
}
|
}
|
||||||
|
|
||||||
phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Ensure that we run from first 4GB so that all
|
|
||||||
* addresses used by U-Boot are 32bit addresses.
|
|
||||||
*
|
|
||||||
* This in-turn ensures that 32bit DMA capable
|
|
||||||
* devices work fine because DMA mapping APIs will
|
|
||||||
* provide 32bit DMA addresses only.
|
|
||||||
*/
|
|
||||||
if (gd->ram_top >= SZ_4G)
|
|
||||||
return SZ_4G - 1;
|
|
||||||
|
|
||||||
return gd->ram_top;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
|
#define U64_TO_U32_H(addr) (((addr) >> 32) & 0xffffffff)
|
||||||
|
#define U64_TO_U32_L(addr) ((addr) & 0xffffffff)
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
binman: binman {
|
binman: binman {
|
||||||
multiple-images;
|
multiple-images;
|
||||||
@ -13,26 +16,47 @@
|
|||||||
|
|
||||||
&binman {
|
&binman {
|
||||||
itb {
|
itb {
|
||||||
|
|
||||||
|
#ifndef CONFIG_SPL_LOAD_FIT_OPENSBI_OS_BOOT
|
||||||
filename = "u-boot.itb";
|
filename = "u-boot.itb";
|
||||||
|
#else
|
||||||
|
filename = "linux.itb";
|
||||||
|
#endif
|
||||||
|
|
||||||
fit {
|
fit {
|
||||||
description = "Configuration to load OpenSBI before U-Boot";
|
description = "Configuration to load OpenSBI before U-Boot";
|
||||||
#address-cells = <1>;
|
#address-cells = <2>;
|
||||||
fit,fdt-list = "of-list";
|
fit,fdt-list = "of-list";
|
||||||
|
|
||||||
images {
|
images {
|
||||||
|
#ifndef CONFIG_SPL_LOAD_FIT_OPENSBI_OS_BOOT
|
||||||
uboot {
|
uboot {
|
||||||
description = "U-Boot";
|
description = "U-Boot";
|
||||||
type = "standalone";
|
type = "standalone";
|
||||||
os = "U-Boot";
|
os = "U-Boot";
|
||||||
arch = "riscv";
|
arch = "riscv";
|
||||||
compression = "none";
|
compression = "none";
|
||||||
load = <CONFIG_TEXT_BASE>;
|
load = <U64_TO_U32_H(CONFIG_TEXT_BASE)
|
||||||
|
U64_TO_U32_L(CONFIG_TEXT_BASE)>;
|
||||||
|
|
||||||
uboot_blob: blob-ext {
|
uboot_blob: blob-ext {
|
||||||
filename = "u-boot-nodtb.bin";
|
filename = "u-boot-nodtb.bin";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
#else
|
||||||
|
linux {
|
||||||
|
description = "Linux";
|
||||||
|
type = "standalone";
|
||||||
|
os = "Linux";
|
||||||
|
arch = "riscv";
|
||||||
|
compression = "none";
|
||||||
|
load = <CONFIG_TEXT_BASE>;
|
||||||
|
|
||||||
|
linux_blob: blob-ext {
|
||||||
|
filename = "Image";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
opensbi {
|
opensbi {
|
||||||
description = "OpenSBI fw_dynamic Firmware";
|
description = "OpenSBI fw_dynamic Firmware";
|
||||||
@ -40,8 +64,10 @@
|
|||||||
os = "opensbi";
|
os = "opensbi";
|
||||||
arch = "riscv";
|
arch = "riscv";
|
||||||
compression = "none";
|
compression = "none";
|
||||||
load = <CONFIG_SPL_OPENSBI_LOAD_ADDR>;
|
load = <U64_TO_U32_H(CONFIG_SPL_OPENSBI_LOAD_ADDR)
|
||||||
entry = <CONFIG_SPL_OPENSBI_LOAD_ADDR>;
|
U64_TO_U32_L(CONFIG_SPL_OPENSBI_LOAD_ADDR)>;
|
||||||
|
entry = <U64_TO_U32_H(CONFIG_SPL_OPENSBI_LOAD_ADDR)
|
||||||
|
U64_TO_U32_L(CONFIG_SPL_OPENSBI_LOAD_ADDR)>;
|
||||||
|
|
||||||
opensbi_blob: opensbi {
|
opensbi_blob: opensbi {
|
||||||
filename = "fw_dynamic.bin";
|
filename = "fw_dynamic.bin";
|
||||||
@ -68,7 +94,11 @@
|
|||||||
#endif
|
#endif
|
||||||
description = "NAME";
|
description = "NAME";
|
||||||
firmware = "opensbi";
|
firmware = "opensbi";
|
||||||
|
#ifndef CONFIG_SPL_LOAD_FIT_OPENSBI_OS_BOOT
|
||||||
loadables = "uboot";
|
loadables = "uboot";
|
||||||
|
#else
|
||||||
|
loadables = "linux";
|
||||||
|
#endif
|
||||||
#ifndef CONFIG_OF_BOARD
|
#ifndef CONFIG_OF_BOARD
|
||||||
fdt = "fdt-SEQ";
|
fdt = "fdt-SEQ";
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -40,4 +40,22 @@ extern void *memmove(void *, const void *, __kernel_size_t);
|
|||||||
#endif
|
#endif
|
||||||
extern void *memset(void *, int, __kernel_size_t);
|
extern void *memset(void *, int, __kernel_size_t);
|
||||||
|
|
||||||
|
#undef __HAVE_ARCH_STRLEN
|
||||||
|
#if CONFIG_IS_ENABLED(USE_ARCH_STRLEN)
|
||||||
|
#define __HAVE_ARCH_STRLEN
|
||||||
|
#endif
|
||||||
|
extern __kernel_size_t strlen(const char *);
|
||||||
|
|
||||||
|
#undef __HAVE_ARCH_STRCMP
|
||||||
|
#if CONFIG_IS_ENABLED(USE_ARCH_STRCMP)
|
||||||
|
#define __HAVE_ARCH_STRCMP
|
||||||
|
#endif
|
||||||
|
extern int strcmp(const char *, const char *);
|
||||||
|
|
||||||
|
#undef __HAVE_ARCH_STRNCMP
|
||||||
|
#if CONFIG_IS_ENABLED(USE_ARCH_STRNCMP)
|
||||||
|
#define __HAVE_ARCH_STRNCMP
|
||||||
|
#endif
|
||||||
|
extern int strncmp(const char *, const char *, size_t __kernel_size_t);
|
||||||
|
|
||||||
#endif /* __ASM_RISCV_STRING_H */
|
#endif /* __ASM_RISCV_STRING_H */
|
||||||
|
|||||||
@ -42,5 +42,8 @@ extra-$(CONFIG_EFI) += $(EFI_CRT0) $(EFI_RELOC)
|
|||||||
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMSET) += memset.o
|
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMSET) += memset.o
|
||||||
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMMOVE) += memmove.o
|
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMMOVE) += memmove.o
|
||||||
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMCPY) += memcpy.o
|
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMCPY) += memcpy.o
|
||||||
|
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_STRLEN) += strlen_zbb.o
|
||||||
|
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_STRCMP) += strcmp_zbb.o
|
||||||
|
obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_STRNCMP) += strncmp_zbb.o
|
||||||
|
|
||||||
obj-$(CONFIG_$(SPL_TPL_)SEMIHOSTING) += semihosting.o
|
obj-$(CONFIG_$(SPL_TPL_)SEMIHOSTING) += semihosting.o
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
|
||||||
/* pending register */
|
/* pending register */
|
||||||
#define PENDING_REG(base, hart) ((ulong)(base) + 0x1000 + ((hart) / 4) * 4)
|
#define PENDING_REG(base) ((ulong)(base) + 0x1000)
|
||||||
/* enable register */
|
/* enable register */
|
||||||
#define ENABLE_REG(base, hart) ((ulong)(base) + 0x2000 + (hart) * 0x80)
|
#define ENABLE_REG(base, hart) ((ulong)(base) + 0x2000 + (hart) * 0x80)
|
||||||
/* claim register */
|
/* claim register */
|
||||||
@ -30,10 +30,11 @@
|
|||||||
/* priority register */
|
/* priority register */
|
||||||
#define PRIORITY_REG(base) ((ulong)(base) + PLICSW_PRIORITY_BASE)
|
#define PRIORITY_REG(base) ((ulong)(base) + PLICSW_PRIORITY_BASE)
|
||||||
|
|
||||||
#define ENABLE_HART_IPI (0x01010101)
|
/* Bit 0 of PLIC-SW pending array is hardwired to zero, so we start from bit 1 */
|
||||||
#define SEND_IPI_TO_HART(hart) (0x1 << (hart))
|
#define FIRST_AVAILABLE_BIT 0x2
|
||||||
|
#define SEND_IPI_TO_HART(hart) (FIRST_AVAILABLE_BIT << (hart))
|
||||||
#define PLICSW_PRIORITY_BASE 0x4
|
#define PLICSW_PRIORITY_BASE 0x4
|
||||||
#define PLICSW_INTERRUPT_PER_HART 0x8
|
#define PLICSW_INTERRUPT_PER_HART 0x1
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@ -41,9 +42,8 @@ static int enable_ipi(int hart)
|
|||||||
{
|
{
|
||||||
unsigned int en;
|
unsigned int en;
|
||||||
|
|
||||||
en = ENABLE_HART_IPI << hart;
|
en = FIRST_AVAILABLE_BIT << hart;
|
||||||
writel(en, (void __iomem *)ENABLE_REG(gd->arch.plicsw, hart));
|
writel(en, (void __iomem *)ENABLE_REG(gd->arch.plicsw, hart));
|
||||||
writel(en, (void __iomem *)ENABLE_REG(gd->arch.plicsw + 0x4, hart));
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -75,7 +75,7 @@ int riscv_init_ipi(void)
|
|||||||
ret = uclass_find_first_device(UCLASS_CPU, &dev);
|
ret = uclass_find_first_device(UCLASS_CPU, &dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
else if (!dev)
|
if (!dev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
ofnode_for_each_subnode(node, dev_ofnode(dev->parent)) {
|
ofnode_for_each_subnode(node, dev_ofnode(dev->parent)) {
|
||||||
@ -105,10 +105,9 @@ int riscv_init_ipi(void)
|
|||||||
|
|
||||||
int riscv_send_ipi(int hart)
|
int riscv_send_ipi(int hart)
|
||||||
{
|
{
|
||||||
unsigned int ipi = (SEND_IPI_TO_HART(hart) << (8 * gd->arch.boot_hart));
|
unsigned int ipi = SEND_IPI_TO_HART(hart);
|
||||||
|
|
||||||
writel(ipi, (void __iomem *)PENDING_REG(gd->arch.plicsw,
|
writel(ipi, (void __iomem *)PENDING_REG(gd->arch.plicsw));
|
||||||
gd->arch.boot_hart));
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -125,10 +124,9 @@ int riscv_clear_ipi(int hart)
|
|||||||
|
|
||||||
int riscv_get_ipi(int hart, int *pending)
|
int riscv_get_ipi(int hart, int *pending)
|
||||||
{
|
{
|
||||||
unsigned int ipi = (SEND_IPI_TO_HART(hart) << (8 * gd->arch.boot_hart));
|
unsigned int ipi = SEND_IPI_TO_HART(hart);
|
||||||
|
|
||||||
*pending = readl((void __iomem *)PENDING_REG(gd->arch.plicsw,
|
*pending = readl((void __iomem *)PENDING_REG(gd->arch.plicsw));
|
||||||
gd->arch.boot_hart));
|
|
||||||
*pending = !!(*pending & ipi);
|
*pending = !!(*pending & ipi);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
81
arch/riscv/lib/strcmp_zbb.S
Normal file
81
arch/riscv/lib/strcmp_zbb.S
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
/*
|
||||||
|
* Taken from Linux arch/riscv/lib/strcmp.S
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include <asm/asm.h>
|
||||||
|
|
||||||
|
ENTRY(__strcmp)
|
||||||
|
WEAK(strcmp)
|
||||||
|
.option push
|
||||||
|
.option arch,+zbb
|
||||||
|
/*
|
||||||
|
* Returns
|
||||||
|
* a0 - comparison result, value like strcmp
|
||||||
|
*
|
||||||
|
* Parameters
|
||||||
|
* a0 - string1
|
||||||
|
* a1 - string2
|
||||||
|
*
|
||||||
|
* Clobbers
|
||||||
|
* t0, t1, t2, t3, t4
|
||||||
|
*/
|
||||||
|
|
||||||
|
or t2, a0, a1
|
||||||
|
li t4, -1
|
||||||
|
and t2, t2, SZREG-1
|
||||||
|
bnez t2, 3f
|
||||||
|
|
||||||
|
/* Main loop for aligned string. */
|
||||||
|
.p2align 3
|
||||||
|
1:
|
||||||
|
REG_L t0, 0(a0)
|
||||||
|
REG_L t1, 0(a1)
|
||||||
|
orc.b t3, t0
|
||||||
|
bne t3, t4, 2f
|
||||||
|
addi a0, a0, SZREG
|
||||||
|
addi a1, a1, SZREG
|
||||||
|
beq t0, t1, 1b
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Words don't match, and no null byte in the first
|
||||||
|
* word. Get bytes in big-endian order and compare.
|
||||||
|
*/
|
||||||
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
|
rev8 t0, t0
|
||||||
|
rev8 t1, t1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Synthesize (t0 >= t1) ? 1 : -1 in a branchless sequence. */
|
||||||
|
sltu a0, t0, t1
|
||||||
|
neg a0, a0
|
||||||
|
ori a0, a0, 1
|
||||||
|
ret
|
||||||
|
|
||||||
|
2:
|
||||||
|
/*
|
||||||
|
* Found a null byte.
|
||||||
|
* If words don't match, fall back to simple loop.
|
||||||
|
*/
|
||||||
|
bne t0, t1, 3f
|
||||||
|
|
||||||
|
/* Otherwise, strings are equal. */
|
||||||
|
li a0, 0
|
||||||
|
ret
|
||||||
|
|
||||||
|
/* Simple loop for misaligned strings. */
|
||||||
|
.p2align 3
|
||||||
|
3:
|
||||||
|
lbu t0, 0(a0)
|
||||||
|
lbu t1, 0(a1)
|
||||||
|
addi a0, a0, 1
|
||||||
|
addi a1, a1, 1
|
||||||
|
bne t0, t1, 4f
|
||||||
|
bnez t0, 3b
|
||||||
|
|
||||||
|
4:
|
||||||
|
sub a0, t0, t1
|
||||||
|
ret
|
||||||
|
.option pop
|
||||||
|
END(__strcmp)
|
||||||
101
arch/riscv/lib/strlen_zbb.S
Normal file
101
arch/riscv/lib/strlen_zbb.S
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
/*
|
||||||
|
* Taken from Linux arch/riscv/lib/strlen.S
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include <asm/asm.h>
|
||||||
|
|
||||||
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
|
# define CZ ctz
|
||||||
|
# define SHIFT srl
|
||||||
|
#else
|
||||||
|
# define CZ clz
|
||||||
|
# define SHIFT sll
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ENTRY(__strlen)
|
||||||
|
WEAK(strlen)
|
||||||
|
.option push
|
||||||
|
.option arch,+zbb
|
||||||
|
/*
|
||||||
|
* Returns
|
||||||
|
* a0 - string length
|
||||||
|
*
|
||||||
|
* Parameters
|
||||||
|
* a0 - String to measure
|
||||||
|
*
|
||||||
|
* Clobbers
|
||||||
|
* t0, t1, t2, t3
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Number of irrelevant bytes in the first word. */
|
||||||
|
andi t2, a0, SZREG-1
|
||||||
|
|
||||||
|
/* Align pointer. */
|
||||||
|
andi t0, a0, -SZREG
|
||||||
|
|
||||||
|
li t3, SZREG
|
||||||
|
sub t3, t3, t2
|
||||||
|
slli t2, t2, 3
|
||||||
|
|
||||||
|
/* Get the first word. */
|
||||||
|
REG_L t1, 0(t0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Shift away the partial data we loaded to remove the irrelevant bytes
|
||||||
|
* preceding the string with the effect of adding NUL bytes at the
|
||||||
|
* end of the string's first word.
|
||||||
|
*/
|
||||||
|
SHIFT t1, t1, t2
|
||||||
|
|
||||||
|
/* Convert non-NUL into 0xff and NUL into 0x00. */
|
||||||
|
orc.b t1, t1
|
||||||
|
|
||||||
|
/* Convert non-NUL into 0x00 and NUL into 0xff. */
|
||||||
|
not t1, t1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Search for the first set bit (corresponding to a NUL byte in the
|
||||||
|
* original chunk).
|
||||||
|
*/
|
||||||
|
CZ t1, t1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The first chunk is special: compare against the number
|
||||||
|
* of valid bytes in this chunk.
|
||||||
|
*/
|
||||||
|
srli a0, t1, 3
|
||||||
|
bgtu t3, a0, 2f
|
||||||
|
|
||||||
|
/* Prepare for the word comparison loop. */
|
||||||
|
addi t2, t0, SZREG
|
||||||
|
li t3, -1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Our critical loop is 4 instructions and processes data in
|
||||||
|
* 4 byte or 8 byte chunks.
|
||||||
|
*/
|
||||||
|
.p2align 3
|
||||||
|
1:
|
||||||
|
REG_L t1, SZREG(t0)
|
||||||
|
addi t0, t0, SZREG
|
||||||
|
orc.b t1, t1
|
||||||
|
beq t1, t3, 1b
|
||||||
|
|
||||||
|
not t1, t1
|
||||||
|
CZ t1, t1
|
||||||
|
srli t1, t1, 3
|
||||||
|
|
||||||
|
/* Get number of processed bytes. */
|
||||||
|
sub t2, t0, t2
|
||||||
|
|
||||||
|
/* Add number of characters in the first word. */
|
||||||
|
add a0, a0, t2
|
||||||
|
|
||||||
|
/* Add number of characters in the last word. */
|
||||||
|
add a0, a0, t1
|
||||||
|
2:
|
||||||
|
ret
|
||||||
|
.option pop
|
||||||
|
END(__strlen)
|
||||||
94
arch/riscv/lib/strncmp_zbb.S
Normal file
94
arch/riscv/lib/strncmp_zbb.S
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
/*
|
||||||
|
* Taken from Linux arch/riscv/lib/strncmp.S
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include <asm/asm.h>
|
||||||
|
|
||||||
|
ENTRY(__strncmp)
|
||||||
|
WEAK(strncmp)
|
||||||
|
.option push
|
||||||
|
.option arch,+zbb
|
||||||
|
/*
|
||||||
|
* Returns
|
||||||
|
* a0 - comparison result, like strncmp
|
||||||
|
*
|
||||||
|
* Parameters
|
||||||
|
* a0 - string1
|
||||||
|
* a1 - string2
|
||||||
|
* a2 - number of characters to compare
|
||||||
|
*
|
||||||
|
* Clobbers
|
||||||
|
* t0, t1, t2, t3, t4, t5, t6
|
||||||
|
*/
|
||||||
|
|
||||||
|
or t2, a0, a1
|
||||||
|
li t5, -1
|
||||||
|
and t2, t2, SZREG-1
|
||||||
|
add t4, a0, a2
|
||||||
|
bnez t2, 3f
|
||||||
|
|
||||||
|
/* Adjust limit for fast-path. */
|
||||||
|
andi t6, t4, -SZREG
|
||||||
|
|
||||||
|
/* Main loop for aligned string. */
|
||||||
|
.p2align 3
|
||||||
|
1:
|
||||||
|
bge a0, t6, 3f
|
||||||
|
REG_L t0, 0(a0)
|
||||||
|
REG_L t1, 0(a1)
|
||||||
|
orc.b t3, t0
|
||||||
|
bne t3, t5, 2f
|
||||||
|
orc.b t3, t1
|
||||||
|
bne t3, t5, 2f
|
||||||
|
addi a0, a0, SZREG
|
||||||
|
addi a1, a1, SZREG
|
||||||
|
beq t0, t1, 1b
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Words don't match, and no null byte in the first
|
||||||
|
* word. Get bytes in big-endian order and compare.
|
||||||
|
*/
|
||||||
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
|
rev8 t0, t0
|
||||||
|
rev8 t1, t1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Synthesize (t0 >= t1) ? 1 : -1 in a branchless sequence. */
|
||||||
|
sltu a0, t0, t1
|
||||||
|
neg a0, a0
|
||||||
|
ori a0, a0, 1
|
||||||
|
ret
|
||||||
|
|
||||||
|
2:
|
||||||
|
/*
|
||||||
|
* Found a null byte.
|
||||||
|
* If words don't match, fall back to simple loop.
|
||||||
|
*/
|
||||||
|
bne t0, t1, 3f
|
||||||
|
|
||||||
|
/* Otherwise, strings are equal. */
|
||||||
|
li a0, 0
|
||||||
|
ret
|
||||||
|
|
||||||
|
/* Simple loop for misaligned strings. */
|
||||||
|
.p2align 3
|
||||||
|
3:
|
||||||
|
bge a0, t4, 5f
|
||||||
|
lbu t0, 0(a0)
|
||||||
|
lbu t1, 0(a1)
|
||||||
|
addi a0, a0, 1
|
||||||
|
addi a1, a1, 1
|
||||||
|
bne t0, t1, 4f
|
||||||
|
bnez t0, 3b
|
||||||
|
|
||||||
|
4:
|
||||||
|
sub a0, t0, t1
|
||||||
|
ret
|
||||||
|
|
||||||
|
5:
|
||||||
|
li a0, 0
|
||||||
|
ret
|
||||||
|
.option pop
|
||||||
|
END(__strncmp)
|
||||||
@ -19,6 +19,8 @@
|
|||||||
#include <fdtdec.h>
|
#include <fdtdec.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
|
#include <mapmem.h>
|
||||||
|
#include <hang.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@ -26,6 +28,29 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||||||
* Miscellaneous platform dependent initializations
|
* Miscellaneous platform dependent initializations
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if CONFIG_IS_ENABLED(LOAD_FIT) || CONFIG_IS_ENABLED(LOAD_FIT_FULL)
|
||||||
|
#define ANDES_SPL_FDT_ADDR (CONFIG_TEXT_BASE - 0x100000)
|
||||||
|
void spl_perform_fixups(struct spl_image_info *spl_image)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Originally, u-boot-spl will place DTB directly after the kernel,
|
||||||
|
* but the size of the kernel did not include the BSS section, which
|
||||||
|
* means u-boot-spl will place the DTB in the kernel BSS section
|
||||||
|
* causing the DTB to be cleared by kernel BSS initializtion.
|
||||||
|
* Moving DTB in front of the kernel can avoid the error.
|
||||||
|
*/
|
||||||
|
if (ANDES_SPL_FDT_ADDR < 0) {
|
||||||
|
printf("%s: CONFIG_TEXT_BASE needs to be larger than 0x100000\n",
|
||||||
|
__func__);
|
||||||
|
hang();
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy((void *)ANDES_SPL_FDT_ADDR, spl_image->fdt_addr,
|
||||||
|
fdt_totalsize(spl_image->fdt_addr));
|
||||||
|
spl_image->fdt_addr = map_sysmem(ANDES_SPL_FDT_ADDR, 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int board_init(void)
|
int board_init(void)
|
||||||
{
|
{
|
||||||
gd->bd->bi_boot_params = PHYS_SDRAM_0 + 0x400;
|
gd->bd->bi_boot_params = PHYS_SDRAM_0 + 0x400;
|
||||||
|
|||||||
@ -367,7 +367,8 @@ static bool os_takes_devicetree(uint8_t os)
|
|||||||
case IH_OS_U_BOOT:
|
case IH_OS_U_BOOT:
|
||||||
return true;
|
return true;
|
||||||
case IH_OS_LINUX:
|
case IH_OS_LINUX:
|
||||||
return IS_ENABLED(CONFIG_SPL_OS_BOOT);
|
return IS_ENABLED(CONFIG_SPL_OS_BOOT) ||
|
||||||
|
IS_ENABLED(CONFIG_SPL_OPENSBI);
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,7 +21,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||||||
|
|
||||||
struct fw_dynamic_info opensbi_info;
|
struct fw_dynamic_info opensbi_info;
|
||||||
|
|
||||||
static int spl_opensbi_find_uboot_node(void *blob, int *uboot_node)
|
static int spl_opensbi_find_os_node(void *blob, int *uboot_node, int os_type)
|
||||||
{
|
{
|
||||||
int fit_images_node, node;
|
int fit_images_node, node;
|
||||||
const char *fit_os;
|
const char *fit_os;
|
||||||
@ -35,7 +35,7 @@ static int spl_opensbi_find_uboot_node(void *blob, int *uboot_node)
|
|||||||
if (!fit_os)
|
if (!fit_os)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (genimg_get_os_id(fit_os) == IH_OS_U_BOOT) {
|
if (genimg_get_os_id(fit_os) == os_type) {
|
||||||
*uboot_node = node;
|
*uboot_node = node;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -46,8 +46,9 @@ static int spl_opensbi_find_uboot_node(void *blob, int *uboot_node)
|
|||||||
|
|
||||||
void __noreturn spl_invoke_opensbi(struct spl_image_info *spl_image)
|
void __noreturn spl_invoke_opensbi(struct spl_image_info *spl_image)
|
||||||
{
|
{
|
||||||
int ret, uboot_node;
|
int ret, os_node;
|
||||||
ulong uboot_entry;
|
ulong os_entry;
|
||||||
|
int os_type;
|
||||||
typedef void __noreturn (*opensbi_entry_t)(ulong hartid, ulong dtb, ulong info);
|
typedef void __noreturn (*opensbi_entry_t)(ulong hartid, ulong dtb, ulong info);
|
||||||
opensbi_entry_t opensbi_entry;
|
opensbi_entry_t opensbi_entry;
|
||||||
|
|
||||||
@ -56,22 +57,32 @@ void __noreturn spl_invoke_opensbi(struct spl_image_info *spl_image)
|
|||||||
hang();
|
hang();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find U-Boot image in /fit-images */
|
/*
|
||||||
ret = spl_opensbi_find_uboot_node(spl_image->fdt_addr, &uboot_node);
|
* Find next os image in /fit-images
|
||||||
|
* The next os image default is u-boot proper, once enable
|
||||||
|
* OpenSBI OS boot mode, the OS image should be linux.
|
||||||
|
*/
|
||||||
|
if (CONFIG_IS_ENABLED(LOAD_FIT_OPENSBI_OS_BOOT))
|
||||||
|
os_type = IH_OS_LINUX;
|
||||||
|
else
|
||||||
|
os_type = IH_OS_U_BOOT;
|
||||||
|
|
||||||
|
ret = spl_opensbi_find_os_node(spl_image->fdt_addr, &os_node, os_type);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("Can't find U-Boot node, %d\n", ret);
|
pr_err("Can't find %s node for opensbi, %d\n",
|
||||||
|
genimg_get_os_name(os_type), ret);
|
||||||
hang();
|
hang();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get U-Boot entry point */
|
/* Get U-Boot entry point */
|
||||||
ret = fit_image_get_entry(spl_image->fdt_addr, uboot_node, &uboot_entry);
|
ret = fit_image_get_entry(spl_image->fdt_addr, os_node, &os_entry);
|
||||||
if (ret)
|
if (ret)
|
||||||
ret = fit_image_get_load(spl_image->fdt_addr, uboot_node, &uboot_entry);
|
ret = fit_image_get_load(spl_image->fdt_addr, os_node, &os_entry);
|
||||||
|
|
||||||
/* Prepare opensbi_info object */
|
/* Prepare opensbi_info object */
|
||||||
opensbi_info.magic = FW_DYNAMIC_INFO_MAGIC_VALUE;
|
opensbi_info.magic = FW_DYNAMIC_INFO_MAGIC_VALUE;
|
||||||
opensbi_info.version = FW_DYNAMIC_INFO_VERSION;
|
opensbi_info.version = FW_DYNAMIC_INFO_VERSION;
|
||||||
opensbi_info.next_addr = uboot_entry;
|
opensbi_info.next_addr = os_entry;
|
||||||
opensbi_info.next_mode = FW_DYNAMIC_INFO_NEXT_MODE_S;
|
opensbi_info.next_mode = FW_DYNAMIC_INFO_NEXT_MODE_S;
|
||||||
opensbi_info.options = CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS;
|
opensbi_info.options = CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS;
|
||||||
opensbi_info.boot_hart = gd->arch.boot_hart;
|
opensbi_info.boot_hart = gd->arch.boot_hart;
|
||||||
|
|||||||
60
configs/ae350_rv32_falcon_defconfig
Normal file
60
configs/ae350_rv32_falcon_defconfig
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
CONFIG_RISCV=y
|
||||||
|
CONFIG_TEXT_BASE=0x01800000
|
||||||
|
CONFIG_SYS_MALLOC_LEN=0x80000
|
||||||
|
CONFIG_NR_DRAM_BANKS=2
|
||||||
|
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
|
||||||
|
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x10000000
|
||||||
|
CONFIG_ENV_SECT_SIZE=0x1000
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="ae350_32"
|
||||||
|
CONFIG_SYS_PROMPT="RISC-V # "
|
||||||
|
CONFIG_SYS_MONITOR_LEN=786432
|
||||||
|
CONFIG_SPL_SYS_MALLOC_F_LEN=0x2000000
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_SYS_LOAD_ADDR=0x100000
|
||||||
|
CONFIG_TARGET_ANDES_AE350=y
|
||||||
|
CONFIG_RISCV_SMODE=y
|
||||||
|
# CONFIG_AVAILABLE_HARTS is not set
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_SPL_LOAD_FIT_ADDRESS=0x10000000
|
||||||
|
CONFIG_SYS_MONITOR_BASE=0x88000000
|
||||||
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_BOOTDELAY=3
|
||||||
|
CONFIG_DISPLAY_CPUINFO=y
|
||||||
|
CONFIG_DISPLAY_BOARDINFO=y
|
||||||
|
CONFIG_BOARD_EARLY_INIT_F=y
|
||||||
|
CONFIG_SPL_MAX_SIZE=0x100000
|
||||||
|
CONFIG_SPL_BSS_START_ADDR=0x400000
|
||||||
|
CONFIG_SPL_BOARD_INIT=y
|
||||||
|
CONFIG_SPL_CACHE=y
|
||||||
|
CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
|
||||||
|
CONFIG_SYS_PBSIZE=1050
|
||||||
|
CONFIG_SYS_BOOTM_LEN=0x4000000
|
||||||
|
CONFIG_CMD_IMLS=y
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_SF_TEST=y
|
||||||
|
# CONFIG_CMD_SETEXPR is not set
|
||||||
|
CONFIG_BOOTP_PREFER_SERVERIP=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_ENV_OVERWRITE=y
|
||||||
|
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||||
|
CONFIG_NET_RETRY_COUNT=50
|
||||||
|
CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_FTSDC010=y
|
||||||
|
CONFIG_FTSDC010_SDIO=y
|
||||||
|
CONFIG_MTD_NOR_FLASH=y
|
||||||
|
CONFIG_FLASH_CFI_DRIVER=y
|
||||||
|
CONFIG_SYS_FLASH_CFI_WIDTH_16BIT=y
|
||||||
|
CONFIG_FLASH_SHOW_PROGRESS=0
|
||||||
|
CONFIG_SYS_CFI_FLASH_STATUS_POLL=y
|
||||||
|
CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
||||||
|
CONFIG_SYS_FLASH_CFI=y
|
||||||
|
CONFIG_SPI_FLASH_MACRONIX=y
|
||||||
|
CONFIG_FTMAC100=y
|
||||||
|
CONFIG_BAUDRATE=38400
|
||||||
|
CONFIG_SYS_NS16550=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_ATCSPI200_SPI=y
|
||||||
|
# CONFIG_BINMAN_FDT is not set
|
||||||
|
CONFIG_SPL_LOAD_FIT_OPENSBI_OS_BOOT=y
|
||||||
61
configs/ae350_rv32_falcon_xip_defconfig
Normal file
61
configs/ae350_rv32_falcon_xip_defconfig
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
CONFIG_RISCV=y
|
||||||
|
CONFIG_TEXT_BASE=0x01800000
|
||||||
|
CONFIG_SYS_MALLOC_LEN=0x80000
|
||||||
|
CONFIG_NR_DRAM_BANKS=2
|
||||||
|
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
|
||||||
|
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x10000000
|
||||||
|
CONFIG_ENV_SECT_SIZE=0x1000
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="ae350_32"
|
||||||
|
CONFIG_SPL_TEXT_BASE=0x80000000
|
||||||
|
CONFIG_SYS_PROMPT="RISC-V # "
|
||||||
|
CONFIG_SYS_MONITOR_LEN=786432
|
||||||
|
CONFIG_SPL_SYS_MALLOC_F_LEN=0x2000000
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_SYS_LOAD_ADDR=0x100000
|
||||||
|
CONFIG_TARGET_ANDES_AE350=y
|
||||||
|
CONFIG_RISCV_SMODE=y
|
||||||
|
CONFIG_SPL_XIP=y
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_SPL_LOAD_FIT_ADDRESS=0x80010000
|
||||||
|
CONFIG_SYS_MONITOR_BASE=0x88000000
|
||||||
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_BOOTDELAY=3
|
||||||
|
CONFIG_DISPLAY_CPUINFO=y
|
||||||
|
CONFIG_DISPLAY_BOARDINFO=y
|
||||||
|
CONFIG_BOARD_EARLY_INIT_F=y
|
||||||
|
CONFIG_SPL_MAX_SIZE=0x100000
|
||||||
|
CONFIG_SPL_BSS_START_ADDR=0x400000
|
||||||
|
CONFIG_SPL_BOARD_INIT=y
|
||||||
|
CONFIG_SPL_CACHE=y
|
||||||
|
CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
|
||||||
|
CONFIG_SYS_PBSIZE=1050
|
||||||
|
CONFIG_SYS_BOOTM_LEN=0x4000000
|
||||||
|
CONFIG_CMD_IMLS=y
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_SF_TEST=y
|
||||||
|
# CONFIG_CMD_SETEXPR is not set
|
||||||
|
CONFIG_BOOTP_PREFER_SERVERIP=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_ENV_OVERWRITE=y
|
||||||
|
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||||
|
CONFIG_NET_RETRY_COUNT=50
|
||||||
|
CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_FTSDC010=y
|
||||||
|
CONFIG_FTSDC010_SDIO=y
|
||||||
|
CONFIG_MTD_NOR_FLASH=y
|
||||||
|
CONFIG_FLASH_CFI_DRIVER=y
|
||||||
|
CONFIG_SYS_FLASH_CFI_WIDTH_16BIT=y
|
||||||
|
CONFIG_FLASH_SHOW_PROGRESS=0
|
||||||
|
CONFIG_SYS_CFI_FLASH_STATUS_POLL=y
|
||||||
|
CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
||||||
|
CONFIG_SYS_FLASH_CFI=y
|
||||||
|
CONFIG_SPI_FLASH_MACRONIX=y
|
||||||
|
CONFIG_FTMAC100=y
|
||||||
|
CONFIG_BAUDRATE=38400
|
||||||
|
CONFIG_SYS_NS16550=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_ATCSPI200_SPI=y
|
||||||
|
# CONFIG_BINMAN_FDT is not set
|
||||||
|
CONFIG_SPL_LOAD_FIT_OPENSBI_OS_BOOT=y
|
||||||
60
configs/ae350_rv64_falcon_defconfig
Normal file
60
configs/ae350_rv64_falcon_defconfig
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
CONFIG_RISCV=y
|
||||||
|
CONFIG_TEXT_BASE=0x01800000
|
||||||
|
CONFIG_SYS_MALLOC_LEN=0x80000
|
||||||
|
CONFIG_NR_DRAM_BANKS=2
|
||||||
|
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
|
||||||
|
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x10000000
|
||||||
|
CONFIG_ENV_SECT_SIZE=0x1000
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="ae350_64"
|
||||||
|
CONFIG_SYS_PROMPT="RISC-V # "
|
||||||
|
CONFIG_SPL_SYS_MALLOC_F_LEN=0x2000000
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_SYS_LOAD_ADDR=0x100000
|
||||||
|
CONFIG_TARGET_ANDES_AE350=y
|
||||||
|
CONFIG_ARCH_RV64I=y
|
||||||
|
CONFIG_RISCV_SMODE=y
|
||||||
|
# CONFIG_AVAILABLE_HARTS is not set
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_SPL_LOAD_FIT_ADDRESS=0x10000000
|
||||||
|
CONFIG_SYS_MONITOR_BASE=0x88000000
|
||||||
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_BOOTDELAY=3
|
||||||
|
CONFIG_DISPLAY_CPUINFO=y
|
||||||
|
CONFIG_DISPLAY_BOARDINFO=y
|
||||||
|
CONFIG_BOARD_EARLY_INIT_F=y
|
||||||
|
CONFIG_SPL_MAX_SIZE=0x100000
|
||||||
|
CONFIG_SPL_BSS_START_ADDR=0x400000
|
||||||
|
CONFIG_SPL_BOARD_INIT=y
|
||||||
|
CONFIG_SPL_CACHE=y
|
||||||
|
CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
|
||||||
|
CONFIG_SYS_PBSIZE=1050
|
||||||
|
CONFIG_SYS_BOOTM_LEN=0x4000000
|
||||||
|
CONFIG_CMD_IMLS=y
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_SF_TEST=y
|
||||||
|
# CONFIG_CMD_SETEXPR is not set
|
||||||
|
CONFIG_BOOTP_PREFER_SERVERIP=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_ENV_OVERWRITE=y
|
||||||
|
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||||
|
CONFIG_NET_RETRY_COUNT=50
|
||||||
|
CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_FTSDC010=y
|
||||||
|
CONFIG_FTSDC010_SDIO=y
|
||||||
|
CONFIG_MTD_NOR_FLASH=y
|
||||||
|
CONFIG_FLASH_CFI_DRIVER=y
|
||||||
|
CONFIG_SYS_FLASH_CFI_WIDTH_16BIT=y
|
||||||
|
CONFIG_FLASH_SHOW_PROGRESS=0
|
||||||
|
CONFIG_SYS_CFI_FLASH_STATUS_POLL=y
|
||||||
|
CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
||||||
|
CONFIG_SYS_FLASH_CFI=y
|
||||||
|
CONFIG_SPI_FLASH_MACRONIX=y
|
||||||
|
CONFIG_FTMAC100=y
|
||||||
|
CONFIG_BAUDRATE=38400
|
||||||
|
CONFIG_SYS_NS16550=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_ATCSPI200_SPI=y
|
||||||
|
# CONFIG_BINMAN_FDT is not set
|
||||||
|
CONFIG_SPL_LOAD_FIT_OPENSBI_OS_BOOT=y
|
||||||
61
configs/ae350_rv64_falcon_xip_defconfig
Normal file
61
configs/ae350_rv64_falcon_xip_defconfig
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
CONFIG_RISCV=y
|
||||||
|
CONFIG_TEXT_BASE=0x01800000
|
||||||
|
CONFIG_SYS_MALLOC_LEN=0x80000
|
||||||
|
CONFIG_NR_DRAM_BANKS=2
|
||||||
|
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
|
||||||
|
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x10000000
|
||||||
|
CONFIG_ENV_SECT_SIZE=0x1000
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="ae350_64"
|
||||||
|
CONFIG_SPL_TEXT_BASE=0x80000000
|
||||||
|
CONFIG_SYS_PROMPT="RISC-V # "
|
||||||
|
CONFIG_SPL_SYS_MALLOC_F_LEN=0x2000000
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_SYS_LOAD_ADDR=0x100000
|
||||||
|
CONFIG_TARGET_ANDES_AE350=y
|
||||||
|
CONFIG_ARCH_RV64I=y
|
||||||
|
CONFIG_RISCV_SMODE=y
|
||||||
|
CONFIG_SPL_XIP=y
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_SPL_LOAD_FIT_ADDRESS=0x80010000
|
||||||
|
CONFIG_SYS_MONITOR_BASE=0x88000000
|
||||||
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_BOOTDELAY=3
|
||||||
|
CONFIG_DISPLAY_CPUINFO=y
|
||||||
|
CONFIG_DISPLAY_BOARDINFO=y
|
||||||
|
CONFIG_BOARD_EARLY_INIT_F=y
|
||||||
|
CONFIG_SPL_MAX_SIZE=0x100000
|
||||||
|
CONFIG_SPL_BSS_START_ADDR=0x400000
|
||||||
|
CONFIG_SPL_BOARD_INIT=y
|
||||||
|
CONFIG_SPL_CACHE=y
|
||||||
|
CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
|
||||||
|
CONFIG_SYS_PBSIZE=1050
|
||||||
|
CONFIG_SYS_BOOTM_LEN=0x4000000
|
||||||
|
CONFIG_CMD_IMLS=y
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_SF_TEST=y
|
||||||
|
# CONFIG_CMD_SETEXPR is not set
|
||||||
|
CONFIG_BOOTP_PREFER_SERVERIP=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_ENV_OVERWRITE=y
|
||||||
|
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||||
|
CONFIG_NET_RETRY_COUNT=50
|
||||||
|
CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_FTSDC010=y
|
||||||
|
CONFIG_FTSDC010_SDIO=y
|
||||||
|
CONFIG_MTD_NOR_FLASH=y
|
||||||
|
CONFIG_FLASH_CFI_DRIVER=y
|
||||||
|
CONFIG_SYS_FLASH_CFI_WIDTH_16BIT=y
|
||||||
|
CONFIG_FLASH_SHOW_PROGRESS=0
|
||||||
|
CONFIG_SYS_CFI_FLASH_STATUS_POLL=y
|
||||||
|
CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
||||||
|
CONFIG_SYS_FLASH_CFI=y
|
||||||
|
CONFIG_SPI_FLASH_MACRONIX=y
|
||||||
|
CONFIG_FTMAC100=y
|
||||||
|
CONFIG_BAUDRATE=38400
|
||||||
|
CONFIG_SYS_NS16550=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_ATCSPI200_SPI=y
|
||||||
|
# CONFIG_BINMAN_FDT is not set
|
||||||
|
CONFIG_SPL_LOAD_FIT_OPENSBI_OS_BOOT=y
|
||||||
@ -31,6 +31,7 @@ CONFIG_RISCV_SMODE=y
|
|||||||
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||||
CONFIG_FIT=y
|
CONFIG_FIT=y
|
||||||
CONFIG_DISTRO_DEFAULTS=y
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_BOOTSTAGE=y
|
||||||
CONFIG_QSPI_BOOT=y
|
CONFIG_QSPI_BOOT=y
|
||||||
CONFIG_SD_BOOT=y
|
CONFIG_SD_BOOT=y
|
||||||
CONFIG_OF_BOARD_SETUP=y
|
CONFIG_OF_BOARD_SETUP=y
|
||||||
@ -72,6 +73,7 @@ CONFIG_CMD_I2C=y
|
|||||||
CONFIG_CMD_PCI=y
|
CONFIG_CMD_PCI=y
|
||||||
CONFIG_CMD_USB=y
|
CONFIG_CMD_USB=y
|
||||||
CONFIG_CMD_TFTPPUT=y
|
CONFIG_CMD_TFTPPUT=y
|
||||||
|
CONFIG_CMD_BOOTSTAGE=y
|
||||||
CONFIG_OF_BOARD=y
|
CONFIG_OF_BOARD=y
|
||||||
CONFIG_ENV_OVERWRITE=y
|
CONFIG_ENV_OVERWRITE=y
|
||||||
CONFIG_ENV_IS_NOWHERE=y
|
CONFIG_ENV_IS_NOWHERE=y
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user