From patchwork Sat Mar 14 00:11:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Patra X-Patchwork-Id: 1254737 X-Patchwork-Delegate: uboot@andestech.com 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=2a01:238:438b:c500:173d:9f52:ddab:ee01; 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=AAXYH4m7; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (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 48fNKf59ffz9sPJ for ; Sat, 14 Mar 2020 11:12:06 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9B07A813CC; Sat, 14 Mar 2020 01:11:56 +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="AAXYH4m7"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C276A813D1; Sat, 14 Mar 2020 01:11:44 +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 esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (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 68B0281333 for ; Sat, 14 Mar 2020 01:11:40 +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=33551ae11=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=1584144701; x=1615680701; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Uebgdb90IRU23LilJy4Fb5rIwdNs1sto50S0s/+QNYw=; b=AAXYH4m7G7rqpLL5HZJcxgZwRp2qjCoOkJ9HpcT37P2D6ovA6LEuau3g 44Yr9VbtMHRUkb6mtum8Kkx0lA3aDse0xUqHTD19lePfT29LbT5hwEZrB eJrsM61iZbdM9ofT8azYi4UdcFoiYVh7lmSTymf5AoIohpTSuvytT+kD+ oiyBzUGU1/J8izC3PuMgEFYOdwZJwREVHyrzkvIaG6Pk/3vuLgZGQXGKq SId+JoqQUHhNniDLE+kI6Ke4zvofZgJLCZnzTAdrOPIRL+pTbwH8GB3FK oVMpjFpZd6nbQDKYQs5M76IzpAczu91TFlVhDJV0RqmUBB0uOTm33fJgM g==; IronPort-SDR: Gt84PT9/y3BA//WYQ0ISRXgHpUOFkaIKPvNIhJYj5zzbfFd3eQz899zpICwfRWD8lRD0+6M3lQ AdH2XcncJidu6SPfwhs/w9tgfHg8U3WPuId5AgKcED8bvbXblhgCuGUJkynEGu1wrSxvceFp9o ozENBOx0kt75N6XcaQpaywH/7tHodZSwduNnCZd4KU8ceBkZG67jcgzDXRYmusWWiImWFxKnmq ktCyBO6ktXbeQ4LjW0/mU7cTyaEqvJjEuFRZekCRjoMIbaGqOIVYxW+Kq7c86hI7Rz7WoY6Gr1 O+M= X-IronPort-AV: E=Sophos;i="5.70,550,1574092800"; d="scan'208";a="133903978" 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; 14 Mar 2020 08:11:38 +0800 IronPort-SDR: fFPZbaiYHDLpRhW5SaYgjwbC2vc6HHjrEE42LznrggvJQcI6XF6PRYycOYNXHMllbTWOdPHemD pkNhL88uEuL5VO3T+0vlqpAaklK4lLzze2z/+ZGO83CRrgeGTSKqgezIEnll0LHGYPohTgRo9X lYR2QEuyNI0VSmTQul3QIKP4A1XhEklFrFWfbj3VegKlM0apr/g1kUZHwi0ezDOlvwnOoiUCHj jwSnJuLqWLJA2Ri1SNrGklsSb/br3PO+linJtjn8wL6wD3h/R3y9o9k8+L5qi0duMKOJdkFu7B ArvpiHHUSFpx9B3CGfukVoKp 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; 13 Mar 2020 17:03:11 -0700 IronPort-SDR: 0eLv2rJlpukDCzYD5/BM/qEf2vNm9Hj50VPz7VEyAaHet048ONC0uoRTTYAOTkRuRKfQ+tYYzW pjVCd2ykMivQ4FNO6knn30W3bNdFDCZBsHleKBoeKPbFG8Q9ktdcEQCF9cSlfefvtWMI7WXKj9 mShvsiVArBGxWNw/z3w96iKSBW/g31+AZ2Rwa/ez+gvrrw+pa05n0bY2D2vp025kE22DhMXb8w kqE9snKwodi5A8JfU7aYv92pVM29JasRhmdJ9Gqtd789bW+OFcRztnPK9hiMnOnDSHCvTtVvgK 5xs= WDCIronportException: Internal Received: from wdapacbjl0003.my.asia.wdc.com (HELO yoda.hgst.com) ([10.86.54.92]) by uls-op-cesaip02.wdc.com with ESMTP; 13 Mar 2020 17:11:37 -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 v2 2/4] cmd: bootefi: Parse reserved-memory node from DT Date: Fri, 13 Mar 2020 17:11:30 -0700 Message-Id: <20200314001132.17393-3-atish.patra@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200314001132.17393-1-atish.patra@wdc.com> References: <20200314001132.17393-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 Reviewed-by: Heinrich Schuchardt --- cmd/bootefi.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/cmd/bootefi.c b/cmd/bootefi.c index 24fc42ae898e..43b36fbacfcd 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,24 @@ 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) { + subnode = fdt_first_subnode(fdt, nodeoffset); + while (subnode >= 0) { + /* check if this subnode has a reg property */ + addr = fdtdec_get_addr_size(fdt, subnode, "reg", + (fdt_size_t *)&size); + 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); + } } }