summaryrefslogtreecommitdiff
path: root/drivers/mtd/mtdcore.c
diff options
context:
space:
mode:
authorBrian Norris <computersforpeace@gmail.com>2015-10-11 23:03:47 +0300
committerBrian Norris <computersforpeace@gmail.com>2015-10-27 04:43:48 +0300
commit5a2415b0769233194f20d3906c3ffc6a2033317c (patch)
tree355fb4bd34fa3b04832e80c7b7f3250d4f65dac5 /drivers/mtd/mtdcore.c
parent04850c4d8613127a9b488321c0ad83bff7519311 (diff)
downloadlinux-5a2415b0769233194f20d3906c3ffc6a2033317c.tar.xz
mtd: mtdpart: Do not fail mtd probe when parsing partitions fails
Due to wrong assumption in ofpart ofpart fails on Exynos on SPI chips with no partitions because the subnode containing controller data confuses the ofpart parser. Thus compiling in ofpart support automatically fails probing any SPI NOR flash without partitions on Exynos. Compiling in a partitioning scheme should not cause probe of otherwise valid device to fail. Instead, let's do the following: * try parsers until one succeeds * if no parser succeeds, report the first error we saw * even in the failure case, allow MTD to probe, with fallback partitions or no partitions at all -- the master device will still be registered Issue report and comments initially by Michal Suchanek. Reported-by: Michal Suchanek <hramrach@gmail.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Diffstat (limited to 'drivers/mtd/mtdcore.c')
-rw-r--r--drivers/mtd/mtdcore.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index 41dc501cb49a..b1eea48c501d 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -598,8 +598,10 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
}
/* Didn't come up with either parsed OR fallback partitions */
if (ret < 0) {
- pr_info("mtd: failed to find partitions\n");
- goto out;
+ pr_info("mtd: failed to find partitions; one or more parsers reports errors (%d)\n",
+ ret);
+ /* Don't abort on errors; we can still use unpartitioned MTD */
+ ret = 0;
}
ret = mtd_add_device_partitions(mtd, real_parts, ret);