From patchwork Tue Nov 28 10:24:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 119818 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp1514746qgn; Tue, 28 Nov 2017 02:26:09 -0800 (PST) X-Google-Smtp-Source: AGs4zMa5ojjTu0GASDBB/B8bwHya2kZkS/kCsWMPmqAqhhijWvw+96yq/G3zK3abGvWfNM/Ly8Xj X-Received: by 10.80.144.168 with SMTP id c37mr1988005eda.182.1511864769189; Tue, 28 Nov 2017 02:26:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511864769; cv=none; d=google.com; s=arc-20160816; b=mwFWlwgOPvbER33BRy/iyVjDHU7KojDGufvt6SYQBkaeeyhpRyGFPgzwZcD64xjV+O 0zr4wlx+wrKf518wFP5ZVAPFFWp4NG6Croigr3c8MBiCoUJ9RMknMactpVyxSlGG6buQ lEEQOvR3tcSmfgjJavMYgAvwKdKpqpGCGxjkMspjQih1203cQKFH1hOIdPynm6/nrgC1 lwr8RuHnMLF501h2ShKOORKEsJOK2xLSWM5AndaHM9VeM+3kq1JxYAYfXUL61Rc909KC G3McHS4yPhelNgQkJ5Stxk6uU4/XMAb7f9GD5E0YGRlsn91OPt3ua6T5qHyM/9nBtLcw FuFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:references :in-reply-to:message-id:date:to:from:arc-authentication-results; bh=s6JI2cbE88LLz6IB+CfId6uPjEIcaMPLDzvqIO5raio=; b=Kw/mlToH3faOj3S/Qs3BxkSauXOUcMiBvI5TeHMx9yfSc6oWUdU8ypg1x7ZRRSyEqj PilImFj77UFEqX17j3jTcmTrbxFAUXXAduOOWcm+zm4lpFADPpe0+Xpj4vO6a7VaVvB8 29H/AKCnXJuzdQ2wSbSUbTNEiqOyMM0VghcOD3HGEprcW2Q9NT1USYs3gKoSkR1Lb4rz KKm3ShPM85wVikNZT6r6uFB3sCGInPUupVKHxor6vc8Anlov0AZZNdh8A8Is+DR4q3Zj rVuEObVQ1tRlh184SFO6Y8II1X8FXZxnt/kJ06RRinIUldV3LzdDhVcp2HZ5wZ5ZsjTn /vnw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id r12si17394966edd.356.2017.11.28.02.26.08; Tue, 28 Nov 2017 02:26:09 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id B4FEEC21E30; Tue, 28 Nov 2017 10:25:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 95E56C21DD9; Tue, 28 Nov 2017 10:24:55 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id DB922C21D6A; Tue, 28 Nov 2017 10:24:52 +0000 (UTC) Received: from mail.free-electrons.com (mail.free-electrons.com [62.4.15.54]) by lists.denx.de (Postfix) with ESMTP id 8EBF8C21D79 for ; Tue, 28 Nov 2017 10:24:52 +0000 (UTC) Received: by mail.free-electrons.com (Postfix, from userid 110) id DF3FE20742; Tue, 28 Nov 2017 11:24:51 +0100 (CET) Received: from localhost (LStLambert-657-1-97-87.w90-63.abo.wanadoo.fr [90.63.216.87]) by mail.free-electrons.com (Postfix) with ESMTPSA id B5F5D20380; Tue, 28 Nov 2017 11:24:51 +0100 (CET) From: Maxime Ripard To: Tom Rini Date: Tue, 28 Nov 2017 11:24:45 +0100 Message-Id: X-Mailer: git-send-email 2.14.3 In-Reply-To: References: In-Reply-To: References: Cc: Thomas Petazzoni , u-boot@lists.denx.de, Andre Przywara , agraf@suse.de, Maxime Ripard , Jagan Teki Subject: [U-Boot] [PATCH 10/14] env: Initialise all the environments X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Since we want to have multiple environments, we will need to initialise all the environments since we don't know at init time what drivers might fail when calling load. Let's init all of them, and only consider for further operations the ones that have not reported any errors at init time. Signed-off-by: Maxime Ripard --- env/env.c | 19 ++++++++++++------- include/asm-generic/global_data.h | 1 + 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/env/env.c b/env/env.c index 5176700133d3..b4d8886e7a69 100644 --- a/env/env.c +++ b/env/env.c @@ -112,6 +112,9 @@ int env_get_char(int index) if (!drv->get_char) continue; + if (!(gd->env_has_init & BIT(drv->location))) + continue; + ret = drv->get_char(index); if (!ret) return 0; @@ -134,6 +137,9 @@ int env_load(void) if (!drv->load) continue; + if (!(gd->env_has_init & BIT(drv->location))) + continue; + printf("Loading Environment from %s... ", drv->name); ret = drv->load(); printf("%s\n", ret ? "Failed" : "OK"); @@ -155,6 +161,9 @@ int env_save(void) if (!drv->save) continue; + if (!(gd->env_has_init & BIT(drv->location))) + continue; + printf("Saving Environment to %s... ", drv->name); ret = drv->save(); printf("%s\n", ret ? "Failed" : "OK"); @@ -175,14 +184,10 @@ int env_init(void) int prio; for (prio = 0; (drv = env_driver_lookup(ENVO_INIT, prio)); prio++) { - if (!drv->init) - continue; - - ret = drv->init(); - if (!ret) - return 0; + if (!drv->init || !drv->init()) + gd->env_has_init |= BIT(drv->location); - debug("%s: Environment %s failed to init (err=%d)\n", __func__, + debug("%s: Environment %s init done (ret=%d)\n", __func__, drv->name, ret); } diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h index 944f58195caf..1d0611fe9498 100644 --- a/include/asm-generic/global_data.h +++ b/include/asm-generic/global_data.h @@ -50,6 +50,7 @@ typedef struct global_data { #endif unsigned long env_addr; /* Address of Environment struct */ unsigned long env_valid; /* Environment valid? enum env_valid */ + unsigned long env_has_init; /* Bitmask of boolean of struct env_location offsets */ unsigned long ram_top; /* Top address of RAM used by U-Boot */ unsigned long relocaddr; /* Start address of U-Boot in RAM */