From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D7CE9C43219 for ; Wed, 6 Apr 2022 00:21:51 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 296B883B8A; Wed, 6 Apr 2022 02:21:49 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1649204509; bh=/OE/nUZZrs+H4Nl12POtTX9u0D4wXw9lP0jfj8OAiII=; h=From:To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From; b=pvpr8mNR/qceQd8R2f+Yu49lpTbTNU7141+eLkMfv4fT+HDceTk1LT7EMdk6cFbUx NHpjiZcf35DwfcgnT+jwnacANK30o9vWwkm41NNAiuTjB37pQX8yhc1Nf9YNck2ABt NyhX5KsW1TY2IzQSdMnJYwzvciFDRoOgwoJSKKNcIRsuKSHUcluK7ouyS15U4au37N Dfc9I/3/mcwuZDw/prIyQwY8/rDLmTqjAWZCqvOxCQWnuWIqaOmCwKkQGltu61BLi+ +DbwYxafEwYni2ehs2T8ZQLwkM+yjeVcGtlcfSx4CvG46LUE+4Z3+vS9icygv5tLaC QGZUAtd3cL8Bw== Received: from tr.lan (ip-89-176-112-137.net.upcbroadband.cz [89.176.112.137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id ADAC283B9F; Wed, 6 Apr 2022 02:21:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1649204506; bh=/OE/nUZZrs+H4Nl12POtTX9u0D4wXw9lP0jfj8OAiII=; h=From:To:Cc:Subject:Date:From; b=GlkMur/fATtaMgMMMUIaR19d3zCyOEBKwIoVVVEHUtmrC8ll6bQ0rVbn93v6FKol2 7EWOIVkrBiF3Civ1A5L2piDGTnkxtrYBL8pU3JL+NjgDLLdUN1mc82mTwfs4zE1ebz 2BIWpG3czmxFoDHSYM1zGdBaNZmg9qjjSi5pRjnjpMSmAKLMB9nWzWVgzf5oUIBNuu Ys+j5PfnenvRJd1C3gsUI+LaTQhBvaoNzHibtIc0ajYe8CIVWKJUlxfmokEdDwsr3Z kgCKJwgmyar4yGue6MIKkPnf3eDphtnkonFerPzTMqE35diPtB2HhekPZz3KuTbZQt 4N5qW6eWGPxwQ== From: Marek Vasut To: u-boot@lists.denx.de Cc: Marek Vasut , Adam Ford , Fabio Estevam , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Peng Fan , Simon Glass , Stefano Babic , Tim Harvey , Tom Rini , Tommaso Merciai , Vladimir Oltean Subject: [PATCH 1/3] env: Implement lower priority arch_env_get_location() Date: Wed, 6 Apr 2022 02:21:32 +0200 Message-Id: <20220406002134.890426-1-marex@denx.de> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.5 at phobos.denx.de X-Virus-Status: Clean 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 Cc: Adam Ford Cc: Fabio Estevam Cc: Marek BehĂșn Cc: Peng Fan Cc: Simon Glass Cc: Stefano Babic Cc: Tim Harvey Cc: Tom Rini Cc: Tommaso Merciai Cc: Vladimir Oltean --- 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