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