From patchwork Tue Apr 16 04:24:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AKASHI Takahiro X-Patchwork-Id: 1086047 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="xBuU7qAf"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44jskS4JtGz9s4V for ; Tue, 16 Apr 2019 14:26:08 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 4C4E2C21DD3; Tue, 16 Apr 2019 04:24:42 +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=T_DKIM_INVALID 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 064A7C21E34; Tue, 16 Apr 2019 04:23:33 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 38FA7C21E1B; Tue, 16 Apr 2019 04:23:19 +0000 (UTC) Received: from mail-yb1-f196.google.com (mail-yb1-f196.google.com [209.85.219.196]) by lists.denx.de (Postfix) with ESMTPS id EEFFCC21E52 for ; Tue, 16 Apr 2019 04:23:15 +0000 (UTC) Received: by mail-yb1-f196.google.com with SMTP id l124so7258028ybf.9 for ; Mon, 15 Apr 2019 21:23:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lr3C6gXAWfK6uTnXnn6fVzJrQCY5oV0pI/qBRCAc3LE=; b=xBuU7qAfh2g4zawJRTR5hKROC5FO0+obXCxP0yOie3LMs8rIRJAPvCNgeR5IQym/zT 88mgamgxlfZXlkhHLS617FY9/6mdnGtm0zdI1cW7P2vHCfZAsUyubZrFKtbtXjW2ub+z VfFTgQXuGHVmo7Rx/guEeYLcyl5wgx2FMW1/rkI4s08HL43u3lP2GBMJAUtdyVWFPcDf 5PlZyte5HyiFDWEf+KXuJeFz6hc0pDSDRrD5AufLceo6XDQkhBVp63KxAVdnJDmgRgG3 j9faytsTdcSCTRCLKpiJJagdZN8CC1lREX52ehYguIJjs8eCt9KhAVK7R6oRhnyaMT9t kVPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lr3C6gXAWfK6uTnXnn6fVzJrQCY5oV0pI/qBRCAc3LE=; b=SEzobWvrjeBSd1Le8FLcy5D2/mBnhUoRuu5o/nErn3uY3OsUW6b6U26sVu7+c6pC6z JZJPuOLo3GsnX5qZyAXi54AQnvNYHYVGkmmkzYTF2LX536dhTpVj9bmWcV+asXHDp15a 9ofQd3ZYwWomL6z7c6wffN5qslX1SJEFJLPG1TCFX/6ZlhbgFpZw8D32nrigkd3hBww3 Fc/1nnuX+lrse8uSuHrAGkgQk5x6ormSpIjzLsJ2bibDUAxkJJiB7jJ2Z9fLIUGFSONs VMw+d0CYYJkJl3herlzwO7OTuO0ESYJOU2F/dvuYJhZY+c6w+GNMuV6wDL9SoV3A2U7F bu7Q== X-Gm-Message-State: APjAAAWMqQRY4ekT53Zp8V3bVUirIoHeRXtDs8ofdVKMiPerNScPRWBG JXa9mCcars2zfIujAsxqgt16Tf1kc1k= X-Google-Smtp-Source: APXvYqyKLMr5RBbQd68NBzAZUpXkCq7om+DEJ+sYiazUsmpUXLmgmTsRcXCr0IsQbGRMqnei3jnHdg== X-Received: by 2002:a25:2d49:: with SMTP id s9mr64518040ybe.278.1555388594960; Mon, 15 Apr 2019 21:23:14 -0700 (PDT) Received: from linaro.org ([121.95.100.191]) by smtp.googlemail.com with ESMTPSA id 134sm20248989ywm.39.2019.04.15.21.23.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 21:23:14 -0700 (PDT) From: AKASHI Takahiro To: xypron.glpk@gmx.de, agraf@csgraf.de Date: Tue, 16 Apr 2019 13:24:25 +0900 Message-Id: <20190416042428.5007-8-takahiro.akashi@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190416042428.5007-1-takahiro.akashi@linaro.org> References: <20190416042428.5007-1-takahiro.akashi@linaro.org> MIME-Version: 1.0 Cc: u-boot@lists.denx.de Subject: [U-Boot] [RFC v3 07/10] cmd: bootefi: carve out bootmgr code from do_bootefi() 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: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This is a preparatory patch for reworking do_bootefi() in later patch. do_bootmgr_exec() is renamed to do_efibootmgr() as we put all the necessary code into this function. Signed-off-by: AKASHI Takahiro --- cmd/bootefi.c | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/cmd/bootefi.c b/cmd/bootefi.c index 10fe10cb4daf..7cc6f0ee5ac8 100644 --- a/cmd/bootefi.c +++ b/cmd/bootefi.c @@ -307,22 +307,49 @@ err_add_protocol: return ret; } -static int do_bootefi_bootmgr_exec(void) +/** + * do_efibootmgr() - execute EFI Boot Manager + * + * @fdt_opt: string of fdt start address + * Return: status code + * + * Execute EFI Boot Manager + */ +static int do_efibootmgr(const char *fdt_opt) { struct efi_device_path *device_path, *file_path; void *addr; - efi_status_t r; + efi_status_t ret; + + /* Allow unaligned memory access */ + allow_unaligned(); + + switch_to_non_secure_mode(); + + /* Initialize EFI drivers */ + ret = efi_init_obj_list(); + if (ret != EFI_SUCCESS) { + printf("Error: Cannot initialize UEFI sub-system, r = %lu\n", + ret & ~EFI_ERROR_MASK); + return CMD_RET_FAILURE; + } + + ret = efi_install_fdt(fdt_opt); + if (ret == EFI_INVALID_PARAMETER) + return CMD_RET_USAGE; + else if (ret != EFI_SUCCESS) + return CMD_RET_FAILURE; addr = efi_bootmgr_load(&device_path, &file_path); if (!addr) return 1; printf("## Starting EFI application at %p ...\n", addr); - r = do_bootefi_exec(addr, device_path, file_path); + ret = do_bootefi_exec(addr, device_path, file_path); printf("## Application terminated, r = %lu\n", - r & ~EFI_ERROR_MASK); + ret & ~EFI_ERROR_MASK); - if (r != EFI_SUCCESS) + if (ret != EFI_SUCCESS) return 1; return 0; @@ -463,6 +490,9 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (argc < 2) return CMD_RET_USAGE; + + if (!strcmp(argv[1], "bootmgr")) + return do_efibootmgr(argc > 2 ? argv[2] : NULL); #ifdef CONFIG_CMD_BOOTEFI_SELFTEST else if (!strcmp(argv[1], "selftest")) return do_efi_selftest(argc > 2 ? argv[2] : NULL); @@ -499,9 +529,7 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) memcpy(map_sysmem(addr, size), __efi_helloworld_begin, size); } else #endif - if (!strcmp(argv[1], "bootmgr")) { - return do_bootefi_bootmgr_exec(); - } else { + { saddr = argv[1]; addr = simple_strtoul(saddr, NULL, 16);