{"id":2225279,"url":"http://patchwork.ozlabs.org/api/patches/2225279/?format=json","web_url":"http://patchwork.ozlabs.org/project/uboot/patch/20260420192520.1444749-3-rs@ti.com/","project":{"id":18,"url":"http://patchwork.ozlabs.org/api/projects/18/?format=json","name":"U-Boot","link_name":"uboot","list_id":"u-boot.lists.denx.de","list_email":"u-boot@lists.denx.de","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260420192520.1444749-3-rs@ti.com>","list_archive_url":null,"date":"2026-04-20T19:25:16","name":"[PATCHv4,2/6] boot_fdt_add_mem_rsv_regions: free old dtb reservations","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"10f4cf387426c0edf904abfd8be0e4edc9d1d6fc","submitter":{"id":88727,"url":"http://patchwork.ozlabs.org/api/people/88727/?format=json","name":"Randolph Sapp","email":"rs@ti.com"},"delegate":{"id":68728,"url":"http://patchwork.ozlabs.org/api/users/68728/?format=json","username":"xypron","first_name":"Heinrich","last_name":"Schuchardt","email":"xypron.glpk@gmx.de"},"mbox":"http://patchwork.ozlabs.org/project/uboot/patch/20260420192520.1444749-3-rs@ti.com/mbox/","series":[{"id":500668,"url":"http://patchwork.ozlabs.org/api/series/500668/?format=json","web_url":"http://patchwork.ozlabs.org/project/uboot/list/?series=500668","date":"2026-04-20T19:25:18","name":"various memory related fixups","version":1,"mbox":"http://patchwork.ozlabs.org/series/500668/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2225279/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2225279/checks/","tags":{},"related":[],"headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=ti.com header.i=@ti.com header.a=rsa-sha256\n header.s=selector1 header.b=haI13bmO;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=quarantine dis=none) header.from=ti.com","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=ti.com header.i=@ti.com header.b=\"haI13bmO\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=quarantine dis=none) header.from=ti.com","phobos.denx.de; spf=pass smtp.mailfrom=rs@ti.com"],"Received":["from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fzwTF2ZDkz1yHB\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 05:26:25 +1000 (AEST)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 076B8843C1;\n\tMon, 20 Apr 2026 21:25:37 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id D2E8084376; Mon, 20 Apr 2026 21:25:34 +0200 (CEST)","from SN4PR2101CU001.outbound.protection.outlook.com\n (mail-southcentralusazlp170120001.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c10d::1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id CD86484319\n for <u-boot@lists.denx.de>; Mon, 20 Apr 2026 21:25:31 +0200 (CEST)","from SJ0PR03CA0066.namprd03.prod.outlook.com (2603:10b6:a03:331::11)\n by SA2PR10MB4713.namprd10.prod.outlook.com (2603:10b6:806:11d::24)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.33; Mon, 20 Apr\n 2026 19:25:27 +0000","from SJ1PEPF000023CB.namprd02.prod.outlook.com\n (2603:10b6:a03:331:cafe::c0) by SJ0PR03CA0066.outlook.office365.com\n (2603:10b6:a03:331::11) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9791.48 via Frontend Transport; Mon,\n 20 Apr 2026 19:25:27 +0000","from flwvzet201.ext.ti.com (198.47.21.195) by\n SJ1PEPF000023CB.mail.protection.outlook.com (10.167.244.5) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9791.48 via Frontend Transport; Mon, 20 Apr 2026 19:25:26 +0000","from DFLE208.ent.ti.com (10.64.6.66) by flwvzet201.ext.ti.com\n (10.248.192.32) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 20 Apr\n 2026 14:25:23 -0500","from DFLE212.ent.ti.com (10.64.6.70) by DFLE208.ent.ti.com\n (10.64.6.66) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 20 Apr\n 2026 14:25:23 -0500","from lelvem-mr05.itg.ti.com (10.180.75.9) by DFLE212.ent.ti.com\n (10.64.6.70) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend\n Transport; Mon, 20 Apr 2026 14:25:23 -0500","from rs-desk.dhcp.ti.com (rs-desk.dhcp.ti.com [128.247.81.39])\n by lelvem-mr05.itg.ti.com (8.18.1/8.18.1) with ESMTP id 63KJPNh53399024;\n Mon, 20 Apr 2026 14:25:23 -0500"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,T_SPF_PERMERROR autolearn=ham\n autolearn_force=no version=3.4.2","ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=GdFXMZKQoorlIzUztn2LFNUrZsxM90XgzhdP38rkUEhRQ6VIUpE5+H+d3wUouWKTyTIxkv2qitV0LQ5cQeis2ErA0WriZyRGgMgZ6veVODQh0z7GxI5utsTlPXBLWtgRaJsJelbft+S9i3X/MpQvcN4Rj8taTpQPZXKw711VjEdYdU7d17m/bDLl48f0T85rOjJl/ux47CkM0Ctfv/jYIGqG7uILclCFE0aJTShy9pIBg0EyRsGQyTeqSbrtGHl1cKeBQySudA9hxTLHX+wYc9fkTicuqPv40SwSGeYgu0joj9iEmrj1bk9kr1Oh+qsa5wCKlTZSz4NrLeUTTGWyKA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=MzfWyKzGpDVdxfU4o/9Jf0R7Um/C9JVxY8XZt3KJQd0=;\n b=T+SkmrLfQLem4kR7JFGNum2bz59dYim32rwap2BmlSxtjxjGh2s9oTfYxlMB+JjFh23g5DgaYwVAlS05/Cr7br2mVf2UHx9oTlUsw+vnxE3YVjRadI3twOXIimO55UJQjuNAIF7fglmg47UoeaYN8oSO5Cfg94DXscKmvHZ67q29bV/uuZxY1Hy8rbSJcY34EVyYVDkgjthVOiuchiZIeoto1ZxC7LKHVT+0pMr3WvOPQsK9SruZQMiTdHYoqhQMwTntmYvpXyrcYjVSOfg2yYc4CK6boqtX+PwJjT8+/S6aUEJRVkc1roUqAeAxjb6yt9DFGAxocYX7tNUCE5DwHA==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 198.47.21.195) smtp.rcpttodomain=lists.denx.de smtp.mailfrom=ti.com;\n dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=ti.com;\n dkim=none (message not signed); arc=none (0)","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=MzfWyKzGpDVdxfU4o/9Jf0R7Um/C9JVxY8XZt3KJQd0=;\n b=haI13bmOKT4ExFVnORykTQ09IvcLQioVj+aKM14e2LyTI/N26AYgRCY4t0U+vra9JDFXmlPT/MtnLB1/id+ML/2xooxZWP/OjG/Ph0ipkKyK6KVE237/PVUSAAAjfgW5zi4OF6hE49crBquku0oe99EXWar6K6MU9UlEf5aIBwQ=","X-MS-Exchange-Authentication-Results":"spf=pass (sender IP is 198.47.21.195)\n smtp.mailfrom=ti.com; dkim=none (message not signed) header.d=none;\n dmarc=pass\n action=none header.from=ti.com;","Received-SPF":"Pass (protection.outlook.com: domain of ti.com designates\n 198.47.21.195 as permitted sender) receiver=protection.outlook.com;\n client-ip=198.47.21.195; helo=flwvzet201.ext.ti.com; pr=C","From":"<rs@ti.com>","To":"<robertcnelson@gmail.com>, <ayush@beagleboard.org>,\n <Erik.Welsh@octavosystems.com>, <anshuld@ti.com>, <bb@ti.com>,\n <trini@konsulko.com>, <afd@ti.com>, <xypron.glpk@gmx.de>,\n <ilias.apalodimas@linaro.org>","CC":"<u-boot@lists.denx.de>","Subject":"[PATCHv4 2/6] boot_fdt_add_mem_rsv_regions: free old dtb reservations","Date":"Mon, 20 Apr 2026 14:25:16 -0500","Message-ID":"<20260420192520.1444749-3-rs@ti.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<20260420192520.1444749-1-rs@ti.com>","References":"<20260420192520.1444749-1-rs@ti.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-C2ProcessedOrg":"333ef613-75bf-4e12-a4b1-8e3623f5dcea","X-EOPAttributedMessage":"0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"SJ1PEPF000023CB:EE_|SA2PR10MB4713:EE_","X-MS-Office365-Filtering-Correlation-Id":"ee3d8f68-c9d9-45ac-963c-08de9f129393","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;\n ARA:13230040|82310400026|36860700016|1800799024|376014|56012099003|22082099003|18002099003;","X-Microsoft-Antispam-Message-Info":"\n gbEX1wXi4GpAfbjurYJjNBtkCVpn4Yla69+dyKFTBmJyJvD8221dexrh1f6UpsizqKwhFsKQqLdWF/0yMfTjAZ10HvVpbU5+UxYAB0LC4isteVkepv2kdOgxqdlvGWvUyFIee1kQLfo0OXWvL7MqBh2lPTzf+SB1J2rPH53eefjFuODePvHUoAxT712d2MZD7Zi+OL3ydpgPGFpUDouYLcbQgsQfZFFq1zVxsY1QaHYoOK/bQDm9x5jK8LlKfFNj7h5iYzaYkKCXy+NHxumQFFNDxn5qJZoXDc3mlCe1aunUGEAKgXQ/YLUEknsHc0AI0YEivoVhbz3WGoEFBiq8RrYn+nc8ucAflHFfcix/n6JJttPbgNAQm135HDuenb6fR5K7VITAjxlMNiPAiT01MHieaGBTXJHGgdMBdp1gtGTZvfGVm+RW4wTBAMk1RlAKCr4rcOEbxM22yd3d5NhfS2VzyutdTKYYtRhqtjH1ZVWnDGeaL+q9vpGg0ERnRfgHzuU1K3G/dWMTc8oAxcB2OxKs2h/sSrvlsP1j1BRe2IezikLE4e/PmjX7nUKmFCpz5Ai8aIHhrgJW1sY+jnAX0dd33pmytrDSPASQNgjkUzpig1cbBG0ZHQS8xfcZiJ1civ/+1CHRyu6Ir6SL7r/jBB3920CmEwi4SNYP/CPsU99nQZ1ixXmDcgbnREbV3HCTRAmWBEJ0gwL8kjpTPV+iueV36QMsxYj8bnF/I0xhxAtLQLEEY4wCW3yF/9r25cCzpLqJpZVIu/05+itawIi43w==","X-Forefront-Antispam-Report":"CIP:198.47.21.195; CTRY:US; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:flwvzet201.ext.ti.com; PTR:ErrorRetry; CAT:NONE;\n SFS:(13230040)(82310400026)(36860700016)(1800799024)(376014)(56012099003)(22082099003)(18002099003);\n DIR:OUT; SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n wYL+choJb9a+67wAAIdK+lSrJhwumVjB+AeR2eSE2QestEK+lbO4QF4Fh8bL4UdSmjRSqKMpyvW6O0uv5aR71PDbJoGMHoF2RsSznvlH7+Jjb692xchggdiDFLVCjtzGrFAOyl2O1KSabwTR0OgdNQ318SmI9EDBAQm4lTbpGvGQ/FuBB5tqNi83yiGAoirHc7TP60/gM4rcXJs0UCcKJ5W9iw4Jfg968Z+2N/nAvujjpLB90491Gc2jPvZHFCDf2/eHPb4F3mR5PQsCST/y/Kax3gIaz46cwmx8P/hMOgDOPc/IwF0LcXVtad1wzP8RPRBjL3yGKwIQe56tS079t+seRuhSdeamxzVfah3pR/SnTywravCAq7XGukQUrDLwEkKBwkYCFhdJlhLXAYN8dKcXXe4adsazm60E8Z3B3eRjQIBX+sxxA7WfMl3cbP01","X-OriginatorOrg":"ti.com","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"20 Apr 2026 19:25:26.6089 (UTC)","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n ee3d8f68-c9d9-45ac-963c-08de9f129393","X-MS-Exchange-CrossTenant-Id":"e5b49634-450b-4709-8abb-1e2b19b982b7","X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp":"\n TenantId=e5b49634-450b-4709-8abb-1e2b19b982b7; Ip=[198.47.21.195];\n Helo=[flwvzet201.ext.ti.com]","X-MS-Exchange-CrossTenant-AuthSource":"\n SJ1PEPF000023CB.namprd02.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Anonymous","X-MS-Exchange-CrossTenant-FromEntityHeader":"HybridOnPrem","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"SA2PR10MB4713","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"},"content":"From: Randolph Sapp <rs@ti.com>\n\nAdd a free flag and an initial call to free allocations covered by the\nglobal FDT. This assumes that all calls to boot_fdt_add_mem_rsv_regions\noccur before the transition to the new device tree, thus we can access\nthe currently active device tree through the global data pointer.\n\nThis allows us to clearly indicate to the user when a device tree\nreservation fails. How we handle this can still use some improvement.\nRight now we'll keep the default behavior and try to boot anyway.\n\nThis functionality was broken in:\n5a6aa7d (\"boot: fdt: Handle already reserved memory in boot_fdt_reserve_region()\")\n\nSigned-off-by: Randolph Sapp <rs@ti.com>\n---\n arch/mips/lib/bootm.c |  2 +-\n boot/bootm.c          |  2 +-\n boot/bootm_os.c       |  2 +-\n boot/image-board.c    |  2 +-\n boot/image-fdt.c      | 57 +++++++++++++++++++++++++++++--------------\n include/image.h       |  2 +-\n lib/lmb.c             |  2 +-\n 7 files changed, 45 insertions(+), 24 deletions(-)","diff":"diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c\nindex 066c830f3fa..546e888630e 100644\n--- a/arch/mips/lib/bootm.c\n+++ b/arch/mips/lib/bootm.c\n@@ -210,7 +210,7 @@ static int boot_reloc_fdt(struct bootm_headers *images)\n \t}\n \n #if CONFIG_IS_ENABLED(MIPS_BOOT_FDT) && CONFIG_IS_ENABLED(OF_LIBFDT)\n-\tboot_fdt_add_mem_rsv_regions(images->ft_addr);\n+\tboot_fdt_add_mem_rsv_regions(images->ft_addr, false);\n \treturn boot_relocate_fdt(&images->ft_addr, &images->ft_len);\n #else\n \treturn 0;\ndiff --git a/boot/bootm.c b/boot/bootm.c\nindex 4836d6b2d41..394a256e1ab 100644\n--- a/boot/bootm.c\n+++ b/boot/bootm.c\n@@ -1040,7 +1040,7 @@ int bootm_run_states(struct bootm_info *bmi, int states)\n #endif\n #if CONFIG_IS_ENABLED(OF_LIBFDT) && CONFIG_IS_ENABLED(LMB)\n \tif (!ret && (states & BOOTM_STATE_FDT)) {\n-\t\tboot_fdt_add_mem_rsv_regions(images->ft_addr);\n+\t\tboot_fdt_add_mem_rsv_regions(images->ft_addr, false);\n \t\tret = boot_relocate_fdt(&images->ft_addr, &images->ft_len);\n \t}\n #endif\ndiff --git a/boot/bootm_os.c b/boot/bootm_os.c\nindex ae20b555f5c..48f68941ff8 100644\n--- a/boot/bootm_os.c\n+++ b/boot/bootm_os.c\n@@ -262,7 +262,7 @@ static void do_bootvx_fdt(struct bootm_headers *images)\n \tchar **of_flat_tree = &images->ft_addr;\n \n \tif (*of_flat_tree) {\n-\t\tboot_fdt_add_mem_rsv_regions(*of_flat_tree);\n+\t\tboot_fdt_add_mem_rsv_regions(*of_flat_tree, false);\n \n \t\tret = boot_relocate_fdt(of_flat_tree, &of_size);\n \t\tif (ret)\ndiff --git a/boot/image-board.c b/boot/image-board.c\nindex 005d60caf5c..55aaa741826 100644\n--- a/boot/image-board.c\n+++ b/boot/image-board.c\n@@ -914,7 +914,7 @@ int image_setup_linux(struct bootm_headers *images)\n \tif (!CONFIG_IS_ENABLED(LMB))\n \t\treturn -EFAULT;\n \tif (CONFIG_IS_ENABLED(OF_LIBFDT))\n-\t\tboot_fdt_add_mem_rsv_regions(*of_flat_tree);\n+\t\tboot_fdt_add_mem_rsv_regions(*of_flat_tree, false);\n \n \tif (IS_ENABLED(CONFIG_SYS_BOOT_GET_CMDLINE)) {\n \t\tret = boot_get_cmdline(&images->cmdline_start,\ndiff --git a/boot/image-fdt.c b/boot/image-fdt.c\nindex a3a4fb8b558..8dc4b4a682c 100644\n--- a/boot/image-fdt.c\n+++ b/boot/image-fdt.c\n@@ -69,35 +69,51 @@ static const struct legacy_img_hdr *image_get_fdt(ulong fdt_addr)\n }\n #endif\n \n-static void boot_fdt_reserve_region(u64 addr, u64 size, u32 flags)\n+/**\n+ * boot_fdt_reserve_region - Reserve or free a given FDT region in LMB\n+ * @addr: Reservation base address\n+ * @size: Reservation size\n+ * @flags: Reservation flags\n+ * @free: Indicate if region is being freed or allocated\n+ *\n+ * Add or free a given reservation from LMB. This reports to the user if any\n+ * errors occurred during either operation.\n+ */\n+static void boot_fdt_reserve_region(u64 addr, u64 size, u32 flags, bool free)\n {\n-\tlong ret;\n+\tint ret;\n \tphys_addr_t rsv_addr;\n \n \trsv_addr = (phys_addr_t)addr;\n-\tret = lmb_alloc_mem(LMB_MEM_ALLOC_ADDR, 0, &rsv_addr, size, flags);\n+\tif (free)\n+\t\tret = lmb_free(rsv_addr, size, flags);\n+\telse\n+\t\tret = lmb_alloc_mem(LMB_MEM_ALLOC_ADDR, 0, &rsv_addr, size,\n+\t\t\t\t    flags);\n+\n \tif (!ret) {\n-\t\tdebug(\"   reserving fdt memory region: addr=%llx size=%llx flags=%x\\n\",\n-\t\t      (unsigned long long)addr,\n+\t\tdebug(\"   %s fdt memory region: addr=%llx size=%llx flags=%x\\n\",\n+\t\t      free ? \"freed\" : \"reserved\", (unsigned long long)addr,\n \t\t      (unsigned long long)size, flags);\n-\t} else if (ret != -EEXIST && ret != -EINVAL) {\n-\t\tputs(\"ERROR: reserving fdt memory region failed \");\n-\t\tprintf(\"(addr=%llx size=%llx flags=%x)\\n\",\n-\t\t       (unsigned long long)addr,\n-\t\t       (unsigned long long)size, flags);\n+\t} else {\n+\t\tprintf(\"ERROR: %s fdt memory region failed (addr=%llx size=%llx flags=%x): %i\\n\",\n+\t\t       free ? \"freeing\" : \"reserving\", (unsigned long long)addr,\n+\t\t       (unsigned long long)size, flags, ret);\n \t}\n }\n \n /**\n- * boot_fdt_add_mem_rsv_regions - Mark the memreserve and reserved-memory\n- * sections as unusable\n+ * boot_fdt_add_mem_rsv_regions - Handle FDT memreserve and reserved-memory\n+ * sections\n  * @fdt_blob: pointer to fdt blob base address\n+ * @free: indicate if regions are being freed\n  *\n- * Adds the and reserved-memorymemreserve regions in the dtb to the lmb block.\n- * Adding the memreserve regions prevents u-boot from using them to store the\n- * initrd or the fdt blob.\n+ * Adds or removes reserved-memory and memreserve regions in the dtb to the lmb\n+ * block. Adding the memreserve regions prevents u-boot from using them to store\n+ * the initrd or the fdt blob. This function will attempt to clean the currently\n+ * active reservations if a new device tree blob is given.\n  */\n-void boot_fdt_add_mem_rsv_regions(void *fdt_blob)\n+void boot_fdt_add_mem_rsv_regions(void *fdt_blob, bool free)\n {\n \tuint64_t addr, size;\n \tint i, total, ret;\n@@ -108,12 +124,16 @@ void boot_fdt_add_mem_rsv_regions(void *fdt_blob)\n \tif (fdt_check_header(fdt_blob) != 0)\n \t\treturn;\n \n+\t/* Remove old regions */\n+\tif (gd->fdt_blob != fdt_blob)\n+\t\tboot_fdt_add_mem_rsv_regions((void *)gd->fdt_blob, true);\n+\n \t/* process memreserve sections */\n \ttotal = fdt_num_mem_rsv(fdt_blob);\n \tfor (i = 0; i < total; i++) {\n \t\tif (fdt_get_mem_rsv(fdt_blob, i, &addr, &size) != 0)\n \t\t\tcontinue;\n-\t\tboot_fdt_reserve_region(addr, size, LMB_NOOVERWRITE);\n+\t\tboot_fdt_reserve_region(addr, size, LMB_NOOVERWRITE, free);\n \t}\n \n \t/* process reserved-memory */\n@@ -131,7 +151,8 @@ void boot_fdt_add_mem_rsv_regions(void *fdt_blob)\n \t\t\t\t\tflags = LMB_NOMAP;\n \t\t\t\taddr = res.start;\n \t\t\t\tsize = res.end - res.start + 1;\n-\t\t\t\tboot_fdt_reserve_region(addr, size, flags);\n+\t\t\t\tboot_fdt_reserve_region(addr, size, flags,\n+\t\t\t\t\t\t\tfree);\n \t\t\t}\n \n \t\t\tsubnode = fdt_next_subnode(fdt_blob, subnode);\ndiff --git a/include/image.h b/include/image.h\nindex 34efac6056d..68dfa4716ab 100644\n--- a/include/image.h\n+++ b/include/image.h\n@@ -827,7 +827,7 @@ int boot_get_fdt(void *buf, const char *select, uint arch,\n \t\t struct bootm_headers *images, char **of_flat_tree,\n \t\t ulong *of_size);\n \n-void boot_fdt_add_mem_rsv_regions(void *fdt_blob);\n+void boot_fdt_add_mem_rsv_regions(void *fdt_blob, bool free);\n int boot_relocate_fdt(char **of_flat_tree, ulong *of_size);\n \n int boot_ramdisk_high(ulong rd_data, ulong rd_len, ulong *initrd_start,\ndiff --git a/lib/lmb.c b/lib/lmb.c\nindex 8f12c6ad8e5..9a8c70b778a 100644\n--- a/lib/lmb.c\n+++ b/lib/lmb.c\n@@ -581,7 +581,7 @@ static void lmb_reserve_common(void *fdt_blob)\n \tlmb_reserve_uboot_region();\n \n \tif (CONFIG_IS_ENABLED(OF_LIBFDT) && fdt_blob)\n-\t\tboot_fdt_add_mem_rsv_regions(fdt_blob);\n+\t\tboot_fdt_add_mem_rsv_regions(fdt_blob, false);\n }\n \n static __maybe_unused void lmb_reserve_common_spl(void)\n","prefixes":["PATCHv4","2/6"]}