All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] env: restore old env_get_char() behaviour
@ 2018-02-09 20:23 Goldschmidt Simon
  2018-02-12 16:25 ` York Sun
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Goldschmidt Simon @ 2018-02-09 20:23 UTC (permalink / raw)
  To: u-boot

With multiple environments, the 'get_char' callback for env
drivers does not really make sense any more because it is
only supported by two drivers (eeprom and nvram).

To restore single character loading for these drivers,
override 'env_get_char_spec'.

Signed-off-by: Simon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>
---
 env/eeprom.c          |  6 ++++--
 env/env.c             | 29 +++++++----------------------
 env/nvram.c           |  8 ++++----
 include/environment.h | 11 -----------
 4 files changed, 15 insertions(+), 39 deletions(-)

diff --git a/env/eeprom.c b/env/eeprom.c
index 55d19d9d99..63842d6ff3 100644
--- a/env/eeprom.c
+++ b/env/eeprom.c
@@ -61,7 +61,10 @@ static int eeprom_bus_write(unsigned dev_addr, unsigned offset,
 	return rcode;
 }
 
-static int env_eeprom_get_char(int index)
+/** Call this function from overridden env_get_char_spec() if you need
+ * this functionality.
+ */
+int env_eeprom_get_char(int index)
 {
 	uchar c;
 	unsigned int off = CONFIG_ENV_OFFSET;
@@ -228,7 +231,6 @@ static int env_eeprom_save(void)
 U_BOOT_ENV_LOCATION(eeprom) = {
 	.location	= ENVL_EEPROM,
 	ENV_NAME("EEPROM")
-	.get_char	= env_eeprom_get_char,
 	.load		= env_eeprom_load,
 	.save		= env_save_ptr(env_eeprom_save),
 };
diff --git a/env/env.c b/env/env.c
index 9a89832c1a..ab12606207 100644
--- a/env/env.c
+++ b/env/env.c
@@ -149,32 +149,17 @@ static struct env_driver *env_driver_lookup(enum env_operation op, int prio)
 	return drv;
 }
 
-int env_get_char(int index)
+__weak int env_get_char_spec(int index)
 {
-	struct env_driver *drv;
-	int prio;
+	return *(uchar *)(gd->env_addr + index);
+}
 
+int env_get_char(int index)
+{
 	if (gd->env_valid == ENV_INVALID)
 		return default_environment[index];
-
-	for (prio = 0; (drv = env_driver_lookup(ENVOP_GET_CHAR, prio)); prio++) {
-		int ret;
-
-		if (!drv->get_char)
-			continue;
-
-		if (!env_has_inited(drv->location))
-			continue;
-
-		ret = drv->get_char(index);
-		if (!ret)
-			return 0;
-
-		debug("%s: Environment %s failed to load (err=%d)\n", __func__,
-		      drv->name, ret);
-	}
-
-	return -ENODEV;
+	else
+		return env_get_char_spec(index);
 }
 
 int env_load(void)
diff --git a/env/nvram.c b/env/nvram.c
index 6f76fe4b8d..7cc62b631e 100644
--- a/env/nvram.c
+++ b/env/nvram.c
@@ -41,7 +41,10 @@ env_t *env_ptr = (env_t *)CONFIG_ENV_ADDR;
 #endif
 
 #ifdef CONFIG_SYS_NVRAM_ACCESS_ROUTINE
-static int env_nvram_get_char(int index)
+/** Call this function from overridden env_get_char_spec() if you need
+ * this functionality.
+ */
+int env_nvram_get_char(int index)
 {
 	uchar c;
 
@@ -113,9 +116,6 @@ static int env_nvram_init(void)
 U_BOOT_ENV_LOCATION(nvram) = {
 	.location	= ENVL_NVRAM,
 	ENV_NAME("NVRAM")
-#ifdef CONFIG_SYS_NVRAM_ACCESS_ROUTINE
-	.get_char	= env_nvram_get_char,
-#endif
 	.load		= env_nvram_load,
 	.save		= env_save_ptr(env_nvram_save),
 	.init		= env_nvram_init,
diff --git a/include/environment.h b/include/environment.h
index 6044b9e1b4..8696573d0d 100644
--- a/include/environment.h
+++ b/include/environment.h
@@ -217,17 +217,6 @@ struct env_driver {
 	const char *name;
 	enum env_location location;
 
-	/**
-	 * get_char() - Read a character from the environment
-	 *
-	 * This method is optional. If not provided, a default implementation
-	 * will read from gd->env_addr.
-	 *
-	 * @index: Index of character to read (0=first)
-	 * @return character read, or -ve on error
-	 */
-	int (*get_char)(int index);
-
 	/**
 	 * load() - Load the environment from storage
 	 *
-- 
2.14.1
 

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [U-Boot] [PATCH] env: restore old env_get_char() behaviour
  2018-02-09 20:23 [U-Boot] [PATCH] env: restore old env_get_char() behaviour Goldschmidt Simon
@ 2018-02-12 16:25 ` York Sun
  2018-02-13 12:24 ` Maxime Ripard
  2018-02-17 20:52 ` [U-Boot] " Tom Rini
  2 siblings, 0 replies; 4+ messages in thread
