From 54bea204e298daea8ea545c03f278fe3e778198c Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 9 Apr 2014 11:51:18 +0200 Subject: environment: drop envfs_register_partition The purpose of envfs_register_partition is to print an error message when the partition does not exist. Print an error message from generic code instead and drop this function. Signed-off-by: Sascha Hauer --- include/envfs.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'include') diff --git a/include/envfs.h b/include/envfs.h index ae98808ede..9b86398984 100644 --- a/include/envfs.h +++ b/include/envfs.h @@ -110,8 +110,6 @@ static inline char *default_environment_path_get(void) } #endif -int envfs_register_partition(const char *devname, unsigned int partnr); - #ifdef CONFIG_DEFAULT_ENVIRONMENT void defaultenv_append(void *buf, unsigned int size, const char *name); int defaultenv_load(const char *dir, unsigned flags); -- cgit v1.2.3 From 33d4f7cb3da852420693e2a4f3782fb9a09a3861 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 9 Apr 2014 15:59:07 +0200 Subject: mtd: refactor bb device creation This refactors the code so that we get a mtd_add_bb which can be used to create a bb dev on a mtd_info. Signed-off-by: Sascha Hauer --- drivers/mtd/nand/nand-bb.c | 53 +++++++++++++++++++++++++++------------------- include/nand.h | 6 ++++++ 2 files changed, 37 insertions(+), 22 deletions(-) (limited to 'include') diff --git a/drivers/mtd/nand/nand-bb.c b/drivers/mtd/nand/nand-bb.c index 06b5824212..0d3de41b0a 100644 --- a/drivers/mtd/nand/nand-bb.c +++ b/drivers/mtd/nand/nand-bb.c @@ -29,6 +29,7 @@ #include #include #include +#include struct nand_bb { char *name; @@ -240,32 +241,18 @@ static struct file_operations nand_bb_ops = { static LIST_HEAD(bb_list); -/** - * Add a bad block aware device ontop of another (NAND) device - * @param[in] dev The device to add a partition on - * @param[in] name Partition name (can be obtained with devinfo command) - * @return The device representing the new partition. - */ -int dev_add_bb_dev(const char *path, const char *name) +struct cdev *mtd_add_bb(struct mtd_info *mtd, const char *name) { struct nand_bb *bb; - struct cdev *parent; - int ret = -ENOMEM; - - parent = cdev_by_name(path); - if (!parent) - return -ENODEV; - - if (!parent->mtd) - return -EINVAL; + int ret; bb = xzalloc(sizeof(*bb)); - bb->mtd = parent->mtd; + bb->mtd = mtd; if (name) bb->cdev.name = xstrdup(name); else - bb->cdev.name = asprintf("%s.bb", path);; + bb->cdev.name = asprintf("%s.bb", mtd->cdev.name); nand_bb_calc_size(bb); bb->cdev.ops = &nand_bb_ops; @@ -273,15 +260,37 @@ int dev_add_bb_dev(const char *path, const char *name) ret = devfs_create(&bb->cdev); if (ret) - goto out4; + goto err; list_add_tail(&bb->list, &bb_list); - return 0; + return &bb->cdev; -out4: +err: free(bb); - return ret; + return ERR_PTR(ret); +} + +/** + * Add a bad block aware device ontop of another (NAND) device + * @param[in] dev The device to add a partition on + * @param[in] name Partition name (can be obtained with devinfo command) + * @return The device representing the new partition. + */ +int dev_add_bb_dev(const char *path, const char *name) +{ + struct cdev *parent, *cdev; + + parent = cdev_by_name(path); + if (!parent) + return -ENODEV; + + if (!parent->mtd) + return -EINVAL; + + cdev = mtd_add_bb(parent->mtd, name); + + return PTR_ERR(cdev); } int dev_remove_bb_dev(const char *name) diff --git a/include/nand.h b/include/nand.h index a0e77cc8cd..1da35d0ce8 100644 --- a/include/nand.h +++ b/include/nand.h @@ -7,6 +7,7 @@ struct nand_bb; #ifdef CONFIG_NAND int dev_add_bb_dev(const char *filename, const char *name); int dev_remove_bb_dev(const char *name); +struct cdev *mtd_add_bb(struct mtd_info *mtd, const char *name); #else static inline int dev_add_bb_dev(const char *filename, const char *name) { return 0; @@ -15,6 +16,11 @@ static inline int dev_remove_bb_dev(const char *name) { return 0; } + +static inline struct cdev *mtd_add_bb(struct mtd_info *mtd, const char *name) +{ + return NULL; +} #endif #endif /* __NAND_H__ */ -- cgit v1.2.3 From 1a8800458bd12febff981fadc86b2cdf0abaf827 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 9 Apr 2014 16:03:52 +0200 Subject: mtd: nand: create bb devices automatically When a mtd device can have bad blocks we want to create a bb device, so do this automatically. This allows us to drop bb device creation from the environment. Signed-off-by: Sascha Hauer --- arch/arm/boards/a9m2410/env/bin/hush_hack | 1 - arch/arm/boards/a9m2410/env/bin/init | 4 ---- arch/arm/boards/a9m2440/env/bin/hush_hack | 1 - arch/arm/boards/a9m2440/env/bin/init | 4 ---- arch/arm/boards/eukrea_cpuimx27/env/bin/hush_hack | 1 - arch/arm/boards/eukrea_cpuimx27/env/bin/init | 4 ---- arch/arm/boards/freescale-mx25-3ds/env/bin/hush_hack | 1 - arch/arm/boards/freescale-mx25-3ds/env/bin/init | 4 ---- arch/arm/boards/mmccpu/env/bin/hush_hack | 1 - arch/arm/boards/mmccpu/env/bin/init | 4 ---- arch/arm/boards/pm9263/env/bin/hush_hack | 1 - arch/arm/boards/pm9263/env/bin/init | 4 ---- defaultenv/defaultenv-1/bin/init | 1 - defaultenv/defaultenv-2-base/bin/mtdparts-add | 4 ---- drivers/mtd/core.c | 3 +++ drivers/of/partition.c | 3 --- include/linux/mtd/mtd.h | 2 ++ 17 files changed, 5 insertions(+), 38 deletions(-) delete mode 100644 arch/arm/boards/a9m2410/env/bin/hush_hack delete mode 100644 arch/arm/boards/a9m2440/env/bin/hush_hack delete mode 100644 arch/arm/boards/eukrea_cpuimx27/env/bin/hush_hack delete mode 100644 arch/arm/boards/freescale-mx25-3ds/env/bin/hush_hack delete mode 100644 arch/arm/boards/mmccpu/env/bin/hush_hack delete mode 100644 arch/arm/boards/pm9263/env/bin/hush_hack (limited to 'include') diff --git a/arch/arm/boards/a9m2410/env/bin/hush_hack b/arch/arm/boards/a9m2410/env/bin/hush_hack deleted file mode 100644 index 5fffa92ecd..0000000000 --- a/arch/arm/boards/a9m2410/env/bin/hush_hack +++ /dev/null @@ -1 +0,0 @@ -nand -a /dev/nand0.* diff --git a/arch/arm/boards/a9m2410/env/bin/init b/arch/arm/boards/a9m2410/env/bin/init index 5ae44dd455..dd94ef6be0 100644 --- a/arch/arm/boards/a9m2410/env/bin/init +++ b/arch/arm/boards/a9m2410/env/bin/init @@ -7,10 +7,6 @@ export PATH if [ -e /dev/nand0 ]; then addpart /dev/nand0 $nand_parts - - # Uh, oh, hush first expands wildcards and then starts executing - # commands. What a bug! - source /env/bin/hush_hack fi if [ -z $eth0.ethaddr ]; then diff --git a/arch/arm/boards/a9m2440/env/bin/hush_hack b/arch/arm/boards/a9m2440/env/bin/hush_hack deleted file mode 100644 index 5fffa92ecd..0000000000 --- a/arch/arm/boards/a9m2440/env/bin/hush_hack +++ /dev/null @@ -1 +0,0 @@ -nand -a /dev/nand0.* diff --git a/arch/arm/boards/a9m2440/env/bin/init b/arch/arm/boards/a9m2440/env/bin/init index 5ae44dd455..dd94ef6be0 100644 --- a/arch/arm/boards/a9m2440/env/bin/init +++ b/arch/arm/boards/a9m2440/env/bin/init @@ -7,10 +7,6 @@ export PATH if [ -e /dev/nand0 ]; then addpart /dev/nand0 $nand_parts - - # Uh, oh, hush first expands wildcards and then starts executing - # commands. What a bug! - source /env/bin/hush_hack fi if [ -z $eth0.ethaddr ]; then diff --git a/arch/arm/boards/eukrea_cpuimx27/env/bin/hush_hack b/arch/arm/boards/eukrea_cpuimx27/env/bin/hush_hack deleted file mode 100644 index 5fffa92ecd..0000000000 --- a/arch/arm/boards/eukrea_cpuimx27/env/bin/hush_hack +++ /dev/null @@ -1 +0,0 @@ -nand -a /dev/nand0.* diff --git a/arch/arm/boards/eukrea_cpuimx27/env/bin/init b/arch/arm/boards/eukrea_cpuimx27/env/bin/init index cd74974e25..e3c109135a 100644 --- a/arch/arm/boards/eukrea_cpuimx27/env/bin/init +++ b/arch/arm/boards/eukrea_cpuimx27/env/bin/init @@ -10,10 +10,6 @@ fi if [ -e /dev/nand0 ]; then addpart /dev/nand0 $nand_parts - - # Uh, oh, hush first expands wildcards and then starts executing - # commands. What a bug! - source /env/bin/hush_hack fi if [ -f /env/logo.bmp ]; then diff --git a/arch/arm/boards/freescale-mx25-3ds/env/bin/hush_hack b/arch/arm/boards/freescale-mx25-3ds/env/bin/hush_hack deleted file mode 100644 index 5fffa92ecd..0000000000 --- a/arch/arm/boards/freescale-mx25-3ds/env/bin/hush_hack +++ /dev/null @@ -1 +0,0 @@ -nand -a /dev/nand0.* diff --git a/arch/arm/boards/freescale-mx25-3ds/env/bin/init b/arch/arm/boards/freescale-mx25-3ds/env/bin/init index 0600b9e661..8eafa34dc8 100644 --- a/arch/arm/boards/freescale-mx25-3ds/env/bin/init +++ b/arch/arm/boards/freescale-mx25-3ds/env/bin/init @@ -10,10 +10,6 @@ fi if [ -e /dev/nand0 ]; then addpart /dev/nand0 $nand_parts - - # Uh, oh, hush first expands wildcards and then starts executing - # commands. What a bug! - source /env/bin/hush_hack fi echo diff --git a/arch/arm/boards/mmccpu/env/bin/hush_hack b/arch/arm/boards/mmccpu/env/bin/hush_hack deleted file mode 100644 index 5fffa92ecd..0000000000 --- a/arch/arm/boards/mmccpu/env/bin/hush_hack +++ /dev/null @@ -1 +0,0 @@ -nand -a /dev/nand0.* diff --git a/arch/arm/boards/mmccpu/env/bin/init b/arch/arm/boards/mmccpu/env/bin/init index ac84bd596f..ad9b65a765 100644 --- a/arch/arm/boards/mmccpu/env/bin/init +++ b/arch/arm/boards/mmccpu/env/bin/init @@ -10,10 +10,6 @@ fi if [ -e /dev/nand0 ]; then addpart /dev/nand0 $nand_parts - - # Uh, oh, hush first expands wildcards and then starts executing - # commands. What a bug! - source /env/bin/hush_hack fi if [ -z $eth0.ethaddr ]; then diff --git a/arch/arm/boards/pm9263/env/bin/hush_hack b/arch/arm/boards/pm9263/env/bin/hush_hack deleted file mode 100644 index 5fffa92ecd..0000000000 --- a/arch/arm/boards/pm9263/env/bin/hush_hack +++ /dev/null @@ -1 +0,0 @@ -nand -a /dev/nand0.* diff --git a/arch/arm/boards/pm9263/env/bin/init b/arch/arm/boards/pm9263/env/bin/init index 02f5cd415b..ad9b65a765 100644 --- a/arch/arm/boards/pm9263/env/bin/init +++ b/arch/arm/boards/pm9263/env/bin/init @@ -10,10 +10,6 @@ fi if [ -e /dev/nand0 ]; then addpart /dev/nand0 $nand_parts - - # Uh, oh, hush first expands wildcards and then starts executing - # commands. What a bug! - source /env/bin/hush_hack fi if [ -z $eth0.ethaddr ]; then diff --git a/defaultenv/defaultenv-1/bin/init b/defaultenv/defaultenv-1/bin/init index adb3c43a66..4781b5a963 100644 --- a/defaultenv/defaultenv-1/bin/init +++ b/defaultenv/defaultenv-1/bin/init @@ -16,7 +16,6 @@ fi if [ -e /dev/nand0 -a -n "$nand_parts" ]; then addpart /dev/nand0 $nand_parts - nand -a /dev/nand0.* fi if [ -f /env/bin/init_board ]; then diff --git a/defaultenv/defaultenv-2-base/bin/mtdparts-add b/defaultenv/defaultenv-2-base/bin/mtdparts-add index 58c9fa7a21..05ab638bfc 100644 --- a/defaultenv/defaultenv-2-base/bin/mtdparts-add +++ b/defaultenv/defaultenv-2-base/bin/mtdparts-add @@ -39,10 +39,6 @@ fi addpart -n /dev/${device} "$parts" || exit mkdir -p /tmp/mtdparts/${device} -if [ -n "${bbdev}" ]; then - nand -a /dev/${device}.* -fi - if [ -n ${kernelname} ]; then global linux.mtdparts.${device} global.linux.mtdparts.${device}="${kernelname}:${parts}" diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index c97c8c1403..d954f72886 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -409,6 +409,9 @@ int add_mtd_device(struct mtd_info *mtd, char *devname, int device_id) devfs_create(&mtd->cdev); + if (mtd_can_have_bb(mtd)) + mtd->cdev_bb = mtd_add_bb(mtd, NULL); + if (mtd->parent && !mtd->master) of_parse_partitions(&mtd->cdev, mtd->parent->device_node); diff --git a/drivers/of/partition.c b/drivers/of/partition.c index 5ed44a84d2..074be090e6 100644 --- a/drivers/of/partition.c +++ b/drivers/of/partition.c @@ -61,9 +61,6 @@ struct cdev *of_parse_partition(struct cdev *cdev, struct device_node *node) new = devfs_add_partition(cdev->name, offset, size, flags, filename); - if (cdev->mtd && cdev->mtd->type == MTD_NANDFLASH) - dev_add_bb_dev(filename, NULL); - free(filename); return new; diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index c63b514f44..5f02aee2d6 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h @@ -211,6 +211,8 @@ struct mtd_info { struct device_d *parent; struct cdev cdev; + struct cdev *cdev_bb; + struct param_d param_size; char *size_str; -- cgit v1.2.3