summaryrefslogtreecommitdiff
path: root/arch/riscv
diff options
context:
space:
mode:
authorAtish Patra <atish.patra@wdc.com>2020-10-13 22:23:31 +0300
committerAndes <uboot@andestech.com>2020-12-14 10:16:54 +0300
commit84c3db2ea3b0e1eedb7557e4721b8880a14dcb69 (patch)
treedd9aedbaa5f64b2e1631cfc1631237253990f982 /arch/riscv
parentb620363feb50ad9ec0623581567beb317e0d52d7 (diff)
downloadu-boot-84c3db2ea3b0e1eedb7557e4721b8880a14dcb69.tar.xz
riscv: Fix efi header for RV32
RV32 should use PE32 format instead of PE32+ as the efi header format. This requires following changes 1. A different header magic value 2. An additional parameter known as BaseOfData. Currently, it is set to zero in absence of any usage. Signed-off-by: Atish Patra <atish.patra@wdc.com> Reviewed-by: Bin Meng <bin.meng@windriver.com> Reviewed-by: Rick Chen <rick@andestech.com>
Diffstat (limited to 'arch/riscv')
-rw-r--r--arch/riscv/lib/crt0_riscv_efi.S7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/riscv/lib/crt0_riscv_efi.S b/arch/riscv/lib/crt0_riscv_efi.S
index 87fe1e56f9..4aaa49ad07 100644
--- a/arch/riscv/lib/crt0_riscv_efi.S
+++ b/arch/riscv/lib/crt0_riscv_efi.S
@@ -15,11 +15,13 @@
#define SAVE_LONG(reg, idx) sd reg, (idx*SIZE_LONG)(sp)
#define LOAD_LONG(reg, idx) ld reg, (idx*SIZE_LONG)(sp)
#define PE_MACHINE IMAGE_FILE_MACHINE_RISCV64
+#define PE_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
#else
#define SIZE_LONG 4
#define SAVE_LONG(reg, idx) sw reg, (idx*SIZE_LONG)(sp)
#define LOAD_LONG(reg, idx) lw reg, (idx*SIZE_LONG)(sp)
#define PE_MACHINE IMAGE_FILE_MACHINE_RISCV32
+#define PE_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
#endif
@@ -48,7 +50,7 @@ coff_header:
IMAGE_FILE_LOCAL_SYMS_STRIPPED | \
IMAGE_FILE_DEBUG_STRIPPED)
optional_header:
- .short IMAGE_NT_OPTIONAL_HDR64_MAGIC /* PE32+ format */
+ .short PE_MAGIC /* PE32+ format */
.byte 0x02 /* MajorLinkerVersion */
.byte 0x14 /* MinorLinkerVersion */
.long _edata - _start /* SizeOfCode */
@@ -56,6 +58,9 @@ optional_header:
.long 0 /* SizeOfUninitializedData */
.long _start - ImageBase /* AddressOfEntryPoint */
.long _start - ImageBase /* BaseOfCode */
+#if __riscv_xlen == 32
+ .long 0 /* BaseOfData */
+#endif
extra_header_fields:
.quad 0 /* ImageBase */