From patchwork Sat Jun 29 09:36:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Wunderlich X-Patchwork-Id: 1124735 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="eElKAndX"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 45bTDc0m82z9s3C for ; Sat, 29 Jun 2019 19:41:51 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 90354C21C93; Sat, 29 Jun 2019 09:41:47 +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 34696C21C57; Sat, 29 Jun 2019 09:41:45 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id F2B6FC21C57; Sat, 29 Jun 2019 09:41:42 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by lists.denx.de (Postfix) with ESMTPS id A5E0BC21C27 for ; Sat, 29 Jun 2019 09:41:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1561801300; bh=ANmtuBAZqh+9WY5waEXVOS11BE8MpBcVmldnA5PtWyA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=eElKAndXcuI1tGZuwHrWlCsq1X46xWVN/rHpQJxUV9SaPgbzcmiMgse8mj6eCaa6N io4kHda3EFnb8GGV8jPXEEEgzQu26ffTcPNo1iAj4cAmR7o9XCeJ4RvQc1j2Q/BpHg 87+LNCM867sRv5FkGH+YinJ4r91Qvobf5FpaPDRQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([217.61.145.254]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MG9g4-1hmcMY2llk-00Gcye; Sat, 29 Jun 2019 11:36:34 +0200 From: Frank Wunderlich To: Simon Goldschmidt , u-boot@lists.denx.de Date: Sat, 29 Jun 2019 11:36:19 +0200 Message-Id: <20190629093620.21127-2-frank-w@public-files.de> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190629093620.21127-1-frank-w@public-files.de> References: <20190629093620.21127-1-frank-w@public-files.de> X-Provags-ID: V03:K1:mhb5xQVab3SK4NevSnzRfLW1oy3W5qCHjX5p+xhfILvDk41ugnw KGTDIJHU4dG64kCJdZDtBV94WiiRR74xgCv64oMTGjkr/7iWIk8Knl1KZSoiN+7GNEVgnTy 0Qnb4J1p27k+XATXn7UvjVQKFbGCYWAZSb8iW1Bb+9Suhka1Q7bMcQWKcupr4yy4F9i9Cx4 rySvqWyjUCTrDTpCqp0/Q== X-UI-Out-Filterresults: notjunk:1; V03:K0:4HNlq1umQIk=:kmWE4FWIlWu8EEEPddLwVm yZNU6QQ6FJsVXlQB3WkcktfvBd63I8lOuaiW6yLB5TRCAAFO/gUT3oXdeD0uA8dZI/wvZegz5 oNGPN//gu0HjvGvYhkl8bAu4BCUfPoSntk1toFrl+LFnK+UStDVj1oeO5gTLrNGOwjJTPu/Ka gseP/1SHL512TYLz248kq42A+/w4cxT2Ws1XSYObURE6AGuS3RRBtOfxhS3OGSwNkvI3gprwr e2y/TUJNbvitzAhJ1JAMyfy1Y+iBaFre3d3ct9wxD6QGS3cbMo6Jh8sNooL3qKw3hLCksjVAD RtDYdoJy2jmzocbf4RpEoSOXxnM/lKgcZuGZsRZWq+wpBqiq2EznopcTQv48A4etj8I7AamYx 7p5dNp8GJdoNzLfXQVra2vSjw3rpWnM6kxAp/4gPxladnZHRH82EExGe4EPA/95V0GsavbSNC u/RCgg3wKu1tiNWkxpO3YvtFYYni8atYDTbBcwvgPxdHN8d/OjJVQm6dePAEzrC66QIDkJ92q VnUxovwIjuYgeExYIJIgPKSbG58zeE952Zqb/fU7iUO6+7+GJ6eQS/Q+D5A8nAh4L8yr5Orq1 2O+h0NqKjxYIkkzM2+aEhq3ewOw+BSOji53/7Uwo/snYgW+tQujG7MH6Jvz2EJ5twbJi2DC2S ExzBokMu0DlZhu/l2V36AM0d0xcAHUIwYJhw8pvHYuTIL0YmA0n9bIh6cPXBpd4nqvRTx1bbF Of2Mn6A2OS2CR92qcrtM+rPB7pVMDpuB4U0JtiY+wEnLstuG4vcpLQA1K6VHFB9Ou2StV3BE4 RKA6I5UqhncsqZT7PX3340kmKm7Xi+lr0U+VOmtV6urXfb1fP6+hKDLGloxPq25bzuq5Xq3TJ niZnMl88Kd+Rqd70HpWvohfOWAqSrq9t13pujAWqRoVDGJ9tNtC4VYczpGTxi4UmLOCnBTPQ/ 5Kbe9P3obdqgnKaazEGV92j6jVZ1ZSVgZmDCjBB4NfmbPqecaOxaIQrPG3PMgvv9YkIcaFuO+ oe1wC2k/8E2M6ZeUbW2DVDqMY2hMKbBd1TZevlEZZmUzu5LWEf8rAvoyCqUFvQdhYPLBa10qR xPpSdbYZM+Tmqs= Subject: [U-Boot] [PATCH v7 1/2] 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 | 20 ++++++++++++++++++++ env/env.c | 30 ++++++++++++++++++++++++++++++ include/environment.h | 17 +++++++++++++++++ 4 files changed, 75 insertions(+) -- 2.17.1 diff --git a/cmd/Kconfig b/cmd/Kconfig index 0badcb3fe0..77e8a542d9 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -408,6 +408,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 52c242b4f6..63de758534 100644 --- a/cmd/nvedit.c +++ b/cmd/nvedit.c @@ -761,6 +761,20 @@ 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 +1221,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 +1299,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 */ From patchwork Sat Jun 29 09:36:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Wunderlich X-Patchwork-Id: 1124732 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="BpM6jksL"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 45bT6p2Z35z9s5c for ; Sat, 29 Jun 2019 19:36:48 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 5E387C21E08; Sat, 29 Jun 2019 09:36:41 +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 80C30C21C57; Sat, 29 Jun 2019 09:36:39 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C3493C21C57; Sat, 29 Jun 2019 09:36:37 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by lists.denx.de (Postfix) with ESMTPS id 749C2C21C27 for ; Sat, 29 Jun 2019 09:36:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1561800994; bh=U33Wuy/EucOZlsfTAYXDNWKJOrKiJVUgGG+cJsYtERY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=BpM6jksLBcLXt7VhaMg1PE6LWE857wcUmERcv2FRj9s8q3643yHrHSUUtXE/jEwVM ormqrNvGpv0DrzpnFWvQOkU4ULDAyWUaL/1Aqs2dY0RPpb0tw33Sa1+hFKMfp+FMeL Gn7vIa7SYMRlAexCrK/On3XpDyoJjm/GSUHXD240= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([217.61.145.254]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MlNtF-1iQ5uR3QDt-00lp05; Sat, 29 Jun 2019 11:36:34 +0200 From: Frank Wunderlich To: Simon Goldschmidt , u-boot@lists.denx.de Date: Sat, 29 Jun 2019 11:36:20 +0200 Message-Id: <20190629093620.21127-3-frank-w@public-files.de> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190629093620.21127-1-frank-w@public-files.de> References: <20190629093620.21127-1-frank-w@public-files.de> X-Provags-ID: V03:K1:nAbq2MCRwUS5sfnwuVwoo97W0VKOwkr9IyFj51XNFnbaci2M8Kn J3KUp6pSLGi5PomiRw+C10WeuslUlPyqZRlaNKg1VuakDPAGDtaBfuOib76cnEsYCjNElSQ PrbkWrhlIfcR02FtVGhzkQ52uoDNE4vJdVYFAXtkLXboi7EhIoU3AfKhV/oyTJ5090hfNDK ncCgodYtsr90df1lT83yg== X-UI-Out-Filterresults: notjunk:1; V03:K0:x7euKzm/Wq8=:nYTic3gqVe0boSFgEW4zxh eDyvENKWFM9AaG169WaD5SDvxYQUNUxk+9uHxcLOD7ULQojvoNO+hlDPkEEZmoYz3cnfAnWiO osEVs9aZGvsGt4+3Q0gnGYH8Qk5uEARWvuFtiLBehs5B9ntkXShOuqLf6mebkYfuZZkvoCBVp foGJfAXGHNLDbQpd8Q9RaJ04GSj0RF+AbIpBJFdqfICF/5egE3dsQpvtt9Txxlaor4Yjv6ZTn nw5m8laH0bnKkT3cd7kpRoyXZxw+uM+uJKUU875L/WPMLOqyFx2dnmlNjfTbh8UUzVvuWKbrp h3h+z8cy73Jlj/E+wfp1nyVuMxjXa6JqYuiSXDL4ekNTY2utFjaQ0/VTE5KeFyuyODI1dC4Zf g567YI12haev2M0cNpQ4PuGhWlegCmg9b8+ANu2Uh+LKfYecDJjdsuZER8wOSC0y0eXzyWZM4 z6PA1yI1UCHFIx3djNH4GfxpVdQnO2/2befGh79xUaGHuYWmRt2BEEt+wCr0/3Mk4ueTil+GU m0OwNj5jmIoD3/L6FlA1ASdHQIRrg+45kU3Rq0ZY3nEOPVotsiB5XvDgv/sZajoufK/G1HGRI 4f/8Oq/CqeUaRYymaafNN3ivvVd+b6k21kPkfvHTQTvXDlrnTEmxR+VQjy6H1Pbx8XQqsbfdV o1Ps3M/O4qVMTvPVd/wIgI3TmNFgnxu9LN7ZtmWGYsng5g8pt16LhdRVkVUcCOLm6O9LiQ4LS v8J8/AMPycFM7OZoJtcn/BSv1VRDFsLC5q2r8vcnCO8O1dTB+muqdChupP9C+wryUXrm1EExL 4Bm2bJDqIea00iUwFSzKMtoLT4/mWOSsZBWMRDroUPQDY4k3FUC/JLWzd+KvE/4g4i4YYV07O b1+b+YfgIOt8bvX6S5lOE302QQCmmbdXwPhGLh2qaOvGfrmIf3omHFMJxHQ/O79oaG5oUVgG/ UdtMpa64ypJikZPFd2ifhRjyLKFfdtHE+lVztvMSj1Bp8OHrxc9Hm0SCrogJry5a5IK/rPrxR 1At6YSNPcidhgJF4OJqRRruk/5zZldAaSeUZJZJc5djEmWjgm5GZp0vOZI4JyRsA/i74QlLhV nAKBH0igYXLkiM= Subject: [U-Boot] [PATCH v7 2/2] env: mmc: add erase-function 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 adds erase environment for mmc storage squashed fixes: - add CONFIG_CMD_ERASEENV - env: erase redundant offset if defined - changes mentioned by Simon - fix whitespaces around errmsg Suggested-by: Simon Goldschmidt Signed-off-by: Frank Wunderlich Reviewed-by: Simon Goldschmidt --- env/mmc.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) -- 2.17.1 diff --git a/env/mmc.c b/env/mmc.c index c3cf35d01b..b7b833f423 100644 --- a/env/mmc.c +++ b/env/mmc.c @@ -242,6 +242,54 @@ fini: fini_mmc_for_env(mmc); return ret; } + +#if defined(CONFIG_CMD_ERASEENV) +static inline int erase_env(struct mmc *mmc, unsigned long size, + unsigned long offset) +{ + uint blk_start, blk_cnt, n; + struct blk_desc *desc = mmc_get_blk_desc(mmc); + + blk_start = ALIGN(offset, mmc->write_bl_len) / mmc->write_bl_len; + blk_cnt = ALIGN(size, mmc->write_bl_len) / mmc->write_bl_len; + + n = blk_derase(desc, blk_start, blk_cnt); + printf("%d blocks erased: %s\n", n, (n == blk_cnt) ? "OK" : "ERROR"); + + return (n == blk_cnt) ? 0 : 1; +} + +static int env_mmc_erase(void) +{ + int dev = mmc_get_env_dev(); + struct mmc *mmc = find_mmc_device(dev); + int ret, copy = 0; + u32 offset; + const char *errmsg; + + errmsg = init_mmc_for_env(mmc); + if (errmsg) { + printf("%s\n", errmsg); + return 1; + } + + if (mmc_get_env_addr(mmc, copy, &offset)) + return CMD_RET_FAILURE; + + ret = erase_env(mmc, CONFIG_ENV_SIZE, offset); + +#ifdef CONFIG_ENV_OFFSET_REDUND + copy = 1; + + if (mmc_get_env_addr(mmc, copy, &offset)) + return CMD_RET_FAILURE; + + ret |= erase_env(mmc, CONFIG_ENV_SIZE, offset); +#endif + + return ret; +} +#endif /* CONFIG_CMD_ERASEENV */ #endif /* CONFIG_CMD_SAVEENV && !CONFIG_SPL_BUILD */ static inline int read_env(struct mmc *mmc, unsigned long size, @@ -351,5 +399,8 @@ U_BOOT_ENV_LOCATION(mmc) = { .load = env_mmc_load, #ifndef CONFIG_SPL_BUILD .save = env_save_ptr(env_mmc_save), +#if defined(CONFIG_CMD_ERASEENV) + .erase = env_mmc_erase, +#endif #endif };