From patchwork Sun Apr 28 08:51:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Wunderlich X-Patchwork-Id: 1092192 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=public-files.de Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="M3bk1O++"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44sM4H2Bp5z9s7T for ; Sun, 28 Apr 2019 18:52:31 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id BEF37C21E89; Sun, 28 Apr 2019 08:52:23 +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=T_DKIM_INVALID 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 CFDB1C21C4A; Sun, 28 Apr 2019 08:51:54 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 9A182C21C4A; Sun, 28 Apr 2019 08:51:50 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by lists.denx.de (Postfix) with ESMTPS id 3DC79C21C27 for ; Sun, 28 Apr 2019 08:51:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1556441509; bh=DT9LskDwaZT8LgpwqHyulwPmMusZ+bacKTmAJfDCY94=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=M3bk1O++/qAPgVWEwZ+KxVxYlgug7Vi8Y1cZPARGgDD/9U57R8KIms5crOiFt2JWd SrIjAWpTq+RD4aqugNAU/afYABM+/+rGjwC0MKbW/Lxc/ZJuHdbiAZOloeMBzdMzGP IC3vSUSiPpktSg/J56Qepzjjyai81nAjU8qXdf30= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([217.61.149.89]) by mail.gmx.com (mrgmx001 [212.227.17.190]) with ESMTPSA (Nemesis) id 0MQiVh-1hCaOu1y29-00TzWL; Sun, 28 Apr 2019 10:51:49 +0200 From: Frank Wunderlich To: u-boot@lists.denx.de, Simon Goldschmidt Date: Sun, 28 Apr 2019 10:51:25 +0200 Message-Id: <20190428085128.8479-2-frank-w@public-files.de> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190428085128.8479-1-frank-w@public-files.de> References: <20190428085128.8479-1-frank-w@public-files.de> X-Provags-ID: V03:K1:cjXGQfJWQ1QBzrtgwLa64lGGiZYU7v7h/+aqEA6FK14uLgcValS xELXLJBqLn7nlIZ5PtzuSCZ9LhafsRUPzPV10GzyvYr4O80n0SkxnHQZ+XnXNXX4a8TbRZz HLS3eZE9nNr3DtO5qmCms8RRqA82PfqcyPG4SlW9h311jMT5FCxmlvmM9XLUPcBziWUJt6F eWfL98wpfCVmtpz9jvvUA== X-UI-Out-Filterresults: notjunk:1; V03:K0:TCbiiXBLA1E=:/U6aKk9YIr+0E7t6xoD0p8 I7iNA2zSwNVPNh2RZTvdDyyI5LjGcJwKH55PrGXnUB8CKKBshdJkatINoyvxWzYyOgwyd+X7T ee1YZD0QYVR3qrBQQLRpnuAPkuNBd7UYKgGWLDnR8zoerymqF8pwYQrE5iZKuqvs/eq1ka0S4 bzS5aglygGYRZ0Wsn3e2cijsGHfumpJSgt5O3Na81LlLZKoAL/MY/p5cGknd8pBDDgRWdVysI kQKKdpkxgiJUXawywS9wg/HC/63Enl2ExgSEdEPZvFRUFstlfRlJNNO8yQ7UBHXDYQOw8dpju okNbIzWz75Flte0xU43QCTUbdLMlBUSf9TTIpHtR/OkRAnSDZbahcgVB9+x+OZAPB0Ct+mU9g axpjPtdr+RHunLAARWfELhId3b07gwFfiRJHYjhUEqAygvLCRSwkJexkJukR+8T2mIyfQZDhx qBCEQQCNQvLqxyb6yXJ6Z4e8JDLhmKnITru6m4kUHjOrkII5IPR4k4z1u4LaPa6hm0AN7TQbW /Ah/FCruSi8bvE5zgmh66AGjZ/1kXyqTr9fGmsCM/GJZkTCh27aJRmDrKs7I5NIlNTUAam7cJ P6lyKxPMslbpBBNJOYsPtAZ8/Asr/8Lf3khoM2TULTJKyRFSTPr/BL1uf+uNysEDP1HzUJAZC qm2v8V3lr5BhbdJWWz/FivwKJEZX49qMJsIvxId+DyTyEYE2xD4DkksMMYk5GUuwGVi2+rHKf ks7sot9lqajDWAcv84iuFUW0MrsD7AiY5PexMtss1CKwtbUcAyUroW+CkRiHXw4KHFdmKKV43 /dUDv6HFjIpht7umeAc6tXvhqcQYdVN/SxT/5Eml/N3FKDKk9iK7saG1If7LB6df3b1gG+bYD BhMO2Lh6svKts2myJw/zgzrsaQAzIxJeL+bEOBZIOI/AxaNRS5sgv8JrwuUyPM Subject: [U-Boot] [PATCH v4 1/4] env: register erase command 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" this patch adds basic changes for adding a erase-subcommand to env with this command the environment stored on non-volatile storage written by saveenv can be cleared. Signed-off-by: Frank Wunderlich squashed fixes - start message with "Erasing" - mark erase-function as optional - env: separate eraseenv from saveenv Suggested-by: Simon Goldschmidt Reviewed-by: Simon Goldschmidt --- cmd/Kconfig | 8 ++++++++ cmd/nvedit.c | 19 +++++++++++++++++++ env/env.c | 30 ++++++++++++++++++++++++++++++ include/environment.h | 17 +++++++++++++++++ 4 files changed, 74 insertions(+) -- 2.17.1 diff --git a/cmd/Kconfig b/cmd/Kconfig index 0b07b3b9d7..e8a99cb5a3 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -397,6 +397,14 @@ config CMD_SAVEENV Save all environment variables into the compiled-in persistent storage. +config CMD_ERASEENV + bool "eraseenv" + default n + depends on CMD_SAVEENV + help + Erase environment variables from the compiled-in persistent + storage. + config CMD_ENV_EXISTS bool "env exists" default y diff --git a/cmd/nvedit.c b/cmd/nvedit.c index 24a6cf7824..0cbd8e8984 100644 --- a/cmd/nvedit.c +++ b/cmd/nvedit.c @@ -761,6 +761,19 @@ U_BOOT_CMD( "save environment variables to persistent storage", "" ); + +#if defined(CONFIG_CMD_ERASEENV) +static int do_env_erase(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) +{ + return env_erase() ? 1 : 0; +} +U_BOOT_CMD( + eraseenv, 1, 0, do_env_erase, + "erase environment variables from persistent storage", + "" +); +#endif #endif #endif /* CONFIG_SPL_BUILD */ @@ -1207,6 +1220,9 @@ static cmd_tbl_t cmd_env_sub[] = { #endif #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE) U_BOOT_CMD_MKENT(save, 1, 0, do_env_save, "", ""), +#if defined(CONFIG_CMD_ERASEENV) + U_BOOT_CMD_MKENT(erase, 1, 0, do_env_erase, "", ""), +#endif #endif U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 0, do_env_set, "", ""), #if defined(CONFIG_CMD_ENV_EXISTS) @@ -1282,6 +1298,9 @@ static char env_help_text[] = #endif #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE) "env save - save environment\n" +#if defined(CONFIG_CMD_ERASEENV) + "env erase - erase environment\n" +#endif #endif #if defined(CONFIG_CMD_NVEDIT_EFI) "env set -e name [arg ...] - set UEFI variable; unset if 'arg' not specified\n" diff --git a/env/env.c b/env/env.c index 4b417b90a2..d3cbe2f915 100644 --- a/env/env.c +++ b/env/env.c @@ -24,6 +24,8 @@ void env_fix_drivers(void) entry->load += gd->reloc_off; if (entry->save) entry->save += gd->reloc_off; + if (entry->erase) + entry->erase += gd->reloc_off; if (entry->init) entry->init += gd->reloc_off; } @@ -254,6 +256,34 @@ int env_save(void) return -ENODEV; } +int env_erase(void) +{ + struct env_driver *drv; + + drv = env_driver_lookup(ENVOP_ERASE, gd->env_load_prio); + if (drv) { + int ret; + + if (!drv->erase) + return -ENODEV; + + if (!env_has_inited(drv->location)) + return -ENODEV; + + printf("Erasing Environment on %s... ", drv->name); + ret = drv->erase(); + if (ret) + printf("Failed (%d)\n", ret); + else + printf("OK\n"); + + if (!ret) + return 0; + } + + return -ENODEV; +} + int env_init(void) { struct env_driver *drv; diff --git a/include/environment.h b/include/environment.h index cd96676141..de67cf4f0e 100644 --- a/include/environment.h +++ b/include/environment.h @@ -200,6 +200,7 @@ enum env_operation { ENVOP_INIT, /* we want to call the init function */ ENVOP_LOAD, /* we want to call the load function */ ENVOP_SAVE, /* we want to call the save function */ + ENVOP_ERASE, /* we want to call the erase function */ }; struct env_driver { @@ -225,6 +226,15 @@ struct env_driver { */ int (*save)(void); + /** + * erase() - Erase the environment on storage + * + * This method is optional and required for 'eraseenv' to work. + * + * @return 0 if OK, -ve on error + */ + int (*erase)(void); + /** * init() - Set up the initial pre-relocation environment * @@ -303,6 +313,13 @@ int env_load(void); */ int env_save(void); +/** + * env_erase() - Erase the environment on storage + * + * @return 0 if OK, -ve on error + */ +int env_erase(void); + /** * env_fix_drivers() - Updates envdriver as per relocation */