All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Cc: "Marek Vasut" <marex@denx.de>, "Adam Ford" <aford173@gmail.com>,
	"Fabio Estevam" <festevam@denx.de>,
	"Marek Behún" <marek.behun@nic.cz>, "Peng Fan" <peng.fan@nxp.com>,
	"Simon Glass" <sjg@chromium.org>,
	"Stefano Babic" <sbabic@denx.de>,
	"Tim Harvey" <tharvey@gateworks.com>,
	"Tom Rini" <trini@konsulko.com>,
	"Tommaso Merciai" <tomm.merciai@gmail.com>,
	"Vladimir Oltean" <vladimir.oltean@nxp.com>
Subject: [PATCH 1/3] env: Implement lower priority arch_env_get_location()
Date: Wed,  6 Apr 2022 02:21:32 +0200	[thread overview]
Message-ID: <20220406002134.890426-1-marex@denx.de> (raw)

Currently there is only one way to override desired environment location,
by implementing env_get_location(). This is increasingly being conflated
both on board level and architecture level, which leads to a problem on
boards where this function is already implemented on architecture level,
since those boards have no way to override this environment location on
board level anymore.

Implement arch_env_get_location() function which is architecture specific
and should only ever be implemented in architecture code. This function
has lower priority than env_get_location(), which should only ever be
implemented in board code, and which overrides the arch_env_get_location()
architecture environment selection.

This way, architecture can define its default environment chooser, while
board can now override it as needed at all times.

There is no functional change, since env_get_location() simply returns
arch_env_get_location(), and arch_env_get_location() implements the
current env_get_location() default content.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Adam Ford <aford173@gmail.com>
Cc: Fabio Estevam <festevam@denx.de>
Cc: Marek Behún <marek.behun@nic.cz>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Tim Harvey <tharvey@gateworks.com>
Cc: Tom Rini <trini@konsulko.com>
Cc: Tommaso Merciai <tomm.merciai@gmail.com>
Cc: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 env/env.c              | 29 ++++++++++++++++++++++++++---
 include/env_internal.h | 16 ++++++++++++++++
 2 files changed, 42 insertions(+), 3 deletions(-)

diff --git a/env/env.c b/env/env.c
index e4dfb92e154..69848fb0608 100644
--- a/env/env.c
+++ b/env/env.c
@@ -110,13 +110,14 @@ static void env_set_inited(enum env_location location)
 }
 
 /**
- * env_get_location() - Returns the best env location for a board
+ * arch_env_get_location() - Returns the best env location for an arch
  * @op: operations performed on the environment
  * @prio: priority between the multiple environments, 0 being the
  *        highest priority
  *
  * This will return the preferred environment for the given priority.
- * This is overridable by boards if they need to.
+ * This is overridable by architectures if they need to and has lower
+ * priority than board side env_get_location() override.
  *
  * All implementations are free to use the operation, the priority and
  * any other data relevant to their choice, but must take into account
@@ -127,7 +128,7 @@ static void env_set_inited(enum env_location location)
  * Returns:
  * an enum env_location value on success, a negative error code otherwise
  */
-__weak enum env_location env_get_location(enum env_operation op, int prio)
+__weak enum env_location arch_env_get_location(enum env_operation op, int prio)
 {
 	if (prio >= ARRAY_SIZE(env_locations))
 		return ENVL_UNKNOWN;
@@ -135,6 +136,28 @@ __weak enum env_location env_get_location(enum env_operation op, int prio)
 	return env_locations[prio];
 }
 
+/**
+ * env_get_location() - Returns the best env location for a board
+ * @op: operations performed on the environment
+ * @prio: priority between the multiple environments, 0 being the
+ *        highest priority
+ *
+ * This will return the preferred environment for the given priority.
+ * This is overridable by boards if they need to.
+ *
+ * All implementations are free to use the operation, the priority and
+ * any other data relevant to their choice, but must take into account
+ * the fact that the lowest prority (0) is the most important location
+ * in the system. The following locations should be returned by order
+ * of descending priorities, from the highest to the lowest priority.
+ *
+ * Returns:
+ * an enum env_location value on success, a negative error code otherwise
+ */
+__weak enum env_location env_get_location(enum env_operation op, int prio)
+{
+	return arch_env_get_location(op, prio);
+}
 
 /**
  * env_driver_lookup() - Finds the most suited environment location
diff --git a/include/env_internal.h b/include/env_internal.h
index 07c227ecc03..14f4c696785 100644
--- a/include/env_internal.h
+++ b/include/env_internal.h
@@ -234,10 +234,26 @@ const char *env_ext4_get_intf(void);
  */
 const char *env_ext4_get_dev_part(void);
 
+/**
+ * arch_env_get_location()- Provide the best location for the U-Boot environment
+ *
+ * It is a weak function allowing board to overidde the environment location
+ * on architecture level. This has lower priority than env_get_location(),
+ * which can be defined on board level.
+ *
+ * @op: operations performed on the environment
+ * @prio: priority between the multiple environments, 0 being the
+ *        highest priority
+ * Return:  an enum env_location value on success, or -ve error code.
+ */
+enum env_location arch_env_get_location(enum env_operation op, int prio);
+
 /**
  * env_get_location()- Provide the best location for the U-Boot environment
  *
  * It is a weak function allowing board to overidde the environment location
+ * on board level. This has higher priority than arch_env_get_location(),
+ * which can be defined on architecture level.
  *
  * @op: operations performed on the environment
  * @prio: priority between the multiple environments, 0 being the
-- 
2.35.1


             reply	other threads:[~2022-04-06  0:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-06  0:21 Marek Vasut [this message]
2022-04-06  0:21 ` [PATCH 2/3] armv8: layerscape: env: Switch to arch_env_get_location() Marek Vasut
2022-04-21 15:43   ` Tom Rini
2022-04-06  0:21 ` [PATCH 3/3] ARM: imx: imx8m: " Marek Vasut
2022-04-21 15:43   ` Tom Rini
2022-04-21 15:43 ` [PATCH 1/3] env: Implement lower priority arch_env_get_location() Tom Rini

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=20220406002134.890426-1-marex@denx.de \
    --to=marex@denx.de \
    --cc=aford173@gmail.com \
    --cc=festevam@denx.de \
    --cc=marek.behun@nic.cz \
    --cc=peng.fan@nxp.com \
    --cc=sbabic@denx.de \
    --cc=sjg@chromium.org \
    --cc=tharvey@gateworks.com \
    --cc=tomm.merciai@gmail.com \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=vladimir.oltean@nxp.com \
    /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 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.