mtd: ubi: Fix worker handling
Fixes a bug found on thuban boards, which were for 2 years in
a long-term test with varying temperatures. They showed
problems in u-boot when attaching the ubi partition:
U-Boot# run flash_self_test
Booting from nand
set A...
UBI: attaching mtd1 to ubi0
UBI: scanning is finished
data abort
pc : [<
87f97c3c>] lr : [<
87f97c28>]
reloc pc : [<
8012cc3c>] lr : [<
8012cc28>]
sp :
85f686e8 ip :
00000020 fp :
000001f7
r10:
8605ce40 r9 :
85f68ef8 r8 :
0001f000
r7 :
00000001 r6 :
00000006 r5 :
0001f000 r4 :
85f6ecc0
r3 :
00000000 r2 :
44e35000 r1 :
87fcbcd4 r0 :
87fc755b
Flags: nZCv IRQs off FIQs on Mode SVC_32
Resetting CPU ...
Reason is, that accidentially the U-Boot implementation
from __schedule_ubi_work() did not check the flag
ubi->thread_enabled and started with wearleveling work,
but ubi did not have setup all structures at this point
and crashes.
Solve this problem by splitting work scheduling and processing.
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Heiko Schocher <hs@denx.de>