[RFC] mtd: fsl-quadspi: Allow driver to probe
Frank.Li at freescale.com
Frank.Li at freescale.com
Fri Dec 5 07:40:13 PST 2014
> -----Original Message-----
> From: linux-mtd [mailto:linux-mtd-bounces at lists.infradead.org] On Behalf Of
> Fabio Estevam
> Sent: Thursday, December 04, 2014 4:18 PM
> To: computersforpeace at gmail.com
> Cc: Estevam Fabio-R49496; b32955 at freescale.com; linux-mtd at lists.infradead.org
> Subject: [RFC] mtd: fsl-quadspi: Allow driver to probe
>
> From: Fabio Estevam <fabio.estevam at freescale.com>
>
> Calling clk_rate causes the kernel to oops:
It should fix clock part.
Best regards
Frank Li
>
> [ 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
>
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
More information about the linux-mtd
mailing list