From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Wed, 11 May 2022 10:21:48 +0200 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nohbQ-009Phq-A7 for lore@lore.pengutronix.de; Wed, 11 May 2022 10:21:48 +0200 Received: from localhost ([127.0.0.1] helo=metis.ext.pengutronix.de) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1nohbG-0002kP-Ks; Wed, 11 May 2022 10:21:38 +0200 Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nohbF-0002i9-2f; Wed, 11 May 2022 10:21:37 +0200 Received: from [2a0a:edc0:0:1101:1d::39] (helo=dude03.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1nohbF-001eQn-Mu; Wed, 11 May 2022 10:21:36 +0200 Received: from mol by dude03.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1nohbC-00HZwJ-UU; Wed, 11 May 2022 10:21:34 +0200 From: Michael Olbrich To: oss-tools@pengutronix.de Date: Wed, 11 May 2022 10:21:25 +0200 Message-Id: <20220511082125.4187531-4-m.olbrich@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220511082125.4187531-1-m.olbrich@pengutronix.de> References: <20220511082125.4187531-1-m.olbrich@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [OSS-Tools] [PATCH v4 3/3] state: automatically find state.dtb in the ESP X-BeenThere: oss-tools@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: Pengutronix Public Open-Source-Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michael Olbrich Sender: "OSS-Tools" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: oss-tools-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false Systemd mounts the EFI System Partition (ESP) to /boot or /efi. So look there for the state.dtb when the devicetree in sysfs/procfs is not available. This way barebox-state can be used on EFI systems without manually specifying the devicetree file. Signed-off-by: Michael Olbrich --- changes in v4: add /boot/efi/EFI/BAREBOX/state.dtb to the seach list. src/barebox-state.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/barebox-state.c b/src/barebox-state.c index 334aed6f3d43..c5acd1f7780a 100644 --- a/src/barebox-state.c +++ b/src/barebox-state.c @@ -342,6 +342,31 @@ struct state *state_get(const char *name, const char *filename, bool readonly, b } } else { root = of_read_proc_devicetree(); + + /* No device-tree in procfs / sysfs, try dtb file in the ESP */ + if (-PTR_ERR(root) == ENOENT) { + const char *paths[] = { + /* default mount paths used by systemd */ + "/boot/EFI/BAREBOX/state.dtb", + "/boot/efi/EFI/BAREBOX/state.dtb", + "/efi/EFI/BAREBOX/state.dtb", + NULL + }; + void *fdt; + int i; + + for (i = 0; paths[i]; ++i) { + fdt = read_file(paths[i], NULL); + if (fdt) + break; + } + if (fdt) { + root = of_unflatten_dtb(fdt); + free(fdt); + } + else + root = ERR_PTR(-ENOENT); + } if (IS_ERR(root)) { pr_err("Unable to read devicetree. %s\n", strerror(-PTR_ERR(root))); -- 2.30.2