From: Marco Felsch <m.felsch@pengutronix.de>
To: Sascha Hauer <s.hauer@pengutronix.de>,
BAREBOX <barebox@lists.infradead.org>
Cc: Marco Felsch <m.felsch@pengutronix.de>
Subject: [PATCH v4 03/11] of: overlay: make the pattern match function more generic
Date: Tue, 29 Jul 2025 17:34:28 +0200 [thread overview]
Message-ID: <20250729-v2024-05-0-topic-fit-overlay-v4-3-af3ad99acde2@pengutronix.de> (raw)
In-Reply-To: <20250729-v2024-05-0-topic-fit-overlay-v4-0-af3ad99acde2@pengutronix.de>
The current overlay mechanism can handle files only, so filepattern was
an obvious name.
Drop the "file" prefix to prepare the codebase to handle overlays
supplied via a FIT images as well.
Keep the backward compatibility by still providing the filepattern
filter and the global of.overlay.filepattern variable, but mark them as
deprecated.
Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
Documentation/user/devicetree.rst | 6 +++---
drivers/of/overlay.c | 37 ++++++++++++++++++++++++++-----------
2 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/Documentation/user/devicetree.rst b/Documentation/user/devicetree.rst
index ea2945ab2b564a10a780ba0055daa37ed0c85581..ef04e14f7c0dde579493425073f1ee01395f0d8c 100644
--- a/Documentation/user/devicetree.rst
+++ b/Documentation/user/devicetree.rst
@@ -118,15 +118,15 @@ the kernel. The behaviour is controlled by different variables:
these compatibles will be applied. When this list is empty then all overlays
will be applied. Overlays that don't have a compatible are considered being
always compatible.
-``global.of.overlay.filepattern``
+``global.of.overlay.pattern``
This is a space separated list of file patterns. An overlay is only applied
when its filename matches one of the patterns. The patterns can contain
``*`` and ``?`` as wildcards. The default is ``*`` which means all files are
applied.
``global.of.overlay.filter``
This is a space separated list of filters to apply. There are two generic filters:
- ``filepattern`` matches ``global.of.overlay.filepattern`` above, ``compatible`` matches
- ``global.of.overlay.compatible`` above. The default is ``filepattern compatible``
+ ``pattern`` matches ``global.of.overlay.pattern`` above, ``compatible`` matches
+ ``global.of.overlay.compatible`` above. The default is ``pattern compatible``
which means the two generic filters are active. This list may be replaced or
supplemented by board specific filters.
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
index 6944dd4a744de909c89622322c99b81fc046e43b..a63cca1b47e74615d4453a27a55fb15d1f706fae 100644
--- a/drivers/of/overlay.c
+++ b/drivers/of/overlay.c
@@ -407,7 +407,7 @@ int of_register_overlay(struct device_node *overlay)
return of_register_fixup(of_overlay_fixup, overlay);
}
-static char *of_overlay_filepattern;
+static char *of_overlay_pattern;
static char *of_overlay_dir;
static char *of_overlay_basedir;
@@ -504,10 +504,10 @@ int of_overlay_register_filter(struct of_overlay_filter *filter)
}
/**
- * of_overlay_filter_filename - A filter that matches on the filename of
+ * of_overlay_filter_pattern - A filter that matches on the filename or
* an overlay
* @f: The filter
- * @filename: The filename of the overlay
+ * @pattern: The filename of the overlay
*
* This filter matches when the filename matches one of the patterns given
* in global.of.overlay.filepattern. global.of.overlay.filepattern shall
@@ -515,20 +515,20 @@ int of_overlay_register_filter(struct of_overlay_filter *filter)
*
* @return: True when the overlay shall be applied, false otherwise.
*/
-static bool of_overlay_filter_filename(struct of_overlay_filter *f,
- const char *filename)
+static bool of_overlay_filter_pattern(struct of_overlay_filter *f,
+ const char *pattern)
{
char *p, *path, *n;
int ret;
bool apply;
- p = path = strdup(of_overlay_filepattern);
+ p = path = strdup(of_overlay_pattern);
while ((n = strsep_unescaped(&p, " ", NULL))) {
if (!*n)
continue;
- ret = fnmatch(n, filename, 0);
+ ret = fnmatch(n, pattern, 0);
if (!ret) {
apply = true;
@@ -543,6 +543,18 @@ static bool of_overlay_filter_filename(struct of_overlay_filter *f,
return apply;
}
+static struct of_overlay_filter of_overlay_pattern_filter = {
+ .name = "pattern",
+ .filter_filename = of_overlay_filter_pattern,
+};
+
+static bool of_overlay_filter_filename(struct of_overlay_filter *f,
+ const char *filename)
+{
+ pr_warn("'filepattern' filter is marked as deprecated, convert to 'pattern' filter\n");
+ return of_overlay_filter_pattern(f, filename);
+}
+
static struct of_overlay_filter of_overlay_filepattern_filter = {
.name = "filepattern",
.filter_filename = of_overlay_filter_filename,
@@ -597,15 +609,18 @@ static struct of_overlay_filter of_overlay_compatible_filter = {
static int of_overlay_init(void)
{
- of_overlay_filepattern = strdup("*");
- of_overlay_filter = strdup("filepattern compatible");
+ of_overlay_pattern = strdup("*");
+ of_overlay_filter = strdup("pattern compatible");
of_overlay_set_basedir("/");
globalvar_add_simple_string("of.overlay.compatible", &of_overlay_compatible);
- globalvar_add_simple_string("of.overlay.filepattern", &of_overlay_filepattern);
+ globalvar_add_simple_string("of.overlay.pattern", &of_overlay_pattern);
globalvar_add_simple_string("of.overlay.filter", &of_overlay_filter);
globalvar_add_simple_string("of.overlay.dir", &of_overlay_dir);
+ globalvar_alias_deprecated("of.overlay.filepattern", "of.overlay.pattern");
+
+ of_overlay_register_filter(&of_overlay_pattern_filter);
of_overlay_register_filter(&of_overlay_filepattern_filter);
of_overlay_register_filter(&of_overlay_compatible_filter);
@@ -616,6 +631,6 @@ static int of_overlay_init(void)
device_initcall(of_overlay_init);
BAREBOX_MAGICVAR(global.of.overlay.compatible, "space separated list of compatibles an overlay must match");
-BAREBOX_MAGICVAR(global.of.overlay.filepattern, "space separated list of filepatterns an overlay must match");
+BAREBOX_MAGICVAR(global.of.overlay.pattern, "space separated list of filepatterns an overlay must match");
BAREBOX_MAGICVAR(global.of.overlay.dir, "Directory to look for dt overlays");
BAREBOX_MAGICVAR(global.of.overlay.filter, "space separated list of filters");
--
2.39.5
next prev parent reply other threads:[~2025-07-29 15:35 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-29 15:34 [PATCH v4 00/11] Add FIT image overlay support Marco Felsch
2025-07-29 15:34 ` [PATCH v4 01/11] FIT: fix missing free in fit_open error path Marco Felsch
2025-07-29 15:34 ` [PATCH v4 02/11] FIT: fit_open_configuration: add match function support Marco Felsch
2025-07-29 15:34 ` Marco Felsch [this message]
2025-07-29 15:34 ` [PATCH v4 04/11] of: overlay: make search dir more generic Marco Felsch
2025-07-29 15:34 ` [PATCH v4 05/11] of: overlay: refactor of_overlay_global_fixup Marco Felsch
2025-07-29 15:34 ` [PATCH v4 06/11] FIT: make fit_config_verify_signature public Marco Felsch
2025-07-29 15:34 ` [PATCH v4 07/11] of: overlay: add FIT image overlay support Marco Felsch
2025-08-05 10:57 ` Sascha Hauer
2025-08-05 20:14 ` Marco Felsch
2025-07-29 15:34 ` [PATCH v4 08/11] of: overlay: replace filename with an more unique name Marco Felsch
2025-07-29 15:34 ` [PATCH v4 09/11] FIT: fit_open: make filename handling more robust Marco Felsch
2025-07-29 15:34 ` [PATCH v4 10/11] FIT: fit_open: save the filename Marco Felsch
2025-07-29 15:34 ` [PATCH v4 11/11] FIT: add support to cache opened fit images Marco Felsch
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=20250729-v2024-05-0-topic-fit-overlay-v4-3-af3ad99acde2@pengutronix.de \
--to=m.felsch@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=s.hauer@pengutronix.de \
/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