From patchwork Thu Apr 19 15:49:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 133833 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp791291ljf; Thu, 19 Apr 2018 08:52:37 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/k/Pu7/dYnHc3DOlQuKB/YxXcy+fsDHRPLpmVqfu+oAwhtlw7QPNIvslnBd6FEB5NzYk59 X-Received: by 10.80.184.10 with SMTP id j10mr9326471ede.272.1524153157804; Thu, 19 Apr 2018 08:52:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524153157; cv=none; d=google.com; s=arc-20160816; b=VDbv914Z5TuRmWfQukluehT6vi+4Z7za1QZNtehV5oEEsGTc8UmgWtc3PSgn4nB/B3 LK8YkcG6Ww8Qx5NO1s61sZzdD+JxsinhtdslSjhb9jd6fyxgypRAf/Gf7hpKW79GHLpq lqhG68dshibTC71Sr1hp0RCnC3W4h4ZGANrGBB7POFdWMl7kKFA3Cf82kw/g6BLuqNSd NNoTW/Kdi2/Cx5OqS5AzkgB3zUzrmE+iYhlkQ2EPRxbXg66JItSMb0btnvThdXkdOTqM CmCrQJfkJ8Qa07+8lBqC299//YgBqaOOmTC5VdBEexxyGDOH4tsGg/1t3R+Z5euFiocV TJBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=z0MZGJsQL0BFtqW+Je/b/FhRDWjoAwmbPgDDAUCb0so=; b=bQDrYHoPlVWevlBw/2BCyXuojYF3AFgOKzo9OivcA3KwtqkYkgMgva1YGuXt8kMbNZ xWdV9AcRMBbTTTYqbLHaeJ1UmtF5TJj6uep2pA7+e/qQWht+kipYXEodZn5PRgsgXriI tHNuVCAQ9g/o/M5D/4Yr4VWfbKdsFgpn//9YLzYCOS6030FcOfy97J5ga4BK9+GVhoX6 chWt40CZOrAk46IbYXlgykkiCgIrOsBRBGQkbm2TqLcjH0VFyu2TG3qodQmo/JnHyhzp qvoJM4whkLPgN9CT4yXbqxPyMtLygxgubb/pfi0Lio9YwIJXuf8Q8SDg9jSOoblIqBkD Yw7Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id g3si1022789edd.382.2018.04.19.08.52.37; Thu, 19 Apr 2018 08:52:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id 33BA5C21E89; Thu, 19 Apr 2018 15:50:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 0C310C21FF6; Thu, 19 Apr 2018 15:49:33 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id D563DC21D8A; Thu, 19 Apr 2018 15:49:26 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id BC302C21F91 for ; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 278CBAF80; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Thu, 19 Apr 2018 17:49:16 +0200 Message-Id: <20180419154923.70719-2-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180419154923.70719-1-agraf@suse.de> References: <20180419154923.70719-1-agraf@suse.de> Cc: Heinrich Schuchardt , schwab@suse.de, Greentime Hu Subject: [U-Boot] [PATCH v2 1/8] riscv: Add setjmp/longjmp code X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" To support efi_loader we need to have platform support for setjmp/longjmp. Add it here. Signed-off-by: Alexander Graf --- 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 diff --git a/arch/riscv/include/asm/setjmp.h b/arch/riscv/include/asm/setjmp.h new file mode 100644 index 0000000000..01ad6d081f --- /dev/null +++ b/arch/riscv/include/asm/setjmp.h @@ -0,0 +1,26 @@ +/* + * (C) Copyright 2018 Alexander Graf + * + * 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_ */ diff --git a/arch/riscv/lib/Makefile b/arch/riscv/lib/Makefile index 323cf3e835..6d97aa2719 100644 --- a/arch/riscv/lib/Makefile +++ b/arch/riscv/lib/Makefile @@ -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 diff --git a/arch/riscv/lib/setjmp.S b/arch/riscv/lib/setjmp.S new file mode 100644 index 0000000000..103f359185 --- /dev/null +++ b/arch/riscv/lib/setjmp.S @@ -0,0 +1,66 @@ +/* + * (C) 2018 Alexander Graf + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include + +#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) + + /* 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 From patchwork Thu Apr 19 15:49:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 133837 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp793412ljf; Thu, 19 Apr 2018 08:54:57 -0700 (PDT) X-Google-Smtp-Source: AIpwx49+AyoEOVmp4inMWC4DI2tXhfDXbtpD0iEctwMnbhi2MaI50MQRpnKWLN/JbiTClV+o2iTR X-Received: by 10.80.189.195 with SMTP id z3mr9299114edh.207.1524153297543; Thu, 19 Apr 2018 08:54:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524153297; cv=none; d=google.com; s=arc-20160816; b=L1eCRngh+4G8coNadAzztqrCGX+CxhPTfod8kfONEf66+C8X4rh9V4A81zkL4A3UVr cSWrKEo3MmaZJzWyNTTLqaGQ709Vix4iMthoZphZ7q+t4hnGBvCU+sLRglfW0uuUliWn 8Y/hgIDe2r0CFKldP+bW9vtobooiImcOqsZYSwKVb2c66k59331D905SUeyuoUQkJrMF 43TSoYdu26ecoi+v+TLJh1zRJPNIJxTd+zhZvkWa3BKVzv5J2HAIB0nk4jCtXVmg6xDC Rh0rPIEYpTHYSSPpkjXxyclbLMPM/sdcyEOkBnyoz0f4O+3Xf7KoVBvApgBr42VsChz+ wXPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=HkE7PgZzxlAabLS5GdFfEUunbVRUidOklEb/dM3CVaU=; b=0SrQWIzVdic79od39djvKCZbWpuGNgkAxvaPppNZnkOuqGTT2MKpGmva/G2UeY9MiZ uD8blDlhz3FJEfjtGJKCzlPWsBpayV8m855bo3D50NccWsCmFNQlaYngJyK8FAe0BpcZ dE2ty3558+BUJ2mX23SURYs6fYy8bp4ts/g6y4cxEXUir8gLFIIawR3VZePpX71maZcq dwC1Ixe4NI1BfGfksKhxoCekk7gtrsmsHK7Kh3ZSGsuA6F1t4p7hF4MvcMBbYNdpS5ay 2f6XE5LNjO8qBnx1x9ObCU1TH9MOPuuDxCqIttK1a1IRZ+VSkQspaS9ypbG6WZ6yYSpc FSfA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id d13si3472541edi.154.2018.04.19.08.54.57; Thu, 19 Apr 2018 08:54:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id 2C1EDC22008; Thu, 19 Apr 2018 15:51:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id DB2DCC2200E; Thu, 19 Apr 2018 15:49:34 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 8F815C21D8A; Thu, 19 Apr 2018 15:49:27 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id B3AE3C21F8F for ; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 2209BAF79; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Thu, 19 Apr 2018 17:49:17 +0200 Message-Id: <20180419154923.70719-3-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180419154923.70719-1-agraf@suse.de> References: <20180419154923.70719-1-agraf@suse.de> Cc: Heinrich Schuchardt , schwab@suse.de, Greentime Hu Subject: [U-Boot] [PATCH v2 2/8] riscv: Enable function sections X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" 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 --- arch/riscv/config.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/config.mk b/arch/riscv/config.mk index 6b681c4286..69f4cf6ce8 100644 --- a/arch/riscv/config.mk +++ b/arch/riscv/config.mk @@ -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 From patchwork Thu Apr 19 15:49:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 133835 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp792916ljf; Thu, 19 Apr 2018 08:54:26 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+pkQaoBpDZYrMQ9wZaBC7aEdNuAQ1a2CAcv07MUJbn7L55PS7uwjDVUz+bQLjVJJpheoyZ X-Received: by 10.80.184.10 with SMTP id j10mr9333872ede.272.1524153266205; Thu, 19 Apr 2018 08:54:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524153266; cv=none; d=google.com; s=arc-20160816; b=kIVm22PqNeVP0kegwjGSNcY+w7YQArHFWPGXayXQjNSfQom2n+2oSWMRXuAHkBjEFn 0ABO9DQFRaFtInSOfVTevVWuttDTyRgJYg1KOdhlrtb6mggtpIhu2bYgSVIR0bkRU5L3 Y5U1SC46WeGIMXOIS9mWbfliaUd2vhph9sOL1d9dWSaiQYVmq+dVJsNyisEGfdueBa5m tRqa3SuZlFnQZzA9kn0Xb2bhF/FnaNSM/sudMrirbK15miTQjarOX3HGJVrZd/isL1aD LD0eYmGGFhcwiHa1p9Ld94yx9YoOFXOO+mxWtnwe10tSeWFa1dIlJQ/yuXEERHtpqzi/ 7wTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=/fT836+qj9lvqrp4sul09IYhBZJh1QDUeSBhjg5uIgc=; b=pj8DHqyzBX5PaW6DEI+e3VED6wROkcpsn7f+yV2U9R73FUEBdnLc62QUwhpbRRikry INJZ2ioBd+Sj20wNjpEMTTMvt7koFL90jE5jCmY2iXG7doAREJDucr2efzwLBSRnkeqN YuPz9Mzwl4z1Q8ZpSHlozX4XRWkOhO+UQxVodk4w5QLgnlTczk8AhgYJ3tL1eF8OB+YK fqOGY7vVA5eX4R3qtG+uHI/kmPJZGagTumratc5ccD6QezHMETGUsJv94YwHiQxfqulI vcFJqZOtKjV4DXgdAf/pR5JT5TO9wkQB+XP7XRJc8jXRkm5eBAUTsRb+bAVY/HjHDGXa zifA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id r11si2585590edc.362.2018.04.19.08.54.25; Thu, 19 Apr 2018 08:54:26 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id C3FE6C21FF3; Thu, 19 Apr 2018 15:51:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id F1A9AC21E89; Thu, 19 Apr 2018 15:49:36 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id BBF8CC21E89; Thu, 19 Apr 2018 15:49:27 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id A058CC21F71 for ; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 2250CAF7D; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Thu, 19 Apr 2018 17:49:18 +0200 Message-Id: <20180419154923.70719-4-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180419154923.70719-1-agraf@suse.de> References: <20180419154923.70719-1-agraf@suse.de> Cc: Heinrich Schuchardt , schwab@suse.de, Greentime Hu Subject: [U-Boot] [PATCH v2 3/8] riscv: Add EFI application infrastructure X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The 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. Signed-off-by: Alexander Graf --- new in v2 --- arch/riscv/config.mk | 5 ++ arch/riscv/lib/Makefile | 11 +++++ arch/riscv/lib/elf_riscv32_efi.lds | 70 +++++++++++++++++++++++++++ arch/riscv/lib/elf_riscv64_efi.lds | 70 +++++++++++++++++++++++++++ arch/riscv/lib/reloc_riscv_efi.c | 97 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 253 insertions(+) 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 diff --git a/arch/riscv/config.mk b/arch/riscv/config.mk index 69f4cf6ce8..9175aa765d 100644 --- a/arch/riscv/config.mk +++ b/arch/riscv/config.mk @@ -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 diff --git a/arch/riscv/lib/Makefile b/arch/riscv/lib/Makefile index 6d97aa2719..33f80ebdca 100644 --- a/arch/riscv/lib/Makefile +++ b/arch/riscv/lib/Makefile @@ -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) diff --git a/arch/riscv/lib/elf_riscv32_efi.lds b/arch/riscv/lib/elf_riscv32_efi.lds new file mode 100644 index 0000000000..96d11985b0 --- /dev/null +++ b/arch/riscv/lib/elf_riscv32_efi.lds @@ -0,0 +1,70 @@ +/* + * U-Boot riscv32 EFI linker script + * + * SPDX-License-Identifier: BSD-2-Clause + * + * Modified from arch/arm/lib/elf_aarch64_efi.lds + */ + +OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", "elf32-littleriscv") +OUTPUT_ARCH(riscv) +ENTRY(_start) +SECTIONS +{ + .text 0x0 : { + _text = .; + *(.text.head) + *(.text) + *(.text.*) + *(.gnu.linkonce.t.*) + *(.srodata) + *(.rodata*) + . = ALIGN(16); + } + _etext = .; + _text_size = . - _text; + .dynamic : { *(.dynamic) } + .data : { + _data = .; + *(.sdata) + *(.data) + *(.data1) + *(.data.*) + *(.got.plt) + *(.got) + + /* + * The EFI loader doesn't seem to like a .bss section, so we + * stick it all into .data: + */ + . = ALIGN(16); + _bss = .; + *(.sbss) + *(.scommon) + *(.dynbss) + *(.bss) + *(.bss.*) + *(COMMON) + . = ALIGN(16); + _bss_end = .; + _edata = .; + } + .rela.dyn : { *(.rela.dyn) } + .rela.plt : { *(.rela.plt) } + .rela.got : { *(.rela.got) } + .rela.data : { *(.rela.data) *(.rela.data*) } + _data_size = . - _etext; + + . = ALIGN(4096); + .dynsym : { *(.dynsym) } + . = ALIGN(4096); + .dynstr : { *(.dynstr) } + . = ALIGN(4096); + .note.gnu.build-id : { *(.note.gnu.build-id) } + /DISCARD/ : { + *(.rel.reloc) + *(.eh_frame) + *(.note.GNU-stack) + } + .comment 0 : { *(.comment) } +} diff --git a/arch/riscv/lib/elf_riscv64_efi.lds b/arch/riscv/lib/elf_riscv64_efi.lds new file mode 100644 index 0000000000..25c863de8a --- /dev/null +++ b/arch/riscv/lib/elf_riscv64_efi.lds @@ -0,0 +1,70 @@ +/* + * U-Boot riscv64 EFI linker script + * + * SPDX-License-Identifier: BSD-2-Clause + * + * Modified from arch/arm/lib/elf_aarch64_efi.lds + */ + +OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv") +OUTPUT_ARCH(riscv) +ENTRY(_start) +SECTIONS +{ + .text 0x0 : { + _text = .; + *(.text.head) + *(.text) + *(.text.*) + *(.gnu.linkonce.t.*) + *(.srodata) + *(.rodata*) + . = ALIGN(16); + } + _etext = .; + _text_size = . - _text; + .dynamic : { *(.dynamic) } + .data : { + _data = .; + *(.sdata) + *(.data) + *(.data1) + *(.data.*) + *(.got.plt) + *(.got) + + /* + * The EFI loader doesn't seem to like a .bss section, so we + * stick it all into .data: + */ + . = ALIGN(16); + _bss = .; + *(.sbss) + *(.scommon) + *(.dynbss) + *(.bss) + *(.bss.*) + *(COMMON) + . = ALIGN(16); + _bss_end = .; + _edata = .; + } + .rela.dyn : { *(.rela.dyn) } + .rela.plt : { *(.rela.plt) } + .rela.got : { *(.rela.got) } + .rela.data : { *(.rela.data) *(.rela.data*) } + _data_size = . - _etext; + + . = ALIGN(4096); + .dynsym : { *(.dynsym) } + . = ALIGN(4096); + .dynstr : { *(.dynstr) } + . = ALIGN(4096); + .note.gnu.build-id : { *(.note.gnu.build-id) } + /DISCARD/ : { + *(.rel.reloc) + *(.eh_frame) + *(.note.GNU-stack) + } + .comment 0 : { *(.comment) } +} diff --git a/arch/riscv/lib/reloc_riscv_efi.c b/arch/riscv/lib/reloc_riscv_efi.c new file mode 100644 index 0000000000..d80ffc975c --- /dev/null +++ b/arch/riscv/lib/reloc_riscv_efi.c @@ -0,0 +1,97 @@ +/* reloc_riscv.c - position independent ELF shared object relocator + Copyright (C) 2018 Alexander Graf + Copyright (C) 2014 Linaro Ltd. + Copyright (C) 1999 Hewlett-Packard Co. + Contributed by David Mosberger . + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + * Neither the name of Hewlett-Packard Co. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +*/ + +#include + +#include + +#if __riscv_xlen == 64 +#define Elf_Dyn Elf64_Dyn +#define Elf_Rela Elf64_Rela +#define ELF_R_TYPE ELF64_R_TYPE +#else +#define Elf_Dyn Elf32_Dyn +#define Elf_Rela Elf32_Rela +#define ELF_R_TYPE ELF32_R_TYPE +#endif + +efi_status_t _relocate(long ldbase, Elf_Dyn *dyn, efi_handle_t image, + struct efi_system_table *systab) +{ + long relsz = 0, relent = 0; + Elf_Rela *rel = 0; + unsigned long *addr; + int i; + + for (i = 0; dyn[i].d_tag != DT_NULL; ++i) { + switch (dyn[i].d_tag) { + case DT_RELA: + rel = (Elf_Rela *)((ulong)dyn[i].d_un.d_ptr + ldbase); + break; + case DT_RELASZ: + relsz = dyn[i].d_un.d_val; + break; + case DT_RELAENT: + relent = dyn[i].d_un.d_val; + break; + default: + break; + } + } + + if (!rel && relent == 0) + return EFI_SUCCESS; + + if (!rel || relent == 0) + return EFI_LOAD_ERROR; + + while (relsz > 0) { + /* apply the relocs */ + switch (ELF_R_TYPE(rel->r_info)) { + case R_RISCV_RELATIVE: + addr = (ulong *)(ldbase + rel->r_offset); + *addr = ldbase + rel->r_addend; + break; + default: + /* Panic */ + while (1) ; + } + rel = (Elf_Rela *)((char *)rel + relent); + relsz -= relent; + } + return EFI_SUCCESS; +} From patchwork Thu Apr 19 15:49:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 133829 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp788569ljf; Thu, 19 Apr 2018 08:49:48 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+dpZL516Y9YyK/gRkI/1zcqboOwHiM6zqRj6+rjIFf30EWV0BCY1ErWh8K+epsAWj7x7Os X-Received: by 10.80.146.28 with SMTP id i28mr9173835eda.27.1524152988016; Thu, 19 Apr 2018 08:49:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524152988; cv=none; d=google.com; s=arc-20160816; b=Uz3wGdFjfPx2n9ElmfZMH5qZJ7K1Gg8Xuk+vS1e+V4VES9a1mo8MPaoE2Bf7kNfjng cA6BFuogl0yL0acavXjkJB2hj7x9i6q961fHfVWnVfA4KpDyL8G/Js8v39Lh1wrPalPp SdzcQeCDEbMf/9W1ee0b4QX+aoFN9Qf5c4J2iyWnmGZqNqJ94CWlPqCl3ZJDfwVilUVc nrA6j1GJvuLEnzq282x9wea9Y+fkitPiIDWIFx9cSlhh12kFVhrdbX++Mxcr1ejg62/z UQyn2dlGDc0QcC9+xeSqpUKhWwmYeXBJtP9XHJUt3YZe1HhRrhPNBI1Yz19iIYLQH7Cu bDbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=nubpHsVjoyXDlWDf2ClEQ7oY/3zaUgtJF0lPVvN9fyo=; b=WQxiIUvoKE3LoVTubnd2OsB3/F9PPSiLBgcIGt42EMoGPWHb98a91OzgnQX3H12Kee rNJeoH5iKM4T3Sbr0XpoWb3aYtQbyd052iTFa7PHCLUgGgf+Bz2HZn8prg/v0Edqi6ji h4cpamhByccDyUMHykFB/rdS43v3AFRMwC6TOvuRaxhjT+LyCAcAaMrdw/DsVBtrd99r NJ5VeI4k4SPu9kroeklQMXQSChJaEHnznBas+46xPBLl526s7mlGf/GLn/nqS/yBbm6X GMyznB3JhpvGrAVfgLm6hsWlpelMFWOV2Y2nQ+cxKufVWx3EszV3LQTDUbLSv+0Yi4ab AONA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id s17si3264712edi.23.2018.04.19.08.49.33; Thu, 19 Apr 2018 08:49:47 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id E6153C21FF3; Thu, 19 Apr 2018 15:49:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 8D5A1C21D8A; Thu, 19 Apr 2018 15:49:28 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 86109C21FAD; Thu, 19 Apr 2018 15:49:26 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id 887F8C21E89 for ; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 25492AF7E; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Thu, 19 Apr 2018 17:49:19 +0200 Message-Id: <20180419154923.70719-5-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180419154923.70719-1-agraf@suse.de> References: <20180419154923.70719-1-agraf@suse.de> Cc: Heinrich Schuchardt , schwab@suse.de, Greentime Hu Subject: [U-Boot] [PATCH v2 4/8] riscv: Add board_quiesce_devices stub X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This 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 --- arch/riscv/include/asm/u-boot-riscv.h | 1 + arch/riscv/lib/bootm.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/arch/riscv/include/asm/u-boot-riscv.h b/arch/riscv/include/asm/u-boot-riscv.h index 18099cd260..0b6428b1ae 100644 --- a/arch/riscv/include/asm/u-boot-riscv.h +++ b/arch/riscv/include/asm/u-boot-riscv.h @@ -17,5 +17,6 @@ int cleanup_before_linux(void); /* board/.../... */ int board_init(void); +void board_quiesce_devices(void); #endif /* _U_BOOT_RISCV_H_ */ diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c index 9242fa891a..b80274adba 100644 --- a/arch/riscv/lib/bootm.c +++ b/arch/riscv/lib/bootm.c @@ -16,6 +16,10 @@ DECLARE_GLOBAL_DATA_PTR; +__weak void board_quiesce_devices(void) +{ +} + int arch_fixup_fdt(void *blob) { return 0; From patchwork Thu Apr 19 15:49:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 133831 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp789655ljf; Thu, 19 Apr 2018 08:50:56 -0700 (PDT) X-Google-Smtp-Source: AIpwx49OkIFzcvFP+2cBh+yU5F0Nv0Tcv3yPuYSR3BYgH4OfOuLTmmS5N4cyYEDQBr9NId4HXsl4 X-Received: by 10.80.167.4 with SMTP id h4mr9344963edc.239.1524153056160; Thu, 19 Apr 2018 08:50:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524153056; cv=none; d=google.com; s=arc-20160816; b=uXVQ/krk09Xew+ClrrxWuDvss0KJ/8q05FMvHV6v3pAQoca0qn/4OZMzL058pVQtCo /Ko4X7IHVspuw51XwuObilEySQTiCPg9QjNSSyG52oOsgOe/05R37q41R17MdoxoY2Pb aSDl7blrVrNQWQk/ezovpTcNfLwiSPIRV8Rkdy9SqbTlR6xtWDqsQyqWcP/uD6M5DHjh m3oJSX0Mxe7nJvfXiOTaUYjkAUCqH8yaDtwNfr5YYrvXraxlJ2Ef9ipCuaBcRLDwf6ZS 4QY0XNGcET5FsYi84lVchlaiLZ3MILqvbfGQXMDq2fsGMfOYnDm9Ff5r4Kck9GAmWe6V 3j1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=c4Hh2FYtgzpa9xq5L/AfFgsVJ14/BVeinvb9ERXYdzo=; b=U2sb3z/uC+KsUAoEsU/cHAC8Mz5biozsuDeIF+3ItEZ3C9gYpzWaUsjsT+jTm0XPbM VmC8aJ3c7owYbqvwimK71DL3wqDoWOEWd3P1733NFZg8KaLVGKb0bbAZmzABe1M/ph1U jx+BqqqvekdeEwWO/1tgWB+wryUG66Wje/tOQZZHa1XAre4x61pB3C/HKUd6y3YJXoIS tdPnxrnwBMYo3+UyOG2SWKcBMfB76WqA2otev2DGOVqNErOFCFll/2PvJzm99RvyBnR3 hhk9LKkb7BdzuuKomdqmgWE2wgNDmO+H4mZ2Gi2+j0Sv/yDtGPYn6qjYr8KlaBOMc83L bH1A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id r2si3295468edk.294.2018.04.19.08.50.55; Thu, 19 Apr 2018 08:50:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id 9DB70C21D8A; Thu, 19 Apr 2018 15:50:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1CA48C21FDD; Thu, 19 Apr 2018 15:49:32 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C5154C21F91; Thu, 19 Apr 2018 15:49:26 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id BD152C21F94 for ; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 3549BAF84; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Thu, 19 Apr 2018 17:49:20 +0200 Message-Id: <20180419154923.70719-6-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180419154923.70719-1-agraf@suse.de> References: <20180419154923.70719-1-agraf@suse.de> Cc: Heinrich Schuchardt , schwab@suse.de, Greentime Hu Subject: [U-Boot] [PATCH v2 5/8] efi_loader: Use EFI_CACHELINE_SIZE in the image loader too X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" We 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. Signed-off-by: Alexander Graf --- 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(-) diff --git a/include/efi_loader.h b/include/efi_loader.h index 17f9d3d1ef..0b1b3df55a 100644 --- a/include/efi_loader.h +++ b/include/efi_loader.h @@ -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; diff --git a/lib/efi_loader/efi_image_loader.c b/lib/efi_loader/efi_image_loader.c index d5fbba3138..2476a97a6a 100644 --- a/lib/efi_loader/efi_image_loader.c +++ b/lib/efi_loader/efi_image_loader.c @@ -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 */ diff --git a/lib/efi_loader/efi_runtime.c b/lib/efi_loader/efi_runtime.c index 8558124c0a..573a5d6ac1 100644 --- a/lib/efi_loader/efi_runtime.c +++ b/lib/efi_loader/efi_runtime.c @@ -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 From patchwork Thu Apr 19 15:49:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 133830 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp788907ljf; Thu, 19 Apr 2018 08:50:07 -0700 (PDT) X-Google-Smtp-Source: AIpwx49+hKZmefMlyPkEpg0yYAEuOvmwq6unC2yO2+IolqND/9zL/dcOmyozeH6V05m1zl4aZMZB X-Received: by 10.80.139.249 with SMTP id n54mr9260273edn.216.1524153007408; Thu, 19 Apr 2018 08:50:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524153007; cv=none; d=google.com; s=arc-20160816; b=tKWpE7v3zXms9LNlVJxQBM8JuAOyqNUj5Z4mjq/9/ZUEBoblQsz6QLKMZ5oiK7Dd6p F65Smz/eIiUk9qHCphr60HU46y4aQtCnmMbUy9og6UIzv8GvVMR7eXN6/SPCGvfruoog txpTPTxN6J0L4M2Hzx1Avse07nPvkFb65gsjzuZ8UjWaUulfB0j8qVoHGwYxBFwNCpF6 c9j1Ybql87Tls5L+WDrT9DfS91VE0MhLM8LFHfzyrcvy1WcdIpkDlUxFFKK/J7LaREC4 9+Oo88zq0wFB3fzjXUft3jWlk70R6Ez5AemoCjR6rng3HnR/x5HxERG4tBA/E9MuZmtk iWiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=MSvzSp1IykHGH9tDHp9+XKWQQds98nj3g373nbIzfvM=; b=SwaXm7a9Sn8qCvom7zQMs05cFkEjzx3ScFxMa9pWNlkJ14z8wT0CRWV14fIxb8rrql YRVrs2sQxeEXEF6eWcbkWFyXYX+okYQ34M/FXnxyjZgQ1jvbKNKVktatXbkfSDmL4LXM UK9722t4RRxmD0DK83/PJU3Va4mcr6FB8IqEX2KfUS6vqAdUC0t32J1ZegMJc08UtFeD 7S69I2u+aac1IR8MAtxlxtS6WmFSWMBsg8bJ978ajECUCu4HGfd2HsYNdP98Q4NlfAfe hilCV0nwAMMj6HeIr4SSfUSfOZp54W110b12iemxRdQa0M/UH/kmSUCEzX1lxFxDkn9g mnMA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id x50si3729045edb.80.2018.04.19.08.50.07; Thu, 19 Apr 2018 08:50:07 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id DFF6EC21FBB; Thu, 19 Apr 2018 15:49:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 70E30C21FB6; Thu, 19 Apr 2018 15:49:29 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 91961C21D8A; Thu, 19 Apr 2018 15:49:26 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id 86974C21D8A for ; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 32CB2AF82; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Thu, 19 Apr 2018 17:49:21 +0200 Message-Id: <20180419154923.70719-7-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180419154923.70719-1-agraf@suse.de> References: <20180419154923.70719-1-agraf@suse.de> Cc: Heinrich Schuchardt , schwab@suse.de, Greentime Hu Subject: [U-Boot] [PATCH v2 6/8] distro: Extend with RISC-V defines X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" While we don't have VCI or UEFI naming conventions for RISC-V file paths yet, we need to search for something. So let's make up a few defines that at least allow us to get started until the specs officially include RISC-V. Signed-off-by: Alexander Graf --- v1 -> v2: - Use edk2 default boot file names --- include/config_distro_bootcmd.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h index f567cebd38..eefdfb51cc 100644 --- a/include/config_distro_bootcmd.h +++ b/include/config_distro_bootcmd.h @@ -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 @@ -250,7 +254,15 @@ #elif defined(CONFIG_X86) /* Always assume we're running 64bit */ #define BOOTENV_EFI_PXE_ARCH "0x7" -#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00007:UNDI:003000" +#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:0000:UNDI:003000" +#elif defined(CONFIG_CPU_RISCV_32) +/* TODO: Register VCI identifier via RFC */ +#define BOOTENV_EFI_PXE_ARCH "0x5032" +#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:5032:UNDI:003000" +#elif defined(CONFIG_CPU_RISCV_64) +/* TODO: Register VCI identifier via RFC */ +#define BOOTENV_EFI_PXE_ARCH "0x5064" +#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:5064:UNDI:003000" #else #error Please specify an EFI client identifier #endif From patchwork Thu Apr 19 15:49:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 133832 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp790620ljf; Thu, 19 Apr 2018 08:51:56 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+JWB1y85vF96ehw1bU5fLijNduTS1rSYii4/HXj+rvLFERPCPO/x3rFqzcm+CVqZFixyHH X-Received: by 10.80.131.199 with SMTP id 65mr9341205edi.197.1524153116284; Thu, 19 Apr 2018 08:51:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524153116; cv=none; d=google.com; s=arc-20160816; b=sP8rjBd14Q1mznKCvbFsQgr0I0pmtcwmeAjRxMuJXQfnLBaiEOORaGAQsqdjkXlZ43 DDKKib7MVeNeurxgugzqRAbu3uCpZkLdZ9O4Jn3o9716bECM/Yt63IizIexB1HWBjlS9 Gh2WHPp5xo1lj6UbjV1GlPBwyVx2s+F6cvcAiUo3VNx244sTGjeIQ3MGC36JWYH6KGDh JpR/EXd3jihU9PtODaf5P6GXWGHcQQOBizie3b5hfy2/zSxVxHQELHz5nM4RqpheaBFh xfyKA92FnZ0QCyCODJ3XD6NaKCH4GGM0YDNeW6K2XEsH105oPZ2iL+61NPht9R5WIdFi rzAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=m/49hZyaBWv8+T9KV58SXA4zMrUiuG5mBleY4wcmPr4=; b=bH+p1QYlmU3tTCGtBBU9543uBgBJhU8xNB8ngbzCRmFVLmWqeKyl2HLdLrEkOalOsC 8cVUJpS7ELf2VI7qlA1CAD06mKsXPEpKZ4gNsiFA30mPificYkYXp4UmfvicycH4PHzg WSVBnpVrlSYwy1a9Eb6mrNrmENAohFhsB+37VRwyoresZPZqRIv1ah0Oay+jcSyD5pVK Xj4bYuRoSR3IlGl4/M5AaBRsNh7E/DG9kzHtMDArLlXd/br+PTiQuwGeW7IluBgKDMsj X2+54BA/FeHps+J97Wb9IQZj7OBRDaq/gSz2VCyJaxaT8EiWFds/lJcpagegHBxu5TpH NI5A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id d10si3682313edn.22.2018.04.19.08.51.55; Thu, 19 Apr 2018 08:51:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id CD26CC21FE2; Thu, 19 Apr 2018 15:50:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id D93E1C21FCF; Thu, 19 Apr 2018 15:49:30 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id B0362C21E89; Thu, 19 Apr 2018 15:49:26 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id BDEB7C21FA3 for ; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 3A512AF87; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Thu, 19 Apr 2018 17:49:22 +0200 Message-Id: <20180419154923.70719-8-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180419154923.70719-1-agraf@suse.de> References: <20180419154923.70719-1-agraf@suse.de> Cc: Heinrich Schuchardt , schwab@suse.de, Greentime Hu Subject: [U-Boot] [PATCH v2 7/8] riscv: nx25: Enable distro boot X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Distro 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 --- configs/nx25-ae250_defconfig | 1 + include/configs/nx25-ae250.h | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/configs/nx25-ae250_defconfig b/configs/nx25-ae250_defconfig index 4f9bd58f75..437083231b 100644 --- a/configs/nx25-ae250_defconfig +++ b/configs/nx25-ae250_defconfig @@ -37,3 +37,4 @@ CONFIG_DM_SPI=y CONFIG_ATCSPI200_SPI=y CONFIG_TIMER=y CONFIG_ATCPIT100_TIMER=y +CONFIG_DISTRO_DEFAULTS=y diff --git a/include/configs/nx25-ae250.h b/include/configs/nx25-ae250.h index 0e4c431cab..a90c75abc4 100644 --- a/include/configs/nx25-ae250.h +++ b/include/configs/nx25-ae250.h @@ -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 + +#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 */ From patchwork Thu Apr 19 15:49:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 133836 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp792957ljf; Thu, 19 Apr 2018 08:54:27 -0700 (PDT) X-Google-Smtp-Source: AIpwx49K0uCkYkksKRnXbin7vJRDuMz0Lgh1TWF0balWXtiduRctW8cEgrDR97nwXsIoXTvcXfip X-Received: by 10.80.134.109 with SMTP id 42mr9032846edt.229.1524153267680; Thu, 19 Apr 2018 08:54:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524153267; cv=none; d=google.com; s=arc-20160816; b=YISPysCfMR5bmpAqFncM/b4NbV4IQot7WH/NA6WTW+KrqOgUbQo4zPilkyUYSt5psy AWbGek9ocJB8J7hgPZWaqTldEvbQTeVQSUWsjAuzJxUWThAbtQr5nAY5HidHsN0/Y/bL 9y9UDHF8xh+nM9bUJOVQWNrgL3doauphjhFqiJEqXEfL34jFpBhgFq6MgdmEbbC/mACG KdlfVPy3oynTqQgZw0spFmAXceWDaufSZdvom0kfVnSADHz+TKql+r56J9w52mk1RBol UsCbK4L1YWVrX12fUmYVLYD4S1kNFIqAbS2KUg6PkLG8fJsJnjnGD3gxv9sZE5W6WBKD zflg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=Sr6xbxBtDFG6vlhapqm0oQ/FzDT/Mx40yshrchE2Sxs=; b=d9714Xsq2zUvE8UWjDLZLaMCB42yhosXdDdKOqF10Mx0UjkKOsw7aqq2/ekRoE2RN5 6YRwgvWHJAbopL9Fy2AgbSUsLjybw4QkFaMO5nhekzwEMc9jSIqvfBOatppNRXQhbzqE zfhV9NhV2cngnsmnocb+J/apADGOzuh0lrPJCRLQzZIf2aTBAk9PTq52J27VFLUoMqKd QtVzlxCBGrvHeqJvRmcBl+Ne6UrlVMJmRJk5+D+Xm/iZHQg/67wb3qP+kJV3IkINOw0p +BEBAqjnu/5W4UTDuFuWrMRX6f/+FByfZTU+efXr2/lYds4Zfp1jZxT3aviv3gBf2uvx pouA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id 63si2186759edn.304.2018.04.19.08.54.27; Thu, 19 Apr 2018 08:54:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id 29F2DC21FF4; Thu, 19 Apr 2018 15:50:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 03A79C21FFE; Thu, 19 Apr 2018 15:49:34 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id EB186C21E89; Thu, 19 Apr 2018 15:49:26 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id BD7E4C21F9B for ; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 38224AF85; Thu, 19 Apr 2018 15:49:25 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Thu, 19 Apr 2018 17:49:23 +0200 Message-Id: <20180419154923.70719-9-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180419154923.70719-1-agraf@suse.de> References: <20180419154923.70719-1-agraf@suse.de> Cc: Heinrich Schuchardt , schwab@suse.de, Greentime Hu Subject: [U-Boot] [PATCH v2 8/8] efi_loader: Enable RISC-V support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" We 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. Signed-off-by: Alexander Graf --- 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(-) diff --git a/arch/riscv/cpu/nx25/u-boot.lds b/arch/riscv/cpu/nx25/u-boot.lds index 936fd779aa..508fa7e58d 100644 --- a/arch/riscv/cpu/nx25/u-boot.lds +++ b/arch/riscv/cpu/nx25/u-boot.lds @@ -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*) } diff --git a/cmd/Kconfig b/cmd/Kconfig index bc1d2f31c0..c9883a40e7 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -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 diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig index 83d75c4fdc..9de58bb012 100644 --- a/lib/efi_loader/Kconfig +++ b/lib/efi_loader/Kconfig @@ -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 diff --git a/lib/efi_loader/efi_runtime.c b/lib/efi_loader/efi_runtime.c index 573a5d6ac1..33bbc8d6cc 100644 --- a/lib/efi_loader/efi_runtime.c +++ b/lib/efi_loader/efi_runtime.c @@ -41,6 +41,25 @@ static efi_status_t __efi_runtime EFIAPI efi_invalid_parameter(void); #include #define R_RELATIVE R_386_RELATIVE #define R_MASK 0xffULL +#elif defined(CONFIG_RISCV) +#include +#define R_RELATIVE R_RISCV_RELATIVE +#define R_MASK 0xffULL +#define IS_RELA 1 + +struct dyn_sym { + ulong foo1; + ulong addr; + u32 foo2; + u32 foo3; +}; +#ifdef CONFIG_CPU_RISCV_32 +#define R_ABSOLUTE R_RISCV_32 +#define SYM_INDEX 8 +#else +#define R_ABSOLUTE R_RISCV_64 +#define SYM_INDEX 32 +#endif #else #error Need to add relocation awareness #endif @@ -247,15 +266,27 @@ void efi_runtime_relocate(ulong offset, struct efi_mem_desc *map) p = (void*)((ulong)rel->offset - base) + gd->relocaddr; - if ((rel->info & R_MASK) != R_RELATIVE) { - continue; - } + debug("%s: rel->info=%#lx *p=%#lx rel->offset=%p\n", __func__, rel->info, *p, rel->offset); + switch (rel->info & R_MASK) { + case R_RELATIVE: #ifdef IS_RELA - newaddr = rel->addend + offset - CONFIG_SYS_TEXT_BASE; + newaddr = rel->addend + offset - CONFIG_SYS_TEXT_BASE; #else - newaddr = *p - lastoff + offset; + newaddr = *p - lastoff + offset; #endif + break; +#ifdef R_ABSOLUTE + case R_ABSOLUTE: { + ulong symidx = rel->info >> SYM_INDEX; + extern struct dyn_sym __dyn_sym_start[]; + newaddr = __dyn_sym_start[symidx].addr + offset; + break; + } +#endif + default: + continue; + } /* Check if the relocation is inside bounds */ if (map && ((newaddr < map->virtual_start) ||