From: York Sun @ 2018-02-12 16:25 UTC (permalink / raw)
  To: u-boot

On 02/09/2018 12:23 PM, Goldschmidt Simon wrote:
> With multiple environments, the 'get_char' callback for env
> drivers does not really make sense any more because it is
> only supported by two drivers (eeprom and nvram).
> 
> To restore single character loading for these drivers,
> override 'env_get_char_spec'.
> 
> Signed-off-by: Simon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>

This patch looks OK to me, as long as eeprom and nvram drivers continue
to work, don't they?

York

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [U-Boot] [PATCH] env: restore old env_get_char() behaviour
  2018-02-09 20:23 [U-Boot] [PATCH] env: restore old env_get_char() behaviour Goldschmidt Simon
  2018-02-12 16:25 ` York Sun
@ 2018-02-13 12:24 ` Maxime Ripard
  2018-02-17 20:52 ` [U-Boot] " Tom Rini
  2 siblings, 0 replies; 4+ messages in thread
From: Maxime Ripard @ 2018-02-13 12:24 UTC (permalink / raw)
  To: u-boot

On Fri, Feb 09, 2018 at 08:23:17PM +0000, Goldschmidt Simon wrote:
> With multiple environments, the 'get_char' callback for env
> drivers does not really make sense any more because it is
> only supported by two drivers (eeprom and nvram).
> 
> To restore single character loading for these drivers,
> override 'env_get_char_spec'.
> 
> Signed-off-by: Simon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>

Acked-by: Maxime Ripard <maxime.ripard@bootlin.com>

Thanks!
Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
http://bootlin.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180213/40787f17/attachment.sig>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [U-Boot] env: restore old env_get_char() behaviour
  2018-02-09 20:23 [U-Boot] [PATCH] env: restore old env_get_char() behaviour Goldschmidt Simon
  2018-02-12 16:25 ` York Sun
  2018-02-13 12:24 ` Maxime Ripard
@ 2018-02-17 20:52 ` Tom Rini
  2 siblings, 0 replies; 4+ messages in thread
From: Tom Rini @ 2018-02-17 20:52 UTC (permalink / raw)
  To: u-boot

On Fri, Feb 09, 2018 at 08:23:17PM +0000, Goldschmidt Simon wrote:

> With multiple environments, the 'get_char' callback for env
> drivers does not really make sense any more because it is
> only supported by two drivers (eeprom and nvram).
> 
> To restore single character loading for these drivers,
> override 'env_get_char_spec'.
> 
> Signed-off-by: Simon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>
> Acked-by: Maxime Ripard <maxime.ripard@bootlin.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180217/0c2a5088/attachment.sig>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-02-17 20:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-09 20:23 [U-Boot] [PATCH] env: restore old env_get_char() behaviour Goldschmidt Simon
2018-02-12 16:25 ` York Sun
2018-02-13 12:24 ` Maxime Ripard
2018-02-17 20:52 ` [U-Boot] " Tom Rini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.