mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Rouven Czerwinski <r.czerwinski@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Rouven Czerwinski <r.czerwinski@pengutronix.de>
Subject: [PATCH 2/3] blspec: add new blspec.compatible.extra variable
Date: Wed, 20 Sep 2023 14:37:19 +0200	[thread overview]
Message-ID: <20230920123720.767063-2-r.czerwinski@pengutronix.de> (raw)
In-Reply-To: <20230920123720.767063-1-r.czerwinski@pengutronix.de>

The blspec.compatible.extra variable will be used to specify extra
compatibles that are also used to match during bootloader specification
entry parsing. This means that even if your internal barebox device tree
machine compatible is "vendor,bareboxcompatible", but your bootloader
specification device tree contains "vendor,linuxcompatible", it is
possible to boot this entry by setting blspec.compatible.extra to
"vendor,linuxcompatible".

More than one compatible is possible as well, the compatibles will need
to be space separated (since "," is already used for the vendor hardware
distinction).

Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
---
 common/blspec.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/common/blspec.c b/common/blspec.c
index f8d47f20d2..e361a02333 100644
--- a/common/blspec.c
+++ b/common/blspec.c
@@ -19,10 +19,20 @@
 #include <net.h>
 #include <fs.h>
 #include <of.h>
+#include <magicvar.h>
+#include <linux/list.h>
 #include <linux/stat.h>
 #include <linux/err.h>
 #include <mtd/ubi-user.h>
 
+struct list_head *blspec_extra_list;
+char *blspec_extra_string;
+
+struct blspec_extra_entry {
+	char *compatible;
+	struct list_head list;
+};
+
 /*
  * blspec_entry_var_set - set a variable to a value
  */
@@ -830,8 +840,54 @@ static int blspec_bootentry_provider(struct bootentries *bootentries,
 	return found;
 }
 
+static int blspec_extra_set(struct param_d *p, void *priv)
+{
+	struct blspec_extra_entry *entry, *tmp;
+	char *str = blspec_extra_string;
+	char *temp = str;
+	unsigned int len;
+
+	if (blspec_extra_list) {
+		list_for_each_entry_safe(entry, tmp, blspec_extra_list, list) {
+			list_del(&entry->list);
+			free(entry->compatible);
+			free(entry);
+		}
+		blspec_extra_list = NULL;
+	}
+
+	while(str++) {
+		if (*str == ' ' || *str == 0) {
+			len = temp - str;
+			if(len > 126) {
+				len = 127;
+			}
+			entry = calloc(1, sizeof(struct blspec_extra_entry));
+			entry->compatible = xzalloc(len + 1);
+			memcpy(entry->compatible, temp, len);
+
+			if (blspec_extra_list == NULL) {
+				INIT_LIST_HEAD(&entry->list);
+				blspec_extra_list = &entry->list;
+			} else {
+				list_add_tail(&entry->list, blspec_extra_list);
+			}
+
+			temp = str + 1;
+		}
+		if (*str == 0)
+			break;
+	}
+
+	return 0;
+}
+
 static int blspec_init(void)
 {
+	dev_add_param_string(&global_device, "blspec.compatible.extra",
+			     blspec_extra_set, NULL, &blspec_extra_string, blspec_extra_list);
 	return bootentry_register_provider(blspec_bootentry_provider);
 }
 device_initcall(blspec_init);
+
+BAREBOX_MAGICVAR(global.blspec.compatible.extra, "Extra compatible to also match during bootloader entry matching");
-- 
2.42.0




  reply	other threads:[~2023-09-20 12:38 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-20 12:37 [PATCH 1/3] blspec: take compatible name as argument Rouven Czerwinski
2023-09-20 12:37 ` Rouven Czerwinski [this message]
2023-09-21 12:37   ` [PATCH 2/3] blspec: add new blspec.compatible.extra variable Ahmad Fatoum
2023-09-22  5:19     ` Ahmad Fatoum
2023-09-21 12:57   ` Sascha Hauer
2023-09-20 12:37 ` [PATCH 3/3] blspec: take extra entries into account Rouven Czerwinski
2023-09-21 12:33 ` [PATCH 1/3] blspec: take compatible name as argument Ahmad Fatoum
2023-09-21 12:38 ` Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230920123720.767063-2-r.czerwinski@pengutronix.de \
    --to=r.czerwinski@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox