Skip to contentSkip to conversation

mtd: Use default mtdparts/mtids when not defined in the environment

PATCH Superseded Boris Brezillon 5 participants 18 messages Nov 12, 2018 – Nov 13, 2018 Memory technology devices (MTD)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 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")

---
Changes in v2:
- none

---
 drivers/mtd/mtd_uboot.c | 62 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 60 insertions(+), 2 deletions(-)
drivers/mtd/mtd_uboot.c +60 -2
index 7d7a11c990d6..1d0a505754f2 100644
@@ -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;
 
Signature · 1 line
2.17.1
#1 lore raw

PATCH v2 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.

Fixes 6828e602b722d ("dfu: Migrate to Kconfig")

---
Changes in v2:
- Moved ealier in the series to avoid introducing a build failure

---
 drivers/dfu/Kconfig | 1 +
 1 file changed, 1 insertion(+)
drivers/dfu/Kconfig +1 -0
index 51ab484c2a49..4692736c9d24 100644
@@ -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.
Signature · 1 line
2.17.1
#2 lore raw

PATCH v2 2/5 dfu: nand: Add missing dependency on CMD_MTDPARTS

Hi Boris,

Quoted 27 lines

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.

Fixes 6828e602b722d ("dfu: Migrate to Kconfig")

---
Changes in v2:
- Moved ealier in the series to avoid introducing a build failure

---
 drivers/dfu/Kconfig | 1 +
 1 file changed, 1 insertion(+)
drivers/dfu/Kconfig +1 -0
index 51ab484c2a49..4692736c9d24 100644
@@ -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
Quoted 1 line

based storage.

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de -------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181112/b4066807/attachment.sig>

#3 lore raw

PATCH v2 3/5 mtd: Make {MTDIDS, MTDPARTS}_DEFAULT visible when MTD_PARTITIONS is selected

In reply to Boris Brezillon

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.

---
Changes in v2:
- Moved ealier in the series to avoid introducing a build failure

---
 cmd/Kconfig | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
cmd/Kconfig +2 -2
index d66f710ad0f8..9310a8bdb2b7 100644
@@ -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
Signature · 1 line
2.17.1
#4 lore raw

PATCH v2 3/5 mtd: Make {MTDIDS, MTDPARTS}_DEFAULT visible when MTD_PARTITIONS is selected

Quoted 42 lines · On Mon, 12 Nov 2018 09:28:07 +0100 Boris Brezillon…

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.

---
Changes in v2:
- Moved ealier in the series to avoid introducing a build failure

---
 cmd/Kconfig | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
cmd/Kconfig +1 -1
index d66f710ad0f8..9310a8bdb2b7 100644
@@ -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

cmd/Kconfig +1 -1
 	string "Default MTD partition scheme"
-	depends on CMD_MTD || CMD_MTDPARTS || CMD_NAND || CMD_FLASH
+	depends on MTD_PARTITIONS || CMD_MTDPARTS || CMD_NAND ||
Quoted 3 lines

CMD_FLASH help
Defines a default MTD partitioning scheme in the Linux MTD
command line partitions format

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de -------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181112/1dcad793/attachment.sig>

#5 lore raw

PATCH v2 4/5 cmd: ubi: Remove useless call to mtdparts_init()

In reply to Boris Brezillon

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")

---
Changes in v2:
- Moved after the patches reworking the Kconfig deps

---
 cmd/Kconfig | 1 -
 cmd/ubi.c   | 5 -----
 2 files changed, 6 deletions(-)
cmd/Kconfig +0 -1
index 9310a8bdb2b7..ad14c9ce7124 100644
@@ -1856,7 +1856,6 @@ endmenu
 
 config CMD_UBI
 	tristate "Enable UBI - Unsorted block images commands"
-	select CMD_MTDPARTS
 	select CRC32
 	select MTD_UBI
 	help
cmd/ubi.c +0 -5
index 767a4a453640..2b74a9814463 100644
@@ -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
Signature · 1 line
2.17.1
#6 lore raw

PATCH v2 4/5 cmd: ubi: Remove useless call to mtdparts_init()

Quoted 43 lines · On Mon, 12 Nov 2018 09:28:08 +0100 Boris Brezillon…

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")

---
Changes in v2:
- Moved after the patches reworking the Kconfig deps

---
 cmd/Kconfig | 1 -
 cmd/ubi.c   | 5 -----
 2 files changed, 6 deletions(-)
cmd/Kconfig +0 -1
index 9310a8bdb2b7..ad14c9ce7124 100644
@@ -1856,7 +1856,6 @@ endmenu
 
 config CMD_UBI
 	tristate "Enable UBI - Unsorted block images commands"
-	select CMD_MTDPARTS
 	select CRC32
 	select MTD_UBI
 	help
cmd/ubi.c +0 -0
index 767a4a453640..2b74a9814463 100644
@@ -417,11 +417,6 @@ static int ubi_dev_scan(struct mtd_info *info,
 const char *vid_header_offset) 

