aboutsummaryrefslogtreecommitdiffstats
path: root/package/boot/uboot-envtools/patches/102-fw_env-add-fallback-to-Linux-s-NVMEM-based-access.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/boot/uboot-envtools/patches/102-fw_env-add-fallback-to-Linux-s-NVMEM-based-access.patch')
-rw-r--r--package/boot/uboot-envtools/patches/102-fw_env-add-fallback-to-Linux-s-NVMEM-based-access.patch110
1 files changed, 0 insertions, 110 deletions
diff --git a/package/boot/uboot-envtools/patches/102-fw_env-add-fallback-to-Linux-s-NVMEM-based-access.patch b/package/boot/uboot-envtools/patches/102-fw_env-add-fallback-to-Linux-s-NVMEM-based-access.patch
deleted file mode 100644
index da17350b40..0000000000
--- a/package/boot/uboot-envtools/patches/102-fw_env-add-fallback-to-Linux-s-NVMEM-based-access.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From 8142c4554ffaa927529f24427a35f7ee2861793a Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Thu, 16 Jun 2022 20:59:03 +0200
-Subject: [PATCH] fw_env: add fallback to Linux's NVMEM based access
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-A new DT binding for describing environment data block has been added in
-Linux's commit 5db1c2dbc04c ("dt-bindings: nvmem: add U-Boot environment
-variables binding"). Once we get a proper Linux NVMEM driver it'll be
-possible to use Linux's binary interface for user-space as documented
-in the:
-https://www.kernel.org/doc/html/latest/driver-api/nvmem.html
-
-This commits makes fw_env fallback to looking for a compatible NVMEM
-device in case config file isn't present. In a long term this may make
-config files redundant and avoid code (info) duplication.
-
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
----
- tools/env/fw_env.c | 70 ++++++++++++++++++++++++++++++++++++++++++++--
- 1 file changed, 67 insertions(+), 3 deletions(-)
-
---- a/tools/env/fw_env.c
-+++ b/tools/env/fw_env.c
-@@ -1713,6 +1713,67 @@ static int check_device_config(int dev)
- return rc;
- }
-
-+static int find_nvmem_device(void)
-+{
-+ const char *path = "/sys/bus/nvmem/devices";
-+ struct dirent *dent;
-+ char *nvmem = NULL;
-+ char comp[256];
-+ char buf[32];
-+ int bytes;
-+ DIR *dir;
-+
-+ dir = opendir(path);
-+ if (!dir) {
-+ return -EIO;
-+ }
-+
-+ while (!nvmem && (dent = readdir(dir))) {
-+ FILE *fp;
-+
-+ if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, "..")) {
-+ continue;
-+ }
-+
-+ bytes = snprintf(comp, sizeof(comp), "%s/%s/of_node/compatible", path, dent->d_name);
-+ if (bytes < 0 || bytes == sizeof(comp)) {
-+ continue;
-+ }
-+
-+ fp = fopen(comp, "r");
-+ if (!fp) {
-+ continue;
-+ }
-+
-+ fread(buf, sizeof(buf), 1, fp);
-+
-+ if (!strcmp(buf, "u-boot,env")) {
-+ bytes = asprintf(&nvmem, "%s/%s/nvmem", path, dent->d_name);
-+ if (bytes < 0) {
-+ nvmem = NULL;
-+ }
-+ }
-+
-+ fclose(fp);
-+ }
-+
-+ closedir(dir);
-+
-+ if (nvmem) {
-+ struct stat s;
-+
-+ stat(nvmem, &s);
-+
-+ DEVNAME(0) = nvmem;
-+ DEVOFFSET(0) = 0;
-+ ENVSIZE(0) = s.st_size;
-+
-+ return 0;
-+ }
-+
-+ return -ENOENT;
-+}
-+
- static int parse_config(struct env_opts *opts)
- {
- int rc;
-@@ -1723,9 +1784,12 @@ static int parse_config(struct env_opts
- #if defined(CONFIG_FILE)
- /* Fills in DEVNAME(), ENVSIZE(), DEVESIZE(). Or don't. */
- if (get_config(opts->config_file)) {
-- fprintf(stderr, "Cannot parse config file '%s': %m\n",
-- opts->config_file);
-- return -1;
-+ if (find_nvmem_device()) {
-+ fprintf(stderr, "Cannot parse config file '%s': %m\n",
-+ opts->config_file);
-+ fprintf(stderr, "Failed to find NVMEM device\n");
-+ return -1;
-+ }
- }
- #else
- DEVNAME(0) = DEVICE1_NAME;