uboot-envtools: update to 2022.07
Update to latest version. Remove upstreamed patches: - 100-fw_env-make-flash_io-take-buffer-as-an-argument.patch - 101-fw_env-simplify-logic-code-paths-in-the-fw_env_open.patch - 102-fw_env-add-fallback-to-Linux-s-NVMEM-based-access.patch Signed-off-by: Nick Hainke <vincent@systemli.org>
This commit is contained in:
parent
3a702f8733
commit
f1b5ed3143
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=uboot-envtools
|
PKG_NAME:=uboot-envtools
|
||||||
PKG_DISTNAME:=u-boot
|
PKG_DISTNAME:=u-boot
|
||||||
PKG_VERSION:=2022.01
|
PKG_VERSION:=2022.07
|
||||||
PKG_RELEASE:=$(AUTORELEASE)
|
PKG_RELEASE:=$(AUTORELEASE)
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_DISTNAME)-$(PKG_VERSION).tar.bz2
|
PKG_SOURCE:=$(PKG_DISTNAME)-$(PKG_VERSION).tar.bz2
|
||||||
@ -17,7 +17,7 @@ PKG_SOURCE_URL:= \
|
|||||||
https://ftp.denx.de/pub/u-boot \
|
https://ftp.denx.de/pub/u-boot \
|
||||||
https://mirror.cyberbits.eu/u-boot \
|
https://mirror.cyberbits.eu/u-boot \
|
||||||
ftp://ftp.denx.de/pub/u-boot
|
ftp://ftp.denx.de/pub/u-boot
|
||||||
PKG_HASH:=81b4543227db228c03f8a1bf5ddbc813b0bb8f6555ce46064ef721a6fc680413
|
PKG_HASH:=92b08eb49c24da14c1adbf70a71ae8f37cc53eeb4230e859ad8b6733d13dcf5e
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_DISTNAME)-$(PKG_VERSION)
|
PKG_SOURCE_SUBDIR:=$(PKG_DISTNAME)-$(PKG_VERSION)
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_DISTNAME)-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_DISTNAME)-$(PKG_VERSION)
|
||||||
|
|
||||||
|
@ -1,144 +0,0 @@
|
|||||||
From f178f7c9550c4fd9c644f79a1eb2dafa5bcdce25 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
|
||||||
Date: Wed, 12 Jan 2022 12:47:05 +0100
|
|
||||||
Subject: [PATCH] fw_env: make flash_io() take buffer as an argument
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
It's usually easier to understand code & follow it if all arguments are
|
|
||||||
passed explicitly. Many coding styles also discourage using global
|
|
||||||
variables.
|
|
||||||
|
|
||||||
Behaviour of flash_io() was a bit unintuitive as it was writing to a
|
|
||||||
buffer referenced in a global struct. That required developers to
|
|
||||||
remember how it works and sometimes required hacking "environment"
|
|
||||||
global struct variable to read data into a proper buffer.
|
|
||||||
|
|
||||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|
||||||
---
|
|
||||||
tools/env/fw_env.c | 32 ++++++++++++++++----------------
|
|
||||||
1 file changed, 16 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
--- a/tools/env/fw_env.c
|
|
||||||
+++ b/tools/env/fw_env.c
|
|
||||||
@@ -346,7 +346,7 @@ static int ubi_write(int fd, const void
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int flash_io(int mode);
|
|
||||||
+static int flash_io(int mode, void *buf, size_t count);
|
|
||||||
static int parse_config(struct env_opts *opts);
|
|
||||||
|
|
||||||
#if defined(CONFIG_FILE)
|
|
||||||
@@ -516,7 +516,7 @@ int fw_env_flush(struct env_opts *opts)
|
|
||||||
*environment.crc = crc32(0, (uint8_t *) environment.data, ENV_SIZE);
|
|
||||||
|
|
||||||
/* write environment back to flash */
|
|
||||||
- if (flash_io(O_RDWR)) {
|
|
||||||
+ if (flash_io(O_RDWR, environment.image, CUR_ENVSIZE)) {
|
|
||||||
fprintf(stderr, "Error: can't write fw_env to flash\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
@@ -1185,7 +1185,8 @@ static int flash_flag_obsolete(int dev,
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int flash_write(int fd_current, int fd_target, int dev_target)
|
|
||||||
+static int flash_write(int fd_current, int fd_target, int dev_target, void *buf,
|
|
||||||
+ size_t count)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
@@ -1212,11 +1213,10 @@ static int flash_write(int fd_current, i
|
|
||||||
if (IS_UBI(dev_target)) {
|
|
||||||
if (ubi_update_start(fd_target, CUR_ENVSIZE) < 0)
|
|
||||||
return -1;
|
|
||||||
- return ubi_write(fd_target, environment.image, CUR_ENVSIZE);
|
|
||||||
+ return ubi_write(fd_target, buf, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
- rc = flash_write_buf(dev_target, fd_target, environment.image,
|
|
||||||
- CUR_ENVSIZE);
|
|
||||||
+ rc = flash_write_buf(dev_target, fd_target, buf, count);
|
|
||||||
if (rc < 0)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
@@ -1235,17 +1235,17 @@ static int flash_write(int fd_current, i
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int flash_read(int fd)
|
|
||||||
+static int flash_read(int fd, void *buf, size_t count)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
if (IS_UBI(dev_current)) {
|
|
||||||
DEVTYPE(dev_current) = MTD_ABSENT;
|
|
||||||
|
|
||||||
- return ubi_read(fd, environment.image, CUR_ENVSIZE);
|
|
||||||
+ return ubi_read(fd, buf, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
- rc = flash_read_buf(dev_current, fd, environment.image, CUR_ENVSIZE,
|
|
||||||
+ rc = flash_read_buf(dev_current, fd, buf, count,
|
|
||||||
DEVOFFSET(dev_current));
|
|
||||||
if (rc != CUR_ENVSIZE)
|
|
||||||
return -1;
|
|
||||||
@@ -1291,7 +1291,7 @@ err:
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int flash_io_write(int fd_current)
|
|
||||||
+static int flash_io_write(int fd_current, void *buf, size_t count)
|
|
||||||
{
|
|
||||||
int fd_target = -1, rc, dev_target;
|
|
||||||
const char *dname, *target_temp = NULL;
|
|
||||||
@@ -1322,7 +1322,7 @@ static int flash_io_write(int fd_current
|
|
||||||
fd_target = fd_current;
|
|
||||||
}
|
|
||||||
|
|
||||||
- rc = flash_write(fd_current, fd_target, dev_target);
|
|
||||||
+ rc = flash_write(fd_current, fd_target, dev_target, buf, count);
|
|
||||||
|
|
||||||
if (fsync(fd_current) && !(errno == EINVAL || errno == EROFS)) {
|
|
||||||
fprintf(stderr,
|
|
||||||
@@ -1377,7 +1377,7 @@ static int flash_io_write(int fd_current
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int flash_io(int mode)
|
|
||||||
+static int flash_io(int mode, void *buf, size_t count)
|
|
||||||
{
|
|
||||||
int fd_current, rc;
|
|
||||||
|
|
||||||
@@ -1391,9 +1391,9 @@ static int flash_io(int mode)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode == O_RDWR) {
|
|
||||||
- rc = flash_io_write(fd_current);
|
|
||||||
+ rc = flash_io_write(fd_current, buf, count);
|
|
||||||
} else {
|
|
||||||
- rc = flash_read(fd_current);
|
|
||||||
+ rc = flash_read(fd_current, buf, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (close(fd_current)) {
|
|
||||||
@@ -1455,7 +1455,7 @@ int fw_env_open(struct env_opts *opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
dev_current = 0;
|
|
||||||
- if (flash_io(O_RDONLY)) {
|
|
||||||
+ if (flash_io(O_RDONLY, environment.image, CUR_ENVSIZE)) {
|
|
||||||
ret = -EIO;
|
|
||||||
goto open_cleanup;
|
|
||||||
}
|
|
||||||
@@ -1490,7 +1490,7 @@ int fw_env_open(struct env_opts *opts)
|
|
||||||
* other pointers in environment still point inside addr0
|
|
||||||
*/
|
|
||||||
environment.image = addr1;
|
|
||||||
- if (flash_io(O_RDONLY)) {
|
|
||||||
+ if (flash_io(O_RDONLY, environment.image, CUR_ENVSIZE)) {
|
|
||||||
ret = -EIO;
|
|
||||||
goto open_cleanup;
|
|
||||||
}
|
|
@ -1,173 +0,0 @@
|
|||||||
From 07c79dd5fdeaefb39c9e7a97f3b66de63109a18d Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
|
||||||
Date: Wed, 12 Jan 2022 12:47:06 +0100
|
|
||||||
Subject: [PATCH] fw_env: simplify logic & code paths in the fw_env_open()
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
Environment variables can be stored in two formats:
|
|
||||||
1. Single entry with header containing CRC32
|
|
||||||
2. Two entries with extra flags field in each entry header
|
|
||||||
|
|
||||||
For that reason fw_env_open() has two main code paths and there are
|
|
||||||
pointers for CRC32/flags/data.
|
|
||||||
|
|
||||||
Previous implementation was a bit hard to follow:
|
|
||||||
1. It was checking for used format twice (in reversed order each time)
|
|
||||||
2. It was setting "environment" global struct fields to some temporary
|
|
||||||
values that required extra comments explaining it
|
|
||||||
|
|
||||||
This change simplifies that code:
|
|
||||||
1. It introduces two clear code paths
|
|
||||||
2. It sets "environment" global struct fields values only once it really
|
|
||||||
knows them
|
|
||||||
|
|
||||||
To be fair there are *two* crc32() calls now and an extra pointer
|
|
||||||
variable but that should be cheap enough and worth it.
|
|
||||||
|
|
||||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|
||||||
---
|
|
||||||
tools/env/fw_env.c | 77 +++++++++++++++++++---------------------------
|
|
||||||
1 file changed, 31 insertions(+), 46 deletions(-)
|
|
||||||
|
|
||||||
--- a/tools/env/fw_env.c
|
|
||||||
+++ b/tools/env/fw_env.c
|
|
||||||
@@ -1421,9 +1421,6 @@ int fw_env_open(struct env_opts *opts)
|
|
||||||
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
- struct env_image_single *single;
|
|
||||||
- struct env_image_redundant *redundant;
|
|
||||||
-
|
|
||||||
if (!opts)
|
|
||||||
opts = &default_opts;
|
|
||||||
|
|
||||||
@@ -1439,40 +1436,37 @@ int fw_env_open(struct env_opts *opts)
|
|
||||||
goto open_cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* read environment from FLASH to local buffer */
|
|
||||||
- environment.image = addr0;
|
|
||||||
-
|
|
||||||
- if (have_redund_env) {
|
|
||||||
- redundant = addr0;
|
|
||||||
- environment.crc = &redundant->crc;
|
|
||||||
- environment.flags = &redundant->flags;
|
|
||||||
- environment.data = redundant->data;
|
|
||||||
- } else {
|
|
||||||
- single = addr0;
|
|
||||||
- environment.crc = &single->crc;
|
|
||||||
- environment.flags = NULL;
|
|
||||||
- environment.data = single->data;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
dev_current = 0;
|
|
||||||
- if (flash_io(O_RDONLY, environment.image, CUR_ENVSIZE)) {
|
|
||||||
+ if (flash_io(O_RDONLY, addr0, CUR_ENVSIZE)) {
|
|
||||||
ret = -EIO;
|
|
||||||
goto open_cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
- crc0 = crc32(0, (uint8_t *)environment.data, ENV_SIZE);
|
|
||||||
-
|
|
||||||
- crc0_ok = (crc0 == *environment.crc);
|
|
||||||
if (!have_redund_env) {
|
|
||||||
+ struct env_image_single *single = addr0;
|
|
||||||
+
|
|
||||||
+ crc0 = crc32(0, (uint8_t *)single->data, ENV_SIZE);
|
|
||||||
+ crc0_ok = (crc0 == single->crc);
|
|
||||||
if (!crc0_ok) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Warning: Bad CRC, using default environment\n");
|
|
||||||
- memcpy(environment.data, default_environment,
|
|
||||||
+ memcpy(single->data, default_environment,
|
|
||||||
sizeof(default_environment));
|
|
||||||
environment.dirty = 1;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ environment.image = addr0;
|
|
||||||
+ environment.crc = &single->crc;
|
|
||||||
+ environment.flags = NULL;
|
|
||||||
+ environment.data = single->data;
|
|
||||||
} else {
|
|
||||||
- flag0 = *environment.flags;
|
|
||||||
+ struct env_image_redundant *redundant0 = addr0;
|
|
||||||
+ struct env_image_redundant *redundant1;
|
|
||||||
+
|
|
||||||
+ crc0 = crc32(0, (uint8_t *)redundant0->data, ENV_SIZE);
|
|
||||||
+ crc0_ok = (crc0 == redundant0->crc);
|
|
||||||
+
|
|
||||||
+ flag0 = redundant0->flags;
|
|
||||||
|
|
||||||
dev_current = 1;
|
|
||||||
addr1 = calloc(1, CUR_ENVSIZE);
|
|
||||||
@@ -1483,14 +1477,9 @@ int fw_env_open(struct env_opts *opts)
|
|
||||||
ret = -ENOMEM;
|
|
||||||
goto open_cleanup;
|
|
||||||
}
|
|
||||||
- redundant = addr1;
|
|
||||||
+ redundant1 = addr1;
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * have to set environment.image for flash_read(), careful -
|
|
||||||
- * other pointers in environment still point inside addr0
|
|
||||||
- */
|
|
||||||
- environment.image = addr1;
|
|
||||||
- if (flash_io(O_RDONLY, environment.image, CUR_ENVSIZE)) {
|
|
||||||
+ if (flash_io(O_RDONLY, addr1, CUR_ENVSIZE)) {
|
|
||||||
ret = -EIO;
|
|
||||||
goto open_cleanup;
|
|
||||||
}
|
|
||||||
@@ -1518,18 +1507,12 @@ int fw_env_open(struct env_opts *opts)
|
|
||||||
goto open_cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
- crc1 = crc32(0, (uint8_t *)redundant->data, ENV_SIZE);
|
|
||||||
+ crc1 = crc32(0, (uint8_t *)redundant1->data, ENV_SIZE);
|
|
||||||
|
|
||||||
- crc1_ok = (crc1 == redundant->crc);
|
|
||||||
- flag1 = redundant->flags;
|
|
||||||
+ crc1_ok = (crc1 == redundant1->crc);
|
|
||||||
+ flag1 = redundant1->flags;
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * environment.data still points to ((struct
|
|
||||||
- * env_image_redundant *)addr0)->data. If the two
|
|
||||||
- * environments differ, or one has bad crc, force a
|
|
||||||
- * write-out by marking the environment dirty.
|
|
||||||
- */
|
|
||||||
- if (memcmp(environment.data, redundant->data, ENV_SIZE) ||
|
|
||||||
+ if (memcmp(redundant0->data, redundant1->data, ENV_SIZE) ||
|
|
||||||
!crc0_ok || !crc1_ok)
|
|
||||||
environment.dirty = 1;
|
|
||||||
|
|
||||||
@@ -1540,7 +1523,7 @@ int fw_env_open(struct env_opts *opts)
|
|
||||||
} else if (!crc0_ok && !crc1_ok) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Warning: Bad CRC, using default environment\n");
|
|
||||||
- memcpy(environment.data, default_environment,
|
|
||||||
+ memcpy(redundant0->data, default_environment,
|
|
||||||
sizeof(default_environment));
|
|
||||||
environment.dirty = 1;
|
|
||||||
dev_current = 0;
|
|
||||||
@@ -1586,13 +1569,15 @@ int fw_env_open(struct env_opts *opts)
|
|
||||||
*/
|
|
||||||
if (dev_current) {
|
|
||||||
environment.image = addr1;
|
|
||||||
- environment.crc = &redundant->crc;
|
|
||||||
- environment.flags = &redundant->flags;
|
|
||||||
- environment.data = redundant->data;
|
|
||||||
+ environment.crc = &redundant1->crc;
|
|
||||||
+ environment.flags = &redundant1->flags;
|
|
||||||
+ environment.data = redundant1->data;
|
|
||||||
free(addr0);
|
|
||||||
} else {
|
|
||||||
environment.image = addr0;
|
|
||||||
- /* Other pointers are already set */
|
|
||||||
+ environment.crc = &redundant0->crc;
|
|
||||||
+ environment.flags = &redundant0->flags;
|
|
||||||
+ environment.data = redundant0->data;
|
|
||||||
free(addr1);
|
|
||||||
}
|
|
||||||
#ifdef DEBUG
|
|
@ -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;
|
|
Loading…
x
Reference in New Issue
Block a user