cmd/ubi.c static int ubi_dev_scan(struct mtd_info *info, · line 422

Quoted 10 lines
cmd/ubi.c +0 -5
 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

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de -------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181112/6993aa82/attachment.sig>

#7 lore raw

PATCH v2 5/5 mtd: Drop duplicate MTD_PARTITIONS Kconfig option

In reply to Boris Brezillon

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")

---
Changes in v2:
- Moved after the patches reworking the Kconfig deps

---
 drivers/mtd/Kconfig | 6 ------
 1 file changed, 6 deletions(-)
drivers/mtd/Kconfig +0 -6
index 11cf12bb5599..0050fb2b9bf1 100644
@@ -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
Signature · 1 line
2.17.1
#8 lore raw

PATCH v2 5/5 mtd: Drop duplicate MTD_PARTITIONS Kconfig option

Quoted 27 lines · On Mon, 12 Nov 2018 09:28:09 +0100 Boris Brezillon…

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")

---
Changes in v2:
- Moved after the patches reworking the Kconfig deps

---
 drivers/mtd/Kconfig | 6 ------
 1 file changed, 6 deletions(-)
drivers/mtd/Kconfig +0 -0
index 11cf12bb5599..0050fb2b9bf1 100644
@@ -22,12 +22,6 @@ config MTD_DEVICE
 	  Adds the MTD device infrastructure from the Linux kernel.
 	  Needed for mtdparts command support.

drivers/mtd/Kconfig config MTD_DEVICE · line 27

Quoted 10 lines
drivers/mtd/Kconfig +0 -6
 
-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

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de -------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181112/f6238be3/attachment.sig>

maintainer
#9 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

In reply to Boris Brezillon

Hi Boris, Tom,

Boris Brezillon <[email protected]> wrote on Mon, 12 Nov 2018 09:28:05 +0100:

Quoted 5 lines

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.

Quoted 7 lines

This implementation is based on the logic found in cmd/mtdparts.c.

Fixes 5db66b3aee6f ("cmd: mtd: add 'mtd' command")

---

For the whole series:

This should be (if possible) in 2018.11, otherwise the release will be buggy with certain configurations. Maybe we should sometimes send PR directly to Tom as MTD is orphaned to avoid latencies between developers/maintainers and reach mainline quickly (at least for the fixes)?

Thanks,
Miquèl

#10 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

Quoted 21 lines · Miquel Raynal

Hi Boris, Tom,

Boris Brezillon <[email protected]> wrote on Mon, 12 Nov 2018 09:28:05 +0100:

Quoted 5 lines

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.

Quoted 7 lines

This implementation is based on the logic found in cmd/mtdparts.c.

Fixes 5db66b3aee6f ("cmd: mtd: add 'mtd' command")

---

For the whole series:

Quoted 7 lines

This should be (if possible) in 2018.11, otherwise the release will be buggy with certain configurations. Maybe we should sometimes send PR directly to Tom as MTD is orphaned to avoid latencies between developers/maintainers and reach mainline quickly (at least for the fixes)?

ie one of the reason I requesting travis-ci build before sending the generic changes.

maintainer
#11 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

Hi Jagan,

Jagan Teki <[email protected]> wrote on Mon, 12 Nov 2018 15:39:20 +0530:

Quoted 24 lines · Miquel Raynal
Quoted 23 lines

Hi Boris, Tom,

Boris Brezillon <[email protected]> wrote on Mon, 12 Nov 2018 09:28:05 +0100:

Quoted 5 lines

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.

Quoted 7 lines

This implementation is based on the logic found in cmd/mtdparts.c.

Fixes 5db66b3aee6f ("cmd: mtd: add 'mtd' command")

---

For the whole series:

Quoted 8 lines
Quoted 5 lines

This should be (if possible) in 2018.11, otherwise the release will be buggy with certain configurations. Maybe we should sometimes send PR directly to Tom as MTD is orphaned to avoid latencies between developers/maintainers and reach mainline quickly (at least for the fixes)?

ie one of the reason I requesting travis-ci build before sending the generic changes.

Yes, we should have run a CI test first. I am not complaining at all about the time between having the series posted and you testing it. I understand this delay and really, I can't blame you for that. I'm just saying that this is the second time we (almost?) miss a release because of the additional delays between us, which are, IMHO, not really needed while there is no actual code review as long as we do run Travis.

Thanks,
Miquèl

#12 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

In reply to Boris Brezillon
Quoted 8 lines · Boris Brezillon

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.

Quoted 7 lines
Fixes 5db66b3aee6f ("cmd: mtd: add 'mtd' command")

---
Changes in v2:
- none

Trigger travis-ci [1], will send v2 PR once all built fine.

[1] https://travis-ci.org/openedev/u-boot-amarula/builds

#13 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

Quoted 18 lines · On Mon, 12 Nov 2018 15:55:18 +0530 Jagan Teki <[email protected]>…
Quoted 8 lines · Boris Brezillon

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.

Quoted 7 lines
Fixes 5db66b3aee6f ("cmd: mtd: add 'mtd' command")

---
Changes in v2:
- none

Quoted 3 lines

Trigger travis-ci [1], will send v2 PR once all built fine.

[1] https://travis-ci.org/openedev/u-boot-amarula/builds

Looks like mine is all green [1] ;-). And yes, now I have travis-ci set up to track my u-boot repo, so hopefully I won't end up submitting patches that regress the tests described in .travis.yaml in the future. Still, I'd like to insist on that this test result shouldn't replace human review, which I think is still valuable to spot subtle issues.

