On Thu, Apr 30, 2009 at 05:48:51PM +0200, Florian Fainelli wrote:
> Building flash_setup while CONFIG_MTD is not enabled does work, but
> results in the following oops while booting:
>
> Bootbus flash: Setting flash for 32MB flash at 0x1dc00000
> Kernel bug detected[#1]:
> Cpu 0
> $ 0 : 0000000000000000 0000000000000010 000000000000003d 0000000000000002
> $ 4 : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000d52
> $ 8 : 0000000000000d52 000000000000003e 000000000000000a 0000000000000d17
> $12 : 0000000000000031 ffffffff81105e2c 00000000f34c39b5 0000000017da5c01
> $16 : ffffffff813ab588 ffffffff8138b514 0000000000000001 ffffffff814d2390
> $20 : 0000000000000010 0000000000000010 0000000000000000 0000000000000000
> $24 : 000000000931a549 ffffffff8110e68c
> $28 : a800000007828000 a80000000782bf00 0000000000000000 ffffffff8138b594
> Hi : 0000000000000191
> Lo : 36978d4fdf254137
> epc : ffffffff8138b594 0xffffffff8138b594
> Not tainted
> ra : ffffffff8138b594 0xffffffff8138b594
> Status: 10008ce3 KX SX UX KERNEL EXL IE
> Cause : 00800024
> PrId : 000d0601 (Cavium Octeon)
> Modules linked in:
> Process swapper (pid: 1, threadinfo=a800000007828000, task=a800000007825540,
> tls=0000000000000000)
> Stack : ffffffff813ab580 ffffffff8110d918 0000000007885780 ffffffff81385080
> ffffffff81385080 ffffffff8116ca10 3135310000000000 0000000000000000
> 0000000000000098 ffffffff81360000 ffffffff81350000 ffffffff813ab588
> ffffffff813ab5d0 ffffffff81350000 ffffffff814d2390 ffffffff813862e8
> 000000000000ffff 0000000000000000 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> 0000000000000000 ffffffff81114f38 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> Call Trace:[<ffffffff8110d918>] 0xffffffff8110d918
> [<ffffffff8116ca10>] 0xffffffff8116ca10
> [<ffffffff813862e8>] 0xffffffff813862e8
> [<ffffffff81114f38>] 0xffffffff81114f38
>
> This patch makes flash_setup be compiled only when CONFIG_MTD
> which solves issue, the MTD driver then fails to register but this is
> less critical.
I think your code blows up if !CONFIG_MTD_COMPLEX_MAPPINGS and
!CONFIG_MTD_MAP_BANK_WIDTH_1 in which case simple_map_init is defined as:
#define simple_map_init(map) BUG_ON(!map_bankwidth_supported((map)->bankwidth))
bankwidth is 1, so:
static inline int map_bankwidth_supported(int w)
{
switch (w) {
#ifdef CONFIG_MTD_MAP_BANK_WIDTH_1
case 1:
#endif
return 1;
[...]
default:
return 0;
}
}
Ralf
|