[U-Boot] [PATCH] riscv: Add support for HI20 PE relocations

Rick Chen rickchen36 at gmail.com
Wed Jun 6 09:15:30 UTC 2018


> -----Original Message-----
> From: Alexander Graf [mailto:agraf at suse.de]
> Sent: Wednesday, June 06, 2018 1:21 AM
> To: u-boot at lists.denx.de
> Cc: Rick Jian-Zhi Chen(陳建志)
> Subject: [PATCH] riscv: Add support for HI20 PE relocations
>
> The PE standard allows for HI20/LOW12 relocations. Within the efi_loader target
> we always know that our relocation target is 4k aligned, so we don't need to
> worry about the LOW12 part.
>
> This patch adds support for the respective relocations. With this and a few grub
> patches I have cooking in parallel I'm able to run grub on RISC-V.
>
> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
>  include/pe.h                      |  3 +++
>  lib/efi_loader/efi_image_loader.c | 14 ++++++++++++++
>  2 files changed, 17 insertions(+)
>
> diff --git a/include/pe.h b/include/pe.h index d73eb142cb..36e1908b7e 100644
> --- a/include/pe.h
> +++ b/include/pe.h
> @@ -201,10 +201,13 @@ typedef struct _IMAGE_RELOCATION
>  #define IMAGE_REL_BASED_MIPS_JMPADDR            5
>  #define IMAGE_REL_BASED_ARM_MOV32A              5 /* yes, 5 too */
>  #define IMAGE_REL_BASED_ARM_MOV32               5 /* yes, 5 too */
> +#define IMAGE_REL_BASED_RISCV_HI20           5 /* yes, 5 too */
>  #define IMAGE_REL_BASED_SECTION                 6
>  #define IMAGE_REL_BASED_REL                     7
>  #define IMAGE_REL_BASED_ARM_MOV32T              7 /* yes, 7 too */
>  #define IMAGE_REL_BASED_THUMB_MOV32             7 /* yes, 7 too */
> +#define IMAGE_REL_BASED_RISCV_LOW12I         7 /* yes, 7 too */
> +#define IMAGE_REL_BASED_RISCV_LOW12S         8
>  #define IMAGE_REL_BASED_MIPS_JMPADDR16          9
>  #define IMAGE_REL_BASED_IA64_IMM64              9 /* yes, 9 too */
>  #define IMAGE_REL_BASED_DIR64                   10
> diff --git a/lib/efi_loader/efi_image_loader.c b/lib/efi_loader/efi_image_loader.c
> index 3cffe9ef46..6892171ccd 100644
> --- a/lib/efi_loader/efi_image_loader.c
> +++ b/lib/efi_loader/efi_image_loader.c
> @@ -126,6 +126,20 @@ static efi_status_t efi_loader_relocate(const
> IMAGE_BASE_RELOCATION *rel,
>                       case IMAGE_REL_BASED_DIR64:
>                               *x64 += (uint64_t)delta;
>                               break;
> +#ifdef __riscv
> +                     case IMAGE_REL_BASED_RISCV_HI20:
> +                             *x32 = ((*x32 & 0xfffff000) + (uint32_t)delta) |
> +                                     (*x32 & 0x00000fff);
> +                             break;
> +                     case IMAGE_REL_BASED_RISCV_LOW12I:
> +                     case IMAGE_REL_BASED_RISCV_LOW12S:
> +                             /* We know that we're 4k aligned */
> +                             if (delta & 0xfff) {
> +                                     printf("Unsupported reloc offset\n");
> +                                     return EFI_LOAD_ERROR;
> +                             }
> +                             break;
> +#endif
>                       default:
>                               printf("Unknown Relocation off %x type %x\n",
>                                      offset, type);
> --
> 2.12.3

Hi Alex

The title of this patch seems to be as" efi_loader: Add support for
HI20 PE relocations for RISC-V "
And I am not sure if it shall belong to efi tree.

Rick


More information about the U-Boot mailing list