[RFC] mtd: fsl-quadspi: Allow driver to probe
Fabio Estevam
festevam at gmail.com
Thu Dec 4 14:19:51 PST 2014
From: Fabio Estevam <fabio.estevam at freescale.com>
Calling clk_rate causes the kernel to oops:
[ 1.037920] Division by zero in kernel.
[ 1.041807] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0-rc7-next-20141204-00002-g5aa23e1 #2143
[ 1.050967] Hardware name: Freescale i.MX6 SoloX (Device Tree)
[ 1.056853] Backtrace:
[ 1.059360] [<80011ea0>] (dump_backtrace) from [<8001203c>] (show_stack+0x18/0x1c)
[ 1.066982] r6:00000000 r5:00000000 r4:00000000 r3:00000000
[ 1.072754] [<80012024>] (show_stack) from [<806b7100>] (dump_stack+0x88/0xa4)
[ 1.080038] [<806b7078>] (dump_stack) from [<80011d20>] (__div0+0x18/0x20)
[ 1.086958] r5:be018500 r4:be017c00
[ 1.090600] [<80011d08>] (__div0) from [<802aa418>] (Ldiv0+0x8/0x10)
[ 1.097012] [<80504fbc>] (clk_divider_set_rate) from [<80503ddc>] (clk_change_rate+0x14c/0x17c)
[ 1.105759] r7:00000000 r6:00000000 r5:be018500 r4:00000000
[ 1.111516] [<80503c90>] (clk_change_rate) from [<80503ea0>] (clk_set_rate+0x94/0x98)
[ 1.119391] r8:be7e0368 r7:00000000 r6:be11a000 r5:be018500 r4:00000000 r3:00000000
[ 1.127290] [<80503e0c>] (clk_set_rate) from [<80410558>] (fsl_qspi_probe+0x23c/0x75c)
[ 1.135260] r5:be11a010 r4:be350010
[ 1.138900] [<8041031c>] (fsl_qspi_probe) from [<80385a18>] (platform_drv_probe+0x50/0xac)
[ 1.147214] r10:00000000 r9:80960964 r8:809b3a5c r7:809b3a5c r6:fffffdfb r5:be11a010
[ 1.155180] r4:ffffffed
[ 1.157761] [<803859c8>] (platform_drv_probe) from [<80384360>] (driver_probe_device+0x10c/0x234)
[ 1.166679] r7:00000000 r6:00000000 r5:be11a010 r4:811df1bc
[ 1.172443] [<80384254>] (driver_probe_device) from [<80384524>] (__driver_attach+0x9c/0xa0)
[ 1.180926] r10:00000000 r8:8094cd4c r7:00000000 r6:be11a044 r5:809b3a5c r4:be11a010
[ 1.188904] [<80384488>] (__driver_attach) from [<80382990>] (bus_for_each_dev+0x5c/0x90)
[ 1.197129] r6:80384488 r5:809b3a5c r4:00000000 r3:be10c25c
[ 1.202886] [<80382934>] (bus_for_each_dev) from [<80383e48>] (driver_attach+0x20/0x28)
[ 1.210933] r6:809a6ee0 r5:be396280 r4:809b3a5c
[ 1.215653] [<80383e28>] (driver_attach) from [<80383abc>] (bus_add_driver+0xdc/0x1dc)
[ 1.223606] [<803839e0>] (bus_add_driver) from [<80384be4>] (driver_register+0x80/0xfc)
[ 1.231655] r7:809155ec r6:be393a40 r5:8097e018 r4:809b3a5c
[ 1.237433] [<80384b64>] (driver_register) from [<803858a0>] (__platform_driver_register+0x50/0x64)
[ 1.246523] r5:8097e018 r4:8097e018
[ 1.250162] [<80385850>] (__platform_driver_register) from [<8094cd64>] (fsl_qspi_driver_init+0x18/0x20)
[ 1.259704] [<8094cd4c>] (fsl_qspi_driver_init) from [<80008a7c>] (do_one_initcall+0x88/0x1dc)
[ 1.268375] [<800089f4>] (do_one_initcall) from [<80915e38>] (kernel_init_freeable+0x110/0x1e0)
[ 1.277121] r10:80960970 r9:80960964 r8:000000cc r7:809155ec r6:809d9cc0 r5:00000006
[ 1.285084] r4:8096de1c
[ 1.287661] [<80915d28>] (kernel_init_freeable) from [<806b1bcc>] (kernel_init+0x10/0xf4)
[ 1.295886] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:806b1bbc
[ 1.303832] r4:00000000
[ 1.306430] [<806b1bbc>] (kernel_init) from [<8000ed68>] (ret_from_fork+0x14/0x2c)
[ 1.314025] r4:00000000 r3:00000000
[ 1.318397] fsl-quadspi 21e4000.qspi: s25fl128s (16384 Kbytes)
[ 1.328474] fsl-quadspi 21e4000.qspi: s25fl128s (16384 Kbytes)
[ 1.337139] Division by zero in kernel.
[ 1.341018] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0-rc7-next-20141204-00002-g5aa23e1 #2143
[ 1.350145] Hardware name: Freescale i.MX6 SoloX (Device Tree)
[ 1.356029] Backtrace:
[ 1.358532] [<80011ea0>] (dump_backtrace) from [<8001203c>] (show_stack+0x18/0x1c)
[ 1.366155] r6:00000000 r5:00000000 r4:00000000 r3:00000000
[ 1.371928] [<80012024>] (show_stack) from [<806b7100>] (dump_stack+0x88/0xa4)
[ 1.379210] [<806b7078>] (dump_stack) from [<80011d20>] (__div0+0x18/0x20)
[ 1.386132] r5:be018500 r4:be017c00
[ 1.389771] [<80011d08>] (__div0) from [<802aa418>] (Ldiv0+0x8/0x10)
[ 1.396181] [<80504fbc>] (clk_divider_set_rate) from [<80503ddc>] (clk_change_rate+0x14c/0x17c)
[ 1.404932] r7:be350660 r6:00000000 r5:be018500 r4:00000000
[ 1.410690] [<80503c90>] (clk_change_rate) from [<80503ea0>] (clk_set_rate+0x94/0x98)
[ 1.418564] r8:00000003 r7:be350660 r6:c0990000 r5:be018500 r4:00000000 r3:00000000
[ 1.426462] [<80503e0c>] (clk_set_rate) from [<8041087c>] (fsl_qspi_probe+0x560/0x75c)
[ 1.434427] r5:be11a010 r4:be350010
[ 1.438066] [<8041031c>] (fsl_qspi_probe) from [<80385a18>] (platform_drv_probe+0x50/0xac)
[ 1.446381] r10:00000000 r9:80960964 r8:809b3a5c r7:809b3a5c r6:fffffdfb r5:be11a010
[ 1.454325] r4:ffffffed
[ 1.456930] [<803859c8>] (platform_drv_probe) from [<80384360>] (driver_probe_device+0x10c/0x234)
[ 1.465852] r7:00000000 r6:00000000 r5:be11a010 r4:811df1bc
[ 1.471614] [<80384254>] (driver_probe_device) from [<80384524>] (__driver_attach+0x9c/0xa0)
[ 1.480098] r10:00000000 r8:8094cd4c r7:00000000 r6:be11a044 r5:809b3a5c r4:be11a010
[ 1.488078] [<80384488>] (__driver_attach) from [<80382990>] (bus_for_each_dev+0x5c/0x90)
[ 1.496306] r6:80384488 r5:809b3a5c r4:00000000 r3:be10c25c
[ 1.502070] [<80382934>] (bus_for_each_dev) from [<80383e48>] (driver_attach+0x20/0x28)
[ 1.510124] r6:809a6ee0 r5:be396280 r4:809b3a5c
[ 1.514847] [<80383e28>] (driver_attach) from [<80383abc>] (bus_add_driver+0xdc/0x1dc)
[ 1.522800] [<803839e0>] (bus_add_driver) from [<80384be4>] (driver_register+0x80/0xfc)
[ 1.530849] r7:809155ec r6:be393a40 r5:8097e018 r4:809b3a5c
[ 1.536629] [<80384b64>] (driver_register) from [<803858a0>] (__platform_driver_register+0x50/0x64)
[ 1.545722] r5:8097e018 r4:8097e018
[ 1.549362] [<80385850>] (__platform_driver_register) from [<8094cd64>] (fsl_qspi_driver_init+0x18/0x20)
[ 1.558901] [<8094cd4c>] (fsl_qspi_driver_init) from [<80008a7c>] (do_one_initcall+0x88/0x1dc)
[ 1.567575] [<800089f4>] (do_one_initcall) from [<80915e38>] (kernel_init_freeable+0x110/0x1e0)
[ 1.576325] r10:80960970 r9:80960964 r8:000000cc r7:809155ec r6:809d9cc0 r5:00000006
[ 1.584270] r4:8096de1c
[ 1.586867] [<80915d28>] (kernel_init_freeable) from [<806b1bcc>] (kernel_init+0x10/0xf4)
[ 1.595090] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:806b1bbc
[ 1.603033] r4:00000000
[ 1.605629] [<806b1bbc>] (kernel_init) from [<8000ed68>] (ret_from_fork+0x14/0x2c)
[ 1.613222] r4:00000000 r3:00000000
[ 1.616906] fsl-quadspi 21e4000.qspi: QuadSPI SPI NOR flash driver
If I remove the calls to clk_set_rate the driver can probe:
[ 1.039364] fsl-quadspi 21e4000.qspi: s25fl128s (16384 Kbytes)
[ 1.049301] fsl-quadspi 21e4000.qspi: s25fl128s (16384 Kbytes)
[ 1.057986] fsl-quadspi 21e4000.qspi: QuadSPI SPI NOR flash driver
I don't know what would be the appropriate fix, so marking this as RFC.
Suggestions welcome. Thanks
Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
---
drivers/mtd/spi-nor/fsl-quadspi.c | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
index 39763b9..ed49e1f 100644
--- a/drivers/mtd/spi-nor/fsl-quadspi.c
+++ b/drivers/mtd/spi-nor/fsl-quadspi.c
@@ -601,12 +601,6 @@ static int fsl_qspi_nor_setup(struct fsl_qspi *q)
{
void __iomem *base = q->iobase;
u32 reg;
- int ret;
-
- /* the default frequency, we will change it in the future.*/
- ret = clk_set_rate(q->clk, 66000000);
- if (ret)
- return ret;
/* Init the LUT table. */
fsl_qspi_init_lut(q);
@@ -634,15 +628,10 @@ static int fsl_qspi_nor_setup(struct fsl_qspi *q)
static int fsl_qspi_nor_setup_last(struct fsl_qspi *q)
{
unsigned long rate = q->clk_rate;
- int ret;
if (is_imx6sx_qspi(q))
rate *= 4;
- ret = clk_set_rate(q->clk, rate);
- if (ret)
- return ret;
-
/* Init the LUT table again. */
fsl_qspi_init_lut(q);
--
1.9.1
More information about the linux-mtd
mailing list