From patchwork Wed Sep 11 09:05:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Opaniuk X-Patchwork-Id: 1160847 X-Patchwork-Delegate: sbabic@denx.de 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tfM//0HO"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46Sx006Nwjz9s4Y for ; Wed, 11 Sep 2019 19:08:32 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id A8332C21DB6; Wed, 11 Sep 2019 09:06: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=FREEMAIL_FROM, RCVD_IN_MSPIKE_H2, 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 26CC9C21DF9; Wed, 11 Sep 2019 09:05:59 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A68B4C21DA6; Wed, 11 Sep 2019 09:05:50 +0000 (UTC) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by lists.denx.de (Postfix) with ESMTPS id 17992C21DCA for ; Wed, 11 Sep 2019 09:05:48 +0000 (UTC) Received: by mail-wm1-f68.google.com with SMTP id r195so2550846wme.2 for ; Wed, 11 Sep 2019 02:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6jPWSacmRXSzrFwqVw3dXbaZHf/k4wHnQIztxtENWwg=; b=tfM//0HOdycqi8CYcIB405rg6cwRaBo2LWMvMBuWxUZFbaAxzfJVI7WehTQCFkliNN t9pqSL0ikFYZp0eT9fJ3UYyt35Q8ALhVym7ioni+wWKlll6cYBYvuSQ1qgWUUuJEvSwC TG5hHSkg/MMX+55KsXXYssDkRiQ0WSb9w65rIC7wWE4U6W9c/MSl9ONcTfTI4gWx4DUA ib0ZVvAk9UKv0M9CUmmnEGkfhygmB6DVPR3xYXcTqhvETDdQg3CacPBFTZaKbLVQwgpA KaPjf5BdA0RBueAIqlfVDpRV2roOMBTgn1I8rpu2TVlUxVY/mwzgjdQpRH2v7VhFisLS d3WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6jPWSacmRXSzrFwqVw3dXbaZHf/k4wHnQIztxtENWwg=; b=LhwTT7M68P6E/Q/g/cVmjLzoc5TERDAc8699GCQjZSPJaWYWYuhDOpI1GSNADmtZui zEWym7SSQjDKbk0+uQ3nvN8nDk1N++wbu34so5H4szMNFQsO84cjGT9J8+lBl5GVT41H 9jkOKh+Mle0YJMZbkCt9z6V0GwvwBjstinuRf5FcLOHkG5D2xvqc6U2zUaV9DrS8lwpf HqFgyW1BQyD/jgTy38gxxCrMHY7xPHHZG7Xx5jSXcjE2TNnwBHSfvXUV55XweTgZ1SEp ixreghlMorbvUI1uGDBDXBFmi69BjJPhx/1QyJu1iFIWxajl2ps6NYKhMPelt4+DFUfn L1UQ== X-Gm-Message-State: APjAAAU61muu6WquPeVjmegFZIxwFD1cV0h3Rc6wULqnYrKZRSTahTgL HoMPNomRhS74z3XXGm6PP3QXDw+wSVY= X-Google-Smtp-Source: APXvYqycl9mlizCRtINFVwtEelbT6A2JURB5EEVeBh1V46aTHr5GzXPxInBpYhbYCAftKtrecFh2qA== X-Received: by 2002:a1c:f212:: with SMTP id s18mr3060704wmc.49.1568192747469; Wed, 11 Sep 2019 02:05:47 -0700 (PDT) Received: from localhost ([194.105.145.90]) by smtp.gmail.com with ESMTPSA id z189sm3269318wmc.25.2019.09.11.02.05.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 11 Sep 2019 02:05:47 -0700 (PDT) From: Igor Opaniuk To: u-boot@lists.denx.de Date: Wed, 11 Sep 2019 12:05:35 +0300 Message-Id: <20190911090535.21905-6-igor.opaniuk@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190911090535.21905-1-igor.opaniuk@gmail.com> References: <20190911090535.21905-1-igor.opaniuk@gmail.com> Cc: Anti Sullin , Igor Opaniuk , "NXP i.MX U-Boot Team" , Marcel Ziswiler , Max Krummenacher Subject: [U-Boot] [RFC PATCH v1 5/5] imx: nandbcb: add support for writing BCB only 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" From: Igor Opaniuk Add subcommand for add writing BCB only, where we provide appropriate offsets for firmware1 and firmware2 and size. Example of usage: > nandbcb bcbonly 0x00180000 0x00080000 0x00200000 Writing 1024 bytes to 0x0: randomizing OK Writing 1024 bytes to 0x20000: randomizing OK Signed-off-by: Igor Opaniuk --- arch/arm/mach-imx/cmd_nandbcb.c | 92 ++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-imx/cmd_nandbcb.c b/arch/arm/mach-imx/cmd_nandbcb.c index 72d8a5be28..a02edfc582 100644 --- a/arch/arm/mach-imx/cmd_nandbcb.c +++ b/arch/arm/mach-imx/cmd_nandbcb.c @@ -364,6 +364,88 @@ err: return ret; } +static int do_nandbcb_bcbonly(int argc, char * const argv[]) +{ + struct fcb_block *fcb; + struct dbbt_block *dbbt; + u32 fw_len, fw1_off, fw2_off; + struct mtd_info *mtd; + void *dbbt_page, *dbbt_data_page; + int dev, ret; + + dev = nand_curr_device; + if ((dev < 0) || (dev >= CONFIG_SYS_MAX_NAND_DEVICE) || + (!get_nand_dev_by_index(dev))) { + puts("No devices available\n"); + return CMD_RET_FAILURE; + } + + mtd = get_nand_dev_by_index(dev); + + if (argc < 3) + return CMD_RET_FAILURE; + + fw_len = simple_strtoul(argv[1], NULL, 16); + fw1_off = simple_strtoul(argv[2], NULL, 16); + + if (argc > 3) + fw2_off = simple_strtoul(argv[3], NULL, 16); + else + fw2_off = fw1_off; + + /* fill fcb */ + fcb = kzalloc(sizeof(*fcb), GFP_KERNEL); + if (!fcb) { + debug("failed to allocate fcb\n"); + ret = -ENOMEM; + return CMD_RET_FAILURE; + } + + fill_fcb(fcb, mtd, fw1_off / mtd->writesize, + fw2_off / mtd->writesize, fw_len / mtd->writesize); + + /* fill dbbt */ + dbbt_page = kzalloc(mtd->writesize, GFP_KERNEL); + if (!dbbt_page) { + debug("failed to allocate dbbt_page\n"); + ret = -ENOMEM; + goto fcb_err; + } + + dbbt_data_page = kzalloc(mtd->writesize, GFP_KERNEL); + if (!dbbt_data_page) { + debug("failed to allocate dbbt_data_page\n"); + ret = -ENOMEM; + goto dbbt_page_err; + } + + dbbt = dbbt_page; + dbbt->checksum = 0; + dbbt->fingerprint = DBBT_FINGERPRINT2; + dbbt->version = DBBT_VERSION_1; + ret = dbbt_fill_data(mtd, dbbt_data_page, 0); + if (ret < 0) + goto dbbt_data_page_err; + else if (ret > 0) + dbbt->dbbtpages = 1; + + /* write fcb and dbbt to nand */ + ret = write_fcb_dbbt(mtd, fcb, dbbt, dbbt_data_page, 0); +dbbt_data_page_err: + kfree(dbbt_data_page); +dbbt_page_err: + kfree(dbbt_page); +fcb_err: + kfree(fcb); + + if (ret < 0) { + printf("failed to write FCB/DBBT\n"); + return CMD_RET_FAILURE; + } + + return CMD_RET_SUCCESS; +} + static int do_nandbcb_update(int argc, char * const argv[]) { struct mtd_info *mtd; @@ -420,6 +502,11 @@ static int do_nandbcb(cmd_tbl_t *cmdtp, int flag, int argc, goto done; } + if (strcmp(cmd, "bcbonly") == 0) { + ret = do_nandbcb_bcbonly(argc, argv); + goto done; + } + done: if (ret != -1) return ret; @@ -429,7 +516,10 @@ usage: static char nandbcb_help_text[] = "update addr off|partition len - update 'len' bytes starting at\n" - " 'off|part' to memory address 'addr', skipping bad blocks"; + " 'off|part' to memory address 'addr', skipping bad blocks\n" + "bcbonly fw-size fw1-off [fw2-off] - write only BCB (FCB and DBBT)\n" + " where `fw-size` is fw sizes in bytes, `fw1-off` and\n" + " and `fw2-off` - firmware offsets "; U_BOOT_CMD(nandbcb, 5, 1, do_nandbcb, "i.MX6 Nand BCB",