[PATCH] xilinx: common: Add support for partial string match in board_fit_config_name_match()

Michal Simek michal.simek at amd.com
Fri Jan 6 09:38:52 CET 2023


Board name in FIT image can use U-Boot regular expressions SLRE to instruct
U-Boot to handle all revisions for certain board.
For example when name (description property) is saying "zynqmp-zcu104-revA"
only description with this name is selected.
When zynqmp-zcu104.* is described then all board revisions will be handled
by this fragment.
Xilinx normally have some board revisions which are SW compatible to each
other. That's why make sense to define board name with revisions first
follow by generic description with '.*' at the end like this:

config_1 {
        description = "zynqmp-zcu104-rev[AB]";
        fdt = "zynqmp-zcu104-revA";
};
config_2 {
        description = "zynqmp-zcu104.*";
        fdt = "zynqmp-zcu104-revC";
};

Signed-off-by: Michal Simek <michal.simek at amd.com>
---

 board/xilinx/common/board.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
index 59d87f235202..823d703ea93c 100644
--- a/board/xilinx/common/board.c
+++ b/board/xilinx/common/board.c
@@ -1,7 +1,9 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * (C) Copyright 2014 - 2020 Xilinx, Inc.
- * Michal Simek <michal.simek at xilinx.com>
+ * (C) Copyright 2014 - 2022, Xilinx, Inc.
+ * (C) Copyright 2022 - 2023, Advanced Micro Devices, Inc.
+ *
+ * Michal Simek <michal.simek at amd.com>
  */
 
 #include <common.h>
@@ -22,6 +24,7 @@
 #include <i2c_eeprom.h>
 #include <net.h>
 #include <generated/dt.h>
+#include <slre.h>
 #include <soc.h>
 #include <linux/ctype.h>
 #include <linux/kernel.h>
@@ -468,6 +471,21 @@ int __maybe_unused board_fit_config_name_match(const char *name)
 {
 	debug("%s: Check %s, default %s\n", __func__, name, board_name);
 
+#if !defined(CONFIG_SPL_BUILD)
+	if (CONFIG_IS_ENABLED(REGEX)) {
+		struct slre slre;
+		int ret;
+
+		ret = slre_compile(&slre, name);
+		if (ret) {
+			ret = slre_match(&slre, board_name, strlen(board_name),
+					 NULL);
+			debug("%s: name match ret = %d\n", __func__,  ret);
+			return !ret;
+		}
+	}
+#endif
+
 	if (!strcmp(name, board_name))
 		return 0;
 
-- 
2.36.1



More information about the U-Boot mailing list