mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
[s3c24xx] Add 2.6.31 patches
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@17665 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
61
target/linux/s3c24xx/patches-2.6.31/300-s3c-nand.patch
Normal file
61
target/linux/s3c24xx/patches-2.6.31/300-s3c-nand.patch
Normal file
@@ -0,0 +1,61 @@
|
||||
diff --git a/arch/arm/plat-s3c/include/plat/nand.h b/arch/arm/plat-s3c/include/plat/nand.h
|
||||
index 18f9588..fff94e6 100644
|
||||
--- a/arch/arm/plat-s3c/include/plat/nand.h
|
||||
+++ b/arch/arm/plat-s3c/include/plat/nand.h
|
||||
@@ -33,6 +33,8 @@ struct s3c2410_nand_set {
|
||||
|
||||
int nr_chips;
|
||||
int nr_partitions;
|
||||
+ unsigned int flags;
|
||||
+#define S3C2410_NAND_BBT 0x0001
|
||||
char *name;
|
||||
int *nr_map;
|
||||
struct mtd_partition *partitions;
|
||||
@@ -51,6 +53,9 @@ struct s3c2410_platform_nand {
|
||||
int nr_sets;
|
||||
struct s3c2410_nand_set *sets;
|
||||
|
||||
+ /* force software_ecc at runtime */
|
||||
+ int software_ecc;
|
||||
+
|
||||
void (*select_chip)(struct s3c2410_nand_set *,
|
||||
int chip);
|
||||
};
|
||||
diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c
|
||||
index 11dc7e6..59637ac 100644
|
||||
--- a/drivers/mtd/nand/s3c2410.c
|
||||
+++ b/drivers/mtd/nand/s3c2410.c
|
||||
@@ -491,7 +491,7 @@ static int s3c2410_nand_correct_data(struct mtd_info *mtd, u_char *dat,
|
||||
if ((diff0 & ~(1<<fls(diff0))) == 0)
|
||||
return 1;
|
||||
|
||||
- return -1;
|
||||
+ return -EBADMSG;
|
||||
}
|
||||
|
||||
/* ECC functions
|
||||
@@ -774,9 +783,13 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info,
|
||||
chip->select_chip = s3c2410_nand_select_chip;
|
||||
chip->chip_delay = 50;
|
||||
chip->priv = nmtd;
|
||||
- chip->options = 0;
|
||||
chip->controller = &info->controller;
|
||||
|
||||
+ if (set->flags & S3C2410_NAND_BBT)
|
||||
+ chip->options = NAND_USE_FLASH_BBT;
|
||||
+ else
|
||||
+ chip->options = 0;
|
||||
+
|
||||
switch (info->cpu_type) {
|
||||
case TYPE_S3C2410:
|
||||
chip->IO_ADDR_W = regs + S3C2410_NFDATA;
|
||||
@@ -816,7 +829,7 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info,
|
||||
nmtd->mtd.owner = THIS_MODULE;
|
||||
nmtd->set = set;
|
||||
|
||||
- if (hardware_ecc) {
|
||||
+ if (!info->platform->software_ecc && hardware_ecc) {
|
||||
chip->ecc.calculate = s3c2410_nand_calculate_ecc;
|
||||
chip->ecc.correct = s3c2410_nand_correct_data;
|
||||
chip->ecc.mode = NAND_ECC_HW;
|
||||
|
||||
Reference in New Issue
Block a user