several bugfixes/workarounds in mtd snapshot of 20041226 && 2.4.28
Subsystems (3)
Dear MTD maintainers,
I suggest several bugfixes and workarounds against the snapshot of 20041226 (inserted into a vanilla 2.4.28) - see the attached patch.
I'm using DiskOnChip devices in various sorts of Advantech hardware. I'm compiling my MTD drivers for the DiskOnChip alone - I don't want to include all the other MTD stuff (useless to me).
Bugs fixed / worked around:
1) if you flush the partition table and issue a BLKRRPART
(i.e., you re-partition the diskonchip), the reported device
size shrinks to one half of the original. If you do this again
before a reboot, the size shrinks again (now one quarter).
Seems like the driver would re-init device size to a size denominated in 1k blocks, rather than sectors (512B).
2) in my DiskOnChip-only setup, CONFIG_MTD_MAP_BANK_WIDTH_1
is missing in the .config. I've added that straight to $LINUX/include/linux/map.h
3) two #includes seem to be missing in $MTD/nand/diskonchip.c
4) the Reed-Solomon library hooks are messed up in $LINUX/lib/Config.in
I hope this helps
Frank Rysanek
drivers/mtd/mtd_blkdevs-24.c +1 -1
@@ -315,7 +315,7 @@ }grok_partitions (gd, minor,1 << tr->part_bits, - tr->blkcore_priv->sizes[minor]); + dev->size);up (&mtd_table_mutex);return 0 ;
include/linux/mtd/map.h +4 -0
@@ -14,6 +14,10 @@#include <asm/io.h> #include <asm/bug.h> +#ifndef CONFIG_MTD_CFI_GEOMETRY +#define CONFIG_MTD_MAP_BANK_WIDTH_1 +#endif +#ifdef CONFIG_MTD_MAP_BANK_WIDTH_1 #define map_bankwidth (map) 1#define map_bankwidth_is_1 (map) (map_bankwidth(map) == 1)
drivers/mtd/nand/diskonchip.c +2 -0
@@ -24,6 +24,8 @@#include <linux/sched.h> #include <linux/delay.h> #include <linux/rslib.h> +#include <linux/moduleparam.h> +#include <linux/rslib.h> #include <asm/io.h> #include <linux/mtd/mtd.h>
lib/Config.in +4 -2
@@ -43,13 +43,15 @@ if [ "$CONFIG_MTD_DOCPROBE" = "y" -o \ "$CONFIG_MTD_NAND_RTC_FROM4" = "y" -o \ - "$MTD_NAND_DISKONCHIP" = "y" ]; then + "$CONFIG_MTD_NAND_DISKONCHIP" = "y" ]; then define_tristate CONFIG_REED_SOLOMON y + define_tristate CONFIG_REED_SOLOMON_DEC16 y else if [ "$CONFIG_MTD_DOCPROBE" = "m" -o \ "$CONFIG_MTD_NAND_RTC_FROM4" = "m" -o \ - "$MTD_NAND_DISKONCHIP" = "m" ]; then + "$CONFIG_MTD_NAND_DISKONCHIP" = "m" ]; then define_tristate CONFIG_REED_SOLOMON m + define_tristate CONFIG_REED_SOLOMON_DEC16 y else define_tristate CONFIG_REED_SOLOMON n fi
Quoted 6 lines · Frantisek Rysanek
1) if you flush the partition table and issue a BLKRRPART
(i.e., you re-partition the diskonchip), the reported device
size shrinks to one half of the original. If you do this again
before a reboot, the size shrinks again (now one quarter).
Seems like the driver would re-init device size to a size denominated in 1k blocks, rather than sectors (512B).
Committed. Thanks.
Quoted 2 lines
2) in my DiskOnChip-only setup,
CONFIG_MTD_MAP_BANK_WIDTH_1
is missing in the .config. I've added that straight to$LINUX/include/linux/map.h
I think that's a Config.in bug -- it shouldn't happen on 2.6.
Quoted 1 line
3) two #includes seem to be missing in
$MTD/nand/diskonchip.c
rslib.h was already there; I've added moduleparam.h which was not.
Quoted 1 line
4) the Reed-Solomon library hooks are messed up in $LINUX/lib/Config.in
Committed; thanks.
Signature · 1 line
dwmw2