GPMI-NAND: Define ecc.strength
Subsystems (5)
PATCH 1/4 GPMI-NAND: Define ecc.strength
The ecc.strength wasn't set, resulting in the following crash:
[ 2.550000] kernel BUG at drivers/mtd/nand/nand_base.c:3347! [ 2.550000] Internal error: Oops - BUG: 0 [#1] ARM [ 2.550000] Modules linked in: [ 2.550000] CPU: 0 Not tainted (3.4.0-rc7-next-20120518-dirty #1211) [ 2.550000] PC is at nand_scan_tail+0x328/0x650 [ 2.550000] LR is at nand_scan_tail+0x328/0x650 [ 2.550000] pc : [<c020841c>] lr : [<c020841c>] psr: 20000013 [ 2.550000] sp : c7443ea8 ip : c7448000 fp : c043dc70 [ 2.550000] r10: 00000000 r9 : c059dd20 r8 : c7526300 [ 2.550000] r7 : 00000001 r6 : c7479c08 r5 : c7526300 r4 : c7526098 [ 2.550000] r3 : c7448000 r2 : 00000000 r1 : 00000001 r0 : 00000034 [ 2.550000] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel [ 2.550000] Control: 0005317f Table: 40004000 DAC: 00000017 [ 2.550000] Process swapper (pid: 1, stack limit = 0xc7442270) [ 2.550000] Stack: (0xc7443ea8 to 0xc7444000) [ 2.550000] 3ea0: c7526000 00000000 c7479c08 c02f68e0 c03d50ec c7526000 [ 2.550000] 3ec0: c747c6e0 00000000 c0ae7720 00000004 00000000 00000000 c7479c08 c0ae7720 [ 2.550000] 3ee0: c7479c3c c0593e20 c7572200 c01f6618 c01f6604 c01f55b0 c7479c08 c0593e20 [ 2.550000] 3f00: c7479c3c c059dd20 c7572200 c01f57cc 00000000 c0593e20 c01f5738 c01f3d40 [ 2.550000] 3f20: c74038a8 c74767d0 c0593e20 c04475ec c05901b8 c01f4e18 c03d50e0 c019d438 [ 2.550000] 3f40: c7403800 c0593e20 c04475ec 00000000 c059dd20 c04475f8 c7442000 c01f5a70 [ 2.550000] 3f60: 00000000 c044e98c c04475ec 00000000 c059dd20 c04475f8 c7442000 c043dc7c [ 2.550000] 3f80: c044e98c c0008824 c03d6c30 c040c4e4 00000006 00000006 c03b0ce4 c0bf54e0 [ 2.550000] 3fa0: c044e98c c04475ec 00000006 c04475f8 0000004c c042a21c 00000000 c042a8b8 [ 2.550000] 3fc0: 00000006 00000006 c042a21c 00000000 00000000 00000000 00000000 c042a7bc [ 2.550000] 3fe0: c000fab4 00000013 00000000 00000000 00000000 c000fab4 efbbfaa5 eaeafefe [ 2.550000] [<c020841c>] (nand_scan_tail+0x328/0x650) from [<c02f68e0>] (gpmi_nand_probe+0x43c/0x5a4) [ 2.550000] [<c02f68e0>] (gpmi_nand_probe+0x43c/0x5a4) from [<c01f6618>] (platform_drv_probe+0x14/0x18) [ 2.550000] [<c01f6618>] (platform_drv_probe+0x14/0x18) from [<c01f55b0>] (driver_probe_device+0x74/0x1fc) [ 2.550000] [<c01f55b0>] (driver_probe_device+0x74/0x1fc) from [<c01f57cc>] (__driver_attach+0x94/0x98) [ 2.550000] [<c01f57cc>] (__driver_attach+0x94/0x98) from [<c01f3d40>] (bus_for_each_dev+0x50/0x80) [ 2.550000] [<c01f3d40>] (bus_for_each_dev+0x50/0x80) from [<c01f4e18>] (bus_add_driver+0x188/0x25c) [ 2.550000] [<c01f4e18>] (bus_add_driver+0x188/0x25c) from [<c01f5a70>] (driver_register+0x78/0x138) [ 2.550000] [<c01f5a70>] (driver_register+0x78/0x138) from [<c043dc7c>] (gpmi_nand_init+0xc/0x30) [ 2.550000] [<c043dc7c>] (gpmi_nand_init+0xc/0x30) from [<c0008824>] (do_one_initcall+0x108/0x17c) [ 2.550000] [<c0008824>] (do_one_initcall+0x108/0x17c) from [<c042a8b8>] (kernel_init+0xfc/0x1bc) [ 2.550000] [<c042a8b8>] (kernel_init+0xfc/0x1bc) from [<c000fab4>] (kernel_thread_exit+0x0/0x8) [ 2.550000] Code: e3530000 1affff76 e59f02d0 eb03c16a (e7f001f2) [ 2.830000] ---[ end trace 3f05d4c0039432f1 ]--- [ 2.840000] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
--- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +4 -0
@@ -1436,6 +1436,9 @@ static int gpmi_pre_bbt_scan(struct gpmi_nand_data *this)if (ret)return ret; +/* Adjust the ECC strength according to the chip. */ + this->nand.ecc.strength = this->bch_geometry.ecc_strength; +/* NAND boot init, depends on the gpmi_set_geometry(). */ return nand_boot_init (this); }
@@ -1494,6 +1497,7 @@ static int __devinit gpmi_nfc_init(struct gpmi_nand_data *this) chip->options |=NAND_NO_SUBPAGE_WRITE ; chip->ecc.mode =NAND_ECC_HW ; chip->ecc.size =1 ; + chip->ecc.strength =8 ; chip->ecc.layout = &gpmi_hw_ecclayout;/* Allocate a temporary DMA buffer for reading ID in the nand_scan() */
Signature · 1 line
1.7.10
PATCH 2/4 GPMI-NAND: Fixup compile issue
--- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +1 -1
@@ -486,7 +486,7 @@ static int __devinit acquire_resources(struct gpmi_nand_data *this)if (ret) goto exit_dma_channels; - pinctrl =devm_pinctrl_get_select_default (&pdev->dev); + pinctrl =devm_pinctrl_get_select_default (&this->pdev->dev);if (IS_ERR (pinctrl)) { ret =PTR_ERR (pinctrl); goto exit_pin;
Signature · 1 line
1.7.10
PATCH 2/4 GPMI-NAND: Fixup compile issue
This one has been fixed on arm-soc.
Regards,
Shawn
Quoted 24 lines · Marek Vasut
Signed-off-by Marek Vasut <[email protected]>Cc Huang Shijie <[email protected]>Cc Shawn Guo <[email protected]>Cc Fabio Estevam <[email protected]>--- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/mtd/nand/gpmi-nand/gpmi-nand.c +1
-1@@ -486,7 +486,7 @@ static int __devinit acquire_resources(struct gpmi_nand_data *this)if (ret) goto exit_dma_channels; - pinctrl =devm_pinctrl_get_select_default (&pdev->dev); + pinctrl =devm_pinctrl_get_select_default (&this->pdev->dev);if (IS_ERR (pinctrl)) { ret =PTR_ERR (pinctrl); goto exit_pin;Signature · 1 line
1.7.10
PATCH 3/4 MXS-MMC: Move of_match_table out of CONFIG_PM
In reply to Marek Vasut--- drivers/mmc/host/mxs-mmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mmc/host/mxs-mmc.c +1 -1
@@ -894,8 +894,8 @@ static struct platform_driver mxs_mmc_driver = { .owner = THIS_MODULE, #ifdef CONFIG_PM .pm = &mxs_mmc_pm_ops, - .of_match_table = mxs_mmc_dt_ids, #endif + .of_match_table = mxs_mmc_dt_ids, }, };
Signature · 1 line
1.7.10
PATCH 3/4 MXS-MMC: Move of_match_table out of CONFIG_PM
Hi Chris,
Do you want me to queue this up for 3.5-rc with arm-soc tree or you can do that with mmc tree? In case you can take care of it:
Marek,
In case Chris want to take the patch and would ask you to repost it to copy linux-mmc, please fix the subject prefix also.
Regards,
Shawn
Quoted 30 lines · Marek Vasut
Signed-off-by Marek Vasut <[email protected]>Cc Shawn Guo <[email protected]>Cc Fabio Estevam <[email protected]>--- drivers/mmc/host/mxs-mmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/mmc/host/mxs-mmc.c +1
-1@@ -894,8 +894,8 @@ static struct platform_driver mxs_mmc_driver = { .owner = THIS_MODULE, #ifdef CONFIG_PM .pm = &mxs_mmc_pm_ops, - .of_match_table = mxs_mmc_dt_ids, #endif + .of_match_table = mxs_mmc_dt_ids, }, };Signature · 7 lines
1.7.10 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 3/4 MXS-MMC: Move of_match_table out of CONFIG_PM
Hi,
Quoted 9 lines · Shawn Guo
Do you want me to queue this up for 3.5-rc with arm-soc tree or you can do that with mmc tree? In case you can take care of it:
Acked-by Shawn Guo <[email protected]>Marek,
In case Chris want to take the patch and would ask you to repost it to copy linux-mmc, please fix the subject prefix also.
Thanks; yes, I'd like to take care of it, I'll make sure to add your ACK. Marek, please repost this one too.
- Chris.
Signature · 2 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child
PATCH 3/4 MXS-MMC: Move of_match_table out of CONFIG_PM
Dear Chris Ball,
Quoted 8 lines
Hi,
Quoted 5 lines · Shawn Guo
Do you want me to queue this up for 3.5-rc with arm-soc tree or you can do that with mmc tree? In case you can take care of it:
Acked-by Shawn Guo <[email protected]>
Quoted 7 lines
Quoted 4 lines
Marek,
In case Chris want to take the patch and would ask you to repost it to copy linux-mmc, please fix the subject prefix also.
Thanks; yes, I'd like to take care of it, I'll make sure to add your ACK. Marek, please repost this one too.
Will do, and will be careful about the MLs next time.
Quoted 2 lines
- Chris.
Best regards,
Marek Vasut
PATCH 4/4 MXS-MMC: Add wp-inverted property
In reply to Marek VasutThe write-protect GPIO is inverted on some boards. Handle such case.
--- Documentation/devicetree/bindings/mmc/mxs-mmc.txt | 1 + drivers/mmc/host/mxs-mmc.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/mmc/mxs-mmc.txt +1 -0
@@ -13,6 +13,7 @@ Required properties: Optional properties: - wp-gpios: Specify GPIOs for write protection +- wp-inverted: Set if the write protection GPIO is inverted Examples:
drivers/mmc/host/mxs-mmc.c +10 -1
@@ -164,16 +164,23 @@ struct mxs_mmc_host {spinlock_t lock;int sdio_irq_en;int wp_gpio; + int wp_inverted:1; };static int mxs_mmc_get_ro (struct mmc_host *mmc) {struct mxs_mmc_host *host =mmc_priv (mmc); +int ret;if (!gpio_is_valid (host->wp_gpio))return -EINVAL ; -return gpio_get_value (host->wp_gpio); + ret =gpio_get_value (host->wp_gpio); + +if (host->wp_inverted) + ret = !ret; + +return ret; }static int mxs_mmc_get_cd (struct mmc_host *mmc)
@@ -786,6 +793,8 @@ static int mxs_mmc_probe(struct platform_device *pdev)else if (bus_width ==8 ) mmc->caps |=MMC_CAP_4_BIT_DATA |MMC_CAP_8_BIT_DATA ; host->wp_gpio =of_get_named_gpio (np,"wp-gpios" ,0 ); +if (of_find_property (np,"wp-inverted" ,NULL )) + host->wp_inverted =1 ; }else {if (pdata->flags &SLOTF_8_BIT_CAPABLE ) mmc->caps |=MMC_CAP_4_BIT_DATA |MMC_CAP_8_BIT_DATA ;
Signature · 1 line
1.7.10
PATCH 4/4 MXS-MMC: Add wp-inverted property
Copy Chris and linux-mmc, as I assume that the patch should go via mmc tree after the merge window.
Quoted 5 lines · Marek Vasut
The write-protect GPIO is inverted on some boards. Handle such case.
Signed-off-by Marek Vasut <[email protected]>Cc Shawn Guo <[email protected]>Cc Fabio Estevam <[email protected]>
A coupe of nits though:
The subject prefix can better be "mmc: mxs-mmc: ".
Quoted 33 lines
--- Documentation/devicetree/bindings/mmc/mxs-mmc.txt | 1 + drivers/mmc/host/mxs-mmc.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-)Documentation/devicetree/bindings/mmc/mxs-mmc.txt +1
-0@@ -13,6 +13,7 @@ Required properties: Optional properties: - wp-gpios: Specify GPIOs for write protection +- wp-inverted: Set if the write protection GPIO is inverted Examples:drivers/mmc/host/mxs-mmc.c +2
-0@@ -164,16 +164,23 @@ struct mxs_mmc_host {spinlock_t lock;int sdio_irq_en;int wp_gpio; + int wp_inverted:1; };static int mxs_mmc_get_ro (struct mmc_host *mmc) {struct mxs_mmc_host *host =mmc_priv (mmc); +int ret;
drivers/mmc/host/mxs-mmc.c struct mxs_mmc_host { · line 183
Quoted 10 lines
drivers/mmc/host/mxs-mmc.c +6
-1if (!gpio_is_valid (host->wp_gpio))return -EINVAL ; -return gpio_get_value (host->wp_gpio); + ret =gpio_get_value (host->wp_gpio); + +if (host->wp_inverted) + ret = !ret; + +return ret;
The above lines can just be the one below?
return (host->wp_inverted) ? !ret : ret;
Quoted 1 line
drivers/mmc/host/mxs-mmc.c +0
-0}
Signature · 2 lines
Regards, Shawn
PATCH 4/4 MXS-MMC: Add wp-inverted property
Dear Shawn Guo,
Quoted 10 lines
Copy Chris and linux-mmc, as I assume that the patch should go via mmc tree after the merge window.
Quoted 5 lines · Marek Vasut
The write-protect GPIO is inverted on some boards. Handle such case.
Signed-off-by Marek Vasut <[email protected]>Cc Shawn Guo <[email protected]>Cc Fabio Estevam <[email protected]>
Quoted 5 lines
Acked-by Shawn Guo <[email protected]>A coupe of nits though:
The subject prefix can better be "mmc: mxs-mmc: ".
Want me to resend it ?
Quoted 55 lines
Quoted 42 lines
---
Documentation/devicetree/bindings/mmc/mxs-mmc.txt | 1 + drivers/mmc/host/mxs-mmc.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-)(quoted diff) +0
-0
b/Documentation/devicetree/bindings/mmc/mxs-mmc.txtindex 14d870a..0a7d2cd 100644Documentation/devicetree/bindings/mmc/mxs-mmc.txt +1
-0@@ -13,6 +13,7 @@ Required properties: Optional properties: - wp-gpios: Specify GPIOs for write protection +- wp-inverted: Set if the write protection GPIO is inverted Examples:drivers/mmc/host/mxs-mmc.c +2
-0@@ -164,16 +164,23 @@ struct mxs_mmc_host {spinlock_t lock;int sdio_irq_en;int wp_gpio; + int wp_inverted:1; };static int mxs_mmc_get_ro (struct mmc_host *mmc) {struct mxs_mmc_host *host =mmc_priv (mmc); +int ret;if (!gpio_is_valid (host->wp_gpio))drivers/mmc/host/mxs-mmc.c struct mxs_mmc_host {
Quoted 10 lines
drivers/mmc/host/mxs-mmc.c +6
-1return -EINVAL ; -return gpio_get_value (host->wp_gpio); + ret =gpio_get_value (host->wp_gpio); + +if (host->wp_inverted) + ret = !ret; + +return ret;The above lines can just be the one below?
Quoted 1 line
return (host->wp_inverted) ? !ret : ret;
I'd prefer to avoid the ternary operator, it's more readable as it is.
Quoted 2 lines
Quoted 2 lines
}
Best regards,
Marek Vasut
PATCH 4/4 MXS-MMC: Add wp-inverted property
Quoted 4 lines · Marek Vasut
Quoted 1 line
The subject prefix can better be "mmc: mxs-mmc: ".
Want me to resend it ?
It's Chris' call.
Regards,
Shawn
PATCH 4/4 MXS-MMC: Add wp-inverted property
Hi,
Quoted 6 lines · Shawn Guo
Quoted 4 lines · Marek Vasut
Quoted 1 line
The subject prefix can better be "mmc: mxs-mmc: ".
Want me to resend it ?
It's Chris' call.
Yes, please -- actually not just because of the subject prefix, which I wouldn't mind fixing myself, but because I like having patches posted to linux-mmc@ before they're applied.
Thanks!
- Chris.
Signature · 2 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child
PATCH 4/4 MXS-MMC: Add wp-inverted property
Dear Chris Ball,
Quoted 6 lines
Hi,
Quoted 3 lines · Shawn Guo
Quoted 2 lines · Marek Vasut
Quoted 1 line
The subject prefix can better be "mmc: mxs-mmc: ".
Quoted 7 lines
Quoted 3 lines
Quoted 1 line
Want me to resend it ?
It's Chris' call.
Yes, please -- actually not just because of the subject prefix, which I wouldn't mind fixing myself, but because I like having patches posted to linux-mmc@ before they're applied.
Fixed now
Quoted 2 lines
Thanks!
You're welcome :)
Quoted 2 lines
- Chris.
Best regards,
Marek Vasut
PATCH 4/4 MXS-MMC: Add wp-inverted property
In reply to Marek VasutHi,
Quoted 52 lines · Marek Vasut
The write-protect GPIO is inverted on some boards. Handle such case.
Signed-off-by Marek Vasut <[email protected]>Cc Shawn Guo <[email protected]>Cc Fabio Estevam <[email protected]>--- Documentation/devicetree/bindings/mmc/mxs-mmc.txt | 1 + drivers/mmc/host/mxs-mmc.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-)Documentation/devicetree/bindings/mmc/mxs-mmc.txt +1
-0@@ -13,6 +13,7 @@ Required properties: Optional properties: - wp-gpios: Specify GPIOs for write protection +- wp-inverted: Set if the write protection GPIO is inverted Examples:drivers/mmc/host/mxs-mmc.c +8
-1@@ -164,16 +164,23 @@ struct mxs_mmc_host {spinlock_t lock;int sdio_irq_en;int wp_gpio; + int wp_inverted:1; };static int mxs_mmc_get_ro (struct mmc_host *mmc) {struct mxs_mmc_host *host =mmc_priv (mmc); +int ret;if (!gpio_is_valid (host->wp_gpio))return -EINVAL ; -return gpio_get_value (host->wp_gpio); + ret =gpio_get_value (host->wp_gpio); + +if (host->wp_inverted) + ret = !ret; + +return ret; }static int mxs_mmc_get_cd (struct mmc_host *mmc)
drivers/mmc/host/mxs-mmc.c static int mxs_mmc_probe(struct platform_device *pdev) · line 798
Quoted 6 lines
drivers/mmc/host/mxs-mmc.c +2
-0@@ -786,6 +793,8 @@ static int mxs_mmc_probe(struct platform_device *pdev)else if (bus_width ==8 ) mmc->caps |=MMC_CAP_4_BIT_DATA |MMC_CAP_8_BIT_DATA ; host->wp_gpio =of_get_named_gpio (np,"wp-gpios" ,0 ); +if (of_find_property (np,"wp-inverted" ,NULL )) + host->wp_inverted =1 ;
Why not simply specify the GPIO in question as being active-low in the GPIO definition and use of_get_named_gpio_flags()?
Lothar Wa?mann
Signature · 9 lines
___________________________________________________________ Ka-Ro electronics GmbH | Pascalstra?e 22 | D - 52076 Aachen Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10 Gesch?ftsf?hrer: Matthias Kaussen Handelsregistereintrag: Amtsgericht Aachen, HRB 4996 www.karo-electronics.de | info at karo-electronics.de ___________________________________________________________
PATCH 4/4 MXS-MMC: Add wp-inverted property
Dear Lothar Wa?mann,
Quoted 71 lines
Hi,
Quoted 68 lines · Marek Vasut
The write-protect GPIO is inverted on some boards. Handle such case.
Signed-off-by Marek Vasut <[email protected]>Cc Shawn Guo <[email protected]>Cc Fabio Estevam <[email protected]>---
Documentation/devicetree/bindings/mmc/mxs-mmc.txt | 1 + drivers/mmc/host/mxs-mmc.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-)(quoted diff) +0
-0
b/Documentation/devicetree/bindings/mmc/mxs-mmc.txtindex 14d870a..0a7d2cd 100644Documentation/devicetree/bindings/mmc/mxs-mmc.txt +1
-0@@ -13,6 +13,7 @@ Required properties: Optional properties: - wp-gpios: Specify GPIOs for write protection +- wp-inverted: Set if the write protection GPIO is inverted Examples:drivers/mmc/host/mxs-mmc.c +8
-1@@ -164,16 +164,23 @@ struct mxs_mmc_host {spinlock_t lock;int sdio_irq_en;int wp_gpio; + int wp_inverted:1; };static int mxs_mmc_get_ro (struct mmc_host *mmc) {struct mxs_mmc_host *host =mmc_priv (mmc); +int ret;if (!gpio_is_valid (host->wp_gpio))return -EINVAL ; -return gpio_get_value (host->wp_gpio); + ret =gpio_get_value (host->wp_gpio); + +if (host->wp_inverted) + ret = !ret; + +return ret; }static int mxs_mmc_get_cd (struct mmc_host *mmc)@@ -786,6 +793,8 @@ static int mxs_mmc_probe(struct platform_device *pdev) else if (bus_width == 8) mmc->caps |=MMC_CAP_4_BIT_DATA |MMC_CAP_8_BIT_DATA ;
Quoted 7 lines
drivers/mmc/host/mxs-mmc.c static int mxs_mmc_probe(struct platform_device *pdev) · line 797
Quoted 4 lines
drivers/mmc/host/mxs-mmc.c +2
-0host->wp_gpio =of_get_named_gpio (np,"wp-gpios" ,0 ); +if (of_find_property (np,"wp-inverted" ,NULL )) + host->wp_inverted =1 ;Why not simply specify the GPIO in question as being active-low in the GPIO definition and use
of_get_named_gpio_flags()?
Just followed the cd-inverted pattern. Thanks for the hint, will poke into it.
Quoted 2 lines
Lothar Wa?mann
Best regards,
Marek Vasut
PATCH 1/4 GPMI-NAND: Define ecc.strength
In reply to Marek VasutSo non-DT probe has the same issue? Or this is a DT probe only issue?
Copy linux-mtd list and Artem Bityutskiy on this.
Signature · 2 lines
Regards, Shawn
Quoted 75 lines · Marek Vasut
The ecc.strength wasn't set, resulting in the following crash:
[ 2.550000] kernel BUG at drivers/mtd/nand/nand_base.c:3347! [ 2.550000] Internal error: Oops - BUG: 0 [#1] ARM [ 2.550000] Modules linked in: [ 2.550000] CPU: 0 Not tainted (3.4.0-rc7-next-20120518-dirty #1211) [ 2.550000] PC is at nand_scan_tail+0x328/0x650 [ 2.550000] LR is at nand_scan_tail+0x328/0x650 [ 2.550000] pc : [<c020841c>] lr : [<c020841c>] psr: 20000013 [ 2.550000] sp : c7443ea8 ip : c7448000 fp : c043dc70 [ 2.550000] r10: 00000000 r9 : c059dd20 r8 : c7526300 [ 2.550000] r7 : 00000001 r6 : c7479c08 r5 : c7526300 r4 : c7526098 [ 2.550000] r3 : c7448000 r2 : 00000000 r1 : 00000001 r0 : 00000034 [ 2.550000] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel [ 2.550000] Control: 0005317f Table: 40004000 DAC: 00000017 [ 2.550000] Process swapper (pid: 1, stack limit = 0xc7442270) [ 2.550000] Stack: (0xc7443ea8 to 0xc7444000) [ 2.550000] 3ea0: c7526000 00000000 c7479c08 c02f68e0 c03d50ec c7526000 [ 2.550000] 3ec0: c747c6e0 00000000 c0ae7720 00000004 00000000 00000000 c7479c08 c0ae7720 [ 2.550000] 3ee0: c7479c3c c0593e20 c7572200 c01f6618 c01f6604 c01f55b0 c7479c08 c0593e20 [ 2.550000] 3f00: c7479c3c c059dd20 c7572200 c01f57cc 00000000 c0593e20 c01f5738 c01f3d40 [ 2.550000] 3f20: c74038a8 c74767d0 c0593e20 c04475ec c05901b8 c01f4e18 c03d50e0 c019d438 [ 2.550000] 3f40: c7403800 c0593e20 c04475ec 00000000 c059dd20 c04475f8 c7442000 c01f5a70 [ 2.550000] 3f60: 00000000 c044e98c c04475ec 00000000 c059dd20 c04475f8 c7442000 c043dc7c [ 2.550000] 3f80: c044e98c c0008824 c03d6c30 c040c4e4 00000006 00000006 c03b0ce4 c0bf54e0 [ 2.550000] 3fa0: c044e98c c04475ec 00000006 c04475f8 0000004c c042a21c 00000000 c042a8b8 [ 2.550000] 3fc0: 00000006 00000006 c042a21c 00000000 00000000 00000000 00000000 c042a7bc [ 2.550000] 3fe0: c000fab4 00000013 00000000 00000000 00000000 c000fab4 efbbfaa5 eaeafefe [ 2.550000] [<c020841c>] (nand_scan_tail+0x328/0x650) from [<c02f68e0>] (gpmi_nand_probe+0x43c/0x5a4) [ 2.550000] [<c02f68e0>] (gpmi_nand_probe+0x43c/0x5a4) from [<c01f6618>] (platform_drv_probe+0x14/0x18) [ 2.550000] [<c01f6618>] (platform_drv_probe+0x14/0x18) from [<c01f55b0>] (driver_probe_device+0x74/0x1fc) [ 2.550000] [<c01f55b0>] (driver_probe_device+0x74/0x1fc) from [<c01f57cc>] (__driver_attach+0x94/0x98) [ 2.550000] [<c01f57cc>] (__driver_attach+0x94/0x98) from [<c01f3d40>] (bus_for_each_dev+0x50/0x80) [ 2.550000] [<c01f3d40>] (bus_for_each_dev+0x50/0x80) from [<c01f4e18>] (bus_add_driver+0x188/0x25c) [ 2.550000] [<c01f4e18>] (bus_add_driver+0x188/0x25c) from [<c01f5a70>] (driver_register+0x78/0x138) [ 2.550000] [<c01f5a70>] (driver_register+0x78/0x138) from [<c043dc7c>] (gpmi_nand_init+0xc/0x30) [ 2.550000] [<c043dc7c>] (gpmi_nand_init+0xc/0x30) from [<c0008824>] (do_one_initcall+0x108/0x17c) [ 2.550000] [<c0008824>] (do_one_initcall+0x108/0x17c) from [<c042a8b8>] (kernel_init+0xfc/0x1bc) [ 2.550000] [<c042a8b8>] (kernel_init+0xfc/0x1bc) from [<c000fab4>] (kernel_thread_exit+0x0/0x8) [ 2.550000] Code: e3530000 1affff76 e59f02d0 eb03c16a (e7f001f2) [ 2.830000] ---[ end trace 3f05d4c0039432f1 ]--- [ 2.840000] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000bSigned-off-by Marek Vasut <[email protected]>Cc Huang Shijie <[email protected]>Cc Shawn Guo <[email protected]>Cc Fabio Estevam <[email protected]>--- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 4 ++++ 1 file changed, 4 insertions(+)drivers/mtd/nand/gpmi-nand/gpmi-nand.c +4
-0@@ -1436,6 +1436,9 @@ static int gpmi_pre_bbt_scan(struct gpmi_nand_data *this)if (ret)return ret; +/* Adjust the ECC strength according to the chip. */ + this->nand.ecc.strength = this->bch_geometry.ecc_strength; +/* NAND boot init, depends on the gpmi_set_geometry(). */ return nand_boot_init (this); }@@ -1494,6 +1497,7 @@ static int __devinit gpmi_nfc_init(struct gpmi_nand_data *this) chip->options |=NAND_NO_SUBPAGE_WRITE ; chip->ecc.mode =NAND_ECC_HW ; chip->ecc.size =1 ; + chip->ecc.strength =8 ; chip->ecc.layout = &gpmi_hw_ecclayout;/* Allocate a temporary DMA buffer for reading ID in the nand_scan() */ Signature · 1 line
1.7.10
PATCH 1/4 GPMI-NAND: Define ecc.strength
Dear Shawn Guo,
Quoted 1 line
So non-DT probe has the same issue? Or this is a DT probe only issue?
I started using DT, so I'm now fixing everything to work like it used to. Damn this DT conversion broke about everything.
Quoted 95 lines
Copy linux-mtd list and Artem Bityutskiy on this.
Quoted 92 lines
The ecc.strength wasn't set, resulting in the following crash:
[ 2.550000] kernel BUG at drivers/mtd/nand/nand_base.c:3347! [ 2.550000] Internal error: Oops - BUG: 0 [#1] ARM [ 2.550000] Modules linked in: [ 2.550000] CPU: 0 Not tainted (3.4.0-rc7-next-20120518-dirty #1211) [ 2.550000] PC is at nand_scan_tail+0x328/0x650 [ 2.550000] LR is at nand_scan_tail+0x328/0x650 [ 2.550000] pc : [<c020841c>] lr : [<c020841c>] psr: 20000013 [ 2.550000] sp : c7443ea8 ip : c7448000 fp : c043dc70 [ 2.550000] r10: 00000000 r9 : c059dd20 r8 : c7526300 [ 2.550000] r7 : 00000001 r6 : c7479c08 r5 : c7526300 r4 : c7526098 [ 2.550000] r3 : c7448000 r2 : 00000000 r1 : 00000001 r0 : 00000034 [ 2.550000] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel [ 2.550000] Control: 0005317f Table: 40004000 DAC: 00000017 [ 2.550000] Process swapper (pid: 1, stack limit = 0xc7442270) [ 2.550000] Stack: (0xc7443ea8 to 0xc7444000) [ 2.550000] 3ea0: c7526000 00000000 c7479c08
c02f68e0c03d50ecc7526000[ 2.550000] 3ec0:c747c6e000000000c0ae772000000004 00000000 00000000c7479c08c0ae7720[ 2.550000]
3ee0:c7479c3cc0593e20c7572200c01f6618c01f6604c01f55b0c7479c08c0593e20[ 2.550000] 3f00:c7479c3cc059dd20c7572200c01f57cc
00000000c0593e20c01f5738c01f3d40[ 2.550000] 3f20:c74038a8c74767d0c0593e20c04475ecc05901b8c01f4e18c03d50e0c019d438[ 2.550000] 3f40:c7403800c0593e20c04475ec00000000c059dd20c04475f8c7442000c01f5a70[ 2.550000] 3f60: 00000000c044e98cc04475ec
00000000c059dd20c04475f8c7442000c043dc7c[ 2.550000] 3f80:c044e98cc0008824c03d6c30c040c4e400000006 00000006c03b0ce4c0bf54e0[ 2.550000] 3fa0: c044e98c c04475ec 00000006 c04475f8 0000004c
c042a21c00000000c042a8b8[ 2.550000] 3fc0: 00000006 00000006c042a21c00000000 00000000 00000000 00000000c042a7bc[ 2.550000]
3fe0:c000fab400000013 00000000 00000000 00000000c000fab4efbbfaa5
eaeafefe [ 2.550000] [<c020841c>] (nand_scan_tail+0x328/0x650) from
[<c02f68e0>] (gpmi_nand_probe+0x43c/0x5a4) [ 2.550000] [<c02f68e0>]
(gpmi_nand_probe+0x43c/0x5a4) from [<c01f6618>]
(platform_drv_probe+0x14/0x18) [ 2.550000] [<c01f6618>]
(platform_drv_probe+0x14/0x18) from [<c01f55b0>]
(driver_probe_device+0x74/0x1fc) [ 2.550000] [<c01f55b0>]
(driver_probe_device+0x74/0x1fc) from [<c01f57cc>]
(__driver_attach+0x94/0x98) [ 2.550000] [<c01f57cc>]
(__driver_attach+0x94/0x98) from [<c01f3d40>]
(bus_for_each_dev+0x50/0x80) [ 2.550000] [<c01f3d40>]
(bus_for_each_dev+0x50/0x80) from [<c01f4e18>]
(bus_add_driver+0x188/0x25c) [ 2.550000] [<c01f4e18>]
(bus_add_driver+0x188/0x25c) from [<c01f5a70>]
(driver_register+0x78/0x138) [ 2.550000] [<c01f5a70>]
(driver_register+0x78/0x138) from [<c043dc7c>] (gpmi_nand_init+0xc/0x30)[ 2.550000] [<c043dc7c>] (gpmi_nand_init+0xc/0x30) from [<c0008824>] (do_one_initcall+0x108/0x17c) [ 2.550000] [<c0008824>] (do_one_initcall+0x108/0x17c) from [<c042a8b8>] (kernel_init+0xfc/0x1bc) [ 2.550000] [<c042a8b8>] (kernel_init+0xfc/0x1bc) from [<c000fab4>] (kernel_thread_exit+0x0/0x8) [ 2.550000] Code: e3530000 1affff76 e59f02d0 eb03c16a (e7f001f2) [ 2.830000] ---[ end trace 3f05d4c0039432f1 ]--- [ 2.840000] Kernel panic - not syncing: Attempted to kill init!exitcode=0x0000000b
Signed-off-by Marek Vasut <[email protected]>Cc Huang Shijie <[email protected]>Cc Shawn Guo <[email protected]>Cc Fabio Estevam <[email protected]>---
drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 4 ++++ 1 file changed, 4 insertions(+)(quoted diff) +0
-0
b/drivers/mtd/nand/gpmi-nand/gpmi-nand.cindex 9b4c109..f5f3d761 100644drivers/mtd/nand/gpmi-nand/gpmi-nand.c +3
-0@@ -1436,6 +1436,9 @@ static int gpmi_pre_bbt_scan(struct gpmi_nand_data *this)if (ret)return ret; +/* Adjust the ECC strength according to the chip. */ + this->nand.ecc.strength = this->bch_geometry.ecc_strength; +drivers/mtd/nand/gpmi-nand/gpmi-nand.c +0
-0/* NAND boot init, depends on the gpmi_set_geometry(). */ return nand_boot_init (this); }@@ -1494,6 +1497,7 @@ static int __devinit gpmi_nfc_init(struct gpmi_nand_data *this) chip->options |= NAND_NO_SUBPAGE_WRITE; chip->ecc.mode =NAND_ECC_HW ; chip->ecc.size =1 ;
Quoted 5 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c static int __devinit gpmi_nfc_init(struct gpmi_nand_data *this) · line 1503
Quoted 5 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +1
-0+ chip->ecc.strength =8 ;drivers/mtd/nand/gpmi-nand/gpmi-nand.c +0
-0chip->ecc.layout = &gpmi_hw_ecclayout;/* Allocate a temporary DMA buffer for reading ID in the nand_scan() */
Best regards,
Marek Vasut
PATCH 1/4 GPMI-NAND: Define ecc.strength
Quoted 7 lines · Marek Vasut
Dear Shawn Guo,
Quoted 1 line
So non-DT probe has the same issue? Or this is a DT probe only issue?
I started using DT, so I'm now fixing everything to work like it used to. Damn this DT conversion broke about everything.
So you are saying the issue is introduced by gpmi-nand DT conversion?
Signature · 2 lines
Regards, Shawn
PATCH 1/4 GPMI-NAND: Define ecc.strength
Dear Shawn Guo,
Quoted 9 lines · Marek Vasut
Quoted 6 lines
Dear Shawn Guo,
Quoted 1 line
So non-DT probe has the same issue? Or this is a DT probe only issue?
I started using DT, so I'm now fixing everything to work like it used to. Damn this DT conversion broke about everything.
So you are saying the issue is introduced by gpmi-nand DT conversion?
I doubt so ... but noone ever could test it without DT bindings as you NAKed/stalled every single attempt to add the platform binding code. So this code was rotting in the tree, who knows how many bugs are still in it. Now I guess it's about time to start squashing the bugs.
Best regards,
Marek Vasut
PATCH 1/4 GPMI-NAND: Define ecc.strength
? 2012?05?21? 10:40, Marek Vasut ??:
Quoted 5 lines
I doubt so ... but noone ever could test it without DT bindings as you NAKed/stalled every single attempt to add the platform binding code. So this code was rotting in the tree, who knows how many bugs are still in it. Now I guess it's about time to start squashing the bugs.
I checked the latest l2-mtd code. The bug does exit if the gpmi-nand driver can works(actually it can not).
I will test your patch.
Anyway, this patch should be sent to Artem, not the arm-soc.
thanks
Huang Shijie
PATCH 1/4 GPMI-NAND: Define ecc.strength
Dear Huang Shijie,
Quoted 8 lines
? 2012?05?21? 10:40, Marek Vasut ??:
Quoted 4 lines
I doubt so ... but noone ever could test it without DT bindings as you NAKed/stalled every single attempt to add the platform binding code. So this code was rotting in the tree, who knows how many bugs are still in it. Now I guess it's about time to start squashing the bugs.
I checked the latest l2-mtd code. The bug does exit if the gpmi-nand driver can works(actually it can not).
There's also the bug where you need to put gpmi at 8000c000 into the DTS file instead of gpmi-nand at 8000c000 ... maybe you should fix it?
Also, there's still the bug with subpage write size, "GPMI-NAND: Wrong ECC size in driver" thread in linux-mtd. That thread kind of died, but gpmi-nand is still broken in that way, it's depending on loose end of the mtd stack there. Won't hurt fixing that too, there was even a fix proposed.
Quoted 3 lines
I will test your patch.
Anyway, this patch should be sent to Artem, not the arm-soc.
Resent, fixed, sorry for the inconvenience.
Quoted 3 lines
thanks
Huang Shijie
Best regards,
Marek Vasut
PATCH 1/4 GPMI-NAND: Define ecc.strength
In reply to Marek VasutQuoted 3 lines · Marek Vasut
Quoted 1 line
So you are saying the issue is introduced by gpmi-nand DT conversion?
I doubt so ...
I can be very sure that you haven't looked at the gpmi-nand DT conversion patches at all.
The bug has been there since day one. The commit cfbc855b (mtd: nand:
add sanity check of ecc strength to nand_scan_tail()) added a BUG() to catch it recently.
So please at least spend some time to know the real cause before pointing your figure to DT conversion.
Signature · 2 lines
Regards, Shawn
PATCH 1/4 GPMI-NAND: Define ecc.strength
Dear Shawn Guo,
Quoted 8 lines · Marek Vasut
Quoted 3 lines
Quoted 1 line
So you are saying the issue is introduced by gpmi-nand DT conversion?
I doubt so ...
I can be very sure that you haven't looked at the gpmi-nand DT conversion patches at all.
Quoted 6 lines
The bug has been there since day one. The commit
cfbc855b(mtd: nand:
add sanity check of ecc strength tonand_scan_tail()) added aBUG()to catch it recently.So please at least spend some time to know the real cause before pointing your figure to DT conversion.
Well ... since noone was really able to test the patch, noone figured out it's broken. We can agree on that, right.
And btw. by "I doubt so ..." I means exactly that I doubt the bug was caused by the DT conversion.
Best regards,
Marek Vasut
PATCH 1/4 GPMI-NAND: Define ecc.strength
In reply to Shawn GuoHi Marek:
Quoted 9 lines · Marek Vasut
Quoted 6 lines
Dear Shawn Guo,
Quoted 1 line
So non-DT probe has the same issue? Or this is a DT probe only issue?
I started using DT, so I'm now fixing everything to work like it used to. Damn this DT conversion broke about everything.
So you are saying the issue is introduced by gpmi-nand DT conversion?
thanks for your work. :)
But the gpmi nand driver should not work right now.
The DT for gpmi-nand is in Artem's l2-mtd tree.
And the device node item in DTS for gpmi is not added now.( I ever submitted, but not accepted.)
Also the pinctrl item for gpmi is also not added not.
So I suggest you test it again when the next merge window opens, and all the code is merged to kernel.
If the bug still exits, please submit a fix patch then.
By the way, I really did not meet your error when I test the DT patches for gpmi.
thanks
Huang Shijie
PATCH 1/4 GPMI-NAND: Define ecc.strength
Dear Huang Shijie,
Quoted 6 lines
Hi Marek:
Quoted 5 lines · Marek Vasut
Quoted 4 lines
Dear Shawn Guo,
Quoted 1 line
So non-DT probe has the same issue? Or this is a DT probe only issue?
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
I started using DT, so I'm now fixing everything to work like it used to. Damn this DT conversion broke about everything.
So you are saying the issue is introduced by gpmi-nand DT conversion?
thanks for your work. :)
But the gpmi nand driver should not work right now.
Why not? I tested, I could at least read stuff from it.
Quoted 3 lines
The DT for gpmi-nand is in Artem's l2-mtd tree.
And the device node item in DTS for gpmi is not added now.( I ever submitted, but not accepted.)
Well I crafted one myself, I need different pinmux settings anyway so I added my own pinmux configuration.
Quoted 4 lines
Also the pinctrl item for gpmi is also not added not.
So I suggest you test it again when the next merge window opens, and all the code is merged to kernel.
Please ... Shawn explained that this bug will still be there. So why not get it in early to fix bug asap. I'll resend to artem now.
Quoted 4 lines
If the bug still exits, please submit a fix patch then.
By the way, I really did not meet your error when I test the DT patches for gpmi.
Can you post your snippet?
Quoted 2 lines
thanks
Huang Shijie
Best regards,
Marek Vasut