From patchwork Sat Nov 10 19:27:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 995978 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=none (p=none dis=none) header.from=gmx.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42snHX2rXwz9s5c for ; Sun, 11 Nov 2018 06:33:12 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 0DF95C2229E; Sat, 10 Nov 2018 19:29: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=FREEMAIL_FROM, 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 C9AC6C222B7; Sat, 10 Nov 2018 19:27:47 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6F3E0C21F1B; Sat, 10 Nov 2018 19:27:41 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by lists.denx.de (Postfix) with ESMTPS id 160AEC2225A for ; Sat, 10 Nov 2018 19:27:41 +0000 (UTC) Received: from LT02.fritz.box ([84.118.159.3]) by mail.gmx.com (mrgmx103 [212.227.17.174]) with ESMTPSA (Nemesis) id 0LoVja-1fsXtW0dKc-00gcV4; Sat, 10 Nov 2018 20:27:40 +0100 From: Heinrich Schuchardt To: Alexander Graf Date: Sat, 10 Nov 2018 20:27:25 +0100 Message-Id: <20181110192727.32185-8-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181110192727.32185-1-xypron.glpk@gmx.de> References: <20181110192727.32185-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:sG358uDLGuTsd7UmIQ7aqgbgVHC2QSTMGLLjdMt6aAiCvWhLUGW GSDiY/3SP5VIPHUpYsBfjQkHKxU6kAGYM9xF89rrVx25ZhSVc+qb6aOIwwonwkFWOIu6hn2 BEcGqplAJctefGzGP7e75CIjtBOrzCY1xCtPHwySSCsCSbq3WGf/QEJBUZVJp0WwtXVqI2d yPOsmVnadgc+YKABCnrbw== X-UI-Out-Filterresults: notjunk:1; V01:K0:H17HsMCZX60=:X2v3vygbNhgyhvSyhK6RrC lchYLhnTqShkKOT+UyN3/jv8ULtD89lskm7LLvnm+3l+R4dMYAadyoyOL60QAN/YOuHW/yYaV 2hVj27B1MESMaqeXCgWVbVzCravwdcDdrABVvwoBpPkoVz6L9XmoKYW1CJSyIFFQCErN55y+S Y5nwz2WRIN/S2uInU1W7qxGFjKtEdfxOcSbTHGi7VnUnkcesAZrEvEPN+ZrmMZBBc+JmCjjJb t51papqTGwnRhRX6CsEhe1Qfosd8QynIBgBeTy2dtNYX4Yc/GU0AtDYFIkcJYPB1ORKStgoYo mt3YsShy3nX3kPmbStvS/MHfXxyqQm9axX6+U8Uv+gImPhiZ3o/cRN5lJff0MFZUr86hqdyXC 8olMixWwY5barZEyLiOOmJlLscEk8IWzG5oVqp90G5jto4qwMdmkZfD+/fh+IlZD3dYLv5G9n 9OHt1kkNibqcO97EsQy4tqnD8/F4mdiFeTnVpaZWJ9npRe8moxJEMuqpu3UKS+2GyGzmKevuA pUz3w9HtqtMvzmzzpY9aTBldN6ZQ4XqbzgUyt2zoJ3Xqzu6tILBxptGVHxzcBgxeU4nL31yLD fBqw6tERh3txarYLIt0ZftZp3xFDZ7xkwMxv1oPYhdn615zu61N5g2U0HsFxNdQDQX24mPrNG m/xqwaRDUv9WNPC9jbkjMVjESL8B5UmVb3tg61ppXOhJ9Sf7ZQLwfyf+jjg/z8YoigrW2deEg YQhXIVXcZXYV+7iGWOGl6Fdt7skOoh2LK1FG5+ITbTErl9y9AIRFzGzX03DcPXLLVw7RbaBvO +iXUcUqDyFngr7jgtM0OXg9TlK8HIG2TMPUJ0fZS291URcBaWRXRkGo7J2D+6HpMCNT6fa2KM Klc+DcVeMZWc8hK4IOZX66kJsdC0FpqfC+0I4zcho= Cc: u-boot@lists.denx.de, Heinrich Schuchardt Subject: [U-Boot] [PATCH 7/9] efi_loader: fix memory mapping for sandbox 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" The sandbox is using a virtual address space. The addresses used insided the flattened device tree use the virtual address space. The EFI subsystem uses the addressable address space and this is where the fdt is stored. Fix all incorrect addresses for the fdt. Signed-off-by: Heinrich Schuchardt --- cmd/bootefi.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/cmd/bootefi.c b/cmd/bootefi.c index 2c9b2eb8b6f..7752f3dec63 100644 --- a/cmd/bootefi.c +++ b/cmd/bootefi.c @@ -185,12 +185,16 @@ static efi_status_t copy_fdt(ulong *fdt_addrp) * Give us at least 12 KiB of breathing room in case the device tree * needs to be expanded later. */ - fdt = map_sysmem(*fdt_addrp, 0); + fdt = (void *)*fdt_addrp; fdt_pages = efi_size_in_pages(fdt_totalsize(fdt) + 0x3000); fdt_size = fdt_pages << EFI_PAGE_SHIFT; - /* Safe fdt location is at 127MB */ - new_fdt_addr = fdt_ram_start + (127 * 1024 * 1024) + fdt_size; + /* + * Safe fdt location is at 127 MiB. On the sandbox convert from the + * virtual address space. + */ + new_fdt_addr = (uintptr_t)map_sysmem(fdt_ram_start + 0x7f00000 + + fdt_size, 0); ret = efi_allocate_pages(EFI_ALLOCATE_MAX_ADDRESS, EFI_RUNTIME_SERVICES_DATA, fdt_pages, &new_fdt_addr); @@ -205,8 +209,7 @@ static efi_status_t copy_fdt(ulong *fdt_addrp) goto done; } } - - new_fdt = map_sysmem(new_fdt_addr, fdt_size); + new_fdt = (void *)(uintptr_t)new_fdt_addr; memcpy(new_fdt, fdt, fdt_totalsize(fdt)); fdt_set_totalsize(new_fdt, fdt_size); @@ -278,6 +281,9 @@ static void efi_carve_out_dt_rsv(void *fdt) if (fdt_get_mem_rsv(fdt, i, &addr, &size) != 0) continue; + /* Convert from sandbox address space. */ + addr = (uintptr_t)map_sysmem(addr, 0); + /* * Do not carve out the device tree. It is already marked as * EFI_RUNTIME_SERVICES_DATA @@ -297,9 +303,8 @@ static efi_status_t efi_install_fdt(ulong fdt_addr) { bootm_headers_t img = { 0 }; efi_status_t ret; - void *fdt; + void *fdt = (void *)fdt_addr; - fdt = map_sysmem(fdt_addr, 0); if (fdt_check_header(fdt)) { printf("ERROR: invalid device tree\n"); return EFI_INVALID_PARAMETER; @@ -310,8 +315,6 @@ static efi_status_t efi_install_fdt(ulong fdt_addr) if (ret) return ret; - unmap_sysmem(fdt); - fdt = map_sysmem(fdt_addr, 0); if (image_setup_libfdt(&img, fdt, 0, NULL)) { printf("ERROR: failed to process device tree\n"); return EFI_LOAD_ERROR;