]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
xilinx: common: Add support for partial string match in board_fit_config_name_match()
authorMichal Simek <michal.simek@amd.com>
Fri, 6 Jan 2023 08:38:52 +0000 (09:38 +0100)
committerMichal Simek <michal.simek@amd.com>
Wed, 18 Jan 2023 11:17:47 +0000 (12:17 +0100)
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@amd.com>
Link: https://lore.kernel.org/r/d67683a3c5d0435a5070e622f7a9a38e19c64cf5.1672994329.git.michal.simek@amd.com
board/xilinx/common/board.c

index 59d87f2352021d053722051286f021d94e45dce9..823d703ea93cc90f78608547ccb291381f5271e2 100644 (file)
@@ -1,7 +1,9 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * (C) Copyright 2014 - 2020 Xilinx, Inc.
- * Michal Simek <michal.simek@xilinx.com>
+ * (C) Copyright 2014 - 2022, Xilinx, Inc.
+ * (C) Copyright 2022 - 2023, Advanced Micro Devices, Inc.
+ *
+ * Michal Simek <michal.simek@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;