diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-30 20:31:56 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-30 20:31:56 -0400 |
commit | 623ff7739e7c00fa3d55dbfd42a492a68298fd7a (patch) | |
tree | 0b7461753a1b13b27ea2958a7d48c6efb47bba54 /drivers/mtd/onenand | |
parent | c39e8ede284f469971589f2e04af78216e1a771d (diff) | |
parent | 7b0e67f604e1829e5292e1ad7743eb18dc42ea7c (diff) |
Merge tag 'for-linus-3.4' of git://git.infradead.org/mtd-2.6
Pull MTD changes from David Woodhouse:
- Artem's cleanup of the MTD API continues apace.
- Fixes and improvements for ST FSMC and SuperH FLCTL NAND, amongst
others.
- More work on DiskOnChip G3, new driver for DiskOnChip G4.
- Clean up debug/warning printks in JFFS2 to use pr_<level>.
Fix up various trivial conflicts, largely due to changes in calling
conventions for things like dmaengine_prep_slave_sg() (new inline
wrapper to hide new parameter, clashing with rewrite of previously last
parameter that used to be an 'append' flag, and is now a bitmap of
'unsigned long flags').
(Also some header file fallout - like so many merges this merge window -
and silly conflicts with sparse fixes)
* tag 'for-linus-3.4' of git://git.infradead.org/mtd-2.6: (120 commits)
mtd: docg3 add protection against concurrency
mtd: docg3 refactor cascade floors structure
mtd: docg3 increase write/erase timeout
mtd: docg3 fix inbound calculations
mtd: nand: gpmi: fix function annotations
mtd: phram: fix section mismatch for phram_setup
mtd: unify initialization of erase_info->fail_addr
mtd: support ONFI multi lun NAND
mtd: sm_ftl: fix typo in major number.
mtd: add device-tree support to spear_smi
mtd: spear_smi: Remove default partition information from driver
mtd: Add device-tree support to fsmc_nand
mtd: fix section mismatch for doc_probe_device
mtd: nand/fsmc: Remove sparse warnings and errors
mtd: nand/fsmc: Add DMA support
mtd: nand/fsmc: Access the NAND device word by word whenever possible
mtd: nand/fsmc: Use dev_err to report error scenario
mtd: nand/fsmc: Use devm routines
mtd: nand/fsmc: Modify fsmc driver to accept nand timing parameters via platform
mtd: fsmc_nand: add pm callbacks to support hibernation
...
Diffstat (limited to 'drivers/mtd/onenand')
-rw-r--r-- | drivers/mtd/onenand/generic.c | 6 | ||||
-rw-r--r-- | drivers/mtd/onenand/omap2.c | 6 | ||||
-rw-r--r-- | drivers/mtd/onenand/onenand_base.c | 68 | ||||
-rw-r--r-- | drivers/mtd/onenand/samsung.c | 6 |
4 files changed, 31 insertions, 55 deletions
diff --git a/drivers/mtd/onenand/generic.c b/drivers/mtd/onenand/generic.c index 0ccd5bff2544..1c4f97c63e62 100644 --- a/drivers/mtd/onenand/generic.c +++ b/drivers/mtd/onenand/generic.c | |||
@@ -70,9 +70,9 @@ static int __devinit generic_onenand_probe(struct platform_device *pdev) | |||
70 | goto out_iounmap; | 70 | goto out_iounmap; |
71 | } | 71 | } |
72 | 72 | ||
73 | err = mtd_device_parse_register(&info->mtd, NULL, 0, | 73 | err = mtd_device_parse_register(&info->mtd, NULL, NULL, |
74 | pdata ? pdata->parts : NULL, | 74 | pdata ? pdata->parts : NULL, |
75 | pdata ? pdata->nr_parts : 0); | 75 | pdata ? pdata->nr_parts : 0); |
76 | 76 | ||
77 | platform_set_drvdata(pdev, info); | 77 | platform_set_drvdata(pdev, info); |
78 | 78 | ||
diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c index 7e9ea6852b67..398a82783848 100644 --- a/drivers/mtd/onenand/omap2.c +++ b/drivers/mtd/onenand/omap2.c | |||
@@ -751,9 +751,9 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev) | |||
751 | if ((r = onenand_scan(&c->mtd, 1)) < 0) | 751 | if ((r = onenand_scan(&c->mtd, 1)) < 0) |
752 | goto err_release_regulator; | 752 | goto err_release_regulator; |
753 | 753 | ||
754 | r = mtd_device_parse_register(&c->mtd, NULL, 0, | 754 | r = mtd_device_parse_register(&c->mtd, NULL, NULL, |
755 | pdata ? pdata->parts : NULL, | 755 | pdata ? pdata->parts : NULL, |
756 | pdata ? pdata->nr_parts : 0); | 756 | pdata ? pdata->nr_parts : 0); |
757 | if (r) | 757 | if (r) |
758 | goto err_release_onenand; | 758 | goto err_release_onenand; |
759 | 759 | ||
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index a061bc163da2..b3ce12ef359e 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c | |||
@@ -1753,16 +1753,6 @@ static int onenand_panic_write(struct mtd_info *mtd, loff_t to, size_t len, | |||
1753 | pr_debug("%s: to = 0x%08x, len = %i\n", __func__, (unsigned int)to, | 1753 | pr_debug("%s: to = 0x%08x, len = %i\n", __func__, (unsigned int)to, |
1754 | (int)len); | 1754 | (int)len); |
1755 | 1755 | ||
1756 | /* Initialize retlen, in case of early exit */ | ||
1757 | *retlen = 0; | ||
1758 | |||
1759 | /* Do not allow writes past end of device */ | ||
1760 | if (unlikely((to + len) > mtd->size)) { | ||
1761 | printk(KERN_ERR "%s: Attempt write to past end of device\n", | ||
1762 | __func__); | ||
1763 | return -EINVAL; | ||
1764 | } | ||
1765 | |||
1766 | /* Reject writes, which are not page aligned */ | 1756 | /* Reject writes, which are not page aligned */ |
1767 | if (unlikely(NOTALIGNED(to) || NOTALIGNED(len))) { | 1757 | if (unlikely(NOTALIGNED(to) || NOTALIGNED(len))) { |
1768 | printk(KERN_ERR "%s: Attempt to write not page aligned data\n", | 1758 | printk(KERN_ERR "%s: Attempt to write not page aligned data\n", |
@@ -1890,13 +1880,6 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to, | |||
1890 | ops->retlen = 0; | 1880 | ops->retlen = 0; |
1891 | ops->oobretlen = 0; | 1881 | ops->oobretlen = 0; |
1892 | 1882 | ||
1893 | /* Do not allow writes past end of device */ | ||
1894 | if (unlikely((to + len) > mtd->size)) { | ||
1895 | printk(KERN_ERR "%s: Attempt write to past end of device\n", | ||
1896 | __func__); | ||
1897 | return -EINVAL; | ||
1898 | } | ||
1899 | |||
1900 | /* Reject writes, which are not page aligned */ | 1883 | /* Reject writes, which are not page aligned */ |
1901 | if (unlikely(NOTALIGNED(to) || NOTALIGNED(len))) { | 1884 | if (unlikely(NOTALIGNED(to) || NOTALIGNED(len))) { |
1902 | printk(KERN_ERR "%s: Attempt to write not page aligned data\n", | 1885 | printk(KERN_ERR "%s: Attempt to write not page aligned data\n", |
@@ -2493,12 +2476,6 @@ static int onenand_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
2493 | (unsigned long long)instr->addr, | 2476 | (unsigned long long)instr->addr, |
2494 | (unsigned long long)instr->len); | 2477 | (unsigned long long)instr->len); |
2495 | 2478 | ||
2496 | /* Do not allow erase past end of device */ | ||
2497 | if (unlikely((len + addr) > mtd->size)) { | ||
2498 | printk(KERN_ERR "%s: Erase past end of device\n", __func__); | ||
2499 | return -EINVAL; | ||
2500 | } | ||
2501 | |||
2502 | if (FLEXONENAND(this)) { | 2479 | if (FLEXONENAND(this)) { |
2503 | /* Find the eraseregion of this address */ | 2480 | /* Find the eraseregion of this address */ |
2504 | int i = flexonenand_region(mtd, addr); | 2481 | int i = flexonenand_region(mtd, addr); |
@@ -2525,8 +2502,6 @@ static int onenand_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
2525 | return -EINVAL; | 2502 | return -EINVAL; |
2526 | } | 2503 | } |
2527 | 2504 | ||
2528 | instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN; | ||
2529 | |||
2530 | /* Grab the lock and see if the device is available */ | 2505 | /* Grab the lock and see if the device is available */ |
2531 | onenand_get_device(mtd, FL_ERASING); | 2506 | onenand_get_device(mtd, FL_ERASING); |
2532 | 2507 | ||
@@ -4103,33 +4078,34 @@ int onenand_scan(struct mtd_info *mtd, int maxchips) | |||
4103 | mtd->oobavail = this->ecclayout->oobavail; | 4078 | mtd->oobavail = this->ecclayout->oobavail; |
4104 | 4079 | ||
4105 | mtd->ecclayout = this->ecclayout; | 4080 | mtd->ecclayout = this->ecclayout; |
4081 | mtd->ecc_strength = 1; | ||
4106 | 4082 | ||
4107 | /* Fill in remaining MTD driver data */ | 4083 | /* Fill in remaining MTD driver data */ |
4108 | mtd->type = ONENAND_IS_MLC(this) ? MTD_MLCNANDFLASH : MTD_NANDFLASH; | 4084 | mtd->type = ONENAND_IS_MLC(this) ? MTD_MLCNANDFLASH : MTD_NANDFLASH; |
4109 | mtd->flags = MTD_CAP_NANDFLASH; | 4085 | mtd->flags = MTD_CAP_NANDFLASH; |
4110 | mtd->erase = onenand_erase; | 4086 | mtd->_erase = onenand_erase; |
4111 | mtd->point = NULL; | 4087 | mtd->_point = NULL; |
4112 | mtd->unpoint = NULL; | 4088 | mtd->_unpoint = NULL; |
4113 | mtd->read = onenand_read; | 4089 | mtd->_read = onenand_read; |
4114 | mtd->write = onenand_write; | 4090 | mtd->_write = onenand_write; |
4115 | mtd->read_oob = onenand_read_oob; | 4091 | mtd->_read_oob = onenand_read_oob; |
4116 | mtd->write_oob = onenand_write_oob; | 4092 | mtd->_write_oob = onenand_write_oob; |
4117 | mtd->panic_write = onenand_panic_write; | 4093 | mtd->_panic_write = onenand_panic_write; |
4118 | #ifdef CONFIG_MTD_ONENAND_OTP | 4094 | #ifdef CONFIG_MTD_ONENAND_OTP |
4119 | mtd->get_fact_prot_info = onenand_get_fact_prot_info; | 4095 | mtd->_get_fact_prot_info = onenand_get_fact_prot_info; |
4120 | mtd->read_fact_prot_reg = onenand_read_fact_prot_reg; | 4096 | mtd->_read_fact_prot_reg = onenand_read_fact_prot_reg; |
4121 | mtd->get_user_prot_info = onenand_get_user_prot_info; | 4097 | mtd->_get_user_prot_info = onenand_get_user_prot_info; |
4122 | mtd->read_user_prot_reg = onenand_read_user_prot_reg; | 4098 | mtd->_read_user_prot_reg = onenand_read_user_prot_reg; |
4123 | mtd->write_user_prot_reg = onenand_write_user_prot_reg; | 4099 | mtd->_write_user_prot_reg = onenand_write_user_prot_reg; |
4124 | mtd->lock_user_prot_reg = onenand_lock_user_prot_reg; | 4100 | mtd->_lock_user_prot_reg = onenand_lock_user_prot_reg; |
4125 | #endif | 4101 | #endif |
4126 | mtd->sync = onenand_sync; | 4102 | mtd->_sync = onenand_sync; |
4127 | mtd->lock = onenand_lock; | 4103 | mtd->_lock = onenand_lock; |
4128 | mtd->unlock = onenand_unlock; | 4104 | mtd->_unlock = onenand_unlock; |
4129 | mtd->suspend = onenand_suspend; | 4105 | mtd->_suspend = onenand_suspend; |
4130 | mtd->resume = onenand_resume; | 4106 | mtd->_resume = onenand_resume; |
4131 | mtd->block_isbad = onenand_block_isbad; | 4107 | mtd->_block_isbad = onenand_block_isbad; |
4132 | mtd->block_markbad = onenand_block_markbad; | 4108 | mtd->_block_markbad = onenand_block_markbad; |
4133 | mtd->owner = THIS_MODULE; | 4109 | mtd->owner = THIS_MODULE; |
4134 | mtd->writebufsize = mtd->writesize; | 4110 | mtd->writebufsize = mtd->writesize; |
4135 | 4111 | ||
diff --git a/drivers/mtd/onenand/samsung.c b/drivers/mtd/onenand/samsung.c index fa1ee43f735b..8e4b3f2742ba 100644 --- a/drivers/mtd/onenand/samsung.c +++ b/drivers/mtd/onenand/samsung.c | |||
@@ -923,7 +923,7 @@ static int s3c_onenand_probe(struct platform_device *pdev) | |||
923 | r = platform_get_resource(pdev, IORESOURCE_MEM, 1); | 923 | r = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
924 | if (!r) { | 924 | if (!r) { |
925 | dev_err(&pdev->dev, "no buffer memory resource defined\n"); | 925 | dev_err(&pdev->dev, "no buffer memory resource defined\n"); |
926 | return -ENOENT; | 926 | err = -ENOENT; |
927 | goto ahb_resource_failed; | 927 | goto ahb_resource_failed; |
928 | } | 928 | } |
929 | 929 | ||
@@ -964,7 +964,7 @@ static int s3c_onenand_probe(struct platform_device *pdev) | |||
964 | r = platform_get_resource(pdev, IORESOURCE_MEM, 1); | 964 | r = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
965 | if (!r) { | 965 | if (!r) { |
966 | dev_err(&pdev->dev, "no dma memory resource defined\n"); | 966 | dev_err(&pdev->dev, "no dma memory resource defined\n"); |
967 | return -ENOENT; | 967 | err = -ENOENT; |
968 | goto dma_resource_failed; | 968 | goto dma_resource_failed; |
969 | } | 969 | } |
970 | 970 | ||
@@ -1014,7 +1014,7 @@ static int s3c_onenand_probe(struct platform_device *pdev) | |||
1014 | if (s3c_read_reg(MEM_CFG_OFFSET) & ONENAND_SYS_CFG1_SYNC_READ) | 1014 | if (s3c_read_reg(MEM_CFG_OFFSET) & ONENAND_SYS_CFG1_SYNC_READ) |
1015 | dev_info(&onenand->pdev->dev, "OneNAND Sync. Burst Read enabled\n"); | 1015 | dev_info(&onenand->pdev->dev, "OneNAND Sync. Burst Read enabled\n"); |
1016 | 1016 | ||
1017 | err = mtd_device_parse_register(mtd, NULL, 0, | 1017 | err = mtd_device_parse_register(mtd, NULL, NULL, |
1018 | pdata ? pdata->parts : NULL, | 1018 | pdata ? pdata->parts : NULL, |
1019 | pdata ? pdata->nr_parts : 0); | 1019 | pdata ? pdata->nr_parts : 0); |
1020 | 1020 | ||