diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1026-s3c24xx-nand-largepage.patch.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.24/1026-s3c24xx-nand-largepage.patch.patch | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1026-s3c24xx-nand-largepage.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1026-s3c24xx-nand-largepage.patch.patch deleted file mode 100644 index 1f14c7c36d..0000000000 --- a/target/linux/s3c24xx/patches-2.6.24/1026-s3c24xx-nand-largepage.patch.patch +++ /dev/null @@ -1,143 +0,0 @@ -From cddfb6f606768265f2b36658761ea9467f098f0a Mon Sep 17 00:00:00 2001 -From: mokopatches <mokopatches@openmoko.org> -Date: Fri, 4 Apr 2008 11:33:44 +0100 -Subject: [PATCH] s3c24xx-nand-largepage.patch - MTD: S3C24XX large page NAND support - -This adds support for using large page NAND devices -with the S3C24XX NAND controller. This also adds the -file Documentation/arm/Samsung-S3C24XX/NAND.txt to -describe the differences. - -Signed-off-by: Ben Dooks <ben-linux@fluff.org> ---- - Documentation/arm/Samsung-S3C24XX/NAND.txt | 30 +++++++++++++++++++ - Documentation/arm/Samsung-S3C24XX/Overview.txt | 2 + - drivers/mtd/nand/s3c2410.c | 38 ++++++++++++++++++++--- - 3 files changed, 65 insertions(+), 5 deletions(-) - create mode 100644 Documentation/arm/Samsung-S3C24XX/NAND.txt - -diff --git a/Documentation/arm/Samsung-S3C24XX/NAND.txt b/Documentation/arm/Samsung-S3C24XX/NAND.txt -new file mode 100644 -index 0000000..bc478a3 ---- /dev/null -+++ b/Documentation/arm/Samsung-S3C24XX/NAND.txt -@@ -0,0 +1,30 @@ -+ S3C24XX NAND Support -+ ==================== -+ -+Introduction -+------------ -+ -+Small Page NAND -+--------------- -+ -+The driver uses a 512 byte (1 page) ECC code for this setup. The -+ECC code is not directly compatible with the default kernel ECC -+code, so the driver enforces its own OOB layout and ECC parameters -+ -+Large Page NAND -+--------------- -+ -+The driver is capable of handling NAND flash with a 2KiB page -+size, with support for hardware ECC generation and correction. -+ -+Unlike the 512byte page mode, the driver generates ECC data for -+each 256 byte block in an 2KiB page. This means that more than -+one error in a page can be rectified. It also means that the -+OOB layout remains the default kernel layout for these flashes. -+ -+ -+Document Author -+--------------- -+ -+Ben Dooks, Copyright 2007 Simtec Electronics -+ -diff --git a/Documentation/arm/Samsung-S3C24XX/Overview.txt b/Documentation/arm/Samsung-S3C24XX/Overview.txt -index c31b76f..d04e1e3 100644 ---- a/Documentation/arm/Samsung-S3C24XX/Overview.txt -+++ b/Documentation/arm/Samsung-S3C24XX/Overview.txt -@@ -156,6 +156,8 @@ NAND - controller. If there are any problems the latest linux-mtd - code can be found from http://www.linux-mtd.infradead.org/ - -+ For more information see Documentation/arm/Samsung-S3C24XX/NAND.txt -+ - - Serial - ------ -diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c -index 770306c..5c1c09d 100644 ---- a/drivers/mtd/nand/s3c2410.c -+++ b/drivers/mtd/nand/s3c2410.c -@@ -473,7 +473,7 @@ static int s3c2440_nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u - ecc_code[1] = ecc >> 8; - ecc_code[2] = ecc >> 16; - -- pr_debug("%s: returning ecc %06lx\n", __func__, ecc); -+ pr_debug("%s: returning ecc %06lx\n", __func__, ecc & 0xffffff); - - return 0; - } -@@ -662,9 +662,6 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, - chip->ecc.calculate = s3c2410_nand_calculate_ecc; - chip->ecc.correct = s3c2410_nand_correct_data; - chip->ecc.mode = NAND_ECC_HW; -- chip->ecc.size = 512; -- chip->ecc.bytes = 3; -- chip->ecc.layout = &nand_hw_eccoob; - - switch (info->cpu_type) { - case TYPE_S3C2410: -@@ -688,6 +685,34 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, - } - } - -+/* s3c2410_nand_update_chip -+ * -+ * post-probe chip update, to change any items, such as the -+ * layout for large page nand -+ */ -+ -+static void s3c2410_nand_update_chip(struct s3c2410_nand_info *info, -+ struct s3c2410_nand_mtd *nmtd) -+{ -+ struct nand_chip *chip = &nmtd->chip; -+ -+ printk("%s: chip %p: %d\n", __func__, chip, chip->page_shift); -+ -+ if (hardware_ecc) { -+ /* change the behaviour depending on wether we are using -+ * the large or small page nand device */ -+ -+ if (chip->page_shift > 10) { -+ chip->ecc.size = 256; -+ chip->ecc.bytes = 3; -+ } else { -+ chip->ecc.size = 512; -+ chip->ecc.bytes = 3; -+ chip->ecc.layout = &nand_hw_eccoob; -+ } -+ } -+} -+ - /* s3c2410_nand_probe - * - * called by device layer when it finds a device matching -@@ -794,9 +819,12 @@ static int s3c24xx_nand_probe(struct platform_device *pdev, - - s3c2410_nand_init_chip(info, nmtd, sets); - -- nmtd->scan_res = nand_scan(&nmtd->mtd, (sets) ? sets->nr_chips : 1); -+ nmtd->scan_res = nand_scan_ident(&nmtd->mtd, -+ (sets) ? sets->nr_chips : 1); - - if (nmtd->scan_res == 0) { -+ s3c2410_nand_update_chip(info, nmtd); -+ nand_scan_tail(&nmtd->mtd); - s3c2410_nand_add_partition(info, nmtd, sets); - } - --- -1.5.6.5 - |