From patchwork Sun Dec 9 18:07:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miquel Raynal X-Patchwork-Id: 1010052 X-Patchwork-Delegate: jagannadh.teki@gmail.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=bootlin.com Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 43CZNR6TN5z9s4s for ; Mon, 10 Dec 2018 05:24:07 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 9594CC22398; Sun, 9 Dec 2018 18:18:38 +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=RCVD_IN_DNSWL_BLOCKED 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 D08C8C2280A; Sun, 9 Dec 2018 18:09:04 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 8D1CDC22398; Sun, 9 Dec 2018 18:09:00 +0000 (UTC) Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by lists.denx.de (Postfix) with ESMTP id 03A81C22376 for ; Sun, 9 Dec 2018 18:08:42 +0000 (UTC) Received: by mail.bootlin.com (Postfix, from userid 110) id 2E7D420CC5; Sun, 9 Dec 2018 19:08:41 +0100 (CET) Received: from localhost.localdomain (unknown [37.171.2.184]) by mail.bootlin.com (Postfix) with ESMTPSA id CD3DF207F0; Sun, 9 Dec 2018 19:08:29 +0100 (CET) From: Miquel Raynal To: Boris Brezillon , Marek Vasut , Jagan Teki , Tom Rini , u-boot@lists.denx.de Date: Sun, 9 Dec 2018 19:07:45 +0100 Message-Id: <20181209180747.24575-24-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209180747.24575-1-miquel.raynal@bootlin.com> References: <20181209180747.24575-1-miquel.raynal@bootlin.com> MIME-Version: 1.0 Cc: Kyungmin Park , Thomas Petazzoni , Miquel Raynal , Steve Rae , TsiChung Liew Subject: [U-Boot] [PATCH v4 23/25] cmd: nand/sf: isolate legacy code 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: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The 'sf' command is not supposed to rely on the MTD stack, but both 'sf' and 'nand' commands use helpers located in mtd_uboot.c. Despite their location, these functions do not depend at all on the MTD stack. This file (drivers/mtd/mtd_uboot.c) is only compiled if CONFIG_MTD is selected, which is inconsistent with the current situation. Solve this by moving these three functions (which are only used by the above two commands) out of mtd_uboot.c and put them in a C file only compiled with cmd/sf.c and cmd/nand.c. Signed-off-by: Miquel Raynal --- cmd/Makefile | 3 ++ cmd/legacy-mtd-utils.c | 99 +++++++++++++++++++++++++++++++++++++++++ cmd/legacy-mtd-utils.h | 14 ++++++ cmd/nand.c | 2 + cmd/sf.c | 2 + drivers/mtd/mtd_uboot.c | 94 -------------------------------------- include/linux/mtd/mtd.h | 6 --- 7 files changed, 120 insertions(+), 100 deletions(-) create mode 100644 cmd/legacy-mtd-utils.c create mode 100644 cmd/legacy-mtd-utils.h diff --git a/cmd/Makefile b/cmd/Makefile index 0534ddc679..d04bc44198 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -94,6 +94,9 @@ obj-$(CONFIG_CMD_MMC_SPI) += mmc_spi.o obj-$(CONFIG_MP) += mp.o obj-$(CONFIG_CMD_MTD) += mtd.o obj-$(CONFIG_CMD_MTDPARTS) += mtdparts.o +ifneq ($(CONFIG_CMD_NAND)$(CONFIG_CMD_SF),) +obj-y += legacy-mtd-utils.o +endif obj-$(CONFIG_CMD_NAND) += nand.o obj-$(CONFIG_CMD_NET) += net.o obj-$(CONFIG_CMD_ONENAND) += onenand.o diff --git a/cmd/legacy-mtd-utils.c b/cmd/legacy-mtd-utils.c new file mode 100644 index 0000000000..1aa3bfc8ec --- /dev/null +++ b/cmd/legacy-mtd-utils.c @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include +#include +#include +#include +#include +#include + +int get_part(const char *partname, int *idx, loff_t *off, loff_t *size, + loff_t *maxsize, int devtype) +{ +#ifdef CONFIG_CMD_MTDPARTS + struct mtd_device *dev; + struct part_info *part; + u8 pnum; + int ret; + + ret = mtdparts_init(); + if (ret) + return ret; + + ret = find_dev_and_part(partname, &dev, &pnum, &part); + if (ret) + return ret; + + if (dev->id->type != devtype) { + printf("not same typ %d != %d\n", dev->id->type, devtype); + return -1; + } + + *off = part->offset; + *size = part->size; + *maxsize = part->size; + *idx = dev->id->num; + + return 0; +#else + puts("mtdparts support missing.\n"); + return -1; +#endif +} + +int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size, + loff_t *maxsize, int devtype, uint64_t chipsize) +{ + if (!str2off(arg, off)) + return get_part(arg, idx, off, size, maxsize, devtype); + + if (*off >= chipsize) { + puts("Offset exceeds device limit\n"); + return -1; + } + + *maxsize = chipsize - *off; + *size = *maxsize; + return 0; +} + +int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off, + loff_t *size, loff_t *maxsize, int devtype, + uint64_t chipsize) +{ + int ret; + + if (argc == 0) { + *off = 0; + *size = chipsize; + *maxsize = *size; + goto print; + } + + ret = mtd_arg_off(argv[0], idx, off, size, maxsize, devtype, + chipsize); + if (ret) + return ret; + + if (argc == 1) + goto print; + + if (!str2off(argv[1], size)) { + printf("'%s' is not a number\n", argv[1]); + return -1; + } + + if (*size > *maxsize) { + puts("Size exceeds partition or device limit\n"); + return -1; + } + +print: + printf("device %d ", *idx); + if (*size == chipsize) + puts("whole chip\n"); + else + printf("offset 0x%llx, size 0x%llx\n", + (unsigned long long)*off, (unsigned long long)*size); + return 0; +} diff --git a/cmd/legacy-mtd-utils.h b/cmd/legacy-mtd-utils.h new file mode 100644 index 0000000000..b31342bcb7 --- /dev/null +++ b/cmd/legacy-mtd-utils.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __LEGACY_MTD_UTILS_H +#define __LEGACY_MTD_UTILS_H + +int get_part(const char *partname, int *idx, loff_t *off, loff_t *size, + loff_t *maxsize, int devtype); +int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size, + loff_t *maxsize, int devtype, uint64_t chipsize); +int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off, + loff_t *size, loff_t *maxsize, int devtype, + uint64_t chipsize); + +#endif /* LEGACY_MTD_UTILS_H */ diff --git a/cmd/nand.c b/cmd/nand.c index a22945d144..018c8a7758 100644 --- a/cmd/nand.c +++ b/cmd/nand.c @@ -29,6 +29,8 @@ #include #include +#include "legacy-mtd-utils.h" + #if defined(CONFIG_CMD_MTDPARTS) /* partition handling routines */ diff --git a/cmd/sf.c b/cmd/sf.c index 84bb0575f2..3fe906fa3b 100644 --- a/cmd/sf.c +++ b/cmd/sf.c @@ -18,6 +18,8 @@ #include #include +#include "legacy-mtd-utils.h" + static struct spi_flash *flash; /* diff --git a/drivers/mtd/mtd_uboot.c b/drivers/mtd/mtd_uboot.c index cce162461b..6123752a65 100644 --- a/drivers/mtd/mtd_uboot.c +++ b/drivers/mtd/mtd_uboot.c @@ -6,7 +6,6 @@ #include #include #include -#include /* LEGACY */ #include #include #include @@ -291,96 +290,3 @@ int mtd_probe_devices(void) return 0; } #endif /* defined(CONFIG_MTD_PARTITIONS) */ - -/* Legacy */ - -static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size, - loff_t *maxsize, int devtype) -{ -#ifdef CONFIG_CMD_MTDPARTS - struct mtd_device *dev; - struct part_info *part; - u8 pnum; - int ret; - - ret = mtdparts_init(); - if (ret) - return ret; - - ret = find_dev_and_part(partname, &dev, &pnum, &part); - if (ret) - return ret; - - if (dev->id->type != devtype) { - printf("not same typ %d != %d\n", dev->id->type, devtype); - return -1; - } - - *off = part->offset; - *size = part->size; - *maxsize = part->size; - *idx = dev->id->num; - - return 0; -#else - puts("mtdparts support missing.\n"); - return -1; -#endif -} - -int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size, - loff_t *maxsize, int devtype, uint64_t chipsize) -{ - if (!str2off(arg, off)) - return get_part(arg, idx, off, size, maxsize, devtype); - - if (*off >= chipsize) { - puts("Offset exceeds device limit\n"); - return -1; - } - - *maxsize = chipsize - *off; - *size = *maxsize; - return 0; -} - -int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off, - loff_t *size, loff_t *maxsize, int devtype, - uint64_t chipsize) -{ - int ret; - - if (argc == 0) { - *off = 0; - *size = chipsize; - *maxsize = *size; - goto print; - } - - ret = mtd_arg_off(argv[0], idx, off, size, maxsize, devtype, - chipsize); - if (ret) - return ret; - - if (argc == 1) - goto print; - - if (!str2off(argv[1], size)) { - printf("'%s' is not a number\n", argv[1]); - return -1; - } - - if (*size > *maxsize) { - puts("Size exceeds partition or device limit\n"); - return -1; - } - -print: - printf("device %d ", *idx); - if (*size == chipsize) - puts("whole chip\n"); - else - printf("offset 0x%llx, size 0x%llx\n", - (unsigned long long)*off, (unsigned long long)*size); - return 0; -} diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 68e5915324..e844ce4cb6 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h @@ -571,12 +571,6 @@ struct mtd_info *__mtd_next_device(int i); (mtd) != NULL; \ (mtd) = __mtd_next_device(mtd->index + 1)) -int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size, - loff_t *maxsize, int devtype, uint64_t chipsize); -int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off, - loff_t *size, loff_t *maxsize, int devtype, - uint64_t chipsize); - /* drivers/mtd/mtdcore.c */ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset, const uint64_t length, uint64_t *len_incl_bad,