From patchwork Thu Sep 5 08:28:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sughosh Ganu X-Patchwork-Id: 825622 Delivered-To: patch@linaro.org Received: by 2002:adf:a345:0:b0:367:895a:4699 with SMTP id d5csp186950wrb; Thu, 5 Sep 2024 01:30:08 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWg1JYQ6Mbou8CwWvlLJMrYE57ijHvtq1OnppATn1bGFVLUa/EIinwSMhQIP7MdcZIPnrqAEg==@linaro.org X-Google-Smtp-Source: AGHT+IFxN3s0RVGFZQCnGR6+623fI5E9C46ltHE3A2wjxsa6FEj9XCZQOIpo+7AOB/VkjtT2Zt/A X-Received: by 2002:a05:651c:1992:b0:2ef:2cdb:5053 with SMTP id 38308e7fff4ca-2f651e4c60emr43781851fa.37.1725525008196; Thu, 05 Sep 2024 01:30:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725525008; cv=none; d=google.com; s=arc-20240605; b=WOraINgcXJ2sWbtLxgKpjKBVLvgwHDs/y9uiC1E1oLahIhuUY3oji0ZVYrp7on6cNV p6lNYHsKltRRb3/VpZjO9VW4LSQEeJshtFvhA/qyzCIWWPMZMoAIAnW4vtqycV4E7NNc +cGs7pXU0ZfiSempYgdxbjlLIsPeO/tsHJRSsNqNSgtiVcyNqJX53/kTr/dLWtWnGxj0 NPmGhwdlf4MQP2xPrlulsDw+ZsTKNTiH8WJy/Fl1+b3IJXmn2p46OULv4vK3u/LXr6nS ACWSbyAsyWkTAsQdsHcWWKXqITTNTEaeXWYoWo0w2Wq3uNfpNLCCmRexGQnPS7fquayB Lj4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from; bh=SL16cX4D0ozq9CVN12JHtyc+ifnXDRc/37Cjk4bY4Fk=; fh=xhhG27Jur2HVmyj6xWbgrQg2vRawqr6LmtjP4yz05ls=; b=IoIZ7Nu4+f46+8e19ggXE71//oJXwsGXa6ntaNTIVat1Gb5VyMajIgtQk6cU/FipgC JtO+6a7DuhYzM1kPzKLO6k+IakIqP+6MSwsiJiwn9zG5PGOqa2dcjzdFFcoCc7ydqtBY 9B7fH3sUXEF0gDZl1j5rqEVtqpatMpYYQ0TeSnb5xjUA6KI0EwOjx/X7ozuSa2VLBUKl O9ACrTz93pgHPorV4fk8AtprxhhyVYUzhYGcLcOynrRg9x3YXRPH0Ox0sy5GDg3+Y9DV Lvm6ajSyYFaC/YI9XM3XBxpZLRDufNx1+uWvHekk8Xk86QtwDO4z0WtkKIXt1r1QJN48 XrIA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id 4fb4d7f45d1cf-5c3cc699483si1175255a12.268.2024.09.05.01.30.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Sep 2024 01:30:08 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 395F688CB8; Thu, 5 Sep 2024 10:29:06 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id AC8FF88C91; Thu, 5 Sep 2024 10:29:04 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.2 required=5.0 tests=BAYES_00, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE,SPF_SOFTFAIL,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.2 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by phobos.denx.de (Postfix) with ESMTP id E94A088CA0 for ; Thu, 5 Sep 2024 10:28:57 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=sughosh.ganu@linaro.org Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 032A9FEC; Thu, 5 Sep 2024 01:29:24 -0700 (PDT) Received: from a079122.blr.arm.com (a079122.arm.com [10.162.17.48]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0FF0C3F66E; Thu, 5 Sep 2024 01:28:54 -0700 (PDT) From: Sughosh Ganu To: u-boot@lists.denx.de Cc: Ilias Apalodimas , Heinrich Schuchardt , Simon Glass , Tom Rini , Bin Meng , Sughosh Ganu Subject: [PATCH 08/16] efi_memory: add an event handler to update memory map Date: Thu, 5 Sep 2024 13:58:03 +0530 Message-Id: <20240905082811.1585467-9-sughosh.ganu@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240905082811.1585467-1-sughosh.ganu@linaro.org> References: <20240905082811.1585467-1-sughosh.ganu@linaro.org> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean There are events that would be used to notify other interested modules of any changes in available and occupied memory. This would happen when a module allocates or reserves memory, or frees up memory. These changes in memory map should be notified to other interested modules so that the allocated memory does not get overwritten. Add an event handler in the EFI memory module to update the EFI memory map accordingly when such changes happen. As a consequence, any subsequent memory request would honour the updated memory map and only available memory would be allocated from. Signed-off-by: Sughosh Ganu --- lib/efi_loader/Kconfig | 2 ++ lib/efi_loader/efi_memory.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig index 911d4c6bbe..41d51987c3 100644 --- a/lib/efi_loader/Kconfig +++ b/lib/efi_loader/Kconfig @@ -16,9 +16,11 @@ config EFI_LOADER select CHARSET # We need to send DM events, dynamically, in the EFI block driver select DM_EVENT + select EVENT select EVENT_DYNAMIC select LIB_UUID select LMB + select MEM_MAP_UPDATE_NOTIFY imply PARTITION_UUIDS select REGEX imply FAT diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c index 90e07ed6a2..900d3c12f1 100644 --- a/lib/efi_loader/efi_memory.c +++ b/lib/efi_loader/efi_memory.c @@ -44,6 +44,10 @@ static LIST_HEAD(efi_mem); void *efi_bounce_buffer; #endif +#define MAP_OP_RESERVE (u8)0x1 +#define MAP_OP_FREE (u8)0x2 +#define MAP_OP_ADD (u8)0x3 + /** * struct efi_pool_allocation - memory block allocated from pool * @@ -919,3 +923,34 @@ int efi_memory_init(void) return 0; } + +#if CONFIG_IS_ENABLED(MEM_MAP_UPDATE_NOTIFY) +static int lmb_mem_map_update_sync(void *ctx, struct event *event) +{ + u8 op; + u64 addr; + u64 pages; + efi_status_t status; + struct event_lmb_map_update *lmb_map = &event->data.lmb_map; + + addr = (uintptr_t)map_sysmem(lmb_map->base, 0); + pages = efi_size_in_pages(lmb_map->size + (addr & EFI_PAGE_MASK)); + op = lmb_map->op; + addr &= ~EFI_PAGE_MASK; + + if (op != MAP_OP_RESERVE && op != MAP_OP_FREE && op != MAP_OP_ADD) { + log_debug("Invalid map update op received (%d)\n", op); + return -1; + } + + status = efi_add_memory_map_pg(addr, pages, + op == MAP_OP_RESERVE ? + EFI_BOOT_SERVICES_DATA : + EFI_CONVENTIONAL_MEMORY, + op == MAP_OP_RESERVE ? true : false); + + return status == EFI_SUCCESS ? 0 : -1; +} + +EVENT_SPY_FULL(EVT_LMB_MAP_UPDATE, lmb_mem_map_update_sync); +#endif /* MEM_MAP_UPDATE_NOTIFY */