From 5ffcd50612f6e716ea9479bea0edfdc89f7a0f0b Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 13 Nov 2018 12:43:09 +0100 Subject: [PATCH 1/5] mtd: Use default mtdparts/mtids when not defined in the environment U-boot provides a mean to define default values for mtdids and mtdparts when they're not defined in the environment. Patch mtd_probe_devices() to use those default values when env_get("mtdparts") or env_get("mtdids") return NULL. This implementation is based on the logic found in cmd/mtdparts.c. Fixes: 5db66b3aee6f ("cmd: mtd: add 'mtd' command") Reported-by: Stefan Roese Signed-off-by: Boris Brezillon Tested-by: Stefan Roese Reviewed-by: Lukasz Majewski Reviewed-by: Jagan Teki --- drivers/mtd/mtd_uboot.c | 62 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/mtd_uboot.c b/drivers/mtd/mtd_uboot.c index 7d7a11c990..5ca560c968 100644 --- a/drivers/mtd/mtd_uboot.c +++ b/drivers/mtd/mtd_uboot.c @@ -92,12 +92,70 @@ static void mtd_probe_uclass_mtd_devs(void) { } #endif #if defined(CONFIG_MTD_PARTITIONS) +extern void board_mtdparts_default(const char **mtdids, + const char **mtdparts); + +static const char *get_mtdids(void) +{ + __maybe_unused const char *mtdparts = NULL; + const char *mtdids = env_get("mtdids"); + + if (mtdids) + return mtdids; + +#if defined(CONFIG_SYS_MTDPARTS_RUNTIME) + board_mtdparts_default(&mtdids, &mtdparts); +#elif defined(MTDIDS_DEFAULT) + mtdids = MTDIDS_DEFAULT; +#elif defined(CONFIG_MTDIDS_DEFAULT) + mtdids = CONFIG_MTDIDS_DEFAULT; +#endif + + if (mtdids) + env_set("mtdids", mtdids); + + return mtdids; +} + +#define MTDPARTS_MAXLEN 512 + +static const char *get_mtdparts(void) +{ + __maybe_unused const char *mtdids = NULL; + static char tmp_parts[MTDPARTS_MAXLEN]; + static bool use_defaults = true; + const char *mtdparts = NULL; + + if (gd->flags & GD_FLG_ENV_READY) + mtdparts = env_get("mtdparts"); + else if (env_get_f("mtdparts", tmp_parts, sizeof(tmp_parts)) != -1) + mtdparts = tmp_parts; + + if (mtdparts || !use_defaults) + return mtdparts; + +#if defined(CONFIG_SYS_MTDPARTS_RUNTIME) + board_mtdparts_default(&mtdids, &mtdparts); +#elif defined(MTDPARTS_DEFAULT) + mtdparts = MTDPARTS_DEFAULT; +#elif defined(CONFIG_MTDPARTS_DEFAULT) + mtdparts = CONFIG_MTDPARTS_DEFAULT; +#endif + + if (mtdparts) + env_set("mtdparts", mtdparts); + + use_defaults = false; + + return mtdparts; +} + int mtd_probe_devices(void) { static char *old_mtdparts; static char *old_mtdids; - const char *mtdparts = env_get("mtdparts"); - const char *mtdids = env_get("mtdids"); + const char *mtdparts = get_mtdparts(); + const char *mtdids = get_mtdids(); bool remaining_partitions = true; struct mtd_info *mtd; From 96c2961ba68e0baf463998301a09eddf76f462e6 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 13 Nov 2018 12:43:10 +0100 Subject: [PATCH 2/5] dfu: nand: Add missing dependency on CMD_MTDPARTS dfu_fill_entity_nand() uses find_dev_and_part() and mtdparts_init() which are provided by cmd/mtdparts.c. Add the dependency to avoid build failures when CMD_MTDPARTS is not selected. Reported-by: Jagan Teki Fixes: 6828e602b722d ("dfu: Migrate to Kconfig") Signed-off-by: Boris Brezillon Reviewed-by: Lukasz Majewski Reviewed-by: Jagan Teki --- drivers/dfu/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/dfu/Kconfig b/drivers/dfu/Kconfig index 51ab484c2a..4692736c9d 100644 --- a/drivers/dfu/Kconfig +++ b/drivers/dfu/Kconfig @@ -30,6 +30,7 @@ config DFU_MMC config DFU_NAND bool "NAND back end for DFU" + depends on CMD_MTDPARTS help This option enables using DFU to read and write to NAND based storage. From 03303fb715ca5295b6e49c8c4865d9b50c72f36c Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 13 Nov 2018 12:43:11 +0100 Subject: [PATCH 3/5] mtd: Make {MTDIDS, MTDPARTS}_DEFAULT visible when MTD_PARTITIONS is selected gwventana configs are relying on CMD_UBI to select CMD_MTDPARTS, which is then making {MTDIDS,MTDPARTS}_DEFAULT options available. We are about to remove the 'select CMD_MTDPARTS' statement in the CMD_UBI entry, but if we do that without first making sure {MTDIDS,MTDPARTS}_DEFAULT are visible, we end up with a build failure when building gwventana configs. Address that by adding a depends on MTD_PARTITIONS to {MTDIDS,MTDPARTS}_DEFAULT which does the trick since CMD_UBI selects MTD_UBI which in turn selects MTD_PARTITIONS. We also get rid of the depends on CMD_MTD, since CMD_MTD also selects MTD_PARTITIONS. Reported-by: Jagan Teki Signed-off-by: Boris Brezillon Reviewed-by: Lukasz Majewski Reviewed-by: Jagan Teki --- cmd/Kconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/Kconfig b/cmd/Kconfig index d66f710ad0..9310a8bdb2 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1728,14 +1728,14 @@ config CMD_MTDPARTS config MTDIDS_DEFAULT string "Default MTD IDs" - depends on CMD_MTD || CMD_MTDPARTS || CMD_NAND || CMD_FLASH + depends on MTD_PARTITIONS || CMD_MTDPARTS || CMD_NAND || CMD_FLASH help Defines a default MTD IDs list for use with MTD partitions in the Linux MTD command line partitions format. config MTDPARTS_DEFAULT string "Default MTD partition scheme" - depends on CMD_MTD || CMD_MTDPARTS || CMD_NAND || CMD_FLASH + depends on MTD_PARTITIONS || CMD_MTDPARTS || CMD_NAND || CMD_FLASH help Defines a default MTD partitioning scheme in the Linux MTD command line partitions format From 86dfa556d92720ca7016121787d04f13a1a0e440 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 13 Nov 2018 12:43:12 +0100 Subject: [PATCH 4/5] cmd: ubi: Remove useless call to mtdparts_init() Commit c58fb2cdb3e4 ("cmd: ubi: clean the partition handling") introduced a call to mtd_probe_devices() in the ubi_attach() path and this function takes care of parsing mtdparts/mtdids and creating/registering the associated mtd partitions. The mtdparts_init() call in the ubi_detach() path is not only unnecessary but can sometimes print error messages even when things work properly (that's the case with SPI NAND devices that have not been probed with 'mtd list'), which is misleading. Remove this call to mtdparts_init() and drop the dependency on CMD_MTDPARTS. Fixes: c58fb2cdb3e4 ("cmd: ubi: clean the partition handling") Reported-by: Stefan Roese Signed-off-by: Boris Brezillon Tested-by: Stefan Roese Reviewed-by: Lukasz Majewski Reviewed-by: Jagan Teki --- cmd/Kconfig | 1 - cmd/ubi.c | 5 ----- 2 files changed, 6 deletions(-) diff --git a/cmd/Kconfig b/cmd/Kconfig index 9310a8bdb2..ad14c9ce71 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1856,7 +1856,6 @@ endmenu config CMD_UBI tristate "Enable UBI - Unsorted block images commands" - select CMD_MTDPARTS select CRC32 select MTD_UBI help diff --git a/cmd/ubi.c b/cmd/ubi.c index 767a4a4536..2b74a98144 100644 --- a/cmd/ubi.c +++ b/cmd/ubi.c @@ -417,11 +417,6 @@ static int ubi_dev_scan(struct mtd_info *info, const char *vid_header_offset) int ubi_detach(void) { - if (mtdparts_init() != 0) { - printf("Error initializing mtdparts!\n"); - return 1; - } - #ifdef CONFIG_CMD_UBIFS /* * Automatically unmount UBIFS partition when user From 1f758b793649a18b76252bf507312465310637ad Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 13 Nov 2018 12:43:13 +0100 Subject: [PATCH 5/5] mtd: Drop duplicate MTD_PARTITIONS Kconfig option Commit 9c5b00973bce ("Convert CONFIG_MTD_PARTITIONS et al to Kconfig") introduced a publicly visible Kconfig entry for the CONFIG_MTD_PARTITIONS option, while the rework on MTD partitioning was in progress, and we somehow did not notice that the same Kconfig entry was added by commit 4048a5c519a8 ("mtd: declare MTD_PARTITIONS symbol in Kconfig"), but this time as an invisible entry (this can only be selected by other options). Keep the non-visible version of this symbol, since MTD_PARTITIONS is not something the user should be able to enable/disable directly. Fixes: 4048a5c519a8 ("mtd: declare MTD_PARTITIONS symbol in Kconfig") Signed-off-by: Boris Brezillon Reviewed-by: Lukasz Majewski Reviewed-by: Jagan Teki --- drivers/mtd/Kconfig | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig index 11cf12bb55..0050fb2b9b 100644 --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig @@ -22,12 +22,6 @@ config MTD_DEVICE Adds the MTD device infrastructure from the Linux kernel. Needed for mtdparts command support. -config MTD_PARTITIONS - bool "Add MTD Partioning infrastructure" - help - Adds the MTD partitioning infrastructure from the Linux - kernel. Needed for UBI support. - config FLASH_CFI_DRIVER bool "Enable CFI Flash driver" help