riscv: Enable efi_loader support
v3 cover riscv: Enable efi_loader support
We now have RISC-V support in U-Boot - which is great!
However, not that we're finally making progress to converge on efi_loader and distro boot for booting on ARM platforms, we really want to make sure there is no technical reason not to do the same on RISC-V as well.
So this patch set introduces distro boot and efi_loader support for RISC-V!
So far, I've only tested it with the selftest and hello world target in U-Boot, as the number of target binaries to run is still slim. But it should at least give us a good starting point.
v1 -> v2:
- Allow 32bit target
- Also save/restore ra, sp
- Use edk2 default boot file names
- Enable hello world binary
- remove patch: efi_loader: selftest: Do not build relocation tests for risc-v
- new patch: riscv: Add EFI application infrastructure
v2 -> v3:
- Add missing crt0 source
- Use official values for vci
Alexander Graf (8):
riscv: Add setjmp/longjmp code
riscv: Enable function sections
riscv: Add EFI application infrastructure
riscv: Add board_quiesce_devices stub
efi_loader: Use EFI_CACHELINE_SIZE in the image loader too
distro: Extend with RISC-V defines
riscv: nx25: Enable distro boot
efi_loader: Enable RISC-V support
arch/riscv/config.mk | 7 +- arch/riscv/cpu/nx25/u-boot.lds | 16 ++++ arch/riscv/include/asm/setjmp.h | 26 ++++++ arch/riscv/include/asm/u-boot-riscv.h | 1 + arch/riscv/lib/Makefile | 12 +++ arch/riscv/lib/bootm.c | 4 + arch/riscv/lib/crt0_riscv_efi.S | 152 ++++++++++++++++++++++++++++++++++ arch/riscv/lib/elf_riscv32_efi.lds | 70 ++++++++++++++++ arch/riscv/lib/elf_riscv64_efi.lds | 70 ++++++++++++++++ arch/riscv/lib/reloc_riscv_efi.c | 97 ++++++++++++++++++++++ arch/riscv/lib/setjmp.S | 66 +++++++++++++++ cmd/Kconfig | 2 +- configs/nx25-ae250_defconfig | 1 + include/config_distro_bootcmd.h | 11 +++ include/configs/nx25-ae250.h | 17 ++++ include/efi_loader.h | 7 ++ lib/efi_loader/Kconfig | 2 +- lib/efi_loader/efi_image_loader.c | 2 +- lib/efi_loader/efi_runtime.c | 48 ++++++++--- 19 files changed, 595 insertions(+), 16 deletions(-) create mode 100644 arch/riscv/include/asm/setjmp.h create mode 100644 arch/riscv/lib/crt0_riscv_efi.S create mode 100644 arch/riscv/lib/elf_riscv32_efi.lds create mode 100644 arch/riscv/lib/elf_riscv64_efi.lds create mode 100644 arch/riscv/lib/reloc_riscv_efi.c create mode 100644 arch/riscv/lib/setjmp.S
Signature · 1 line
2.12.3
PATCH v3 1/8 riscv: Add setjmp/longjmp code
To support efi_loader we need to have platform support for setjmp/longjmp. Add it here.
---
v1 -> v2:
- Allow 32bit target
- Also save/restore ra, sp
--- arch/riscv/include/asm/setjmp.h | 26 ++++++++++++++++ arch/riscv/lib/Makefile | 1 + arch/riscv/lib/setjmp.S | 66 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 arch/riscv/include/asm/setjmp.h create mode 100644 arch/riscv/lib/setjmp.S
arch/riscv/include/asm/setjmp.h new file +26 -0
@@ -0,0 +1,26 @@ +/* +* (C) Copyright 2018 Alexander Graf <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef _SETJMP_H_ +#define _SETJMP_H_ 1 + +/* +* This really should be opaque, but the EFI implementation wrongly +* assumes that a 'struct jmp_buf_data' is defined. +*/ +struct jmp_buf_data { +/* x2, x8, x9, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, sp */ +unsigned long s_regs[12 ];/* s0 - s11 */ +unsigned long ra; +unsigned long sp; +}; + +typedef struct jmp_buf_data jmp_buf [1 ]; + +int setjmp (jmp_buf jmp); +void longjmp (jmp_buf jmp,int ret); + +#endif /* _SETJMP_H_ */
arch/riscv/lib/Makefile +1 -0
@@ -12,3 +12,4 @@ obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-$(CONFIG_CMD_GO) += boot.o obj-y += cache.o obj-y += interrupts.o +obj-y += setjmp.o
arch/riscv/lib/setjmp.S new file +66 -0
66 lines not on this page · raw message
Signature · 1 line
2.12.3
PATCH v3 1/8 riscv: Add setjmp/longjmp code
Quoted 131 lines
-----Original Message-----
From: Alexander Graf [mailto:agraf at suse.de]
Sent: Monday, April 23, 2018 2:00 PM
To: u-boot at lists.denx.de
Cc: Rick Jian-Zhi Chen(陳建志); Greentime Hu; Philipp Tomsich; Heinrich Schuchardt; schwab at suse.de
Subject: [PATCH v3 1/8] riscv: Add setjmp/longjmp codeTo support
efi_loaderwe need to have platform support for setjmp/longjmp. Add it here.Signed-off-by Alexander Graf <[email protected]>---
v1 -> v2:
- Allow 32bit target
- Also save/restore ra, sp--- arch/riscv/include/asm/setjmp.h | 26 ++++++++++++++++ arch/riscv/lib/Makefile | 1 + arch/riscv/lib/setjmp.S | 66 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 arch/riscv/include/asm/setjmp.h create mode 100644
arch/riscv/lib/setjmp.Sarch/riscv/include/asm/setjmp.h new file +26
-0@@ -0,0 +1,26 @@ +/* +* (C) Copyright 2018 Alexander Graf <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef _SETJMP_H_ +#define _SETJMP_H_ 1 + +/* +* This really should be opaque, but the EFI implementation wrongly +* assumes that a 'struct jmp_buf_data' is defined. +*/ +struct jmp_buf_data { +/* x2, x8, x9, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, sp */ +unsigned long s_regs[12 ];/* s0 - s11 */ +unsigned long ra; +unsigned long sp; +}; + +typedef struct jmp_buf_data jmp_buf [1 ]; + +int setjmp (jmp_buf jmp); +void longjmp (jmp_buf jmp,int ret); + +#endif /* _SETJMP_H_ */ arch/riscv/lib/Makefile index renamed from arch/riscv/lib/Makefile +0
-0
323cf3e835..6d97aa2719100644arch/riscv/lib/Makefile +1
-0@@ -12,3 +12,4 @@ obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-$(CONFIG_CMD_GO) += boot.o obj-y += cache.o obj-y += interrupts.o +obj-y += setjmp.oarch/riscv/lib/setjmp.S new file +56
-0@@ -0,0 +1,66 @@ +/* + * (C) 2018 Alexander Graf <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <config.h> +#include <linux/linkage.h> + +#ifdef CONFIG_CPU_RISCV_64 +#define STORE_IDX(reg, idx) sd reg, (idx*8)(a0) +#define LOAD_IDX(reg, idx) ld reg, (idx*8)(a0) +#else +#define STORE_IDX(reg, idx) sw reg, (idx*4)(a0) +#define LOAD_IDX(reg, idx) lw reg, (idx*4)(a0) +#endif + +.pushsection .text.setjmp, "ax" +ENTRY(setjmp) + /* Preserve all callee-saved registers and the SP */ + STORE_IDX(s0, 0) + STORE_IDX(s1, 1) + STORE_IDX(s2, 2) + STORE_IDX(s3, 3) + STORE_IDX(s4, 4) + STORE_IDX(s5, 5) + STORE_IDX(s6, 6) + STORE_IDX(s7, 7) + STORE_IDX(s8, 8) + STORE_IDX(s9, 9) + STORE_IDX(s10, 10) + STORE_IDX(s11, 11) + STORE_IDX(ra, 12) + STORE_IDX(sp, 13) + li a0, 0 + ret +ENDPROC(setjmp) +.popsection + +.pushsection .text.longjmp, "ax" +ENTRY(longjmp) + LOAD_IDX(s0, 0) + LOAD_IDX(s1, 1) + LOAD_IDX(s2, 2) + LOAD_IDX(s3, 3) + LOAD_IDX(s4, 4) + LOAD_IDX(s5, 5) + LOAD_IDX(s6, 6) + LOAD_IDX(s7, 7) + LOAD_IDX(s8, 8) + LOAD_IDX(s9, 9) + LOAD_IDX(s10, 10) + LOAD_IDX(s11, 11) + LOAD_IDX(ra, 12) + LOAD_IDX(sp, 13) +
arch/riscv/lib/setjmp.S line 66
Quoted 10 lines
arch/riscv/lib/setjmp.S new file +10
-0+ /* Move the return value in place, but return 1 if passed 0. */ + beq a1, zero, longjmp_1 + mv a0, a1 + ret + + longjmp_1: + li a0, 1 + ret +ENDPROC(longjmp) +.popsection
Quoted 2 lines
--
2.12.3
CONFIDENTIALITY NOTICE:
This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.
Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.
PATCH v3 2/8 riscv: Enable function sections
In reply to Alexander GrafThe linker can remove sections that are never addressed, so it makes a lot of sense to declare every function as an individual section.
This reduces the output U-Boot code size by ~30kb for me.
--- arch/riscv/config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/riscv/config.mk +1 -1
@@ -29,5 +29,5 @@ CONFIG_STANDALONE_LOAD_ADDR = 0x00000000 \ -T $(srctree)/examples/standalone/riscv.lds PLATFORM_CPPFLAGS += -ffixed-gp -fpic -PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 +PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 -ffunction-sections LDFLAGS_u-boot += --gc-sections -static -pie
Signature · 1 line
2.12.3
PATCH v3 2/8 riscv: Enable function sections
Quoted 15 lines · Alexander Graf
The linker can remove sections that are never addressed, so it makes a lot of sense to declare every function as an individual section.
This reduces the output U-Boot code size by ~30kb for me.
Signed-off-by Alexander Graf <[email protected]>--- arch/riscv/config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/riscv/config.mk +0
-0
arch/riscv/config.mk CONFIG_STANDALONE_LOAD_ADDR = 0x00000000 \ · line 32
Quoted 5 lines
arch/riscv/config.mk +1
-1@@ -29,5 +29,5 @@ CONFIG_STANDALONE_LOAD_ADDR = 0x00000000 \ -T $(srctree)/examples/standalone/riscv.lds PLATFORM_CPPFLAGS += -ffixed-gp -fpic -PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 +PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 -ffunction-sections
Other architectures also use -fdata-sections.
Why wouldn't we set it for RISC-V?
Cf.
https://gcc.gnu.org/onlinedocs/gcc-7.3.0/gcc/Optimize-Options.html#index-fdata-sections
Regards
Heinrich
Quoted 2 lines
arch/riscv/config.mk +0
-0LDFLAGS_u-boot += --gc-sections -static -pie
PATCH v3 2/8 riscv: Enable function sections
Quoted 14 lines · Heinrich Schuchardt
Quoted 11 lines · Alexander Graf
The linker can remove sections that are never addressed, so it makes a lot
of sense to declare every function as an individual section.This reduces the output U-Boot code size by ~30kb for me.
Signed-off-by Alexander Graf <[email protected]>---
arch/riscv/config.mk| 2 +-1 file changed, 1 insertion(+), 1 deletion(-)
Quoted 13 lines
arch/riscv/config.mk
Quoted 10 lines
arch/riscv/config.mk +0
-0@@ -29,5 +29,5 @@ CONFIG_STANDALONE_LOAD_ADDR = 0x00000000 \-T $(srctree)/examples/standalone/riscv.lds PLATFORM_CPPFLAGS += -ffixed-gp -fpic
arch/riscv/config.mk +1
-2-PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 +PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 -ffunction-sectionsOther architectures also use -fdata-sections.
Why wouldn't we set it for RISC-V?
I think we could. That definitely makes sense as a follow-up patch - ideally slightly more cross-architecture :).
Alex
PATCH v3 2/8 riscv: Enable function sections
In reply to Alexander GrafQuoted 25 lines
-----Original Message-----
From: Alexander Graf [mailto:agraf at suse.de]
Sent: Monday, April 23, 2018 2:00 PM
To: u-boot at lists.denx.de
Cc: Rick Jian-Zhi Chen(陳建志); Greentime Hu; Philipp Tomsich; Heinrich Schuchardt; schwab at suse.de
Subject: [PATCH v3 2/8] riscv: Enable function sectionsThe linker can remove sections that are never addressed, so it makes a lot of sense to declare every function as an individual section.
This reduces the output U-Boot code size by ~30kb for me.
Signed-off-by Alexander Graf <[email protected]>--- arch/riscv/config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/riscv/config.mk index renamed from arch/riscv/config.mk +0
-0
6b681c4286..69f4cf6ce8100644
arch/riscv/config.mk CONFIG_STANDALONE_LOAD_ADDR = 0x00000000 \ · line 33
Quoted 6 lines
arch/riscv/config.mk +2
-1@@ -29,5 +29,5 @@ CONFIG_STANDALONE_LOAD_ADDR = 0x00000000 \ -T $(srctree)/examples/standalone/riscv.lds PLATFORM_CPPFLAGS += -ffixed-gp -fpic -PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 +PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 +-ffunction-sections
Quoted 3 lines
LDFLAGS_u-boot += --gc-sections -static -pie
--
2.12.3
CONFIDENTIALITY NOTICE:
This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.
Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.
PATCH v3 3/8 riscv: Add EFI application infrastructure
In reply to Alexander GrafThe hello world binary and a few selftests require to build EFI target binaries, not just the EFI host environment.
This patch adds all required files to generate an EFI binary for RISC-V.
---
new in v2
v2 -> v3:
- Add missing crt0 source
--- arch/riscv/config.mk | 5 ++ arch/riscv/lib/Makefile | 11 +++ arch/riscv/lib/crt0_riscv_efi.S | 152 +++++++++++++++++++++++++++++++++++++ arch/riscv/lib/elf_riscv32_efi.lds | 70 +++++++++++++++++ arch/riscv/lib/elf_riscv64_efi.lds | 70 +++++++++++++++++ arch/riscv/lib/reloc_riscv_efi.c | 97 +++++++++++++++++++++++ 6 files changed, 405 insertions(+) create mode 100644 arch/riscv/lib/crt0_riscv_efi.S create mode 100644 arch/riscv/lib/elf_riscv32_efi.lds create mode 100644 arch/riscv/lib/elf_riscv64_efi.lds create mode 100644 arch/riscv/lib/reloc_riscv_efi.c
arch/riscv/config.mk +5 -0
@@ -19,10 +19,12 @@ endif ifdef CONFIG_32BIT PLATFORM_LDFLAGS += -m $(32bit-emul) +EFI_LDS := elf_riscv32_efi.lds endif ifdef CONFIG_64BIT PLATFORM_LDFLAGS += -m $(64bit-emul) +EFI_LDS := elf_riscv64_efi.lds endif CONFIG_STANDALONE_LOAD_ADDR = 0x00000000 \
@@ -31,3 +33,6 @@ CONFIG_STANDALONE_LOAD_ADDR = 0x00000000 \ PLATFORM_CPPFLAGS += -ffixed-gp -fpic PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -gdwarf-2 -ffunction-sections LDFLAGS_u-boot += --gc-sections -static -pie + +EFI_CRT0 := crt0_riscv_efi.o +EFI_RELOC := reloc_riscv_efi.o
arch/riscv/lib/Makefile +11 -0
@@ -13,3 +13,14 @@ obj-$(CONFIG_CMD_GO) += boot.o obj-y += cache.o obj-y += interrupts.o obj-y += setjmp.o + +# For building EFI apps +CFLAGS_$(EFI_CRT0) := $(CFLAGS_EFI) +CFLAGS_REMOVE_$(EFI_CRT0) := $(CFLAGS_NON_EFI) + +CFLAGS_$(EFI_RELOC) := $(CFLAGS_EFI) +CFLAGS_REMOVE_$(EFI_RELOC) := $(CFLAGS_NON_EFI) + +extra-$(CONFIG_CMD_BOOTEFI_HELLO_COMPILE) += $(EFI_CRT0) $(EFI_RELOC) +extra-$(CONFIG_CMD_BOOTEFI_SELFTEST) += $(EFI_CRT0) $(EFI_RELOC) +extra-$(CONFIG_EFI) += $(EFI_CRT0) $(EFI_RELOC)
arch/riscv/lib/crt0_riscv_efi.S new file +152 -0
152 lines not on this page · raw message
arch/riscv/lib/elf_riscv32_efi.lds new file +70 -0
70 lines not on this page · raw message
arch/riscv/lib/elf_riscv64_efi.lds new file +70 -0
70 lines not on this page · raw message
arch/riscv/lib/reloc_riscv_efi.c new file +97 -0
97 lines not on this page · raw message
Signature · 1 line
2.12.3
PATCH v3 4/8 riscv: Add board_quiesce_devices stub
In reply to Alexander GrafThis patch adds an empty stub for board_quiesce_devices() which allows boards to quiesce their devices before we boot into an OS in a platform agnostic way.
--- arch/riscv/include/asm/u-boot-riscv.h | 1 + arch/riscv/lib/bootm.c | 4 ++++ 2 files changed, 5 insertions(+)
arch/riscv/include/asm/u-boot-riscv.h +1 -0
@@ -17,5 +17,6 @@ int cleanup_before_linux(void);/* board/.../... */ int board_init (void ); +void board_quiesce_devices (void );#endif /* _U_BOOT_RISCV_H_ */
arch/riscv/lib/bootm.c +4 -0
@@ -16,6 +16,10 @@DECLARE_GLOBAL_DATA_PTR ; +__weak void board_quiesce_devices (void ) +{ +} +int arch_fixup_fdt (void *blob) {return 0 ;
Signature · 1 line
2.12.3
PATCH v3 4/8 riscv: Add board_quiesce_devices stub
Quoted 36 lines
-----Original Message-----
From: Alexander Graf [mailto:agraf at suse.de]
Sent: Monday, April 23, 2018 2:00 PM
To: u-boot at lists.denx.de
Cc: Rick Jian-Zhi Chen(陳建志); Greentime Hu; Philipp Tomsich; Heinrich Schuchardt; schwab at suse.de
Subject: [PATCH v3 4/8] riscv: Addboard_quiesce_devicesstubThis patch adds an empty stub for
board_quiesce_devices()which allows boards to quiesce their devices before we boot into an OS in a platform agnostic way.Signed-off-by Alexander Graf <[email protected]>--- arch/riscv/include/asm/u-boot-riscv.h | 1 + arch/riscv/lib/bootm.c | 4 ++++ 2 files changed, 5 insertions(+)arch/riscv/include/asm/u-boot-riscv.h +1
-0@@ -17,5 +17,6 @@ int cleanup_before_linux(void);/* board/.../... */ int board_init (void ); +void board_quiesce_devices (void );#endif /* _U_BOOT_RISCV_H_ */ arch/riscv/lib/bootm.c index renamed from arch/riscv/lib/bootm.c +0
-0
9242fa891a..b80274adba100644
arch/riscv/lib/bootm.c line 20
Quoted 5 lines
arch/riscv/lib/bootm.c +2
-0@@ -16,6 +16,10 @@DECLARE_GLOBAL_DATA_PTR ; +__weak void board_quiesce_devices (void ) { } +
Quoted 5 lines
arch/riscv/lib/bootm.c +0
-1int arch_fixup_fdt (void *blob) {return 0 ; --2.12.3
CONFIDENTIALITY NOTICE:
This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.
Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.
PATCH v3 5/8 efi_loader: Use EFI_CACHELINE_SIZE in the image loader too
In reply to Alexander GrafWe were using our EFI_CACHELINE_SIZE define only in the runtime service code, but left the image loader to use plain CONFIG_SYS_CACHELINE_SIZE.
This patch moves EFI_CACHELINE_SIZE into efi_loader.h and converts the image loader to use it.
--- include/efi_loader.h | 7 +++++++ lib/efi_loader/efi_image_loader.c | 2 +- lib/efi_loader/efi_runtime.c | 7 ------- 3 files changed, 8 insertions(+), 8 deletions(-)
include/efi_loader.h +7 -0
@@ -76,6 +76,13 @@ const char *__efi_nesting_dec(void); ##__VA_ARGS__); \ }) +#ifdef CONFIG_SYS_CACHELINE_SIZE +#define EFI_CACHELINE_SIZE CONFIG_SYS_CACHELINE_SIZE +#else +/* Just use the greatest cache flush alignment requirement I'm aware of */ +#define EFI_CACHELINE_SIZE 128 +#endif +extern struct efi_runtime_services efi_runtime_services;extern struct efi_system_table systab;
lib/efi_loader/efi_image_loader.c +1 -1
@@ -290,7 +290,7 @@ void *efi_load_pe(void *efi, struct efi_loaded_image *loaded_image_info)/* Flush cache */ flush_cache ((ulong )efi_reloc, -ALIGN (virt_size,CONFIG_SYS_CACHELINE_SIZE )); +ALIGN (virt_size,EFI_CACHELINE_SIZE ));invalidate_icache_all ();/* Populate the loaded image interface bits */
lib/efi_loader/efi_runtime.c +0 -7
@@ -30,13 +30,6 @@ static efi_status_t __efi_runtime EFIAPI efi_unimplemented(void); static efi_status_t __efi_runtime EFIAPI efi_device_error(void); static efi_status_t __efi_runtime EFIAPI efi_invalid_parameter(void); -#ifdef CONFIG_SYS_CACHELINE_SIZE -#define EFI_CACHELINE_SIZE CONFIG_SYS_CACHELINE_SIZE -#else -/* Just use the greatest cache flush alignment requirement I'm aware of */ -#define EFI_CACHELINE_SIZE 128 -#endif -#if defined(CONFIG_ARM64 )#define R_RELATIVE 1027#define R_MASK 0xffffffffULL
Signature · 1 line
2.12.3
PATCH v3 5/8 efi_loader: Use EFI_CACHELINE_SIZE in the image loader too
Quoted 7 lines · Alexander Graf
We were using our
EFI_CACHELINE_SIZEdefine only in the runtime service code, but left the image loader to use plainCONFIG_SYS_CACHELINE_SIZE.This patch moves
EFI_CACHELINE_SIZEintoefi_loader.hand converts the image loader to use it.Signed-off-by Alexander Graf <[email protected]>
Quoted 56 lines
--- include/efi_loader.h | 7 +++++++ lib/efi_loader/efi_image_loader.c | 2 +- lib/efi_loader/efi_runtime.c | 7 ------- 3 files changed, 8 insertions(+), 8 deletions(-)include/efi_loader.h +7
-0@@ -76,6 +76,13 @@ const char *__efi_nesting_dec(void); ##__VA_ARGS__); \ }) +#ifdef CONFIG_SYS_CACHELINE_SIZE +#define EFI_CACHELINE_SIZE CONFIG_SYS_CACHELINE_SIZE +#else +/* Just use the greatest cache flush alignment requirement I'm aware of */ +#define EFI_CACHELINE_SIZE 128 +#endif +extern struct efi_runtime_services efi_runtime_services;extern struct efi_system_table systab;lib/efi_loader/efi_image_loader.c +1
-1@@ -290,7 +290,7 @@ void *efi_load_pe(void *efi, struct efi_loaded_image *loaded_image_info)/* Flush cache */ flush_cache ((ulong )efi_reloc, -ALIGN (virt_size,CONFIG_SYS_CACHELINE_SIZE )); +ALIGN (virt_size,EFI_CACHELINE_SIZE ));invalidate_icache_all ();/* Populate the loaded image interface bits */ lib/efi_loader/efi_runtime.c +0
-7@@ -30,13 +30,6 @@ static efi_status_t __efi_runtime EFIAPI efi_unimplemented(void); static efi_status_t __efi_runtime EFIAPI efi_device_error(void); static efi_status_t __efi_runtime EFIAPI efi_invalid_parameter(void); -#ifdef CONFIG_SYS_CACHELINE_SIZE -#define EFI_CACHELINE_SIZE CONFIG_SYS_CACHELINE_SIZE -#else -/* Just use the greatest cache flush alignment requirement I'm aware of */ -#define EFI_CACHELINE_SIZE 128 -#endif -#if defined(CONFIG_ARM64 )#define R_RELATIVE 1027#define R_MASK 0xffffffffULL
PATCH v3 6/8 distro: Extend with RISC-V defines
In reply to Alexander GrafWhile we don't have UEFI naming conventions for RISC-V file paths yet, we need to search for something. So let's copy the removable file paths from the RISC-V edk2 port.
Also add the official VCI strings that contain the standardized RISC-V architecture ID fields.
---
v1 -> v2:
- Use edk2 default boot file names
v2 -> v3:
- Use official values for vci
--- include/config_distro_bootcmd.h | 11 +++++++++++ 1 file changed, 11 insertions(+)
include/config_distro_bootcmd.h +11 -0
@@ -100,6 +100,10 @@#define BOOTEFI_NAME "bootia32.efi"#elif defined(CONFIG_X86_RUN_64BIT )#define BOOTEFI_NAME "bootx64.efi" +#elif defined(CONFIG_CPU_RISCV_32 ) +#define BOOTEFI_NAME "bootriscv32.efi" +#elif defined(CONFIG_CPU_RISCV_64 ) +#define BOOTEFI_NAME "bootriscv64.efi"#endif #endif
@@ -241,6 +245,7 @@#if defined(CONFIG_CMD_DHCP )#if defined(CONFIG_EFI_LOADER ) +/* http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */ #if defined(CONFIG_ARM64 )#define BOOTENV_EFI_PXE_ARCH "0xb"#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00011:UNDI:003000"
@@ -251,6 +256,12 @@/* Always assume we're running 64bit */ #define BOOTENV_EFI_PXE_ARCH "0x7"#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00007:UNDI:003000" +#elif defined(CONFIG_CPU_RISCV_32 ) +#define BOOTENV_EFI_PXE_ARCH "0x19" +#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00025:UNDI:003000" +#elif defined(CONFIG_CPU_RISCV_64 ) +#define BOOTENV_EFI_PXE_ARCH "0x1b" +#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00027:UNDI:003000"#else #error Please specify an EFI client identifier#endif
Signature · 1 line
2.12.3
PATCH v3 6/8 distro: Extend with RISC-V defines
Quoted 8 lines · Alexander Graf
While we don't have UEFI naming conventions for RISC-V file paths yet, we need to search for something. So let's copy the removable file paths from the RISC-V edk2 port.
Also add the official VCI strings that contain the standardized RISC-V architecture ID fields.
Signed-off-by Alexander Graf <[email protected]>
Quoted 51 lines
---
v1 -> v2:
- Use edk2 default boot file names
v2 -> v3:
- Use official values for vci
--- include/config_distro_bootcmd.h | 11 +++++++++++ 1 file changed, 11 insertions(+)include/config_distro_bootcmd.h +11
-0@@ -100,6 +100,10 @@#define BOOTEFI_NAME "bootia32.efi"#elif defined(CONFIG_X86_RUN_64BIT )#define BOOTEFI_NAME "bootx64.efi" +#elif defined(CONFIG_CPU_RISCV_32 ) +#define BOOTEFI_NAME "bootriscv32.efi" +#elif defined(CONFIG_CPU_RISCV_64 ) +#define BOOTEFI_NAME "bootriscv64.efi"#endif #endif @@ -241,6 +245,7 @@#if defined(CONFIG_CMD_DHCP )#if defined(CONFIG_EFI_LOADER ) +/* http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */ #if defined(CONFIG_ARM64 )#define BOOTENV_EFI_PXE_ARCH "0xb"#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00011:UNDI:003000"@@ -251,6 +256,12 @@/* Always assume we're running 64bit */ #define BOOTENV_EFI_PXE_ARCH "0x7"#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00007:UNDI:003000" +#elif defined(CONFIG_CPU_RISCV_32 ) +#define BOOTENV_EFI_PXE_ARCH "0x19" +#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00025:UNDI:003000" +#elif defined(CONFIG_CPU_RISCV_64 ) +#define BOOTENV_EFI_PXE_ARCH "0x1b" +#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00027:UNDI:003000"#else #error Please specify an EFI client identifier#endif
PATCH v3 7/8 riscv: nx25: Enable distro boot
In reply to Alexander GrafDistro boot allows for a common boot path on systems that allow distributions to easily boot from a default configuration.
This patch enables distro boot for the nx25-ae250. Hopefully this can serve as a good example for new boards, so they enable it as well.
--- configs/nx25-ae250_defconfig | 1 + include/configs/nx25-ae250.h | 17 +++++++++++++++++ 2 files changed, 18 insertions(+)
configs/nx25-ae250_defconfig +1 -0
@@ -37,3 +37,4 @@ CONFIG_DM_SPI=y CONFIG_ATCSPI200_SPI=y CONFIG_TIMER=y CONFIG_ATCPIT100_TIMER=y +CONFIG_DISTRO_DEFAULTS=y
include/configs/nx25-ae250.h +17 -0
@@ -105,4 +105,21 @@/* Increase max gunzip size */ #define CONFIG_SYS_BOOTM_LEN (64 << 20) +/* When we use RAM as ENV */ +#define CONFIG_ENV_SIZE 0x2000 + +/* Enable distro boot */ +#define BOOT_TARGET_DEVICES (func) \ + func(MMC, mmc, 0) \ + func(DHCP, dhcp, na) +#include <config_distro_bootcmd.h> + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "kernel_addr_r=0x00080000\0" \ + "pxefile_addr_r=0x01f00000\0" \ + "scriptaddr=0x01f00000\0" \ + "fdt_addr_r=0x02000000\0" \ + "ramdisk_addr_r=0x02800000\0" \ + BOOTENV +#endif /* __CONFIG_H */
Signature · 1 line
2.12.3
PATCH v3 7/8 riscv: nx25: Enable distro boot
Quoted 46 lines
-----Original Message-----
From: Alexander Graf [mailto:agraf at suse.de]
Sent: Monday, April 23, 2018 2:00 PM
To: u-boot at lists.denx.de
Cc: Rick Jian-Zhi Chen(陳建志); Greentime Hu; Philipp Tomsich; Heinrich Schuchardt; schwab at suse.de
Subject: [PATCH v3 7/8] riscv: nx25: Enable distro bootDistro boot allows for a common boot path on systems that allow distributions to easily boot from a default configuration.
This patch enables distro boot for the nx25-ae250. Hopefully this can serve as a good example for new boards, so they enable it as well.
Signed-off-by Alexander Graf <[email protected]>--- configs/nx25-ae250_defconfig | 1 + include/configs/nx25-ae250.h | 17 +++++++++++++++++ 2 files changed, 18 insertions(+)configs/nx25-ae250_defconfig index renamed from configs/nx25-ae250_defconfig +0
-0
4f9bd58f75..437083231b100644configs/nx25-ae250_defconfig +1
-0@@ -37,3 +37,4 @@ CONFIG_DM_SPI=y CONFIG_ATCSPI200_SPI=y CONFIG_TIMER=y CONFIG_ATCPIT100_TIMER=y +CONFIG_DISTRO_DEFAULTS=yinclude/configs/nx25-ae250.h index renamed from include/configs/nx25-ae250.h +0
-0
0e4c431cab..a90c75abc4100644include/configs/nx25-ae250.h +7
-0@@ -105,4 +105,21 @@/* Increase max gunzip size */ #define CONFIG_SYS_BOOTM_LEN (64 << 20) +/* When we use RAM as ENV */ +#define CONFIG_ENV_SIZE 0x2000 + +/* Enable distro boot */ +#define BOOT_TARGET_DEVICES (func) \ + func(MMC, mmc, 0) \ + func(DHCP, dhcp, na)
include/configs/nx25-ae250.h line 124
Quoted 10 lines
include/configs/nx25-ae250.h +10
-0+#include <config_distro_bootcmd.h> + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "kernel_addr_r=0x00080000\0" \ + "pxefile_addr_r=0x01f00000\0" \ + "scriptaddr=0x01f00000\0" \ + "fdt_addr_r=0x02000000\0" \ + "ramdisk_addr_r=0x02800000\0" \ + BOOTENV +
Hi Alexander
This default env setting seem try to load something(maybe script, or kernel and dtb ?) from mmc and tftpserver But I do not know how to prepare this script or image.
I am not sure if the understanding is correct ?
Can you explain it ?
Thank you
Rick :)
Quoted 3 lines
include/configs/nx25-ae250.h +0
-1#endif /* __CONFIG_H */ --2.12.3
CONFIDENTIALITY NOTICE:
This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.
Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.
PATCH v3 7/8 riscv: nx25: Enable distro boot
Quoted 57 lines · rick at andestech.com
Quoted 45 lines
-----Original Message-----
From: Alexander Graf [mailto:agraf at suse.de]
Sent: Monday, April 23, 2018 2:00 PM
To: u-boot at lists.denx.de
Cc: Rick Jian-Zhi Chen(陳建志); Greentime Hu; Philipp Tomsich; Heinrich Schuchardt; schwab at suse.de
Subject: [PATCH v3 7/8] riscv: nx25: Enable distro bootDistro boot allows for a common boot path on systems that allow distributions to easily boot from a default configuration.
This patch enables distro boot for the nx25-ae250. Hopefully this can serve as a good example for new boards, so they enable it as well.
Signed-off-by Alexander Graf <[email protected]>--- configs/nx25-ae250_defconfig | 1 + include/configs/nx25-ae250.h | 17 +++++++++++++++++ 2 files changed, 18 insertions(+)configs/nx25-ae250_defconfig index renamed from configs/nx25-ae250_defconfig +0
-0
4f9bd58f75..437083231b100644configs/nx25-ae250_defconfig +1
-0@@ -37,3 +37,4 @@ CONFIG_DM_SPI=y CONFIG_ATCSPI200_SPI=y CONFIG_TIMER=y CONFIG_ATCPIT100_TIMER=y +CONFIG_DISTRO_DEFAULTS=yinclude/configs/nx25-ae250.h index renamed from include/configs/nx25-ae250.h +0
-0
0e4c431cab..a90c75abc4100644include/configs/nx25-ae250.h +7
-0@@ -105,4 +105,21 @@/* Increase max gunzip size */ #define CONFIG_SYS_BOOTM_LEN (64 << 20) +/* When we use RAM as ENV */ +#define CONFIG_ENV_SIZE 0x2000 + +/* Enable distro boot */ +#define BOOT_TARGET_DEVICES (func) \ + func(MMC, mmc, 0) \ + func(DHCP, dhcp, na)include/configs/nx25-ae250.h line 124
Quoted 10 lines
include/configs/nx25-ae250.h +10
-0+#include <config_distro_bootcmd.h> + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "kernel_addr_r=0x00080000\0" \ + "pxefile_addr_r=0x01f00000\0" \ + "scriptaddr=0x01f00000\0" \ + "fdt_addr_r=0x02000000\0" \ + "ramdisk_addr_r=0x02800000\0" \ + BOOTENV +Hi Alexander
Quoted 5 lines
This default env setting seem try to load
something(maybe script, or kernel and dtb ?)from mmc and tftpserver But I do not know how to prepare this script or image.I am not sure if the understanding is correct ?
Can you explain it ?
The distro boot script logic is described quite nicely here:
https://github.com/u-boot/u-boot/blob/master/doc/README.distro
I personally only care about a subset of it though, which is the efi_loader loading logic:
https://github.com/u-boot/u-boot/blob/master/doc/README.uefi
With distro boot enabled, the distro boot script will automatically search for a file called /efi/boot/bootriscv64.efi (or 32 respectively) and execute it as UEFI binary. The next step I need to get to still is to enable RISC-V UEFI support in grub. Once we have that, we can boot RISC-V systems like any other platform we support in openSUSE.
Alex
PATCH v3 7/8 riscv: nx25: Enable distro boot
In reply to Alexander GrafQuoted 46 lines
-----Original Message-----
From: Alexander Graf [mailto:agraf at suse.de]
Sent: Monday, April 23, 2018 2:00 PM
To: u-boot at lists.denx.de
Cc: Rick Jian-Zhi Chen(陳建志); Greentime Hu; Philipp Tomsich; Heinrich Schuchardt; schwab at suse.de
Subject: [PATCH v3 7/8] riscv: nx25: Enable distro bootDistro boot allows for a common boot path on systems that allow distributions to easily boot from a default configuration.
This patch enables distro boot for the nx25-ae250. Hopefully this can serve as a good example for new boards, so they enable it as well.
Signed-off-by Alexander Graf <[email protected]>--- configs/nx25-ae250_defconfig | 1 + include/configs/nx25-ae250.h | 17 +++++++++++++++++ 2 files changed, 18 insertions(+)configs/nx25-ae250_defconfig index renamed from configs/nx25-ae250_defconfig +0
-0
4f9bd58f75..437083231b100644configs/nx25-ae250_defconfig +1
-0@@ -37,3 +37,4 @@ CONFIG_DM_SPI=y CONFIG_ATCSPI200_SPI=y CONFIG_TIMER=y CONFIG_ATCPIT100_TIMER=y +CONFIG_DISTRO_DEFAULTS=yinclude/configs/nx25-ae250.h index renamed from include/configs/nx25-ae250.h +0
-0
0e4c431cab..a90c75abc4100644include/configs/nx25-ae250.h +7
-0@@ -105,4 +105,21 @@/* Increase max gunzip size */ #define CONFIG_SYS_BOOTM_LEN (64 << 20) +/* When we use RAM as ENV */ +#define CONFIG_ENV_SIZE 0x2000 + +/* Enable distro boot */ +#define BOOT_TARGET_DEVICES (func) \ + func(MMC, mmc, 0) \ + func(DHCP, dhcp, na)
include/configs/nx25-ae250.h line 124
Quoted 10 lines
include/configs/nx25-ae250.h +10
-0+#include <config_distro_bootcmd.h> + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "kernel_addr_r=0x00080000\0" \ + "pxefile_addr_r=0x01f00000\0" \ + "scriptaddr=0x01f00000\0" \ + "fdt_addr_r=0x02000000\0" \ + "ramdisk_addr_r=0x02800000\0" \ + BOOTENV +
Maybe Add #ifdef CONFIG_DISTRO_DEFAULTS to encapsulate the CONFIG_EXTRA_ENV_SETTINGS can disable auto boot easily.
Quoted 3 lines
include/configs/nx25-ae250.h +0
-1#endif /* __CONFIG_H */ --2.12.3
CONFIDENTIALITY NOTICE:
This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.
Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.
PATCH v3 8/8 efi_loader: Enable RISC-V support
In reply to Alexander GrafWe have almost all pieces needed to support RISC-V UEFI binaries in place already. The only missing piece are ELF relocations for runtime code and data.
This patch adds respective support in the linker script and the runtime relocation code. It also allows users to enable the EFI_LOADER configuration switch on RISC-V platforms.
---
v1 -> v2:
- Enable hello world binary
--- arch/riscv/cpu/nx25/u-boot.lds | 16 ++++++++++++++++ cmd/Kconfig | 2 +- lib/efi_loader/Kconfig | 2 +- lib/efi_loader/efi_runtime.c | 41 ++++++++++++++++++++++++++++++++++++----- 4 files changed, 54 insertions(+), 7 deletions(-)
arch/riscv/cpu/nx25/u-boot.lds +16 -0
@@ -38,6 +38,22 @@ SECTIONS KEEP(*(SORT(.u_boot_list*))); } + . = ALIGN(4); + + .efi_runtime : { + __efi_runtime_start = .; + *(efi_runtime_text) + *(efi_runtime_data) + __efi_runtime_stop = .; + } + + .efi_runtime_rel : { + __efi_runtime_rel_start = .; + *(.relaefi_runtime_text) + *(.relaefi_runtime_data) + __efi_runtime_rel_stop = .; + } + . = ALIGN(4); /DISCARD/ : { *(.rela.plt*) }
cmd/Kconfig +1 -1
@@ -228,7 +228,7 @@ config CMD_BOOTEFI config CMD_BOOTEFI_HELLO_COMPILE bool "Compile a standard EFI hello world binary for testing" - depends on CMD_BOOTEFI && (ARM || X86) + depends on CMD_BOOTEFI && (ARM || X86 || RISCV) default y help This compiles a standard EFI hello world application with U-Boot so
lib/efi_loader/Kconfig +1 -1
@@ -1,6 +1,6 @@ config EFI_LOADER bool "Support running EFI Applications in U-Boot" - depends on (ARM || X86) && OF_LIBFDT + depends on (ARM || X86 || RISCV) && OF_LIBFDT # We need EFI_STUB_64BIT to be set on x86_64 with EFI_STUB depends on !EFI_STUB || !X86_64 || EFI_STUB_64BIT # We need EFI_STUB_32BIT to be set on x86_32 with EFI_STUB
lib/efi_loader/efi_runtime.c +36 -5
57 lines not on this page · raw message
Signature · 1 line
2.12.3
v3 cover riscv: Enable efi_loader support
In reply to Alexander GrafQuoted 7 lines · Alexander Graf
We now have RISC-V support in U-Boot - which is great!
However, not that we're finally making progress to converge on
efi_loaderand distro boot for booting on ARM platforms, we really want to make sure there is no technical reason not to do the same on RISC-V as well.
Quoted 6 lines
So this patch set introduces distro boot and
efi_loadersupport for RISC-V!So far, I've only tested it with the selftest and hello world target in U-Boot, as the number of target binaries to run is still slim. But it should at least give us a good starting point.
Rick, can this go into 2018.07?
Via which tree do you want to push it? I can take it via the efi one or you can take it if you like ;).
Alex
v3 cover riscv: Enable efi_loader support
Quoted 23 lines
-----Original Message-----
From: Alexander Graf [mailto:agraf at suse.de]
Sent: Monday, May 07, 2018 4:59 AM
To: u-boot at lists.denx.de
Cc: Heinrich Schuchardt; schwab at suse.de; Greentime Hu; Rick Jian-Zhi Chen(陳 建志)
Subject: Re: [U-Boot] [PATCH v3 0/8] riscv: Enableefi_loadersupportQuoted 10 lines · Alexander Graf
We now have RISC-V support in U-Boot - which is great!
However, not that we're finally making progress to converge on
efi_loaderand distro boot for booting on ARM platforms, we really want to make sure there is no technical reason not to do the same on RISC-V as well.So this patch set introduces distro boot and
efi_loadersupport for RISC-V!
Quoted 10 lines
Quoted 3 lines
So far, I've only tested it with the selftest and hello world target in U-Boot, as the number of target binaries to run is still slim. But it should at least give us a good starting point.
Rick, can this go into 2018.07?
Via which tree do you want to push it? I can take it via the efi one or you can take it if you like ;).
Yes
I prefer to u-boot-riscv.git
If this can enter main line, I will fetch it
I think you can take it via the efi one. :)
But when I verify the efi flow this days.
I find one issue and still clarify it now.
I find the auto flow can not be disabled from make menuconfig Following are the experiments I do:
Currently the boot flow will auto scan *.efi file from sd card and tftp server. If I do not insert sd card and tftp server caple.
The boot message will as below:
U-Boot 2018.03-00351-g1dd246f-dirty (Apr 23 2018 - 15:34:32 +0800)
DRAM: 1 GiB
No arch specific invalidate_icache_all available!
MMC:
Loading Environment from SPI Flash... SF: Detected mx25u1635e with page size 256 Bytes, erase size 4 KiB, total 2 MiB *** Warning - bad CRC, using default environment
Failed (-5)
In: serial at f0300000 Out: serial at f0300000 Err: serial at f0300000 Net: no alias for ethernet0
Warning: mac at e0100000 (eth0) using random MAC address - 66:7d:d7:be:c0:10
eth0: mac at e0100000
Hit any key to stop autoboot: 0
No MMC device available
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
BOOTP broadcast 5
BOOTP broadcast 6
BOOTP broadcast 7
BOOTP broadcast 8
BOOTP broadcast 9
BOOTP broadcast 10
BOOTP broadcast 11
BOOTP broadcast 12
BOOTP broadcast 13
BOOTP broadcast 14
BOOTP broadcast 15
BOOTP broadcast 16
BOOTP broadcast 17
Retry time exceeded; starting again
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
BOOTP broadcast 5
BOOTP broadcast 6
BOOTP broadcast 7
BOOTP broadcast 8
BOOTP broadcast 9
BOOTP broadcast 10
BOOTP broadcast 11
BOOTP broadcast 12
BOOTP broadcast 13
BOOTP broadcast 14
BOOTP broadcast 15
BOOTP broadcast 16
BOOTP broadcast 17
Retry time exceeded; starting again
RISC-V #
Then I think if I don't want enter this auto flow, what can I do ?
1 Remove CONFIG_DISTRO_DEFAULTS=y from nx25-ae250_defconfig
But it still enter auto flow.
2 Add #ifdef CONFIG_DISTRO_DEFAULTS to encapsulate the CONFIG_EXTRA_ENV_SETTINGS in nx25-ae250.h
And Remove CONFIG_DISTRO_DEFAULTS=y from nx25-ae250_defconfig
And it will NOT enter auto flow
#ifdef CONFIG_DISTRO_DEFAULTS
/* Enable distro boot */
#define BOOT_TARGET_DEVICES(func) \
func(MMC, mmc, 0) \
func(DHCP, dhcp, na)
#include <config_distro_bootcmd.h>
#define CONFIG_EXTRA_ENV_SETTINGS \
"kernel_addr_r=0x00080000\0" \
"pxefile_addr_r=0x01f00000\0" \
"scriptaddr=0x01f00000\0" \
"fdt_addr_r=0x02000000\0" \
"ramdisk_addr_r=0x02800000\0" \
BOOTENV#endif
3 Add #ifdef CONFIG_DISTRO_DEFAULTS to encapsulate the CONFIG_EXTRA_ENV_SETTINGS in nx25-ae250.h
And do NOT Remove CONFIG_DISTRO_DEFAULTS=y from nx25-ae250_defconfig
But disable CONFIG_DISTRO_DEFAULTS from make menuconfig
General setup --->
[ ] Select defaults suitable for booting general purpose Linux distributions
And it still enter auto flow
Offering this information for you.
Rick
Quoted 1 line
Alex
CONFIDENTIALITY NOTICE:
This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.
Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.
v3 cover riscv: Enable efi_loader support
Quoted 136 lines · rick at andestech.com
Quoted 23 lines
-----Original Message-----
From: Alexander Graf [mailto:agraf at suse.de]
Sent: Monday, May 07, 2018 4:59 AM
To: u-boot at lists.denx.de
Cc: Heinrich Schuchardt; schwab at suse.de; Greentime Hu; Rick Jian-Zhi Chen(陳 建志)
Subject: Re: [U-Boot] [PATCH v3 0/8] riscv: Enableefi_loadersupportQuoted 10 lines · Alexander Graf
We now have RISC-V support in U-Boot - which is great!
However, not that we're finally making progress to converge on
efi_loaderand distro boot for booting on ARM platforms, we really want to make sure there is no technical reason not to do the same on RISC-V as well.So this patch set introduces distro boot and
efi_loadersupport for RISC-V!Quoted 10 lines
Quoted 3 lines
So far, I've only tested it with the selftest and hello world target in U-Boot, as the number of target binaries to run is still slim. But it should at least give us a good starting point.
Rick, can this go into 2018.07?
Via which tree do you want to push it? I can take it via the efi one or you can take it if you like ;).
Yes
I prefer to u-boot-riscv.git
If this can enter main line, I will fetch it
I think you can take it via the efi one. :)But when I verify the efi flow this days.
I find one issue and still clarify it now.I find the auto flow can not be disabled from make menuconfig Following are the experiments I do:
Currently the boot flow will auto scan *.efi file from sd card and tftp server. If I do not insert sd card and tftp server caple.
The boot message will as below:
U-Boot 2018.03-00351-g1dd246f-dirty (Apr 23 2018 - 15:34:32 +0800)
DRAM: 1 GiB
No arch specificinvalidate_icache_allavailable!
MMC:
Loading Environment from SPI Flash... SF: Detected mx25u1635e with page size 256 Bytes, erase size 4 KiB, total 2 MiB *** Warning - bad CRC, using default environmentFailed (-5)
In: serial at f0300000 Out: serial at f0300000 Err: serial at f0300000 Net: no alias for ethernet0Warning: mac at
e0100000(eth0) using random MAC address - 66:7d:d7:be:c0:10
eth0: mac ate0100000
Hit any key to stop autoboot: 0
No MMC device available
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
BOOTP broadcast 5
BOOTP broadcast 6
BOOTP broadcast 7
BOOTP broadcast 8
BOOTP broadcast 9
BOOTP broadcast 10
BOOTP broadcast 11
BOOTP broadcast 12
BOOTP broadcast 13
BOOTP broadcast 14
BOOTP broadcast 15
BOOTP broadcast 16
BOOTP broadcast 17Retry time exceeded; starting again
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
BOOTP broadcast 5
BOOTP broadcast 6
BOOTP broadcast 7
BOOTP broadcast 8
BOOTP broadcast 9
BOOTP broadcast 10
BOOTP broadcast 11
BOOTP broadcast 12
BOOTP broadcast 13
BOOTP broadcast 14
BOOTP broadcast 15
BOOTP broadcast 16
BOOTP broadcast 17Retry time exceeded; starting again
RISC-V #Then I think if I don't want enter this auto flow, what can I do ?
1 Remove
CONFIG_DISTRO_DEFAULTS=yfrom nx25-ae250_defconfig
But it still enter auto flow.2 Add #ifdef
CONFIG_DISTRO_DEFAULTSto encapsulate theCONFIG_EXTRA_ENV_SETTINGSinnx25-ae250.h
And RemoveCONFIG_DISTRO_DEFAULTS=yfrom nx25-ae250_defconfig
And it will NOT enter auto flow#ifdef
CONFIG_DISTRO_DEFAULTS
/* Enable distro boot */
#defineBOOT_TARGET_DEVICES(func)\
func(MMC, mmc, 0)\
func(DHCP, dhcp, na)#include <
config_distro_bootcmd.h>#define CONFIG_EXTRA_ENV_SETTINGS \ "kernel_addr_r=0x00080000\0" \ "pxefile_addr_r=0x01f00000\0" \ "scriptaddr=0x01f00000\0" \ "fdt_addr_r=0x02000000\0" \ "ramdisk_addr_r=0x02800000\0" \ BOOTENV#endif
Quoted 8 lines
3 Add #ifdef
CONFIG_DISTRO_DEFAULTSto encapsulate theCONFIG_EXTRA_ENV_SETTINGSinnx25-ae250.h
And do NOT RemoveCONFIG_DISTRO_DEFAULTS=yfrom nx25-ae250_defconfig
But disableCONFIG_DISTRO_DEFAULTSfrom make menuconfig
General setup --->
[ ] Select defaults suitable for booting general purpose Linux distributions
And it still enter auto flowOffering this information for you.
This is the same for all distro enabled boards. The basic idea is that U-Boot ships with something that "just boots" for simple use cases.
If you want something more advanced, you usually want to put something very target specific in there anyway, such as "bootm $nor_flash". In that case, you adapt the CONFIG_BOOTCOMMAND parameter to whatever you want.
The boot command can also be overridden using the environment. So if you have working environment store, you can change the U-Boot variable "bootcmd" and U-Boot will run that instead when it boots.
The alternative to this default behavior would be no bootcmd at all which means you just get dropped into the U-Boot prompt. While that's reasonably useful for developers, it isn't for people deploying U-Boot on real target systems :).
Alex
v3 cover riscv: Enable efi_loader support
In reply to Alexander GrafQuoted 7 lines · Alexander Graf
We now have RISC-V support in U-Boot - which is great!
However, not that we're finally making progress to converge on
efi_loaderand distro boot for booting on ARM platforms, we really want to make sure there is no technical reason not to do the same on RISC-V as well.
Quoted 6 lines
So this patch set introduces distro boot and
efi_loadersupport for RISC-V!So far, I've only tested it with the selftest and hello world target in U-Boot, as the number of target binaries to run is still slim. But it should at least give us a good starting point.
Any more comments from the RISC-V team? It would be great to have this in for v2018.07, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180506/8235ccc6/attachment.sig>
v3 cover riscv: Enable efi_loader support
Quoted 21 lines
-----Original Message-----
From: Tom Rini [mailto:trini at konsulko.com]
Sent: Monday, May 07, 2018 5:12 AM
To: Alexander Graf; Rick Jian-Zhi Chen(陳建志); Greentime Hu
Cc: u-boot at lists.denx.de; Heinrich Schuchardt; schwab at suse.de
Subject: Re: [U-Boot] [PATCH v3 0/8] riscv: Enableefi_loadersupportQuoted 10 lines · Alexander Graf
We now have RISC-V support in U-Boot - which is great!
However, not that we're finally making progress to converge on
efi_loaderand distro boot for booting on ARM platforms, we really want to make sure there is no technical reason not to do the same on RISC-V as well.So this patch set introduces distro boot and
efi_loadersupport for RISC-V!
Quoted 7 lines
Quoted 3 lines
So far, I've only tested it with the selftest and hello world target in U-Boot, as the number of target binaries to run is still slim. But it should at least give us a good starting point.
Any more comments from the RISC-V team? It would be great to have this in for v2018.07, thanks!
Hi Tom
I am also happy to have this in.
And I have some responses to Alex. :)
Rick
Quoted 2 lines
--
Tom
CONFIDENTIALITY NOTICE:
This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.
Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.