From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 783B7C3DA7A for ; Thu, 5 Jan 2023 14:43:53 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2EAFD85248; Thu, 5 Jan 2023 15:43:51 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="w8VuwLUb"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4B7D4855A3; Thu, 5 Jan 2023 15:43:49 +0100 (CET) Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id AB86485248 for ; Thu, 5 Jan 2023 15:43:46 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=ilias.apalodimas@linaro.org Received: by mail-ed1-x530.google.com with SMTP id b88so45798025edf.6 for ; Thu, 05 Jan 2023 06:43:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=UDWe82Jmpx/TJ93FR9GtiEopEyO2N29+pxFB/QVfh5Y=; b=w8VuwLUbQD5opdXTwhBwmcB8uR65QvOTdCXu6oFFFhuDs4xwC+eIs5TJRRZ1/ZFGvy kR2wyiqfs+B/p90XWby7CZV5KA6OeB217IxRHuLXt0GZ0wQzJi0XGehJQot72Kl5V3io SE3xSccj5l0ndK2jSPQg7J1mh+zhxGO97+/mloFH7yBv+a4QVIfpA1jBytmnwfM67trO IUjsyABoJq/2sIU96FvhWxDmKAuMTb8fjFj6Ms0nUMxe8GxVu9q9V/x1dUlUYjvCHm7s aNWvtopgwcsZrdFLoHYBa8LWoxImk9JnBgEaHMbLhIdtjWKDqg1j17iKoq1lo68FMTdX 9iog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=UDWe82Jmpx/TJ93FR9GtiEopEyO2N29+pxFB/QVfh5Y=; b=rfqHPuYGNUUqSqsH0sSA14SZBbHSP+2WEILu1T+kEIgoOQX5vb7UpAJQfSiWcuNy2/ f6ahKDuvBwLWkVz7xj1A6UvOskqNAC+jpYnsJPgIB8Z5Xi+xLBSVtnYCURLFxT9fYNb4 zRs5O5EUXXHPODzrGIa196HMcrul1tmdmukEz//ODMwD8tGYRccT9+aHWmBo26YVcXZ1 5o+ABOCzGureXWlvrP3k/JruHj6oWF4oOpnrEAwk8w0YYvmYZvgKMarqvVGybiH5Ei5F rSrTzKqp75Eg7phHZNGQRB9JaHpCKqFQ+H8wd6o3c6qBmhsObgEtj0V6ZXdTgtBka2Cs FNAw== X-Gm-Message-State: AFqh2kpWfJ9Cwi99VJBWhgtqrp9bn5w+KbGdRmVfKSVcEwBtAX8v7+Tk ANra/UvH9gXD9UTP8UyVtA2tBQ== X-Google-Smtp-Source: AMrXdXvXtGZsVNdZ0AXuRITQPcFhInFqzjubYSRDE4xj0F6sxNBiM0eqo6XD681WvtlAnH1Vd+0OQg== X-Received: by 2002:a05:6402:1d8a:b0:494:2eb4:89b2 with SMTP id dk10-20020a0564021d8a00b004942eb489b2mr1224415edb.29.1672929826245; Thu, 05 Jan 2023 06:43:46 -0800 (PST) Received: from hades (ppp079167090036.access.hol.gr. [79.167.90.36]) by smtp.gmail.com with ESMTPSA id e13-20020a170906314d00b0084cb26c3b71sm6405612eje.1.2023.01.05.06.43.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Jan 2023 06:43:45 -0800 (PST) Date: Thu, 5 Jan 2023 16:43:43 +0200 From: Ilias Apalodimas To: Heinrich Schuchardt Cc: Tom Rini , Liviu Dudau , Simon Glass , Patrick Delaunay , Stefan Roese , Michal Simek , Ashok Reddy Soma , Patrice Chotard , u-boot@lists.denx.de Subject: Re: [PATCH 2/2] lmb: consider EFI memory map Message-ID: References: <20230104042606.135211-1-heinrich.schuchardt@canonical.com> <20230104042606.135211-3-heinrich.schuchardt@canonical.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230104042606.135211-3-heinrich.schuchardt@canonical.com> X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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.103.6 at phobos.denx.de X-Virus-Status: Clean Hi Heinrich, This looks reasonable to me as a short term solution, but I'd feel safer if someone else had a look at it On Wed, Jan 04, 2023 at 05:26:06AM +0100, Heinrich Schuchardt wrote: > Add reservations for all EFI memory areas that are not > EFI_CONVENTIONAL_MEMORY. > > Signed-off-by: Heinrich Schuchardt > --- > lib/lmb.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 45 insertions(+) > > diff --git a/lib/lmb.c b/lib/lmb.c > index c599608fa3..aee2617593 100644 > --- a/lib/lmb.c > +++ b/lib/lmb.c > @@ -7,7 +7,9 @@ > */ > > #include > +#include > #include > +#include > #include > #include > #include > @@ -153,6 +155,46 @@ void arch_lmb_reserve_generic(struct lmb *lmb, ulong sp, ulong end, ulong align) > } > } > > +/** > + * efi_lmb_reserve() - add reservations for EFI memory > + * > + * Add reservations for all EFI memory areas that are not > + * EFI_CONVENTIONAL_MEMORY. > + * > + * @lmb: lmb environment > + * Return: 0 on success, 1 on failure > + */ > +static __maybe_unused int efi_lmb_reserve(struct lmb *lmb) > +{ > + struct efi_mem_desc *memmap = NULL, *map; > + efi_uintn_t i, map_size = 0; > + efi_status_t ret; > + > + ret = efi_get_memory_map(&map_size, memmap, NULL, NULL, NULL); > + if (ret == EFI_BUFFER_TOO_SMALL) { > + map_size += sizeof(struct efi_mem_desc); /* for my own */ > + ret = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, map_size, > + (void *)&memmap); > + if (ret != EFI_SUCCESS) > + return 1; > + ret = efi_get_memory_map(&map_size, memmap, NULL, NULL, NULL); > + } > + if (ret != EFI_SUCCESS) { > + efi_free_pool(memmap); > + return 1; > + } We got a very similar piece of code in cmd/efidebug.c. I think we are better off adding a function that just calls efi_get_memory_map() and returns the map + map_size, instead of duplicating that > + > + for (i = 0, map = memmap; i < map_size / sizeof(*map); ++map, ++i) { > + if (map->type != EFI_CONVENTIONAL_MEMORY) > + lmb_reserve(lmb, > + map_to_sysmem((void *)(uintptr_t) > + map->physical_start), > + map->num_pages * EFI_PAGE_SIZE); > + } > + efi_free_pool(memmap); > + return 0; > +} > + > static void lmb_reserve_common(struct lmb *lmb, void *fdt_blob) > { > arch_lmb_reserve(lmb); > @@ -160,6 +202,9 @@ static void lmb_reserve_common(struct lmb *lmb, void *fdt_blob) > > if (CONFIG_IS_ENABLED(OF_LIBFDT) && fdt_blob) > boot_fdt_add_mem_rsv_regions(lmb, fdt_blob); > + > + if (CONFIG_IS_ENABLED(EFI_LOADER)) > + efi_lmb_reserve(lmb); > } > > /* Initialize the struct, add memory and call arch/board reserve functions */ > -- > 2.37.2 > Other than that this looks fine Cheers /Ilias