On Sun, 2015-01-11 at 12:55 +0100, Lars Doelle wrote:
> Hi everyone,
> 
> the boot log shows a very unhappy nand driver.

What kernel version?

> 
> --
> [    0.682894] Division by zero in kernel.
> [    0.689714] [<c001540c>] (unwind_backtrace+0x0/0x12c) from 
> [<c03d41f8>] (Ldiv0+0x8/0x10)
> [    0.696123] [<c03d41f8>] (Ldiv0+0x8/0x10) from [<c047351c>] 
> (get_cmu_clk+0x30/0x40)
> [    0.703360] [<c047351c>] (get_cmu_clk+0x30/0x40) from 
> [<c047354c>] (set_nand_clock+0x20/0x80)
> [    0.710497] [<c047354c>] (set_nand_clock+0x20/0x80) from 
> [<c09b2bb4>] (nand_init+0x68/0x1c4)
> [    0.717906] [<c09b2bb4>] (nand_init+0x68/0x1c4) from [<c0008698>] 
> (do_one_initcall+0x114/0x16c)
> [    0.725577] [<c0008698>] (do_one_initcall+0x114/0x16c) from 
> [<c09979f8>] (kernel_init+0x190/0x228)
> [    0.733160] [<c09979f8>] (kernel_init+0x190/0x228) from 
> [<c000f7ec>] (kernel_thread_exit+0x0/0x8)
> [    0.736507] [NAND] nand driver version: 0x2 0x9
> [    0.742146] [SCAN_ERR] search nand physical architecture 
> parameter failed!
> [    0.744506] [NAND]init_blklayer fail
> --
> 
> Apparently, this happens in 
> drivers/block/sunxi_nand/nfd/nand_blk.c:1107
> 
> --
> #ifndef USE_SYS_CLK
> __u32 get_cmu_clk(void)
> {
>         __u32 reg_val;
>         __u32 div_p, factor_n;
>         __u32 factor_k, factor_m;
>         __u32 clock;
> 
>         reg_val  = *(volatile unsigned int *)(0xf1c20000 + 0x20);
>         div_p    = (reg_val >> 16) & 0x3;
>         factor_n = (reg_val >> 8) & 0x1f;
>         factor_k = ((reg_val >> 4) & 0x3) + 1;
>         factor_m = ((reg_val >> 0) & 0x3) + 1;
> 
>         clock = 24 * factor_n * factor_k/div_p/factor_m;
> 
>         return clock;
> }
> --
> 
> From this code, since factor_m > 0, it is  div_p being zero.
> 
> The related Android log lines are:
> --
> <4>[    1.651812] nand_init,line:1400
> <4>[    1.651837] [NAND]nand driver, init.
> <4>[    1.651852] [NAND] nand driver(A20) version: 0x2, 0x12, data: 
> 20130627 1522
> <4>[    1.651863] [NAND] nand clk request start
> <4>[    1.651898] [NAND] nand clk request ok!
> <4>[    1.651999] [NAND DMA] request dma success
> <4>[    1.652011] [NAND DMA] set fulldone_cb success
> <4>[    1.652410] nand interrupt register ok
> <4>[    1.652426] [NAND] get nand_good_block_ratio from script: 870 
> <4>[    1.652506] [NAND DMA] start 
> dma*****************************************
> --
> 
> Since the driver mentions explicitly '(A20)', I might be running an 
> unsuited driver. Is this a known A20 issue or particular to my 
> installation? Instead using CONFIG_NAND, should I better
> give CONFIG_NAND_TEST a shot?
> 
> The A20 handbook does not mention the register, but
> 
> ./arch/arm/plat-sunxi/include/plat/platform.h:182 has a
> #define SW_VA_CCM_IO_BASE                 0xf1c20000,
> 
> and finally relates to CCM_PLL5_CFG this via
> http://linux-sunxi.org/Clock_Control_Module#Timer_Registers
> where it is cited as being A10 material.
> 
> But even if it is A10-only material, something appears to be fishy 
> either the code or the wiki page:
> 
> > CCM_PLL5_P  16:17  Read/Write  0x00
> >    0x00 = 1
> >    0x01 = 2
> >    0x02 = 3
> >    0x03 = 4
> > PLL5 external factor P
> 
> Here, 0x00 is perfectly legal and the above code should read IMO
> 
> >        div_p    = ((reg_val >> 16) & 0x3) + 1;
> 
> But perhaps I'm reading this wrong.
> 
> Kind regards,
> 
>   Lars
> 

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to