Also, I'd like to point that some of the failures caused by the spi-nand patchset are actually coming from the weird way MTD related config options are selected/defined in u-boot. This should probably be simplified somehow, but that's a different story.

[1]https://travis-ci.org/bbrezillon/u-boot

#14 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

In reply to Boris Brezillon

Hi Boris,

Quoted 87 lines

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")

---
Changes in v2:
- none

---
 drivers/mtd/mtd_uboot.c | 62

+++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-)

drivers/mtd/mtd_uboot.c +58 -0
index 7d7a11c990d6..1d0a505754f2 100644
@@ -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;
+}
+

drivers/mtd/mtd_uboot.c static void mtd_probe_uclass_mtd_devs(void) { } · line 161

Quoted 10 lines
drivers/mtd/mtd_uboot.c +2 -2
 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;

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de -------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181112/ef5f2d89/attachment.sig>

#15 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

In reply to Boris Brezillon
Quoted 53 lines · Boris Brezillon

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")

---
Changes in v2:
- none

---
 drivers/mtd/mtd_uboot.c | 62 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 60 insertions(+), 2 deletions(-)
drivers/mtd/mtd_uboot.c +27 -0
index 7d7a11c990d6..1d0a505754f2 100644
@@ -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
+

drivers/mtd/mtd_uboot.c static void mtd_probe_uclass_mtd_devs(void) { } · line 131

Quoted 10 lines
drivers/mtd/mtd_uboot.c +10 -0
+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))

sizeof(tmp_parts) != -1 is always true, the parenthesis are misplaced.

Also, include/common.h says that
* env_get_f() - Look up the value of an environment variable (early)
...
* @return value of variable, or NULL if not found

So the -1 is likely wrong too ?

Signature · 2 lines
Best regards,
Marek Vasut
#16 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

Quoted 66 lines · On Tue, 13 Nov 2018 12:01:06 +0100 Marek Vasut <[email protected]> wrote:
Quoted 53 lines · Boris Brezillon

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")

---
Changes in v2:
- none

---
 drivers/mtd/mtd_uboot.c | 62 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 60 insertions(+), 2 deletions(-)
drivers/mtd/mtd_uboot.c +27 -0
index 7d7a11c990d6..1d0a505754f2 100644
@@ -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
+

drivers/mtd/mtd_uboot.c static void mtd_probe_uclass_mtd_devs(void) { } · line 131

Quoted 10 lines
drivers/mtd/mtd_uboot.c +10 -0
+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))  

sizeof(tmp_parts) != -1 is always true, the parenthesis are misplaced.

Quoted 4 lines

Also, include/common.h says that
* env_get_f() - Look up the value of an environment variable (early)
...
* @return value of variable, or NULL if not found

That's clearly not matching the implementation [1].

[1]https://elixir.bootlin.com/u-boot/v2018.11-rc3/source/cmd/nvedit.c#L680

#17 lore raw

PATCH v2 1/5 mtd: Use default mtdparts/mtids when not defined in the environment

Quoted 69 lines · Boris Brezillon
Quoted 66 lines · On Tue, 13 Nov 2018 12:01:06 +0100 Marek Vasut <[email protected]> wrote:
Quoted 53 lines · Boris Brezillon

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")

---
Changes in v2:
- none

---
 drivers/mtd/mtd_uboot.c | 62 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 60 insertions(+), 2 deletions(-)
drivers/mtd/mtd_uboot.c +27 -0
index 7d7a11c990d6..1d0a505754f2 100644
@@ -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
+

drivers/mtd/mtd_uboot.c static void mtd_probe_uclass_mtd_devs(void) { } · line 131

Quoted 10 lines
drivers/mtd/mtd_uboot.c +10 -0
+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))  

sizeof(tmp_parts) != -1 is always true, the parenthesis are misplaced.

Quoted 8 lines
Quoted 4 lines

Also, include/common.h says that
* env_get_f() - Look up the value of an environment variable (early)
...
* @return value of variable, or NULL if not found

That's clearly not matching the implementation [1].

[1]https://elixir.bootlin.com/u-boot/v2018.11-rc3/source/cmd/nvedit.c#L680

Another thing to fix ...

Signature · 2 lines
Best regards,
Marek Vasut