From patchwork Thu Sep 10 11:00:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1361495 X-Patchwork-Delegate: xypron.glpk@gmx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=iMkIzx1W; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BnGCj20R4z9sSJ for ; Thu, 10 Sep 2020 21:01:21 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id BDC7C822A7; Thu, 10 Sep 2020 13:01:14 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="iMkIzx1W"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C7ACA822CD; Thu, 10 Sep 2020 13:01:12 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FROM,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 3108D81F67 for ; Thu, 10 Sep 2020 13:01:10 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=xypron.glpk@gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1599735661; bh=7HAZ/lyYsWyUf+o6i/juiXeNdT/6iXccijR5Sl9gloY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=iMkIzx1WpMwrTT5ix1zO/HKX/HMefdAdyLZKNVT8D9Wj4Mu24dvkNQimkxZWaUGRm JiPPyC+FiKFoFjEkfXeTemevO1x8iIg4RSy+k6qkgmxLxGrYuQoZyzWK2DZsf78MRS PdjwZYv3i5Sq57NvBCYR4PajubK00QCXdqYnbh6A= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from workstation4.fritz.box ([178.202.41.107]) by mail.gmx.com (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1MiJVG-1klp7q3zeA-00fQhF; Thu, 10 Sep 2020 13:01:01 +0200 From: Heinrich Schuchardt To: Alexander Graf Cc: Rick Chen , Bin Meng , Atish Patra , Sean Anderson , u-boot@lists.denx.de, Heinrich Schuchardt Subject: [PATCH 2/3] efi_loader: save global data pointer on RISC-V Date: Thu, 10 Sep 2020 13:00:47 +0200 Message-Id: <20200910110048.21446-3-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200910110048.21446-1-xypron.glpk@gmx.de> References: <20200910110048.21446-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:poj/CcdH6wjGZMPoL6GLgHUPgAjhxwn7nUy7ziKbJ2tZJ+Zs3H4 LbeXxge8D5udt7GoQPwvmRUZzq2yD305Z5mpQiX69fdcNoklOkeUrCQrn64LagxClONbIVM vpzgyeel/YT2xLYQjsbOTpHVVz0JA0rmscLZYRDoTKlcb9Ys/L1OMUcRrY6vDYN8FbaHt91 rZrlZsfu4kovQeb+hoH9Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:jWOo3Wc++Eo=:pcG2uOO5e3d57vdxctPcBV wwHwZMaBG/KF9ecObd65ho1xIccpt/OdWt2/VKcOetROwR3xuCpDK9fYSjWPD5T4MDMq//xrM 9Y+OWbw3XAEXLqVyZiW+zehEJZd3REYNnBmbSwURprkxS9YOtI3ozDhuP9QOqtFtYUyrnqo3W 2HWwhqhLkjyb86sqjELAM8WOkgnxa4kYuoURa5FfVX7tL2HPrAeS5NY6OEClD2Z14/+/2U7hl 5rOv8hj8Hmsccjl1ndQm5dQAUEmlXZS+82q0ajc6CKDX6kRzfTQfipgmJwdfl8cgc38GN+c74 PqBJq80xNXx10YSTGWUqOXng2yS7595goqcqWihdah6a9vAMBF4EmgjiFC+EvfwpbCSSC11Cx oJJ4pleKiV+wibE5iL1koCQBn8Y28SiREk9ZQFKGjcjYt0Nw9I0nMiAlt8Drbu/kMTPK1lc+x qbpcB2puEvAVyHKoEpqI7tR6kdyP8Yh4hk7HMUFy5ovFCMFAfmpUfXsSmPUeSY9IKEYWk3Ek8 q54Ig9jzYMJDh/KVvihSw+sbrOK8sE7/7/eCqO8vWrdnel3Z8vUwLdWexzHpgMmIvXal3uJcb cPP/BiBUW5oPbdQzssQvO4c6hrX7zGS4Q+pJGIobdY/J3+yNeSxuYaj5lBO+Ac3wP6RPx+Qx8 Du6u/qD+taT1MVwsLd6bJBg2nbAWb99Wh/8rpzpfXaTScpgSHr8IQrZTClJXIUDAhDzdPsIzH hL1BR1g5yM1mxHmJ68RfYumhx6AiH9oP0HEJaKieQNjILCoglxj/zScas977E3/03e+PQy9YO 1OINm7d2s+72vdj0MG0X6tgbfWIuE1OpbTJ3TfPsTvBNqf7orMYvpiKG94DBygVSJCNa87X6u OUSNk3yvfAxLTaIPSB+3xuvi4YOeLD2Zb5Zd969p7VPNG/380opcMacAUyuQrSu4GbLjMV7xU ah3yUpkzpS0LmlU14VKE+GgIaFeScfnmreRZfLzoysIt7PELeUlZfLcQHM48Fibt/d1LAp6j+ GEa2GTxLeKRrqh5inCaxNkt8OOm340RbLh5plVAyRNge/nHLw6CdtCTSAs7OJAGi4zMeKGOHu 0WXGLVIUgzNf7MuepY7J4HEBcClH+zW7wGdw3DX3ise2rQ+SBy1Cv3CC4Q5uF+3AJ0+7JjKPc mbE4DnLF91dHZYVww2UKWRjP2RGGxS6U/jnqPovr5Rsak0Oyn/UTa35i5oBwoQFjgda34JFyU V9MzJRizif5ubbxnLEx9u/S4bsoLJ0/3itOsRlQ== X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean On RISC-V the global data pointer is stored in register gp. When a UEFI binary calls the EFI API we have to restore it. Signed-off-by: Heinrich Schuchardt --- lib/efi_loader/efi_boottime.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) -- 2.28.0 diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index dcd3eec894..bf78176217 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -42,9 +42,9 @@ LIST_HEAD(efi_register_notify_events); /* Handle of the currently executing image */ static efi_handle_t current_image; -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM) || defined(CONFIG_RISCV) /* - * The "gd" pointer lives in a register on ARM and AArch64 that we declare + * The "gd" pointer lives in a register on ARM and RISC-V that we declare * fixed when compiling U-Boot. However, the payload does not know about that * restriction so we need to manually swap its and our view of that register on * EFI callback entry/exit. @@ -86,7 +86,7 @@ static efi_status_t EFIAPI efi_disconnect_controller( int __efi_entry_check(void) { int ret = entry_count++ == 0; -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM) || defined(CONFIG_RISCV) assert(efi_gd); app_gd = gd; set_gd(efi_gd); @@ -98,7 +98,7 @@ int __efi_entry_check(void) int __efi_exit_check(void) { int ret = --entry_count == 0; -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM) || defined(CONFIG_RISCV) set_gd(app_gd); #endif return ret; @@ -107,7 +107,7 @@ int __efi_exit_check(void) /** * efi_save_gd() - save global data register * - * On the ARM architecture gd is mapped to a fixed register (r9 or x18). + * On the ARM and RISC-V architectures gd is mapped to a fixed register. * As this register may be overwritten by an EFI payload we save it here * and restore it on every callback entered. * @@ -115,7 +115,7 @@ int __efi_exit_check(void) */ void efi_save_gd(void) { -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM) || defined(CONFIG_RISCV) efi_gd = gd; #endif } @@ -123,13 +123,13 @@ void efi_save_gd(void) /** * efi_restore_gd() - restore global data register * - * On the ARM architecture gd is mapped to a fixed register (r9 or x18). + * On the ARM and RISC-V architectures gd is mapped to a fixed register. * Restore it after returning from the UEFI world to the value saved via * efi_save_gd(). */ void efi_restore_gd(void) { -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM) || defined(CONFIG_RISCV) /* Only restore if we're already in EFI context */ if (!efi_gd) return; @@ -2920,7 +2920,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, * us to the current line. This implies that the second half * of the EFI_CALL macro has not been executed. */ -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM) || defined(CONFIG_RISCV) /* * efi_exit() called efi_restore_gd(). We have to undo this * otherwise __efi_entry_check() will put the wrong value into