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 16271C433EF for ; Mon, 7 Feb 2022 23:05:44 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 525CE83BBF; Tue, 8 Feb 2022 00:05:42 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=collabora.com 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=collabora.com header.i=@collabora.com header.b="e1Nv0y0h"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 10DF483C8C; Mon, 7 Feb 2022 17:02:39 +0100 (CET) Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) (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 C0D0783D32 for ; Mon, 7 Feb 2022 17:02:35 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=detlev.casanova@collabora.com Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: detlev) with ESMTPSA id DF1A71F42E2D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1644249755; bh=YaN9aEey/cUbH4r/GbaEC5MDi+eVF6SzggIsMwOolUo=; h=From:To:Cc:Subject:Date:From; b=e1Nv0y0hCGGyyjkxe9E+wl2Q+HUGPoV1zCiXwxEsmoQOGu/ElmNnD0qNeoXLHj423 mjlvNM35PzPgab1rmyUUYqHo9pseAEp5Ebyz0fZ1c3+Kgsct2bv2Yy/ueSomAbo/s/ 5Eq+zeekHiOFboNOu22e76kGHNfVzVBRDqi2i/GwHHok5hBraTmnEXojEtYL9LDCYm H1TLZyP9BCamYVUR2NPZQFqM9VpsDeRwGiTTkYfVKDjhHZ3PtZeF2Oodb6dgEBnWdL EFn5YO+KcJgj1HIswRVEZ9iiqVs7qZ3DFd0f7gmP34ajLTMF0hAfYzskWJ9pviaV9r YuI45xLneCgMA== From: Detlev Casanova To: u-boot@lists.denx.de Cc: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= , Simon Glass , Detlev Casanova Subject: [PATCH v2] pstore: Support already existing reserved-memory node Date: Mon, 7 Feb 2022 11:02:30 -0500 Message-Id: <20220207160230.38662-1-detlev.casanova@collabora.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Tue, 08 Feb 2022 00:05:41 +0100 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.5 at phobos.denx.de X-Virus-Status: Clean The pstore command tries to create a reserved-memory node but fails if it is already present with: Add 'reserved-memory' node failed: FDT_ERR_EXISTS This patch creates the node only if it does not exist and adapts the reg values sizes depending on already present #address-cells and #size-cells values. Signed-off-by: Detlev Casanova --- Changes in v2: - Move declarations at beginning of function - Use if instead of switch - Reword Subject cmd/pstore.c | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/cmd/pstore.c b/cmd/pstore.c index 9fac8c7218..cd6f6feb2f 100644 --- a/cmd/pstore.c +++ b/cmd/pstore.c @@ -11,6 +11,7 @@ #include #include #include +#include struct persistent_ram_buffer { u32 sig; @@ -485,6 +486,8 @@ void fdt_fixup_pstore(void *blob) { char node[32]; int nodeoffset; /* node offset from libfdt */ + u32 addr_cells; + u32 size_cells; nodeoffset = fdt_path_offset(blob, "/"); if (nodeoffset < 0) { @@ -493,14 +496,18 @@ void fdt_fixup_pstore(void *blob) return; } - nodeoffset = fdt_add_subnode(blob, nodeoffset, "reserved-memory"); + nodeoffset = fdt_find_or_add_subnode(blob, nodeoffset, "reserved-memory"); if (nodeoffset < 0) { log_err("Add 'reserved-memory' node failed: %s\n", fdt_strerror(nodeoffset)); return; } - fdt_setprop_u32(blob, nodeoffset, "#address-cells", 2); - fdt_setprop_u32(blob, nodeoffset, "#size-cells", 2); + + addr_cells = fdt_getprop_u32_default_node(blob, nodeoffset, 0, "#address-cells", 2); + size_cells = fdt_getprop_u32_default_node(blob, nodeoffset, 0, "#size-cells", 2); + fdt_setprop_u32(blob, nodeoffset, "#address-cells", addr_cells); + fdt_setprop_u32(blob, nodeoffset, "#size-cells", size_cells); + fdt_setprop_empty(blob, nodeoffset, "ranges"); sprintf(node, "ramoops@%llx", (unsigned long long)pstore_addr); @@ -509,14 +516,36 @@ void fdt_fixup_pstore(void *blob) log_err("Add '%s' node failed: %s\n", node, fdt_strerror(nodeoffset)); return; } + fdt_setprop_string(blob, nodeoffset, "compatible", "ramoops"); - fdt_setprop_u64(blob, nodeoffset, "reg", pstore_addr); - fdt_appendprop_u64(blob, nodeoffset, "reg", pstore_length); + + if (addr_cells == 1) { + fdt_setprop_u32(blob, nodeoffset, "reg", pstore_addr); + } else if (addr_cells == 2) { + fdt_setprop_u64(blob, nodeoffset, "reg", pstore_addr); + } else { + log_err("Unsupported #address-cells: %u\n", addr_cells); + goto clean_ramoops; + } + + if (size_cells == 1) { + // Let's consider that the pstore_length fits in a 32 bits value + fdt_appendprop_u32(blob, nodeoffset, "reg", pstore_length); + } else if (size_cells == 2) { + fdt_appendprop_u64(blob, nodeoffset, "reg", pstore_length); + } else { + log_err("Unsupported #size-cells: %u\n", addr_cells); + goto clean_ramoops; + } + fdt_setprop_u32(blob, nodeoffset, "record-size", pstore_record_size); fdt_setprop_u32(blob, nodeoffset, "console-size", pstore_console_size); fdt_setprop_u32(blob, nodeoffset, "ftrace-size", pstore_ftrace_size); fdt_setprop_u32(blob, nodeoffset, "pmsg-size", pstore_pmsg_size); fdt_setprop_u32(blob, nodeoffset, "ecc-size", pstore_ecc_size); + +clean_ramoops: + fdt_del_node_and_alias(blob, node); } U_BOOT_CMD(pstore, 10, 0, do_pstore, -- 2.35.1