From patchwork Tue Mar 17 21:19:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 1256966 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=fail (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=QnW3t5QW; 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)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48hmL30zNLz9sPJ for ; Wed, 18 Mar 2020 08:20:42 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6DD6A814F4; Tue, 17 Mar 2020 22:20:26 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.b="QnW3t5QW"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1D76A814F4; Tue, 17 Mar 2020 22:20:14 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from esa5.hgst.iphmx.com (esa5.hgst.iphmx.com [216.71.153.144]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 1A97280D3F for ; Tue, 17 Mar 2020 22:20:06 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=wdc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=prvs=3382782c6=atish.patra@wdc.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1584480008; x=1616016008; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dtwQZlUIeFYKUE2WlwdRcCe3V0GVJlw2DUEIvu1z0N0=; b=QnW3t5QWn9PEsTezQuS2dB9graDgPyLI6JbeZ3tre4yYtiVTkNT+mTiw 0B/5sqRdHvI442auhJzAzol9QZl9i5qnyLXXB9OP5fjNtduPLwdMEJgjN q4jL2zK3EHGkSWgC2BzpGSRb3mGzEw6fe15gOMNsPcGVGJAGdI99CVsWR RHBWU6Xsk3xYa9Q74ZR6Ho5G6GxRnXNp+uhhsROvKS/f8Jk6fRUUoHDGG PtqU9FheA+JA8a4wJI02PSriU+ghfQgPyRJBrLUul2x5iHrL0aOKjpc/s PWXjnx7kPQqtmSs2/6fzUOlx2im1N7pJcajFnXb60eBDpcWg/evKRw5aZ Q==; IronPort-SDR: LmV29AZp1HnmmydVfa5UgA+c55Tb1poVOpKy9L250ryysKOTC9KD4yeNKMtmPNWb5PAdquTRWu 4LYAMAGt1zJPU3IfhfbCMQEQm1GN2AHePrevGP6/rLFCmdicpM81ryG3UP9sDct9MWwbaW3hSb Uy967aqtR1udNwusrvefsxDrJmrdWHOoP8p/MyB4dshWOS6wC73oj3T1U5o6O0xcZofZhZUrwp w6NGhVdzbZLRGi8liPzEltm9NdkqNIdnbhVIRV7hn0ZJf3JV7bWsxE3u4JxVNS7iXaIRx7nnUa Nm8= X-IronPort-AV: E=Sophos;i="5.70,565,1574092800"; d="scan'208";a="133222679" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 18 Mar 2020 05:19:56 +0800 IronPort-SDR: +xecwvx4EjH6ocA0OZzeghF3D4Z/4k4AaPJSrjoCi2TGJe95Ui5j3ppxM0np3BGlZ7YW2ZsDiy I2zIhlvamaKuDdg5U+1cgGJQ/72i4uiCmPc/ZoDna1XyyKa8j+JEFj+JmH/CsCELqtR5U5SLCX NMrK3d0vshMHwmDWZj7x/vJvlY8spcxPERXNWfhLrOGcRZE5TNK7ul4EYOOhrdiAaYRaxw2PhO dG+ozRlk1IDCV4NVD6fsmeZB/yc0Bq/lQhkBOJRKozCevU5JeDGnwZRZ/GoejXku9A7hk4wYmm 063f4MVuMoriqxJ0tbHRY8PC Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2020 14:11:23 -0700 IronPort-SDR: iuO2CWf4OYu9nGxBSHGyuFuJwTm4h2PVqKOgjtUqBgQjS6VkwA88452vMcxOdI+2ktQAu3+gut /x4B7Wp5oBcX7ETQNOlMODDfuYQzqUPv8ahSTYEDFiqp2tKhtVLwlK9D1/wOFHeBCeETcDKZnU fjYDi3TItWDhsnesUXcwG60qqfGgj6a0ND6+addzut3STXBk7mWmOTDJDRQL3EApJ4O0AmUIux HIlkujCHt369+rZ/96/TUHz3eXSj+wQjBC1i7HnfZKOWOnprrJ44LdO9IeXHATd0TTEDxAOObI 5fo= WDCIronportException: Internal Received: from mccorma-lt.ad.shared (HELO yoda.hgst.com) ([10.86.54.125]) by uls-op-cesaip02.wdc.com with ESMTP; 17 Mar 2020 14:19:55 -0700 From: Atish Patra To: u-boot@lists.denx.de Cc: Atish Patra , Alexander Graf , Anup Patel , Bin Meng , Heinrich Schuchardt , Lukas Auer , Palmer Dabbelt , Rick Chen , abner.chang@hpe.com, daniel.schaefer@hpe.com Subject: [PATCH v3 2/5] cmd: bootefi: Parse reserved-memory node from DT Date: Tue, 17 Mar 2020 14:19:43 -0700 Message-Id: <20200317211946.28062-3-atish.patra@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200317211946.28062-1-atish.patra@wdc.com> References: <20200317211946.28062-1-atish.patra@wdc.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.30rc1 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.2 at phobos.denx.de X-Virus-Status: Clean Currently, bootefi only parses memory reservation block to setup EFI reserved memory mappings. However, it doesn't parse the reserved-memory[1] device tree node that also can contain the reserved memory regions. Add capability to parse reserved-memory node and update the EFI memory mappings accordingly. 1. /doc/device-tree-bindings/reserved-memory/reserved-memory.txt] Signed-off-by: Atish Patra --- cmd/bootefi.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/cmd/bootefi.c b/cmd/bootefi.c index 24fc42ae898e..291cb2d69ff6 100644 --- a/cmd/bootefi.c +++ b/cmd/bootefi.c @@ -149,6 +149,20 @@ done: return ret; } +static void efi_reserve_memory(uint64_t addr, uint64_t size) +{ + uint64_t pages; + + /* Convert from sandbox address space. */ + addr = (uintptr_t)map_sysmem(addr, 0); + pages = efi_size_in_pages(size + (addr & EFI_PAGE_MASK)); + addr &= ~EFI_PAGE_MASK; + if (efi_add_memory_map(addr, pages, EFI_RESERVED_MEMORY_TYPE, + false) != EFI_SUCCESS) + printf("Reserved memory mapping failed addr %llx size %llx\n", + (unsigned long long)addr, (unsigned long long)size); +} + /** * efi_carve_out_dt_rsv() - Carve out DT reserved memory ranges * @@ -161,7 +175,8 @@ done: static void efi_carve_out_dt_rsv(void *fdt) { int nr_rsv, i; - uint64_t addr, size, pages; + uint64_t addr, size; + int nodeoffset, subnode; nr_rsv = fdt_num_mem_rsv(fdt); @@ -169,15 +184,26 @@ static void efi_carve_out_dt_rsv(void *fdt) for (i = 0; i < nr_rsv; i++) { if (fdt_get_mem_rsv(fdt, i, &addr, &size) != 0) continue; + efi_reserve_memory(addr, size); + } - /* Convert from sandbox address space. */ - addr = (uintptr_t)map_sysmem(addr, 0); - - pages = efi_size_in_pages(size + (addr & EFI_PAGE_MASK)); - addr &= ~EFI_PAGE_MASK; - if (efi_add_memory_map(addr, pages, EFI_RESERVED_MEMORY_TYPE, - false) != EFI_SUCCESS) - printf("FDT memrsv map %d: Failed to add to map\n", i); + /* process reserved-memory */ + nodeoffset = fdt_subnode_offset(fdt, 0, "reserved-memory"); + if (nodeoffset < 0) + return; + subnode = fdt_first_subnode(fdt, nodeoffset); + while (subnode >= 0) { + /* check if this subnode has a reg property */ + addr = fdtdec_get_addr_size_auto_noparent(fdt, subnode, + "reg", 0, + (fdt_size_t *)&size, + true); + if (addr == FDT_ADDR_T_NONE) { + debug("failed to read address/size\n"); + continue; + } + efi_reserve_memory(addr, size); + subnode = fdt_next_subnode(fdt, subnode); } }