Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
/* SPDX-License-Identifier: GPL-2.0 */

/* Copyright (c) 2018-2022 Rockchip Electronics Co. Ltd.
 * date: 2022-08-15
 */
	.arch armv7-a
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 2
	.eabi_attribute 30, 4
	.eabi_attribute 34, 1
	.eabi_attribute 18, 2
	.file	"rk_sftl.c"
	.text
	.syntax unified
	.syntax unified
	.global	__aeabi_uidiv
	.thumb
	.syntax unified
	.align	1
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	l2p_addr_tran, %function
l2p_addr_tran:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, r8, r9, lr}
	.save {r3, r4, r5, r6, r7, r8, r9, lr}
	mov	r7, r1
	ldr	r3, .L3
	mov	r8, r2
	ldrh	r9, [r3, #8]
	ldrh	r6, [r3, #10]
	ldrh	r3, [r3, #14]
	cmp	r3, #4
	itt	eq
	lsleq	r4, r6, #1
	lsreq	r9, r9, #1
	mov	r1, r9
	it	eq
	uxtheq	r6, r4
	ldr	r4, [r0, #4]
	lsrs	r5, r4, #10
	ubfx	r0, r4, #10, #16
	bl	__aeabi_uidiv
	uxth	r0, r0
	uxth	r5, r5
	ubfx	r4, r4, #0, #10
	mls	r5, r0, r9, r5
	mla	r4, r6, r5, r4
	str	r4, [r7]
	str	r0, [r8]
	movs	r0, #0
	pop	{r3, r4, r5, r6, r7, r8, r9, pc}
.L4:
	.align	2
.L3:
	.word	.LANCHOR0
	.fnend
	.size	l2p_addr_tran, .-l2p_addr_tran
	.align	1
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	_copy_from_user, %function
_copy_from_user:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	mov	r6, r0
	mov	r4, r2
	mov	r3, sp
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r3, [r3, #8]
	.syntax unified
@ 157 "./include/linux/uaccess.h" 1
	.syntax unified
adds r7, r1, r2; sbcscc r7, r7, r3; movcc r3, #0
@ 0 "" 2
	.thumb
	.syntax unified
	cbnz	r3, .L8
	bl	arm_copy_from_user
	mov	r5, r0
	cbz	r0, .L5
.L6:
	subs	r4, r4, r5
	mov	r2, r5
	adds	r0, r6, r4
	movs	r1, #0
	bl	memset
.L5:
	mov	r0, r5
	pop	{r3, r4, r5, r6, r7, pc}
.L8:
	mov	r5, r2
	b	.L6
	.fnend
	.size	_copy_from_user, .-_copy_from_user
	.section	.rodata.str1.1,"aMS",%progbits,1
.LC0:
	.ascii	"SFTL version: 5.0.58 20220814\000"
.LC1:
	.ascii	"\012%s\012\000"
.LC2:
	.ascii	"act blk: %x %x %x %x %x %x\012\000"
.LC3:
	.ascii	"buf blk: %x %x %x %x %x %x\012\000"
.LC4:
	.ascii	"tmp blk: %x %x %x %x %x %x\012\000"
.LC5:
	.ascii	"gc blk: %x %x %x %x %x %x\012\000"
.LC6:
	.ascii	"free blk: %x %x %x\012\000"
	.text
	.align	1
	.global	ftl_print_sblk_info
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_print_sblk_info, %function
ftl_print_sblk_info:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r3, r4, lr}
	.save {r4, lr}
	.pad #16
	ldr	r4, .L13
	ldr	r1, .L13+4
	ldr	r0, .L13+8
	bl	sftl_printk
	ldr	r0, .L13+12
	ldrh	r1, [r4, #24]
	ldr	r3, [r4, #72]
	ldrh	r2, [r4, #26]
	ldrh	r3, [r3, r1, lsl #1]
	str	r3, [sp, #8]
	ldrh	r3, [r4, #28]
	str	r3, [sp, #4]
	ldrb	r3, [r4, #32]	@ zero_extendqisi2
	str	r3, [sp]
	ldrb	r3, [r4, #30]	@ zero_extendqisi2
	bl	sftl_printk
	ldrh	r1, [r4, #76]
	ldr	r3, [r4, #72]
	ldrh	r2, [r4, #78]
	ldr	r0, .L13+16
	ldrh	r3, [r3, r1, lsl #1]
	str	r3, [sp, #8]
	ldrh	r3, [r4, #80]
	str	r3, [sp, #4]
	ldrb	r3, [r4, #84]	@ zero_extendqisi2
	str	r3, [sp]
	ldrb	r3, [r4, #82]	@ zero_extendqisi2
	bl	sftl_printk
	ldrh	r1, [r4, #124]
	ldr	r3, [r4, #72]
	ldrh	r2, [r4, #126]
	ldr	r0, .L13+20
	ldrh	r3, [r3, r1, lsl #1]
	str	r3, [sp, #8]
	ldrh	r3, [r4, #128]
	str	r3, [sp, #4]
	ldrb	r3, [r4, #132]	@ zero_extendqisi2
	str	r3, [sp]
	ldrb	r3, [r4, #130]	@ zero_extendqisi2
	bl	sftl_printk
	ldrh	r1, [r4, #172]
	ldr	r3, [r4, #72]
	ldrh	r2, [r4, #174]
	ldr	r0, .L13+24
	ldrh	r3, [r3, r1, lsl #1]
	str	r3, [sp, #8]
	ldrh	r3, [r4, #176]
	str	r3, [sp, #4]
	ldrb	r3, [r4, #180]	@ zero_extendqisi2
	str	r3, [sp]
	ldrb	r3, [r4, #178]	@ zero_extendqisi2
	bl	sftl_printk
	ldrh	r3, [r4, #220]
	ldrh	r2, [r4, #222]
	ldrh	r1, [r4, #224]
	ldr	r0, .L13+28
	add	sp, sp, #16
	@ sp needed
	pop	{r4, lr}
	b	sftl_printk
.L14:
	.align	2
.L13:
	.word	.LANCHOR0
	.word	.LC0
	.word	.LC1
	.word	.LC2
	.word	.LC3
	.word	.LC4
	.word	.LC5
	.word	.LC6
	.fnend
	.size	ftl_print_sblk_info, .-ftl_print_sblk_info
	.align	1
	.global	Ftl_log2
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	Ftl_log2, %function
Ftl_log2:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	movs	r1, #0
	movs	r2, #1
.L16:
	uxth	r3, r1
	cmp	r2, r0
	add	r1, r1, #1
	bls	.L17
	subs	r0, r3, #1
	uxth	r0, r0
	bx	lr
.L17:
	lsls	r2, r2, #1
	b	.L16
	.fnend
	.size	Ftl_log2, .-Ftl_log2
	.align	1
	.global	FtlPrintInfo
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlPrintInfo, %function
FtlPrintInfo:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	bx	lr
	.fnend
	.size	FtlPrintInfo, .-FtlPrintInfo
	.align	1
	.global	FtlSysBlkNumInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlSysBlkNumInit, %function
FtlSysBlkNumInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r3, .L20
	cmp	r0, #24
	it	cc
	movcc	r0, #24
	ldrh	r2, [r3, #232]
	ldrh	r1, [r3, #242]
	str	r0, [r3, #228]
	muls	r2, r0, r2
	subs	r0, r1, r0
	ldr	r1, [r3, #248]
	str	r2, [r3, #236]
	strh	r0, [r3, #240]	@ movhi
	subs	r2, r1, r2
	movs	r0, #0
	str	r2, [r3, #244]
	bx	lr
.L21:
	.align	2
.L20:
	.word	.LANCHOR0
	.fnend
	.size	FtlSysBlkNumInit, .-FtlSysBlkNumInit
	.global	__aeabi_idiv
	.align	1
	.global	FtlConstantsInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlConstantsInit, %function
FtlConstantsInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r7, r0
	ldr	r4, .L33
	ldrh	r2, [r0]
	ldrh	r1, [r7, #14]
	ldrh	r5, [r0, #2]
	ldrh	r3, [r7, #6]
	cmp	r1, #4
	ldrh	r0, [r0, #4]
	strh	r2, [r4, #252]	@ movhi
	strh	r5, [r4, #254]	@ movhi
	strh	r0, [r4, #256]	@ movhi
	strh	r3, [r4, #242]	@ movhi
	strh	r1, [r4, #258]	@ movhi
	bne	.L23
	lsrs	r3, r3, #1
	strh	r3, [r4, #242]	@ movhi
	movs	r3, #8
	strh	r3, [r4, #258]	@ movhi
.L24:
	ldr	r1, .L33+4
	movs	r3, #0
.L25:
	strb	r3, [r1], #1
	adds	r3, r3, #1
	cmp	r3, #32
	bne	.L25
	ldrh	r6, [r4, #242]
	cmp	r2, #1
	ldrh	r0, [r4, #256]
	mov	r3, #0
	it	ne
	movne	r2, #5
	strh	r3, [r4, #294]	@ movhi
	strh	r2, [r4, #292]	@ movhi
	mov	r9, #640
	strh	r9, [r4, #296]	@ movhi
	smulbb	r5, r5, r0
	smulbb	r0, r0, r6
	uxth	r5, r5
	strh	r5, [r4, #232]	@ movhi
	uxth	r0, r0
	strh	r0, [r4, #298]	@ movhi
	bl	Ftl_log2
	ldrh	fp, [r7, #12]
	ldrh	r10, [r4, #258]
	strh	r0, [r4, #300]	@ movhi
	mov	r0, r10
	strh	fp, [r4, #302]	@ movhi
	smulbb	r3, r5, fp
	strh	fp, [r4, #304]	@ movhi
	strh	r3, [r4, #306]	@ movhi
	bl	Ftl_log2
	lsl	r3, r10, #9
	mul	r1, fp, r10
	mov	r8, r0
	strh	r0, [r4, #308]	@ movhi
	uxth	r3, r3
	strh	r3, [r4, #310]	@ movhi
	asr	r9, r9, r8
	add	r8, r8, #9
	lsrs	r3, r3, #8
	strh	r3, [r4, #312]	@ movhi
	ldrh	r3, [r7, #20]
	mov	r0, #5120
	strh	r3, [r4, #314]	@ movhi
	mul	r3, r6, r5
	str	r3, [r4, #248]
	lsls	r6, r6, #6
	add	r9, r9, #2
	asr	r6, r6, r8
	muls	r3, r1, r3
	asrs	r3, r3, #11
	str	r3, [r4, #316]
	bl	__aeabi_idiv
	cmp	r0, #4
	strh	r6, [r4, #324]	@ movhi
	uxth	r6, r6
	itet	le
	movle	r3, #4
	strhgt	r0, [r4, #320]	@ movhi
	strhle	r3, [r4, #320]	@ movhi
	mov	r1, r5
	mul	r3, r6, r5
	strh	r9, [r4, #322]	@ movhi
	ldrh	r0, [r4, #320]
	str	r3, [r4, #328]
	bl	__aeabi_uidiv
	cmp	r5, #1
	uxtah	r6, r6, r0
	ite	ne
	addne	r6, r6, #8
	addeq	r6, r6, #12
	str	r6, [r4, #228]
	ldrh	r0, [r4, #228]
	bl	FtlSysBlkNumInit
	ldr	r3, [r4, #228]
	ldr	r2, [r4, #244]
	movs	r0, #0
	str	r3, [r4, #332]
	ldrh	r3, [r4, #302]
	str	r0, [r4, #340]
	muls	r3, r2, r3
	ldrh	r2, [r4, #308]
	adds	r2, r2, #9
	lsls	r3, r3, #2
	lsrs	r3, r3, r2
	adds	r3, r3, #2
	strh	r3, [r4, #336]	@ movhi
	movs	r3, #32
	strh	r3, [r4, #338]	@ movhi
	ldrh	r3, [r4, #320]
	adds	r3, r3, #3
	strh	r3, [r4, #320]	@ movhi
	ldr	r3, [r4, #328]
	adds	r3, r3, #3
	str	r3, [r4, #328]
	pop	{r3, r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L23:
	cmp	r1, #8
	bne	.L24
	cmp	r0, #1
	itttt	eq
	lsreq	r3, r3, #1
	strheq	r3, [r4, #242]	@ movhi
	moveq	r3, #2
	strheq	r3, [r4, #256]	@ movhi
	b	.L24
.L34:
	.align	2
.L33:
	.word	.LANCHOR0
	.word	.LANCHOR0+260
	.fnend
	.size	FtlConstantsInit, .-FtlConstantsInit
	.align	1
	.global	IsBlkInVendorPart
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	IsBlkInVendorPart, %function
IsBlkInVendorPart:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r2, .L41
	mov	r1, r0
	ldrh	r0, [r2, #344]
	cbz	r0, .L35
	ldr	r3, [r2, #348]
	ldrh	r2, [r2, #320]
	add	r2, r3, r2, lsl #1
.L37:
	cmp	r3, r2
	bne	.L38
	movs	r0, #0
	bx	lr
.L38:
	ldrh	r0, [r3], #2
	cmp	r1, r0
	bne	.L37
	movs	r0, #1
.L35:
	bx	lr
.L42:
	.align	2
.L41:
	.word	.LANCHOR0
	.fnend
	.size	IsBlkInVendorPart, .-IsBlkInVendorPart
	.align	1
	.global	FtlCacheWriteBack
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlCacheWriteBack, %function
FtlCacheWriteBack:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	movs	r0, #0
	bx	lr
	.fnend
	.size	FtlCacheWriteBack, .-FtlCacheWriteBack
	.align	1
	.global	sftl_get_density
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_get_density, %function
sftl_get_density:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r3, .L45
	ldr	r0, [r3, #340]
	bx	lr
.L46:
	.align	2
.L45:
	.word	.LANCHOR0
	.fnend
	.size	sftl_get_density, .-sftl_get_density
	.global	__aeabi_uidivmod
	.section	.rodata.str1.1
.LC7:
	.ascii	"phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\012"
	.ascii	"\000"
	.text
	.align	1
	.global	FtlBbmMapBadBlock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlBbmMapBadBlock, %function
FtlBbmMapBadBlock:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, lr}
	.save {r4, r5, r6, r7, lr}
	.pad #12
	mov	r6, r0
	ldr	r5, .L48
	ldrh	r4, [r5, #298]
	mov	r1, r4
	bl	__aeabi_uidiv
	uxth	r7, r0
	mov	r1, r4
	mov	r0, r6
	bl	__aeabi_uidivmod
	add	r3, r5, r7, lsl #2
	ubfx	r2, r1, #5, #11
	and	r0, r1, #31
	movs	r4, #1
	ldr	r3, [r3, #380]
	lsls	r4, r4, r0
	ldr	r0, [r3, r2, lsl #2]
	orrs	r4, r4, r0
	ldr	r0, .L48+4
	str	r4, [r3, r2, lsl #2]
	uxth	r3, r1
	mov	r2, r7
	mov	r1, r6
	str	r4, [sp]
	bl	sftl_printk
	ldrh	r3, [r5, #358]
	movs	r0, #0
	adds	r3, r3, #1
	strh	r3, [r5, #358]	@ movhi
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, pc}
.L49:
	.align	2
.L48:
	.word	.LANCHOR0
	.word	.LC7
	.fnend
	.size	FtlBbmMapBadBlock, .-FtlBbmMapBadBlock
	.align	1
	.global	FtlBbmIsBadBlock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlBbmIsBadBlock, %function
FtlBbmIsBadBlock:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	mov	r6, r0
	ldr	r5, .L51
	ldrh	r7, [r5, #298]
	mov	r1, r7
	bl	__aeabi_uidivmod
	mov	r0, r6
	uxth	r4, r1
	mov	r1, r7
	bl	__aeabi_uidiv
	uxth	r0, r0
	lsrs	r2, r4, #5
	and	r4, r4, #31
	add	r5, r5, r0, lsl #2
	ldr	r3, [r5, #380]
	ldr	r0, [r3, r2, lsl #2]
	lsrs	r0, r0, r4
	and	r0, r0, #1
	pop	{r3, r4, r5, r6, r7, pc}
.L52:
	.align	2
.L51:
	.word	.LANCHOR0
	.fnend
	.size	FtlBbmIsBadBlock, .-FtlBbmIsBadBlock
	.align	1
	.global	FtlBbtInfoPrint
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlBbtInfoPrint, %function
FtlBbtInfoPrint:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	bx	lr
	.fnend
	.size	FtlBbtInfoPrint, .-FtlBbtInfoPrint
	.align	1
	.global	FtlBbtCalcTotleCnt
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlBbtCalcTotleCnt, %function
FtlBbtCalcTotleCnt:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L61
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	movs	r5, #0
	mov	r4, r5
	ldrh	r6, [r3, #298]
	ldrh	r3, [r3, #254]
	muls	r6, r3, r6
.L55:
	uxth	r0, r5
	cmp	r0, r6
	blt	.L57
	mov	r0, r4
	pop	{r4, r5, r6, pc}
.L57:
	bl	FtlBbmIsBadBlock
	cbz	r0, .L56
	adds	r4, r4, #1
	uxth	r4, r4
.L56:
	adds	r5, r5, #1
	b	.L55
.L62:
	.align	2
.L61:
	.word	.LANCHOR0
	.fnend
	.size	FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt
	.align	1
	.global	V2P_block
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	V2P_block, %function
V2P_block:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	mov	r4, r1
	ldr	r5, .L64
	mov	r6, r0
	ldrh	r7, [r5, #256]
	mov	r1, r7
	bl	__aeabi_uidiv
	ldrh	r5, [r5, #298]
	smulbb	r4, r7, r4
	mov	r1, r7
	smulbb	r5, r5, r0
	mov	r0, r6
	bl	__aeabi_uidivmod
	add	r4, r4, r1
	add	r4, r4, r5
	uxth	r0, r4
	pop	{r3, r4, r5, r6, r7, pc}
.L65:
	.align	2
.L64:
	.word	.LANCHOR0
	.fnend
	.size	V2P_block, .-V2P_block
	.align	1
	.global	P2V_plane
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	P2V_plane, %function
P2V_plane:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L67
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	mov	r5, r0
	ldrh	r6, [r3, #256]
	ldrh	r1, [r3, #298]
	bl	__aeabi_uidiv
	mov	r1, r6
	smulbb	r4, r0, r6
	mov	r0, r5
	bl	__aeabi_uidivmod
	adds	r0, r4, r1
	uxth	r0, r0
	pop	{r4, r5, r6, pc}
.L68:
	.align	2
.L67:
	.word	.LANCHOR0
	.fnend
	.size	P2V_plane, .-P2V_plane
	.align	1
	.global	P2V_block_in_plane
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	P2V_block_in_plane, %function
P2V_block_in_plane:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, lr}
	.save {r4, lr}
	ldr	r4, .L70
	ldrh	r1, [r4, #298]
	bl	__aeabi_uidivmod
	mov	r0, r1
	ldrh	r1, [r4, #256]
	uxth	r0, r0
	bl	__aeabi_uidiv
	uxth	r0, r0
	pop	{r4, pc}
.L71:
	.align	2
.L70:
	.word	.LANCHOR0
	.fnend
	.size	P2V_block_in_plane, .-P2V_block_in_plane
	.align	1
	.global	ftl_cmp_data_ver
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_cmp_data_ver, %function
ftl_cmp_data_ver:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	cmp	r0, r1
	bls	.L73
	subs	r0, r0, r1
	cmp	r0, #-2147483648
	ite	hi
	movhi	r0, #0
	movls	r0, #1
	bx	lr
.L73:
	subs	r1, r1, r0
	cmp	r1, #-2147483648
	ite	ls
	movls	r0, #0
	movhi	r0, #1
	bx	lr
	.fnend
	.size	ftl_cmp_data_ver, .-ftl_cmp_data_ver
	.align	1
	.global	FtlFreeSysBlkQueueEmpty
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlFreeSysBlkQueueEmpty, %function
FtlFreeSysBlkQueueEmpty:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r3, .L76
	ldrh	r0, [r3, #418]
	clz	r0, r0
	lsrs	r0, r0, #5
	bx	lr
.L77:
	.align	2
.L76:
	.word	.LANCHOR0
	.fnend
	.size	FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty
	.align	1
	.global	FtlFreeSysBlkQueueFull
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlFreeSysBlkQueueFull, %function
FtlFreeSysBlkQueueFull:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r3, .L79
	ldrh	r0, [r3, #418]
	sub	r3, r0, #1024
	rsbs	r0, r3, #0
	adcs	r0, r0, r3
	bx	lr
.L80:
	.align	2
.L79:
	.word	.LANCHOR0
	.fnend
	.size	FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull
	.align	1
	.global	FtlFreeSysBLkSort
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlFreeSysBLkSort, %function
FtlFreeSysBLkSort:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L90
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	ldrh	r2, [r3, #418]
	cbz	r2, .L81
	ldrh	r4, [r3, #2496]
	movs	r0, #0
	ldrh	r1, [r3, #414]
	mov	r5, r0
	ldrh	r2, [r3, #416]
	and	r4, r4, #31
.L84:
	uxth	r6, r0
	cmp	r4, r6
	bhi	.L85
	cbz	r5, .L81
	strh	r1, [r3, #414]	@ movhi
	strh	r2, [r3, #416]	@ movhi
.L81:
	pop	{r4, r5, r6, pc}
.L85:
	add	r5, r3, r1, lsl #1
	adds	r1, r1, #1
	adds	r0, r0, #1
	ubfx	r1, r1, #0, #10
	ldrh	r6, [r5, #420]
	add	r5, r3, r2, lsl #1
	adds	r2, r2, #1
	strh	r6, [r5, #420]	@ movhi
	ubfx	r2, r2, #0, #10
	movs	r5, #1
	b	.L84
.L91:
	.align	2
.L90:
	.word	.LANCHOR0
	.fnend
	.size	FtlFreeSysBLkSort, .-FtlFreeSysBLkSort
	.align	1
	.global	IsInFreeQueue
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	IsInFreeQueue, %function
IsInFreeQueue:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r1, .L98
	push	{r4, r5, lr}
	.save {r4, r5, lr}
	ldrh	r4, [r1, #418]
	cmp	r4, #1024
	beq	.L96
	ldrh	r5, [r1, #414]
	movs	r2, #0
.L94:
	cmp	r4, r2
	bhi	.L95
.L96:
	movs	r0, #0
.L92:
	pop	{r4, r5, pc}
.L95:
	adds	r3, r5, r2
	ubfx	r3, r3, #0, #10
	add	r3, r1, r3, lsl #1
	ldrh	r3, [r3, #420]
	cmp	r3, r0
	beq	.L97
	adds	r2, r2, #1
	b	.L94
.L97:
	movs	r0, #1
	b	.L92
.L99:
	.align	2
.L98:
	.word	.LANCHOR0
	.fnend
	.size	IsInFreeQueue, .-IsInFreeQueue
	.align	1
	.global	insert_data_list
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	insert_data_list, %function
insert_data_list:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L115
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	ldrh	r2, [r3, #240]
	cmp	r2, r0
	bls	.L102
	movs	r5, #6
	ldr	ip, [r3, #2516]
	movw	r2, #65535
	muls	r5, r0, r5
	add	r4, ip, r5
	strh	r2, [r4, #2]	@ movhi
	strh	r2, [ip, r5]	@ movhi
	ldr	r1, [r3, #2520]
	cbnz	r1, .L103
.L114:
	str	r4, [r3, #2520]
	b	.L102
.L103:
	ldrh	r2, [r4, #4]
	ldr	r9, [r3, #72]
	ldrh	r7, [r9, r0, lsl #1]
	cbz	r2, .L110
	muls	r7, r2, r7
.L104:
	ldr	r8, [r3, #2516]
	movw	fp, #65535
	ldr	r6, .L115+4
	sub	r2, r1, r8
	asrs	r2, r2, #1
	muls	r2, r6, r2
	ldrh	r6, [r3, #240]
	str	r6, [sp, #4]
	movs	r6, #0
	uxth	r2, r2
.L108:
	adds	r6, r6, #1
	ldr	lr, [sp, #4]
	uxth	r6, r6
	cmp	r6, lr
	bhi	.L102
	cmp	r0, r2
	beq	.L102
	ldrh	r10, [r1, #4]
	cmp	r10, #0
	beq	.L106
	ldrh	lr, [r9, r2, lsl #1]
	mul	lr, r10, lr
	cmp	lr, r7
	bcs	.L106
	ldrh	lr, [r1]
	cmp	lr, fp
	bne	.L107
	strh	r2, [r4, #2]	@ movhi
	strh	r0, [r1]	@ movhi
	str	r4, [r3, #2524]
.L102:
	movs	r0, #0
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L110:
	mov	r7, #-1
	b	.L104
.L107:
	movs	r2, #6
	mla	r1, r2, lr, r8
	mov	r2, lr
	b	.L108
.L106:
	strh	r2, [ip, r5]	@ movhi
	ldrh	r2, [r1, #2]
	strh	r2, [r4, #2]	@ movhi
	ldr	r5, [r3, #2520]
	cmp	r1, r5
	bne	.L109
	strh	r0, [r1, #2]	@ movhi
	b	.L114
.L109:
	movs	r4, #6
	ldr	r3, [r3, #2516]
	muls	r2, r4, r2
	strh	r0, [r3, r2]	@ movhi
	strh	r0, [r1, #2]	@ movhi
	b	.L102
.L116:
	.align	2
.L115:
	.word	.LANCHOR0
	.word	-1431655765
	.fnend
	.size	insert_data_list, .-insert_data_list
	.section	.rodata.str1.1
.LC8:
	.ascii	"\012!!!!! error @ func:%s - line:%d\012\000"
	.text
	.align	1
	.global	INSERT_DATA_LIST
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	INSERT_DATA_LIST, %function
INSERT_DATA_LIST:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, lr}
	.save {r3, lr}
	bl	insert_data_list
	ldr	r2, .L119
	ldrh	r3, [r2, #2528]
	adds	r3, r3, #1
	uxth	r3, r3
	strh	r3, [r2, #2528]	@ movhi
	ldrh	r2, [r2, #240]
	cmp	r2, r3
	bcs	.L117
	pop	{r3, lr}
	movs	r2, #214
	ldr	r1, .L119+4
	ldr	r0, .L119+8
	b	sftl_printk
.L117:
	pop	{r3, pc}
.L120:
	.align	2
.L119:
	.word	.LANCHOR0
	.word	.LANCHOR1
	.word	.LC8
	.fnend
	.size	INSERT_DATA_LIST, .-INSERT_DATA_LIST
	.align	1
	.global	insert_free_list
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	insert_free_list, %function
insert_free_list:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	movw	r5, #65535
	cmp	r0, r5
	beq	.L122
	ldr	r1, .L129
	mov	lr, #6
	mul	r6, lr, r0
	ldr	r7, [r1, #2516]
	adds	r4, r7, r6
	strh	r5, [r4, #2]	@ movhi
	strh	r5, [r7, r6]	@ movhi
	ldr	r3, [r1, #2532]
	cbnz	r3, .L123
.L128:
	str	r4, [r1, #2532]
	b	.L122
.L123:
	ldr	ip, [r1, #2516]
	ldr	r10, .L129+4
	sub	r2, r3, ip
	ldr	r8, [r1, #2536]
	asrs	r2, r2, #1
	ldrh	r9, [r8, r0, lsl #1]
	mul	r2, r10, r2
	uxth	r2, r2
.L126:
	ldrh	r10, [r8, r2, lsl #1]
	cmp	r10, r9
	bcs	.L124
	ldrh	r10, [r3]
	cmp	r10, r5
	bne	.L125
	strh	r2, [r4, #2]	@ movhi
	strh	r0, [r3]	@ movhi
.L122:
	movs	r0, #0
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L125:
	mla	r3, lr, r10, ip
	mov	r2, r10
	b	.L126
.L124:
	ldrh	r5, [r3, #2]
	strh	r5, [r4, #2]	@ movhi
	strh	r2, [r7, r6]	@ movhi
	ldr	r2, [r1, #2532]
	cmp	r2, r3
	bne	.L127
	strh	r0, [r3, #2]	@ movhi
	b	.L128
.L127:
	ldrh	r2, [r3, #2]
	movs	r4, #6
	ldr	r1, [r1, #2516]
	muls	r2, r4, r2
	strh	r0, [r1, r2]	@ movhi
	strh	r0, [r3, #2]	@ movhi
	b	.L122
.L130:
	.align	2
.L129:
	.word	.LANCHOR0
	.word	-1431655765
	.fnend
	.size	insert_free_list, .-insert_free_list
	.align	1
	.global	INSERT_FREE_LIST
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	INSERT_FREE_LIST, %function
INSERT_FREE_LIST:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, lr}
	.save {r3, lr}
	bl	insert_free_list
	ldr	r2, .L133
	ldrh	r3, [r2, #224]
	adds	r3, r3, #1
	uxth	r3, r3
	strh	r3, [r2, #224]	@ movhi
	ldrh	r2, [r2, #240]
	cmp	r2, r3
	bcs	.L131
	pop	{r3, lr}
	movs	r2, #207
	ldr	r1, .L133+4
	ldr	r0, .L133+8
	b	sftl_printk
.L131:
	pop	{r3, pc}
.L134:
	.align	2
.L133:
	.word	.LANCHOR0
	.word	.LANCHOR1+17
	.word	.LC8
	.fnend
	.size	INSERT_FREE_LIST, .-INSERT_FREE_LIST
	.align	1
	.global	List_remove_node
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	List_remove_node, %function
List_remove_node:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, lr}
	.save {r4, r5, r6, r7, r8, lr}
	movs	r4, #6
	ldr	r8, .L146
	muls	r4, r1, r4
	movw	r3, #65535
	mov	r5, r0
	ldr	r7, [r8, #2516]
	adds	r6, r7, r4
	ldrh	r2, [r6, #2]
	cmp	r2, r3
	bne	.L136
	ldr	r3, [r0]
	cmp	r6, r3
	bne	.L137
.L140:
	ldrh	r1, [r7, r4]
	movw	r2, #65535
	cmp	r1, r2
	bne	.L144
	movs	r3, #0
	str	r3, [r5]
.L142:
	movw	r3, #65535
	strh	r3, [r7, r4]	@ movhi
	strh	r3, [r6, #2]	@ movhi
	movs	r0, #0
	pop	{r4, r5, r6, r7, r8, pc}
.L137:
	ldr	r1, .L146+4
	mov	r2, #372
	ldr	r0, .L146+8
	bl	sftl_printk
.L136:
	ldr	r3, [r5]
	ldrh	r2, [r7, r4]
	cmp	r3, r6
	beq	.L140
	movw	r1, #65535
	ldrh	r3, [r6, #2]
	cmp	r2, r1
	bne	.L143
	cmp	r3, r2
	beq	.L142
	movs	r0, #6
	ldr	r1, [r8, #2516]
	muls	r3, r0, r3
	strh	r2, [r1, r3]	@ movhi
	b	.L142
.L144:
	ldr	r3, [r8, #2516]
	movs	r0, #6
	mla	r3, r0, r1, r3
	str	r3, [r5]
	strh	r2, [r3, #2]	@ movhi
	b	.L142
.L143:
	ldr	r1, [r8, #2516]
	movs	r0, #6
	mla	r2, r0, r2, r1
	strh	r3, [r2, #2]	@ movhi
	muls	r3, r0, r3
	ldr	r2, [r8, #2516]
	ldrh	r1, [r7, r4]
	strh	r1, [r2, r3]	@ movhi
	b	.L142
.L147:
	.align	2
.L146:
	.word	.LANCHOR0
	.word	.LANCHOR1+34
	.word	.LC8
	.fnend
	.size	List_remove_node, .-List_remove_node
	.align	1
	.global	List_pop_index_node
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	List_pop_index_node, %function
List_pop_index_node:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	ldr	r3, [r0]
	cbz	r3, .L153
	ldr	r2, .L157
	movw	r5, #65535
	movs	r6, #6
	ldr	r4, [r2, #2516]
.L150:
	cbz	r1, .L151
	ldrh	r2, [r3]
	cmp	r2, r5
	bne	.L152
.L151:
	subs	r4, r3, r4
	ldr	r3, .L157+4
	asrs	r4, r4, #1
	muls	r4, r3, r4
	uxth	r1, r4
	bl	List_remove_node
	uxth	r0, r4
.L148:
	pop	{r4, r5, r6, pc}
.L152:
	subs	r1, r1, #1
	mla	r3, r6, r2, r4
	uxth	r1, r1
	b	.L150
.L153:
	movw	r0, #65535
	b	.L148
.L158:
	.align	2
.L157:
	.word	.LANCHOR0
	.word	-1431655765
	.fnend
	.size	List_pop_index_node, .-List_pop_index_node
	.align	1
	.global	List_pop_head_node
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	List_pop_head_node, %function
List_pop_head_node:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	movs	r1, #0
	b	List_pop_index_node
	.fnend
	.size	List_pop_head_node, .-List_pop_head_node
	.align	1
	.global	List_get_gc_head_node
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	List_get_gc_head_node, %function
List_get_gc_head_node:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r2, .L166
	push	{r4, r5, lr}
	.save {r4, r5, lr}
	ldr	r3, [r2, #2520]
	cbz	r3, .L165
	ldr	r4, [r2, #2516]
	movw	r1, #65535
	movs	r5, #6
.L162:
	cbz	r0, .L163
	ldrh	r3, [r3]
	cmp	r3, r1
	bne	.L164
.L165:
	movw	r0, #65535
.L160:
	pop	{r4, r5, pc}
.L164:
	subs	r2, r0, #1
	mla	r3, r5, r3, r4
	uxth	r0, r2
	b	.L162
.L163:
	subs	r0, r3, r4
	ldr	r3, .L166+4
	asrs	r0, r0, #1
	muls	r0, r3, r0
	uxth	r0, r0
	b	.L160
.L167:
	.align	2
.L166:
	.word	.LANCHOR0
	.word	-1431655765
	.fnend
	.size	List_get_gc_head_node, .-List_get_gc_head_node
	.align	1
	.global	List_update_data_list
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	List_update_data_list, %function
List_update_data_list:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, r8, r9, lr}
	.save {r3, r4, r5, r6, r7, r8, r9, lr}
	mov	r5, r0
	ldr	r4, .L179
	ldrh	r3, [r4, #24]
	cmp	r3, r0
	beq	.L170
	ldrh	r3, [r4, #76]
	cmp	r3, r0
	beq	.L170
	ldrh	r3, [r4, #124]
	cmp	r3, r0
	beq	.L170
	movs	r6, #6
	ldr	r9, [r4, #2516]
	ldr	r3, [r4, #2520]
	muls	r6, r0, r6
	add	r8, r9, r6
	cmp	r8, r3
	beq	.L170
	ldr	r3, [r4, #72]
	ldrh	r7, [r3, r0, lsl #1]
	ldrh	r3, [r8, #4]
	cmp	r3, #0
	beq	.L177
	muls	r7, r3, r7
.L172:
	ldrh	r3, [r8, #2]
	movw	r2, #65535
	cmp	r3, r2
	bne	.L173
	ldrh	r2, [r9, r6]
	cmp	r2, r3
	bne	.L173
	ldr	r1, .L179+4
	movw	r2, #463
	ldr	r0, .L179+8
	bl	sftl_printk
.L173:
	ldrh	r3, [r8, #2]
	movw	r2, #65535
	cmp	r3, r2
	bne	.L174
	ldrh	r2, [r9, r6]
	cmp	r2, r3
	beq	.L170
.L174:
	movs	r2, #6
	ldr	r1, .L179+12
	muls	r3, r2, r3
	asrs	r2, r3, #1
	muls	r2, r1, r2
	ldr	r1, [r4, #72]
	ldrh	r2, [r1, r2, lsl #1]
	ldr	r1, [r4, #2516]
	add	r3, r3, r1
	ldrh	r3, [r3, #4]
	cbz	r3, .L178
	muls	r3, r2, r3
.L175:
	cmp	r7, r3
	bcs	.L170
	ldr	r0, .L179+16
	mov	r1, r5
	bl	List_remove_node
	ldrh	r3, [r4, #2528]
	cbnz	r3, .L176
	ldr	r1, .L179+4
	mov	r2, #474
	ldr	r0, .L179+8
	bl	sftl_printk
.L176:
	ldrh	r3, [r4, #2528]
	mov	r0, r5
	subs	r3, r3, #1
	strh	r3, [r4, #2528]	@ movhi
	bl	INSERT_DATA_LIST
.L170:
	movs	r0, #0
	pop	{r3, r4, r5, r6, r7, r8, r9, pc}
.L177:
	mov	r7, #-1
	b	.L172
.L178:
	mov	r3, #-1
	b	.L175
.L180:
	.align	2
.L179:
	.word	.LANCHOR0
	.word	.LANCHOR1+51
	.word	.LC8
	.word	-1431655765
	.word	.LANCHOR0+2520
	.fnend
	.size	List_update_data_list, .-List_update_data_list
	.align	1
	.global	select_l2p_ram_region
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	select_l2p_ram_region, %function
select_l2p_ram_region:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r0, .L191
	movs	r1, #0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	movs	r6, #12
	movw	r7, #65535
	ldr	r3, [r0, #2540]
	ldrh	r2, [r0, #338]
	sub	r5, r3, #12
.L182:
	uxth	r4, r1
	cmp	r2, r4
	bhi	.L184
	mov	r4, r2
	add	ip, r3, #4
	movs	r1, #0
	mov	r7, #-2147483648
	mov	lr, #12
.L185:
	uxth	r6, r1
	cmp	r2, r6
	bhi	.L187
	cmp	r2, r4
	bhi	.L183
	mov	r4, r2
	ldrh	r7, [r0, #2544]
	movs	r1, #0
	mov	r0, #-1
.L188:
	uxth	r5, r1
	cmp	r2, r5
	bhi	.L190
	cmp	r2, r4
	bhi	.L183
	ldr	r1, .L191+4
	mov	r2, #796
	ldr	r0, .L191+8
	bl	sftl_printk
	b	.L183
.L184:
	adds	r1, r1, #1
	mul	ip, r6, r1
	ldrh	ip, [r5, ip]
	cmp	ip, r7
	bne	.L182
.L183:
	mov	r0, r4
	pop	{r3, r4, r5, r6, r7, pc}
.L187:
	mul	r5, lr, r1
	ldr	r5, [ip, r5]
	cmp	r5, #0
	blt	.L186
	cmp	r5, r7
	itt	cc
	movcc	r7, r5
	movcc	r4, r6
.L186:
	adds	r1, r1, #1
	b	.L185
.L190:
	ldr	r6, [r3, #4]
	cmp	r6, r0
	bcs	.L189
	ldrh	ip, [r3]
	cmp	ip, r7
	itt	ne
	movne	r0, r6
	movne	r4, r5
.L189:
	adds	r1, r1, #1
	adds	r3, r3, #12
	b	.L188
.L192:
	.align	2
.L191:
	.word	.LANCHOR0
	.word	.LANCHOR1+73
	.word	.LC8
	.fnend
	.size	select_l2p_ram_region, .-select_l2p_ram_region
	.align	1
	.global	FtlUpdateVaildLpn
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlUpdateVaildLpn, %function
FtlUpdateVaildLpn:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L199
	push	{r4, r5, lr}
	.save {r4, r5, lr}
	ldrh	r2, [r3, #2546]
	cmp	r2, #4
	bhi	.L194
	cbnz	r0, .L194
	adds	r2, r2, #1
	strh	r2, [r3, #2546]	@ movhi
.L193:
	pop	{r4, r5, pc}
.L194:
	movs	r2, #0
	ldrh	r1, [r3, #240]
	strh	r2, [r3, #2546]	@ movhi
	movw	r5, #65535
	str	r2, [r3, #2548]
	ldr	r2, [r3, #72]
	add	r1, r2, r1, lsl #1
.L195:
	cmp	r2, r1
	beq	.L193
	ldrh	r4, [r2], #2
	cmp	r4, r5
	ittt	ne
	ldrne	r0, [r3, #2548]
	addne	r0, r0, r4
	strne	r0, [r3, #2548]
	b	.L195
.L200:
	.align	2
.L199:
	.word	.LANCHOR0
	.fnend
	.size	FtlUpdateVaildLpn, .-FtlUpdateVaildLpn
	.align	1
	.global	ftl_sb_update_avl_pages
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_sb_update_avl_pages, %function
ftl_sb_update_avl_pages:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, lr}
	.save {r4, r5, r6, r7, lr}
	add	r4, r2, #8
	ldr	r6, .L208
	add	r4, r0, r4, lsl #1
	movs	r3, #0
	movw	r7, #65535
	strh	r3, [r0, #4]	@ movhi
	ldrh	r5, [r6, #232]
.L202:
	cmp	r5, r2
	bhi	.L204
	ldrh	r3, [r6, #302]
	add	r4, r0, #16
	movs	r2, #0
	movw	r6, #65535
	subs	r3, r3, r1
	subs	r3, r3, #1
	sxth	r3, r3
.L205:
	uxth	r1, r2
	cmp	r5, r1
	bhi	.L207
	pop	{r4, r5, r6, r7, pc}
.L204:
	ldrh	r3, [r4], #2
	adds	r2, r2, #1
	cmp	r3, r7
	uxth	r2, r2
	ittt	ne
	ldrhne	r3, [r0, #4]
	addne	r3, r3, #1
	strhne	r3, [r0, #4]	@ movhi
	b	.L202
.L207:
	ldrh	r1, [r4], #2
	adds	r2, r2, #1
	cmp	r1, r6
	ittt	ne
	ldrhne	r1, [r0, #4]
	addne	r1, r1, r3
	strhne	r1, [r0, #4]	@ movhi
	b	.L205
.L209:
	.align	2
.L208:
	.word	.LANCHOR0
	.fnend
	.size	ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages
	.align	1
	.global	FtlSlcSuperblockCheck
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlSlcSuperblockCheck, %function
FtlSlcSuperblockCheck:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldrh	r3, [r0, #4]
	push	{r4, lr}
	.save {r4, lr}
	cbz	r3, .L210
	ldrh	r3, [r0]
	movw	r2, #65535
	cmp	r3, r2
	beq	.L210
	ldrb	r3, [r0, #6]	@ zero_extendqisi2
	movs	r4, #0
	ldr	r1, .L216
	adds	r3, r3, #8
	ldrh	r1, [r1, #232]
	ldrh	r3, [r0, r3, lsl #1]
.L213:
	cmp	r3, r2
	beq	.L215
.L210:
	pop	{r4, pc}
.L215:
	ldrb	r3, [r0, #6]	@ zero_extendqisi2
	adds	r3, r3, #1
	uxtb	r3, r3
	strb	r3, [r0, #6]
	cmp	r3, r1
	itttt	eq
	strbeq	r4, [r0, #6]
	ldrheq	r3, [r0, #2]
	addeq	r3, r3, #1
	strheq	r3, [r0, #2]	@ movhi
	ldrb	r3, [r0, #6]	@ zero_extendqisi2
	adds	r3, r3, #8
	ldrh	r3, [r0, r3, lsl #1]
	b	.L213
.L217:
	.align	2
.L216:
	.word	.LANCHOR0
	.fnend
	.size	FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck
	.align	1
	.global	make_superblock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	make_superblock, %function
make_superblock:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r4, r0
	ldr	r8, .L224
	ldrh	r2, [r0]
	ldrh	r3, [r8, #240]
	cmp	r2, r3
	bcc	.L219
	ldr	r1, .L224+4
	movw	r2, #2157
	ldr	r0, .L224+8
	bl	sftl_printk
.L219:
	ldrh	r6, [r8, #232]
	add	r5, r4, #16
	ldr	r9, .L224+12
	movs	r3, #0
	movw	r10, #65535
	strh	r3, [r4, #4]	@ movhi
	add	r6, r4, r6, lsl #1
	strb	r3, [r4, #7]
	adds	r6, r6, #16
.L220:
	ldrh	r1, [r4]
	cmp	r6, r5
	ldrb	fp, [r4, #7]	@ zero_extendqisi2
	bne	.L222
	ldrh	r3, [r8, #302]
	movs	r0, #0
	smulbb	r3, r3, fp
	strh	r3, [r4, #4]	@ movhi
	movs	r3, #0
	strb	r3, [r4, #9]
	ldr	r3, [r8, #2536]
	ldrh	r2, [r3, r1, lsl #1]
	movw	r3, #10000
	cmp	r2, r3
	itt	hi
	movhi	r3, #1
	strbhi	r3, [r4, #9]
	pop	{r3, r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L222:
	ldrb	r0, [r9], #1	@ zero_extendqisi2
	bl	V2P_block
	strh	r10, [r5]	@ movhi
	mov	r7, r0
	bl	FtlBbmIsBadBlock
	cbnz	r0, .L221
	add	r3, fp, #1
	strh	r7, [r5]	@ movhi
	strb	r3, [r4, #7]
.L221:
	adds	r5, r5, #2
	b	.L220
.L225:
	.align	2
.L224:
	.word	.LANCHOR0
	.word	.LANCHOR1+95
	.word	.LC8
	.word	.LANCHOR0+260
	.fnend
	.size	make_superblock, .-make_superblock
	.align	1
	.global	update_multiplier_value
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	update_multiplier_value, %function
update_multiplier_value:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	movs	r6, #0
	ldr	r5, .L234
	mov	r8, r0
	mov	r4, r6
	add	r7, r5, #260
	ldrh	r9, [r5, #232]
	ldrh	r10, [r5, #302]
.L227:
	uxth	r3, r6
	cmp	r9, r3
	bhi	.L229
	cbz	r4, .L230
	mov	r1, r4
	mov	r0, #32768
	bl	__aeabi_idiv
	uxth	r4, r0
.L230:
	ldr	r0, [r5, #2516]
	movs	r2, #6
	mla	r0, r2, r8, r0
	strh	r4, [r0, #4]	@ movhi
	movs	r0, #0
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L229:
	mov	r1, r8
	ldrb	r0, [r7], #1	@ zero_extendqisi2
	bl	V2P_block
	bl	FtlBbmIsBadBlock
	cbnz	r0, .L228
	add	r4, r4, r10
	uxth	r4, r4
.L228:
	adds	r6, r6, #1
	b	.L227
.L235:
	.align	2
.L234:
	.word	.LANCHOR0
	.fnend
	.size	update_multiplier_value, .-update_multiplier_value
	.align	1
	.global	GetFreeBlockMinEraseCount
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	GetFreeBlockMinEraseCount, %function
GetFreeBlockMinEraseCount:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r3, .L239
	ldr	r0, [r3, #2532]
	cbz	r0, .L237
	ldr	r2, [r3, #2516]
	ldr	r3, [r3, #2536]
	subs	r0, r0, r2
	ldr	r2, .L239+4
	asrs	r0, r0, #1
	muls	r0, r2, r0
	uxth	r0, r0
	ldrh	r0, [r3, r0, lsl #1]
.L237:
	bx	lr
.L240:
	.align	2
.L239:
	.word	.LANCHOR0
	.word	-1431655765
	.fnend
	.size	GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount
	.align	1
	.global	GetFreeBlockMaxEraseCount
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	GetFreeBlockMaxEraseCount, %function
GetFreeBlockMaxEraseCount:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r1, .L248
	mov	r2, r0
	push	{r4, r5, r6, r7, lr}
	.save {r4, r5, r6, r7, lr}
	ldr	r0, [r1, #2532]
	cbz	r0, .L242
	ldrh	r3, [r1, #224]
	movs	r7, #6
	movw	ip, #65535
	rsb	r3, r3, r3, lsl #3
	asrs	r4, r3, #3
	cmp	r2, r3, asr #3
	it	gt
	uxthgt	r2, r4
	ldr	r4, [r1, #2516]
	subs	r3, r0, r4
	ldr	r0, .L248+4
	asrs	r3, r3, #1
	muls	r3, r0, r3
	movs	r0, #0
	uxth	r3, r3
.L244:
	uxth	r6, r0
	mov	r5, r3
	cmp	r6, r2
	bcs	.L245
	muls	r3, r7, r3
	adds	r0, r0, #1
	ldrh	r3, [r4, r3]
	cmp	r3, ip
	bne	.L244
.L245:
	ldr	r3, [r1, #2536]
	ldrh	r0, [r3, r5, lsl #1]
.L242:
	pop	{r4, r5, r6, r7, pc}
.L249:
	.align	2
.L248:
	.word	.LANCHOR0
	.word	-1431655765
	.fnend
	.size	GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount
	.section	.rodata.str1.1
.LC9:
	.ascii	"FLASH INFO:\012\000"
.LC10:
	.ascii	"Device Capacity: %d MB\012\000"
.LC11:
	.ascii	"FTL INFO:\012\000"
.LC12:
	.ascii	"g_MaxLpn = 0x%x\012\000"
.LC13:
	.ascii	"g_VaildLpn = 0x%x\012\000"
.LC14:
	.ascii	"read_page_count = 0x%x\012\000"
.LC15:
	.ascii	"discard_page_count = 0x%x\012\000"
.LC16:
	.ascii	"write_page_count = 0x%x\012\000"
.LC17:
	.ascii	"cache_write_count = 0x%x\012\000"
.LC18:
	.ascii	"l2p_write_count = 0x%x\012\000"
.LC19:
	.ascii	"gc_page_count = 0x%x\012\000"
.LC20:
	.ascii	"totle_write = %d MB\012\000"
.LC21:
	.ascii	"totle_read = %d MB\012\000"
.LC22:
	.ascii	"GSV = 0x%x\012\000"
.LC23:
	.ascii	"GDV = 0x%x\012\000"
.LC24:
	.ascii	"bad blk num = %d\012\000"
.LC25:
	.ascii	"free_superblocks = 0x%x\012\000"
.LC26:
	.ascii	"mlc_EC = 0x%x\012\000"
.LC27:
	.ascii	"slc_EC = 0x%x\012\000"
.LC28:
	.ascii	"avg_EC = 0x%x\012\000"
.LC29:
	.ascii	"sys_EC = 0x%x\012\000"
.LC30:
	.ascii	"max_EC = 0x%x\012\000"
.LC31:
	.ascii	"min_EC = 0x%x\012\000"
.LC32:
	.ascii	"PLT = 0x%x\012\000"
.LC33:
	.ascii	"POT = 0x%x\012\000"
.LC34:
	.ascii	"MaxSector = 0x%x\012\000"
.LC35:
	.ascii	"init_sys_blks_pp = 0x%x\012\000"
.LC36:
	.ascii	"sys_blks_pp = 0x%x\012\000"
.LC37:
	.ascii	"free sysblock = 0x%x\012\000"
.LC38:
	.ascii	"data_blks_pp = 0x%x\012\000"
.LC39:
	.ascii	"data_op_blks_pp = 0x%x\012\000"
.LC40:
	.ascii	"max_data_blks = 0x%x\012\000"
.LC41:
	.ascii	"Sys.id = 0x%x\012\000"
.LC42:
	.ascii	"Bbt.id = 0x%x\012\000"
.LC43:
	.ascii	"ACT.page = 0x%x\012\000"
.LC44:
	.ascii	"ACT.plane = 0x%x\012\000"
.LC45:
	.ascii	"ACT.id = 0x%x\012\000"
.LC46:
	.ascii	"ACT.mode = 0x%x\012\000"
.LC47:
	.ascii	"ACT.a_pages = 0x%x\012\000"
.LC48:
	.ascii	"ACT VPC = 0x%x\012\000"
.LC49:
	.ascii	"BUF.page = 0x%x\012\000"
.LC50:
	.ascii	"BUF.plane = 0x%x\012\000"
.LC51:
	.ascii	"BUF.id = 0x%x\012\000"
.LC52:
	.ascii	"BUF.mode = 0x%x\012\000"
.LC53:
	.ascii	"BUF.a_pages = 0x%x\012\000"
.LC54:
	.ascii	"BUF VPC = 0x%x\012\000"
.LC55:
	.ascii	"TMP.page = 0x%x\012\000"
.LC56:
	.ascii	"TMP.plane = 0x%x\012\000"
.LC57:
	.ascii	"TMP.id = 0x%x\012\000"
.LC58:
	.ascii	"TMP.mode = 0x%x\012\000"
.LC59:
	.ascii	"TMP.a_pages = 0x%x\012\000"
.LC60:
	.ascii	"GC.page = 0x%x\012\000"
.LC61:
	.ascii	"GC.plane = 0x%x\012\000"
.LC62:
	.ascii	"GC.id = 0x%x\012\000"
.LC63:
	.ascii	"GC.mode = 0x%x\012\000"
.LC64:
	.ascii	"GC.a_pages = 0x%x\012\000"
.LC65:
	.ascii	"WR_CHK = %x %x %x\012\000"
.LC66:
	.ascii	"Read Err Cnt = 0x%x\012\000"
.LC67:
	.ascii	"Prog Err Cnt = 0x%x\012\000"
.LC68:
	.ascii	"gc_free_blk_th= 0x%x\012\000"
.LC69:
	.ascii	"gc_merge_free_blk_th= 0x%x\012\000"
.LC70:
	.ascii	"gc_skip_write_count= 0x%x\012\000"
.LC71:
	.ascii	"gc_blk_index= 0x%x\012\000"
.LC72:
	.ascii	"free min EC= 0x%x\012\000"
.LC73:
	.ascii	"free max EC= 0x%x\012\000"
.LC74:
	.ascii	"GC__SB VPC = 0x%x\012\000"
.LC75:
	.ascii	"%d. [0x%x]=0x%x 0x%x  0x%x\012\000"
.LC76:
	.ascii	"free %d. [0x%x] 0x%x  0x%x\012\000"
	.text
	.align	1
	.global	FtlPrintInfo2buf
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlPrintInfo2buf, %function
FtlPrintInfo2buf:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r7, r0
	ldr	r6, .L262
	ldr	r1, .L262+4
	add	r5, r7, #12
	.pad #20
	sub	sp, sp, #20
	bl	strcpy
	ldr	r2, .L262+8
	ldr	r3, [r6, #316]
	mov	r0, r5
	movs	r1, #64
	bl	snprintf
	add	r5, r5, r0
	ldr	r1, .L262+12
	mov	r0, r5
	adds	r5, r5, #10
	bl	strcpy
	ldr	r3, [r6, #2552]
	mov	r0, r5
	ldr	r2, .L262+16
	movs	r1, #64
	bl	snprintf
	add	r5, r5, r0
	ldr	r3, [r6, #2548]
	mov	r0, r5
	ldr	r2, .L262+20
	movs	r1, #64
	bl	snprintf
	add	r5, r5, r0
	ldr	r3, [r6, #2556]
	mov	r0, r5
	ldr	r2, .L262+24
	movs	r1, #64
	bl	snprintf
	add	r5, r5, r0
	ldr	r3, [r6, #2560]
	mov	r0, r5
	ldr	r2, .L262+28
	movs	r1, #64
	bl	snprintf
	add	r5, r5, r0
	ldr	r3, [r6, #2564]
	mov	r0, r5
	ldr	r2, .L262+32
	movs	r1, #64
	bl	snprintf
	add	r5, r5, r0
	ldr	r3, [r6, #2568]
	mov	r0, r5
	ldr	r2, .L262+36
	movs	r1, #64
	bl	snprintf
	add	r5, r5, r0
	ldr	r3, [r6, #2572]
	mov	r0, r5
	ldr	r2, .L262+40
	movs	r1, #64
	bl	snprintf
	add	r5, r5, r0
	ldr	r3, [r6, #2576]
	mov	r0, r5
	ldr	r2, .L262+44
	movs	r1, #64
	bl	snprintf
	ldr	r3, [r6, #2580]
	add	r5, r5, r0
	ldr	r2, .L262+48
	mov	r0, r5
	movs	r1, #64
	lsrs	r3, r3, #11
	bl	snprintf
	ldr	r3, [r6, #2584]
	add	r5, r5, r0
	ldr	r2, .L262+52
	movs	r1, #64
	mov	r0, r5
	lsrs	r3, r3, #11
	bl	snprintf
	adds	r4, r5, r0
	ldr	r3, [r6, #2588]
	mov	r0, r4
	ldr	r2, .L262+56
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2592]
	mov	r0, r4
	ldr	r2, .L262+60
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #358]
	mov	r0, r4
	ldr	r2, .L262+64
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #224]
	mov	r0, r4
	ldr	r2, .L262+68
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2596]
	mov	r0, r4
	ldr	r2, .L262+72
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2600]
	mov	r0, r4
	ldr	r2, .L262+76
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2604]
	mov	r0, r4
	ldr	r2, .L262+80
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2608]
	mov	r0, r4
	ldr	r2, .L262+84
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2612]
	mov	r0, r4
	ldr	r2, .L262+88
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2616]
	mov	r0, r4
	ldr	r2, .L262+92
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #2498]
	mov	r0, r4
	ldr	r2, .L262+96
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #2496]
	mov	r0, r4
	ldr	r2, .L262+100
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #340]
	mov	r0, r4
	ldr	r2, .L262+104
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #332]
	mov	r0, r4
	ldr	r2, .L262+108
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #228]
	mov	r0, r4
	ldr	r2, .L262+112
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #418]
	mov	r0, r4
	ldr	r2, .L262+116
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #240]
	mov	r0, r4
	ldr	r2, .L262+120
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #2620]
	mov	r0, r4
	ldr	r2, .L262+124
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #244]
	mov	r0, r4
	ldr	r2, .L262+128
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #2624]
	mov	r0, r4
	ldr	r2, .L262+132
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #352]
	mov	r0, r4
	ldr	r2, .L262+136
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #26]
	mov	r0, r4
	ldr	r2, .L262+140
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrb	r3, [r6, #30]	@ zero_extendqisi2
	mov	r0, r4
	ldr	r2, .L262+144
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #24]
	mov	r0, r4
	ldr	r2, .L262+148
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrb	r3, [r6, #32]	@ zero_extendqisi2
	mov	r0, r4
	ldr	r2, .L262+152
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #28]
	mov	r0, r4
	ldr	r2, .L262+156
	movs	r1, #64
	bl	snprintf
	ldrh	r2, [r6, #24]
	ldr	r3, [r6, #72]
	add	r4, r4, r0
	mov	r0, r4
	movs	r1, #64
	ldrh	r3, [r3, r2, lsl #1]
	ldr	r2, .L262+160
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #78]
	mov	r0, r4
	ldr	r2, .L262+164
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrb	r3, [r6, #82]	@ zero_extendqisi2
	mov	r0, r4
	ldr	r2, .L262+168
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #76]
	mov	r0, r4
	ldr	r2, .L262+172
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrb	r3, [r6, #84]	@ zero_extendqisi2
	mov	r0, r4
	ldr	r2, .L262+176
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #80]
	mov	r0, r4
	ldr	r2, .L262+180
	movs	r1, #64
	bl	snprintf
	ldrh	r2, [r6, #76]
	ldr	r3, [r6, #72]
	add	r4, r4, r0
	mov	r0, r4
	movs	r1, #64
	ldrh	r3, [r3, r2, lsl #1]
	ldr	r2, .L262+184
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #126]
	mov	r0, r4
	ldr	r2, .L262+188
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrb	r3, [r6, #130]	@ zero_extendqisi2
	mov	r0, r4
	ldr	r2, .L262+192
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #124]
	mov	r0, r4
	ldr	r2, .L262+196
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrb	r3, [r6, #132]	@ zero_extendqisi2
	mov	r0, r4
	ldr	r2, .L262+200
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #128]
	mov	r0, r4
	ldr	r2, .L262+204
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #174]
	mov	r0, r4
	ldr	r2, .L262+208
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrb	r3, [r6, #178]	@ zero_extendqisi2
	mov	r0, r4
	ldr	r2, .L262+212
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #172]
	mov	r0, r4
	ldr	r2, .L262+216
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrb	r3, [r6, #180]	@ zero_extendqisi2
	mov	r0, r4
	ldr	r2, .L262+220
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #176]
	mov	r0, r4
	b	.L263
.L264:
	.align	2
.L262:
	.word	.LANCHOR0
	.word	.LC9
	.word	.LC10
	.word	.LC11
	.word	.LC12
	.word	.LC13
	.word	.LC14
	.word	.LC15
	.word	.LC16
	.word	.LC17
	.word	.LC18
	.word	.LC19
	.word	.LC20
	.word	.LC21
	.word	.LC22
	.word	.LC23
	.word	.LC24
	.word	.LC25
	.word	.LC26
	.word	.LC27
	.word	.LC28
	.word	.LC29
	.word	.LC30
	.word	.LC31
	.word	.LC32
	.word	.LC33
	.word	.LC34
	.word	.LC35
	.word	.LC36
	.word	.LC37
	.word	.LC38
	.word	.LC39
	.word	.LC40
	.word	.LC41
	.word	.LC42
	.word	.LC43
	.word	.LC44
	.word	.LC45
	.word	.LC46
	.word	.LC47
	.word	.LC48
	.word	.LC49
	.word	.LC50
	.word	.LC51
	.word	.LC52
	.word	.LC53
	.word	.LC54
	.word	.LC55
	.word	.LC56
	.word	.LC57
	.word	.LC58
	.word	.LC59
	.word	.LC60
	.word	.LC61
	.word	.LC62
	.word	.LC63
.L263:
	ldr	r2, .L265
	movs	r1, #64
	bl	snprintf
	ldr	r3, [r6, #2716]
	add	r4, r4, r0
	str	r3, [sp, #4]
	ldr	r3, [r6, #2724]
	mov	r0, r4
	ldr	r2, .L265+4
	movs	r1, #64
	str	r3, [sp]
	ldr	r3, [r6, #2720]
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2712]
	mov	r0, r4
	ldr	r2, .L265+8
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #2736]
	mov	r0, r4
	ldr	r2, .L265+12
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #3152]
	mov	r0, r4
	ldr	r2, .L265+16
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #3154]
	mov	r0, r4
	ldr	r2, .L265+20
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldr	r3, [r6, #3156]
	mov	r0, r4
	ldr	r2, .L265+24
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	ldrh	r3, [r6, #3160]
	mov	r0, r4
	ldr	r2, .L265+28
	movs	r1, #64
	bl	snprintf
	add	r4, r4, r0
	movs	r1, #64
	bl	GetFreeBlockMinEraseCount
	ldr	r2, .L265+32
	mov	r3, r0
	mov	r0, r4
	bl	snprintf
	add	r4, r4, r0
	ldrh	r0, [r6, #224]
	bl	GetFreeBlockMaxEraseCount
	ldr	r2, .L265+36
	mov	r3, r0
	movs	r1, #64
	mov	r0, r4
	bl	snprintf
	ldr	r3, .L265+40
	add	r4, r4, r0
	ldr	r3, [r3]
	cmp	r3, #1
	beq	.L251
.L256:
	subs	r0, r4, r7
	add	sp, sp, #20
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L251:
	ldrh	r3, [r6, #172]
	movw	r2, #65535
	cmp	r3, r2
	beq	.L253
	ldr	r2, [r6, #72]
	mov	r0, r4
	movs	r1, #64
	ldrh	r3, [r2, r3, lsl #1]
	ldr	r2, .L265+44
	bl	snprintf
	add	r4, r4, r0
.L253:
	movs	r0, #0
	ldr	fp, .L265+48
	bl	List_get_gc_head_node
	uxth	r0, r0
	movs	r5, #0
	movw	r10, #65535
	mov	r9, #6
.L255:
	ldr	r3, [r6, #2516]
	cmp	r0, r10
	beq	.L254
	ldr	r2, [r6, #2536]
	mul	r8, r9, r0
	movs	r1, #64
	add	r3, r3, r8
	ldrh	r2, [r2, r0, lsl #1]
	str	r2, [sp, #12]
	mov	r2, fp
	ldrh	r3, [r3, #4]
	str	r3, [sp, #8]
	ldr	r3, [r6, #72]
	ldrh	r3, [r3, r0, lsl #1]
	strd	r0, r3, [sp]
	mov	r3, r5
	mov	r0, r4
	adds	r5, r5, #1
	bl	snprintf
	ldr	r3, [r6, #2516]
	add	r4, r4, r0
	cmp	r5, #16
	ldrh	r0, [r3, r8]
	bne	.L255
.L254:
	ldr	r3, [r6, #2516]
	movs	r5, #0
	ldr	r1, [r6, #2532]
	movw	r9, #65535
	ldr	fp, .L265+52
	mov	r10, #6
	subs	r1, r1, r3
	ldr	r3, .L265+56
	asrs	r1, r1, #1
	muls	r1, r3, r1
	uxth	r1, r1
.L257:
	cmp	r1, r9
	beq	.L256
	ldr	r3, [r6, #2536]
	mul	r8, r10, r1
	mov	r0, r4
	mov	r2, fp
	ldrh	r3, [r3, r1, lsl #1]
	str	r3, [sp, #8]
	ldr	r3, [r6, #2516]
	add	r3, r3, r8
	ldrh	r3, [r3, #4]
	strd	r1, r3, [sp]
	mov	r3, r5
	movs	r1, #64
	adds	r5, r5, #1
	bl	snprintf
	cmp	r5, #4
	add	r4, r4, r0
	beq	.L256
	ldr	r3, [r6, #2516]
	ldrh	r1, [r3, r8]
	b	.L257
.L266:
	.align	2
.L265:
	.word	.LC64
	.word	.LC65
	.word	.LC66
	.word	.LC67
	.word	.LC68
	.word	.LC69
	.word	.LC70
	.word	.LC71
	.word	.LC72
	.word	.LC73
	.word	.LANCHOR2
	.word	.LC74
	.word	.LC75
	.word	.LC76
	.word	-1431655765
	.fnend
	.size	FtlPrintInfo2buf, .-FtlPrintInfo2buf
	.section	.rodata.str1.1
.LC77:
	.ascii	"%s\012\000"
	.text
	.align	1
	.global	rknand_proc_ftlread
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rknand_proc_ftlread, %function
rknand_proc_ftlread:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, lr}
	.save {r3, r4, r5, lr}
	cmp	r0, #2048
	mov	r5, r1
	blt	.L269
	ldr	r3, .L270
	add	r4, r5, #30
	ldr	r2, .L270+4
	movs	r1, #64
	mov	r0, r5
	bl	snprintf
	mov	r0, r4
	bl	FtlPrintInfo2buf
	add	r0, r0, r4
	subs	r0, r0, r5
.L267:
	pop	{r3, r4, r5, pc}
.L269:
	movs	r0, #0
	b	.L267
.L271:
	.align	2
.L270:
	.word	.LC0
	.word	.LC77
	.fnend
	.size	rknand_proc_ftlread, .-rknand_proc_ftlread
	.section	.rodata.str1.1
.LC78:
	.ascii	"swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x"
	.ascii	"\012\000"
	.text
	.align	1
	.global	GetSwlReplaceBlock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	GetSwlReplaceBlock, %function
GetSwlReplaceBlock:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	ldr	r4, .L296
	.pad #28
	sub	sp, sp, #28
	ldr	r2, [r4, #2604]
	ldr	r3, [r4, #2616]
	cmp	r2, r3
	bcs	.L273
	ldrh	r1, [r4, #240]
	movs	r3, #0
	ldr	r0, [r4, #2536]
	str	r3, [r4, #2596]
.L274:
	ldr	r5, [r4, #2596]
	cmp	r1, r3
	bhi	.L275
	mov	r0, r5
	bl	__aeabi_uidiv
	str	r0, [r4, #2604]
	ldr	r0, [r4, #2600]
	ldrh	r1, [r4, #292]
	subs	r0, r5, r0
	bl	__aeabi_uidiv
	str	r0, [r4, #2596]
.L276:
	ldr	r6, [r4, #2616]
	ldr	r8, [r4, #2604]
	add	r3, r6, #256
	cmp	r3, r8
	bls	.L281
	ldr	r2, [r4, #2612]
	add	r3, r6, #768
	cmp	r3, r2
	bls	.L281
.L283:
	movw	r5, #65535
.L282:
	mov	r0, r5
	add	sp, sp, #28
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L275:
	ldrh	r2, [r0, r3, lsl #1]
	adds	r3, r3, #1
	add	r5, r5, r2
	str	r5, [r4, #2596]
	b	.L274
.L273:
	ldr	r3, [r4, #2612]
	cmp	r2, r3
	bls	.L276
	adds	r3, r3, #1
	str	r3, [r4, #2612]
	movs	r3, #0
.L278:
	ldrh	r2, [r4, #240]
	cmp	r2, r3
	bls	.L276
	ldr	r1, [r4, #2536]
	ldrh	r2, [r1, r3, lsl #1]
	adds	r2, r2, #1
	strh	r2, [r1, r3, lsl #1]	@ movhi
	adds	r3, r3, #1
	b	.L278
.L281:
	ldrh	r0, [r4, #224]
	add	r0, r0, r0, lsl #1
	lsrs	r0, r0, #2
	bl	GetFreeBlockMaxEraseCount
	add	r3, r6, #64
	mov	r1, r0
	cmp	r0, r3
	bcc	.L283
	ldr	r3, [r4, #2520]
	cmp	r3, #0
	beq	.L283
	ldrh	r2, [r4, #240]
	movw	r7, #65535
	ldr	lr, [r4, #2516]
	mov	r10, r7
	ldr	r9, [r4, #2536]
	movs	r0, #0
	str	r2, [sp, #20]
	mov	r2, r7
	mov	fp, #6
.L284:
	ldrh	ip, [r3]
	cmp	ip, r10
	bne	.L287
	mov	r5, r2
.L286:
	movw	r3, #65535
	cmp	r5, r3
	beq	.L283
	ldrh	r10, [r9, r5, lsl #1]
	lsl	fp, r5, #1
	cmp	r6, r10
	bcs	.L288
	bl	GetFreeBlockMinEraseCount
	cmp	r6, r0
	it	cc
	strcc	r7, [r4, #2616]
.L288:
	cmp	r8, r10
	bls	.L283
	add	r3, r10, #128
	cmp	r1, r3
	ble	.L283
	add	r2, r10, #256
	ldr	r3, [r4, #2612]
	cmp	r8, r2
	bhi	.L289
	add	r10, r10, #768
	cmp	r10, r3
	bcs	.L283
.L289:
	str	r1, [sp, #8]
	mov	r1, r5
	ldr	r0, .L296+4
	ldrh	r2, [r9, fp]
	str	r2, [sp, #4]
	ldr	r2, [r4, #72]
	ldrh	r2, [r2, fp]
	str	r2, [sp]
	mov	r2, r8
	bl	sftl_printk
	movs	r3, #1
	str	r3, [r4, #3164]
	b	.L282
.L287:
	adds	r0, r0, #1
	ldr	r5, [sp, #20]
	uxth	r0, r0
	cmp	r5, r0
	bcc	.L283
	ldrh	r5, [r3, #4]
	cbz	r5, .L285
	sub	r3, r3, lr
	ldr	r5, .L296+8
	asrs	r3, r3, #1
	muls	r3, r5, r3
	uxth	r5, r3
	ldrh	r3, [r9, r5, lsl #1]
	cmp	r6, r3
	bcs	.L286
	cmp	r3, r7
	itt	cc
	movcc	r7, r3
	movcc	r2, r5
.L285:
	mla	r3, fp, ip, lr
	b	.L284
.L297:
	.align	2
.L296:
	.word	.LANCHOR0
	.word	.LC78
	.word	-1431655765
	.fnend
	.size	GetSwlReplaceBlock, .-GetSwlReplaceBlock
	.align	1
	.global	free_data_superblock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	free_data_superblock, %function
free_data_superblock:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	movw	r2, #65535
	push	{r3, lr}
	.save {r3, lr}
	cmp	r0, r2
	beq	.L299
	ldr	r2, .L300
	movs	r1, #0
	ldr	r2, [r2, #72]
	strh	r1, [r2, r0, lsl #1]	@ movhi
	bl	INSERT_FREE_LIST
.L299:
	movs	r0, #0
	pop	{r3, pc}
.L301:
	.align	2
.L300:
	.word	.LANCHOR0
	.fnend
	.size	free_data_superblock, .-free_data_superblock
	.align	1
	.global	get_new_active_ppa
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	get_new_active_ppa, %function
get_new_active_ppa:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	movw	r3, #65535
	mov	r4, r0
	ldrh	r2, [r0]
	cmp	r2, r3
	bne	.L303
	ldr	r1, .L317
	movw	r2, #2792
	ldr	r0, .L317+4
	bl	sftl_printk
.L303:
	ldr	r6, .L317+8
	ldrh	r2, [r4, #2]
	ldrh	r3, [r6, #302]
	cmp	r2, r3
	bne	.L304
	ldr	r1, .L317
	movw	r2, #2793
	ldr	r0, .L317+4
	bl	sftl_printk
.L304:
	ldrh	r3, [r4, #4]
	cbnz	r3, .L305
	ldr	r1, .L317
	movw	r2, #2794
	ldr	r0, .L317+4
	bl	sftl_printk
.L305:
	ldrb	r3, [r4, #6]	@ zero_extendqisi2
	movs	r1, #0
	strb	r1, [r4, #10]
	movw	r7, #65535
	adds	r3, r3, #8
	ldrh	r0, [r6, #232]
	ldrh	r5, [r4, r3, lsl #1]
.L306:
	ldrh	r2, [r4, #2]
	cmp	r5, r7
	beq	.L308
	ldrh	r6, [r6, #302]
	cmp	r6, r2
	bls	.L312
	ldrh	r3, [r4, #4]
	orr	r5, r2, r5, lsl #10
	ldrb	r2, [r4, #6]	@ zero_extendqisi2
	movw	r7, #65535
	subs	r3, r3, #1
	uxth	r3, r3
	strh	r3, [r4, #4]	@ movhi
.L311:
	adds	r1, r2, #1
	uxtb	r2, r1
	cmp	r0, r2
	itttt	eq
	ldrheq	r2, [r4, #2]
	addeq	r2, r2, #1
	strheq	r2, [r4, #2]	@ movhi
	moveq	r2, #0
	add	r1, r2, #8
	ldrh	r1, [r4, r1, lsl #1]
	cmp	r1, r7
	beq	.L311
	strb	r2, [r4, #6]
	ldrh	r2, [r4, #2]
	cmp	r2, r6
	bne	.L302
	cbz	r3, .L302
	ldr	r1, .L317
	movw	r2, #2817
	ldr	r0, .L317+4
	bl	sftl_printk
.L302:
	mov	r0, r5
	pop	{r3, r4, r5, r6, r7, pc}
.L308:
	ldrb	r3, [r4, #6]	@ zero_extendqisi2
	adds	r3, r3, #1
	uxtb	r3, r3
	strb	r3, [r4, #6]
	cmp	r3, r0
	ittt	eq
	strbeq	r1, [r4, #6]
	addeq	r2, r2, #1
	strheq	r2, [r4, #2]	@ movhi
	ldrb	r3, [r4, #6]	@ zero_extendqisi2
	adds	r3, r3, #8
	ldrh	r5, [r4, r3, lsl #1]
	b	.L306
.L312:
	movw	r5, #65535
	b	.L302
.L318:
	.align	2
.L317:
	.word	.LANCHOR1+111
	.word	.LC8
	.word	.LANCHOR0
	.fnend
	.size	get_new_active_ppa, .-get_new_active_ppa
	.align	1
	.global	FtlGcBufInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcBufInit, %function
FtlGcBufInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L328
	movs	r1, #0
	push	{r4, r5, r6, r7, r8, lr}
	.save {r4, r5, r6, r7, r8, lr}
	mov	ip, #20
	movs	r6, #12
	movs	r7, #1
	str	r1, [r3, #3168]
.L320:
	ldrh	r2, [r3, #232]
	uxth	r0, r1
	cmp	r2, r0
	bhi	.L323
	ldr	r7, .L328
	movs	r5, #12
	movs	r6, #0
.L324:
	ldr	r1, [r3, #3188]
	cmp	r2, r1
	bcc	.L327
	pop	{r4, r5, r6, r7, r8, pc}
.L323:
	uxth	r0, r1
	ldr	r5, [r3, #3172]
	ldr	lr, [r3, #3176]
	adds	r1, r1, #1
	mul	r4, r6, r0
	adds	r2, r5, r4
	str	r7, [r2, #8]
	ldrh	r2, [r3, #310]
	muls	r2, r0, r2
	it	mi
	addmi	r2, r2, #3
	bic	r2, r2, #3
	add	r2, r2, lr
	str	r2, [r5, r4]
	ldrh	r2, [r3, #312]
	ldr	r5, [r3, #3172]
	ldr	r8, [r3, #3180]
	add	lr, r5, r4
	muls	r2, r0, r2
	it	mi
	addmi	r2, r2, #3
	bic	r2, r2, #3
	add	r2, r2, r8
	str	r2, [lr, #4]
	ldr	r2, [r3, #3184]
	mla	r2, ip, r0, r2
	ldr	r0, [r5, r4]
	str	r0, [r2, #8]
	ldr	r0, [lr, #4]
	str	r0, [r2, #12]
	b	.L320
.L327:
	mul	r0, r5, r2
	ldr	r4, [r3, #3172]
	ldr	ip, [r3, #3176]
	adds	r1, r4, r0
	str	r6, [r1, #8]
	ldrh	r1, [r3, #310]
	muls	r1, r2, r1
	it	mi
	addmi	r1, r1, #3
	bic	r1, r1, #3
	add	r1, r1, ip
	str	r1, [r4, r0]
	ldr	r4, [r7, #3180]
	ldr	r1, [r3, #3172]
	add	r0, r0, r1
	ldrh	r1, [r3, #312]
	muls	r1, r2, r1
	add	r2, r2, #1
	it	mi
	addmi	r1, r1, #3
	uxth	r2, r2
	bic	r1, r1, #3
	add	r1, r1, r4
	str	r1, [r0, #4]
	b	.L324
.L329:
	.align	2
.L328:
	.word	.LANCHOR0
	.fnend
	.size	FtlGcBufInit, .-FtlGcBufInit
	.align	1
	.global	FtlGcBufFree
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcBufFree, %function
FtlGcBufFree:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L337
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	movs	r5, #0
	mov	r8, r5
	movs	r7, #20
	mov	lr, #12
	ldr	ip, [r3, #3188]
	ldr	r6, [r3, #3172]
.L331:
	uxth	r3, r5
	cmp	r1, r3
	bls	.L330
	mla	r4, r7, r3, r0
	movs	r2, #0
.L332:
	uxth	r3, r2
	cmp	ip, r3
	bls	.L333
	mul	r3, lr, r3
	ldr	r10, [r4, #8]
	adds	r2, r2, #1
	add	r9, r6, r3
	ldr	r3, [r6, r3]
	cmp	r3, r10
	bne	.L332
	str	r8, [r9, #8]
.L333:
	adds	r5, r5, #1
	b	.L331
.L330:
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L338:
	.align	2
.L337:
	.word	.LANCHOR0
	.fnend
	.size	FtlGcBufFree, .-FtlGcBufFree
	.align	1
	.global	FtlGcBufAlloc
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcBufAlloc, %function
FtlGcBufAlloc:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L346
	mov	ip, #12
	push	{r4, r5, r6, r7, r8, r9, lr}
	.save {r4, r5, r6, r7, r8, r9, lr}
	movs	r4, #0
	mov	lr, #1
	mov	r8, #20
	ldr	r6, [r3, #3188]
	ldr	r5, [r3, #3172]
.L340:
	uxth	r2, r4
	cmp	r1, r2
	bhi	.L344
	pop	{r4, r5, r6, r7, r8, r9, pc}
.L344:
	mov	r9, #0
.L341:
	uxth	r3, r9
	cmp	r6, r3
	bls	.L342
	mla	r3, ip, r3, r5
	add	r9, r9, #1
	ldr	r7, [r3, #8]
	cmp	r7, #0
	bne	.L341
	mla	r2, r8, r2, r0
	ldr	r7, [r3]
	str	lr, [r3, #8]
	str	r7, [r2, #8]
	ldr	r3, [r3, #4]
	str	r3, [r2, #12]
.L342:
	adds	r4, r4, #1
	b	.L340
.L347:
	.align	2
.L346:
	.word	.LANCHOR0
	.fnend
	.size	FtlGcBufAlloc, .-FtlGcBufAlloc
	.align	1
	.global	IsBlkInGcList
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	IsBlkInGcList, %function
IsBlkInGcList:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r2, .L353
	ldr	r3, [r2, #3192]
	ldrh	r2, [r2, #3196]
	add	r2, r3, r2, lsl #1
.L349:
	cmp	r3, r2
	bne	.L351
	movs	r0, #0
	bx	lr
.L351:
	ldrh	r1, [r3], #2
	cmp	r1, r0
	bne	.L349
	movs	r0, #1
	bx	lr
.L354:
	.align	2
.L353:
	.word	.LANCHOR0
	.fnend
	.size	IsBlkInGcList, .-IsBlkInGcList
	.align	1
	.global	FtlGcUpdatePage
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcUpdatePage, %function
FtlGcUpdatePage:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	mov	r5, r0
	ubfx	r0, r0, #10, #16
	mov	r6, r2
	mov	r7, r1
	bl	P2V_block_in_plane
	ldr	r3, .L359
	movs	r4, #0
	ldr	r2, [r3, #3192]
	ldrh	ip, [r3, #3196]
	sub	lr, r2, #2
.L356:
	uxth	r1, r4
	cmp	ip, r1
	bhi	.L358
	itttt	eq
	strheq	r0, [r2, r4, lsl #1]	@ movhi
	ldrheq	r2, [r3, #3196]
	addeq	r2, r2, #1
	strheq	r2, [r3, #3196]	@ movhi
	b	.L357
.L358:
	adds	r4, r4, #1
	ldrh	r1, [lr, r4, lsl #1]
	cmp	r1, r0
	bne	.L356
.L357:
	ldrh	r4, [r3, #3204]
	movs	r2, #12
	muls	r4, r2, r4
	ldr	r2, [r3, #3200]
	adds	r1, r2, r4
	strd	r7, r6, [r1, #4]
	str	r5, [r2, r4]
	ldrh	r2, [r3, #3204]
	adds	r2, r2, #1
	strh	r2, [r3, #3204]	@ movhi
	pop	{r3, r4, r5, r6, r7, pc}
.L360:
	.align	2
.L359:
	.word	.LANCHOR0
	.fnend
	.size	FtlGcUpdatePage, .-FtlGcUpdatePage
	.section	.rodata.str1.1
.LC79:
	.ascii	"FtlGcRefreshBlock  0x%x\012\000"
	.text
	.align	1
	.global	FtlGcRefreshBlock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcRefreshBlock, %function
FtlGcRefreshBlock:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	mov	r1, r0
	push	{r4, lr}
	.save {r4, lr}
	mov	r4, r0
	ldr	r0, .L364
	bl	sftl_printk
	ldr	r3, .L364+4
	ldrh	r0, [r3, #222]
	cmp	r0, r4
	beq	.L362
	ldrh	r1, [r3, #220]
	cmp	r1, r4
	beq	.L362
	movw	r2, #65535
	cmp	r0, r2
	bne	.L363
	strh	r4, [r3, #222]	@ movhi
.L362:
	movs	r0, #0
	pop	{r4, pc}
.L363:
	cmp	r1, r2
	it	eq
	strheq	r4, [r3, #220]	@ movhi
	b	.L362
.L365:
	.align	2
.L364:
	.word	.LC79
	.word	.LANCHOR0
	.fnend
	.size	FtlGcRefreshBlock, .-FtlGcRefreshBlock
	.section	.rodata.str1.1
.LC80:
	.ascii	"FtlGcMarkBadPhyBlk %d 0x%x\012\000"
	.text
	.align	1
	.global	FtlGcMarkBadPhyBlk
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcMarkBadPhyBlk, %function
FtlGcMarkBadPhyBlk:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	mov	r5, r0
	ldr	r4, .L370
	bl	P2V_block_in_plane
	mov	r2, r5
	mov	r6, r0
	ldr	r0, .L370+4
	ldrh	r1, [r4, #3206]
	bl	sftl_printk
	mov	r0, r6
	bl	FtlGcRefreshBlock
	ldrh	r3, [r4, #3206]
	addw	r1, r4, #3208
	movs	r2, #0
.L367:
	uxth	r0, r2
	cmp	r3, r0
	bhi	.L369
	cmp	r3, #15
	itttt	ls
	addls	r2, r3, #1
	strhls	r2, [r4, #3206]	@ movhi
	addls	r4, r4, r3, lsl #1
	strhls	r5, [r4, #3208]	@ movhi
	b	.L368
.L369:
	ldrh	r0, [r1], #2
	adds	r2, r2, #1
	cmp	r0, r5
	bne	.L367
.L368:
	movs	r0, #0
	pop	{r4, r5, r6, pc}
.L371:
	.align	2
.L370:
	.word	.LANCHOR0
	.word	.LC80
	.fnend
	.size	FtlGcMarkBadPhyBlk, .-FtlGcMarkBadPhyBlk
	.align	1
	.global	FtlGcReFreshBadBlk
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcReFreshBadBlk, %function
FtlGcReFreshBadBlk:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, lr}
	.save {r4, lr}
	ldr	r4, .L378
	ldrh	r3, [r4, #3206]
	cbz	r3, .L373
	ldrh	r1, [r4, #222]
	movw	r2, #65535
	cmp	r1, r2
	bne	.L373
	ldrh	r2, [r4, #3242]
	cmp	r2, r3
	itt	cs
	movcs	r3, #0
	strhcs	r3, [r4, #3242]	@ movhi
	ldrh	r3, [r4, #3242]
	add	r3, r4, r3, lsl #1
	ldrh	r0, [r3, #3208]
	bl	P2V_block_in_plane
	bl	FtlGcRefreshBlock
	ldrh	r3, [r4, #3242]
	adds	r3, r3, #1
	strh	r3, [r4, #3242]	@ movhi
.L373:
	movs	r0, #0
	pop	{r4, pc}
.L379:
	.align	2
.L378:
	.word	.LANCHOR0
	.fnend
	.size	FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk
	.align	1
	.global	ftl_malloc
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_malloc, %function
ftl_malloc:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	movw	r1, #3265
	b	__kmalloc
	.fnend
	.size	ftl_malloc, .-ftl_malloc
	.align	1
	.global	ftl_free
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_free, %function
ftl_free:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	b	kfree
	.fnend
	.size	ftl_free, .-ftl_free
	.section	.rodata.str1.1
.LC81:
	.ascii	"%s %p + 0x%x:\000"
.LC82:
	.ascii	"0x%08x,\000"
.LC83:
	.ascii	"0x%04x,\000"
.LC84:
	.ascii	"0x%02x,\000"
.LC85:
	.ascii	"\012\000"
	.text
	.align	1
	.global	rknand_print_hex
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rknand_print_hex, %function
rknand_print_hex:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	movs	r7, #0
	ldr	r10, .L391
	ldr	fp, .L391+4
	mov	r9, r0
	mov	r5, r1
	mov	r8, r2
	mov	r6, r7
	mov	r4, r7
	str	r3, [sp, #4]
.L383:
	ldr	r3, [sp, #4]
	cmp	r3, r4
	bhi	.L389
	ldr	r0, .L391+8
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	b	sftl_printk
.L389:
	cbnz	r6, .L384
	ldr	r0, .L391+12
	mov	r3, r7
	mov	r2, r5
	mov	r1, r9
	bl	sftl_printk
.L384:
	cmp	r8, #4
	bne	.L385
	ldr	r1, [r5, r4, lsl #2]
	ldr	r0, .L391+16
.L390:
	adds	r6, r6, #1
	bl	sftl_printk
	cmp	r6, #15
	bls	.L388
	movs	r6, #0
	ldr	r0, .L391+8
	bl	sftl_printk
.L388:
	adds	r4, r4, #1
	add	r7, r7, r8
	b	.L383
.L385:
	cmp	r8, #2
	itete	eq
	moveq	r0, fp
	movne	r0, r10
	ldrheq	r1, [r5, r4, lsl #1]
	ldrbne	r1, [r5, r4]	@ zero_extendqisi2
	b	.L390
.L392:
	.align	2
.L391:
	.word	.LC84
	.word	.LC83
	.word	.LC85
	.word	.LC81
	.word	.LC82
	.fnend
	.size	rknand_print_hex, .-rknand_print_hex
	.section	.rodata.str1.1
.LC86:
	.ascii	"%s: addr: %x is in id block!!!!!!!!!!\012\000"
.LC87:
	.ascii	"not free: w: d:\000"
.LC88:
	.ascii	"not free: w: s:\000"
	.text
	.align	1
	.global	FlashEraseBlocks
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FlashEraseBlocks, %function
FlashEraseBlocks:
	.fnstart
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r6, r0
	ldr	fp, .L409
	.pad #28
	sub	sp, sp, #28
	mov	r7, r2
	mov	r3, sp
	movs	r4, #0
	bic	r9, r3, #8160
	bic	r9, r9, #31
	ldrh	r10, [fp, #12]
	ldr	r3, [r9, #24]
	str	r3, [sp, #20]
	lsl	r3, r10, #3
	str	r3, [sp]
	add	r3, r2, r2, lsl #2
	str	r3, [sp, #4]
.L394:
	ldr	r3, [sp, #4]
	cmp	r4, r3
	beq	.L397
	add	r2, sp, #12
	add	r1, sp, #16
	add	r0, r6, r4, lsl #2
	mov	r5, r6
	bl	l2p_addr_tran
	ldr	r8, [sp, #12]
	cmp	r8, #0
	bne	.L395
	ldr	r2, [sp, #16]
	ldr	r3, [sp]
	cmp	r3, r2
	bls	.L395
	ldr	r6, .L409+4
	ldr	r4, .L409+8
.L396:
	mov	r3, #-1
	ldr	r2, [sp, #16]
	str	r3, [r5]
	mov	r1, r6
	mov	r0, r4
	add	r8, r8, #1
	bl	sftl_printk
	ldr	r1, [r5, #8]
	ldr	r0, .L409+12
	movs	r3, #16
	movs	r2, #4
	adds	r5, r5, #20
	bl	rknand_print_hex
	movs	r3, #4
	ldr	r1, [r5, #-8]
	mov	r2, r3
	ldr	r0, .L409+16
	bl	rknand_print_hex
	cmp	r7, r8
	bne	.L396
	bl	dump_stack
.L397:
	ldr	r2, [sp, #20]
	ldr	r3, [r9, #24]
	cmp	r2, r3
	beq	.L404
	bl	__stack_chk_fail
.L395:
	ldr	r2, [fp, #3248]
	uxtb	r0, r8
	ldr	r1, [sp, #16]
	blx	r2
	cmp	r0, #0
	mov	r2, r0
	it	ne
	movne	r2, #-1
	str	r2, [r6, r4, lsl #2]
	ldrh	r2, [fp, #14]
	cmp	r2, #4
	bne	.L401
	ldr	r1, [sp, #16]
	ldr	r2, [fp, #3248]
	ldrb	r0, [sp, #12]	@ zero_extendqisi2
	add	r1, r1, r10
	blx	r2
	cbz	r0, .L401
	mov	r3, #-1
	str	r3, [r6, r4, lsl #2]
.L401:
	adds	r4, r4, #5
	b	.L394
.L404:
	movs	r0, #0
	add	sp, sp, #28
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L410:
	.align	2
.L409:
	.word	.LANCHOR0
	.word	.LANCHOR1+130
	.word	.LC86
	.word	.LC87
	.word	.LC88
	.fnend
	.size	FlashEraseBlocks, .-FlashEraseBlocks
	.align	1
	.global	FtlFreeSysBlkQueueIn
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlFreeSysBlkQueueIn, %function
FtlFreeSysBlkQueueIn:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	subs	r3, r0, #1
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	movw	r2, #65533
	uxth	r3, r3
	mov	r5, r0
	cmp	r3, r2
	bhi	.L411
	ldr	r4, .L420
	ldrh	r3, [r4, #418]
	cmp	r3, #1024
	beq	.L411
	cbz	r1, .L413
	bl	P2V_block_in_plane
	mov	r6, r0
	ldr	r0, [r4, #3268]
	lsls	r3, r5, #10
	movs	r2, #1
	mov	r1, r2
	str	r3, [r0, #4]
	bl	FlashEraseBlocks
	ldr	r2, [r4, #2536]
	ldrh	r3, [r2, r6, lsl #1]
	adds	r3, r3, #1
	strh	r3, [r2, r6, lsl #1]	@ movhi
	ldr	r3, [r4, #2608]
	adds	r3, r3, #1
	str	r3, [r4, #2608]
.L413:
	ldrh	r3, [r4, #418]
	adds	r3, r3, #1
	strh	r3, [r4, #418]	@ movhi
	ldrh	r3, [r4, #416]
	add	r2, r4, r3, lsl #1
	adds	r3, r3, #1
	ubfx	r3, r3, #0, #10
	strh	r3, [r4, #416]	@ movhi
	strh	r5, [r2, #420]	@ movhi
.L411:
	pop	{r4, r5, r6, pc}
.L421:
	.align	2
.L420:
	.word	.LANCHOR0
	.fnend
	.size	FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn
	.section	.rodata.str1.1
.LC89:
	.ascii	"FtlFreeSysBlkQueueOut = %x, free count = %d, error\012"
	.ascii	"\000"
	.text
	.align	1
	.global	FtlFreeSysBlkQueueOut
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlFreeSysBlkQueueOut, %function
FtlFreeSysBlkQueueOut:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, lr}
	.save {r3, r4, r5, lr}
	ldr	r4, .L427
	ldrh	r2, [r4, #418]
	cbz	r2, .L426
	ldrh	r3, [r4, #414]
	subs	r2, r2, #1
	ldr	r0, [r4, #3268]
	strh	r2, [r4, #418]	@ movhi
	movs	r2, #1
	add	r1, r4, r3, lsl #1
	adds	r3, r3, #1
	ubfx	r3, r3, #0, #10
	strh	r3, [r4, #414]	@ movhi
	ldrh	r5, [r1, #420]
	mov	r1, r2
	lsls	r3, r5, #10
	str	r3, [r0, #4]
	bl	FlashEraseBlocks
	ldr	r3, [r4, #2608]
	movw	r2, #65533
	adds	r3, r3, #1
	str	r3, [r4, #2608]
	subs	r3, r5, #1
	uxth	r3, r3
	cmp	r3, r2
	bls	.L424
.L423:
	ldrh	r2, [r4, #418]
	mov	r1, r5
	ldr	r0, .L427+4
	bl	sftl_printk
.L425:
	b	.L425
.L426:
	movw	r5, #65535
	b	.L423
.L424:
	mov	r0, r5
	pop	{r3, r4, r5, pc}
.L428:
	.align	2
.L427:
	.word	.LANCHOR0
	.word	.LC89
	.fnend
	.size	FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut
	.section	.rodata.str1.1
.LC90:
	.ascii	"FtlFreeSysBlkQueueOut = %x, free count = %d\012\000"
	.text
	.align	1
	.global	ftl_map_blk_alloc_new_blk
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_map_blk_alloc_new_blk, %function
ftl_map_blk_alloc_new_blk:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	mov	r4, r0
	movs	r3, #0
	ldrh	r1, [r0, #10]
	ldr	r2, [r0, #12]
.L430:
	uxth	r5, r3
	cmp	r1, r5
	bls	.L435
	mov	r7, r2
	adds	r3, r3, #1
	adds	r2, r2, #2
	ldrh	r6, [r7]
	cmp	r6, #0
	bne	.L430
	bl	FtlFreeSysBlkQueueOut
	subs	r3, r0, #1
	movw	r2, #65533
	mov	r1, r0
	uxth	r3, r3
	strh	r0, [r7]	@ movhi
	cmp	r3, r2
	bls	.L431
	ldr	r3, .L437
	ldr	r0, .L437+4
	ldrh	r2, [r3, #418]
	bl	sftl_printk
.L432:
	b	.L432
.L431:
	ldr	r3, [r4, #28]
	strh	r6, [r4, #2]	@ movhi
	adds	r3, r3, #1
	str	r3, [r4, #28]
	ldrh	r3, [r4, #8]
	strh	r5, [r4]	@ movhi
	adds	r3, r3, #1
	strh	r3, [r4, #8]	@ movhi
	ldrh	r3, [r4, #10]
	cmp	r3, r5
	bhi	.L433
.L435:
	ldr	r1, .L437+8
	movw	r2, #578
	ldr	r0, .L437+12
	bl	sftl_printk
.L433:
	movs	r0, #0
	pop	{r3, r4, r5, r6, r7, pc}
.L438:
	.align	2
.L437:
	.word	.LANCHOR0
	.word	.LC90
	.word	.LANCHOR1+147
	.word	.LC8
	.fnend
	.size	ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk
	.align	1
	.global	ftl_memset
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_memset, %function
ftl_memset:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	b	memset
	.fnend
	.size	ftl_memset, .-ftl_memset
	.section	.rodata.str1.1
.LC91:
	.ascii	"%s error allocating memory. return -1\012\000"
	.text
	.align	1
	.global	FtlMemInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlMemInit, %function
FtlMemInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, lr}
	.save {r4, r5, r6, r7, r8, lr}
	movw	r3, #65535
	ldr	r4, .L539
	movs	r5, #0
	movs	r7, #12
	mov	r8, #80
	ldrh	r0, [r4, #306]
	str	r5, [r4, #2588]
	str	r5, [r4, #2592]
	lsls	r0, r0, #1
	str	r5, [r4, #2576]
	str	r5, [r4, #2564]
	str	r5, [r4, #2560]
	str	r5, [r4, #2568]
	str	r5, [r4, #2572]
	str	r5, [r4, #2556]
	str	r5, [r4, #2596]
	str	r5, [r4, #2600]
	str	r5, [r4, #2608]
	str	r5, [r4, #2612]
	str	r5, [r4, #2616]
	str	r5, [r4, #3272]
	str	r5, [r4, #3164]
	str	r3, [r4, #3276]
	str	r5, [r4, #3280]
	str	r5, [r4, #3156]
	str	r5, [r4, #3284]
	strh	r3, [r4, #222]	@ movhi
	strh	r3, [r4, #220]	@ movhi
	movs	r3, #32
	strh	r5, [r4, #3160]	@ movhi
	strh	r3, [r4, #3152]	@ movhi
	movs	r3, #128
	strh	r5, [r4, #3206]	@ movhi
	strh	r3, [r4, #3154]	@ movhi
	strh	r5, [r4, #3242]	@ movhi
	bl	ftl_malloc
	str	r0, [r4, #3192]
	ldrh	r0, [r4, #306]
	muls	r0, r7, r0
	bl	ftl_malloc
	ldrh	r6, [r4, #232]
	str	r0, [r4, #3200]
	mul	r8, r8, r6
	mov	r0, r8
	bl	ftl_malloc
	movs	r3, #20
	str	r0, [r4, #3288]
	muls	r6, r3, r6
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3292]
	mov	r0, r8
	bl	ftl_malloc
	str	r0, [r4, #3296]
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3268]
	mov	r0, r6
	bl	ftl_malloc
	ldrh	r3, [r4, #232]
	ldrh	r6, [r4, #310]
	str	r0, [r4, #3184]
	lsls	r3, r3, #1
	mov	r0, r6
	adds	r3, r3, #1
	str	r3, [r4, #3188]
	bl	ftl_malloc
	str	r0, [r4, #3300]
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3304]
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3308]
	ldr	r0, [r4, #3188]
	muls	r0, r6, r0
	bl	ftl_malloc
	str	r0, [r4, #3176]
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3312]
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3316]
	ldr	r0, [r4, #3188]
	muls	r0, r7, r0
	bl	ftl_malloc
	str	r0, [r4, #3172]
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3320]
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3324]
	ldrh	r0, [r4, #258]
	lsls	r0, r0, #2
	bl	ftl_malloc
	ldrh	r3, [r4, #232]
	ldrh	r6, [r4, #312]
	str	r0, [r4, #3328]
	muls	r6, r3, r6
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3332]
	lsls	r0, r6, #2
	bl	ftl_malloc
	ldrh	r3, [r4, #312]
	str	r0, [r4, #3336]
	ldr	r0, [r4, #3188]
	muls	r0, r3, r0
	bl	ftl_malloc
	str	r0, [r4, #3180]
	ldrh	r0, [r4, #242]
	lsls	r0, r0, #1
	uxth	r0, r0
	strh	r0, [r4, #3340]	@ movhi
	bl	ftl_malloc
	str	r0, [r4, #3344]
	ldrh	r0, [r4, #3340]
	addw	r0, r0, #547
	lsrs	r3, r0, #9
	and	r0, r0, #130560
	strh	r3, [r4, #3340]	@ movhi
	bl	ftl_malloc
	ldrh	r6, [r4, #242]
	str	r0, [r4, #3348]
	adds	r0, r0, #32
	str	r0, [r4, #2536]
	lsls	r6, r6, #1
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3352]
	mov	r0, r6
	bl	ftl_malloc
	ldr	r6, [r4, #328]
	str	r0, [r4, #72]
	lsls	r6, r6, #1
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3356]
	mov	r0, r6
	bl	ftl_malloc
	str	r0, [r4, #3360]
	ldrh	r0, [r4, #320]
	lsls	r0, r0, #1
	bl	ftl_malloc
	str	r0, [r4, #348]
	ldrh	r0, [r4, #320]
	lsls	r0, r0, #1
	bl	ftl_malloc
	str	r0, [r4, #3364]
	ldrh	r0, [r4, #320]
	lsls	r0, r0, #2
	bl	ftl_malloc
	str	r0, [r4, #3368]
	ldrh	r0, [r4, #322]
	lsls	r0, r0, #2
	bl	ftl_malloc
	ldrh	r2, [r4, #322]
	mov	r1, r5
	str	r0, [r4, #3372]
	lsls	r2, r2, #2
	bl	ftl_memset
	ldrh	r0, [r4, #336]
	lsls	r0, r0, #2
	bl	ftl_malloc
	str	r0, [r4, #3376]
	ldr	r0, [r4, #328]
	lsls	r0, r0, #2
	bl	ftl_malloc
	str	r0, [r4, #3380]
	ldrh	r0, [r4, #338]
	muls	r0, r7, r0
	bl	ftl_malloc
	ldrh	r3, [r4, #338]
	str	r0, [r4, #2540]
	ldrh	r0, [r4, #310]
	muls	r0, r3, r0
	bl	ftl_malloc
	ldrh	r3, [r4, #242]
	str	r0, [r4, #3384]
	movs	r0, #6
	muls	r0, r3, r0
	bl	ftl_malloc
	str	r0, [r4, #2516]
	ldrh	r0, [r4, #298]
	ldrh	r3, [r4, #254]
	adds	r0, r0, #31
	asrs	r0, r0, #5
	strh	r0, [r4, #3388]	@ movhi
	muls	r0, r3, r0
	lsls	r0, r0, #2
	bl	ftl_malloc
	ldrh	r2, [r4, #3388]
	ldrh	r3, [r4, #254]
	mov	r5, r0
	str	r0, [r4, #380]
	movs	r1, #1
	lsls	r6, r2, #2
	add	r2, r0, r2, lsl #2
	add	r0, r4, #384
.L441:
	cmp	r3, r1
	bhi	.L442
	cmp	r3, #0
	ldr	r0, .L539+4
	mov	r1, #0
	it	eq
	moveq	r3, #1
	rsb	r2, r3, #8
	adds	r3, r3, #7
	lsls	r2, r2, #2
	add	r0, r0, r3, lsl #2
	bl	memset
	ldr	r3, [r4, #3356]
	cbnz	r3, .L443
.L445:
	ldr	r0, .L539+8
	ldr	r1, .L539+12
	bl	sftl_printk
	mov	r0, #-1
.L440:
	pop	{r4, r5, r6, r7, r8, pc}
.L442:
	str	r2, [r0], #4
	adds	r1, r1, #1
	add	r2, r2, r6
	b	.L441
.L540:
	.align	2
.L539:
	.word	.LANCHOR0
	.word	.LANCHOR0+352
	.word	.LC91
	.word	.LANCHOR1+173
.L443:
	ldr	r3, [r4, #3360]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3376]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3380]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #2540]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3384]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #2516]
	cmp	r3, #0
	beq	.L445
	cmp	r5, #0
	beq	.L445
	ldr	r3, [r4, #72]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3192]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3200]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3288]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3296]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3268]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3184]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3292]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3300]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3304]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3308]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3176]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3312]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3316]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3172]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3332]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3336]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3180]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #2536]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #3344]
	cmp	r3, #0
	beq	.L445
	ldr	r3, [r4, #348]
	cmp	r3, #0
	beq	.L445
	ldr	r3, .L541
	ldr	r2, [r3, #3364]
	cmp	r2, #0
	beq	.L445
	ldr	r2, [r3, #3368]
	cmp	r2, #0
	beq	.L445
	ldr	r3, [r3, #3372]
	cmp	r3, #0
	beq	.L445
	movs	r0, #0
	b	.L440
.L542:
	.align	2
.L541:
	.word	.LANCHOR0
	.fnend
	.size	FtlMemInit, .-FtlMemInit
	.align	1
	.global	FtlBbt2Bitmap
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlBbt2Bitmap, %function
FtlBbt2Bitmap:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	mov	r4, r0
	ldr	r7, .L548
	ldr	r9, .L548+4
	subs	r6, r4, #2
	ldr	r10, .L548+8
	addw	r4, r4, #1022
	mov	r5, r1
	movw	r8, #65535
	ldrh	r2, [r7, #3388]
	mov	r0, r5
	movs	r1, #0
	lsls	r2, r2, #2
	bl	ftl_memset
.L546:
	ldrh	r3, [r6, #2]!
	cmp	r3, r8
	beq	.L543
	ldrh	r2, [r7, #298]
	cmp	r2, r3
	bhi	.L545
	mov	r1, r9
	mov	r0, r10
	movs	r2, #74
	bl	sftl_printk
.L545:
	ldrh	r3, [r6]
	movs	r2, #1
	cmp	r4, r6
	lsr	r1, r3, #5
	and	r3, r3, #31
	lsl	r3, r2, r3
	ldr	r2, [r5, r1, lsl #2]
	orr	r2, r2, r3
	str	r2, [r5, r1, lsl #2]
	bne	.L546
.L543:
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L549:
	.align	2
.L548:
	.word	.LANCHOR0
	.word	.LANCHOR1+184
	.word	.LC8
	.fnend
	.size	FtlBbt2Bitmap, .-FtlBbt2Bitmap
	.align	1
	.global	FtlBbtMemInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlBbtMemInit, %function
FtlBbtMemInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r0, .L551
	movw	r3, #65535
	movs	r2, #16
	movs	r1, #255
	add	r0, r0, #364
	strh	r3, [r0, #-12]	@ movhi
	movs	r3, #0
	strh	r3, [r0, #-6]	@ movhi
	b	ftl_memset
.L552:
	.align	2
.L551:
	.word	.LANCHOR0
	.fnend
	.size	FtlBbtMemInit, .-FtlBbtMemInit
	.align	1
	.global	FtlFreeSysBlkQueueInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlFreeSysBlkQueueInit, %function
FtlFreeSysBlkQueueInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L554
	mov	r2, #2048
	push	{r4, lr}
	.save {r4, lr}
	movs	r4, #0
	mov	r1, r4
	strh	r0, [r3, #412]	@ movhi
	add	r0, r3, #420
	strh	r4, [r3, #414]	@ movhi
	strh	r4, [r3, #416]	@ movhi
	strh	r4, [r3, #418]	@ movhi
	bl	ftl_memset
	mov	r0, r4
	pop	{r4, pc}
.L555:
	.align	2
.L554:
	.word	.LANCHOR0
	.fnend
	.size	FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit
	.align	1
	.global	ftl_free_no_use_map_blk
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_free_no_use_map_blk, %function
ftl_free_no_use_map_blk:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	movs	r1, #0
	mov	r4, r0
	ldrh	r2, [r0, #10]
	ldrd	r5, r6, [r0, #20]
	ldr	r7, [r0, #12]
	lsls	r2, r2, #1
	mov	r0, r5
	bl	ftl_memset
	movs	r3, #0
.L557:
	ldrh	r1, [r4, #6]
	uxth	r2, r3
	cmp	r1, r2
	bhi	.L561
	ldr	r3, .L574
	movs	r6, #0
	mov	r10, r6
	ldrh	r2, [r3, #304]
	ldrh	r3, [r4]
	strh	r2, [r5, r3, lsl #1]	@ movhi
	ldrh	fp, [r5]
.L562:
	ldrh	r2, [r4, #10]
	uxth	r3, r6
	cmp	r2, r3
	bhi	.L565
	mov	r0, r10
	pop	{r3, r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L561:
	uxth	r2, r3
	ldr	r1, [r6, r2, lsl #2]
	movs	r2, #0
	ubfx	r1, r1, #10, #16
.L558:
	ldrh	ip, [r4, #10]
	uxth	r0, r2
	cmp	ip, r0
	bhi	.L560
	adds	r3, r3, #1
	b	.L557
.L560:
	uxth	r0, r2
	ldrh	ip, [r7, r0, lsl #1]
	cmp	ip, r1
	bne	.L559
	cbz	r1, .L559
	ldrh	ip, [r5, r0, lsl #1]
	add	ip, ip, #1
	strh	ip, [r5, r0, lsl #1]	@ movhi
.L559:
	adds	r2, r2, #1
	b	.L558
.L565:
	uxth	r8, r6
	ldrh	r9, [r5, r8, lsl #1]
	cmp	r9, fp
	bcs	.L563
	ldrh	r2, [r7, r8, lsl #1]
	cmp	r2, #0
	itt	ne
	movne	r10, r3
	movne	fp, r9
.L563:
	cmp	r9, #0
	bne	.L564
	ldrh	r0, [r7, r8, lsl #1]
	cbz	r0, .L564
	movs	r1, #1
	bl	FtlFreeSysBlkQueueIn
	strh	r9, [r7, r8, lsl #1]	@ movhi
	ldrh	r3, [r4, #8]
	subs	r3, r3, #1
	strh	r3, [r4, #8]	@ movhi
.L564:
	adds	r6, r6, #1
	b	.L562
.L575:
	.align	2
.L574:
	.word	.LANCHOR0
	.fnend
	.size	ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk
	.align	1
	.global	FtlL2PDataInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlL2PDataInit, %function
FtlL2PDataInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	movs	r1, #0
	ldr	r4, .L579
	movw	r6, #65535
	movs	r7, #12
	ldr	r2, [r4, #328]
	ldr	r0, [r4, #3360]
	lsls	r2, r2, #1
	bl	ftl_memset
	ldrh	r3, [r4, #310]
	ldrh	r2, [r4, #338]
	movs	r1, #255
	ldr	r0, [r4, #3384]
	muls	r2, r3, r2
	bl	ftl_memset
	movs	r3, #0
	mov	ip, r3
.L577:
	ldrh	r1, [r4, #338]
	uxth	r2, r3
	cmp	r1, r2
	bhi	.L578
	ldr	r3, [r4, #328]
	strh	r3, [r4, #3402]	@ movhi
	mov	r3, #-1
	str	r3, [r4, #3392]
	movw	r3, #61634
	strh	r3, [r4, #3396]	@ movhi
	ldrh	r3, [r4, #3436]
	strh	r3, [r4, #3400]	@ movhi
	ldrh	r3, [r4, #336]
	strh	r3, [r4, #3398]	@ movhi
	ldr	r3, [r4, #3356]
	str	r3, [r4, #3404]
	ldr	r3, [r4, #3380]
	str	r3, [r4, #3408]
	ldr	r3, [r4, #3360]
	str	r3, [r4, #3412]
	ldr	r3, [r4, #3376]
	str	r3, [r4, #3416]
	pop	{r3, r4, r5, r6, r7, pc}
.L578:
	uxth	r5, r3
	ldr	r2, [r4, #2540]
	adds	r3, r3, #1
	mul	r0, r7, r5
	adds	r1, r2, r0
	str	ip, [r1, #4]
	strh	r6, [r2, r0]	@ movhi
	ldrh	r2, [r4, #310]
	ldr	r1, [r4, #2540]
	add	r1, r1, r0
	ldr	r0, [r4, #3384]
	muls	r2, r5, r2
	bic	r2, r2, #3
	add	r2, r2, r0
	str	r2, [r1, #8]
	b	.L577
.L580:
	.align	2
.L579:
	.word	.LANCHOR0
	.fnend
	.size	FtlL2PDataInit, .-FtlL2PDataInit
	.align	1
	.global	FtlVariablesInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlVariablesInit, %function
FtlVariablesInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, lr}
	.save {r3, r4, r5, lr}
	movs	r5, #0
	ldr	r4, .L582
	mov	r1, r5
	movw	r3, #65535
	ldrh	r2, [r4, #320]
	ldr	r0, [r4, #348]
	strh	r3, [r4, #3438]	@ movhi
	mov	r3, #-1
	lsls	r2, r2, #1
	str	r3, [r4, #3448]
	str	r5, [r4, #3440]
	str	r5, [r4, #3444]
	strh	r5, [r4, #344]	@ movhi
	bl	ftl_memset
	ldrh	r2, [r4, #242]
	mov	r1, r5
	ldr	r0, [r4, #2536]
	lsls	r2, r2, #1
	bl	ftl_memset
	ldrh	r2, [r4, #242]
	mov	r1, r5
	ldr	r0, [r4, #3344]
	lsls	r2, r2, #1
	bl	ftl_memset
	mov	r1, r5
	addw	r0, r4, #2468
	movs	r2, #48
	bl	ftl_memset
	mov	r1, r5
	mov	r2, #512
	add	r0, r4, #2640
	bl	ftl_memset
	bl	FtlGcBufInit
	bl	FtlL2PDataInit
	mov	r0, r5
	pop	{r3, r4, r5, pc}
.L583:
	.align	2
.L582:
	.word	.LANCHOR0
	.fnend
	.size	FtlVariablesInit, .-FtlVariablesInit
	.align	1
	.global	SupperBlkListInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	SupperBlkListInit, %function
SupperBlkListInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r10, #6
	ldr	r4, .L595
	movs	r5, #0
	.pad #20
	sub	sp, sp, #20
	movs	r1, #0
	mov	r9, r5
	mov	r7, r5
	movw	fp, #65535
	ldrh	r2, [r4, #242]
	ldr	r0, [r4, #2516]
	mul	r2, r10, r2
	bl	ftl_memset
	str	r5, [r4, #2532]
	str	r5, [r4, #2520]
	str	r5, [r4, #2524]
	strh	r5, [r4, #2528]	@ movhi
	strh	r5, [r4, #224]	@ movhi
.L585:
	ldrh	r3, [r4, #240]
	uxth	r8, r5
	cmp	r8, r3
	bcs	.L592
	ldrh	r3, [r4, #232]
	str	r3, [sp, #4]
	ldrh	r3, [r4, #302]
	str	r3, [sp]
	movs	r3, #0
	ldr	r2, .L595+4
	mov	r6, r3
	b	.L593
.L587:
	ldrb	r0, [r2], #1	@ zero_extendqisi2
	mov	r1, r8
	str	r3, [sp, #12]
	str	r2, [sp, #8]
	bl	V2P_block
	bl	FtlBbmIsBadBlock
	ldrd	r2, r3, [sp, #8]
	cbnz	r0, .L586
	ldr	r1, [sp]
	add	r6, r6, r1
	uxth	r6, r6
.L586:
	adds	r3, r3, #1
.L593:
	ldr	r0, [sp, #4]
	uxth	r1, r3
	cmp	r0, r1
	bhi	.L587
	uxth	r3, r5
	cbz	r6, .L588
	mov	r1, r6
	mov	r0, #32768
	str	r3, [sp]
	bl	__aeabi_idiv
	ldr	r3, [sp]
	uxth	r6, r0
.L589:
	ldr	r2, [r4, #2516]
	mla	r2, r10, r3, r2
	strh	r6, [r2, #4]	@ movhi
	ldrh	r2, [r4, #24]
	cmp	r2, r8
	beq	.L590
	ldrh	r2, [r4, #76]
	cmp	r2, r8
	beq	.L590
	ldrh	r2, [r4, #124]
	cmp	r2, r8
	beq	.L590
	ldr	r2, [r4, #72]
	ldrh	r3, [r2, r3, lsl #1]
	cbnz	r3, .L591
	add	r9, r9, #1
	mov	r0, r8
	uxth	r9, r9
	bl	INSERT_FREE_LIST
.L590:
	adds	r5, r5, #1
	b	.L585
.L588:
	ldr	r2, [r4, #72]
	strh	fp, [r2, r3, lsl #1]	@ movhi
	b	.L589
.L591:
	adds	r7, r7, #1
	mov	r0, r8
	uxth	r7, r7
	bl	INSERT_DATA_LIST
	b	.L590
.L592:
	strh	r7, [r4, #2528]	@ movhi
	add	r7, r7, r9
	cmp	r7, r3
	strh	r9, [r4, #224]	@ movhi
	ble	.L594
	ldr	r1, .L595+8
	movw	r2, #2219
	ldr	r0, .L595+12
	bl	sftl_printk
.L594:
	movs	r0, #0
	add	sp, sp, #20
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L596:
	.align	2
.L595:
	.word	.LANCHOR0
	.word	.LANCHOR0+260
	.word	.LANCHOR1+198
	.word	.LC8
	.fnend
	.size	SupperBlkListInit, .-SupperBlkListInit
	.align	1
	.global	FtlGcPageVarInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcPageVarInit, %function
FtlGcPageVarInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, lr}
	.save {r4, lr}
	movs	r1, #255
	ldr	r4, .L598
	movs	r3, #0
	ldrh	r2, [r4, #306]
	ldr	r0, [r4, #3192]
	strh	r3, [r4, #3196]	@ movhi
	lsls	r2, r2, #1
	strh	r3, [r4, #3204]	@ movhi
	bl	ftl_memset
	ldrh	r3, [r4, #306]
	movs	r2, #12
	ldr	r0, [r4, #3200]
	movs	r1, #255
	muls	r2, r3, r2
	bl	ftl_memset
	pop	{r4, lr}
	b	FtlGcBufInit
.L599:
	.align	2
.L598:
	.word	.LANCHOR0
	.fnend
	.size	FtlGcPageVarInit, .-FtlGcPageVarInit
	.align	1
	.global	FlashGetBadBlockList
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FlashGetBadBlockList, %function
FlashGetBadBlockList:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	mov	r2, #256
	ldr	r6, .L606
	mov	r4, r0
	mov	r5, r1
	movs	r1, #255
	bl	ftl_memset
	mov	r1, r5
	ldr	r3, [r6, #3244]
	mov	r0, r4
	blx	r3
	uxth	r0, r0
	cmp	r0, #50
	bls	.L601
	mov	r0, r4
	mov	r2, #256
	movs	r1, #255
	bl	ftl_memset
	movs	r0, #0
.L601:
	ldrh	r3, [r6, #14]
	cmp	r3, #4
	bne	.L605
	mov	r3, r4
	add	r1, r4, r0, lsl #1
.L603:
	cmp	r3, r1
	bne	.L604
.L605:
	pop	{r4, r5, r6, pc}
.L604:
	ldrh	r2, [r3]
	lsrs	r2, r2, #1
	strh	r2, [r3], #2	@ movhi
	b	.L603
.L607:
	.align	2
.L606:
	.word	.LANCHOR0
	.fnend
	.size	FlashGetBadBlockList, .-FlashGetBadBlockList
	.align	1
	.global	ftl_memcpy
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_memcpy, %function
ftl_memcpy:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	b	memcpy
	.fnend
	.size	ftl_memcpy, .-ftl_memcpy
	.section	.rodata.str1.1
.LC92:
	.ascii	"FlashReadPages %x %x error_ecc_bits %d\012\000"
.LC93:
	.ascii	"data:\000"
.LC94:
	.ascii	"spare:\000"
	.text
	.align	1
	.global	FlashReadPages
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FlashReadPages, %function
FlashReadPages:
	.fnstart
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r4, r0
	ldr	r5, .L650
	.pad #28
	sub	sp, sp, #28
	ldr	r7, .L650+4
	mov	r3, sp
	ldr	r10, .L650+8
	bic	r8, r3, #8160
	ldr	fp, .L650+12
	bic	r8, r8, #31
	str	r1, [sp, #4]
	mov	r9, #0
	ldr	r3, [r8, #24]
	str	r3, [sp, #20]
	ldrh	r3, [r5, #12]
	str	r3, [sp]
.L610:
	ldr	r3, [sp, #4]
	cmp	r9, r3
	bne	.L624
	ldr	r2, [sp, #20]
	ldr	r3, [r8, #24]
	cmp	r2, r3
	beq	.L625
	bl	__stack_chk_fail
.L624:
	ldr	r3, [r4, #8]
	cbz	r3, .L611
	ldr	r3, [r4, #12]
	cbnz	r3, .L612
.L611:
	mov	r1, r7
	mov	r0, r10
	movs	r2, #96
	bl	sftl_printk
.L612:
	add	r2, sp, #12
	add	r1, sp, #16
	mov	r0, r4
	bl	l2p_addr_tran
	ldr	r0, [sp, #12]
	cmp	r0, #3
	bls	.L613
	mov	r3, #-1
	str	r3, [r4]
.L614:
	add	r9, r9, #1
	adds	r4, r4, #20
	b	.L610
.L613:
	ldr	r6, [r4, #8]
	uxtb	r0, r0
	ldr	r1, [sp, #16]
	ldr	ip, [r5, #3256]
	lsls	r3, r6, #26
	ldr	r3, [r4, #12]
	it	ne
	ldrne	r6, [r5, #3320]
	mov	r2, r6
	blx	ip
	str	r0, [r4]
	ldrh	r3, [r5, #14]
	cmp	r3, #4
	bne	.L617
	ldr	r0, [sp]
	add	r2, r6, #2048
	ldr	r3, [r4, #12]
	ldr	r1, [sp, #16]
	ldr	ip, [r5, #3256]
	adds	r3, r3, #8
	add	r1, r1, r0
	ldrb	r0, [sp, #12]	@ zero_extendqisi2
	blx	ip
	adds	r1, r0, #1
	beq	.L618
	ldr	r3, [r4, #12]
	ldr	r2, [r3, #12]
	adds	r2, r2, #1
	bne	.L619
	ldr	r2, [r3, #8]
	adds	r2, r2, #1
	bne	.L619
	ldr	r3, [r3]
	adds	r3, r3, #1
	beq	.L619
.L618:
	mov	r3, #-1
	str	r3, [r4]
.L620:
	ldr	r3, [r4]
	adds	r2, r3, #1
	beq	.L621
	cmp	r3, #256
	bne	.L617
.L621:
	ldr	r1, [r4, #4]
	mov	r0, fp
	ldr	r2, [sp, #16]
	bl	sftl_printk
	ldr	r1, [r4, #8]
	cbz	r1, .L623
	movs	r3, #4
	ldr	r0, .L650+16
	mov	r2, r3
	bl	rknand_print_hex
.L623:
	ldr	r1, [r4, #12]
	cbz	r1, .L617
	movs	r3, #4
	ldr	r0, .L650+20
	mov	r2, r3
	bl	rknand_print_hex
.L617:
	ldr	r3, [r5, #3320]
	cmp	r3, r6
	bne	.L614
	ldr	r0, [r4, #8]
	cmp	r0, r6
	beq	.L614
	ldrh	r2, [r5, #258]
	mov	r1, r6
	lsls	r2, r2, #9
	bl	ftl_memcpy
	b	.L614
.L619:
	ldr	r3, [r4]
	adds	r3, r3, #1
	beq	.L620
	cmp	r0, #256
	it	eq
	streq	r0, [r4]
	b	.L620
.L625:
	movs	r0, #0
	add	sp, sp, #28
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L651:
	.align	2
.L650:
	.word	.LANCHOR0
	.word	.LANCHOR1+216
	.word	.LC8
	.word	.LC92
	.word	.LC93
	.word	.LC94
	.fnend
	.size	FlashReadPages, .-FlashReadPages
	.align	1
	.global	FtlLoadFactoryBbt
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlLoadFactoryBbt, %function
FtlLoadFactoryBbt:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	movs	r6, #0
	ldr	r4, .L662
	movw	r10, #61664
	add	r7, r4, #364
	addw	r9, r4, #3452
	ldr	r3, [r4, #3300]
	ldr	r8, [r4, #3332]
	str	r3, [r4, #3460]
	str	r8, [r4, #3464]
.L653:
	ldrh	r3, [r4, #254]
	cmp	r3, r6
	bhi	.L658
	movs	r0, #0
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L658:
	ldrh	r5, [r4, #298]
	movw	r3, #65535
	strh	r3, [r7]	@ movhi
.L655:
	ldrh	r3, [r4, #298]
	subs	r5, r5, #1
	sub	r2, r3, #16
	uxth	r5, r5
	cmp	r5, r2
	ble	.L656
	mla	r3, r6, r3, r5
	movs	r2, #1
	mov	r0, r9
	mov	r1, r2
	lsls	r3, r3, #10
	str	r3, [r4, #3456]
	bl	FlashReadPages
	ldr	r3, [r4, #3452]
	adds	r3, r3, #1
	beq	.L655
	ldrh	r3, [r8]
	cmp	r3, r10
	bne	.L655
	strh	r5, [r7]	@ movhi
.L656:
	adds	r6, r6, #1
	adds	r7, r7, #2
	b	.L653
.L663:
	.align	2
.L662:
	.word	.LANCHOR0
	.fnend
	.size	FtlLoadFactoryBbt, .-FtlLoadFactoryBbt
	.align	1
	.global	FtlGetLastWrittenPage
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGetLastWrittenPage, %function
FtlGetLastWrittenPage:
	.fnstart
	@ args = 0, pretend = 0, frame = 88
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, lr}
	.save {r4, r5, r6, r7, r8, r9, lr}
	cmp	r1, #1
	mov	r2, r1
	.pad #92
	sub	sp, sp, #92
	mov	r8, r1
	mov	r3, sp
	lsl	r6, r0, #10
	bic	r7, r3, #8160
	mov	r1, #1
	bic	r7, r7, #31
	ldr	r3, [r7, #24]
	str	r3, [sp, #84]
	ldr	r3, .L677
	ite	eq
	ldrheq	r4, [r3, #304]
	ldrhne	r4, [r3, #302]
	ldr	r3, [r3, #3324]
	subs	r4, r4, #1
	str	r3, [sp, #8]
	add	r3, sp, #20
	str	r3, [sp, #12]
	sxth	r4, r4
	orr	r0, r4, r0, lsl #10
	str	r0, [sp, #4]
	mov	r0, sp
	bl	FlashReadPages
	ldr	r3, [sp, #20]
	adds	r3, r3, #1
	bne	.L668
	mov	r9, #0
	b	.L667
.L671:
	add	r3, r9, r4
	mov	r2, r8
	mov	r0, sp
	movs	r1, #1
	add	r3, r3, r3, lsr #31
	sbfx	r5, r3, #1, #16
	orr	r3, r6, r3, asr #1
	str	r3, [sp, #4]
	bl	FlashReadPages
	ldrd	r3, r2, [sp, #20]
	ands	r3, r3, r2
	adds	r3, r3, #1
	bne	.L669
	ldr	r3, [sp]
	adds	r3, r3, #1
	beq	.L669
	subs	r4, r5, #1
	sxth	r4, r4
.L667:
	cmp	r9, r4
	ble	.L671
.L668:
	ldr	r2, [sp, #84]
	ldr	r3, [r7, #24]
	cmp	r2, r3
	beq	.L672
	bl	__stack_chk_fail
.L669:
	adds	r5, r5, #1
	sxth	r9, r5
	b	.L667
.L672:
	mov	r0, r4
	add	sp, sp, #92
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, pc}
.L678:
	.align	2
.L677:
	.word	.LANCHOR0
	.fnend
	.size	FtlGetLastWrittenPage, .-FtlGetLastWrittenPage
	.align	1
	.global	FtlScanSysBlk
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlScanSysBlk, %function
FtlScanSysBlk:
	.fnstart
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	movs	r5, #0
	ldr	r4, .L759
	mov	r1, r5
	.pad #20
	sub	sp, sp, #20
	ldr	r2, [r4, #328]
	ldr	r0, [r4, #3380]
	strh	r5, [r4, #3436]	@ movhi
	lsls	r2, r2, #2
	strh	r5, [r4, #344]	@ movhi
	bl	ftl_memset
	ldr	r2, [r4, #328]
	mov	r1, r5
	ldr	r0, [r4, #3356]
	lsls	r2, r2, #1
	bl	ftl_memset
	ldrh	r2, [r4, #320]
	mov	r1, r5
	ldr	r0, [r4, #3368]
	lsls	r2, r2, #2
	bl	ftl_memset
	ldrh	r2, [r4, #320]
	mov	r1, r5
	ldr	r0, [r4, #348]
	lsls	r2, r2, #1
	bl	ftl_memset
	add	r0, r4, #2624
	movs	r2, #16
	movs	r1, #255
	bl	ftl_memset
	ldrh	r8, [r4, #240]
.L680:
	ldrh	r3, [r4, #242]
	cmp	r3, r8
	bls	.L720
	ldr	r5, .L759+4
	movs	r7, #0
	ldrh	r6, [r4, #232]
	mov	fp, #20
	ldrh	r1, [r4, #312]
	ldr	r10, [r4, #3288]
	add	r6, r6, r5
	ldr	r2, [r4, #3176]
	ldr	r3, [r4, #3180]
	str	r1, [sp, #4]
	b	.L721
.L683:
	mov	r1, r8
	ldrb	r0, [r5], #1	@ zero_extendqisi2
	strd	r2, r3, [sp, #8]
	bl	V2P_block
	mov	r9, r0
	bl	FtlBbmIsBadBlock
	ldrd	r2, r3, [sp, #8]
	cbnz	r0, .L721
	mla	ip, fp, r7, r10
	lsl	r1, r9, #10
	strd	r1, r2, [ip, #4]
	ldr	r1, [sp, #4]
	muls	r1, r7, r1
	add	r7, r7, #1
	it	mi
	addmi	r1, r1, #3
	uxth	r7, r7
	bic	r1, r1, #3
	add	r1, r1, r3
	str	r1, [ip, #12]
.L721:
	cmp	r6, r5
	bne	.L683
	cbnz	r7, .L684
.L719:
	add	r8, r8, #1
	uxth	r8, r8
	b	.L680
.L684:
	mov	r1, r7
	mov	r0, r10
	movs	r2, #1
	bl	FlashReadPages
	movs	r3, #0
	str	r3, [sp, #4]
.L718:
	ldr	r3, [sp, #4]
	mov	r9, #20
	mul	r9, r9, r3
	ldr	r3, [r4, #3288]
	add	r2, r3, r9
	ldr	r3, [r3, r9]
	ldr	r5, [r2, #4]
	ldr	r6, [r2, #12]
	adds	r3, r3, #1
	ubfx	r5, r5, #10, #16
	bne	.L687
	mov	r10, #16
	movw	fp, #65535
.L689:
	ldr	r0, [r4, #3288]
	movs	r2, #1
	mov	r1, r2
	add	r0, r0, r9
	ldr	r3, [r0, #4]
	adds	r3, r3, #1
	str	r3, [r0, #4]
	bl	FlashReadPages
	ldrh	r3, [r6]
	cmp	r3, fp
	ldr	r3, [r4, #3288]
	bne	.L686
	mov	r2, #-1
	str	r2, [r3, r9]
	ldr	r3, [r4, #3288]
	ldr	r3, [r3, r9]
	cmp	r3, r2
	beq	.L688
.L687:
	ldr	r2, [r4, #2588]
	ldr	r3, [r6, #4]
	adds	r1, r2, #1
	beq	.L736
	cmp	r2, r3
	bhi	.L690
.L736:
	adds	r0, r3, #1
	itt	ne
	addne	r2, r3, #1
	strne	r2, [r4, #2588]
.L690:
	ldrh	r2, [r6]
	movw	r1, #61634
	cmp	r2, r1
	beq	.L691
	bhi	.L692
	movw	r1, #61574
	cmp	r2, r1
	beq	.L693
	movw	r1, #61604
	cmp	r2, r1
	beq	.L694
.L695:
	ldr	r3, [sp, #4]
	adds	r3, r3, #1
	str	r3, [sp, #4]
	ldrh	r3, [sp, #4]
	cmp	r7, r3
	bhi	.L718
	b	.L719
.L686:
	ldr	r3, [r3, r9]
	adds	r3, r3, #1
	bne	.L687
	add	r10, r10, #-1
	uxth	r10, r10
	cmp	r10, #0
	bne	.L689
.L688:
	movs	r1, #1
	b	.L757
.L692:
	movw	r3, #65535
	cmp	r2, r3
	bne	.L695
	movs	r1, #0
.L757:
	mov	r0, r5
	bl	FtlFreeSysBlkQueueIn
	b	.L695
.L691:
	ldrh	r2, [r4, #3436]
	ldr	r3, [r4, #328]
	cmp	r2, r3
	bls	.L697
	ldr	r1, .L759+8
	mov	r2, #1232
	ldr	r0, .L759+12
	bl	sftl_printk
.L697:
	ldr	r1, [r4, #328]
	ldrh	r0, [r4, #3436]
	ldr	r9, [r4, #3380]
	uxth	r2, r1
	subs	r3, r2, #1
	subs	r2, r2, r0
	subs	r2, r2, #1
	add	fp, r9, #4
	sxth	r3, r3
	mov	ip, r3
	sxth	r2, r2
	str	r2, [sp, #8]
.L698:
	ldr	r2, [sp, #8]
	cmp	r2, r3
	bge	.L703
	add	r10, ip, #-1
	lsl	lr, ip, #2
	str	lr, [sp, #12]
	ldr	lr, [r6, #4]
	ldr	r2, [fp, r10, lsl #2]
	cmp	lr, r2
	bls	.L699
	ldr	r2, [r9]
	cbnz	r2, .L700
	cmp	r1, r0
	itt	ne
	addne	r0, r0, #1
	strhne	r0, [r4, #3436]	@ movhi
.L700:
	uxth	lr, r3
	movs	r0, #0
.L701:
	uxth	r9, r0
	ldr	r1, [r4, #3380]
	sxth	r2, r0
	cmp	lr, r9
	bhi	.L702
	ldr	r0, [sp, #12]
	ldr	r2, [r6, #4]
	str	r2, [r1, r0]
	ldr	r2, [r4, #3356]
	strh	r5, [r2, ip, lsl #1]	@ movhi
.L703:
	cmp	r3, #0
	blt	.L695
	ldrh	r1, [r4, #3436]
	ldr	r2, [r4, #328]
	subs	r2, r2, r1
	subs	r2, r2, #1
	sxth	r2, r2
	cmp	r2, r3
	blt	.L695
	ldr	r2, [r4, #3380]
	adds	r1, r1, #1
	strh	r1, [r4, #3436]	@ movhi
	ldr	r1, [r6, #4]
	str	r1, [r2, r3, lsl #2]
	ldr	r2, [r4, #3356]
.L756:
	strh	r5, [r2, r3, lsl #1]	@ movhi
	b	.L695
.L702:
	adds	r2, r2, #1
	adds	r0, r0, #1
	ldr	r9, [r1, r2, lsl #2]
	add	r1, r1, r2, lsl #2
	str	r9, [r1, #-4]
	ldr	r1, [r4, #3356]
	ldrh	r9, [r1, r2, lsl #1]
	add	r2, r1, r2, lsl #1
	strh	r9, [r2, #-2]	@ movhi
	b	.L701
.L699:
	subs	r3, r3, #1
	mov	ip, r10
	sxth	r3, r3
	b	.L698
.L760:
	.align	2
.L759:
	.word	.LANCHOR0
	.word	.LANCHOR0+260
	.word	.LANCHOR1+231
	.word	.LC8
.L693:
	ldrh	r2, [r4, #344]
	ldrh	r3, [r4, #320]
	cmp	r2, r3
	bls	.L707
	ldr	r1, .L761
	movw	r2, #1273
	ldr	r0, .L761+4
	bl	sftl_printk
.L707:
	ldrh	lr, [r4, #320]
	ldrh	r0, [r4, #344]
	add	ip, lr, #-1
	ldr	r2, [r4, #3368]
	sxth	r3, ip
	sub	ip, ip, r0
.L708:
	cmp	r3, ip
	ble	.L713
	ldr	r1, [r6, #4]
	lsl	r10, r3, #2
	ldr	r9, [r2, r3, lsl #2]
	cmp	r1, r9
	bls	.L709
	ldr	r2, [r2]
	cbnz	r2, .L710
	cmp	lr, r0
	itt	ne
	addne	r0, r0, #1
	strhne	r0, [r4, #344]	@ movhi
.L710:
	uxth	ip, r3
	movs	r0, #0
.L711:
	uxth	lr, r0
	ldr	r1, [r4, #3368]
	sxth	r2, r0
	cmp	ip, lr
	bhi	.L712
	ldr	r2, [r6, #4]
	str	r2, [r1, r10]
	ldr	r2, [r4, #348]
	strh	r5, [r2, r3, lsl #1]	@ movhi
.L713:
	cmp	r3, #0
	blt	.L695
	ldrh	r2, [r4, #320]
	ldrh	r1, [r4, #344]
	subs	r2, r2, #1
	subs	r2, r2, r1
	sxth	r2, r2
	cmp	r2, r3
	blt	.L695
	ldr	r2, [r4, #3368]
	adds	r1, r1, #1
	strh	r1, [r4, #344]	@ movhi
	ldr	r1, [r6, #4]
	str	r1, [r2, r3, lsl #2]
	ldr	r2, [r4, #348]
	b	.L756
.L712:
	adds	r2, r2, #1
	adds	r0, r0, #1
	ldr	lr, [r1, r2, lsl #2]
	add	r1, r1, r2, lsl #2
	str	lr, [r1, #-4]
	ldr	r1, [r4, #348]
	ldrh	lr, [r1, r2, lsl #1]
	add	r2, r1, r2, lsl #1
	strh	lr, [r2, #-2]	@ movhi
	b	.L711
.L709:
	subs	r3, r3, #1
	sxth	r3, r3
	b	.L708
.L694:
	ldrh	r1, [r4, #2624]
	movw	r2, #65535
	cmp	r1, r2
	bne	.L715
	strh	r5, [r4, #2624]	@ movhi
.L758:
	str	r3, [r4, #2632]
	b	.L695
.L715:
	ldrh	r0, [r4, #2628]
	cmp	r0, r2
	beq	.L716
	movs	r1, #1
	bl	FtlFreeSysBlkQueueIn
.L716:
	ldr	r2, [r4, #2632]
	ldr	r3, [r6, #4]
	cmp	r2, r3
	bcs	.L717
	ldrh	r3, [r4, #2624]
	strh	r3, [r4, #2628]	@ movhi
	strh	r5, [r4, #2624]	@ movhi
	ldr	r3, [r6, #4]
	b	.L758
.L717:
	strh	r5, [r4, #2628]	@ movhi
	b	.L695
.L720:
	ldr	r1, [r4, #3356]
	ldrh	r3, [r1]
	cbz	r3, .L722
.L725:
	ldr	r1, [r4, #348]
	ldrh	r2, [r1]
	cmp	r2, #0
	beq	.L723
.L724:
	ldrh	r2, [r4, #3436]
	ldr	r3, [r4, #328]
	cmp	r2, r3
	bls	.L754
	ldr	r1, .L761
	movw	r2, #1398
	ldr	r0, .L761+4
	bl	sftl_printk
.L754:
	movs	r0, #0
	add	sp, sp, #20
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L722:
	ldrh	r2, [r4, #3436]
	cmp	r2, #0
	beq	.L725
	ldr	r0, [r4, #328]
.L726:
	sxth	r2, r3
	cmp	r2, r0
	bcs	.L725
	ldrh	r5, [r1, r2, lsl #1]
	adds	r3, r3, #1
	cmp	r5, #0
	beq	.L726
	mov	r3, r2
	movs	r5, #0
	b	.L727
.L728:
	ldr	r1, [r4, #3356]
	subs	r0, r3, r2
	ldrh	r6, [r1, r3, lsl #1]
	strh	r6, [r1, r0, lsl #1]	@ movhi
	ldr	r1, [r4, #3380]
	ldr	r6, [r1, r3, lsl #2]
	str	r6, [r1, r0, lsl #2]
	ldr	r1, [r4, #3356]
	strh	r5, [r1, r3, lsl #1]	@ movhi
	adds	r3, r3, #1
	sxth	r3, r3
.L727:
	ldr	r1, [r4, #328]
	cmp	r3, r1
	bcc	.L728
	b	.L725
.L723:
	ldrh	r3, [r4, #344]
	cmp	r3, #0
	beq	.L724
	ldrh	r0, [r4, #320]
.L732:
	sxth	r3, r2
	mov	r5, r3
	cmp	r3, r0
	bge	.L724
	ldrh	r6, [r1, r3, lsl #1]
	adds	r2, r2, #1
	cmp	r6, #0
	beq	.L732
	movs	r0, #0
.L733:
	ldrh	r2, [r4, #320]
	cmp	r3, r2
	bge	.L724
	ldr	r2, [r4, #348]
	subs	r1, r3, r5
	ldrh	r6, [r2, r3, lsl #1]
	strh	r6, [r2, r1, lsl #1]	@ movhi
	ldr	r2, [r4, #3368]
	ldr	r6, [r2, r3, lsl #2]
	str	r6, [r2, r1, lsl #2]
	ldr	r2, [r4, #348]
	strh	r0, [r2, r3, lsl #1]	@ movhi
	adds	r3, r3, #1
	sxth	r3, r3
	b	.L733
.L762:
	.align	2
.L761:
	.word	.LANCHOR1+231
	.word	.LC8
	.fnend
	.size	FtlScanSysBlk, .-FtlScanSysBlk
	.align	1
	.global	FtlLoadBbt
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlLoadBbt, %function
FtlLoadBbt:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	movw	r7, #61649
	ldr	r4, .L794
	addw	r8, r4, #3452
	ldr	r3, [r4, #3300]
	ldr	r6, [r4, #3332]
	str	r3, [r4, #3460]
	str	r6, [r4, #3464]
	bl	FtlBbtMemInit
	ldrh	r5, [r4, #298]
	subs	r5, r5, #1
	uxth	r5, r5
.L764:
	ldrh	r3, [r4, #298]
	subs	r3, r3, #16
	cmp	r5, r3
	ble	.L769
	movs	r2, #1
	mov	r0, r8
	mov	r1, r2
	lsls	r3, r5, #10
	str	r3, [r4, #3456]
	bl	FlashReadPages
	ldr	r3, [r4, #3452]
	adds	r3, r3, #1
	beq	.L765
.L768:
	ldrh	r3, [r6]
	cmp	r3, r7
	bne	.L767
	ldr	r3, [r6, #4]
	str	r3, [r4, #360]
	strh	r5, [r4, #352]	@ movhi
	ldrh	r3, [r6, #8]
	strh	r3, [r4, #356]	@ movhi
.L769:
	ldrh	r3, [r4, #352]
	movw	r2, #65535
	cmp	r3, r2
	beq	.L783
	ldrh	r3, [r4, #356]
	cmp	r3, r2
	beq	.L773
	movs	r2, #1
	ldr	r0, .L794+4
	mov	r1, r2
	lsls	r3, r3, #10
	str	r3, [r4, #3456]
	bl	FlashReadPages
	ldr	r3, [r4, #3452]
	adds	r3, r3, #1
	beq	.L773
	ldrh	r2, [r6]
	movw	r3, #61649
	cmp	r2, r3
	bne	.L773
	ldr	r3, [r6, #4]
	ldr	r2, [r4, #360]
	cmp	r3, r2
	bls	.L773
	str	r3, [r4, #360]
	ldrh	r2, [r4, #356]
	ldrh	r3, [r6, #8]
	strh	r2, [r4, #352]	@ movhi
	strh	r3, [r4, #356]	@ movhi
.L773:
	ldrh	r0, [r4, #352]
	movs	r1, #1
	ldr	r9, .L794+4
	bl	FtlGetLastWrittenPage
	sxth	r8, r0
	mov	r7, r0
	add	r3, r8, #1
	movs	r5, #0
	strh	r3, [r4, #354]	@ movhi
	movw	r10, #61649
.L775:
	subs	r3, r7, r5
	lsls	r3, r3, #16
	bpl	.L778
	ldr	r1, .L794+8
	movs	r2, #251
	ldr	r0, .L794+12
	bl	sftl_printk
.L777:
	ldrh	r0, [r6, #12]
	ldrh	r3, [r6, #10]
	strh	r3, [r4, #358]	@ movhi
	movw	r3, #65535
	cmp	r0, r3
	beq	.L780
	ldr	r3, [r4, #228]
	cmp	r0, r3
	beq	.L780
	ldrh	r2, [r4, #242]
	lsrs	r1, r2, #2
	cmp	r3, r2, lsr #2
	bcs	.L780
	cmp	r0, r1
	bcs	.L780
	bl	FtlSysBlkNumInit
.L780:
	ldr	r6, .L794+16
	movs	r5, #0
.L781:
	ldrh	r3, [r4, #254]
	cmp	r3, r5
	bhi	.L782
	movs	r0, #0
.L763:
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L765:
	ldr	r3, [r4, #3456]
	movs	r2, #1
	mov	r0, r8
	mov	r1, r2
	adds	r3, r3, #1
	str	r3, [r4, #3456]
	bl	FlashReadPages
	ldr	r3, [r4, #3452]
	adds	r3, r3, #1
	bne	.L768
.L767:
	subs	r5, r5, #1
	uxth	r5, r5
	b	.L764
.L778:
	ldrh	r2, [r4, #352]
	sub	r3, r8, r5
	mov	r0, r9
	orr	r3, r3, r2, lsl #10
	movs	r2, #1
	str	r3, [r4, #3456]
	mov	r1, r2
	ldr	r3, [r4, #3300]
	str	r3, [r4, #3460]
	bl	FlashReadPages
	ldr	r3, [r4, #3452]
	adds	r3, r3, #1
	beq	.L776
	ldrh	r3, [r6]
	cmp	r3, r10
	beq	.L777
.L776:
	adds	r5, r5, #1
	b	.L775
.L782:
	ldrh	r2, [r4, #3388]
	ldr	r3, [r4, #3460]
	ldr	r0, [r6], #4
	mul	r1, r5, r2
	lsls	r2, r2, #2
	adds	r5, r5, #1
	add	r1, r3, r1, lsl #2
	bl	ftl_memcpy
	b	.L781
.L783:
	mov	r0, #-1
	b	.L763
.L795:
	.align	2
.L794:
	.word	.LANCHOR0
	.word	.LANCHOR0+3452
	.word	.LANCHOR1+245
	.word	.LC8
	.word	.LANCHOR0+380
	.fnend
	.size	FtlLoadBbt, .-FtlLoadBbt
	.section	.rodata.str1.1
.LC95:
	.ascii	"prog read error: = %x\012\000"
.LC96:
	.ascii	"prog read REFRESH: = %x\012\000"
.LC97:
	.ascii	"prog read s error: = %x %x %x %x %x\012\000"
.LC98:
	.ascii	"prog read d error: = %x %x %x %x %x\012\000"
	.text
	.align	1
	.global	FlashProgPages
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FlashProgPages, %function
FlashProgPages:
	.fnstart
	@ args = 0, pretend = 0, frame = 48
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r8, r0
	ldr	r6, .L835
	.pad #60
	sub	sp, sp, #60
	mov	r4, r0
	mov	r3, sp
	mov	r5, r0
	bic	r10, r3, #8160
	mov	fp, #0
	bic	r10, r10, #31
	str	r1, [sp, #12]
	str	r2, [sp, #20]
	ldr	r3, [r10, #24]
	str	r3, [sp, #52]
	ldrh	r3, [r6, #12]
	mov	r9, r3
	lsls	r3, r3, #3
	str	r3, [sp, #16]
.L797:
	ldr	r3, [sp, #12]
	cmp	fp, r3
	bne	.L810
	movs	r0, #20
	ldr	r7, .L835+4
	ldr	r9, .L835+8
	mla	r8, r0, fp, r8
	ldr	r5, .L835
.L811:
	cmp	r8, r4
	beq	.L804
	ldr	r2, [r6, #3320]
	movs	r3, #0
	add	r0, sp, #32
	movs	r1, #1
	str	r3, [r2]
	ldr	r2, [r6, #3328]
	str	r3, [r2]
	ldr	r2, [sp, #20]
	ldr	r3, [r4, #4]
	str	r3, [sp, #36]
	ldr	r3, [r6, #3320]
	str	r3, [sp, #40]
	ldr	r3, [r6, #3328]
	str	r3, [sp, #44]
	bl	FlashReadPages
	ldr	fp, [sp, #32]
	cmp	fp, #-1
	bne	.L812
	ldr	r1, [r4, #4]
	mov	r0, r7
	bl	sftl_printk
	str	fp, [r4]
.L812:
	ldr	fp, [sp, #32]
	cmp	fp, #256
	bne	.L813
	ldr	r1, [r4, #4]
	mov	r0, r9
	bl	sftl_printk
	str	fp, [r4]
.L813:
	ldr	r3, [r4, #12]
	cbz	r3, .L814
	ldr	r1, [r5, #3328]
	ldr	r2, [r3]
	ldr	r0, [r1]
	cmp	r2, r0
	bne	.L815
	ldr	ip, [r3, #8]
	ldr	lr, [r1, #8]
	cmp	ip, lr
	beq	.L814
.L815:
	ldr	r1, [r1, #4]
	strd	r0, r1, [sp]
	ldr	r0, .L835+12
	ldr	r3, [r3, #4]
	ldr	r1, [r4, #4]
	bl	sftl_printk
	mov	r3, #-1
	str	r3, [r4]
.L814:
	ldr	r3, [r4, #8]
	cbz	r3, .L816
	ldr	r1, [r5, #3320]
	ldr	r2, [r3]
	ldr	r0, [r1]
	cmp	r2, r0
	bne	.L817
	ldr	ip, [r3, #2048]
	ldr	lr, [r1, #2048]
	cmp	ip, lr
	beq	.L816
.L817:
	ldr	r1, [r1, #4]
	strd	r0, r1, [sp]
	ldr	r0, .L835+16
	ldr	r3, [r3, #4]
	ldr	r1, [r4, #4]
	bl	sftl_printk
	mov	r3, #-1
	str	r3, [r4]
.L816:
	adds	r4, r4, #20
	b	.L811
.L810:
	ldr	r3, [r5, #8]
	cbz	r3, .L798
	ldr	r3, [r5, #12]
	cbnz	r3, .L799
.L798:
	ldr	r1, .L835+20
	movs	r2, #148
	ldr	r0, .L835+24
	bl	sftl_printk
.L799:
	add	r2, sp, #24
	add	r1, sp, #28
	mov	r0, r5
	bl	l2p_addr_tran
	ldr	r7, [sp, #24]
	cmp	r7, #3
	bls	.L800
.L834:
	mov	r3, #-1
	str	r3, [r5]
	b	.L801
.L800:
	cbnz	r7, .L802
	ldr	r3, [sp, #28]
	ldr	r2, [sp, #16]
	cmp	r2, r3
	bls	.L802
	ldr	r6, .L835+20
	ldr	r5, .L835+28
.L803:
	ldr	r2, [r4, #4]
	mov	r3, #-1
	mov	r1, r6
	str	r3, [r4]
	mov	r0, r5
	adds	r7, r7, #1
	bl	sftl_printk
	ldr	r1, [r4, #8]
	ldr	r0, .L835+32
	movs	r3, #16
	movs	r2, #4
	adds	r4, r4, #20
	bl	rknand_print_hex
	movs	r3, #4
	ldr	r1, [r4, #-8]
	mov	r2, r3
	ldr	r0, .L835+36
	bl	rknand_print_hex
	ldr	r3, [sp, #12]
	cmp	r3, r7
	bne	.L803
	bl	dump_stack
.L804:
	ldr	r2, [sp, #52]
	ldr	r3, [r10, #24]
	cmp	r2, r3
	beq	.L819
	bl	__stack_chk_fail
.L802:
	ldr	r1, [r5, #8]
	lsls	r3, r1, #26
	beq	.L820
	ldr	r7, [r6, #3320]
	cmp	r7, r1
	beq	.L805
	ldrh	r2, [r6, #258]
	mov	r0, r7
	lsls	r2, r2, #9
	bl	ftl_memcpy
.L805:
	ldr	r3, [r5, #12]
	mov	r2, r7
	ldr	r1, [sp, #28]
	ldrb	r0, [sp, #24]	@ zero_extendqisi2
	ldr	ip, [r6, #3252]
	blx	ip
	cbnz	r0, .L806
	str	r0, [r5]
.L807:
	ldrh	r3, [r6, #14]
	cmp	r3, #4
	bne	.L801
	ldr	r3, [r5, #12]
	add	r2, r7, #2048
	ldr	r1, [sp, #28]
	ldrb	r0, [sp, #24]	@ zero_extendqisi2
	adds	r3, r3, #8
	ldr	r7, [r6, #3252]
	add	r1, r1, r9
	blx	r7
	cmp	r0, #0
	bne	.L834
.L801:
	add	fp, fp, #1
	adds	r5, r5, #20
	b	.L797
.L820:
	mov	r7, r1
	b	.L805
.L806:
	mov	r3, #-1
	str	r3, [r5]
	b	.L807
.L819:
	movs	r0, #0
	add	sp, sp, #60
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L836:
	.align	2
.L835:
	.word	.LANCHOR0
	.word	.LC95
	.word	.LC96
	.word	.LC97
	.word	.LC98
	.word	.LANCHOR1+256
	.word	.LC8
	.word	.LC86
	.word	.LC87
	.word	.LC88
	.fnend
	.size	FlashProgPages, .-FlashProgPages
	.align	1
	.global	FtlLowFormatEraseBlock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlLowFormatEraseBlock, %function
FtlLowFormatEraseBlock:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	mov	r10, #0
	ldr	r4, .L882
	mov	r8, r0
	mov	r7, r1
	mov	r6, r10
	mov	r5, r10
	mov	r9, #20
	str	r0, [r4, #3284]
.L838:
	ldrh	r1, [r4, #232]
	uxth	r3, r10
	cmp	r1, r3
	bhi	.L843
	cmp	r6, #0
	beq	.L837
	mov	r9, #0
	mov	r10, #20
	ldr	r0, [r4, #3268]
	mov	r2, r6
	movs	r1, #0
	bl	FlashEraseBlocks
.L847:
	mul	r3, r10, r9
	ldr	r2, [r4, #3268]
	adds	r1, r2, r3
	ldr	r3, [r2, r3]
	adds	r3, r3, #1
	bne	.L846
	ldr	r0, [r1, #4]
	adds	r5, r5, #1
	uxth	r5, r5
	ubfx	r0, r0, #10, #16
	bl	FtlBbmMapBadBlock
.L846:
	add	r9, r9, #1
	uxth	r3, r9
	cmp	r6, r3
	bhi	.L847
	cmp	r7, #0
	beq	.L862
	ldrh	r3, [r4, #304]
	mov	fp, #1
	str	r3, [sp, #4]
.L848:
	mov	r10, #0
.L857:
	mov	r9, #0
	mov	r6, r9
.L849:
	ldrh	r1, [r4, #232]
	uxth	r3, r9
	cmp	r1, r3
	bhi	.L853
	cmp	r6, #0
	beq	.L837
	mov	r9, #0
	ldr	r0, [r4, #3268]
	mov	r2, fp
	mov	r1, r6
	movs	r3, #1
	bl	FlashProgPages
.L856:
	movs	r3, #20
	ldr	r2, [r4, #3268]
	mul	r3, r3, r9
	adds	r1, r2, r3
	ldr	r3, [r2, r3]
	cbz	r3, .L855
	ldr	r0, [r1, #4]
	adds	r5, r5, #1
	uxth	r5, r5
	ubfx	r0, r0, #10, #16
	bl	FtlBbmMapBadBlock
.L855:
	add	r9, r9, #1
	uxth	r3, r9
	cmp	r6, r3
	bhi	.L856
	add	r10, r10, #1
	ldr	r2, [sp, #4]
	uxth	r3, r10
	cmp	r2, r3
	bhi	.L857
	mov	r9, #0
	mov	r10, #20
.L859:
	cbz	r7, .L858
	mul	r3, r10, r9
	ldr	r2, [r4, #3268]
	adds	r1, r2, r3
	ldr	r3, [r2, r3]
	cbnz	r3, .L858
	ldr	r0, [r1, #4]
	movs	r1, #1
	ubfx	r0, r0, #10, #16
	bl	FtlFreeSysBlkQueueIn
.L858:
	add	r9, r9, #1
	uxth	r3, r9
	cmp	r6, r3
	bhi	.L859
	cmp	r8, #63
	bls	.L860
	cbz	r7, .L837
.L860:
	ldr	r0, [r4, #3268]
	mov	r2, r6
	mov	r1, fp
	bl	FlashEraseBlocks
.L837:
	mov	r0, r5
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L843:
	uxth	r3, r10
	ldr	r0, [r4, #3268]
	movs	r2, #0
	mul	r1, r9, r3
	add	r3, r3, r4
	str	r2, [r0, r1]
	mov	r1, r8
	ldrb	r0, [r3, #260]	@ zero_extendqisi2
	bl	V2P_block
	mov	fp, r0
	cbz	r7, .L839
	bl	IsBlkInVendorPart
	cbnz	r0, .L840
.L839:
	mov	r0, fp
	bl	FtlBbmIsBadBlock
	cbnz	r0, .L841
	ldr	r1, [r4, #3268]
	lsl	r0, fp, #10
	ldr	r3, [r4, #3316]
	mla	r1, r9, r6, r1
	str	r3, [r1, #8]
	ldrh	r3, [r4, #312]
	str	r0, [r1, #4]
	ldr	r0, [r4, #3336]
	muls	r3, r6, r3
	add	r6, r6, #1
	it	mi
	addmi	r3, r3, #3
	uxth	r6, r6
	bic	r3, r3, #3
	add	r3, r3, r0
	str	r3, [r1, #12]
.L840:
	add	r10, r10, #1
	b	.L838
.L841:
	adds	r5, r5, #1
	uxth	r5, r5
	b	.L840
.L862:
	movs	r3, #2
	mov	fp, r7
	str	r3, [sp, #4]
	b	.L848
.L853:
	uxth	r3, r9
	movs	r2, #20
	ldr	r0, [r4, #3268]
	mul	r1, r2, r3
	add	r3, r3, r4
	movs	r2, #0
	str	r2, [r0, r1]
	mov	r1, r8
	ldrb	r0, [r3, #260]	@ zero_extendqisi2
	bl	V2P_block
	str	r0, [sp]
	cbz	r7, .L850
	bl	IsBlkInVendorPart
	cbnz	r0, .L851
.L850:
	ldr	r0, [sp]
	bl	FtlBbmIsBadBlock
	cbnz	r0, .L851
	ldr	r1, [r4, #3268]
	movs	r3, #20
	ldr	r2, .L882
	mla	r1, r3, r6, r1
	ldr	r3, [sp]
	add	r0, r10, r3, lsl #10
	ldr	r3, [r4, #3312]
	str	r3, [r1, #8]
	ldrh	r3, [r4, #312]
	str	r0, [r1, #4]
	ldr	r0, [r2, #3316]
	muls	r3, r6, r3
	add	r6, r6, #1
	it	mi
	addmi	r3, r3, #3
	uxth	r6, r6
	bic	r3, r3, #3
	add	r3, r3, r0
	str	r3, [r1, #12]
.L851:
	add	r9, r9, #1
	b	.L849
.L883:
	.align	2
.L882:
	.word	.LANCHOR0
	.fnend
	.size	FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock
	.align	1
	.global	FlashTestBlk
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FlashTestBlk, %function
FlashTestBlk:
	.fnstart
	@ args = 0, pretend = 0, frame = 88
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	cmp	r0, #11
	mov	r4, r0
	.pad #88
	sub	sp, sp, #88
	mov	r3, sp
	bic	r6, r3, #8160
	bic	r6, r6, #31
	ldr	r3, [r6, #24]
	str	r3, [sp, #84]
	bls	.L888
	ldr	r5, .L890
	add	r0, sp, #20
	movs	r2, #32
	movs	r1, #165
	str	r0, [sp, #12]
	lsls	r4, r4, #10
	ldr	r3, [r5, #3324]
	str	r3, [sp, #8]
	bl	ftl_memset
	movs	r2, #8
	movs	r1, #90
	ldr	r0, [r5, #3324]
	bl	ftl_memset
	movs	r2, #1
	mov	r0, sp
	mov	r1, r2
	str	r4, [sp, #4]
	bl	FlashEraseBlocks
	movs	r3, #1
	mov	r0, sp
	mov	r2, r3
	mov	r1, r3
	bl	FlashProgPages
	ldr	r3, [sp]
	cbnz	r3, .L889
	adds	r3, r4, #1
	mov	r0, sp
	str	r3, [sp, #4]
	movs	r3, #1
	mov	r2, r3
	mov	r1, r3
	bl	FlashProgPages
	ldr	r5, [sp]
	subs	r5, r5, #0
	it	ne
	movne	r5, #1
	rsbs	r5, r5, #0
.L886:
	mov	r0, sp
	movs	r2, #1
	movs	r1, #0
	str	r4, [sp, #4]
	bl	FlashEraseBlocks
.L884:
	ldr	r2, [sp, #84]
	ldr	r3, [r6, #24]
	cmp	r2, r3
	beq	.L887
	bl	__stack_chk_fail
.L889:
	mov	r5, #-1
	b	.L886
.L888:
	movs	r5, #0
	b	.L884
.L887:
	mov	r0, r5
	add	sp, sp, #88
	@ sp needed
	pop	{r4, r5, r6, pc}
.L891:
	.align	2
.L890:
	.word	.LANCHOR0
	.fnend
	.size	FlashTestBlk, .-FlashTestBlk
	.section	.rodata.str1.1
.LC99:
	.ascii	"FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\012\000"
.LC100:
	.ascii	"FtlBbmTblFlush error:%x\012\000"
.LC101:
	.ascii	"FtlBbmTblFlush error = %x error count = %d\012\000"
	.text
	.align	1
	.global	FtlBbmTblFlush
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlBbmTblFlush, %function
FtlBbmTblFlush:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	.pad #8
	movs	r5, #0
	ldr	r4, .L903
	movs	r1, #0
	add	r6, r4, #380
	ldr	r0, [r4, #3300]
	ldr	r3, [r4, #3332]
	ldrh	r2, [r4, #310]
	str	r0, [r4, #3460]
	str	r3, [r4, #3464]
	bl	ftl_memset
.L893:
	ldrh	r3, [r4, #254]
	cmp	r3, r5
	bgt	.L894
	ldr	r5, [r4, #3464]
	movs	r2, #16
	movs	r1, #255
	ldr	r8, .L903+4
	mov	r0, r5
	ldr	r9, .L903+8
	bl	ftl_memset
	movw	r3, #61649
	strh	r3, [r5]	@ movhi
	movs	r6, #0
	mov	r7, r6
	ldr	r3, [r4, #360]
	str	r3, [r5, #4]
	ldrh	r3, [r4, #352]
	strh	r3, [r5, #2]	@ movhi
	ldr	r3, [r4, #356]
	str	r3, [r5, #8]
	ldr	r3, [r4, #228]
	strh	r3, [r5, #12]	@ movhi
	ldr	r3, [r4, #2604]
	strh	r3, [r5, #14]	@ movhi
.L895:
	ldr	r3, [r4, #3300]
	mov	r0, r8
	ldrh	r2, [r4, #354]
	mov	r10, #0
	str	r3, [r4, #3460]
	ldrh	r1, [r4, #352]
	ldr	r3, [r4, #3332]
	str	r3, [r4, #3464]
	orr	r3, r2, r1, lsl #10
	str	r3, [r4, #3456]
	ldrh	r3, [r5, #10]
	str	r3, [sp]
	ldrh	r3, [r4, #356]
	str	r10, [r4, #3452]
	bl	sftl_printk
	ldrh	r3, [r4, #304]
	ldrh	r2, [r4, #354]
	subs	r3, r3, #1
	cmp	r2, r3
	blt	.L896
	ldr	r3, [r4, #360]
	ldr	r0, [r4, #3268]
	adds	r3, r3, #1
	str	r3, [r4, #360]
	str	r3, [r5, #4]
	ldrh	r2, [r4, #352]
	ldrh	r3, [r4, #356]
	strh	r2, [r5, #8]	@ movhi
	strh	r2, [r4, #356]	@ movhi
	movs	r2, #1
	strh	r3, [r4, #352]	@ movhi
	mov	r1, r2
	lsls	r3, r3, #10
	str	r3, [r4, #3456]
	str	r3, [r0, #4]
	strh	r10, [r4, #354]	@ movhi
	bl	FlashEraseBlocks
.L896:
	movs	r3, #1
	mov	r0, r9
	mov	r2, r3
	mov	r1, r3
	bl	FlashProgPages
	ldrh	r3, [r4, #354]
	adds	r3, r3, #1
	strh	r3, [r4, #354]	@ movhi
	ldr	r3, [r4, #3452]
	adds	r2, r3, #1
	bne	.L897
	adds	r6, r6, #1
	ldr	r1, [r4, #3456]
	ldr	r0, .L903+12
	uxth	r6, r6
	bl	sftl_printk
	cmp	r6, #3
	bls	.L895
	ldr	r1, [r4, #3456]
	mov	r2, r6
	ldr	r0, .L903+16
	bl	sftl_printk
.L899:
	b	.L899
.L894:
	ldrh	r2, [r4, #3388]
	ldr	r3, [r4, #3460]
	ldr	r1, [r6], #4
	mul	r0, r5, r2
	lsls	r2, r2, #2
	adds	r5, r5, #1
	add	r0, r3, r0, lsl #2
	bl	ftl_memcpy
	b	.L893
.L897:
	adds	r7, r7, #1
	cmp	r7, #1
	ble	.L895
	cmp	r3, #256
	beq	.L895
	movs	r0, #0
	add	sp, sp, #8
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L904:
	.align	2
.L903:
	.word	.LANCHOR0
	.word	.LC99
	.word	.LANCHOR0+3452
	.word	.LC100
	.word	.LC101
	.fnend
	.size	FtlBbmTblFlush, .-FtlBbmTblFlush
	.align	1
	.global	allocate_data_superblock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	allocate_data_superblock, %function
allocate_data_superblock:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	mov	r5, r0
	ldr	r4, .L937
	ldr	r9, .L937+4
.L906:
	ldrh	r2, [r4, #2528]
	ldrh	r3, [r4, #224]
	add	r3, r3, r2
	ldrh	r2, [r4, #240]
	cmp	r3, r2
	ble	.L907
	ldr	r0, .L937+8
	mov	r1, r9
	movw	r2, #2667
	bl	sftl_printk
.L907:
	ldr	r3, .L937+12
	cmp	r5, r3
	bne	.L932
	ldrh	r3, [r4, #224]
	ldr	r1, [r4, #3164]
	mul	r2, r1, r3
	lsrs	r1, r3, #1
	movw	r3, #65535
	add	r1, r1, r2, lsr #2
	uxth	r1, r1
	cmp	r1, r3
	it	eq
	moveq	r1, #0
.L908:
	ldr	r0, .L937+16
	bl	List_pop_index_node
	ldrh	r3, [r4, #224]
	mov	r6, r0
	uxth	r8, r0
	cbnz	r3, .L909
	ldr	r0, .L937+8
	mov	r1, r9
	movw	r2, #2676
	bl	sftl_printk
.L909:
	ldrh	r3, [r4, #224]
	subs	r3, r3, #1
	strh	r3, [r4, #224]	@ movhi
	ldrh	r3, [r4, #240]
	cmp	r3, r8
	bls	.L906
	ldr	r3, [r4, #72]
	uxth	r6, r6
	ldrh	r7, [r3, r6, lsl #1]
	cmp	r7, #0
	bne	.L906
	mov	r0, r5
	strh	r8, [r5]	@ movhi
	bl	make_superblock
	ldrb	r3, [r5, #7]	@ zero_extendqisi2
	cbnz	r3, .L911
	ldr	r3, [r4, #72]
	movw	r2, #65535
	mov	r0, r8
	strh	r2, [r3, r6, lsl #1]	@ movhi
	bl	INSERT_DATA_LIST
	ldrh	r2, [r4, #2528]
	ldrh	r3, [r4, #224]
	add	r3, r3, r2
	ldrh	r2, [r4, #240]
	cmp	r3, r2
	ble	.L906
	ldr	r0, .L937+8
	mov	r1, r9
	movw	r2, #2690
	bl	sftl_printk
	b	.L906
.L932:
	movs	r1, #0
	b	.L908
.L911:
	ldrh	r2, [r4, #2528]
	ldrh	r3, [r4, #224]
	add	r3, r3, r2
	ldrh	r2, [r4, #240]
	cmp	r3, r2
	ble	.L913
	ldr	r0, .L937+8
	mov	r1, r9
	movw	r2, #2693
	bl	sftl_printk
.L913:
	ldr	r0, [r4, #3268]
	add	r10, r5, #16
	ldrh	r3, [r4, #232]
	mov	ip, r10
	str	r3, [sp]
	mov	r2, r0
	movs	r3, #0
	mov	lr, r3
.L914:
	ldr	fp, [sp]
	uxth	r1, r3
	cmp	fp, r1
	bhi	.L916
	cbnz	r7, .L917
	ldr	r0, .L937+8
	mov	r1, r9
	mov	r2, #2704
	bl	sftl_printk
.L917:
	ldrh	r3, [r4, #172]
	cmp	r3, r8
	bne	.L918
	ldr	r0, .L937+8
	mov	r1, r9
	movw	r2, #2706
	bl	sftl_printk
.L918:
	ldrb	r1, [r5, #8]	@ zero_extendqisi2
	ldr	r2, [r4, #2536]
	ldrh	r3, [r2, r6, lsl #1]
	cmp	r1, #0
	bne	.L919
	cmp	r3, #0
	beq	.L933
	ldrh	r1, [r4, #292]
	add	r3, r3, r1
	uxth	r3, r3
.L920:
	strh	r3, [r2, r6, lsl #1]	@ movhi
	ldr	r3, [r4, #2596]
	adds	r3, r3, #1
	str	r3, [r4, #2596]
.L921:
	ldr	r3, [r4, #2536]
	ldr	r2, [r4, #2612]
	ldrh	r0, [r4, #292]
	ldrh	r3, [r3, r6, lsl #1]
	ldrh	r1, [r4, #240]
	cmp	r3, r2
	ldr	r2, [r4, #2596]
	it	hi
	strhi	r3, [r4, #2612]
	ldr	r3, [r4, #2600]
	mla	r0, r2, r0, r3
	bl	__aeabi_uidiv
	ldr	r2, [r4, #3348]
	str	r0, [r4, #2604]
	ldr	r0, [r4, #3268]
	ldr	r3, [r2, #16]
	ldr	ip, .L937+20
	adds	r3, r3, #1
	str	r3, [r2, #16]
	adds	r3, r0, #4
	movs	r2, #0
.L923:
	uxth	r1, r2
	adds	r3, r3, #20
	cmp	r7, r1
	bhi	.L924
	ldrb	r1, [r5, #8]	@ zero_extendqisi2
	mov	r2, r7
	bl	FlashEraseBlocks
	mov	fp, #0
	mov	r2, fp
	movs	r1, #20
.L925:
	uxth	r3, fp
	cmp	r7, r3
	bhi	.L927
	cmp	r2, #0
	ble	.L928
	mov	r0, r8
	bl	update_multiplier_value
	bl	FtlBbmTblFlush
.L928:
	ldrb	r2, [r5, #7]	@ zero_extendqisi2
	cmp	r2, #0
	bne	.L929
	ldr	r3, [r4, #72]
	movw	r2, #65535
	strh	r2, [r3, r6, lsl #1]	@ movhi
	b	.L906
.L916:
	strd	lr, lr, [r2, #8]
	movw	fp, #65535
	ldrh	r1, [ip], #2
	cmp	r1, fp
	beq	.L915
	mov	fp, #20
	lsls	r1, r1, #10
	mla	fp, fp, r7, r0
	adds	r7, r7, #1
	uxth	r7, r7
	str	r1, [fp, #4]
.L915:
	adds	r3, r3, #1
	adds	r2, r2, #20
	b	.L914
.L933:
	movs	r3, #2
	b	.L920
.L919:
	adds	r3, r3, #1
	strh	r3, [r2, r6, lsl #1]	@ movhi
	ldr	r3, [r4, #2600]
	adds	r3, r3, #1
	str	r3, [r4, #2600]
	b	.L921
.L924:
	ldr	r1, [r3, #-20]
	adds	r2, r2, #1
	and	r1, r1, ip
	str	r1, [r3, #-20]
	b	.L923
.L927:
	mul	r3, r1, fp
	ldr	r0, [r4, #3268]
	add	ip, r0, r3
	ldr	r3, [r0, r3]
	adds	r0, r3, #1
	bne	.L926
	ldr	r0, [ip, #4]
	adds	r2, r2, #1
	str	r3, [sp, #4]
	str	r2, [sp]
	ubfx	r0, r0, #10, #16
	bl	FtlBbmMapBadBlock
	ldr	r3, [sp, #4]
	strh	r3, [r10, fp, lsl #1]	@ movhi
	movs	r1, #20
	ldr	r2, [sp]
	ldrb	r3, [r5, #7]	@ zero_extendqisi2
	subs	r3, r3, #1
	strb	r3, [r5, #7]
.L926:
	add	fp, fp, #1
	b	.L925
.L929:
	ldrh	r3, [r4, #302]
	strh	r8, [r5]	@ movhi
	smulbb	r3, r3, r2
	movs	r2, #0
	strh	r2, [r5, #2]	@ movhi
	strb	r2, [r5, #6]
	ldr	r2, [r4, #2588]
	uxth	r3, r3
	str	r2, [r5, #12]
	adds	r2, r2, #1
	str	r2, [r4, #2588]
	ldr	r2, [r4, #72]
	ldrh	r1, [r5]
	strh	r3, [r5, #4]	@ movhi
	strh	r3, [r2, r1, lsl #1]	@ movhi
	ldrh	r3, [r5, #4]
	cbz	r3, .L930
	ldrb	r3, [r5, #7]	@ zero_extendqisi2
	cbnz	r3, .L931
.L930:
	ldr	r1, .L937+4
	movw	r2, #2759
	ldr	r0, .L937+8
	bl	sftl_printk
.L931:
	movs	r0, #0
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L938:
	.align	2
.L937:
	.word	.LANCHOR0
	.word	.LANCHOR1+271
	.word	.LC8
	.word	.LANCHOR0+124
	.word	.LANCHOR0+2532
	.word	-1024
	.fnend
	.size	allocate_data_superblock, .-allocate_data_superblock
	.section	.rodata.str1.1
.LC102:
	.ascii	"FtlGcFreeBadSuperBlk 0x%x\012\000"
	.text
	.align	1
	.global	FtlGcFreeBadSuperBlk
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcFreeBadSuperBlk, %function
FtlGcFreeBadSuperBlk:
	.fnstart
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r9, r0
	ldr	r4, .L947
	.pad #20
	sub	sp, sp, #20
	ldrh	r3, [r4, #3206]
	cmp	r3, #0
	bne	.L946
.L941:
	movs	r0, #0
	add	sp, sp, #20
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L945:
	uxtah	r3, r4, r8
	mov	r1, r9
	ldrb	r0, [r3, #260]	@ zero_extendqisi2
	bl	V2P_block
	mov	r5, r0
	movs	r3, #0
.L942:
	ldrh	r1, [r4, #3206]
	uxth	r2, r3
	cmp	r1, r2
	bhi	.L944
	add	r8, r8, #1
.L940:
	ldrh	r2, [r4, #232]
	uxth	r3, r8
	cmp	r2, r3
	bhi	.L945
	bl	FtlGcReFreshBadBlk
	b	.L941
.L944:
	uxth	r7, r3
	lsls	r1, r7, #1
	str	r1, [sp, #4]
	add	r1, r4, r7, lsl #1
	ldrh	r1, [r1, #3208]
	cmp	r1, r5
	bne	.L943
	mov	r1, r5
	mov	r0, fp
	strd	r2, r3, [sp, #8]
	bl	sftl_printk
	mov	r0, r5
	bl	FtlBbmMapBadBlock
	bl	FtlBbmTblFlush
	ldrh	r6, [r4, #3206]
	ldr	r2, [sp, #8]
	adds	r1, r7, #1
	subs	r0, r6, r2
	add	r1, r10, r1, lsl #1
	uxth	r0, r0
	lsls	r0, r0, #1
	cmp	r2, r6
	ite	ls
	movls	r2, r0
	movhi	r2, #0
	ldr	r0, [sp, #4]
	subs	r6, r6, #1
	add	r0, r0, r10
	bl	memmove
	ldr	r3, [sp, #12]
	strh	r6, [r4, #3206]	@ movhi
.L943:
	adds	r3, r3, #1
	b	.L942
.L946:
	ldr	fp, .L947+4
	addw	r10, r4, #3208
	mov	r8, #0
	b	.L940
.L948:
	.align	2
.L947:
	.word	.LANCHOR0
	.word	.LC102
	.fnend
	.size	FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk
	.align	1
	.global	update_vpc_list
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	update_vpc_list, %function
update_vpc_list:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, lr}
	.save {r3, r4, r5, lr}
	mov	r5, r0
	ldr	r4, .L961
	ldr	r3, [r4, #72]
	ldrh	r3, [r3, r0, lsl #1]
	cmp	r3, #0
	bne	.L950
	ldrh	r3, [r4, #222]
	cmp	r3, r0
	itt	eq
	movweq	r3, #65535
	strheq	r3, [r4, #222]	@ movhi
	ldrh	r3, [r4, #220]
	cmp	r3, r0
	itt	eq
	movweq	r3, #65535
	strheq	r3, [r4, #220]	@ movhi
	ldrh	r3, [r4, #172]
	cmp	r3, r0
	bne	.L953
	movw	r3, #65535
	strh	r3, [r4, #172]	@ movhi
.L954:
	ldr	r0, .L961+4
	mov	r1, r5
	bl	List_remove_node
	ldrh	r3, [r4, #2528]
	cbnz	r3, .L956
	ldr	r1, .L961+8
	movw	r2, #2835
	ldr	r0, .L961+12
	bl	sftl_printk
.L956:
	ldrh	r3, [r4, #2528]
	mov	r0, r5
	subs	r3, r3, #1
	strh	r3, [r4, #2528]	@ movhi
	bl	free_data_superblock
	mov	r0, r5
	bl	FtlGcFreeBadSuperBlk
	ldrh	r2, [r4, #2528]
	ldrh	r3, [r4, #224]
	add	r3, r3, r2
	ldrh	r2, [r4, #240]
	cmp	r3, r2
	ble	.L960
	ldr	r1, .L961+8
	movw	r2, #2838
	ldr	r0, .L961+12
	bl	sftl_printk
.L960:
	movs	r0, #1
	b	.L949
.L953:
	ldrh	r3, [r4, #24]
	cmp	r3, r0
	beq	.L959
	ldrh	r3, [r4, #76]
	cmp	r3, r0
	beq	.L959
	ldrh	r3, [r4, #124]
	cmp	r3, r0
	bne	.L954
.L959:
	movs	r0, #0
.L949:
	pop	{r3, r4, r5, pc}
.L950:
	bl	List_update_data_list
	b	.L959
.L962:
	.align	2
.L961:
	.word	.LANCHOR0
	.word	.LANCHOR0+2520
	.word	.LANCHOR1+296
	.word	.LC8
	.fnend
	.size	update_vpc_list, .-update_vpc_list
	.section	.rodata.str1.1
.LC103:
	.ascii	"decrement_vpc_count %x = %d\012\000"
	.text
	.align	1
	.global	decrement_vpc_count
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	decrement_vpc_count, %function
decrement_vpc_count:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	movw	r3, #65535
	ldr	r6, .L972
	mov	r4, r0
	cmp	r0, r3
	beq	.L964
	ldr	r3, [r6, #72]
	ldrh	r2, [r3, r0, lsl #1]
	cbnz	r2, .L965
	mov	r1, r0
	ldr	r0, .L972+4
	bl	sftl_printk
	ldr	r3, [r6, #72]
	ldrh	r5, [r3, r4, lsl #1]
	cbz	r5, .L966
.L970:
	movs	r5, #0
.L963:
	mov	r0, r5
	pop	{r4, r5, r6, pc}
.L966:
	movw	r2, #2853
.L971:
	ldr	r1, .L972+8
	ldr	r0, .L972+12
	bl	sftl_printk
	b	.L963
.L965:
	subs	r2, r2, #1
	strh	r2, [r3, r0, lsl #1]	@ movhi
.L964:
	ldrh	r0, [r6, #3438]
	movw	r3, #65535
	cmp	r0, r3
	bne	.L968
	strh	r4, [r6, #3438]	@ movhi
	b	.L970
.L968:
	cmp	r0, r4
	beq	.L970
	bl	update_vpc_list
	ldr	r2, [r6, #2516]
	ldr	r3, [r6, #2520]
	subs	r5, r0, #0
	strh	r4, [r6, #3438]	@ movhi
	sub	r3, r3, r2
	ldr	r2, .L972+16
	it	ne
	movne	r5, #1
	asrs	r3, r3, #1
	muls	r3, r2, r3
	ldr	r2, [r6, #72]
	uxth	r1, r3
	ldrh	r2, [r2, r1, lsl #1]
	cmp	r2, #0
	bne	.L963
	cmp	r1, r4
	beq	.L963
	movw	r2, #2869
	b	.L971
.L973:
	.align	2
.L972:
	.word	.LANCHOR0
	.word	.LC103
	.word	.LANCHOR1+312
	.word	.LC8
	.word	-1431655765
	.fnend
	.size	decrement_vpc_count, .-decrement_vpc_count
	.align	1
	.global	FtlSuperblockPowerLostFix
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlSuperblockPowerLostFix, %function
FtlSuperblockPowerLostFix:
	.fnstart
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, lr}
	.save {r4, r5, r6, r7, r8, r9, lr}
	mvn	r2, #2
	ldr	r5, .L986
	.pad #28
	sub	sp, sp, #28
	mov	r9, #0
	mov	r3, sp
	mov	r4, r0
	bic	r8, r3, #8160
	bic	r8, r8, #31
	ldr	r7, [r5, #3332]
	str	r7, [sp, #12]
	ldr	r3, [r8, #24]
	str	r3, [sp, #20]
	mov	r3, #-1
	str	r3, [sp, #16]
	ldr	r3, [r5, #3300]
	str	r3, [sp, #8]
	mvn	r3, #1
	strd	r2, r3, [r7, #8]
	movw	r2, #61589
	ldrh	r3, [r0]
	strh	r3, [r7, #2]	@ movhi
	strh	r9, [r7]	@ movhi
	ldr	r3, [r5, #3300]
	str	r2, [r3]
	add	r2, r2, #304087040
	add	r2, r2, #1269760
	ldr	r3, [r5, #3300]
	addw	r2, r2, #1507
	str	r2, [r3, #4]
	ldrh	r6, [r0, #4]
	and	r6, r6, #1
	adds	r6, r6, #6
.L975:
	ldrh	r3, [r4, #4]
	cbz	r6, .L977
	cbnz	r3, .L976
.L977:
	ldrh	r1, [r4]
	ldr	r2, [r5, #72]
	ldrh	r0, [r4, #4]
	ldrh	r3, [r2, r1, lsl #1]
	subs	r3, r3, r0
	strh	r3, [r2, r1, lsl #1]	@ movhi
	ldr	r2, [sp, #20]
	ldrh	r3, [r5, #302]
	strh	r3, [r4, #2]	@ movhi
	movs	r3, #0
	strb	r3, [r4, #6]
	strh	r3, [r4, #4]	@ movhi
	ldr	r3, [r8, #24]
	cmp	r2, r3
	beq	.L981
	bl	__stack_chk_fail
.L976:
	mov	r0, r4
	bl	get_new_active_ppa
	str	r0, [sp, #4]
	adds	r0, r0, #1
	beq	.L977
	ldr	r3, [r5, #2592]
	movs	r1, #1
	str	r3, [r7, #4]
	mov	r0, sp
	adds	r2, r3, #1
	adds	r3, r3, #2
	it	eq
	moveq	r2, r9
	movs	r3, #0
	str	r2, [r5, #2592]
	mov	r2, r3
	bl	FlashProgPages
	ldrh	r0, [r4]
	subs	r6, r6, #1
	bl	decrement_vpc_count
	b	.L975
.L981:
	add	sp, sp, #28
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, pc}
.L987:
	.align	2
.L986:
	.word	.LANCHOR0
	.fnend
	.size	FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix
	.align	1
	.global	FtlMakeBbt
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlMakeBbt, %function
FtlMakeBbt:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r8, #0
	ldr	r7, .L1007
	bl	FtlBbtMemInit
	sub	r9, r7, #16
	sub	r4, r7, #380
	add	fp, r7, #3072
	bl	FtlLoadFactoryBbt
.L989:
	ldrh	r3, [r4, #254]
	cmp	r3, r8
	bhi	.L995
	movs	r5, #0
.L996:
	ldrh	r3, [r4, #314]
	uxth	r0, r5
	cmp	r3, r0
	bhi	.L997
	ldrh	r5, [r4, #364]
	movw	r6, #65535
	subs	r5, r5, #1
	uxth	r5, r5
.L998:
	ldrh	r3, [r4, #364]
	subs	r3, r3, #48
	cmp	r5, r3
	ble	.L1002
	mov	r0, r5
	bl	FtlBbmIsBadBlock
	cmp	r0, #1
	beq	.L999
	mov	r0, r5
	bl	FlashTestBlk
	cmp	r0, #0
	beq	.L1000
	mov	r0, r5
	bl	FtlBbmMapBadBlock
.L999:
	subs	r5, r5, #1
	uxth	r5, r5
	b	.L998
.L995:
	ldrh	r5, [r9]
	movw	r3, #65535
	ldr	r0, [r4, #3300]
	ldr	r10, [r4, #3332]
	cmp	r5, r3
	str	r0, [r4, #3460]
	str	r10, [r4, #3464]
	beq	.L990
	ldrh	r3, [r4, #298]
	movs	r2, #1
	mov	r0, fp
	mov	r1, r2
	mla	r5, r8, r3, r5
	lsls	r3, r5, #10
	str	r3, [r4, #3456]
	bl	FlashReadPages
	ldrh	r2, [r4, #298]
	ldr	r1, [r4, #3460]
	adds	r2, r2, #7
	ldr	r0, [r7]
	lsrs	r2, r2, #3
	bl	ftl_memcpy
.L991:
	uxth	r0, r5
	add	r8, r8, #1
	adds	r7, r7, #4
	add	r9, r9, #2
	bl	FtlBbmMapBadBlock
	b	.L989
.L990:
	mov	r1, r8
	bl	FlashGetBadBlockList
	ldr	r1, [r7]
	ldr	r0, [r4, #3460]
	bl	FtlBbt2Bitmap
	ldrh	r6, [r4, #298]
.L993:
	subs	r6, r6, #1
	uxth	r6, r6
.L992:
	ldrh	r0, [r4, #298]
	smlabb	r0, r0, r8, r6
	uxth	r0, r0
	bl	FtlBbmIsBadBlock
	cmp	r0, #1
	beq	.L993
	movs	r2, #16
	movs	r1, #0
	ldr	r0, [r4, #3332]
	strh	r6, [r9]	@ movhi
	bl	ftl_memset
	mov	r2, #4096
	movs	r1, #0
	ldr	r0, [r4, #3300]
	bl	ftl_memset
	movw	r3, #61664
	strh	r3, [r10]	@ movhi
	movs	r3, #0
	str	r3, [r10, #4]
	ldrh	r3, [r4, #298]
	ldrh	r5, [r9]
	ldrh	r2, [r4, #3388]
	strh	r5, [r10, #2]	@ movhi
	ldr	r1, [r7]
	mla	r5, r8, r3, r5
	lsls	r2, r2, #2
	ldr	r0, [r4, #3460]
	lsls	r3, r5, #10
	str	r3, [r4, #3456]
	bl	ftl_memcpy
	movs	r2, #1
	mov	r0, fp
	mov	r1, r2
	bl	FlashEraseBlocks
	movs	r3, #1
	mov	r0, fp
	mov	r2, r3
	mov	r1, r3
	bl	FlashProgPages
	ldr	r3, [r4, #3452]
	uxth	r0, r5
	adds	r3, r3, #1
	bne	.L991
	bl	FtlBbmMapBadBlock
	b	.L992
.L997:
	adds	r5, r5, #1
	bl	FtlBbmMapBadBlock
	b	.L996
.L1000:
	ldrh	r3, [r4, #352]
	cmp	r3, r6
	bne	.L1001
	strh	r5, [r4, #352]	@ movhi
	b	.L999
.L1001:
	strh	r5, [r4, #356]	@ movhi
.L1002:
	ldr	r0, [r4, #3268]
	movs	r5, #0
	ldrh	r3, [r4, #352]
	movs	r1, #1
	str	r5, [r4, #360]
	movs	r2, #2
	strh	r5, [r4, #354]	@ movhi
	lsls	r3, r3, #10
	str	r3, [r0, #4]
	ldrh	r3, [r4, #356]
	lsls	r3, r3, #10
	str	r3, [r0, #24]
	bl	FlashEraseBlocks
	ldrh	r0, [r4, #352]
	bl	FtlBbmMapBadBlock
	ldrh	r0, [r4, #356]
	bl	FtlBbmMapBadBlock
	bl	FtlBbmTblFlush
	ldr	r3, [r4, #360]
	ldrh	r2, [r4, #356]
	adds	r3, r3, #1
	str	r3, [r4, #360]
	ldrh	r3, [r4, #352]
	strh	r5, [r4, #354]	@ movhi
	strh	r2, [r4, #352]	@ movhi
	strh	r3, [r4, #356]	@ movhi
	bl	FtlBbmTblFlush
	mov	r0, r5
	pop	{r3, r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1008:
	.align	2
.L1007:
	.word	.LANCHOR0+380
	.fnend
	.size	FtlMakeBbt, .-FtlMakeBbt
	.align	1
	.global	ftl_memcmp
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_memcmp, %function
ftl_memcmp:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	b	memcmp
	.fnend
	.size	ftl_memcmp, .-ftl_memcmp
	.align	1
	.global	js_hash
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	js_hash, %function
js_hash:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	mov	r3, r0
	add	r1, r1, r0
	ldr	r0, .L1013
	push	{r4, lr}
	.save {r4, lr}
.L1011:
	cmp	r3, r1
	bne	.L1012
	pop	{r4, pc}
.L1012:
	lsrs	r2, r0, #2
	ldrb	r4, [r3], #1	@ zero_extendqisi2
	add	r2, r2, r0, lsl #5
	add	r2, r2, r4
	eors	r0, r0, r2
	b	.L1011
.L1014:
	.align	2
.L1013:
	.word	1204201446
	.fnend
	.size	js_hash, .-js_hash
	.section	.rodata.str1.1
.LC104:
	.ascii	"FtlMapWritePage error = %x \012\000"
.LC105:
	.ascii	"FtlMapWritePage error = %x error count = %d\012\000"
	.text
	.align	1
	.global	FtlMapWritePage
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlMapWritePage, %function
FtlMapWritePage:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	mov	r4, r0
	ldr	r5, .L1039
	ldr	r10, .L1039+4
	mov	r8, r1
	lsl	fp, r1, #2
	str	r2, [sp, #4]
	movs	r6, #0
.L1016:
	ldr	r3, [r5, #2572]
	adds	r3, r3, #1
	str	r3, [r5, #2572]
	ldrh	r3, [r5, #304]
	ldrh	r2, [r4, #2]
	subs	r3, r3, #1
	cmp	r2, r3
	bge	.L1017
	ldrh	r2, [r4]
	movw	r3, #65535
	cmp	r2, r3
	bne	.L1018
.L1017:
	mov	r0, r4
	bl	Ftl_write_map_blk_to_last_page
.L1018:
	ldrh	r2, [r4]
	ldr	r3, [r4, #12]
	ldrh	r3, [r3, r2, lsl #1]
	cbnz	r3, .L1019
	ldr	r0, .L1039+8
	mov	r1, r10
	mov	r2, #700
	bl	sftl_printk
.L1019:
	ldrh	r2, [r4]
	ldrh	r3, [r4, #10]
	cmp	r2, r3
	bcc	.L1020
	ldr	r0, .L1039+8
	mov	r1, r10
	movw	r2, #701
	bl	sftl_printk
.L1020:
	ldrh	r2, [r4]
	movs	r1, #0
	ldr	r3, [r4, #12]
	ldr	r0, [r5, #3332]
	ldrh	r9, [r3, r2, lsl #1]
	ldrh	r2, [r4, #2]
	ldr	r3, [sp, #4]
	str	r3, [r5, #3460]
	orr	r2, r2, r9, lsl #10
	str	r2, [r5, #3456]
	movs	r2, #16
	str	r0, [r5, #3464]
	bl	ftl_memset
	ldr	r7, [r5, #3464]
	ldr	r2, [r4, #28]
	str	r2, [r7, #4]
	strh	r8, [r7, #8]	@ movhi
	ldrh	r2, [r4, #4]
	strh	r2, [r7]	@ movhi
	strh	r9, [r7, #2]	@ movhi
	ldrh	r1, [r5, #310]
	ldr	r0, [r5, #3460]
	bl	js_hash
	movs	r3, #1
	str	r0, [r7, #12]
	mov	r2, r3
	mov	r1, r3
	ldr	r0, .L1039+12
	bl	FlashProgPages
	ldrh	r3, [r4, #2]
	adds	r3, r3, #1
	strh	r3, [r4, #2]	@ movhi
	ldr	r3, [r5, #3452]
	adds	r3, r3, #1
	bne	.L1021
	ldr	r1, [r5, #3456]
	adds	r6, r6, #1
	ldr	r0, .L1039+16
	bl	sftl_printk
	ldrh	r3, [r4, #2]
	uxth	r6, r6
	cmp	r3, #2
	ittt	ls
	ldrhls	r3, [r5, #304]
	addls	r3, r3, #-1
	strhls	r3, [r4, #2]	@ movhi
	cmp	r6, #3
	bls	.L1023
	ldr	r1, [r5, #3456]
	mov	r2, r6
	ldr	r0, .L1039+20
	bl	sftl_printk
.L1024:
	b	.L1024
.L1023:
	ldr	r3, [r4, #32]
	cmp	r3, #0
	beq	.L1016
.L1026:
	b	.L1026
.L1021:
	ldr	r3, [r4, #24]
	ldr	r2, [r5, #3456]
	str	r2, [r3, fp]
	ldrh	r3, [r4, #2]
	cmp	r3, #1
	beq	.L1027
	ldr	r3, [r5, #3452]
	cmp	r3, #256
	beq	.L1027
	ldr	r2, [r4, #36]
	cbz	r2, .L1028
.L1027:
	movs	r3, #0
	str	r3, [r4, #36]
	b	.L1016
.L1028:
	adds	r3, r3, #1
	bne	.L1029
	ldr	r1, .L1039+4
	movw	r2, #745
	ldr	r0, .L1039+8
	bl	sftl_printk
.L1029:
	movs	r0, #0
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1040:
	.align	2
.L1039:
	.word	.LANCHOR0
	.word	.LANCHOR1+332
	.word	.LC8
	.word	.LANCHOR0+3452
	.word	.LC104
	.word	.LC105
	.fnend
	.size	FtlMapWritePage, .-FtlMapWritePage
	.section	.rodata.str1.1
.LC106:
	.ascii	"region_id = %x phyAddr = %x\012\000"
.LC107:
	.ascii	"map_ppn:\000"
.LC108:
	.ascii	"load_l2p_region refresh = %x phyAddr = %x\012\000"
	.text
	.align	1
	.global	load_l2p_region
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	load_l2p_region, %function
load_l2p_region:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, lr}
	.save {r4, r5, r6, r7, r8, lr}
	mov	r5, r0
	ldr	r4, .L1050
	mov	r6, r1
	ldrh	r3, [r4, #336]
	cmp	r3, r0
	bcs	.L1042
	ldr	r1, .L1050+4
	movw	r2, #485
	ldr	r0, .L1050+8
	bl	sftl_printk
.L1042:
	ldr	r3, [r4, #3376]
	movs	r1, #12
	muls	r6, r1, r6
	ldr	r7, [r3, r5, lsl #2]
	ldr	r3, [r4, #2540]
	add	r3, r3, r6
	ldr	r0, [r3, #8]
	cbnz	r7, .L1043
	movs	r1, #255
	ldrh	r2, [r4, #310]
	bl	ftl_memset
	ldr	r3, [r4, #2540]
	strh	r5, [r3, r6]	@ movhi
	ldr	r1, [r4, #2540]
	add	r6, r6, r1
	str	r7, [r6, #4]
.L1044:
	movs	r0, #0
	pop	{r4, r5, r6, r7, r8, pc}
.L1043:
	ldr	r3, [r4, #3332]
	movs	r2, #1
	str	r0, [r4, #3460]
	mov	r1, r2
	ldr	r0, .L1050+12
	str	r3, [r4, #3464]
	str	r7, [r4, #3456]
	bl	FlashReadPages
	ldr	r8, [r4, #3464]
	ldrh	r3, [r8, #8]
	cmp	r3, r5
	beq	.L1045
	ldr	r0, .L1050+16
	mov	r2, r7
	mov	r1, r5
	bl	sftl_printk
	movs	r3, #4
	ldr	r1, [r4, #3464]
	mov	r2, r3
	ldr	r0, .L1050+20
	bl	rknand_print_hex
	ldrh	r3, [r4, #336]
	ldr	r1, [r4, #3376]
	movs	r2, #4
	ldr	r0, .L1050+24
	bl	rknand_print_hex
.L1046:
	ldrh	r3, [r8, #8]
	cmp	r3, r5
	beq	.L1048
	ldr	r1, .L1050+4
	mov	r2, #508
	ldr	r0, .L1050+8
	bl	sftl_printk
.L1048:
	ldr	r3, [r4, #2540]
	movs	r1, #0
	adds	r2, r3, r6
	str	r1, [r2, #4]
	strh	r5, [r3, r6]	@ movhi
	b	.L1044
.L1045:
	ldr	r3, [r4, #3452]
	cmp	r3, #256
	bne	.L1048
	mov	r2, r7
	mov	r1, r5
	ldr	r0, .L1050+28
	bl	sftl_printk
	ldr	r3, [r4, #2540]
	mov	r1, r5
	ldr	r0, .L1050+32
	add	r3, r3, r6
	ldr	r2, [r3, #8]
	bl	FtlMapWritePage
	b	.L1046
.L1051:
	.align	2
.L1050:
	.word	.LANCHOR0
	.word	.LANCHOR1+348
	.word	.LC8
	.word	.LANCHOR0+3452
	.word	.LC106
	.word	.LC94
	.word	.LC107
	.word	.LC108
	.word	.LANCHOR0+3392
	.fnend
	.size	load_l2p_region, .-load_l2p_region
	.align	1
	.global	ftl_map_blk_gc
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_map_blk_gc, %function
ftl_map_blk_gc:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	mov	r4, r0
	ldr	r5, .L1068
	ldr	r7, [r0, #12]
	ldr	r10, [r0, #24]
	bl	ftl_free_no_use_map_blk
	ldrh	r3, [r4, #10]
	ldrh	r2, [r4, #8]
	subs	r3, r3, #5
	cmp	r2, r3
	blt	.L1053
	uxth	r0, r0
	ldrh	r9, [r7, r0, lsl #1]
	cmp	r9, #0
	beq	.L1053
	ldr	r6, [r4, #32]
	cbnz	r6, .L1053
	movs	r3, #1
	str	r3, [r4, #32]
	strh	r6, [r7, r0, lsl #1]	@ movhi
	ldrh	r3, [r4, #8]
	ldrh	r2, [r4, #2]
	subs	r3, r3, #1
	strh	r3, [r4, #8]	@ movhi
	ldrh	r3, [r5, #304]
	cmp	r2, r3
	bcc	.L1055
	mov	r0, r4
	bl	ftl_map_blk_alloc_new_blk
.L1055:
	ldrh	r2, [r4, #6]
	uxth	fp, r6
	cmp	r2, fp
	bhi	.L1062
	mov	r0, r9
	movs	r1, #1
	bl	FtlFreeSysBlkQueueIn
	movs	r3, #0
	str	r3, [r4, #32]
.L1053:
	ldrh	r2, [r4, #2]
	ldrh	r3, [r5, #304]
	cmp	r2, r3
	bcc	.L1063
	mov	r0, r4
	bl	ftl_map_blk_alloc_new_blk
.L1063:
	movs	r0, #0
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1062:
	uxth	r7, r6
	add	r3, r10, r7, lsl #2
	str	r3, [sp, #4]
	ldr	r2, [r10, r7, lsl #2]
	cmp	r9, r2, lsr #10
	bne	.L1056
	ldr	r2, [r5, #3304]
	ldr	r8, [r5, #3332]
	str	r2, [r5, #3460]
	str	r8, [r5, #3464]
	ldr	r2, [r10, r7, lsl #2]
	str	r2, [r5, #3456]
	movs	r2, #1
	ldr	r0, .L1068+4
	mov	r1, r2
	bl	FlashReadPages
	ldrh	r2, [r8, #8]
	cmp	r2, fp
	beq	.L1057
	ldr	r1, .L1068+8
	movw	r2, #611
	ldr	r0, .L1068+12
	bl	sftl_printk
.L1057:
	ldr	r2, [r5, #3452]
	adds	r2, r2, #1
	bne	.L1058
.L1060:
	ldr	r2, [sp, #4]
	movs	r3, #0
	str	r3, [r2]
.L1059:
	b	.L1059
.L1058:
	ldrh	r2, [r8, #8]
	cmp	r2, fp
	bne	.L1060
	ldrh	r2, [r8]
	ldrh	r3, [r4, #4]
	cmp	r2, r3
	bne	.L1060
	ldr	r2, [r5, #3460]
	mov	r1, r7
	mov	r0, r4
	bl	FtlMapWritePage
.L1056:
	adds	r6, r6, #1
	b	.L1055
.L1069:
	.align	2
.L1068:
	.word	.LANCHOR0
	.word	.LANCHOR0+3452
	.word	.LANCHOR1+364
	.word	.LC8
	.fnend
	.size	ftl_map_blk_gc, .-ftl_map_blk_gc
	.align	1
	.global	Ftl_write_map_blk_to_last_page
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	Ftl_write_map_blk_to_last_page, %function
Ftl_write_map_blk_to_last_page:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, lr}
	.save {r4, r5, r6, r7, r8, lr}
	movw	r2, #65535
	mov	r4, r0
	ldrh	r3, [r0]
	ldr	r5, [r0, #12]
	cmp	r3, r2
	bne	.L1071
	ldrh	r3, [r0, #8]
	cbz	r3, .L1072
	ldr	r1, .L1080
	movw	r2, #641
	ldr	r0, .L1080+4
	bl	sftl_printk
.L1072:
	ldrh	r3, [r4, #8]
	adds	r3, r3, #1
	strh	r3, [r4, #8]	@ movhi
	bl	FtlFreeSysBlkQueueOut
	strh	r0, [r5]	@ movhi
	movs	r3, #0
	str	r3, [r4]
	ldr	r3, [r4, #28]
	adds	r3, r3, #1
	str	r3, [r4, #28]
.L1073:
	movs	r0, #0
	pop	{r4, r5, r6, r7, r8, pc}
.L1071:
	ldrh	r7, [r5, r3, lsl #1]
	movs	r1, #255
	ldr	r5, .L1080+8
	ldrh	r3, [r0, #2]
	ldr	r8, [r0, #24]
	ldr	r6, [r5, #3332]
	orr	r3, r3, r7, lsl #10
	str	r3, [r5, #3456]
	ldr	r3, [r5, #3300]
	str	r3, [r5, #3460]
	ldr	r3, [r0, #28]
	str	r6, [r5, #3464]
	str	r3, [r6, #4]
	movw	r3, #64245
	strh	r3, [r6, #8]	@ movhi
	ldrh	r3, [r0, #4]
	strh	r3, [r6]	@ movhi
	strh	r7, [r6, #2]	@ movhi
	ldrh	r2, [r5, #304]
	ldr	r0, [r5, #3300]
	lsls	r2, r2, #3
	bl	ftl_memset
	movs	r2, #0
	mov	r3, r2
.L1074:
	ldrh	r0, [r4, #6]
	uxth	r1, r2
	cmp	r0, r1
	bhi	.L1076
	ldrh	r1, [r5, #310]
	ldr	r0, [r5, #3460]
	bl	js_hash
	movs	r2, #1
	str	r0, [r6, #12]
	mov	r1, r2
	movs	r3, #0
	ldr	r0, .L1080+12
	bl	FlashProgPages
	ldrh	r3, [r4, #2]
	mov	r0, r4
	adds	r3, r3, #1
	strh	r3, [r4, #2]	@ movhi
	bl	ftl_map_blk_gc
	b	.L1073
.L1076:
	uxth	r0, r2
	ldr	r1, [r8, r0, lsl #2]
	cmp	r7, r1, lsr #10
	bne	.L1075
	adds	r3, r3, #1
	ldr	r1, [r5, #3300]
	uxth	r3, r3
	str	r0, [r1, r3, lsl #3]
	ldr	r1, [r5, #3300]
	ldr	r0, [r8, r0, lsl #2]
	add	r1, r1, r3, lsl #3
	str	r0, [r1, #4]
.L1075:
	adds	r2, r2, #1
	b	.L1074
.L1081:
	.align	2
.L1080:
	.word	.LANCHOR1+379
	.word	.LC8
	.word	.LANCHOR0
	.word	.LANCHOR0+3452
	.fnend
	.size	Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page
	.align	1
	.global	flush_l2p_region
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	flush_l2p_region, %function
flush_l2p_region:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, lr}
	.save {r3, r4, r5, lr}
	movs	r4, #12
	ldr	r5, .L1083
	muls	r4, r0, r4
	add	r0, r5, #3392
	ldr	r3, [r5, #2540]
	adds	r2, r3, r4
	ldrh	r1, [r3, r4]
	ldr	r2, [r2, #8]
	bl	FtlMapWritePage
	ldr	r0, [r5, #2540]
	add	r4, r4, r0
	movs	r0, #0
	ldr	r3, [r4, #4]
	bic	r3, r3, #-2147483648
	str	r3, [r4, #4]
	pop	{r3, r4, r5, pc}
.L1084:
	.align	2
.L1083:
	.word	.LANCHOR0
	.fnend
	.size	flush_l2p_region, .-flush_l2p_region
	.align	1
	.global	log2phys
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	log2phys, %function
log2phys:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	mov	r5, r0
	ldr	r9, .L1097
	mov	r6, r1
	mov	r7, r2
	ldrh	r4, [r9, #308]
	adds	r3, r4, #7
	movs	r4, #1
	lsls	r4, r4, r3
	subs	r4, r4, #1
	lsr	r8, r0, r3
	ands	r4, r4, r0
	ldr	r3, [r9, #2552]
	uxth	r8, r8
	uxth	r4, r4
	cmp	r3, r0
	bhi	.L1086
	ldr	r1, .L1097+4
	mov	r2, #820
	ldr	r0, .L1097+8
	bl	sftl_printk
	ldr	r3, [r9, #2552]
	cmp	r3, r5
	bhi	.L1086
	mov	r0, #-1
	cbnz	r7, .L1085
	str	r0, [r6]
.L1085:
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L1092:
	adds	r3, r3, #1
	mul	r0, r10, r3
	ldrh	r0, [r2, r0]
	cmp	r0, r8
	bne	.L1088
.L1089:
	movs	r1, #12
	ldr	r3, [r9, #2540]
	muls	r5, r1, r5
	add	r3, r3, r5
	ldr	r3, [r3, #8]
	cbnz	r7, .L1090
	ldr	r3, [r3, r4, lsl #2]
	str	r3, [r6]
.L1091:
	ldr	r1, [r9, #2540]
	add	r5, r5, r1
	ldr	r3, [r5, #4]
	adds	r2, r3, #1
	beq	.L1095
	adds	r3, r3, #1
	str	r3, [r5, #4]
.L1095:
	movs	r0, #0
	b	.L1085
.L1090:
	ldr	r2, [r6]
	str	r2, [r3, r4, lsl #2]
	strh	r8, [r9, #2544]	@ movhi
	ldr	r3, [r9, #2540]
	add	r3, r3, r5
	ldr	r2, [r3, #4]
	orr	r2, r2, #-2147483648
	str	r2, [r3, #4]
	b	.L1091
.L1086:
	ldr	r2, [r9, #2540]
	movs	r3, #0
	ldrh	r1, [r9, #338]
	mov	r10, #12
	subs	r2, r2, #12
.L1088:
	uxth	r5, r3
	cmp	r1, r5
	bhi	.L1092
	bl	select_l2p_ram_region
	mul	r10, r10, r0
	ldr	r3, [r9, #2540]
	mov	r5, r0
	add	r2, r3, r10
	ldrh	r1, [r3, r10]
	movw	r3, #65535
	cmp	r1, r3
	beq	.L1093
	ldr	r3, [r2, #4]
	cmp	r3, #0
	bge	.L1093
	bl	flush_l2p_region
.L1093:
	mov	r1, r5
	mov	r0, r8
	bl	load_l2p_region
	b	.L1089
.L1098:
	.align	2
.L1097:
	.word	.LANCHOR0
	.word	.LANCHOR1+410
	.word	.LC8
	.fnend
	.size	log2phys, .-log2phys
	.align	1
	.global	FtlWriteDump_data
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlWriteDump_data, %function
FtlWriteDump_data:
	.fnstart
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	ldr	r4, .L1118
	.pad #32
	sub	sp, sp, #32
	mov	r3, sp
	bic	r8, r3, #8160
	bic	r8, r8, #31
	ldrh	r2, [r4, #28]
	ldr	r3, [r8, #24]
	str	r3, [sp, #28]
	cmp	r2, #0
	beq	.L1100
	ldrb	r3, [r4, #32]	@ zero_extendqisi2
	cmp	r3, #0
	bne	.L1100
	ldrb	r3, [r4, #31]	@ zero_extendqisi2
	ldrh	r1, [r4, #302]
	muls	r3, r1, r3
	cmp	r2, r3
	beq	.L1100
	ldrb	r6, [r4, #34]	@ zero_extendqisi2
	cbnz	r6, .L1099
	ldr	r7, [r4, #2552]
	mov	r2, r6
	add	r1, sp, #4
	ldrh	r9, [r4, #232]
	subs	r7, r7, #1
	mov	r0, r7
	bl	log2phys
	ldr	r5, [r4, #3332]
	ldr	r3, [sp, #4]
	ldr	r0, [r4, #3300]
	str	r3, [sp, #12]
	adds	r3, r3, #1
	str	r7, [sp, #24]
	str	r0, [sp, #16]
	str	r5, [sp, #20]
	str	r6, [r5, #4]
	beq	.L1102
	mov	r2, r6
	add	r0, sp, #8
	movs	r1, #1
	bl	FlashReadPages
.L1103:
	lsl	r6, r9, #2
	ldr	r9, .L1118+4
	movw	r3, #61589
	mov	r10, #0
	strh	r3, [r5]	@ movhi
.L1104:
	cbnz	r6, .L1108
.L1105:
	movs	r3, #1
.L1117:
	strb	r3, [r4, #34]
.L1099:
	ldr	r2, [sp, #28]
	ldr	r3, [r8, #24]
	cmp	r2, r3
	beq	.L1110
	bl	__stack_chk_fail
.L1102:
	ldrh	r2, [r4, #310]
	movs	r1, #255
	bl	ftl_memset
	b	.L1103
.L1108:
	ldrh	r3, [r4, #28]
	cmp	r3, #0
	beq	.L1105
	ldr	r3, [sp, #12]
	mov	r0, r9
	str	r3, [r5, #12]
	subs	r6, r6, #1
	ldrh	r3, [r4, #24]
	strh	r3, [r5, #2]	@ movhi
	str	r7, [r5, #8]
	bl	get_new_active_ppa
	ldr	r3, [r4, #2592]
	str	r0, [sp, #12]
	movs	r1, #1
	adds	r2, r3, #1
	str	r3, [r5, #4]
	adds	r3, r3, #2
	add	r0, sp, #8
	it	eq
	moveq	r2, r10
	movs	r3, #0
	str	r2, [r4, #2592]
	mov	r2, r3
	bl	FlashProgPages
	ldrh	r0, [r4, #24]
	bl	decrement_vpc_count
	b	.L1104
.L1100:
	movs	r3, #0
	b	.L1117
.L1110:
	add	sp, sp, #32
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L1119:
	.align	2
.L1118:
	.word	.LANCHOR0
	.word	.LANCHOR0+24
	.fnend
	.size	FtlWriteDump_data, .-FtlWriteDump_data
	.align	1
	.global	FtlReUsePrevPpa
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlReUsePrevPpa, %function
FtlReUsePrevPpa:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, lr}
	.save {r4, r5, r6, r7, lr}
	.pad #12
	mov	r5, r0
	ldr	r6, .L1130
	ubfx	r0, r1, #10, #16
	str	r1, [sp, #4]
	bl	P2V_block_in_plane
	mov	r4, r0
	ldr	r3, [r6, #72]
	ldrh	r2, [r3, r0, lsl #1]
	cmp	r2, #0
	bne	.L1121
	ldr	r3, [r6, #2532]
	cbz	r3, .L1122
	ldr	r1, [r6, #2516]
	mov	ip, #6
	ldr	r0, .L1130+4
	movw	lr, #65535
	subs	r3, r3, r1
	ldrh	r7, [r6, #224]
	asrs	r3, r3, #1
	muls	r3, r0, r3
	uxth	r3, r3
.L1123:
	uxth	r0, r2
	cmp	r7, r0
	bls	.L1122
	cmp	r3, r4
	bne	.L1124
	ldr	r0, .L1130+8
	mov	r1, r4
	bl	List_remove_node
	ldrh	r3, [r6, #224]
	cbnz	r3, .L1125
	ldr	r1, .L1130+12
	movw	r2, #1742
	ldr	r0, .L1130+16
	bl	sftl_printk
.L1125:
	ldrh	r3, [r6, #224]
	mov	r0, r4
	subs	r3, r3, #1
	strh	r3, [r6, #224]	@ movhi
	bl	INSERT_DATA_LIST
	ldr	r2, [r6, #72]
	ldrh	r3, [r2, r4, lsl #1]
	adds	r3, r3, #1
	strh	r3, [r2, r4, lsl #1]	@ movhi
.L1122:
	add	r1, sp, #4
	mov	r0, r5
	movs	r2, #1
	bl	log2phys
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, pc}
.L1124:
	mul	r3, ip, r3
	adds	r2, r2, #1
	ldrh	r3, [r1, r3]
	cmp	r3, lr
	bne	.L1123
	b	.L1122
.L1121:
	adds	r2, r2, #1
	strh	r2, [r3, r0, lsl #1]	@ movhi
	b	.L1122
.L1131:
	.align	2
.L1130:
	.word	.LANCHOR0
	.word	-1431655765
	.word	.LANCHOR0+2532
	.word	.LANCHOR1+419
	.word	.LC8
	.fnend
	.size	FtlReUsePrevPpa, .-FtlReUsePrevPpa
	.section	.rodata.str1.1
.LC109:
	.ascii	"data prev_ppa = %x error...................\012\000"
.LC110:
	.ascii	"spuer block %x vpn is 0\012 \000"
	.text
	.align	1
	.global	FtlRecoverySuperblock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlRecoverySuperblock, %function
FtlRecoverySuperblock:
	.fnstart
	@ args = 0, pretend = 0, frame = 48
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	movw	r1, #65535
	mov	r10, r0
	.pad #52
	sub	sp, sp, #52
	mov	r3, sp
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r3, [r3, #24]
	str	r3, [sp, #44]
	ldrh	r3, [r0]
	cmp	r3, r1
	beq	.L1134
	ldr	r5, .L1264
	ldrh	r3, [r0, #2]
	str	r3, [sp]
	ldrb	r3, [r0, #6]	@ zero_extendqisi2
	ldrh	r2, [r5, #302]
	str	r3, [sp, #24]
	ldr	r3, [sp]
	cmp	r2, r3
	mov	r3, #0
	bne	.L1135
	strh	r3, [r0, #4]	@ movhi
	strh	r2, [r0, #2]	@ movhi
.L1262:
	strb	r3, [r10, #6]
.L1134:
	mov	r3, sp
	ldr	r2, [sp, #44]
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r3, [r3, #24]
	cmp	r2, r3
	beq	.L1203
	bl	__stack_chk_fail
.L1135:
	ldrh	r0, [r0, #16]
.L1136:
	uxth	r6, r3
	cmp	r0, r1
	add	r3, r3, #1
	beq	.L1137
	movs	r1, #1
	bl	FtlGetLastWrittenPage
	mov	r4, r0
	adds	r0, r4, #1
	beq	.L1138
	ldr	r3, [r5, #3176]
	movs	r2, #0
	ldrh	fp, [r5, #232]
	movw	r9, #65535
	mov	lr, r3
	add	r3, r10, #16
	ldr	r0, [r5, #3288]
	mov	ip, r3
	ldrh	r6, [r5, #310]
	ldr	r8, [r5, #3180]
	ldrh	r7, [r5, #312]
	mov	r5, r2
	str	r3, [sp, #20]
.L1139:
	uxth	r3, r2
	cmp	fp, r3
	bhi	.L1145
	ldr	r6, .L1264
	movs	r2, #0
	mov	r1, r5
	movs	r7, #0
	bl	FlashReadPages
	movw	r9, #65535
	uxth	r2, r4
	str	r2, [sp, #8]
	ldr	r3, [r6, #2592]
	add	fp, r3, #-1
	ldr	r3, [r6, #3288]
	mov	r8, r3
.L1146:
	uxth	r2, r7
	cmp	r5, r2
	bhi	.L1151
	bne	.L1149
	adds	r2, r4, #1
	uxth	r2, r2
	str	r2, [sp, #8]
.L1256:
	ldr	r0, [r3, #4]
	ubfx	r0, r0, #10, #16
	bl	P2V_plane
	ldrh	r3, [r6, #302]
	ldr	r2, [sp, #8]
	str	r0, [sp, #4]
	cmp	r3, r2
	bne	.L1153
	movs	r3, #0
	strh	r2, [r10, #2]	@ movhi
	strb	r3, [r10, #6]
	strh	r3, [r10, #4]	@ movhi
.L1153:
	ldr	r3, [sp, #8]
	ldr	r2, [sp]
	cmp	r3, r2
	bne	.L1154
	ldr	r3, [sp, #4]
	ldr	r2, [sp, #24]
	cmp	r3, r2
	bne	.L1154
	ldr	r1, [sp, #8]
	mov	r2, r3
.L1263:
	mov	r0, r10
	bl	ftl_sb_update_avl_pages
	b	.L1134
.L1137:
	uxth	r2, r3
	adds	r2, r2, #8
	ldrh	r0, [r10, r2, lsl #1]
	b	.L1136
.L1138:
	ldr	r3, [sp]
	cbz	r3, .L1140
	ldr	r1, .L1264+4
	movw	r2, #1809
	ldr	r0, .L1264+8
	bl	sftl_printk
.L1140:
	ldr	r3, [sp, #24]
	cbz	r3, .L1141
	cmp	r3, r6
	beq	.L1141
	ldr	r1, .L1264+4
	movw	r2, #1810
	ldr	r0, .L1264+8
	bl	sftl_printk
.L1141:
	movs	r3, #0
	strh	r3, [r10, #2]	@ movhi
	b	.L1262
.L1145:
	ldrh	r3, [ip], #2
	cmp	r3, r9
	beq	.L1142
	movs	r1, #20
	orr	r3, r4, r3, lsl #10
	mla	r1, r1, r5, r0
	str	r3, [r1, #4]
	mov	r3, r6
	muls	r3, r5, r3
	it	mi
	addmi	r3, r3, #3
	bic	r3, r3, #3
	add	r3, r3, lr
	str	r3, [r1, #8]
	mov	r3, r7
	muls	r3, r5, r3
	add	r5, r5, #1
	it	mi
	addmi	r3, r3, #3
	uxth	r5, r5
	bic	r3, r3, #3
	add	r3, r3, r8
	str	r3, [r1, #12]
.L1142:
	adds	r2, r2, #1
	b	.L1139
.L1151:
	ldr	r2, [r8]
	cbnz	r2, .L1147
	ldr	r2, [r8, #12]
	str	r2, [sp, #4]
	ldr	r2, [r2, #4]
	adds	r1, r2, #1
	beq	.L1148
	ldr	r1, [r6, #2592]
	mov	r0, r2
	bl	ftl_cmp_data_ver
	cbz	r0, .L1148
	adds	r2, r2, #1
	str	r2, [r6, #2592]
.L1148:
	ldr	r2, [sp, #4]
	ldr	r2, [r2]
	adds	r2, r2, #1
	bne	.L1150
.L1149:
	uxth	r2, r4
	str	r2, [sp, #8]
	movs	r2, #20
	mla	r3, r2, r7, r3
	b	.L1256
.L1147:
	ldr	r9, [sp, #8]
.L1150:
	adds	r7, r7, #1
	add	r8, r8, #20
	b	.L1146
.L1154:
	movw	r3, #65535
	cmp	r9, r3
	bne	.L1155
	ldrb	r3, [r10, #8]	@ zero_extendqisi2
	cbnz	r3, .L1156
.L1155:
	ldr	r3, [r6, #3448]
	uxth	r2, r4
	uxth	r7, r4
	movw	r8, #65535
	adds	r3, r3, #1
	ldr	r3, [sp]
	it	eq
	streq	fp, [r6, #3448]
	adds	r3, r3, #7
	ldr	r6, .L1264
	cmp	r3, r2
	itet	lt
	sublt	r4, r4, #7
	ldrge	r4, [sp]
	uxthlt	r4, r4
.L1159:
	ldr	r0, [r6, #3288]
	cmp	r4, r7
	ldrh	ip, [r6, #232]
	bls	.L1205
	mov	r3, #-1
	str	r3, [r6, #3448]
.L1156:
	ldr	r4, .L1264
	movs	r3, #1
	ldr	r5, [sp]
	strh	r3, [r4, #3472]	@ movhi
.L1167:
	ldrh	r6, [r4, #232]
	movs	r3, #0
	ldr	r0, [r4, #3288]
	movw	r7, #65535
	ldr	r1, [sp, #20]
	mov	ip, #20
	str	r3, [sp, #12]
.L1168:
	uxth	r2, r3
	cmp	r6, r2
	bhi	.L1170
	ldr	r1, [sp, #12]
	movs	r2, #0
	bl	FlashReadPages
	movs	r3, #0
.L1261:
	str	r3, [sp, #16]
	ldr	r2, [sp, #12]
	ldrh	r3, [sp, #16]
	cmp	r2, r3
	bhi	.L1199
	adds	r5, r5, #1
	ldrh	r3, [r4, #302]
	uxth	r5, r5
	cmp	r3, r5
	bne	.L1167
	ldrh	r2, [r4, #232]
	movs	r3, #0
	strh	r5, [r10, #2]	@ movhi
	movw	r0, #65535
	strh	r3, [r10, #4]	@ movhi
.L1200:
	uxth	r1, r3
	cmp	r1, r2
	bcs	.L1134
	ldr	r1, [sp, #20]
	ldrh	r4, [r1], #2
	str	r1, [sp, #20]
	adds	r1, r3, #1
	cmp	r4, r0
	bne	.L1262
	mov	r3, r1
	b	.L1200
.L1161:
	ldrh	r2, [r1], #2
	cmp	r2, r8
	beq	.L1160
	mla	r9, lr, r5, r0
	adds	r5, r5, #1
	orr	r2, r4, r2, lsl #10
	uxth	r5, r5
	str	r2, [r9, #4]
.L1160:
	adds	r3, r3, #1
.L1166:
	uxth	r2, r3
	cmp	r2, ip
	bcc	.L1161
	mov	r1, r5
	movs	r2, #0
	bl	FlashReadPages
	ldr	r3, [r6, #3288]
	movs	r1, #0
.L1162:
	uxth	r2, r1
	cmp	r5, r2
	bhi	.L1165
	adds	r4, r4, #1
	uxth	r4, r4
	b	.L1159
.L1205:
	movs	r3, #0
	ldr	r1, [sp, #20]
	mov	r5, r3
	mov	lr, #20
	b	.L1166
.L1265:
	.align	2
.L1264:
	.word	.LANCHOR0
	.word	.LANCHOR1+435
	.word	.LC8
.L1165:
	ldr	r2, [r3]
	cmp	r2, #0
	bne	.L1156
	ldr	r2, [r3, #12]
	ldrh	r0, [r2]
	cmp	r0, r8
	beq	.L1164
	ldr	r2, [r2, #4]
	adds	r0, r2, #1
	it	ne
	strne	r2, [r6, #3448]
.L1164:
	adds	r1, r1, #1
	adds	r3, r3, #20
	b	.L1162
.L1170:
	ldrh	r2, [r1], #2
	cmp	r2, r7
	beq	.L1169
	ldr	lr, [sp, #12]
	orr	r2, r5, r2, lsl #10
	mla	lr, ip, lr, r0
	str	r2, [lr, #4]
	ldr	r2, [sp, #12]
	adds	r2, r2, #1
	uxth	r2, r2
	str	r2, [sp, #12]
.L1169:
	adds	r3, r3, #1
	b	.L1168
.L1199:
	ldr	r3, [sp, #16]
	movs	r6, #20
	ldr	r9, [r4, #3288]
	muls	r6, r3, r6
	ldr	r3, [sp]
	add	r8, r9, r6
	cmp	r5, r3
	ldr	r7, [r8, #4]
	str	r7, [sp, #40]
	bcc	.L1172
	ubfx	r0, r7, #10, #16
	bl	P2V_plane
	ldr	r3, [sp]
	cmp	r5, r3
	bne	.L1173
	ldr	r3, [sp, #24]
	cmp	r3, r0
	bhi	.L1172
.L1173:
	ldr	r3, [sp, #8]
	cmp	r5, r3
	bne	.L1174
	ldr	r3, [sp, #4]
	cmp	r3, r0
	bne	.L1174
	mov	r2, r3
	mov	r1, r5
	strb	r3, [r10, #6]
	strh	r5, [r10, #2]	@ movhi
	b	.L1263
.L1174:
	ldr	r3, [r9, r6]
	adds	r3, r3, #1
	beq	.L1175
	ldr	r8, [r8, #12]
	movw	r2, #61589
	ldrh	r3, [r8]
	cmp	r3, r2
	beq	.L1176
	ldrh	r0, [r10]
.L1258:
	bl	decrement_vpc_count
	b	.L1172
.L1176:
	ldr	fp, [r8, #4]
	cmp	fp, #-1
	beq	.L1178
	ldr	r1, [r4, #2592]
	mov	r0, fp
	bl	ftl_cmp_data_ver
	cbz	r0, .L1178
	add	r2, fp, #1
	str	r2, [r4, #2592]
	ldrh	r2, [r8]
	cmp	r2, r3
	beq	.L1178
	ldr	r1, .L1266
	movw	r2, #1961
	ldr	r0, .L1266+4
	bl	sftl_printk
.L1178:
	ldrd	r7, r3, [r8, #8]
	add	r1, sp, #36
	movs	r2, #0
	str	r3, [sp, #32]
	mov	r0, r7
	bl	log2phys
	ldr	r1, [r4, #3448]
	adds	r0, r1, #1
	beq	.L1180
	mov	r0, fp
	bl	ftl_cmp_data_ver
	cmp	r0, #0
	beq	.L1180
	ldr	r3, [sp, #32]
	adds	r1, r3, #1
	beq	.L1181
	ldr	r0, [r4, #3288]
	movs	r2, #0
	movs	r1, #1
	add	r0, r0, r6
	str	r3, [r0, #4]
	ldr	r8, [r0, #12]
	bl	FlashReadPages
	ldr	r3, [r4, #3288]
	add	r9, r3, r6
	ldr	r2, [r3, r6]
	adds	r2, r2, #1
	bne	.L1182
.L1183:
	mov	r3, #-1
	str	r3, [sp, #32]
.L1190:
	ldr	r0, [sp, #32]
	adds	r1, r0, #1
	beq	.L1172
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	ldrh	r3, [r4, #240]
	mov	r6, r0
	cmp	r3, r0
	bhi	.L1195
	ldr	r1, .L1266
	movw	r2, #2066
	ldr	r0, .L1266+4
	bl	sftl_printk
.L1195:
	ldr	r3, [r4, #72]
	ldrh	r3, [r3, r6, lsl #1]
	cmp	r3, #0
	beq	.L1196
	mov	r0, r6
	b	.L1258
.L1181:
	ldrd	r2, r3, [sp, #36]
	cmp	r2, r3
	bne	.L1172
	add	r1, sp, #32
	mov	r0, r7
	movs	r2, #1
	bl	log2phys
.L1172:
	ldr	r3, [sp, #16]
	adds	r3, r3, #1
	b	.L1261
.L1182:
	ldr	r2, [r8, #8]
	cmp	r2, r7
	bne	.L1183
	ldr	r1, [r8, #4]
	ldr	r0, [r4, #3448]
	str	r1, [sp, #28]
	bl	ftl_cmp_data_ver
	cmp	r0, #0
	beq	.L1183
	ldrd	r1, r0, [sp, #32]
	ldr	ip, [sp, #40]
	cmp	r0, ip
	bne	.L1185
	mov	r0, r2
.L1257:
	bl	FtlReUsePrevPpa
	b	.L1183
.L1185:
	cmp	r1, r0
	beq	.L1183
	adds	r2, r0, #1
	beq	.L1186
	str	r0, [r9, #4]
	movs	r2, #0
	mov	r0, r9
	movs	r1, #1
	ldr	r8, [r9, #12]
	bl	FlashReadPages
.L1187:
	ldr	r3, [r4, #3288]
	ldr	r3, [r3, r6]
	adds	r3, r3, #1
	beq	.L1188
	ldr	r3, [r8, #4]
	ldr	r0, [r4, #3448]
	mov	r1, r3
	bl	ftl_cmp_data_ver
	cbz	r0, .L1188
	ldr	r0, [sp, #28]
	mov	r1, r3
	bl	ftl_cmp_data_ver
	cmp	r0, #0
	beq	.L1183
.L1188:
	ldr	r1, [sp, #32]
	mov	r0, r7
	b	.L1257
.L1186:
	str	r0, [r3, r6]
	b	.L1187
.L1180:
	ldrd	r2, r3, [sp, #36]
	cmp	r2, r3
	beq	.L1190
	ldr	r1, [sp, #32]
	adds	r0, r1, #1
	beq	.L1192
	ldr	r3, [r4, #248]
	cmp	r3, r1, lsr #10
	bhi	.L1192
	ldr	r0, .L1266+8
.L1260:
	bl	sftl_printk
	b	.L1172
.L1192:
	add	r1, sp, #40
	mov	r0, r7
	movs	r2, #1
	bl	log2phys
	ldr	r8, [sp, #36]
	cmp	r8, #-1
	beq	.L1190
	ldr	r3, [sp, #32]
	cmp	r8, r3
	beq	.L1190
	ubfx	r0, r8, #10, #16
	bl	P2V_block_in_plane
	ldrh	r3, [r4, #24]
	cmp	r3, r0
	beq	.L1194
	ldrh	r3, [r4, #76]
	cmp	r3, r0
	beq	.L1194
	ldrh	r3, [r4, #124]
	cmp	r3, r0
	bne	.L1190
.L1194:
	ldr	r0, [r4, #3288]
	movs	r2, #0
	movs	r1, #1
	str	r8, [r0, #4]
	ldr	r6, [r0, #12]
	bl	FlashReadPages
	ldr	r3, [r4, #3288]
	ldr	r3, [r3]
	adds	r3, r3, #1
	beq	.L1190
	ldr	r1, [r6, #4]
	mov	r0, fp
	bl	ftl_cmp_data_ver
	cmp	r0, #0
	bne	.L1190
	add	r1, sp, #36
	mov	r0, r7
	movs	r2, #1
	bl	log2phys
	b	.L1190
.L1196:
	ldr	r0, .L1266+12
	mov	r1, r6
	b	.L1260
.L1175:
	ldr	r3, [r4, #3476]
	cmp	r3, #31
	itttt	ls
	addls	r2, r4, r3, lsl #2
	addls	r3, r3, #1
	strls	r3, [r4, #3476]
	strls	r7, [r2, #3480]
	ldrh	r0, [r10]
	bl	decrement_vpc_count
	ldr	r3, [r4, #3448]
	adds	r2, r3, #1
	bne	.L1198
.L1259:
	str	fp, [r4, #3448]
	b	.L1172
.L1198:
	cmp	r3, fp
	bls	.L1172
	b	.L1259
.L1203:
	movs	r0, #0
	add	sp, sp, #52
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1267:
	.align	2
.L1266:
	.word	.LANCHOR1+435
	.word	.LC8
	.word	.LC109
	.word	.LC110
	.fnend
	.size	FtlRecoverySuperblock, .-FtlRecoverySuperblock
	.section	.rodata.str1.1
.LC111:
	.ascii	"...%s enter...\012\000"
.LC112:
	.ascii	"FtlCheckVpc2 %x = %x  %x\012\000"
.LC113:
	.ascii	"free blk vpc error %x = %x  %x\012\000"
	.text
	.align	1
	.global	ftl_check_vpc
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_check_vpc, %function
ftl_check_vpc:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	movs	r4, #0
	ldr	r5, .L1293
	mov	r3, sp
	ldr	r7, .L1293+4
	bic	r6, r3, #8160
	ldr	r1, .L1293+8
	bic	r6, r6, #31
	ldr	r0, .L1293+12
	ldr	r3, [r6, #24]
	str	r3, [sp, #4]
	bl	sftl_printk
	ldr	r0, .L1293+4
	mov	r2, #8192
	movs	r1, #0
	bl	ftl_memset
.L1269:
	ldr	r3, [r5, #2552]
	cmp	r3, r4
	bhi	.L1271
	ldr	r9, .L1293+4
	movs	r4, #0
	ldr	fp, .L1293+16
	mov	r7, r4
	movw	r10, #65535
.L1272:
	ldrh	r2, [r5, #240]
	uxth	r3, r4
	cmp	r2, r3
	bhi	.L1274
	ldr	r4, [r5, #2532]
	cbz	r4, .L1275
	ldr	r1, [r5, #2516]
	mov	r9, #0
	ldrh	r8, [r5, #224]
	mov	fp, #6
	subs	r4, r4, r1
	ldr	r1, .L1293+20
	ldr	r10, .L1293+4
	asrs	r4, r4, #1
	ldr	r0, .L1293+24
	muls	r4, r1, r4
	uxth	r4, r4
.L1276:
	uxth	r3, r9
	cmp	r8, r3
	bls	.L1275
	ldr	r3, [r5, #72]
	ldrh	r2, [r3, r4, lsl #1]
	cbz	r2, .L1277
	ldrh	r3, [r10, r4, lsl #1]
	mov	r1, r4
	bl	sftl_printk
	ldr	r0, .L1293+24
	movs	r7, #1
.L1277:
	mul	r4, fp, r4
	ldr	r3, [r5, #2516]
	add	r9, r9, #1
	ldrh	r4, [r3, r4]
	movw	r3, #65535
	cmp	r4, r3
	bne	.L1276
.L1275:
	cbz	r7, .L1268
	ldr	r1, .L1293+8
	movw	r2, #2394
	ldr	r0, .L1293+28
	bl	sftl_printk
.L1268:
	ldr	r2, [sp, #4]
	ldr	r3, [r6, #24]
	cmp	r2, r3
	beq	.L1280
	bl	__stack_chk_fail
.L1271:
	mov	r1, sp
	mov	r0, r4
	movs	r2, #0
	bl	log2phys
	ldr	r0, [sp]
	adds	r3, r0, #1
	beq	.L1270
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	ldrh	r3, [r7, r0, lsl #1]
	adds	r3, r3, #1
	strh	r3, [r7, r0, lsl #1]	@ movhi
.L1270:
	adds	r4, r4, #1
	b	.L1269
.L1274:
	ldr	r3, [r5, #72]
	uxth	r8, r4
	ldrh	r2, [r3, r8, lsl #1]
	ldrh	r3, [r9, r8, lsl #1]
	cmp	r2, r3
	beq	.L1273
	mov	r1, r8
	mov	r0, fp
	bl	sftl_printk
	ldr	r3, [r5, #72]
	ldrh	r3, [r3, r8, lsl #1]
	cmp	r3, r10
	beq	.L1273
	ldrh	r2, [r9, r8, lsl #1]
	cmp	r2, r3
	it	hi
	movhi	r7, #1
.L1273:
	adds	r4, r4, #1
	b	.L1272
.L1280:
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1294:
	.align	2
.L1293:
	.word	.LANCHOR0
	.word	check_vpc_table
	.word	.LANCHOR1+457
	.word	.LC111
	.word	.LC112
	.word	-1431655765
	.word	.LC113
	.word	.LC8
	.fnend
	.size	ftl_check_vpc, .-ftl_check_vpc
	.section	.rodata.str1.1
.LC114:
	.ascii	"ftl_scan_all_data = %x\012\000"
.LC115:
	.ascii	"scan lpa = %x ppa= %x\012\000"
.LC116:
	.ascii	"lpa = %x,addr= %x,spare= %x %x %x %x data=%x %x\012"
	.ascii	"\000"
	.text
	.align	1
	.global	ftl_scan_all_data
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_scan_all_data, %function
ftl_scan_all_data:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, lr}
	.save {r4, r5, r6, r7, r8, lr}
	movs	r5, #0
	ldr	r4, .L1310
	.pad #32
	sub	sp, sp, #32
	ldr	r8, .L1310+4
	mov	r3, sp
	ldr	r0, .L1310+8
	bic	r6, r3, #8160
	movs	r1, #0
	bic	r6, r6, #31
	ldr	r3, [r6, #24]
	str	r3, [sp, #28]
	bl	sftl_printk
.L1296:
	ldr	r3, [r4, #2552]
	cmp	r3, r5
	bhi	.L1302
	ldr	r2, [sp, #28]
	ldr	r3, [r6, #24]
	cmp	r2, r3
	beq	.L1303
	bl	__stack_chk_fail
.L1302:
	add	r1, sp, #24
	mov	r0, r5
	movs	r2, #0
	bl	log2phys
	ubfx	r3, r5, #0, #11
	cbnz	r3, .L1297
	ldr	r2, [sp, #24]
	mov	r1, r5
	mov	r0, r8
	bl	sftl_printk
.L1297:
	ldr	r3, [sp, #24]
	adds	r2, r3, #1
	beq	.L1299
	ldr	r7, [r4, #3332]
	movs	r2, #0
	str	r3, [r4, #3456]
	movs	r1, #1
	ldr	r3, [r4, #3300]
	ldr	r0, .L1310+12
	str	r3, [r4, #3460]
	str	r5, [r4, #3468]
	str	r7, [r4, #3464]
	str	r2, [r4, #3452]
	bl	FlashReadPages
	ldr	r3, [r4, #3452]
	cmp	r3, #256
	beq	.L1300
	adds	r3, r3, #1
	beq	.L1300
	ldr	r3, [r7, #8]
	cmp	r3, r5
	beq	.L1299
.L1300:
	ldr	r2, [r4, #3460]
	ldr	r3, [r4, #3464]
	ldr	r0, .L1310+16
	ldr	r1, [r2, #4]
	str	r1, [sp, #16]
	mov	r1, r5
	ldr	r2, [r2]
	str	r2, [sp, #12]
	ldr	r2, [r3, #12]
	str	r2, [sp, #8]
	ldr	r2, [r3, #8]
	str	r2, [sp, #4]
	ldr	r2, [r3, #4]
	str	r2, [sp]
	ldr	r2, [r4, #3456]
	ldr	r3, [r3]
	bl	sftl_printk
.L1299:
	adds	r5, r5, #1
	b	.L1296
.L1303:
	add	sp, sp, #32
	@ sp needed
	pop	{r4, r5, r6, r7, r8, pc}
.L1311:
	.align	2
.L1310:
	.word	.LANCHOR0
	.word	.LC115
	.word	.LC114
	.word	.LANCHOR0+3452
	.word	.LC116
	.fnend
	.size	ftl_scan_all_data, .-ftl_scan_all_data
	.section	.rodata.str1.1
.LC117:
	.ascii	"FtlGcScanTempBlk Error ID %x %x!!!!!!! \012\000"
	.text
	.align	1
	.global	FtlGcScanTempBlk
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcScanTempBlk, %function
FtlGcScanTempBlk:
	.fnstart
	@ args = 0, pretend = 0, frame = 48
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r5, r0
	.pad #52
	sub	sp, sp, #52
	mov	r3, sp
	bic	r3, r3, #8160
	bic	r3, r3, #31
	str	r1, [sp, #4]
	ldr	r3, [r3, #24]
	str	r3, [sp, #44]
	ldr	r3, .L1349
	ldrh	r6, [r3, #4]
	movw	r3, #65535
	cmp	r6, r3
	beq	.L1339
	cbz	r6, .L1314
.L1313:
	ldr	r3, .L1349+4
	ldr	r2, [sp, #4]
	ldrh	r3, [r3, #302]
	cmp	r3, r2
	bne	.L1315
.L1314:
	bl	FtlGcPageVarInit
.L1315:
	mov	r9, #0
.L1334:
	ldrh	r2, [r5]
	movs	r3, #0
	strb	r3, [r5, #8]
	movw	r3, #65535
	cmp	r2, r3
	beq	.L1316
	ldr	r4, .L1349+4
.L1317:
	ldr	r3, [r4, #3176]
	movs	r2, #0
	ldrh	ip, [r4, #232]
	add	lr, r5, #16
	ldr	r0, [r4, #3288]
	mov	r8, r3
	ldrh	fp, [r4, #310]
	mov	r7, r2
	ldr	r10, [r4, #3180]
	ldrh	r3, [r4, #312]
	str	r3, [sp, #8]
.L1318:
	uxth	r3, r2
	cmp	ip, r3
	bhi	.L1322
	mov	r10, #0
	mov	r1, r7
	movs	r2, #0
	bl	FlashReadPages
.L1323:
	uxth	r3, r10
	cmp	r7, r3
	bhi	.L1335
	ldr	r3, [sp, #4]
	adds	r6, r6, #1
	add	r9, r9, #1
	uxth	r6, r6
	cmp	r3, r9
	bhi	.L1336
	ldr	r2, .L1349
	movw	r1, #65535
	ldrh	r3, [r2, #4]
	cmp	r3, r1
	beq	.L1336
	add	r3, r3, r9
	strh	r3, [r2, #4]	@ movhi
	ldrh	r3, [r4, #302]
	cmp	r3, r6
	bls	.L1316
.L1337:
	mov	r3, sp
	ldr	r2, [sp, #44]
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r3, [r3, #24]
	cmp	r2, r3
	beq	.L1338
	bl	__stack_chk_fail
.L1339:
	movs	r6, #0
	b	.L1313
.L1322:
	ldrh	r3, [lr], #2
	movw	r1, #65535
	cmp	r3, r1
	beq	.L1319
	movs	r1, #20
	orr	r3, r6, r3, lsl #10
	mla	r1, r1, r7, r0
	str	r3, [r1, #4]
	mov	r3, fp
	muls	r3, r7, r3
	it	mi
	addmi	r3, r3, #3
	bic	r3, r3, #3
	add	r3, r3, r8
	str	r3, [r1, #8]
	ldr	r3, [sp, #8]
	muls	r3, r7, r3
	add	r7, r7, #1
	it	mi
	addmi	r3, r3, #3
	uxth	r7, r7
	bic	r3, r3, #3
	add	r3, r3, r10
	str	r3, [r1, #12]
.L1319:
	adds	r2, r2, #1
	b	.L1318
.L1335:
	movs	r3, #20
	ldr	r2, [r4, #3288]
	mul	fp, r3, r10
	add	r1, r2, fp
	ldr	r2, [r2, fp]
	ldr	r3, [r1, #4]
	ldr	r8, [r1, #12]
	cmp	r2, #0
	bne	.L1324
	ldrh	r0, [r8]
	movw	r1, #65535
	cmp	r0, r1
	beq	.L1347
	ldr	r0, [r8, #8]
	ldr	r1, [r4, #2552]
	cmp	r0, r1
	bls	.L1326
.L1347:
	ldrh	r2, [r5]
	movs	r1, #0
	ldr	r3, [r4, #72]
	movs	r6, #0
	strh	r1, [r3, r2, lsl #1]	@ movhi
	ldrh	r0, [r5]
	bl	INSERT_FREE_LIST
	movw	r3, #65535
	strh	r3, [r5]	@ movhi
	strh	r3, [r4, #172]	@ movhi
	bl	FtlGcPageVarInit
	b	.L1334
.L1326:
	add	r1, sp, #20
	strd	r2, r3, [sp, #8]
	bl	log2phys
	ldr	r1, [r8, #12]
	ldr	r0, [sp, #20]
	ldrd	r2, r3, [sp, #8]
	cmp	r1, r0
	beq	.L1328
.L1330:
	ldr	r2, [r8, #8]
.L1348:
	ldr	r0, [r8, #12]
	mov	r1, r3
	add	r10, r10, #1
	bl	FtlGcUpdatePage
	b	.L1323
.L1328:
	adds	r0, r1, #1
	beq	.L1330
	str	r1, [sp, #28]
	add	r0, sp, #24
	ldr	r1, [r4, #3316]
	str	r1, [sp, #32]
	ldr	r1, [r4, #3336]
	str	r1, [sp, #36]
	movs	r1, #1
	str	r3, [sp, #12]
	str	r2, [sp, #8]
	bl	FlashReadPages
	ldr	r0, [r4, #3288]
	ldrh	r1, [r4, #258]
	add	fp, fp, r0
	ldr	r0, [sp, #32]
	ldrd	r2, r3, [sp, #8]
	lsls	r1, r1, #7
.L1331:
	cmp	r1, r2
	beq	.L1330
	ldr	ip, [fp, #8]
	ldr	lr, [ip, r2, lsl #2]
	ldr	ip, [r0, r2, lsl #2]
	cmp	lr, ip
	beq	.L1332
	ldr	r2, [sp, #28]
	ldrh	r1, [r5]
	ldr	r0, .L1349+8
	ldr	r4, .L1349+4
	bl	sftl_printk
	b	.L1347
.L1332:
	adds	r2, r2, #1
	b	.L1331
.L1324:
	mov	r2, #-1
	b	.L1348
.L1336:
	ldrh	r3, [r4, #302]
	cmp	r3, r6
	bhi	.L1317
.L1316:
	ldr	r3, .L1349
	movw	r2, #65535
	mov	r1, r6
	mov	r0, r5
	strh	r6, [r5, #2]	@ movhi
	strh	r2, [r3, #4]	@ movhi
	movs	r2, #0
	strb	r2, [r5, #6]
	bl	ftl_sb_update_avl_pages
	b	.L1337
.L1338:
	mov	r0, #-1
	add	sp, sp, #52
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1350:
	.align	2
.L1349:
	.word	.LANCHOR2
	.word	.LANCHOR0
	.word	.LC117
	.fnend
	.size	FtlGcScanTempBlk, .-FtlGcScanTempBlk
	.align	1
	.global	FtlReadRefresh
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlReadRefresh, %function
FtlReadRefresh:
	.fnstart
	@ args = 0, pretend = 0, frame = 96
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	ldr	r4, .L1367
	.pad #96
	sub	sp, sp, #96
	mov	r3, sp
	bic	r6, r3, #8160
	bic	r6, r6, #31
	ldr	r9, [r4, #2720]
	ldr	r3, [r6, #24]
	str	r3, [sp, #92]
	ldr	r3, [r4, #2552]
	cmp	r9, #0
	beq	.L1352
	ldr	r2, [r4, #2724]
	cmp	r2, r3
	bcs	.L1353
	mov	r5, #2048
.L1358:
	ldr	r0, [r4, #2724]
	ldr	r3, [r4, #2552]
	cmp	r0, r3
	bcc	.L1354
.L1357:
	mov	r0, #-1
.L1351:
	ldr	r2, [sp, #92]
	ldr	r3, [r6, #24]
	cmp	r2, r3
	beq	.L1362
	bl	__stack_chk_fail
.L1354:
	add	r1, sp, #4
	movs	r2, #0
	bl	log2phys
	ldr	r3, [r4, #2724]
	ldr	r2, [sp, #4]
	adds	r3, r3, #1
	str	r3, [r4, #2724]
	adds	r1, r2, #1
	beq	.L1356
	str	r2, [sp, #12]
	add	r0, sp, #8
	str	r3, [sp, #24]
	movs	r2, #0
	ldr	r3, [r4, #3324]
	movs	r1, #1
	str	r3, [sp, #16]
	add	r3, sp, #28
	str	r2, [sp, #8]
	str	r3, [sp, #20]
	bl	FlashReadPages
	ldr	r3, [sp, #8]
	cmp	r3, #256
	bne	.L1357
	ldr	r0, [sp, #4]
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	bl	FtlGcRefreshBlock
	b	.L1357
.L1356:
	subs	r5, r5, #1
	bne	.L1358
	b	.L1357
.L1353:
	ldr	r3, [r4, #2556]
	movs	r0, #0
	str	r3, [r4, #2716]
	str	r0, [r4, #2720]
	str	r0, [r4, #2724]
	b	.L1351
.L1352:
	ldr	r8, [r4, #2556]
	movw	r5, #10000
	ldr	r1, [r4, #2612]
	ldr	r10, [r4, #2716]
	add	r2, r8, #1048576
	cmp	r1, r5
	ite	hi
	movhi	r5, #31
	movls	r5, #63
	ldrh	r7, [r4, #2496]
	cmp	r10, r2
	bhi	.L1361
	mov	r0, #1000
	lsrs	r1, r1, #10
	adds	r1, r1, #1
	muls	r0, r3, r0
	bl	__aeabi_uidiv
	add	r0, r0, r10
	cmp	r8, r0
	bhi	.L1361
	ands	r0, r5, r7
	bne	.L1364
	ldr	r3, [r4, #2740]
	cmp	r3, r7
	beq	.L1351
.L1361:
	movs	r3, #1
	movs	r0, #0
	str	r7, [r4, #2740]
	str	r3, [r4, #2720]
	str	r0, [r4, #2724]
	str	r8, [r4, #2716]
	b	.L1351
.L1364:
	mov	r0, r9
	b	.L1351
.L1362:
	add	sp, sp, #96
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L1368:
	.align	2
.L1367:
	.word	.LANCHOR0
	.fnend
	.size	FtlReadRefresh, .-FtlReadRefresh
	.align	1
	.global	l2p_flush
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	l2p_flush, %function
l2p_flush:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	movs	r4, #0
	ldr	r5, .L1373
	movs	r6, #12
	bl	FtlWriteDump_data
.L1370:
	ldrh	r3, [r5, #338]
	uxth	r0, r4
	cmp	r3, r0
	bhi	.L1372
	movs	r0, #0
	pop	{r4, r5, r6, pc}
.L1372:
	ldr	r3, [r5, #2540]
	uxth	r2, r4
	mla	r3, r6, r2, r3
	ldr	r3, [r3, #4]
	cmp	r3, #0
	bge	.L1371
	bl	flush_l2p_region
.L1371:
	adds	r4, r4, #1
	b	.L1370
.L1374:
	.align	2
.L1373:
	.word	.LANCHOR0
	.fnend
	.size	l2p_flush, .-l2p_flush
	.align	1
	.global	FtlVendorPartWrite
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlVendorPartWrite, %function
FtlVendorPartWrite:
	.fnstart
	@ args = 0, pretend = 0, frame = 104
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	fp, r2
	ldr	r4, .L1388
	.pad #108
	sub	sp, sp, #108
	adds	r2, r0, r1
	mov	r3, sp
	mov	r7, r0
	bic	r10, r3, #8160
	mov	r5, r1
	bic	r10, r10, #31
	ldrh	r8, [r4, #308]
	ldr	r3, [r10, #24]
	lsr	r8, r0, r8
	str	r3, [sp, #100]
	ldrh	r3, [r4, #296]
	cmp	r2, r3
	bhi	.L1384
	mov	r9, #0
.L1377:
	cbnz	r5, .L1382
.L1375:
	ldr	r2, [sp, #100]
	ldr	r3, [r10, #24]
	cmp	r2, r3
	beq	.L1383
	bl	__stack_chk_fail
.L1382:
	ldr	r3, [r4, #3372]
	mov	r0, r7
	ldr	r2, [r3, r8, lsl #2]
	ldrh	r3, [r4, #258]
	str	r2, [sp, #12]
	mov	r1, r3
	str	r3, [sp, #8]
	bl	__aeabi_uidivmod
	ldr	r3, [sp, #8]
	ldr	r2, [sp, #12]
	subs	r6, r3, r1
	ldr	r0, [r4, #3308]
	str	r1, [sp, #4]
	uxth	r6, r6
	cmp	r6, r5
	it	hi
	uxthhi	r6, r5
	cbz	r2, .L1379
	cmp	r3, r6
	beq	.L1379
	strd	r2, r0, [sp, #20]
	movs	r2, #1
	add	r0, sp, #16
	mov	r1, r2
	add	r3, sp, #36
	str	r3, [sp, #28]
	bl	FlashReadPages
.L1380:
	lsls	r3, r6, #9
	ldr	r0, [r4, #3308]
	mov	r2, r3
	str	r3, [sp, #8]
	ldr	r3, [sp, #4]
	mov	r1, fp
	subs	r5, r5, r6
	add	r7, r7, r6
	add	r0, r0, r3, lsl #9
	bl	ftl_memcpy
	mov	r1, r8
	ldr	r2, [r4, #3308]
	add	r8, r8, #1
	ldr	r0, .L1388+4
	bl	FtlMapWritePage
	ldr	r3, [sp, #8]
	adds	r0, r0, #1
	add	fp, fp, r3
	it	eq
	moveq	r9, #-1
	b	.L1377
.L1379:
	ldrh	r2, [r4, #310]
	movs	r1, #0
	bl	ftl_memset
	b	.L1380
.L1384:
	mov	r9, #-1
	b	.L1375
.L1383:
	mov	r0, r9
	add	sp, sp, #108
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1389:
	.align	2
.L1388:
	.word	.LANCHOR0
	.word	.LANCHOR0+3608
	.fnend
	.size	FtlVendorPartWrite, .-FtlVendorPartWrite
	.align	1
	.global	Ftl_save_ext_data
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	Ftl_save_ext_data, %function
Ftl_save_ext_data:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r2, .L1392
	ldr	r3, .L1392+4
	ldr	r1, [r2, #2640]
	cmp	r1, r3
	bne	.L1390
	ldr	r3, .L1392+8
	add	r2, r2, #2640
	str	r3, [r2, #4]
	movs	r1, #1
	ldr	r3, [r2, #-60]
	movs	r0, #0
	str	r3, [r2, #88]
	ldr	r3, [r2, #-56]
	str	r3, [r2, #92]
	ldr	r3, [r2, #-64]
	str	r3, [r2, #8]
	ldr	r3, [r2, #-76]
	str	r3, [r2, #12]
	ldr	r3, [r2, #-84]
	str	r3, [r2, #16]
	ldr	r3, [r2, #-68]
	str	r3, [r2, #20]
	ldr	r3, [r2, #-40]
	str	r3, [r2, #28]
	ldr	r3, [r2, #-32]
	str	r3, [r2, #32]
	ldr	r3, [r2, #-80]
	str	r3, [r2, #36]
	ldr	r3, [r2, #-72]
	str	r3, [r2, #40]
	ldr	r3, [r2, #-28]
	str	r3, [r2, #44]
	ldr	r3, [r2, #-24]
	str	r3, [r2, #48]
	b	FtlVendorPartWrite
.L1390:
	bx	lr
.L1393:
	.align	2
.L1392:
	.word	.LANCHOR0
	.word	1179929683
	.word	1342177367
	.fnend
	.size	Ftl_save_ext_data, .-Ftl_save_ext_data
	.align	1
	.global	FtlEctTblFlush
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlEctTblFlush, %function
FtlEctTblFlush:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r3, .L1399
	push	{r4, lr}
	.save {r4, lr}
	ldrh	r2, [r3, #3652]
	cmp	r2, #31
	itt	ls
	addls	r2, r2, #1
	strhls	r2, [r3, #3652]	@ movhi
	ldr	r2, [r3, #3348]
	ite	ls
	movls	r1, #1
	movhi	r1, #32
	ldr	r4, [r2, #16]
	cbnz	r0, .L1396
	ldr	r0, [r2, #20]
	add	r1, r1, r0
	cmp	r1, r4
	bhi	.L1397
.L1396:
	ldr	r1, .L1399+4
	movs	r0, #64
	str	r1, [r2]
	str	r4, [r2, #20]
	ldrh	r1, [r3, #3340]
	ldr	r2, [r3, #3348]
	lsls	r3, r1, #9
	str	r3, [r2, #12]
	ldr	r3, [r2, #8]
	adds	r3, r3, #1
	str	r3, [r2, #8]
	movs	r3, #0
	str	r3, [r2, #4]
	bl	FtlVendorPartWrite
	bl	Ftl_save_ext_data
.L1397:
	movs	r0, #0
	pop	{r4, pc}
.L1400:
	.align	2
.L1399:
	.word	.LANCHOR0
	.word	1112818501
	.fnend
	.size	FtlEctTblFlush, .-FtlEctTblFlush
	.align	1
	.global	sftl_vendor_write
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_vendor_write, %function
sftl_vendor_write:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	add	r0, r0, #256
	b	FtlVendorPartWrite
	.fnend
	.size	sftl_vendor_write, .-sftl_vendor_write
	.section	.rodata.str1.1
.LC118:
	.ascii	"FtlVendorPartRead refresh = %x phyAddr = %x\012\000"
	.text
	.align	1
	.global	FtlVendorPartRead
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlVendorPartRead, %function
FtlVendorPartRead:
	.fnstart
	@ args = 0, pretend = 0, frame = 104
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r9, r2
	ldr	r5, .L1413
	.pad #108
	sub	sp, sp, #108
	adds	r2, r0, r1
	mov	r3, sp
	mov	r8, r0
	bic	r3, r3, #8160
	mov	r6, r1
	bic	r3, r3, #31
	ldrh	r7, [r5, #308]
	str	r3, [sp, #4]
	ldr	r3, [r3, #24]
	lsr	r7, r0, r7
	str	r3, [sp, #100]
	ldrh	r3, [r5, #296]
	cmp	r2, r3
	bhi	.L1412
	mov	r10, #0
.L1404:
	cbnz	r6, .L1410
.L1402:
	ldr	r3, [sp, #4]
	ldr	r2, [sp, #100]
	ldr	r3, [r3, #24]
	cmp	r2, r3
	beq	.L1411
	bl	__stack_chk_fail
.L1410:
	ldr	r3, [r5, #3372]
	mov	r0, r8
	ldrh	r4, [r5, #258]
	ldr	r3, [r3, r7, lsl #2]
	mov	r1, r4
	str	r3, [sp, #12]
	bl	__aeabi_uidivmod
	subs	r4, r4, r1
	ldr	r3, [sp, #12]
	str	r1, [sp, #8]
	uxth	r4, r4
	cmp	r4, r6
	it	hi
	uxthhi	r4, r6
	lsl	fp, r4, #9
	cbz	r3, .L1406
	ldr	r2, [r5, #3308]
	add	r0, sp, #16
	str	r2, [sp, #24]
	add	r2, sp, #36
	str	r2, [sp, #28]
	movs	r2, #1
	mov	r1, r2
	str	r3, [sp, #20]
	str	r3, [sp, #12]
	bl	FlashReadPages
	ldr	r2, [sp, #16]
	ldr	r3, [sp, #12]
	adds	r2, r2, #1
	ldr	r2, [r5, #3452]
	it	eq
	moveq	r10, #-1
	cmp	r2, #256
	bne	.L1408
	ldr	r0, .L1413+4
	mov	r2, r3
	mov	r1, r7
	bl	sftl_printk
	ldr	r2, [r5, #3308]
	ldr	r0, .L1413+8
	mov	r1, r7
	bl	FtlMapWritePage
.L1408:
	ldr	r1, [r5, #3308]
	mov	r2, fp
	ldr	r3, [sp, #8]
	mov	r0, r9
	add	r1, r1, r3, lsl #9
	bl	ftl_memcpy
.L1409:
	adds	r7, r7, #1
	subs	r6, r6, r4
	add	r8, r8, r4
	add	r9, r9, fp
	b	.L1404
.L1406:
	mov	r2, fp
	mov	r1, r3
	mov	r0, r9
	bl	ftl_memset
	b	.L1409
.L1412:
	mov	r10, #-1
	b	.L1402
.L1411:
	mov	r0, r10
	add	sp, sp, #108
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1414:
	.align	2
.L1413:
	.word	.LANCHOR0
	.word	.LC118
	.word	.LANCHOR0+3608
	.fnend
	.size	FtlVendorPartRead, .-FtlVendorPartRead
	.section	.rodata.str1.1
.LC119:
	.ascii	"no ect\000"
	.text
	.align	1
	.global	FtlLoadEctTbl
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlLoadEctTbl, %function
FtlLoadEctTbl:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, lr}
	.save {r4, lr}
	movs	r0, #64
	ldr	r4, .L1417
	ldr	r2, [r4, #3348]
	ldrh	r1, [r4, #3340]
	bl	FtlVendorPartRead
	ldr	r3, [r4, #3348]
	ldr	r2, [r3]
	ldr	r3, .L1417+4
	cmp	r2, r3
	beq	.L1416
	ldr	r1, .L1417+8
	ldr	r0, .L1417+12
	bl	sftl_printk
	ldrh	r2, [r4, #3340]
	ldr	r0, [r4, #3348]
	movs	r1, #0
	lsls	r2, r2, #9
	bl	ftl_memset
.L1416:
	movs	r0, #0
	pop	{r4, pc}
.L1418:
	.align	2
.L1417:
	.word	.LANCHOR0
	.word	1112818501
	.word	.LC119
	.word	.LC77
	.fnend
	.size	FtlLoadEctTbl, .-FtlLoadEctTbl
	.align	1
	.global	Ftl_load_ext_data
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	Ftl_load_ext_data, %function
Ftl_load_ext_data:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, lr}
	.save {r3, r4, r5, lr}
	movs	r1, #1
	ldr	r4, .L1421
	movs	r0, #0
	ldr	r5, .L1421+4
	add	r2, r4, #2640
	bl	FtlVendorPartRead
	ldr	r3, [r4, #2640]
	cmp	r3, r5
	beq	.L1420
	add	r0, r4, #2640
	mov	r2, #512
	movs	r1, #0
	bl	ftl_memset
	str	r5, [r4, #2640]
.L1420:
	ldr	r3, [r4, #2728]
	ldr	r2, [r4, #2672]
	str	r3, [r4, #2580]
	ldr	r3, [r4, #2732]
	str	r3, [r4, #2584]
	str	r2, [r4, #2608]
	ldr	r3, [r4, #2648]
	ldr	r2, [r4, #2676]
	str	r3, [r4, #2576]
	str	r2, [r4, #2560]
	ldr	r3, [r4, #2652]
	ldr	r2, [r4, #2680]
	str	r3, [r4, #2564]
	str	r2, [r4, #2568]
	ldr	r3, [r4, #2656]
	ldr	r2, [r4, #2684]
	str	r3, [r4, #2556]
	str	r2, [r4, #2612]
	ldr	r3, [r4, #2660]
	ldr	r2, [r4, #2688]
	str	r3, [r4, #2572]
	str	r2, [r4, #2616]
	ldr	r3, [r4, #2668]
	ldrh	r2, [r4, #292]
	ldr	r0, [r4, #2596]
	ldrh	r1, [r4, #240]
	str	r3, [r4, #2600]
	mla	r0, r0, r2, r3
	bl	__aeabi_uidiv
	str	r0, [r4, #2604]
	pop	{r3, r4, r5, pc}
.L1422:
	.align	2
.L1421:
	.word	.LANCHOR0
	.word	1179929683
	.fnend
	.size	Ftl_load_ext_data, .-Ftl_load_ext_data
	.align	1
	.global	sftl_vendor_read
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_vendor_read, %function
sftl_vendor_read:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	add	r0, r0, #256
	b	FtlVendorPartRead
	.fnend
	.size	sftl_vendor_read, .-sftl_vendor_read
	.align	1
	.global	FtlMapBlkWriteDump_data
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlMapBlkWriteDump_data, %function
FtlMapBlkWriteDump_data:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	mov	r5, r0
	ldr	r3, [r0, #36]
	cbz	r3, .L1424
	ldrh	r6, [r0, #6]
	movs	r2, #0
	ldr	r4, .L1428
	subs	r6, r6, #1
	str	r2, [r0, #36]
	ldr	r3, [r0, #24]
	uxth	r6, r6
	ldr	r0, [r4, #3304]
	ldr	r2, [r4, #3332]
	str	r0, [r4, #3460]
	str	r2, [r4, #3464]
	ldr	r3, [r3, r6, lsl #2]
	str	r3, [r4, #3456]
	cbz	r3, .L1426
	movs	r2, #1
	addw	r0, r4, #3452
	mov	r1, r2
	bl	FlashReadPages
.L1427:
	ldr	r2, [r4, #3460]
	mov	r1, r6
	mov	r0, r5
	pop	{r4, r5, r6, lr}
	b	FtlMapWritePage
.L1426:
	ldrh	r2, [r4, #310]
	movs	r1, #255
	bl	ftl_memset
	b	.L1427
.L1424:
	pop	{r4, r5, r6, pc}
.L1429:
	.align	2
.L1428:
	.word	.LANCHOR0
	.fnend
	.size	FtlMapBlkWriteDump_data, .-FtlMapBlkWriteDump_data
	.section	.rodata.str1.1
.LC120:
	.ascii	"FtlVpcTblFlush error = %x error count = %d\012\000"
	.text
	.align	1
	.global	FtlVpcTblFlush
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlVpcTblFlush, %function
FtlVpcTblFlush:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	movs	r5, #0
	ldr	r4, .L1446
	movs	r1, #255
	ldr	r9, .L1446+4
	ldr	r10, .L1446+8
	addw	r8, r4, #3452
	movw	r7, #65535
	ldr	r6, [r4, #3332]
	ldr	r3, [r4, #3300]
	str	r3, [r4, #3460]
	ldrh	r3, [r4, #2624]
	str	r6, [r4, #3464]
	strh	r3, [r6, #2]	@ movhi
	movw	r3, #61604
	strh	r3, [r6]	@ movhi
	ldr	r3, [r4, #2632]
	str	r3, [r6, #4]
	ldr	r3, .L1446+12
	str	r3, [r4, #2468]
	ldr	r3, .L1446+16
	str	r3, [r4, #2472]
	ldrh	r3, [r4, #2630]
	strd	r5, r5, [r6, #8]
	strh	r3, [r4, #2476]	@ movhi
	ldrh	r3, [r4, #254]
	strb	r3, [r4, #2478]
	ldrh	r3, [r4, #24]
	ldrh	r2, [r4, #26]
	strh	r3, [r4, #2482]	@ movhi
	ldrb	r3, [r4, #30]	@ zero_extendqisi2
	orr	r3, r3, r2, lsl #6
	strh	r3, [r4, #2484]	@ movhi
	ldrb	r3, [r4, #32]	@ zero_extendqisi2
	strb	r3, [r4, #2479]
	ldrh	r3, [r4, #76]
	ldrh	r2, [r4, #78]
	strh	r3, [r4, #2486]	@ movhi
	ldrb	r3, [r4, #82]	@ zero_extendqisi2
	orr	r3, r3, r2, lsl #6
	strh	r3, [r4, #2488]	@ movhi
	ldrb	r3, [r4, #84]	@ zero_extendqisi2
	strb	r3, [r4, #2480]
	ldrh	r3, [r4, #124]
	strh	r3, [r4, #2490]	@ movhi
	ldrh	r2, [r4, #126]
	ldrb	r3, [r4, #130]	@ zero_extendqisi2
	ldr	r0, [r4, #3460]
	orr	r3, r3, r2, lsl #6
	strh	r3, [r4, #2492]	@ movhi
	ldrb	r3, [r4, #132]	@ zero_extendqisi2
	strb	r3, [r4, #2481]
	ldr	r3, [r4, #2596]
	str	r3, [r4, #2500]
	ldr	r3, [r4, #2588]
	ldrh	r2, [r4, #310]
	str	r3, [r4, #2508]
	ldr	r3, [r4, #2592]
	str	r3, [r4, #2504]
	bl	ftl_memset
	addw	r1, r4, #2468
	movs	r2, #48
	ldr	r0, [r4, #3460]
	bl	ftl_memcpy
	ldrh	r2, [r4, #240]
	ldr	r0, [r4, #3460]
	ldr	r1, [r4, #72]
	lsls	r2, r2, #1
	adds	r0, r0, #48
	bl	ftl_memcpy
	mov	r0, r5
	bl	FtlUpdateVaildLpn
.L1431:
	ldrh	r1, [r4, #2626]
	ldrh	r2, [r4, #2624]
	ldr	r3, [r4, #3300]
	str	r3, [r4, #3460]
	ldr	r3, [r4, #3332]
	str	r3, [r4, #3464]
	orr	r3, r1, r2, lsl #10
	str	r3, [r4, #3456]
	ldrh	r3, [r4, #304]
	subs	r3, r3, #1
	cmp	r1, r3
	blt	.L1432
	movs	r3, #0
	ldrh	r7, [r4, #2628]
	strh	r3, [r4, #2626]	@ movhi
	strh	r2, [r4, #2628]	@ movhi
	bl	FtlFreeSysBlkQueueOut
	ldr	r3, [r4, #2588]
	str	r3, [r4, #2632]
	adds	r2, r3, #1
	strh	r0, [r4, #2624]	@ movhi
	str	r2, [r4, #2588]
	lsls	r2, r0, #10
	str	r2, [r4, #3456]
	str	r3, [r6, #4]
	strh	r0, [r6, #2]	@ movhi
.L1432:
	ldrh	r1, [r4, #310]
	ldr	r0, [r4, #3300]
	bl	js_hash
	movs	r3, #1
	str	r0, [r6, #12]
	mov	r2, r3
	mov	r1, r3
	mov	r0, r8
	bl	FlashProgPages
	ldrh	r3, [r4, #2626]
	ldr	r2, [r4, #3452]
	adds	r3, r3, #1
	adds	r1, r2, #1
	uxth	r3, r3
	strh	r3, [r4, #2626]	@ movhi
	bne	.L1433
	cmp	r3, #1
	bne	.L1435
	mov	r1, r9
	mov	r0, r10
	movw	r2, #1145
	bl	sftl_printk
	ldrh	r3, [r4, #2626]
	cmp	r3, #1
	ittt	eq
	ldrheq	r3, [r4, #304]
	addeq	r3, r3, #-1
	strheq	r3, [r4, #2626]	@ movhi
.L1435:
	adds	r5, r5, #1
	uxth	r5, r5
	cmp	r5, #3
	bls	.L1431
	ldr	r1, [r4, #3456]
	mov	r2, r5
	ldr	r0, .L1446+20
	bl	sftl_printk
.L1438:
	b	.L1438
.L1433:
	cmp	r3, #1
	beq	.L1431
	cmp	r2, #256
	beq	.L1431
	movw	r3, #65535
	cmp	r7, r3
	beq	.L1439
	mov	r0, r7
	movs	r1, #1
	bl	FtlFreeSysBlkQueueIn
.L1439:
	movs	r0, #0
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L1447:
	.align	2
.L1446:
	.word	.LANCHOR0
	.word	.LANCHOR1+471
	.word	.LC8
	.word	1179929683
	.word	1342177367
	.word	.LC120
	.fnend
	.size	FtlVpcTblFlush, .-FtlVpcTblFlush
	.align	1
	.global	FtlSysFlush
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlSysFlush, %function
FtlSysFlush:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, lr}
	.save {r3, lr}
	bl	l2p_flush
	movs	r0, #1
	bl	FtlEctTblFlush
	bl	FtlVpcTblFlush
	movs	r0, #0
	pop	{r3, pc}
	.fnend
	.size	FtlSysFlush, .-FtlSysFlush
	.align	1
	.global	sftl_deinit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_deinit, %function
sftl_deinit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, lr}
	.save {r3, lr}
	ldr	r3, .L1451
	ldr	r3, [r3]
	cmp	r3, #1
	bne	.L1450
	bl	FtlSysFlush
.L1450:
	movs	r0, #0
	pop	{r3, pc}
.L1452:
	.align	2
.L1451:
	.word	.LANCHOR2
	.fnend
	.size	sftl_deinit, .-sftl_deinit
	.align	1
	.global	sftl_discard
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_discard, %function
sftl_discard:
	.fnstart
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, lr}
	.save {r4, r5, r6, r7, r8, r9, lr}
	mov	r6, r0
	ldr	r5, .L1471
	.pad #20
	sub	sp, sp, #20
	mov	r4, r1
	mov	r3, sp
	bic	r9, r3, #8160
	bic	r9, r9, #31
	ldr	r3, [r9, #24]
	str	r3, [sp, #12]
	ldr	r3, [r5, #340]
	cmp	r3, r0
	bls	.L1464
	cmp	r3, r1
	bcc	.L1464
	adds	r2, r0, r1
	cmp	r3, r2
	bcc	.L1464
	cmp	r1, #31
	bhi	.L1455
.L1460:
	movs	r0, #0
.L1453:
	ldr	r2, [sp, #12]
	ldr	r3, [r9, #24]
	cmp	r2, r3
	beq	.L1461
	bl	__stack_chk_fail
.L1455:
	ldrh	r8, [r5, #258]
	mov	r1, r8
	bl	__aeabi_uidiv
	mov	r7, r0
	smulbb	r0, r0, r8
	subs	r6, r6, r0
	uxth	r6, r6
	cbz	r6, .L1456
	sub	r8, r8, r6
	adds	r7, r7, #1
	cmp	r8, r4
	it	cs
	movcs	r8, r4
	uxth	r8, r8
	sub	r4, r4, r8
.L1456:
	mov	r3, #-1
	str	r3, [sp, #8]
.L1457:
	ldrh	r3, [r5, #258]
	cmp	r3, r4
	bls	.L1459
	ldr	r3, [r5, #3656]
	cmp	r3, #32
	bls	.L1460
	movs	r4, #0
	str	r4, [r5, #3656]
	bl	l2p_flush
	bl	FtlVpcTblFlush
	b	.L1460
.L1459:
	add	r1, sp, #4
	mov	r0, r7
	movs	r2, #0
	bl	log2phys
	ldr	r3, [sp, #4]
	adds	r3, r3, #1
	beq	.L1458
	ldr	r3, [r5, #3656]
	add	r1, sp, #8
	movs	r2, #1
	mov	r0, r7
	adds	r3, r3, #1
	str	r3, [r5, #3656]
	ldr	r3, [r5, #2560]
	adds	r3, r3, #1
	str	r3, [r5, #2560]
	bl	log2phys
	ldr	r0, [sp, #4]
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	bl	decrement_vpc_count
.L1458:
	ldrh	r3, [r5, #258]
	adds	r7, r7, #1
	subs	r4, r4, r3
	b	.L1457
.L1464:
	mov	r0, #-1
	b	.L1453
.L1461:
	add	sp, sp, #20
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, pc}
.L1472:
	.align	2
.L1471:
	.word	.LANCHOR0
	.fnend
	.size	sftl_discard, .-sftl_discard
	.section	.rodata.str1.1
.LC121:
	.ascii	"FtlCheckVpc %x = %x  %x\012\000"
	.text
	.align	1
	.global	FtlVpcCheckAndModify
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlVpcCheckAndModify, %function
FtlVpcCheckAndModify:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	movs	r5, #0
	ldr	r4, .L1488
	mov	r3, sp
	ldr	r1, .L1488+4
	bic	r7, r3, #8160
	ldr	r0, .L1488+8
	bic	r7, r7, #31
	ldr	r3, [r7, #24]
	str	r3, [sp, #4]
	bl	sftl_printk
	ldrh	r2, [r4, #242]
	movs	r1, #0
	ldr	r0, [r4, #3352]
	lsls	r2, r2, #1
	bl	ftl_memset
.L1474:
	ldr	r3, [r4, #2552]
	cmp	r3, r5
	bhi	.L1476
	ldr	r9, .L1488+12
	mov	r8, #0
	ldr	r10, .L1488+16
	ldr	fp, .L1488+4
.L1477:
	ldrh	r3, [r4, #240]
	uxth	r5, r8
	cmp	r3, r5
	bhi	.L1483
	bl	l2p_flush
	bl	FtlVpcTblFlush
	ldr	r2, [sp, #4]
	ldr	r3, [r7, #24]
	cmp	r2, r3
	beq	.L1484
	bl	__stack_chk_fail
.L1476:
	mov	r1, sp
	mov	r0, r5
	movs	r2, #0
	bl	log2phys
	ldr	r0, [sp]
	adds	r3, r0, #1
	beq	.L1475
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	ldr	r2, [r4, #3352]
	ldrh	r3, [r2, r0, lsl #1]
	adds	r3, r3, #1
	strh	r3, [r2, r0, lsl #1]	@ movhi
.L1475:
	adds	r5, r5, #1
	b	.L1474
.L1483:
	ldr	r3, [r4, #72]
	uxth	r6, r8
	ldrh	r2, [r3, r6, lsl #1]
	ldr	r3, [r4, #3352]
	ldrh	r3, [r3, r6, lsl #1]
	cmp	r2, r3
	beq	.L1479
	movw	r1, #65535
	cmp	r2, r1
	beq	.L1479
	mov	r1, r6
	mov	r0, r9
	bl	sftl_printk
	ldrh	r3, [r4, #24]
	cmp	r3, r5
	beq	.L1479
	ldrh	r3, [r4, #124]
	cmp	r3, r5
	beq	.L1479
	ldrh	r3, [r4, #76]
	cmp	r3, r5
	beq	.L1479
	ldr	r3, [r4, #72]
	ldr	r2, [r4, #3352]
	ldrh	r1, [r3, r6, lsl #1]
	ldrh	r2, [r2, r6, lsl #1]
	strh	r2, [r3, r6, lsl #1]	@ movhi
	cbnz	r1, .L1481
	mov	r1, r5
	mov	r0, r10
	bl	List_remove_node
	ldrh	r3, [r4, #224]
	cbnz	r3, .L1482
	ldr	r0, .L1488+20
	mov	r1, fp
	movw	r2, #2330
	bl	sftl_printk
.L1482:
	ldrh	r3, [r4, #224]
	mov	r0, r5
	subs	r3, r3, #1
	strh	r3, [r4, #224]	@ movhi
	bl	INSERT_DATA_LIST
.L1479:
	add	r8, r8, #1
	b	.L1477
.L1481:
	mov	r0, r5
	bl	update_vpc_list
	b	.L1479
.L1484:
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1489:
	.align	2
.L1488:
	.word	.LANCHOR0
	.word	.LANCHOR1+486
	.word	.LC111
	.word	.LC121
	.word	.LANCHOR0+2532
	.word	.LC8
	.fnend
	.size	FtlVpcCheckAndModify, .-FtlVpcCheckAndModify
	.align	1
	.global	allocate_new_data_superblock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	allocate_new_data_superblock, %function
allocate_new_data_superblock:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	mov	r5, r0
	ldr	r6, .L1500
	ldrh	r4, [r0]
	ldrh	r3, [r6, #240]
	cmp	r3, r4
	bcs	.L1491
	ldr	r1, .L1500+4
	movw	r2, #2766
	ldr	r0, .L1500+8
	bl	sftl_printk
.L1491:
	movw	r3, #65535
	cmp	r4, r3
	beq	.L1492
	ldr	r3, [r6, #72]
	mov	r0, r4
	ldrh	r3, [r3, r4, lsl #1]
	cbz	r3, .L1493
	bl	INSERT_DATA_LIST
.L1492:
	ldrh	r0, [r6, #3438]
	movs	r3, #1
	strb	r3, [r5, #8]
	movw	r3, #65535
	cmp	r0, r3
	beq	.L1494
	cmp	r0, r4
	bne	.L1495
	ldr	r3, [r6, #72]
	ldrh	r3, [r3, r4, lsl #1]
	cbz	r3, .L1496
.L1495:
	bl	update_vpc_list
.L1496:
	movw	r3, #65535
	strh	r3, [r6, #3438]	@ movhi
.L1494:
	mov	r0, r5
	bl	allocate_data_superblock
	bl	l2p_flush
	movs	r0, #0
	bl	FtlEctTblFlush
	bl	FtlVpcTblFlush
	movs	r0, #0
	pop	{r4, r5, r6, pc}
.L1493:
	bl	INSERT_FREE_LIST
	b	.L1492
.L1501:
	.align	2
.L1500:
	.word	.LANCHOR0
	.word	.LANCHOR1+507
	.word	.LC8
	.fnend
	.size	allocate_new_data_superblock, .-allocate_new_data_superblock
	.section	.rodata.str1.1
.LC122:
	.ascii	"FtlProgPages error %x = %d\012\000"
.LC123:
	.ascii	"Ftlwrite decrement_vpc_count %x = %d\012\000"
	.text
	.align	1
	.global	FtlProgPages
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlProgPages, %function
FtlProgPages:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.pad #12
	mov	r5, r3
	ldr	fp, .L1522
	mov	r3, sp
	ldr	r10, .L1522+4
	bic	r7, r3, #8160
	mov	r9, #0
	bic	r7, r7, #31
	movs	r2, #0
	mov	r4, r0
	mov	r8, r1
	ldr	r3, [r7, #24]
	str	r3, [sp, #4]
	ldrb	r3, [r5, #9]	@ zero_extendqisi2
	bl	FlashProgPages
.L1503:
	cmp	r9, r8
	bne	.L1510
	ldr	r3, .L1522+4
	ldrb	r2, [r5, #6]	@ zero_extendqisi2
	ldrh	r3, [r3, #232]
	cmp	r2, r3
	bcc	.L1502
	ldr	r1, .L1522+8
	mov	r2, #1000
	ldr	r0, .L1522+12
	bl	sftl_printk
.L1502:
	ldr	r2, [sp, #4]
	ldr	r3, [r7, #24]
	cmp	r2, r3
	beq	.L1512
	bl	__stack_chk_fail
.L1505:
	ldr	r1, [r4, #4]
	mov	r0, fp
	bl	sftl_printk
	ldr	r0, [r4, #4]
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	bl	decrement_vpc_count
	ldrh	r3, [r5, #4]
	cbnz	r3, .L1504
	mov	r0, r5
	bl	allocate_new_data_superblock
.L1504:
	mov	r0, r5
	bl	get_new_active_ppa
	str	r0, [r4, #4]
	str	r0, [sp]
	movs	r2, #0
	ldrb	r3, [r5, #9]	@ zero_extendqisi2
	mov	r0, r4
	movs	r1, #1
	bl	FlashProgPages
.L1510:
	ldr	r2, [r4]
	adds	r1, r2, #1
	beq	.L1505
	cmp	r2, #256
	beq	.L1505
	ldrb	r2, [r5, #6]	@ zero_extendqisi2
	ldrh	r3, [r10, #232]
	cmp	r2, r3
	bcc	.L1506
	ldr	r1, .L1522+8
	movw	r2, #985
	ldr	r0, .L1522+12
	bl	sftl_printk
.L1506:
	ldr	r3, [r4, #4]
	mov	r1, sp
	ldr	r0, [r4, #16]
	movs	r2, #1
	str	r3, [sp]
	bl	log2phys
	ldr	r3, [r4, #12]
	ldr	r0, [r3, #12]
	adds	r3, r0, #1
	beq	.L1507
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	ldr	r3, [r10, #72]
	mov	r6, r0
	ldrh	r2, [r3, r0, lsl #1]
	cbnz	r2, .L1508
	mov	r1, r0
	ldr	r0, .L1522+16
	bl	sftl_printk
.L1508:
	mov	r0, r6
	bl	decrement_vpc_count
.L1507:
	add	r9, r9, #1
	adds	r4, r4, #20
	b	.L1503
.L1512:
	add	sp, sp, #12
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1523:
	.align	2
.L1522:
	.word	.LC122
	.word	.LANCHOR0
	.word	.LANCHOR1+536
	.word	.LC8
	.word	.LC123
	.fnend
	.size	FtlProgPages, .-FtlProgPages
	.align	1
	.global	FtlGcFreeTempBlock
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcFreeTempBlock, %function
FtlGcFreeTempBlock:
	.fnstart
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	.pad #8
	ldr	r4, .L1549
	mov	r3, sp
	bic	r6, r3, #8160
	bic	r6, r6, #31
	ldrh	r2, [r4, #124]
	ldrh	r1, [r4, #302]
	ldr	r3, [r6, #24]
	str	r3, [sp, #4]
	movw	r3, #65535
	cmp	r2, r3
	bne	.L1525
.L1532:
	ldrh	r2, [r4, #124]
	movs	r3, #0
	str	r3, [r4, #3444]
	movw	r3, #65535
	cmp	r2, r3
	bne	.L1546
.L1526:
	movs	r0, #0
.L1524:
	ldr	r2, [sp, #4]
	ldr	r3, [r6, #24]
	cmp	r2, r3
	beq	.L1541
	bl	__stack_chk_fail
.L1525:
	ldr	r5, .L1549+4
	cbz	r0, .L1528
	ldrh	r2, [r5, #4]
	cmp	r2, r3
	beq	.L1529
.L1530:
	movs	r1, #2
.L1528:
	ldr	r0, .L1549+8
	bl	FtlGcScanTempBlk
	ldrh	r2, [r5, #4]
	movw	r3, #65535
	str	r0, [sp]
	cmp	r2, r3
	beq	.L1532
	movs	r0, #1
	b	.L1524
.L1529:
	movs	r3, #0
	strh	r3, [r5, #4]	@ movhi
	ldrh	r3, [r4, #224]
	cmp	r3, #17
	bhi	.L1530
	b	.L1528
.L1546:
	ldrb	r3, [r4, #131]	@ zero_extendqisi2
	ldrh	r1, [r4, #302]
	ldrh	r2, [r4, #3204]
	muls	r3, r1, r3
	cmp	r2, r3
	beq	.L1533
	ldr	r1, .L1549+12
	movs	r2, #164
	ldr	r0, .L1549+16
	bl	sftl_printk
.L1533:
	ldrb	r3, [r4, #131]	@ zero_extendqisi2
	movs	r5, #0
	ldrh	r0, [r4, #302]
	mov	r9, #12
	ldrh	r1, [r4, #124]
	ldr	r2, [r4, #72]
	smulbb	r3, r3, r0
	strh	r3, [r2, r1, lsl #1]	@ movhi
	ldr	r2, [r4, #2576]
	ldrh	r3, [r4, #3204]
	add	r3, r3, r2
	str	r3, [r4, #2576]
.L1534:
	ldrh	r2, [r4, #3204]
	uxth	r3, r5
	cmp	r2, r3
	bhi	.L1538
	movw	r0, #65535
	bl	decrement_vpc_count
	ldrh	r0, [r4, #124]
	ldr	r3, [r4, #72]
	ldrh	r3, [r3, r0, lsl #1]
	cmp	r3, #0
	beq	.L1539
	bl	INSERT_DATA_LIST
.L1540:
	movw	r7, #65535
	movs	r5, #0
	strh	r7, [r4, #124]	@ movhi
	strh	r5, [r4, #3204]	@ movhi
	strh	r5, [r4, #3196]	@ movhi
	bl	l2p_flush
	bl	FtlVpcTblFlush
	ldrh	r3, [r4, #2620]
	ldrh	r2, [r4, #224]
	strh	r7, [r4, #172]	@ movhi
	add	r3, r3, r3, lsl #1
	cmp	r2, r3, lsr #2
	ble	.L1526
	movs	r3, #20
	strh	r3, [r4, #3152]	@ movhi
	b	.L1526
.L1538:
	uxth	r8, r5
	ldr	r10, [r4, #3200]
	ldr	r3, [r4, #2552]
	mul	r8, r9, r8
	add	r7, r10, r8
	ldr	r0, [r7, #8]
	cmp	r0, r3
	bcc	.L1535
.L1547:
	ldrh	r0, [r4, #124]
	b	.L1548
.L1535:
	mov	r1, sp
	movs	r2, #0
	bl	log2phys
	ldr	r0, [r10, r8]
	ldr	r3, [sp]
	cmp	r0, r3
	bne	.L1537
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	adds	r1, r7, #4
	mov	r8, r0
	movs	r2, #1
	ldr	r0, [r7, #8]
	bl	log2phys
	mov	r0, r8
.L1548:
	bl	decrement_vpc_count
	b	.L1536
.L1537:
	ldr	r2, [r7, #4]
	cmp	r3, r2
	bne	.L1547
.L1536:
	adds	r5, r5, #1
	b	.L1534
.L1539:
	bl	INSERT_FREE_LIST
	b	.L1540
.L1541:
	add	sp, sp, #8
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L1550:
	.align	2
.L1549:
	.word	.LANCHOR0
	.word	.LANCHOR2
	.word	.LANCHOR0+124
	.word	.LANCHOR1+549
	.word	.LC8
	.fnend
	.size	FtlGcFreeTempBlock, .-FtlGcFreeTempBlock
	.align	1
	.global	FtlGcPageRecovery
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlGcPageRecovery, %function
FtlGcPageRecovery:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, lr}
	.save {r4, lr}
	ldr	r4, .L1553
	add	r0, r4, #124
	ldrh	r1, [r4, #302]
	bl	FtlGcScanTempBlk
	ldrh	r2, [r4, #126]
	ldrh	r3, [r4, #302]
	cmp	r2, r3
	bcc	.L1551
	add	r0, r4, #3392
	bl	FtlMapBlkWriteDump_data
	movs	r0, #0
	bl	FtlGcFreeTempBlock
	movs	r3, #0
	str	r3, [r4, #3444]
.L1551:
	pop	{r4, pc}
.L1554:
	.align	2
.L1553:
	.word	.LANCHOR0
	.fnend
	.size	FtlGcPageRecovery, .-FtlGcPageRecovery
	.align	1
	.global	FtlPowerLostRecovery
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlPowerLostRecovery, %function
FtlPowerLostRecovery:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	movs	r5, #0
	ldr	r4, .L1556
	add	r6, r4, #24
	adds	r4, r4, #76
	mov	r0, r6
	str	r5, [r4, #3400]
	bl	FtlRecoverySuperblock
	mov	r0, r6
	bl	FtlSlcSuperblockCheck
	mov	r0, r4
	bl	FtlRecoverySuperblock
	mov	r0, r4
	bl	FtlSlcSuperblockCheck
	bl	FtlGcPageRecovery
	movw	r0, #65535
	bl	decrement_vpc_count
	mov	r0, r5
	pop	{r4, r5, r6, pc}
.L1557:
	.align	2
.L1556:
	.word	.LANCHOR0
	.fnend
	.size	FtlPowerLostRecovery, .-FtlPowerLostRecovery
	.align	1
	.global	Ftl_gc_temp_data_write_back
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	Ftl_gc_temp_data_write_back, %function
Ftl_gc_temp_data_write_back:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	movs	r5, #0
	ldr	r4, .L1566
	movs	r6, #20
	movs	r3, #0
	mov	r2, r3
	ldr	r1, [r4, #3168]
	ldr	r0, [r4, #3292]
	bl	FlashProgPages
.L1559:
	ldr	r1, [r4, #3168]
	uxth	r3, r5
	ldr	r2, [r4, #3292]
	cmp	r3, r1
	bcc	.L1562
	mov	r0, r2
	bl	FtlGcBufFree
	ldrh	r3, [r4, #128]
	movs	r0, #0
	str	r0, [r4, #3168]
	cbnz	r3, .L1558
	movs	r0, #1
	bl	FtlGcFreeTempBlock
	movs	r0, #1
.L1558:
	pop	{r3, r4, r5, r6, r7, pc}
.L1562:
	muls	r3, r6, r3
	adds	r5, r5, #1
	adds	r1, r2, r3
	ldr	r2, [r2, r3]
	ldr	r7, [r1, #12]
	adds	r3, r2, #1
	ldr	r1, [r1, #4]
	ldr	r0, [r7, #12]
	it	ne
	ldrne	r2, [r7, #8]
	bl	FtlGcUpdatePage
	b	.L1559
.L1567:
	.align	2
.L1566:
	.word	.LANCHOR0
	.fnend
	.size	Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back
	.align	1
	.global	Ftl_get_new_temp_ppa
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	Ftl_get_new_temp_ppa, %function
Ftl_get_new_temp_ppa:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, lr}
	.save {r3, r4, r5, lr}
	movw	r3, #65535
	ldr	r4, .L1571
	ldrh	r2, [r4, #124]
	cmp	r2, r3
	beq	.L1569
	ldrh	r3, [r4, #128]
	cbnz	r3, .L1570
.L1569:
	movs	r0, #0
	movs	r5, #0
	bl	FtlGcFreeTempBlock
	ldr	r0, .L1571+4
	strb	r5, [r4, #132]
	bl	allocate_data_superblock
	strh	r5, [r4, #3196]	@ movhi
	strh	r5, [r4, #3204]	@ movhi
	bl	l2p_flush
	mov	r0, r5
	bl	FtlEctTblFlush
	bl	FtlVpcTblFlush
.L1570:
	pop	{r3, r4, r5, lr}
	ldr	r0, .L1571+4
	b	get_new_active_ppa
.L1572:
	.align	2
.L1571:
	.word	.LANCHOR0
	.word	.LANCHOR0+124
	.fnend
	.size	Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa
	.section	.rodata.str1.1
.LC124:
	.ascii	"SWL %x, FSB = %x vpc= %x,ec=%x th=%x\012\000"
	.text
	.align	1
	.global	rk_ftl_garbage_collect
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rk_ftl_garbage_collect, %function
rk_ftl_garbage_collect:
	.fnstart
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	ldr	r4, .L1687
	.pad #44
	sub	sp, sp, #44
	mov	r3, sp
	bic	r3, r3, #8160
	bic	r3, r3, #31
	str	r0, [sp, #16]
	ldr	r0, [r4, #3272]
	ldr	r3, [r3, #24]
	str	r3, [sp, #36]
	cmp	r0, #0
	bne	.L1651
	ldrh	r3, [r4, #2528]
	cmp	r3, #47
	bls	.L1573
	ldr	r3, .L1687+4
	ldrh	r2, [r3, #4]
	movw	r3, #65535
	cmp	r2, r3
	bne	.L1575
.L1578:
	ldrh	r2, [r4, #220]
	movw	r1, #65535
	cmp	r2, r1
	bne	.L1576
.L1577:
	bl	FtlReadRefresh
	ldr	r3, [r4, #3156]
	ldr	r2, [sp, #16]
	adds	r3, r3, #1
	ldrh	r6, [r4, #172]
	add	r3, r3, r2, lsl #7
	ldrh	r2, [r4, #124]
	str	r3, [r4, #3156]
	ands	r6, r6, r2
	ldrh	r2, [r4, #222]
	ands	r6, r6, r2
	movw	r2, #65535
	cmp	r6, r2
	bne	.L1579
	ldrh	r2, [r4, #224]
	cmp	r2, #24
	ite	cc
	movcc	r2, #5120
	movcs	r2, #1024
	cmp	r3, r2
	bls	.L1579
	movs	r7, #0
	str	r7, [r4, #3156]
	strh	r7, [r4, #3660]	@ movhi
	bl	GetSwlReplaceBlock
	mov	r5, r0
	cmp	r0, r6
	bne	.L1581
	ldrh	r2, [r4, #224]
	ldrh	r3, [r4, #3154]
	cmp	r2, r3
	bcs	.L1582
	movs	r0, #64
	bl	List_get_gc_head_node
	uxth	r3, r0
	cmp	r3, r5
	beq	.L1584
	mov	r0, r3
	ldr	r3, [r4, #72]
	ldrh	r3, [r3, r0, lsl #1]
	cmp	r3, #7
	bhi	.L1585
	mov	r0, r7
	bl	List_get_gc_head_node
	uxth	r0, r0
	movs	r3, #128
	cmp	r0, r5
	strh	r3, [r4, #3154]	@ movhi
	beq	.L1584
	mov	r5, r0
.L1581:
	ldr	r3, [r4, #72]
	mov	r1, r5
	ldrh	r2, [r4, #3152]
	ldr	r0, .L1687+8
	ldrh	r3, [r3, r5, lsl #1]
	str	r2, [sp, #4]
	ldr	r2, [r4, #2536]
	ldrh	r2, [r2, r5, lsl #1]
	str	r2, [sp]
	ldrh	r2, [r4, #224]
	bl	sftl_printk
	b	.L1584
.L1575:
	ldrh	r2, [r4, #124]
	cmp	r2, r3
	beq	.L1578
	movs	r0, #1
	bl	FtlGcFreeTempBlock
	cmp	r0, #0
	beq	.L1578
	movs	r0, #1
	b	.L1573
.L1576:
	ldrh	r3, [r4, #222]
	cmp	r3, r1
	itt	eq
	strheq	r2, [r4, #222]	@ movhi
	strheq	r3, [r4, #220]	@ movhi
	b	.L1577
.L1585:
	movs	r3, #64
.L1683:
	strh	r3, [r4, #3154]	@ movhi
.L1584:
	bl	FtlGcReFreshBadBlk
	ldr	r3, [sp, #16]
	cmp	r3, #0
	bne	.L1587
	movw	r3, #65535
	cmp	r5, r3
	bne	.L1587
.L1649:
	ldrh	r3, [r4, #224]
	cmp	r3, #24
	bhi	.L1656
	ldrh	r6, [r4, #302]
	cmp	r3, #16
	bls	.L1589
	lsrs	r6, r6, #5
.L1588:
	ldrh	r2, [r4, #3152]
	cmp	r2, r3
	bcs	.L1591
	ldrh	r2, [r4, #222]
	ldrh	r3, [r4, #124]
	ands	r3, r3, r2
	movw	r2, #65535
	cmp	r3, r2
	bne	.L1592
	ldrh	r0, [r4, #3660]
	cbnz	r0, .L1593
	ldr	r3, [r4, #2552]
	ldr	r2, [r4, #2548]
	add	r3, r3, r3, lsl #1
	cmp	r2, r3, lsr #2
	bcs	.L1657
.L1593:
	ldrh	r3, [r4, #2620]
	add	r3, r3, r3, lsl #1
	lsrs	r3, r3, #2
.L1594:
	strh	r3, [r4, #3152]	@ movhi
	movs	r3, #0
	str	r3, [r4, #3164]
.L1573:
	mov	r3, sp
	ldr	r2, [sp, #36]
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r3, [r3, #24]
	cmp	r2, r3
	beq	.L1650
	bl	__stack_chk_fail
.L1582:
	movs	r3, #80
	b	.L1683
.L1589:
	cmp	r3, #12
	bls	.L1590
	lsrs	r6, r6, #4
	b	.L1588
.L1590:
	cmp	r3, #8
	bls	.L1588
	lsrs	r6, r6, #2
	b	.L1588
.L1656:
	movs	r6, #1
	b	.L1588
.L1657:
	movs	r3, #18
	b	.L1594
.L1592:
	ldrh	r3, [r4, #2620]
	add	r3, r3, r3, lsl #1
	asrs	r3, r3, #2
	strh	r3, [r4, #3152]	@ movhi
.L1591:
	ldrh	r3, [r4, #3206]
	cbz	r3, .L1658
	adds	r6, r6, #32
	uxth	r6, r6
.L1658:
	movw	r5, #65535
.L1596:
	ldrh	r3, [r4, #172]
	movw	r2, #65535
	cmp	r3, r2
	bne	.L1604
	cmp	r5, r3
	beq	.L1605
	strh	r5, [r4, #172]	@ movhi
.L1606:
	ldrh	r0, [r4, #172]
	movs	r3, #0
	movw	r8, #65535
	strb	r3, [r4, #180]
	cmp	r0, r8
	beq	.L1604
	bl	IsBlkInGcList
	mov	r7, r0
	cmp	r0, #0
	beq	.L1609
	strh	r8, [r4, #172]	@ movhi
.L1604:
	ldrh	r3, [r4, #172]
	ldrh	r2, [r4, #24]
	cmp	r2, r3
	beq	.L1610
	ldrh	r2, [r4, #76]
	cmp	r2, r3
	beq	.L1610
	ldrh	r2, [r4, #124]
	cmp	r2, r3
	bne	.L1611
.L1610:
	movw	r3, #65535
	strh	r3, [r4, #172]	@ movhi
.L1611:
	ldr	r4, .L1687
.L1647:
	ldrh	r8, [r4, #172]
	movw	r3, #65535
	cmp	r8, r3
	bne	.L1612
	mov	r9, #0
	str	r9, [r4, #3164]
.L1613:
	ldrh	r7, [r4, #3160]
	mov	r0, r7
	bl	List_get_gc_head_node
	uxth	fp, r0
	mov	r10, r0
	cmp	fp, r8
	strh	fp, [r4, #172]	@ movhi
	bne	.L1614
	movs	r3, #0
	movs	r0, #8
	strh	r3, [r4, #3160]	@ movhi
	b	.L1573
.L1597:
	movs	r3, #0
	ldrh	r2, [r4, #224]
	str	r3, [r4, #3164]
	ldrh	r3, [r4, #3152]
	cmp	r2, r3
	bls	.L1598
	ldrh	r3, [r4, #3660]
	cbnz	r3, .L1599
	ldr	r3, [r4, #2552]
	ldr	r2, [r4, #2548]
	add	r3, r3, r3, lsl #1
	cmp	r2, r3, lsr #2
	bcs	.L1660
.L1599:
	ldrh	r3, [r4, #2620]
	add	r3, r3, r3, lsl #1
	lsrs	r3, r3, #2
.L1600:
	strh	r3, [r4, #3152]	@ movhi
	bl	FtlReadRefresh
	movs	r0, #0
	bl	List_get_gc_head_node
	ldr	r3, [r4, #72]
	uxth	r0, r0
	ldrh	r3, [r3, r0, lsl #1]
	cmp	r3, #4
	bls	.L1598
.L1686:
	ldrh	r0, [r4, #3660]
	b	.L1573
.L1660:
	movs	r3, #18
	b	.L1600
.L1598:
	ldrh	r0, [r4, #3660]
	cmp	r0, #0
	bne	.L1601
	ldrh	r5, [r4, #2620]
	add	r3, r5, r5, lsl #1
	asrs	r3, r3, #2
	strh	r3, [r4, #3152]	@ movhi
	bl	List_get_gc_head_node
	ldr	r3, [r4, #72]
	uxth	r0, r0
	ldrh	r1, [r4, #232]
	ldrh	r2, [r3, r0, lsl #1]
	ldrh	r3, [r4, #304]
	muls	r3, r1, r3
	add	r3, r3, r3, lsr #31
	cmp	r2, r3, asr #1
	ble	.L1602
	ldrh	r1, [r4, #224]
	subs	r3, r5, #1
	cmp	r1, r3
	blt	.L1602
	bl	FtlReadRefresh
	b	.L1686
.L1688:
	.align	2
.L1687:
	.word	.LANCHOR0
	.word	.LANCHOR2
	.word	.LC124
.L1602:
	cmp	r2, #0
	bne	.L1601
	movw	r0, #65535
	bl	decrement_vpc_count
	ldrh	r0, [r4, #224]
	adds	r0, r0, #1
	b	.L1573
.L1605:
	ldrh	r3, [r4, #222]
	cmp	r3, r5
	beq	.L1606
	ldr	r2, [r4, #72]
	ldrh	r3, [r2, r3, lsl #1]
	cbnz	r3, .L1607
	strh	r5, [r4, #222]	@ movhi
.L1607:
	ldrh	r3, [r4, #222]
	strh	r3, [r4, #172]	@ movhi
	movw	r3, #65535
	strh	r3, [r4, #222]	@ movhi
	b	.L1606
.L1614:
	mov	r0, fp
	bl	IsBlkInGcList
	adds	r3, r7, #1
	uxth	r3, r3
	cbz	r0, .L1615
.L1684:
	strh	r3, [r4, #3160]	@ movhi
	b	.L1613
.L1615:
	ldrh	r7, [r4, #232]
	uxth	r10, r10
	ldrh	r2, [r4, #302]
	ldr	r1, [r4, #72]
	strh	r3, [r4, #3160]	@ movhi
	muls	r2, r7, r2
	ldrh	r0, [r1, r10, lsl #1]
	add	r7, r2, r2, lsr #31
	cmp	r0, r7, asr #1
	bgt	.L1617
	cmp	r3, #48
	bls	.L1618
	cmp	r0, #8
	bls	.L1618
	ldrh	r3, [r4, #3196]
	cmp	r3, #35
	bhi	.L1618
.L1617:
	strh	r9, [r4, #3160]	@ movhi
.L1618:
	ldrh	r3, [r1, r10, lsl #1]
	cmp	r2, r3
	bgt	.L1619
	cmp	r5, r8
	bne	.L1619
	ldrh	r2, [r4, #3160]
	cmp	r2, #3
	bhi	.L1619
	movs	r3, #0
	strh	r5, [r4, #172]	@ movhi
	strh	r3, [r4, #3160]	@ movhi
	b	.L1686
.L1619:
	cbnz	r3, .L1620
	movw	r0, #65535
	bl	decrement_vpc_count
	ldrh	r3, [r4, #3160]
	adds	r3, r3, #1
	b	.L1684
.L1620:
	movs	r3, #0
	strb	r3, [r4, #180]
	ldrh	r3, [r4, #24]
	cmp	r3, fp
	bne	.L1621
	ldr	r1, .L1689
	movw	r2, #717
	ldr	r0, .L1689+4
	bl	sftl_printk
.L1621:
	ldrh	r2, [r4, #172]
	ldrh	r3, [r4, #76]
	cmp	r2, r3
	bne	.L1622
	ldr	r1, .L1689
	movw	r2, #718
	ldr	r0, .L1689+4
	bl	sftl_printk
.L1622:
	ldrh	r2, [r4, #172]
	ldrh	r3, [r4, #124]
	cmp	r2, r3
	bne	.L1623
	ldr	r1, .L1689
	movw	r2, #719
	ldr	r0, .L1689+4
	bl	sftl_printk
.L1623:
	ldr	r0, .L1689+8
	bl	make_superblock
	ldrh	r1, [r4, #172]
	ldr	r2, [r4, #72]
	movs	r3, #0
	strh	r3, [r4, #3662]	@ movhi
	ldrh	r2, [r2, r1, lsl #1]
	strh	r2, [r4, #3664]	@ movhi
	strh	r3, [r4, #174]	@ movhi
	strb	r3, [r4, #178]
.L1612:
	movs	r3, #1
	str	r3, [r4, #3272]
	ldr	r3, [sp, #16]
	ldrh	fp, [r4, #302]
	cbz	r3, .L1624
	ldrh	r3, [r4, #232]
	ldrh	r1, [r4, #172]
	ldr	r2, [r4, #72]
	mul	r3, fp, r3
	ldrh	r2, [r2, r1, lsl #1]
	subs	r3, r3, r2
	it	mi
	addmi	r3, r3, #3
	add	r6, r6, r3, asr #2
	uxth	r6, r6
.L1624:
	ldrh	r3, [r4, #174]
	adds	r2, r3, r6
	cmp	r2, fp
	itt	gt
	subgt	r3, fp, r3
	uxthgt	r6, r3
	movs	r3, #0
.L1685:
	str	r3, [sp, #12]
	ldrh	r3, [r4, #174]
	ldrh	r2, [sp, #12]
	cmp	r6, r2
	bls	.L1635
	ldr	r2, [sp, #12]
	movw	r9, #65535
	ldrh	lr, [r4, #232]
	mov	r10, #20
	add	r3, r3, r2
	ldr	r0, [r4, #3184]
	movs	r2, #0
	ldr	ip, .L1689+12
	mov	r7, r2
	b	.L1636
.L1629:
	ldrh	r1, [ip], #2
	cmp	r1, r9
	beq	.L1628
	mla	r8, r10, r7, r0
	adds	r7, r7, #1
	orr	r1, r3, r1, lsl #10
	uxth	r7, r7
	str	r1, [r8, #4]
.L1628:
	adds	r2, r2, #1
.L1636:
	uxth	r1, r2
	cmp	lr, r1
	bhi	.L1629
	mov	r10, #0
	ldrb	r2, [r4, #180]	@ zero_extendqisi2
	mov	r1, r7
	bl	FlashReadPages
.L1630:
	uxth	r3, r10
	cmp	r7, r3
	bhi	.L1634
	ldr	r3, [sp, #12]
	adds	r3, r3, #1
	b	.L1685
.L1634:
	mov	r8, #20
	ldr	r3, [r4, #3184]
	mul	r8, r8, r10
	add	r2, r3, r8
	ldr	r3, [r3, r8]
	adds	r3, r3, #1
	beq	.L1631
	ldr	r9, [r2, #12]
	movw	r3, #61589
	ldrh	r2, [r9]
	cmp	r2, r3
	bne	.L1631
	ldr	r3, [r9, #8]
	adds	r2, r3, #1
	bne	.L1632
	ldr	r1, .L1689
	movw	r2, #753
	ldr	r0, .L1689+4
	str	r3, [sp, #20]
	bl	sftl_printk
	ldr	r3, [sp, #20]
.L1632:
	mov	r0, r3
	movs	r2, #0
	add	r1, sp, #28
	bl	log2phys
	ldr	r0, [r4, #3184]
	ldr	r3, [sp, #28]
	add	r0, r0, r8
	ldr	r2, [r0, #4]
	cmp	r2, r3
	bne	.L1631
	ldrh	r3, [r4, #3662]
	movs	r2, #20
	ldr	r1, [r4, #3168]
	adds	r3, r3, #1
	strh	r3, [r4, #3662]	@ movhi
	ldr	r3, [r4, #3292]
	mla	r3, r2, r1, r3
	ldr	r1, [r0, #16]
	str	r3, [sp, #20]
	str	r1, [r3, #16]
	bl	Ftl_get_new_temp_ppa
	ldr	r3, [sp, #20]
	ldr	r1, [r4, #3168]
	movs	r2, #20
	str	r0, [r3, #4]
	ldr	r3, [r4, #3292]
	ldr	r0, [r4, #3184]
	add	r0, r0, r8
	mla	r3, r2, r1, r3
	movs	r1, #1
	ldr	r2, [r0, #8]
	str	r2, [r3, #8]
	ldr	r2, [r0, #12]
	str	r2, [r3, #12]
	ldr	r3, [sp, #28]
	str	r3, [r9, #12]
	ldrh	r3, [r4, #124]
	strh	r3, [r9, #2]	@ movhi
	ldr	r3, [r4, #2592]
	ldr	r0, [r4, #3184]
	str	r3, [r9, #4]
	ldr	r3, [r4, #3168]
	add	r0, r0, r8
	adds	r3, r3, #1
	str	r3, [r4, #3168]
	bl	FtlGcBufAlloc
	ldrb	r2, [r4, #131]	@ zero_extendqisi2
	ldr	r3, [r4, #3168]
	cmp	r2, r3
	beq	.L1633
	ldrh	r3, [r4, #128]
	cbnz	r3, .L1631
.L1633:
	bl	Ftl_gc_temp_data_write_back
	cbz	r0, .L1631
	ldr	r3, .L1689+16
	movs	r2, #0
	ldrh	r0, [r3, #3660]
	str	r2, [r3, #3272]
	movw	r2, #65535
	str	r2, [r3, #172]
	b	.L1573
.L1631:
	add	r10, r10, #1
	b	.L1630
.L1635:
	add	r6, r6, r3
	uxth	r6, r6
	strh	r6, [r4, #174]	@ movhi
	cmp	fp, r6
	bhi	.L1637
	ldr	r3, [r4, #3168]
	cbz	r3, .L1638
	bl	Ftl_gc_temp_data_write_back
	cbz	r0, .L1638
	movs	r3, #0
	str	r3, [r4, #3272]
	b	.L1686
.L1638:
	ldrh	r6, [r4, #3662]
	cbnz	r6, .L1639
	ldrh	r2, [r4, #172]
	ldr	r3, [r4, #72]
	ldrh	r3, [r3, r2, lsl #1]
	cbz	r3, .L1639
.L1640:
	ldr	r3, [r4, #2552]
	cmp	r6, r3
	bcc	.L1643
.L1645:
	ldrh	r2, [r4, #172]
	movs	r1, #0
	ldr	r3, [r4, #72]
	strh	r1, [r3, r2, lsl #1]	@ movhi
	ldrh	r0, [r4, #172]
	bl	update_vpc_list
	bl	l2p_flush
	bl	FtlVpcTblFlush
.L1639:
	movw	r3, #65535
	strh	r3, [r4, #172]	@ movhi
.L1637:
	movs	r3, #0
	str	r3, [r4, #3272]
	ldrh	r3, [r4, #224]
	cmp	r3, #2
	bhi	.L1646
	ldrh	r6, [r4, #302]
	b	.L1647
.L1643:
	add	r1, sp, #32
	mov	r0, r6
	movs	r2, #0
	bl	log2phys
	ldr	r0, [sp, #32]
	adds	r3, r0, #1
	beq	.L1641
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	ldrh	r3, [r4, #172]
	cmp	r3, r0
	beq	.L1642
.L1641:
	adds	r6, r6, #1
	b	.L1640
.L1642:
	ldr	r3, [r4, #2552]
	cmp	r6, r3
	bcc	.L1639
	b	.L1645
.L1646:
	ldrh	r0, [r4, #3660]
	cmp	r0, #0
	bne	.L1573
	adds	r0, r3, #1
	b	.L1573
.L1651:
	movs	r0, #0
	b	.L1573
.L1579:
	ldr	r3, [sp, #16]
	cmp	r3, #0
	beq	.L1649
	movw	r5, #65535
.L1587:
	ldrh	r3, [r4, #222]
	ldrh	r6, [r4, #124]
	ands	r6, r6, r3
	movw	r3, #65535
	ands	r6, r6, r5
	uxth	r6, r6
	cmp	r6, r3
	bne	.L1659
	ldrh	r3, [r4, #172]
	cmp	r3, r6
	beq	.L1597
.L1601:
	mov	r5, r6
.L1659:
	movs	r6, #1
	b	.L1596
.L1609:
	ldr	r0, .L1689+8
	bl	make_superblock
	ldrh	r2, [r4, #172]
	ldr	r3, [r4, #72]
	strh	r7, [r4, #174]	@ movhi
	strb	r7, [r4, #178]
	strh	r7, [r4, #3662]	@ movhi
	ldrh	r3, [r3, r2, lsl #1]
	strh	r3, [r4, #3664]	@ movhi
	b	.L1604
.L1690:
	.align	2
.L1689:
	.word	.LANCHOR1+568
	.word	.LC8
	.word	.LANCHOR0+172
	.word	.LANCHOR0+188
	.word	.LANCHOR0
.L1650:
	add	sp, sp, #44
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
	.fnend
	.size	rk_ftl_garbage_collect, .-rk_ftl_garbage_collect
	.align	1
	.global	FtlRead
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlRead, %function
FtlRead:
	.fnstart
	@ args = 0, pretend = 0, frame = 56
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r8, r3
	mov	r5, r1
	.pad #60
	sub	sp, sp, #60
	cmp	r0, #16
	mov	r3, sp
	bic	r3, r3, #8160
	bic	r3, r3, #31
	str	r2, [sp, #4]
	ldr	r2, [r3, #24]
	str	r2, [sp, #52]
	bne	.L1692
	ldr	r2, [sp, #52]
	ldr	r3, [r3, #24]
	cmp	r2, r3
	beq	.L1693
.L1730:
	bl	__stack_chk_fail
.L1693:
	ldr	r1, [sp, #4]
	mov	r2, r8
	add	r0, r5, #256
	add	sp, sp, #60
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	b	FtlVendorPartRead
.L1692:
	ldr	r4, .L1731
	ldr	r3, [r4, #340]
	cmp	r3, r1
	bls	.L1718
	ldr	r2, [sp, #4]
	cmp	r3, r2
	bcc	.L1718
	adds	r2, r1, r2
	str	r2, [sp, #8]
	cmp	r3, r2
	bcc	.L1718
	ldr	r3, .L1731+4
	ldr	r6, [r3]
	adds	r7, r6, #1
	beq	.L1691
	ldrh	r6, [r4, #258]
	mov	r0, r5
	mov	r10, #0
	mov	r7, r10
	mov	r1, r6
	bl	__aeabi_uidiv
	ldr	r3, [sp, #8]
	mov	r1, r6
	str	r0, [sp, #16]
	subs	r0, r3, #1
	mov	r6, r10
	bl	__aeabi_uidiv
	ldr	r3, [sp, #16]
	ldr	r2, [sp, #4]
	rsb	r3, r3, #1
	ldr	r9, [sp, #16]
	add	r3, r3, r0
	str	r3, [sp, #12]
	ldr	r3, [r4, #2584]
	str	r0, [sp, #20]
	add	r3, r3, r2
	ldr	r2, [sp, #12]
	str	r3, [r4, #2584]
	ldr	r3, [r4, #2556]
	strd	r10, r10, [sp, #24]
	add	r3, r3, r2
	str	r3, [r4, #2556]
.L1695:
	ldr	r3, [sp, #12]
	cbnz	r3, .L1713
	ldr	r3, .L1731
	ldrh	r2, [r3, #3206]
	cbnz	r2, .L1714
	ldrh	r3, [r3, #224]
	cmp	r3, #31
	bhi	.L1691
.L1714:
	movs	r1, #1
	movs	r0, #0
	bl	rk_ftl_garbage_collect
.L1691:
	mov	r3, sp
	ldr	r2, [sp, #52]
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r3, [r3, #24]
	cmp	r2, r3
	bne	.L1730
	mov	r0, r6
	add	sp, sp, #60
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1713:
	add	r1, sp, #48
	mov	r0, r9
	movs	r2, #0
	bl	log2phys
	ldr	r3, [sp, #48]
	adds	r0, r3, #1
	bne	.L1728
	mov	fp, #0
	b	.L1696
.L1699:
	mla	r0, r9, r0, fp
	cmp	r5, r0
	bhi	.L1698
	ldr	r3, [sp, #8]
	cmp	r3, r0
	bls	.L1698
	subs	r0, r0, r5
	mov	r2, #512
	movs	r1, #0
	add	r0, r8, r0, lsl #9
	bl	ftl_memset
.L1698:
	add	fp, fp, #1
.L1696:
	ldrh	r0, [r4, #258]
	cmp	r0, fp
	bhi	.L1699
.L1700:
	ldr	r3, [sp, #12]
	add	r9, r9, #1
	subs	r3, r3, #1
	str	r3, [sp, #12]
	beq	.L1705
	ldrh	r3, [r4, #232]
	cmp	r7, r3, lsl #2
	bne	.L1695
.L1705:
	cmp	r7, #0
	beq	.L1695
	ldr	r0, [r4, #3288]
	mov	r1, r7
	movs	r2, #0
	mov	fp, #0
	bl	FlashReadPages
	lsl	r3, r10, #9
	str	r3, [sp, #40]
	ldr	r3, [sp, #24]
	lsls	r3, r3, #9
	str	r3, [sp, #32]
	ldr	r3, [sp, #28]
	lsls	r3, r3, #9
	str	r3, [sp, #36]
.L1712:
	movs	r3, #20
	ldr	r2, [r4, #3288]
	ldr	r0, [sp, #16]
	mul	r3, r3, fp
	add	r2, r2, r3
	ldr	r1, [r2, #16]
	cmp	r1, r0
	bne	.L1707
	ldr	r1, [r2, #8]
	ldr	r2, [r4, #3312]
	cmp	r1, r2
	bne	.L1708
	str	r3, [sp, #44]
	mov	r0, r8
	ldrd	r3, r2, [sp, #32]
	add	r1, r1, r3
.L1729:
	bl	ftl_memcpy
	ldr	r3, [sp, #44]
.L1708:
	ldr	ip, [r4, #3288]
	add	r2, ip, r3
	ldrd	r0, r1, [r2, #12]
	ldr	r0, [r0, #8]
	cmp	r1, r0
	ittt	ne
	ldrne	r1, [r4, #2712]
	addne	r1, r1, #1
	strne	r1, [r4, #2712]
	ldr	r0, [ip, r3]
	adds	r1, r0, #1
	itttt	eq
	moveq	r6, r0
	ldreq	r1, [r4, #2712]
	addeq	r1, r1, #1
	streq	r1, [r4, #2712]
	ldr	r3, [ip, r3]
	cmp	r3, #256
	bne	.L1711
	ldr	r0, [r2, #4]
	ubfx	r0, r0, #10, #16
	bl	P2V_block_in_plane
	bl	FtlGcRefreshBlock
.L1711:
	add	fp, fp, #1
	cmp	r7, fp
	bne	.L1712
	movs	r7, #0
	b	.L1695
.L1728:
	ldr	r2, [r4, #3288]
	mov	fp, #20
	mla	fp, fp, r7, r2
	str	r3, [fp, #4]
	ldr	r3, [sp, #16]
	cmp	r9, r3
	ldrh	r3, [r4, #258]
	bne	.L1701
	ldr	r2, [r4, #3312]
	mov	r1, r3
	str	r2, [fp, #8]
	mov	r0, r5
	str	r3, [sp, #28]
	bl	__aeabi_uidivmod
	ldr	r3, [sp, #28]
	str	r1, [sp, #24]
	subs	r2, r3, r1
	ldr	r1, [sp, #4]
	cmp	r2, r1
	it	cs
	movcs	r2, r1
	str	r2, [sp, #28]
	cmp	r3, r2
	bne	.L1702
	str	r8, [fp, #8]
.L1702:
	ldrh	r3, [r4, #312]
	ldr	r2, [r4, #3336]
	muls	r3, r7, r3
	adds	r7, r7, #1
	bic	r3, r3, #3
	add	r3, r3, r2
	strd	r3, r9, [fp, #12]
	b	.L1700
.L1701:
	ldr	r1, [sp, #20]
	mul	r2, r3, r9
	cmp	r9, r1
	bne	.L1703
	ldr	r1, [sp, #8]
	sub	r10, r1, r2
	cmp	r10, r3
	beq	.L1703
	ldr	r3, [r4, #3316]
	str	r3, [fp, #8]
	b	.L1702
.L1703:
	subs	r2, r2, r5
	add	r2, r8, r2, lsl #9
	str	r2, [fp, #8]
	b	.L1702
.L1707:
	ldr	r0, [sp, #20]
	cmp	r1, r0
	bne	.L1708
	ldr	r1, [r2, #8]
	ldr	r2, [r4, #3316]
	cmp	r1, r2
	bne	.L1708
	ldrh	r0, [r4, #258]
	str	r3, [sp, #44]
	ldr	r3, [sp, #20]
	ldr	r2, [sp, #40]
	muls	r0, r3, r0
	subs	r0, r0, r5
	add	r0, r8, r0, lsl #9
	b	.L1729
.L1718:
	mov	r6, #-1
	b	.L1691
.L1732:
	.align	2
.L1731:
	.word	.LANCHOR0
	.word	.LANCHOR2
	.fnend
	.size	FtlRead, .-FtlRead
	.align	1
	.global	sftl_read
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_read, %function
sftl_read:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	mov	r3, r2
	mov	r2, r1
	mov	r1, r0
	movs	r0, #0
	b	FtlRead
	.fnend
	.size	sftl_read, .-sftl_read
	.section	.rodata.str1.1
.LC125:
	.ascii	"FtlWrite: ecc error:%x %x %x\012\000"
.LC126:
	.ascii	"FtlWrite: lpa error:%x %x\012\000"
	.text
	.align	1
	.global	FtlWrite
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlWrite, %function
FtlWrite:
	.fnstart
	@ args = 0, pretend = 0, frame = 72
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	cmp	r0, #16
	mov	r8, r1
	.pad #76
	sub	sp, sp, #76
	strd	r2, r3, [sp, #4]
	mov	r3, sp
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r2, [r3, #24]
	str	r2, [sp, #68]
	bne	.L1735
	ldr	r2, [sp, #68]
	ldr	r3, [r3, #24]
	cmp	r2, r3
	beq	.L1736
.L1790:
	bl	__stack_chk_fail
.L1736:
	ldrd	r1, r2, [sp, #4]
	add	r0, r8, #256
	add	sp, sp, #76
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	b	FtlVendorPartWrite
.L1735:
	ldr	r5, .L1791
	ldr	r3, [r5, #340]
	cmp	r3, r1
	bls	.L1777
	ldr	r2, [sp, #4]
	cmp	r3, r2
	bcc	.L1777
	adds	r6, r1, r2
	cmp	r3, r6
	bcc	.L1777
	ldr	r4, .L1791+4
	ldr	r0, [r4]
	adds	r7, r0, #1
	beq	.L1734
	ldrh	r7, [r5, #258]
	mov	r3, #2048
	mov	r0, r8
	str	r3, [r5, #3668]
	mov	r1, r7
	bl	__aeabi_uidiv
	mov	r1, r7
	str	r0, [sp]
	subs	r0, r6, #1
	bl	__aeabi_uidiv
	ldr	r2, [sp]
	str	r0, [sp, #24]
	subs	r3, r0, r2
	ldr	r2, [sp, #4]
	add	fp, r3, #1
	str	r3, [sp, #20]
	ldr	r3, [r5, #2580]
	add	r3, r3, r2
	str	r3, [r5, #2580]
	ldr	r3, [r5, #2564]
	add	r3, r3, fp
	str	r3, [r5, #2564]
	ldr	r3, [r4, #8]
	cbz	r3, .L1779
	ldrh	r2, [r5, #28]
	add	r3, r5, #24
	adds	r5, r5, #76
	cmp	r2, #0
	it	ne
	movne	r5, r3
.L1738:
	ldr	r7, [sp]
	ldr	r4, .L1791
.L1739:
	cmp	fp, #0
	bne	.L1770
	ldr	r1, [sp, #20]
	mov	r0, fp
	bl	rk_ftl_garbage_collect
	ldrh	r3, [r4, #224]
	cmp	r3, #5
	bls	.L1782
.L1773:
	movs	r0, #0
.L1734:
	mov	r3, sp
	ldr	r2, [sp, #68]
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r3, [r3, #24]
	cmp	r2, r3
	bne	.L1790
	add	sp, sp, #76
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1779:
	adds	r5, r5, #24
	b	.L1738
.L1770:
	ldrb	r2, [r5, #6]	@ zero_extendqisi2
	ldrh	r3, [r4, #232]
	cmp	r2, r3
	bcc	.L1740
	ldr	r1, .L1791+8
	movw	r2, #1041
	ldr	r0, .L1791+12
	bl	sftl_printk
.L1740:
	ldrh	r3, [r5, #4]
	cbnz	r3, .L1741
	ldr	r2, .L1791+16
	ldr	r6, .L1791+4
	cmp	r5, r2
	bne	.L1742
	ldrh	r9, [r4, #80]
	cmp	r9, #0
	bne	.L1743
	add	r0, r5, #52
	bl	allocate_new_data_superblock
	str	r9, [r6, #8]
.L1743:
	ldr	r0, .L1791+16
	bl	allocate_new_data_superblock
	ldr	r3, [r6, #8]
	cmp	r3, #0
	bne	.L1781
.L1745:
	ldr	r5, .L1791+16
.L1744:
	ldrh	r3, [r5, #4]
	cbnz	r3, .L1741
	mov	r0, r5
	bl	allocate_new_data_superblock
.L1741:
	ldrh	r3, [r5, #4]
	ldrb	r2, [r5, #7]	@ zero_extendqisi2
	cmp	r3, fp
	it	cs
	movcs	r3, fp
	lsls	r2, r2, #2
	cmp	r2, r3
	it	cs
	movcs	r2, r3
	ldrh	r3, [r4, #232]
	str	r2, [sp, #36]
	ldrb	r2, [r5, #6]	@ zero_extendqisi2
	cmp	r2, r3
	bcc	.L1746
	ldr	r1, .L1791+8
	movw	r2, #1074
	ldr	r0, .L1791+12
	bl	sftl_printk
.L1746:
	mov	r10, #0
.L1747:
	ldr	r3, [sp, #36]
	cmp	r3, r10
	bne	.L1768
.L1748:
	ldr	r0, [r4, #3296]
	mov	r3, r5
	mov	r1, r10
	movs	r2, #0
	bl	FtlProgPages
	cmp	fp, r10
	bcs	.L1769
	ldr	r1, .L1791+8
	mov	r2, #1152
	ldr	r0, .L1791+12
	bl	sftl_printk
.L1769:
	sub	fp, fp, r10
	b	.L1739
.L1742:
	str	r3, [r6, #8]
	ldrh	r3, [r4, #28]
	cmp	r3, #0
	bne	.L1745
	mov	r0, r5
	bl	allocate_new_data_superblock
	b	.L1744
.L1781:
	ldr	r5, .L1791+20
	b	.L1744
.L1768:
	ldrh	r3, [r5, #4]
	cmp	r3, #0
	beq	.L1748
	add	r1, sp, #44
	movs	r2, #0
	mov	r0, r7
	bl	log2phys
	mov	r0, r5
	bl	get_new_active_ppa
	movs	r3, #20
	mul	r3, r3, r10
	str	r3, [sp, #12]
	ldr	r2, [sp, #12]
	ldr	r3, [r4, #3296]
	add	r3, r3, r2
	ldrh	r2, [r4, #312]
	str	r0, [r3, #4]
	mul	r1, r10, r2
	bic	r1, r1, #3
	str	r1, [sp, #28]
	ldr	r0, [sp, #28]
	ldr	r1, [r4, #3336]
	str	r1, [sp, #32]
	add	r9, r1, r0
	movs	r1, #0
	strd	r9, r7, [r3, #12]
	mov	r0, r9
	bl	ftl_memset
	ldr	r3, [sp]
	ldrh	r6, [r4, #258]
	cmp	r7, r3
	beq	.L1749
	ldr	r2, [sp, #12]
	ldr	r3, [r4, #3296]
	add	r3, r3, r2
	ldr	r2, [sp, #24]
	cmp	r7, r2
	bne	.L1787
	ldr	r3, [sp, #4]
	add	r2, r8, r3
	smulbb	r3, r7, r6
	subs	r6, r2, r3
	movs	r3, #0
	str	r3, [sp, #16]
	uxth	r6, r6
	b	.L1752
.L1749:
	mov	r1, r6
	mov	r0, r8
	bl	__aeabi_uidivmod
	ldr	r3, [sp, #4]
	subs	r6, r6, r1
	str	r1, [sp, #16]
	cmp	r6, r3
	it	cs
	movcs	r6, r3
.L1752:
	ldrh	r2, [r4, #258]
	ldr	r3, [r4, #3296]
	ldr	r1, [sp, #12]
	cmp	r2, r6
	ldr	r2, [sp]
	add	r3, r3, r1
	bne	.L1753
	cmp	r7, r2
	bne	.L1787
	ldr	r2, [sp, #8]
	str	r2, [r3, #8]
.L1755:
	ldrb	r2, [r5, #6]	@ zero_extendqisi2
	ldrh	r3, [r4, #232]
	cmp	r2, r3
	bcc	.L1765
	ldr	r1, .L1791+8
	movw	r2, #1143
	ldr	r0, .L1791+12
	bl	sftl_printk
.L1765:
	ldrd	r1, r2, [sp, #28]
	movw	r3, #61589
	add	r10, r10, #1
	strh	r3, [r2, r1]	@ movhi
	str	r7, [r9, #8]
	adds	r7, r7, #1
	ldr	r3, [r4, #2592]
	str	r3, [r9, #4]
	adds	r2, r3, #1
	adds	r3, r3, #2
	itee	ne
	strne	r2, [r4, #2592]
	moveq	r3, #0
	streq	r3, [r4, #2592]
	ldr	r3, [sp, #44]
	str	r3, [r9, #12]
	ldrh	r3, [r5]
	strh	r3, [r9, #2]	@ movhi
	b	.L1747
.L1753:
	cmp	r7, r2
	ite	eq
	ldreq	r2, [r4, #3312]
	ldrne	r2, [r4, #3316]
	str	r2, [r3, #8]
	ldr	r2, [sp, #44]
	adds	r1, r2, #1
	beq	.L1758
	str	r7, [sp, #64]
	add	r0, sp, #48
	str	r2, [sp, #52]
	movs	r1, #1
	ldr	r2, [r3, #8]
	str	r2, [sp, #56]
	movs	r2, #0
	ldr	r3, [r3, #12]
	str	r3, [sp, #60]
	bl	FlashReadPages
	ldr	r3, [sp, #48]
	adds	r2, r3, #1
	bne	.L1759
	ldr	r2, [r4, #2712]
	ldr	r0, .L1791+24
	adds	r2, r2, #1
	str	r2, [r4, #2712]
	mov	r2, r7
	ldr	r1, [r9, #8]
	bl	sftl_printk
.L1763:
	ldr	r3, [sp]
	lsls	r2, r6, #9
	cmp	r7, r3
	bne	.L1764
	ldr	r1, [sp, #12]
	ldr	r3, [r4, #3296]
	add	r3, r3, r1
	ldr	r1, [sp, #8]
	ldr	r0, [r3, #8]
	ldr	r3, [sp, #16]
	add	r0, r0, r3, lsl #9
.L1789:
	bl	ftl_memcpy
	b	.L1755
.L1792:
	.align	2
.L1791:
	.word	.LANCHOR0
	.word	.LANCHOR2
	.word	.LANCHOR1+591
	.word	.LC8
	.word	.LANCHOR0+24
	.word	.LANCHOR0+76
	.word	.LC125
.L1759:
	ldr	r3, [r9, #8]
	cmp	r3, r7
	beq	.L1763
	ldr	r3, [r4, #2712]
	mov	r2, r7
	ldr	r0, .L1793
	adds	r3, r3, #1
	str	r3, [r4, #2712]
	ldr	r1, [r9, #8]
	bl	sftl_printk
	ldr	r3, [r9, #8]
	cmp	r3, r7
	beq	.L1763
	ldr	r1, .L1793+4
	mov	r2, #1128
	ldr	r0, .L1793+8
	bl	sftl_printk
	b	.L1763
.L1758:
	ldrh	r2, [r4, #310]
	movs	r1, #0
	ldr	r0, [r3, #8]
	bl	ftl_memset
	b	.L1763
.L1764:
	ldrh	r1, [r4, #258]
	ldr	r0, [sp, #12]
	ldr	r3, [r4, #3296]
	muls	r1, r7, r1
	add	r3, r3, r0
	ldr	r0, [sp, #8]
	sub	r1, r1, r8
	add	r1, r0, r1, lsl #9
	ldr	r0, [r3, #8]
	b	.L1789
.L1787:
	muls	r6, r7, r6
	ldr	r2, [sp, #8]
	sub	r6, r6, r8
	add	r6, r2, r6, lsl #9
	str	r6, [r3, #8]
	b	.L1755
.L1782:
	mov	r5, #256
	movw	r6, #65535
.L1771:
	ldrh	r2, [r4, #222]
	ldrh	r3, [r4, #172]
	ands	r3, r3, r2
	cmp	r3, r6
	bne	.L1772
	movs	r0, #0
	bl	List_get_gc_head_node
	uxth	r0, r0
	bl	FtlGcRefreshBlock
.L1772:
	movs	r1, #1
	mov	r0, r1
	movs	r3, #128
	strh	r3, [r4, #3154]	@ movhi
	strh	r3, [r4, #3152]	@ movhi
	bl	rk_ftl_garbage_collect
	movs	r1, #1
	movs	r0, #0
	bl	rk_ftl_garbage_collect
	ldrh	r3, [r4, #224]
	cmp	r3, #2
	bhi	.L1773
	subs	r5, r5, #1
	bne	.L1771
	b	.L1773
.L1777:
	mov	r0, #-1
	b	.L1734
.L1794:
	.align	2
.L1793:
	.word	.LC126
	.word	.LANCHOR1+591
	.word	.LC8
	.fnend
	.size	FtlWrite, .-FtlWrite
	.align	1
	.global	sftl_gc
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_gc, %function
sftl_gc:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	movs	r1, #1
	mov	r0, r1
	b	rk_ftl_garbage_collect
	.fnend
	.size	sftl_gc, .-sftl_gc
	.section	.rodata.str1.1
.LC127:
	.ascii	"%s hash error this.id =%x page =%x pre_id =%x hash "
	.ascii	"=%x hash_r =%x\012\000"
	.text
	.align	1
	.global	FtlLoadSysInfo
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlLoadSysInfo, %function
FtlLoadSysInfo:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, lr}
	.pad #16
	movs	r1, #0
	ldr	r4, .L1824
	ldrh	r2, [r4, #240]
	ldr	r3, [r4, #3300]
	str	r3, [r4, #3460]
	ldr	r0, [r4, #72]
	lsls	r2, r2, #1
	ldr	r3, [r4, #3332]
	str	r3, [r4, #3464]
	bl	ftl_memset
	ldrh	r0, [r4, #2624]
	movw	r3, #65535
	cmp	r0, r3
	bne	.L1797
.L1809:
	mov	r0, #-1
.L1796:
	add	sp, sp, #16
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
.L1797:
	movs	r1, #1
	ldr	r8, .L1824+4
	bl	FtlGetLastWrittenPage
	ldr	r9, .L1824+8
	ldrsh	r6, [r4, #2624]
	sxth	r5, r0
	addw	r7, r4, #3452
	adds	r3, r5, #1
	strh	r3, [r4, #2626]	@ movhi
.L1799:
	cmp	r5, #0
	bge	.L1806
	ldr	r1, .L1824+8
	movw	r2, #1474
	ldr	r0, .L1824+12
	bl	sftl_printk
	b	.L1805
.L1806:
	orr	r3, r5, r6, lsl #10
	movs	r2, #1
	str	r3, [r4, #3456]
	mov	r1, r2
	ldr	r3, [r4, #3300]
	mov	r0, r7
	str	r3, [r4, #3460]
	bl	FlashReadPages
	ldr	r3, [r4, #3464]
	ldr	r10, [r3, #12]
	ldr	r3, [r4, #3452]
	cmp	r10, #0
	beq	.L1800
	adds	r3, r3, #1
	beq	.L1801
	ldrh	r1, [r4, #310]
	ldr	r0, [r4, #3460]
	bl	js_hash
	cmp	r10, r0
	beq	.L1802
	ldrh	r3, [r4, #2628]
	mov	r2, r6
	strd	r10, r0, [sp, #4]
	mov	r1, r9
	str	r3, [sp]
	mov	r3, r5
	ldr	r0, .L1824+16
	bl	sftl_printk
	cbnz	r5, .L1803
	ldrh	r3, [r4, #2628]
	cmp	r6, r3
	beq	.L1803
	ldrh	r5, [r4, #304]
	sxth	r6, r3
.L1801:
	subs	r5, r5, #1
	sxth	r5, r5
	b	.L1799
.L1803:
	mov	r3, #-1
	str	r3, [r4, #3452]
	b	.L1801
.L1800:
	adds	r3, r3, #1
	beq	.L1801
.L1802:
	ldr	r3, [r4, #3300]
	ldr	r3, [r3]
	cmp	r3, r8
	bne	.L1801
	ldr	r3, [r4, #3332]
	ldrh	r2, [r3]
	movw	r3, #61604
	cmp	r2, r3
	bne	.L1801
.L1805:
	ldrh	r3, [r4, #240]
	ldrh	r2, [r4, #310]
	adds	r3, r3, #24
	cmp	r2, r3, lsl #1
	bcs	.L1808
	ldr	r1, .L1824+8
	movw	r2, #1476
	ldr	r0, .L1824+12
	bl	sftl_printk
.L1808:
	ldr	r1, [r4, #3460]
	movs	r2, #48
	ldr	r0, .L1824+20
	bl	ftl_memcpy
	ldrh	r2, [r4, #240]
	ldr	r1, [r4, #3460]
	ldr	r0, [r4, #72]
	lsls	r2, r2, #1
	adds	r1, r1, #48
	bl	ftl_memcpy
	ldr	r2, [r4, #2468]
	ldr	r3, .L1824+4
	cmp	r2, r3
	bne	.L1809
	ldrb	r2, [r4, #2478]	@ zero_extendqisi2
	ldrh	r3, [r4, #254]
	ldrh	r5, [r4, #2476]
	cmp	r2, r3
	strh	r5, [r4, #2630]	@ movhi
	bne	.L1809
	ldrh	r3, [r4, #302]
	ldrh	r2, [r4, #258]
	ldrh	r0, [r4, #358]
	ldr	r6, [r4, #244]
	muls	r3, r5, r3
	add	r0, r0, r5
	str	r3, [r4, #2552]
	subs	r0, r6, r0
	ldrh	r1, [r4, #232]
	str	r5, [r4, #3672]
	muls	r3, r2, r3
	str	r3, [r4, #340]
	bl	__aeabi_uidiv
	cmp	r5, r6
	strh	r0, [r4, #2620]	@ movhi
	bls	.L1810
	ldr	r1, .L1824+8
	movw	r2, #1498
	ldr	r0, .L1824+12
	bl	sftl_printk
.L1810:
	ldrh	r3, [r4, #2484]
	ldrh	r1, [r4, #2482]
	strh	r1, [r4, #24]	@ movhi
	lsrs	r2, r3, #6
	strh	r2, [r4, #26]	@ movhi
	ldrh	r2, [r4, #2486]
	and	r3, r3, #63
	strh	r2, [r4, #76]	@ movhi
	ldrh	r2, [r4, #2488]
	strb	r3, [r4, #30]
	ldrb	r3, [r4, #2479]	@ zero_extendqisi2
	lsrs	r0, r2, #6
	and	r2, r2, #63
	strb	r2, [r4, #82]
	ldrb	r2, [r4, #2480]	@ zero_extendqisi2
	strb	r2, [r4, #84]
	ldrh	r2, [r4, #2490]
	strh	r2, [r4, #124]	@ movhi
	ldrh	r2, [r4, #2492]
	strh	r0, [r4, #78]	@ movhi
	strb	r3, [r4, #32]
	movw	r3, #65535
	lsrs	r0, r2, #6
	and	r2, r2, #63
	strb	r2, [r4, #130]
	ldrb	r2, [r4, #2481]	@ zero_extendqisi2
	strb	r2, [r4, #132]
	ldr	r2, [r4, #2500]
	str	r3, [r4, #172]
	movs	r3, #0
	str	r2, [r4, #2596]
	strb	r3, [r4, #178]
	strb	r3, [r4, #180]
	str	r3, [r4, #2576]
	str	r3, [r4, #2564]
	str	r3, [r4, #2556]
	str	r3, [r4, #2572]
	str	r3, [r4, #2600]
	str	r3, [r4, #2612]
	strh	r0, [r4, #126]	@ movhi
	str	r3, [r4, #2568]
	ldr	r3, [r4, #2508]
	ldr	r2, [r4, #2588]
	cmp	r3, r2
	ldr	r2, [r4, #2592]
	it	hi
	strhi	r3, [r4, #2588]
	ldr	r3, [r4, #2504]
	cmp	r3, r2
	it	hi
	strhi	r3, [r4, #2592]
	movw	r3, #65535
	cmp	r1, r3
	beq	.L1813
	ldr	r0, .L1824+24
	bl	make_superblock
.L1813:
	ldrh	r2, [r4, #76]
	movw	r3, #65535
	cmp	r2, r3
	beq	.L1814
	ldr	r0, .L1824+28
	bl	make_superblock
.L1814:
	ldrh	r2, [r4, #124]
	movw	r3, #65535
	cmp	r2, r3
	beq	.L1815
	ldr	r0, .L1824+32
	bl	make_superblock
.L1815:
	ldrh	r2, [r4, #172]
	movw	r3, #65535
	cmp	r2, r3
	beq	.L1816
	ldr	r0, .L1824+36
	bl	make_superblock
.L1816:
	movs	r0, #0
	b	.L1796
.L1825:
	.align	2
.L1824:
	.word	.LANCHOR0
	.word	1179929683
	.word	.LANCHOR1+600
	.word	.LC8
	.word	.LC127
	.word	.LANCHOR0+2468
	.word	.LANCHOR0+24
	.word	.LANCHOR0+76
	.word	.LANCHOR0+124
	.word	.LANCHOR0+172
	.fnend
	.size	FtlLoadSysInfo, .-FtlLoadSysInfo
	.section	.rodata.str1.1
.LC128:
	.ascii	"%s last blk_id =%x page =%x hash error hash =%x has"
	.ascii	"h_r =%x\012\000"
.LC129:
	.ascii	"%s scan blk_id =%x page =%x hash error hash =%x has"
	.ascii	"h_r =%x\012\000"
	.text
	.align	1
	.global	FtlMapTblRecovery
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlMapTblRecovery, %function
FtlMapTblRecovery:
	.fnstart
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r5, r0
	ldr	r4, .L1865
	.pad #44
	sub	sp, sp, #44
	ldr	r3, [r0, #24]
	movs	r1, #0
	addw	r9, r4, #3452
	movs	r7, #0
	str	r3, [sp, #12]
	ldr	r3, [r0, #12]
	str	r3, [sp, #24]
	ldr	r3, [r0, #16]
	str	r3, [sp, #32]
	ldrh	r3, [r0, #6]
	str	r3, [sp, #16]
	ldrh	r3, [r0, #8]
	str	r3, [sp, #28]
	ldr	r3, [sp, #16]
	ldr	r0, [sp, #12]
	lsls	r2, r3, #2
	bl	ftl_memset
	ldr	r3, [r4, #3300]
	ldr	fp, [r4, #3332]
	str	r3, [r4, #3460]
	mov	r3, #-1
	str	fp, [r4, #3464]
	strd	r7, r7, [r5, #28]
	str	r3, [r5]
	movs	r3, #1
	str	r3, [r5, #36]
.L1827:
	ldr	r3, [sp, #28]
	sxth	r6, r7
	uxth	r8, r7
	cmp	r6, r3
	bge	.L1847
	ldr	r3, [sp, #24]
	add	r3, r3, r6, lsl #1
	str	r3, [sp, #20]
	ldr	r3, [sp, #28]
	subs	r3, r3, #1
	cmp	r3, r6
	bne	.L1828
	ldr	r3, [sp, #20]
	movs	r1, #1
	ldr	r10, .L1865+4
	ldrh	r0, [r3]
	bl	FtlGetLastWrittenPage
	sxth	r7, r0
	adds	r3, r7, #1
	strh	r3, [r5, #2]	@ movhi
	ldr	r3, [sp, #32]
	strh	r8, [r5]	@ movhi
	mov	r8, #0
	ldr	r3, [r3, r6, lsl #2]
	str	r3, [r5, #28]
.L1829:
	sxth	r9, r8
	adds	r2, r7, #1
	cmp	r9, r2
	blt	.L1833
.L1847:
	mov	r0, r5
	bl	ftl_free_no_use_map_blk
	ldrh	r2, [r5, #2]
	ldrh	r3, [r4, #304]
	cmp	r2, r3
	bne	.L1835
	mov	r0, r5
	bl	ftl_map_blk_alloc_new_blk
.L1835:
	mov	r0, r5
	bl	ftl_map_blk_gc
	mov	r0, r5
	bl	ftl_map_blk_gc
	movs	r0, #0
	add	sp, sp, #44
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1833:
	ldr	r3, [sp, #20]
	ldr	r0, .L1865+8
	ldrh	r2, [r3]
	orr	r2, r9, r2, lsl #10
	str	r2, [r4, #3456]
	movs	r2, #1
	mov	r1, r2
	bl	FlashReadPages
	ldr	r2, [r4, #3464]
	ldr	r2, [r2, #12]
	str	r2, [sp, #24]
	cbz	r2, .L1830
	ldr	r1, [r4, #3452]
	adds	r1, r1, #1
	beq	.L1848
	ldrh	r1, [r4, #310]
	ldr	r0, [r4, #3460]
	bl	js_hash
	ldr	r2, [sp, #24]
	cmp	r2, r0
	beq	.L1832
	strd	r2, r0, [sp]
	mov	r3, r9
	ldr	r0, .L1865+12
	mov	r2, r6
	mov	r1, r10
	bl	sftl_printk
	mov	r3, #-1
	str	r3, [r4, #3452]
.L1848:
	add	r8, r8, #1
	b	.L1829
.L1830:
	ldr	r3, [r4, #3452]
	adds	r3, r3, #1
	beq	.L1848
.L1832:
	ldrh	r3, [fp, #8]
	ldr	r2, [sp, #16]
	cmp	r3, r2
	bcs	.L1848
	ldrh	r1, [fp]
	ldrh	r2, [r5, #4]
	cmp	r1, r2
	ittt	eq
	ldreq	r1, [sp, #12]
	ldreq	r2, [r4, #3456]
	streq	r2, [r1, r3, lsl #2]
	b	.L1848
.L1828:
	ldr	r3, [r4, #3300]
	mov	r0, r9
	str	r3, [r4, #3460]
	ldr	r3, [sp, #24]
	ldrh	r2, [r3, r6, lsl #1]
	ldrh	r3, [r4, #304]
	subs	r3, r3, #1
	orr	r3, r3, r2, lsl #10
	movs	r2, #1
	mov	r1, r2
	str	r3, [r4, #3456]
	bl	FlashReadPages
	ldr	r3, [r4, #3452]
	adds	r3, r3, #1
	beq	.L1851
	ldrh	r2, [fp]
	ldrh	r3, [r5, #4]
	cmp	r2, r3
	bne	.L1851
	ldrh	r2, [fp, #8]
	movw	r3, #64245
	cmp	r2, r3
	beq	.L1852
.L1851:
	mov	r8, #0
	b	.L1843
.L1839:
	ldr	r2, [r4, #3300]
	lsls	r6, r0, #3
	ldr	ip, [sp, #16]
	ldr	r3, [r2, r0, lsl #3]
	uxth	r0, r3
	cmp	ip, r0
	bls	.L1838
	add	r2, r2, r6
	mov	r3, r0
	ldr	r0, [sp, #12]
	ldr	r2, [r2, #4]
	str	r2, [r0, r3, lsl #2]
.L1838:
	adds	r1, r1, #1
.L1837:
	ldrh	r3, [r4, #304]
	sxth	r0, r1
	subs	r3, r3, #1
	cmp	r0, r3
	blt	.L1839
.L1845:
	adds	r7, r7, #1
	b	.L1827
.L1852:
	movs	r1, #0
	b	.L1837
.L1844:
	ldr	r3, [sp, #20]
	mov	r0, r9
	ldrh	r2, [r3]
	orr	r2, r10, r2, lsl #10
	str	r2, [r4, #3456]
	movs	r2, #1
	mov	r1, r2
	bl	FlashReadPages
	ldr	r2, [r4, #3464]
	ldr	r2, [r2, #12]
	str	r2, [sp, #36]
	cbz	r2, .L1840
	ldr	r1, [r4, #3452]
	adds	r1, r1, #1
	beq	.L1849
	ldrh	r1, [r4, #310]
	ldr	r0, [r4, #3460]
	bl	js_hash
	ldr	r2, [sp, #36]
	cmp	r2, r0
	beq	.L1842
	strd	r2, r0, [sp]
	mov	r3, r10
	ldr	r1, .L1865+4
	mov	r2, r6
	ldr	r0, .L1865+16
	bl	sftl_printk
	mov	r3, #-1
	str	r3, [r4, #3452]
.L1849:
	add	r8, r8, #1
.L1843:
	ldrh	r2, [r4, #304]
	sxth	r10, r8
	cmp	r10, r2
	blt	.L1844
	b	.L1845
.L1840:
	ldr	r3, [r4, #3452]
	adds	r3, r3, #1
	beq	.L1849
.L1842:
	ldrh	r3, [fp, #8]
	ldr	r2, [sp, #16]
	cmp	r3, r2
	bcs	.L1849
	ldrh	r1, [fp]
	ldrh	r2, [r5, #4]
	cmp	r1, r2
	ittt	eq
	ldreq	r1, [sp, #12]
	ldreq	r2, [r4, #3456]
	streq	r2, [r1, r3, lsl #2]
	b	.L1849
.L1866:
	.align	2
.L1865:
	.word	.LANCHOR0
	.word	.LANCHOR1+615
	.word	.LANCHOR0+3452
	.word	.LC128
	.word	.LC129
	.fnend
	.size	FtlMapTblRecovery, .-FtlMapTblRecovery
	.align	1
	.global	FtlLoadVonderInfo
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlLoadVonderInfo, %function
FtlLoadVonderInfo:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	ldr	r0, .L1868
	push	{r3, lr}
	.save {r3, lr}
	ldrh	r3, [r0, #320]
	strh	r3, [r0, #3618]	@ movhi
	movw	r3, #61574
	strh	r3, [r0, #3612]	@ movhi
	ldrh	r3, [r0, #344]
	strh	r3, [r0, #3616]	@ movhi
	ldrh	r3, [r0, #322]
	strh	r3, [r0, #3614]	@ movhi
	ldr	r3, [r0, #348]
	addw	r0, r0, #3608
	str	r3, [r0, #12]
	ldr	r3, [r0, #-240]
	str	r3, [r0, #16]
	ldr	r3, [r0, #-244]
	str	r3, [r0, #20]
	ldr	r3, [r0, #-236]
	str	r3, [r0, #24]
	bl	FtlMapTblRecovery
	movs	r0, #0
	pop	{r3, pc}
.L1869:
	.align	2
.L1868:
	.word	.LANCHOR0
	.fnend
	.size	FtlLoadVonderInfo, .-FtlLoadVonderInfo
	.align	1
	.global	FtlLoadMapInfo
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlLoadMapInfo, %function
FtlLoadMapInfo:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, lr}
	.save {r3, lr}
	bl	FtlL2PDataInit
	ldr	r0, .L1871
	bl	FtlMapTblRecovery
	movs	r0, #0
	pop	{r3, pc}
.L1872:
	.align	2
.L1871:
	.word	.LANCHOR0+3392
	.fnend
	.size	FtlLoadMapInfo, .-FtlLoadMapInfo
	.align	1
	.global	FtlSysBlkInit
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlSysBlkInit, %function
FtlSysBlkInit:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	movs	r3, #0
	ldr	r4, .L1889
	ldrh	r0, [r4, #236]
	strh	r3, [r4, #3472]	@ movhi
	bl	FtlFreeSysBlkQueueInit
	bl	FtlScanSysBlk
	ldrh	r2, [r4, #2624]
	movw	r3, #65535
	cmp	r2, r3
	bne	.L1874
.L1876:
	mov	r5, #-1
.L1873:
	mov	r0, r5
	pop	{r4, r5, r6, pc}
.L1874:
	bl	FtlLoadSysInfo
	mov	r5, r0
	cmp	r0, #0
	bne	.L1876
	bl	FtlLoadMapInfo
	bl	FtlLoadVonderInfo
	bl	Ftl_load_ext_data
	bl	FtlLoadEctTbl
	bl	FtlFreeSysBLkSort
	bl	SupperBlkListInit
	bl	FtlPowerLostRecovery
	movs	r0, #1
	bl	FtlUpdateVaildLpn
	ldr	r2, [r4, #2540]
	ldrh	r1, [r4, #338]
	mov	r3, r5
	adds	r2, r2, #4
	movs	r0, #12
.L1877:
	cmp	r3, r1
	bge	.L1882
	mul	r6, r0, r3
	ldr	r6, [r2, r6]
	cmp	r6, #0
	bge	.L1878
.L1882:
	ldrh	r2, [r4, #2496]
	cmp	r3, r1
	add	r2, r2, #1
	strh	r2, [r4, #2496]	@ movhi
	bge	.L1888
.L1879:
	ldr	r0, .L1889+4
	bl	FtlSuperblockPowerLostFix
	ldr	r0, .L1889+8
	bl	FtlSuperblockPowerLostFix
	ldrh	r1, [r4, #24]
	ldr	r2, [r4, #72]
	ldrh	r0, [r4, #28]
	ldrh	r3, [r2, r1, lsl #1]
	subs	r3, r3, r0
	strh	r3, [r2, r1, lsl #1]	@ movhi
	ldrh	r0, [r4, #76]
	ldr	r1, [r4, #72]
	ldrh	r3, [r4, #302]
	strh	r3, [r4, #26]	@ movhi
	movs	r3, #0
	strb	r3, [r4, #30]
	strh	r3, [r4, #28]	@ movhi
	ldrh	r6, [r4, #80]
	ldrh	r2, [r1, r0, lsl #1]
	subs	r2, r2, r6
	strh	r2, [r1, r0, lsl #1]	@ movhi
	strb	r3, [r4, #82]
	strh	r3, [r4, #80]	@ movhi
	ldrh	r3, [r4, #2498]
	ldrh	r2, [r4, #302]
	adds	r3, r3, #1
	strh	r2, [r4, #78]	@ movhi
	strh	r3, [r4, #2498]	@ movhi
	bl	l2p_flush
	bl	FtlVpcTblFlush
	bl	FtlVpcTblFlush
	b	.L1883
.L1878:
	adds	r3, r3, #1
	b	.L1877
.L1888:
	ldrh	r3, [r4, #3472]
	cmp	r3, #0
	bne	.L1879
.L1883:
	ldrh	r0, [r4, #24]
	movw	r3, #65535
	cmp	r0, r3
	beq	.L1884
	ldrh	r3, [r4, #28]
	ldrh	r2, [r4, #80]
	orrs	r3, r3, r2
	uxth	r3, r3
	cbnz	r3, .L1884
	bl	FtlGcRefreshBlock
	ldrh	r0, [r4, #76]
	bl	FtlGcRefreshBlock
	bl	FtlVpcTblFlush
	ldr	r0, .L1889+4
	bl	allocate_new_data_superblock
	ldr	r0, .L1889+8
	bl	allocate_new_data_superblock
.L1884:
	bl	FtlVpcCheckAndModify
	b	.L1873
.L1890:
	.align	2
.L1889:
	.word	.LANCHOR0
	.word	.LANCHOR0+24
	.word	.LANCHOR0+76
	.fnend
	.size	FtlSysBlkInit, .-FtlSysBlkInit
	.align	1
	.global	ftl_low_format
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	ftl_low_format, %function
ftl_low_format:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, r8, r9, lr}
	.save {r3, r4, r5, r6, r7, r8, r9, lr}
	movs	r3, #0
	ldr	r4, .L1915
	ldrh	r0, [r4, #236]
	str	r3, [r4, #2588]
	str	r3, [r4, #2592]
	str	r3, [r4, #2604]
	bl	FtlFreeSysBlkQueueInit
	bl	FtlLoadBbt
	cbz	r0, .L1892
	bl	FtlMakeBbt
.L1892:
	ldr	r0, .L1915+4
	movs	r2, #0
.L1893:
	ldrh	r1, [r4, #258]
	uxth	r3, r2
	adds	r2, r2, #1
	cmp	r3, r1, lsl #7
	blt	.L1894
	ldrh	r6, [r4, #240]
	movs	r5, #0
.L1895:
	ldrh	r3, [r4, #242]
	cmp	r3, r6
	bhi	.L1896
	ldrh	r1, [r4, #232]
	subs	r3, r5, #3
	cmp	r3, r1, lsl #1
	bge	.L1897
.L1901:
	movs	r5, #0
	mov	r8, r5
.L1898:
	ldrh	r3, [r4, #240]
	uxth	r0, r5
	cmp	r3, r0
	bhi	.L1902
	ldrh	r5, [r4, #232]
	ldr	r9, [r4, #244]
	ldrh	r3, [r4, #242]
	mov	r1, r5
	mov	r0, r9
	str	r3, [r4, #3284]
	bl	__aeabi_uidiv
	ubfx	r7, r0, #5, #16
	add	r3, r7, #36
	strh	r3, [r4, #2620]	@ movhi
	movs	r3, #24
	mov	r6, r0
	str	r0, [r4, #2552]
	muls	r3, r5, r3
	cmp	r8, r3
	ble	.L1903
	mov	r1, r5
	sub	r0, r9, r8
	bl	__aeabi_uidiv
	lsrs	r3, r0, #5
	adds	r3, r3, #24
	str	r0, [r4, #2552]
	strh	r3, [r4, #2620]	@ movhi
.L1903:
	ldrh	r3, [r4, #294]
	cbz	r3, .L1905
	ldrh	r2, [r4, #2620]
	add	r2, r2, r3, lsr #1
	strh	r2, [r4, #2620]	@ movhi
	mul	r2, r5, r3
	cmp	r8, r2
	itttt	lt
	strlt	r6, [r4, #2552]
	addlt	r3, r3, #32
	addlt	r3, r3, r7
	strhlt	r3, [r4, #2620]	@ movhi
.L1905:
	ldrh	r1, [r4, #2620]
	ldr	r3, [r4, #2552]
	ldr	r6, .L1915+8
	subs	r3, r3, r1
	mul	r1, r5, r3
	ldrh	r3, [r4, #302]
	str	r1, [r4, #3672]
	movw	r5, #65535
	muls	r1, r3, r1
	ldrh	r3, [r4, #258]
	str	r1, [r4, #2552]
	muls	r1, r3, r1
	str	r1, [r4, #340]
	bl	FtlBbmTblFlush
	ldrh	r2, [r4, #242]
	movs	r1, #0
	ldr	r0, [r4, #72]
	lsls	r2, r2, #1
	bl	ftl_memset
	movs	r3, #0
	str	r5, [r4, #172]
	str	r3, [r4, #2548]
	strb	r3, [r4, #178]
	strb	r3, [r4, #180]
	strb	r3, [r4, #30]
	str	r3, [r4, #24]
	movs	r3, #1
	strb	r3, [r4, #32]
.L1907:
	mov	r0, r6
	bl	make_superblock
	ldrb	r3, [r4, #31]	@ zero_extendqisi2
	ldrh	r2, [r4, #24]
	cmp	r3, #0
	bne	.L1908
	ldr	r3, [r4, #72]
	strh	r5, [r3, r2, lsl #1]	@ movhi
	ldrh	r3, [r4, #24]
	adds	r3, r3, #1
	strh	r3, [r4, #24]	@ movhi
	b	.L1907
.L1894:
	ldr	r5, [r4, #3312]
	mvns	r1, r3
	orr	r1, r3, r1, lsl #16
	str	r1, [r5, r3, lsl #2]
	ldr	r1, [r4, #3316]
	str	r0, [r1, r3, lsl #2]
	b	.L1893
.L1896:
	mov	r0, r6
	movs	r1, #1
	adds	r6, r6, #1
	bl	FtlLowFormatEraseBlock
	add	r5, r5, r0
	uxth	r6, r6
	uxth	r5, r5
	b	.L1895
.L1897:
	mov	r0, r5
	bl	__aeabi_uidiv
	ldr	r3, [r4, #332]
	add	r0, r0, r3
	uxth	r0, r0
	bl	FtlSysBlkNumInit
	ldrh	r0, [r4, #236]
	bl	FtlFreeSysBlkQueueInit
	ldrh	r5, [r4, #240]
.L1899:
	ldrh	r3, [r4, #242]
	cmp	r3, r5
	bls	.L1901
	mov	r0, r5
	adds	r5, r5, #1
	movs	r1, #1
	uxth	r5, r5
	bl	FtlLowFormatEraseBlock
	b	.L1899
.L1902:
	movs	r1, #0
	adds	r5, r5, #1
	bl	FtlLowFormatEraseBlock
	add	r8, r8, r0
	uxth	r8, r8
	b	.L1898
.L1908:
	ldr	r3, [r4, #2588]
	movw	r5, #65535
	str	r3, [r4, #36]
	adds	r3, r3, #1
	str	r3, [r4, #2588]
	ldr	r3, [r4, #72]
	ldrh	r1, [r4, #28]
	ldr	r6, .L1915+12
	strh	r1, [r3, r2, lsl #1]	@ movhi
	movs	r3, #0
	strh	r3, [r4, #78]	@ movhi
	strb	r3, [r4, #82]
	ldrh	r3, [r4, #24]
	adds	r3, r3, #1
	strh	r3, [r4, #76]	@ movhi
	movs	r3, #1
	strb	r3, [r4, #84]
.L1909:
	mov	r0, r6
	bl	make_superblock
	ldrb	r3, [r4, #83]	@ zero_extendqisi2
	ldrh	r2, [r4, #76]
	cbnz	r3, .L1910
	ldr	r3, [r4, #72]
	strh	r5, [r3, r2, lsl #1]	@ movhi
	ldrh	r3, [r4, #76]
	adds	r3, r3, #1
	strh	r3, [r4, #76]	@ movhi
	b	.L1909
.L1910:
	ldr	r3, [r4, #2588]
	movw	r5, #65535
	str	r3, [r4, #88]
	adds	r3, r3, #1
	str	r3, [r4, #2588]
	ldr	r3, [r4, #72]
	ldrh	r1, [r4, #80]
	strh	r1, [r3, r2, lsl #1]	@ movhi
	strh	r5, [r4, #124]	@ movhi
	bl	FtlFreeSysBlkQueueOut
	movs	r3, #0
	strh	r3, [r4, #2626]	@ movhi
	ldr	r3, [r4, #3672]
	strh	r3, [r4, #2630]	@ movhi
	ldr	r3, [r4, #2588]
	str	r3, [r4, #2632]
	strh	r0, [r4, #2624]	@ movhi
	adds	r3, r3, #1
	strh	r5, [r4, #2628]	@ movhi
	str	r3, [r4, #2588]
	bl	FtlVpcTblFlush
	bl	FtlSysBlkInit
	cbnz	r0, .L1911
	ldr	r3, .L1915+16
	movs	r2, #1
	str	r2, [r3]
.L1911:
	movs	r0, #0
	pop	{r3, r4, r5, r6, r7, r8, r9, pc}
.L1916:
	.align	2
.L1915:
	.word	.LANCHOR0
	.word	168778952
	.word	.LANCHOR0+24
	.word	.LANCHOR0+76
	.word	.LANCHOR2
	.fnend
	.size	ftl_low_format, .-ftl_low_format
	.align	1
	.global	sftl_init
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_init, %function
sftl_init:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, lr}
	.save {r3, r4, r5, lr}
	mov	r3, #-1
	ldr	r5, .L1921
	ldr	r4, .L1921+4
	ldr	r1, .L1921+8
	ldr	r0, .L1921+12
	str	r3, [r5]
	bl	sftl_printk
	mov	r0, r4
	bl	FtlConstantsInit
	bl	FtlMemInit
	bl	FtlVariablesInit
	ldrh	r0, [r4, #236]
	bl	FtlFreeSysBlkQueueInit
	bl	FtlLoadBbt
	cbnz	r0, .L1918
	bl	FtlSysBlkInit
	cbnz	r0, .L1918
	movs	r3, #1
	str	r3, [r5]
	ldrh	r3, [r4, #224]
	cmp	r3, #15
	bhi	.L1918
	movw	r4, #8129
.L1919:
	movs	r1, #1
	movs	r0, #0
	bl	rk_ftl_garbage_collect
	subs	r4, r4, #1
	bne	.L1919
.L1918:
	movs	r0, #0
	pop	{r3, r4, r5, pc}
.L1922:
	.align	2
.L1921:
	.word	.LANCHOR2
	.word	.LANCHOR0
	.word	.LC0
	.word	.LC77
	.fnend
	.size	sftl_init, .-sftl_init
	.section	.rodata.str1.1
.LC130:
	.ascii	"write_idblock %x %x\012\000"
.LC131:
	.ascii	"write_idblock fail! %x %x %x %x\012\000"
.LC132:
	.ascii	"%s idb buffer alloc fail\012\000"
	.text
	.align	1
	.global	FtlWriteToIDB
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	FtlWriteToIDB, %function
FtlWriteToIDB:
	.fnstart
	@ args = 0, pretend = 0, frame = 104
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	add	r8, r1, r0
	add	r9, r8, #-1
	.pad #116
	sub	sp, sp, #116
	ldr	r5, .L1988
	mov	r3, sp
	mov	r4, r0
	bic	r3, r3, #8160
	mov	r6, r1
	bic	r3, r3, #31
	mov	r7, r2
	cmp	r9, #63
	ldr	r3, [r3, #24]
	str	r3, [sp, #108]
	bls	.L1924
	cmp	r0, #576
	bcc	.L1925
.L1924:
	ldr	r3, [r5, #3676]
	cbnz	r3, .L1926
.L1987:
	movs	r4, #0
	b	.L1923
.L1926:
	ldr	r3, [r5, #3680]
	str	r3, [sp, #12]
	ldr	r2, [r3]
	ldr	r3, .L1988+4
	cmp	r2, r3
	bne	.L1928
	ldr	r3, [sp, #12]
	movs	r2, #0
	ldrh	r1, [r5, #10]
	add	r0, r3, #260096
	movw	r3, #65023
.L1932:
	ldr	r4, [r0, #-4]!
	cbnz	r4, .L1929
	ldr	r4, [sp, #12]
	subs	r3, r3, #1
	ldr	r4, [r4, r2, lsl #2]
	adds	r2, r2, #1
	cmp	r2, #4096
	str	r4, [r0, #2048]
	it	hi
	movhi	r2, #0
	cmp	r3, #4096
	bne	.L1932
	mov	r9, #512
	b	.L1931
.L1929:
	adds	r3, r3, #127
	lsr	r9, r3, #7
.L1931:
	lsls	r1, r1, #2
	add	r0, r9, #4
	ldr	r4, .L1988
	uxth	r1, r1
	bl	__aeabi_uidiv
	adds	r3, r0, #1
	mov	r2, r3
	ldr	r0, .L1988+8
	mov	r1, r9
	str	r3, [sp, #16]
	bl	sftl_printk
	lsl	r3, r9, #7
	str	r3, [sp, #32]
	movs	r3, #0
	mov	fp, r3
	str	r3, [sp, #20]
.L1933:
	ldr	r3, [sp, #16]
	add	r3, r3, fp
	str	r3, [sp, #24]
	cmp	r3, #8
	bls	.L1955
	ldr	r3, [sp, #20]
	cmp	r3, #0
	bne	.L1954
.L1928:
	mov	r9, #-1
	b	.L1954
.L1955:
	ldr	r0, [r4, #3684]
	mov	r2, #512
	movs	r1, #0
	bl	memset
	ldrh	r6, [r4, #10]
	mul	r3, r6, fp
	str	r3, [sp, #28]
	ldr	r3, [r4, #3260]
	cmp	r3, #0
	beq	.L1964
	ldr	r3, [r4, #3264]
	cmp	r3, #0
	ite	eq
	moveq	r8, #6
	movne	r8, #9
.L1934:
	mul	r7, r6, fp
	movs	r5, #0
.L1935:
	ldr	r3, [r4, #3248]
	mov	r1, r7
	movs	r0, #0
	adds	r5, r5, #1
	blx	r3
	ldr	r3, [sp, #16]
	add	r7, r7, r6
	cmp	r3, r5
	bhi	.L1935
	cmp	r8, #9
	bne	.L1966
	ldr	r5, [r4, #3684]
	mov	r2, #1024
	movs	r1, #0
	mov	r0, r5
	bl	ftl_memset
	ldr	r3, .L1988+12
	movs	r1, #12
	strd	r3, r1, [r5]
	movs	r3, #0
	str	r3, [r5, #12]
	mov	r3, #1024
	strh	r3, [r5, #16]	@ movhi
	ldrh	r3, [r4, #10]
	adds	r0, r5, r1
	strh	r3, [r5, #18]	@ movhi
	mov	r3, #4096
	str	r3, [r5, #20]
	bl	js_hash
	str	r0, [r5, #8]
.L1936:
	ldr	r3, [sp, #16]
	ldr	r10, [sp, #12]
	muls	r3, r6, r3
	movs	r6, #0
	str	r3, [sp, #36]
.L1937:
	ldr	r3, [sp, #36]
	cmp	r6, r3
	beq	.L1944
	cmp	r8, #9
	ite	eq
	addeq	r3, r6, #1
	lslne	r3, r6, #2
	str	r3, [sp, #44]
	movw	r3, #61424
	str	r3, [sp, #48]
	cmp	r6, #0
	bne	.L1940
	cmp	r8, #9
	bne	.L1940
	ldr	r3, [r4, #3260]
	movs	r0, #70
	blx	r3
	ldr	r7, [r4, #3252]
	ldr	r1, [sp, #28]
	add	r3, sp, #44
	mov	r2, r5
	mov	r0, r6
	blx	r7
	ldr	r3, [r4, #3260]
	mov	r7, r0
	ldrb	r0, [r4, #22]	@ zero_extendqisi2
	blx	r3
	adds	r7, r7, #1
	bne	.L1941
.L1944:
	ldrb	r3, [r4, #14]	@ zero_extendqisi2
	ldrh	r10, [r4, #10]
	str	r3, [sp, #28]
	ldr	r3, [r4, #3260]
	ldr	r5, [r4, #3684]
	mul	r7, r10, fp
	cmp	r3, #0
	bne	.L1942
	mov	r8, #6
.L1943:
	ldr	r3, [sp, #16]
	movs	r6, #0
	mul	r10, r10, r3
.L1946:
	cmp	r6, r10
	beq	.L1950
	cmp	r6, #0
	bne	.L1947
	cmp	r8, #9
	bne	.L1947
	ldr	r3, [r4, #3260]
	movs	r0, #70
	blx	r3
	ldr	r3, [r4, #3264]
	movs	r0, #2
	blx	r3
	mov	r2, r5
	ldr	ip, [r4, #3256]
	mov	r1, r7
	add	r3, sp, #44
	mov	r0, r6
	blx	ip
	ldr	r3, [r4, #3264]
	ldr	r0, [sp, #28]
	blx	r3
	ldr	r3, [r4, #3260]
	ldrb	r0, [r4, #22]	@ zero_extendqisi2
	blx	r3
	ldr	r3, [r5]
	ldr	r2, .L1988+12
	cmp	r3, r2
	beq	.L1948
.L1950:
	ldr	r0, [r4, #3684]
	movs	r5, #0
	ldr	r1, [sp, #12]
	mov	ip, r0
.L1949:
	mov	r6, ip
	mov	r7, r1
	add	ip, ip, #4
	adds	r1, r1, #4
	ldr	r2, [r6]
	ldr	r3, [r7]
	cmp	r2, r3
	beq	.L1952
	mov	r2, #512
	movs	r1, #0
	bl	memset
	str	r5, [sp]
	ldr	r3, [r7]
	mov	r1, fp
	ldr	r0, .L1988+16
	ldr	r2, [r6]
	bl	sftl_printk
	ldrh	r1, [r4, #10]
	ldr	r3, [r4, #3248]
	movs	r0, #0
	mul	r1, fp, r1
	blx	r3
.L1953:
	ldr	fp, [sp, #24]
	b	.L1933
.L1964:
	mov	r8, #6
	b	.L1934
.L1966:
	movs	r5, #0
	b	.L1936
.L1940:
	ldr	r1, [sp, #28]
	add	r3, sp, #44
	ldr	r7, [r4, #3252]
	mov	r2, r10
	add	r1, r1, r6
	movs	r0, #0
	blx	r7
	adds	r0, r0, #1
	beq	.L1944
	add	r10, r10, #2048
.L1941:
	adds	r6, r6, #1
	b	.L1937
.L1942:
	ldr	r3, [r4, #3264]
	cmp	r3, #0
	ite	eq
	moveq	r8, #6
	movne	r8, #9
	b	.L1943
.L1947:
	ldr	ip, [r4, #3256]
	add	r3, sp, #44
	mov	r2, r5
	adds	r1, r7, r6
	movs	r0, #0
	blx	ip
	adds	r0, r0, #1
	beq	.L1950
	ldr	r1, [sp, #48]
	movw	r3, #61424
	cmp	r1, r3
	bne	.L1950
	add	r5, r5, #2048
.L1948:
	adds	r6, r6, #1
	b	.L1946
.L1989:
	.align	2
.L1988:
	.word	.LANCHOR0
	.word	-52655045
	.word	.LC130
	.word	1179535694
	.word	.LC131
.L1952:
	ldr	r3, [sp, #32]
	adds	r5, r5, #1
	cmp	r5, r3
	bcc	.L1949
	ldr	r3, [sp, #20]
	adds	r3, r3, #1
	str	r3, [sp, #20]
	cmp	r3, #5
	bls	.L1953
.L1954:
	ldr	r5, .L1990
	movs	r3, #0
	mov	r4, r9
	ldr	r0, [r5, #3680]
	str	r3, [r5, #3676]
	bl	kfree
	ldr	r0, [r5, #3684]
	bl	kfree
.L1923:
	mov	r3, sp
	ldr	r2, [sp, #108]
	bic	r3, r3, #8160
	bic	r3, r3, #31
	ldr	r3, [r3, #24]
	cmp	r2, r3
	beq	.L1963
	bl	__stack_chk_fail
.L1925:
	cmp	r0, #64
	bne	.L1956
	mov	r0, #262144
	bl	ftl_malloc
	str	r0, [r5, #3680]
	mov	r0, #262144
	bl	ftl_malloc
	mov	r3, r0
	str	r0, [r5, #3684]
	ldr	r0, [r5, #3680]
	cbz	r0, .L1957
	cbz	r3, .L1957
	mov	r2, #262144
	movs	r1, #0
	movs	r3, #1
	str	r3, [r5, #3676]
	bl	ftl_memset
.L1958:
	cmp	r4, #63
	ldr	r0, [r5, #3680]
	sub	r3, r4, #64
	ittte	ls
	rsbls	r4, r4, #64
	addls	r6, r6, r3
	addls	r7, r7, r4, lsl #9
	addhi	r0, r0, r3, lsl #9
	cmp	r9, #576
	mov	r1, r7
	itt	cs
	subcs	r6, r6, r8
	subcs	r6, r6, #446
	lsls	r2, r6, #9
	bl	ftl_memcpy
	b	.L1987
.L1957:
	ldr	r1, .L1990+4
	ldr	r0, .L1990+8
	bl	sftl_printk
.L1956:
	ldr	r3, [r5, #3676]
	cmp	r3, #0
	bne	.L1958
	b	.L1987
.L1963:
	mov	r0, r4
	add	sp, sp, #116
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L1991:
	.align	2
.L1990:
	.word	.LANCHOR0
	.word	.LANCHOR1+633
	.word	.LC132
	.fnend
	.size	FtlWriteToIDB, .-FtlWriteToIDB
	.align	1
	.global	sftl_write
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	sftl_write, %function
sftl_write:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	mov	r5, r1
	mov	r6, r2
	mov	r4, r0
	bl	FtlWriteToIDB
	mov	r3, r6
	mov	r2, r5
	mov	r1, r4
	movs	r0, #0
	pop	{r4, r5, r6, lr}
	b	FtlWrite
	.fnend
	.size	sftl_write, .-sftl_write
	.align	1
	.global	rk_sftl_vendor_dev_ops_register
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rk_sftl_vendor_dev_ops_register, %function
rk_sftl_vendor_dev_ops_register:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r3, .L1996
	mov	r2, r0
	ldr	r0, [r3, #3688]
	cbnz	r0, .L1995
	str	r2, [r3, #3688]
	str	r1, [r3, #3692]
	bx	lr
.L1995:
	mov	r0, #-1
	bx	lr
.L1997:
	.align	2
.L1996:
	.word	.LANCHOR0
	.fnend
	.size	rk_sftl_vendor_dev_ops_register, .-rk_sftl_vendor_dev_ops_register
	.align	1
	.global	rk_sftl_vendor_storage_init
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rk_sftl_vendor_storage_init, %function
rk_sftl_vendor_storage_init:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, r8, r9, lr}
	.save {r3, r4, r5, r6, r7, r8, r9, lr}
	mov	r0, #65536
	ldr	r5, .L2006
	bl	ftl_malloc
	str	r0, [r5, #3696]
	cmp	r0, #0
	beq	.L2004
	ldr	r9, .L2006+4
	mov	r8, #0
	mov	r7, r8
	mov	r6, r8
.L2002:
	ldr	r3, [r5, #3688]
	lsls	r0, r6, #7
	ldr	r2, [r5, #3696]
	movs	r1, #128
	blx	r3
	mov	r4, r0
	cbnz	r0, .L2000
	ldr	r3, [r5, #3696]
	ldr	r2, [r3]
	cmp	r2, r9
	bne	.L2001
	add	r2, r3, #61440
	ldr	r1, [r3, #4]
	ldr	r2, [r2, #4092]
	cmp	r2, r1
	bne	.L2001
	cmp	r2, r7
	itt	hi
	movhi	r8, r6
	movhi	r7, r2
.L2001:
	cbz	r6, .L2005
	cbz	r7, .L2003
	ldr	r4, [r5, #3688]
	mov	r2, r3
	lsl	r0, r8, #7
	movs	r1, #128
	blx	r4
	mov	r4, r0
	cbz	r0, .L1998
.L2000:
	ldr	r0, [r5, #3696]
	mov	r4, #-1
	bl	kfree
	movs	r3, #0
	str	r3, [r5, #3696]
	b	.L1998
.L2005:
	movs	r6, #1
	b	.L2002
.L2003:
	mov	r2, #65536
	mov	r1, r7
	mov	r0, r3
	bl	memset
	add	r2, r0, #61440
	strd	r9, r6, [r0]
	str	r6, [r2, #4092]
	movw	r2, #64504
	strh	r2, [r0, #14]	@ movhi
.L1998:
	mov	r0, r4
	pop	{r3, r4, r5, r6, r7, r8, r9, pc}
.L2004:
	mvn	r4, #11
	b	.L1998
.L2007:
	.align	2
.L2006:
	.word	.LANCHOR0
	.word	1380668996
	.fnend
	.size	rk_sftl_vendor_storage_init, .-rk_sftl_vendor_storage_init
	.align	1
	.global	rk_sftl_vendor_read
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rk_sftl_vendor_read, %function
rk_sftl_vendor_read:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r3, r4, r5, r6, r7, lr}
	.save {r3, r4, r5, r6, r7, lr}
	mov	r6, r0
	ldr	r3, .L2014
	mov	r0, r1
	ldr	r5, [r3, #3696]
	cbz	r5, .L2013
	ldrh	r1, [r5, #10]
	add	r4, r5, #16
	movs	r3, #0
.L2010:
	cmp	r1, r3
	bhi	.L2012
.L2013:
	mov	r0, #-1
	b	.L2008
.L2012:
	ldrh	r7, [r4, r3, lsl #3]
	cmp	r7, r6
	bne	.L2011
	add	r3, r5, r3, lsl #3
	ldrh	r4, [r3, #20]
	ldrh	r1, [r3, #18]
	cmp	r4, r2
	it	cs
	movcs	r4, r2
	add	r1, r1, #1024
	mov	r2, r4
	add	r1, r1, r5
	bl	memcpy
	mov	r0, r4
.L2008:
	pop	{r3, r4, r5, r6, r7, pc}
.L2011:
	adds	r3, r3, #1
	b	.L2010
.L2015:
	.align	2
.L2014:
	.word	.LANCHOR0
	.fnend
	.size	rk_sftl_vendor_read, .-rk_sftl_vendor_read
	.align	1
	.global	rk_sftl_vendor_write
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rk_sftl_vendor_write, %function
rk_sftl_vendor_write:
	.fnstart
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, r7, r8, r9, r10, fp, lr}
	.save {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov	r9, r1
	ldr	r5, .L2035
	.pad #28
	sub	sp, sp, #28
	mov	r8, r2
	ldr	r4, [r5, #3696]
	str	r0, [sp, #4]
	cmp	r4, #0
	beq	.L2031
	ldrh	r3, [r4, #8]
	add	r7, r8, #63
	ldrh	r2, [r4, #10]
	bic	r7, r7, #63
	str	r3, [sp, #8]
	add	r3, r4, #16
	movs	r6, #0
.L2018:
	cmp	r6, r2
	bcc	.L2026
	ldrh	r1, [r4, #14]
	cmp	r1, r7
	bcc	.L2031
	add	r3, r4, r2, lsl #3
	ldr	r2, [sp, #4]
	uxth	r7, r7
	strh	r2, [r3, #16]	@ movhi
	mov	r2, r8
	ldrh	r0, [r4, #12]
	strh	r0, [r3, #18]	@ movhi
	strh	r8, [r3, #20]	@ movhi
	adds	r3, r0, r7
	add	r0, r0, #1024
	subs	r7, r1, r7
	strh	r3, [r4, #12]	@ movhi
	mov	r1, r9
	add	r0, r0, r4
	strh	r7, [r4, #14]	@ movhi
	bl	memcpy
	ldrh	r3, [r4, #10]
	add	r2, r4, #61440
	adds	r3, r3, #1
	strh	r3, [r4, #10]	@ movhi
	ldr	r3, [r4, #4]
	adds	r3, r3, #1
	str	r3, [r4, #4]
	str	r3, [r2, #4092]
	ldrh	r3, [r4, #8]
	adds	r3, r3, #1
	uxth	r3, r3
	cmp	r3, #1
	it	hi
	movhi	r3, #0
	strh	r3, [r4, #8]	@ movhi
	ldr	r3, [r5, #3692]
	b	.L2034
.L2026:
	ldrh	r1, [r3, r6, lsl #3]
	ldr	r0, [sp, #4]
	cmp	r1, r0
	bne	.L2019
	add	r5, r4, r6, lsl #3
	add	r3, r4, #1024
	ldrh	r1, [r5, #20]
	adds	r1, r1, #63
	bic	r1, r1, #63
	str	r1, [sp, #12]
	cmp	r8, r1
	bls	.L2020
	ldrh	r1, [r4, #14]
	cmp	r1, r7
	bcc	.L2031
	ldrh	fp, [r5, #18]
	subs	r2, r2, #1
	str	r2, [sp, #16]
.L2021:
	ldr	r2, [sp, #16]
	uxth	r10, fp
	adds	r5, r5, #8
	cmp	r2, r6
	bhi	.L2022
	add	r6, r4, r6, lsl #3
	ldr	r2, [sp, #4]
	uxtah	r0, r3, fp
	mov	r1, r9
	strh	r2, [r6, #16]	@ movhi
	mov	r2, r8
	strh	r10, [r6, #18]	@ movhi
	strh	r8, [r6, #20]	@ movhi
	bl	memcpy
	uxth	r3, r7
	ldrh	r7, [r4, #14]
	add	r10, r10, r3
	strh	r10, [r4, #12]	@ movhi
	subs	r7, r7, r3
	ldr	r3, [sp, #12]
	add	r7, r7, r3
	strh	r7, [r4, #14]	@ movhi
.L2023:
	add	r2, r4, #61440
	ldr	r3, [r4, #4]
	adds	r3, r3, #1
	str	r3, [r4, #4]
	str	r3, [r2, #4092]
	ldrh	r3, [r4, #8]
	adds	r3, r3, #1
	uxth	r3, r3
	cmp	r3, #1
	it	hi
	movhi	r3, #0
	strh	r3, [r4, #8]	@ movhi
	ldr	r3, .L2035
	ldr	r3, [r3, #3692]
.L2034:
	ldr	r0, [sp, #8]
	mov	r2, r4
	movs	r1, #128
	lsls	r0, r0, #7
	blx	r3
	movs	r0, #0
.L2016:
	add	sp, sp, #28
	@ sp needed
	pop	{r4, r5, r6, r7, r8, r9, r10, fp, pc}
.L2022:
	ldrh	r2, [r5, #16]
	add	r0, r3, fp
	strh	r2, [r5, #8]	@ movhi
	adds	r6, r6, #1
	ldrh	r2, [r5, #20]
	ldrh	r1, [r5, #18]
	strh	r2, [r5, #12]	@ movhi
	adds	r2, r2, #63
	strh	r10, [r5, #10]	@ movhi
	bic	r10, r2, #63
	add	r1, r1, r3
	mov	r2, r10
	str	r3, [sp, #20]
	add	fp, fp, r10
	bl	memcpy
	ldr	r3, [sp, #20]
	b	.L2021
.L2020:
	ldrh	r0, [r5, #18]
	mov	r2, r8
	mov	r1, r9
	add	r0, r0, r3
	bl	memcpy
	strh	r8, [r5, #20]	@ movhi
	b	.L2023
.L2019:
	adds	r6, r6, #1
	b	.L2018
.L2031:
	mov	r0, #-1
	b	.L2016
.L2036:
	.align	2
.L2035:
	.word	.LANCHOR0
	.fnend
	.size	rk_sftl_vendor_write, .-rk_sftl_vendor_write
	.section	.rodata.str1.1
.LC133:
	.ascii	"copy_from_user error %d %p %p\012\000"
	.text
	.align	1
	.global	rk_sftl_vendor_storage_ioctl
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rk_sftl_vendor_storage_ioctl, %function
rk_sftl_vendor_storage_ioctl:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	push	{r4, r5, r6, lr}
	.save {r4, r5, r6, lr}
	mov	r0, #4096
	mov	r6, r1
	mov	r4, r2
	bl	ftl_malloc
	mov	r5, r0
	cmp	r0, #0
	beq	.L2048
	ldr	r3, .L2055
	cmp	r6, r3
	beq	.L2039
	adds	r3, r3, #1
	cmp	r6, r3
	beq	.L2040
.L2053:
	mvn	r4, #13
.L2041:
	mov	r0, r5
	bl	kfree
.L2037:
	mov	r0, r4
	pop	{r4, r5, r6, pc}
.L2039:
	mov	r1, r4
	movs	r2, #8
	bl	_copy_from_user
	cbz	r0, .L2042
	mov	r2, r4
	mov	r1, #256
.L2054:
	ldr	r0, .L2055+4
	bl	sftl_printk
	b	.L2053
.L2042:
	ldr	r2, [r5]
	ldr	r3, .L2055+8
	cmp	r2, r3
	beq	.L2043
.L2044:
	mov	r4, #-1
	b	.L2041
.L2043:
	ldrh	r2, [r5, #6]
	add	r1, r5, #8
	ldrh	r0, [r5, #4]
	bl	rk_sftl_vendor_read
	adds	r3, r0, #1
	beq	.L2044
	mov	r3, sp
	strh	r0, [r5, #6]	@ movhi
	bic	r3, r3, #8160
	uxth	r2, r0
	bic	r3, r3, #31
	adds	r2, r2, #8
	ldr	r3, [r3, #8]
	.syntax unified
@ 177 "./include/linux/uaccess.h" 1
	.syntax unified
adds r1, r4, r2; sbcscc r1, r1, r3; movcc r3, #0
@ 0 "" 2
	.thumb
	.syntax unified
	cmp	r3, #0
	bne	.L2053
	mov	r0, r4
	mov	r1, r5
	bl	arm_copy_to_user
	mov	r4, r0
	cmp	r0, #0
	beq	.L2041
	b	.L2053
.L2040:
	mov	r1, r4
	movs	r2, #8
	bl	_copy_from_user
	cbz	r0, .L2046
	mov	r2, r4
	mov	r1, #276
	b	.L2054
.L2046:
	ldr	r2, [r5]
	ldr	r3, .L2055+8
	cmp	r2, r3
	bne	.L2044
	ldrh	r2, [r5, #6]
	movw	r3, #4087
	cmp	r2, r3
	bhi	.L2044
	adds	r2, r2, #8
	mov	r1, r4
	mov	r0, r5
	uxth	r2, r2
	bl	_copy_from_user
	cbz	r0, .L2047
	mov	r2, r4
	movw	r1, #283
	b	.L2054
.L2047:
	ldrh	r2, [r5, #6]
	add	r1, r5, #8
	ldrh	r0, [r5, #4]
	bl	rk_sftl_vendor_write
	mov	r4, r0
	b	.L2041
.L2048:
	mov	r4, #-1
	b	.L2037
.L2056:
	.align	2
.L2055:
	.word	1074034177
	.word	.LC133
	.word	1448232273
	.fnend
	.size	rk_sftl_vendor_storage_ioctl, .-rk_sftl_vendor_storage_ioctl
	.align	1
	.global	rk_sftl_vendor_register
	.syntax unified
	.thumb
	.thumb_func
	.fpu softvfp
	.type	rk_sftl_vendor_register, %function
rk_sftl_vendor_register:
	.fnstart
	@ args = 0, pretend = 0, frame = 0
	@ frame_needed = 0, uses_anonymous_args = 0
	@ link register save eliminated.
	ldr	r0, .L2058
	b	misc_register
.L2059:
	.align	2
.L2058:
	.word	.LANCHOR2+12
	.fnend
	.size	rk_sftl_vendor_register, .-rk_sftl_vendor_register
	.section	.rodata.str1.1
.LC134:
	.ascii	"vendor_storage\000"
	.global	g_nand_ops
	.global	g_nand_phy_info
	.global	gc_ink_free_return_value
	.global	check_vpc_table
	.global	FtlUpdateVaildLpnCount
	.global	g_ect_tbl_power_up_flush
	.global	power_up_flag
	.global	gFtlInitStatus
	.global	DeviceCapacity
	.global	g_power_lost_recovery_flag
	.global	c_mlc_erase_count_value
	.global	g_recovery_ppa_tbl
	.global	g_recovery_page_min_ver
	.global	g_recovery_page_num
	.global	sftl_nand_check_spare_buf
	.global	sftl_temp_buf
	.global	sftl_nand_check_buf
	.global	g_cur_erase_blk
	.global	g_gc_skip_write_count
	.global	g_gc_head_data_block_count
	.global	g_gc_head_data_block
	.global	g_ftl_nand_free_count
	.global	g_in_swl_replace
	.global	g_in_gc_progress
	.global	g_max_erase_count
	.global	g_totle_sys_slc_erase_count
	.global	g_totle_slc_erase_count
	.global	g_min_erase_count
	.global	g_totle_avg_erase_count
	.global	g_totle_mlc_erase_count
	.global	g_totle_l2p_write_count
	.global	g_totle_cache_write_count
	.global	g_tmp_data_superblock_id
	.global	g_totle_read_page_count
	.global	g_totle_discard_page_count
	.global	g_totle_read_sector
	.global	g_totle_write_sector
	.global	g_totle_write_page_count
	.global	g_totle_gc_page_count
	.global	g_gc_blk_index
	.global	g_gc_merge_free_blk_threshold
	.global	g_gc_free_blk_threshold
	.global	g_gc_bad_block_temp_tbl
	.global	g_gc_bad_block_gc_index
	.global	g_gc_bad_block_temp_num
	.global	g_gc_next_blk_1
	.global	g_gc_next_blk
	.global	g_gc_cur_blk_max_valid_pages
	.global	g_gc_cur_blk_valid_pages
	.global	g_gc_page_offset
	.global	g_gc_blk_num
	.global	p_gc_blk_tbl
	.global	p_gc_page_info
	.global	g_sys_ext_data
	.global	g_sys_save_data
	.global	gp_last_act_superblock
	.global	g_gc_superblock
	.global	g_gc_temp_superblock
	.global	g_buffer_superblock
	.global	g_active_superblock
	.global	g_num_data_superblocks
	.global	g_num_free_superblocks
	.global	p_data_block_list_tail
	.global	p_data_block_list_head
	.global	p_free_data_block_list_head
	.global	p_data_block_list_table
	.global	g_l2p_last_update_region_id
	.global	p_l2p_map_buf
	.global	p_l2p_ram_map
	.global	g_totle_vendor_block
	.global	p_vendor_region_ppn_table
	.global	p_vendor_block_ver_table
	.global	p_vendor_block_valid_page_count
	.global	p_vendor_block_table
	.global	g_totle_map_block
	.global	p_map_region_ppn_table
	.global	p_map_block_ver_table
	.global	p_map_block_valid_page_count
	.global	p_map_block_table
	.global	p_valid_page_count_check_table
	.global	p_valid_page_count_table
	.global	g_totle_swl_count
	.global	p_swl_mul_table
	.global	p_erase_count_table
	.global	g_ect_tbl_info_size
	.global	gp_ect_tbl_info
	.global	g_gc_num_req
	.global	c_gc_page_buf_num
	.global	gp_gc_page_buf_info
	.global	p_gc_data_buf
	.global	p_gc_spare_buf
	.global	p_io_spare_buf
	.global	p_io_data_buf_1
	.global	p_io_data_buf_0
	.global	p_sys_spare_buf
	.global	p_vendor_data_buf
	.global	p_sys_data_buf_1
	.global	p_sys_data_buf
	.global	p_plane_order_table
	.global	req_gc_dst
	.global	req_gc
	.global	req_erase
	.global	req_prgm
	.global	req_read
	.global	req_sys
	.global	gVendorBlkInfo
	.global	gL2pMapInfo
	.global	gSysFreeQueue
	.global	gSysInfo
	.global	gBbtInfo
	.global	g_MaxLbn
	.global	g_VaildLpn
	.global	g_MaxLpn
	.global	g_MaxLbaSector
	.global	g_GlobalDataVersion
	.global	g_GlobalSysVersion
	.global	ftl_gc_temp_power_lost_recovery_flag
	.global	c_ftl_nand_max_data_blks
	.global	c_ftl_nand_data_op_blks_per_plane
	.global	c_ftl_nand_data_blks_per_plane
	.global	c_ftl_nand_max_sys_blks
	.global	c_ftl_nand_init_sys_blks_per_plane
	.global	c_ftl_nand_sys_blks_per_plane
	.global	c_ftl_vendor_part_size
	.global	c_ftl_nand_max_vendor_blks
	.global	c_ftl_nand_max_map_blks
	.global	c_ftl_nand_map_blks_per_plane
	.global	c_ftl_nand_vendor_region_num
	.global	c_ftl_nand_l2pmap_ram_region_num
	.global	c_ftl_nand_map_region_num
	.global	c_ftl_nand_totle_phy_blks
	.global	c_ftl_nand_reserved_blks
	.global	c_ftl_nand_byte_pre_oob
	.global	c_ftl_nand_byte_pre_page
	.global	c_ftl_nand_sec_pre_page_shift
	.global	c_ftl_nand_sec_pre_page
	.global	c_ftl_nand_page_pre_super_blk
	.global	c_ftl_nand_page_pre_slc_blk
	.global	c_ftl_nand_page_pre_blk
	.global	c_ftl_nand_bbm_buf_size
	.global	c_ftl_nand_ext_blk_pre_plane
	.global	c_ftl_nand_blk_pre_plane
	.global	c_ftl_nand_planes_num
	.global	c_ftl_nand_blks_per_die_shift
	.global	c_ftl_nand_blks_per_die
	.global	c_ftl_nand_planes_per_die
	.global	c_ftl_nand_die_num
	.global	c_ftl_nand_type
	.section	.rodata
	.align	2
	.set	.LANCHOR1,. + 0
	.type	__func__.30, %object
	.size	__func__.30, 17
__func__.30:
	.ascii	"INSERT_DATA_LIST\000"
	.type	__func__.31, %object
	.size	__func__.31, 17
__func__.31:
	.ascii	"INSERT_FREE_LIST\000"
	.type	__func__.29, %object
	.size	__func__.29, 17
__func__.29:
	.ascii	"List_remove_node\000"
	.type	__func__.28, %object
	.size	__func__.28, 22
__func__.28:
	.ascii	"List_update_data_list\000"
	.type	__func__.22, %object
	.size	__func__.22, 22
__func__.22:
	.ascii	"select_l2p_ram_region\000"
	.type	__func__.14, %object
	.size	__func__.14, 16
__func__.14:
	.ascii	"make_superblock\000"
	.type	__func__.8, %object
	.size	__func__.8, 19
__func__.8:
	.ascii	"get_new_active_ppa\000"
	.type	__func__.1, %object
	.size	__func__.1, 17
__func__.1:
	.ascii	"FlashEraseBlocks\000"
	.type	__func__.26, %object
	.size	__func__.26, 26
__func__.26:
	.ascii	"ftl_map_blk_alloc_new_blk\000"
	.type	__func__.37, %object
	.size	__func__.37, 11
__func__.37:
	.ascii	"FtlMemInit\000"
	.type	__func__.34, %object
	.size	__func__.34, 14
__func__.34:
	.ascii	"FtlBbt2Bitmap\000"
	.type	__func__.13, %object
	.size	__func__.13, 18
__func__.13:
	.ascii	"SupperBlkListInit\000"
	.type	__func__.3, %object
	.size	__func__.3, 15
__func__.3:
	.ascii	"FlashReadPages\000"
	.type	__func__.19, %object
	.size	__func__.19, 14
__func__.19:
	.ascii	"FtlScanSysBlk\000"
	.type	__func__.32, %object
	.size	__func__.32, 11
__func__.32:
	.ascii	"FtlLoadBbt\000"
	.type	__func__.2, %object
	.size	__func__.2, 15
__func__.2:
	.ascii	"FlashProgPages\000"
	.type	__func__.10, %object
	.size	__func__.10, 25
__func__.10:
	.ascii	"allocate_data_superblock\000"
	.type	__func__.7, %object
	.size	__func__.7, 16
__func__.7:
	.ascii	"update_vpc_list\000"
	.type	__func__.6, %object
	.size	__func__.6, 20
__func__.6:
	.ascii	"decrement_vpc_count\000"
	.type	__func__.23, %object
	.size	__func__.23, 16
__func__.23:
	.ascii	"FtlMapWritePage\000"
	.type	__func__.27, %object
	.size	__func__.27, 16
__func__.27:
	.ascii	"load_l2p_region\000"
	.type	__func__.25, %object
	.size	__func__.25, 15
__func__.25:
	.ascii	"ftl_map_blk_gc\000"
	.type	__func__.24, %object
	.size	__func__.24, 31
__func__.24:
	.ascii	"Ftl_write_map_blk_to_last_page\000"
	.type	__func__.21, %object
	.size	__func__.21, 9
__func__.21:
	.ascii	"log2phys\000"
	.type	__func__.16, %object
	.size	__func__.16, 16
__func__.16:
	.ascii	"FtlReUsePrevPpa\000"
	.type	__func__.15, %object
	.size	__func__.15, 22
__func__.15:
	.ascii	"FtlRecoverySuperblock\000"
	.type	__func__.11, %object
	.size	__func__.11, 14
__func__.11:
	.ascii	"ftl_check_vpc\000"
	.type	__func__.20, %object
	.size	__func__.20, 15
__func__.20:
	.ascii	"FtlVpcTblFlush\000"
	.type	__func__.12, %object
	.size	__func__.12, 21
__func__.12:
	.ascii	"FtlVpcCheckAndModify\000"
	.type	__func__.9, %object
	.size	__func__.9, 29
__func__.9:
	.ascii	"allocate_new_data_superblock\000"
	.type	__func__.36, %object
	.size	__func__.36, 13
__func__.36:
	.ascii	"FtlProgPages\000"
	.type	__func__.5, %object
	.size	__func__.5, 19
__func__.5:
	.ascii	"FtlGcFreeTempBlock\000"
	.type	__func__.4, %object
	.size	__func__.4, 23
__func__.4:
	.ascii	"rk_ftl_garbage_collect\000"
	.type	__func__.35, %object
	.size	__func__.35, 9
__func__.35:
	.ascii	"FtlWrite\000"
	.type	__func__.18, %object
	.size	__func__.18, 15
__func__.18:
	.ascii	"FtlLoadSysInfo\000"
	.type	__func__.17, %object
	.size	__func__.17, 18
__func__.17:
	.ascii	"FtlMapTblRecovery\000"
	.type	__func__.0, %object
	.size	__func__.0, 14
__func__.0:
	.ascii	"FtlWriteToIDB\000"
	.space	1
	.type	rk_sftl_vendor_storage_fops, %object
	.size	rk_sftl_vendor_storage_fops, 128
rk_sftl_vendor_storage_fops:
	.space	40
	.word	rk_sftl_vendor_storage_ioctl
	.word	rk_sftl_vendor_storage_ioctl
	.space	80
	.data
	.align	2
	.set	.LANCHOR2,. + 0
	.type	gFtlInitStatus, %object
	.size	gFtlInitStatus, 4
gFtlInitStatus:
	.word	-1
	.type	ftl_gc_temp_block_bops_scan_page_addr, %object
	.size	ftl_gc_temp_block_bops_scan_page_addr, 2
ftl_gc_temp_block_bops_scan_page_addr:
	.short	-1
	.space	2
	.type	power_up_flag, %object
	.size	power_up_flag, 4
power_up_flag:
	.word	1
	.type	rkflash_vender_storage_dev, %object
	.size	rkflash_vender_storage_dev, 40
rkflash_vender_storage_dev:
	.word	255
	.word	.LC134
	.word	rk_sftl_vendor_storage_fops
	.space	28
	.bss
	.align	2
	.set	.LANCHOR0,. + 0
	.type	g_nand_phy_info, %object
	.size	g_nand_phy_info, 24
g_nand_phy_info:
	.space	24
	.type	g_active_superblock, %object
	.size	g_active_superblock, 48
g_active_superblock:
	.space	48
	.type	p_valid_page_count_table, %object
	.size	p_valid_page_count_table, 4
p_valid_page_count_table:
	.space	4
	.type	g_buffer_superblock, %object
	.size	g_buffer_superblock, 48
g_buffer_superblock:
	.space	48
	.type	g_gc_temp_superblock, %object
	.size	g_gc_temp_superblock, 48
g_gc_temp_superblock:
	.space	48
	.type	g_gc_superblock, %object
	.size	g_gc_superblock, 48
g_gc_superblock:
	.space	48
	.type	g_gc_next_blk_1, %object
	.size	g_gc_next_blk_1, 2
g_gc_next_blk_1:
	.space	2
	.type	g_gc_next_blk, %object
	.size	g_gc_next_blk, 2
g_gc_next_blk:
	.space	2
	.type	g_num_free_superblocks, %object
	.size	g_num_free_superblocks, 2
g_num_free_superblocks:
	.space	2
	.space	2
	.type	c_ftl_nand_sys_blks_per_plane, %object
	.size	c_ftl_nand_sys_blks_per_plane, 4
c_ftl_nand_sys_blks_per_plane:
	.space	4
	.type	c_ftl_nand_planes_num, %object
	.size	c_ftl_nand_planes_num, 2
c_ftl_nand_planes_num:
	.space	2
	.space	2
	.type	c_ftl_nand_max_sys_blks, %object
	.size	c_ftl_nand_max_sys_blks, 4
c_ftl_nand_max_sys_blks:
	.space	4
	.type	c_ftl_nand_data_blks_per_plane, %object
	.size	c_ftl_nand_data_blks_per_plane, 2
c_ftl_nand_data_blks_per_plane:
	.space	2
	.type	c_ftl_nand_blk_pre_plane, %object
	.size	c_ftl_nand_blk_pre_plane, 2
c_ftl_nand_blk_pre_plane:
	.space	2
	.type	c_ftl_nand_max_data_blks, %object
	.size	c_ftl_nand_max_data_blks, 4
c_ftl_nand_max_data_blks:
	.space	4
	.type	c_ftl_nand_totle_phy_blks, %object
	.size	c_ftl_nand_totle_phy_blks, 4
c_ftl_nand_totle_phy_blks:
	.space	4
	.type	c_ftl_nand_type, %object
	.size	c_ftl_nand_type, 2
c_ftl_nand_type:
	.space	2
	.type	c_ftl_nand_die_num, %object
	.size	c_ftl_nand_die_num, 2
c_ftl_nand_die_num:
	.space	2
	.type	c_ftl_nand_planes_per_die, %object
	.size	c_ftl_nand_planes_per_die, 2
c_ftl_nand_planes_per_die:
	.space	2
	.type	c_ftl_nand_sec_pre_page, %object
	.size	c_ftl_nand_sec_pre_page, 2
c_ftl_nand_sec_pre_page:
	.space	2
	.type	p_plane_order_table, %object
	.size	p_plane_order_table, 32
p_plane_order_table:
	.space	32
	.type	c_mlc_erase_count_value, %object
	.size	c_mlc_erase_count_value, 2
c_mlc_erase_count_value:
	.space	2
	.type	c_ftl_nand_ext_blk_pre_plane, %object
	.size	c_ftl_nand_ext_blk_pre_plane, 2
c_ftl_nand_ext_blk_pre_plane:
	.space	2
	.type	c_ftl_vendor_part_size, %object
	.size	c_ftl_vendor_part_size, 2
c_ftl_vendor_part_size:
	.space	2
	.type	c_ftl_nand_blks_per_die, %object
	.size	c_ftl_nand_blks_per_die, 2
c_ftl_nand_blks_per_die:
	.space	2
	.type	c_ftl_nand_blks_per_die_shift, %object
	.size	c_ftl_nand_blks_per_die_shift, 2
c_ftl_nand_blks_per_die_shift:
	.space	2
	.type	c_ftl_nand_page_pre_blk, %object
	.size	c_ftl_nand_page_pre_blk, 2
c_ftl_nand_page_pre_blk:
	.space	2
	.type	c_ftl_nand_page_pre_slc_blk, %object
	.size	c_ftl_nand_page_pre_slc_blk, 2
c_ftl_nand_page_pre_slc_blk:
	.space	2
	.type	c_ftl_nand_page_pre_super_blk, %object
	.size	c_ftl_nand_page_pre_super_blk, 2
c_ftl_nand_page_pre_super_blk:
	.space	2
	.type	c_ftl_nand_sec_pre_page_shift, %object
	.size	c_ftl_nand_sec_pre_page_shift, 2
c_ftl_nand_sec_pre_page_shift:
	.space	2
	.type	c_ftl_nand_byte_pre_page, %object
	.size	c_ftl_nand_byte_pre_page, 2
c_ftl_nand_byte_pre_page:
	.space	2
	.type	c_ftl_nand_byte_pre_oob, %object
	.size	c_ftl_nand_byte_pre_oob, 2
c_ftl_nand_byte_pre_oob:
	.space	2
	.type	c_ftl_nand_reserved_blks, %object
	.size	c_ftl_nand_reserved_blks, 2
c_ftl_nand_reserved_blks:
	.space	2
	.type	DeviceCapacity, %object
	.size	DeviceCapacity, 4
DeviceCapacity:
	.space	4
	.type	c_ftl_nand_max_vendor_blks, %object
	.size	c_ftl_nand_max_vendor_blks, 2
c_ftl_nand_max_vendor_blks:
	.space	2
	.type	c_ftl_nand_vendor_region_num, %object
	.size	c_ftl_nand_vendor_region_num, 2
c_ftl_nand_vendor_region_num:
	.space	2
	.type	c_ftl_nand_map_blks_per_plane, %object
	.size	c_ftl_nand_map_blks_per_plane, 2
c_ftl_nand_map_blks_per_plane:
	.space	2
	.space	2
	.type	c_ftl_nand_max_map_blks, %object
	.size	c_ftl_nand_max_map_blks, 4
c_ftl_nand_max_map_blks:
	.space	4
	.type	c_ftl_nand_init_sys_blks_per_plane, %object
	.size	c_ftl_nand_init_sys_blks_per_plane, 4
c_ftl_nand_init_sys_blks_per_plane:
	.space	4
	.type	c_ftl_nand_map_region_num, %object
	.size	c_ftl_nand_map_region_num, 2
c_ftl_nand_map_region_num:
	.space	2
	.type	c_ftl_nand_l2pmap_ram_region_num, %object
	.size	c_ftl_nand_l2pmap_ram_region_num, 2
c_ftl_nand_l2pmap_ram_region_num:
	.space	2
	.type	g_MaxLbaSector, %object
	.size	g_MaxLbaSector, 4
g_MaxLbaSector:
	.space	4
	.type	g_totle_vendor_block, %object
	.size	g_totle_vendor_block, 2
g_totle_vendor_block:
	.space	2
	.space	2
	.type	p_vendor_block_table, %object
	.size	p_vendor_block_table, 4
p_vendor_block_table:
	.space	4
	.type	gBbtInfo, %object
	.size	gBbtInfo, 60
gBbtInfo:
	.space	60
	.type	gSysFreeQueue, %object
	.size	gSysFreeQueue, 2056
gSysFreeQueue:
	.space	2056
	.type	g_sys_save_data, %object
	.size	g_sys_save_data, 48
g_sys_save_data:
	.space	48
	.type	p_data_block_list_table, %object
	.size	p_data_block_list_table, 4
p_data_block_list_table:
	.space	4
	.type	p_data_block_list_head, %object
	.size	p_data_block_list_head, 4
p_data_block_list_head:
	.space	4
	.type	p_data_block_list_tail, %object
	.size	p_data_block_list_tail, 4
p_data_block_list_tail:
	.space	4
	.type	g_num_data_superblocks, %object
	.size	g_num_data_superblocks, 2
g_num_data_superblocks:
	.space	2
	.space	2
	.type	p_free_data_block_list_head, %object
	.size	p_free_data_block_list_head, 4
p_free_data_block_list_head:
	.space	4
	.type	p_erase_count_table, %object
	.size	p_erase_count_table, 4
p_erase_count_table:
	.space	4
	.type	p_l2p_ram_map, %object
	.size	p_l2p_ram_map, 4
p_l2p_ram_map:
	.space	4
	.type	g_l2p_last_update_region_id, %object
	.size	g_l2p_last_update_region_id, 2
g_l2p_last_update_region_id:
	.space	2
	.type	FtlUpdateVaildLpnCount, %object
	.size	FtlUpdateVaildLpnCount, 2
FtlUpdateVaildLpnCount:
	.space	2
	.type	g_VaildLpn, %object
	.size	g_VaildLpn, 4
g_VaildLpn:
	.space	4
	.type	g_MaxLpn, %object
	.size	g_MaxLpn, 4
g_MaxLpn:
	.space	4
	.type	g_totle_read_page_count, %object
	.size	g_totle_read_page_count, 4
g_totle_read_page_count:
	.space	4
	.type	g_totle_discard_page_count, %object
	.size	g_totle_discard_page_count, 4
g_totle_discard_page_count:
	.space	4
	.type	g_totle_write_page_count, %object
	.size	g_totle_write_page_count, 4
g_totle_write_page_count:
	.space	4
	.type	g_totle_cache_write_count, %object
	.size	g_totle_cache_write_count, 4
g_totle_cache_write_count:
	.space	4
	.type	g_totle_l2p_write_count, %object
	.size	g_totle_l2p_write_count, 4
g_totle_l2p_write_count:
	.space	4
	.type	g_totle_gc_page_count, %object
	.size	g_totle_gc_page_count, 4
g_totle_gc_page_count:
	.space	4
	.type	g_totle_write_sector, %object
	.size	g_totle_write_sector, 4
g_totle_write_sector:
	.space	4
	.type	g_totle_read_sector, %object
	.size	g_totle_read_sector, 4
g_totle_read_sector:
	.space	4
	.type	g_GlobalSysVersion, %object
	.size	g_GlobalSysVersion, 4
g_GlobalSysVersion:
	.space	4
	.type	g_GlobalDataVersion, %object
	.size	g_GlobalDataVersion, 4
g_GlobalDataVersion:
	.space	4
	.type	g_totle_mlc_erase_count, %object
	.size	g_totle_mlc_erase_count, 4
g_totle_mlc_erase_count:
	.space	4
	.type	g_totle_slc_erase_count, %object
	.size	g_totle_slc_erase_count, 4
g_totle_slc_erase_count:
	.space	4
	.type	g_totle_avg_erase_count, %object
	.size	g_totle_avg_erase_count, 4
g_totle_avg_erase_count:
	.space	4
	.type	g_totle_sys_slc_erase_count, %object
	.size	g_totle_sys_slc_erase_count, 4
g_totle_sys_slc_erase_count:
	.space	4
	.type	g_max_erase_count, %object
	.size	g_max_erase_count, 4
g_max_erase_count:
	.space	4
	.type	g_min_erase_count, %object
	.size	g_min_erase_count, 4
g_min_erase_count:
	.space	4
	.type	c_ftl_nand_data_op_blks_per_plane, %object
	.size	c_ftl_nand_data_op_blks_per_plane, 2
c_ftl_nand_data_op_blks_per_plane:
	.space	2
	.space	2
	.type	gSysInfo, %object
	.size	gSysInfo, 16
gSysInfo:
	.space	16
	.type	g_sys_ext_data, %object
	.size	g_sys_ext_data, 512
g_sys_ext_data:
	.space	512
	.type	g_gc_free_blk_threshold, %object
	.size	g_gc_free_blk_threshold, 2
g_gc_free_blk_threshold:
	.space	2
	.type	g_gc_merge_free_blk_threshold, %object
	.size	g_gc_merge_free_blk_threshold, 2
g_gc_merge_free_blk_threshold:
	.space	2
	.type	g_gc_skip_write_count, %object
	.size	g_gc_skip_write_count, 4
g_gc_skip_write_count:
	.space	4
	.type	g_gc_blk_index, %object
	.size	g_gc_blk_index, 2
g_gc_blk_index:
	.space	2
	.space	2
	.type	g_in_swl_replace, %object
	.size	g_in_swl_replace, 4
g_in_swl_replace:
	.space	4
	.type	g_gc_num_req, %object
	.size	g_gc_num_req, 4
g_gc_num_req:
	.space	4
	.type	gp_gc_page_buf_info, %object
	.size	gp_gc_page_buf_info, 4
gp_gc_page_buf_info:
	.space	4
	.type	p_gc_data_buf, %object
	.size	p_gc_data_buf, 4
p_gc_data_buf:
	.space	4
	.type	p_gc_spare_buf, %object
	.size	p_gc_spare_buf, 4
p_gc_spare_buf:
	.space	4
	.type	req_gc, %object
	.size	req_gc, 4
req_gc:
	.space	4
	.type	c_gc_page_buf_num, %object
	.size	c_gc_page_buf_num, 4
c_gc_page_buf_num:
	.space	4
	.type	p_gc_blk_tbl, %object
	.size	p_gc_blk_tbl, 4
p_gc_blk_tbl:
	.space	4
	.type	g_gc_blk_num, %object
	.size	g_gc_blk_num, 2
g_gc_blk_num:
	.space	2
	.space	2
	.type	p_gc_page_info, %object
	.size	p_gc_page_info, 4
p_gc_page_info:
	.space	4
	.type	g_gc_page_offset, %object
	.size	g_gc_page_offset, 2
g_gc_page_offset:
	.space	2
	.type	g_gc_bad_block_temp_num, %object
	.size	g_gc_bad_block_temp_num, 2
g_gc_bad_block_temp_num:
	.space	2
	.type	g_gc_bad_block_temp_tbl, %object
	.size	g_gc_bad_block_temp_tbl, 34
g_gc_bad_block_temp_tbl:
	.space	34
	.type	g_gc_bad_block_gc_index, %object
	.size	g_gc_bad_block_gc_index, 2
g_gc_bad_block_gc_index:
	.space	2
	.type	g_nand_ops, %object
	.size	g_nand_ops, 24
g_nand_ops:
	.space	24
	.type	req_erase, %object
	.size	req_erase, 4
req_erase:
	.space	4
	.type	g_in_gc_progress, %object
	.size	g_in_gc_progress, 4
g_in_gc_progress:
	.space	4
	.type	g_gc_head_data_block, %object
	.size	g_gc_head_data_block, 4
g_gc_head_data_block:
	.space	4
	.type	g_gc_head_data_block_count, %object
	.size	g_gc_head_data_block_count, 4
g_gc_head_data_block_count:
	.space	4
	.type	g_cur_erase_blk, %object
	.size	g_cur_erase_blk, 4
g_cur_erase_blk:
	.space	4
	.type	req_read, %object
	.size	req_read, 4
req_read:
	.space	4
	.type	req_gc_dst, %object
	.size	req_gc_dst, 4
req_gc_dst:
	.space	4
	.type	req_prgm, %object
	.size	req_prgm, 4
req_prgm:
	.space	4
	.type	p_sys_data_buf, %object
	.size	p_sys_data_buf, 4
p_sys_data_buf:
	.space	4
	.type	p_sys_data_buf_1, %object
	.size	p_sys_data_buf_1, 4
p_sys_data_buf_1:
	.space	4
	.type	p_vendor_data_buf, %object
	.size	p_vendor_data_buf, 4
p_vendor_data_buf:
	.space	4
	.type	p_io_data_buf_0, %object
	.size	p_io_data_buf_0, 4
p_io_data_buf_0:
	.space	4
	.type	p_io_data_buf_1, %object
	.size	p_io_data_buf_1, 4
p_io_data_buf_1:
	.space	4
	.type	sftl_nand_check_buf, %object
	.size	sftl_nand_check_buf, 4
sftl_nand_check_buf:
	.space	4
	.type	sftl_temp_buf, %object
	.size	sftl_temp_buf, 4
sftl_temp_buf:
	.space	4
	.type	sftl_nand_check_spare_buf, %object
	.size	sftl_nand_check_spare_buf, 4
sftl_nand_check_spare_buf:
	.space	4
	.type	p_sys_spare_buf, %object
	.size	p_sys_spare_buf, 4
p_sys_spare_buf:
	.space	4
	.type	p_io_spare_buf, %object
	.size	p_io_spare_buf, 4
p_io_spare_buf:
	.space	4
	.type	g_ect_tbl_info_size, %object
	.size	g_ect_tbl_info_size, 2
g_ect_tbl_info_size:
	.space	2
	.space	2
	.type	p_swl_mul_table, %object
	.size	p_swl_mul_table, 4
p_swl_mul_table:
	.space	4
	.type	gp_ect_tbl_info, %object
	.size	gp_ect_tbl_info, 4
gp_ect_tbl_info:
	.space	4
	.type	p_valid_page_count_check_table, %object
	.size	p_valid_page_count_check_table, 4
p_valid_page_count_check_table:
	.space	4
	.type	p_map_block_table, %object
	.size	p_map_block_table, 4
p_map_block_table:
	.space	4
	.type	p_map_block_valid_page_count, %object
	.size	p_map_block_valid_page_count, 4
p_map_block_valid_page_count:
	.space	4
	.type	p_vendor_block_valid_page_count, %object
	.size	p_vendor_block_valid_page_count, 4
p_vendor_block_valid_page_count:
	.space	4
	.type	p_vendor_block_ver_table, %object
	.size	p_vendor_block_ver_table, 4
p_vendor_block_ver_table:
	.space	4
	.type	p_vendor_region_ppn_table, %object
	.size	p_vendor_region_ppn_table, 4
p_vendor_region_ppn_table:
	.space	4
	.type	p_map_region_ppn_table, %object
	.size	p_map_region_ppn_table, 4
p_map_region_ppn_table:
	.space	4
	.type	p_map_block_ver_table, %object
	.size	p_map_block_ver_table, 4
p_map_block_ver_table:
	.space	4
	.type	p_l2p_map_buf, %object
	.size	p_l2p_map_buf, 4
p_l2p_map_buf:
	.space	4
	.type	c_ftl_nand_bbm_buf_size, %object
	.size	c_ftl_nand_bbm_buf_size, 2
c_ftl_nand_bbm_buf_size:
	.space	2
	.space	2
	.type	gL2pMapInfo, %object
	.size	gL2pMapInfo, 44
gL2pMapInfo:
	.space	44
	.type	g_totle_map_block, %object
	.size	g_totle_map_block, 2
g_totle_map_block:
	.space	2
	.type	g_tmp_data_superblock_id, %object
	.size	g_tmp_data_superblock_id, 2
g_tmp_data_superblock_id:
	.space	2
	.type	g_totle_swl_count, %object
	.size	g_totle_swl_count, 4
g_totle_swl_count:
	.space	4
	.type	ftl_gc_temp_power_lost_recovery_flag, %object
	.size	ftl_gc_temp_power_lost_recovery_flag, 4
ftl_gc_temp_power_lost_recovery_flag:
	.space	4
	.type	g_recovery_page_min_ver, %object
	.size	g_recovery_page_min_ver, 4
g_recovery_page_min_ver:
	.space	4
	.type	req_sys, %object
	.size	req_sys, 20
req_sys:
	.space	20
	.type	g_power_lost_recovery_flag, %object
	.size	g_power_lost_recovery_flag, 2
g_power_lost_recovery_flag:
	.space	2
	.space	2
	.type	g_recovery_page_num, %object
	.size	g_recovery_page_num, 4
g_recovery_page_num:
	.space	4
	.type	g_recovery_ppa_tbl, %object
	.size	g_recovery_ppa_tbl, 128
g_recovery_ppa_tbl:
	.space	128
	.type	gVendorBlkInfo, %object
	.size	gVendorBlkInfo, 44
gVendorBlkInfo:
	.space	44
	.type	g_ect_tbl_power_up_flush, %object
	.size	g_ect_tbl_power_up_flush, 2
g_ect_tbl_power_up_flush:
	.space	2
	.space	2
	.type	gc_discard_updated, %object
	.size	gc_discard_updated, 4
gc_discard_updated:
	.space	4
	.type	gc_ink_free_return_value, %object
	.size	gc_ink_free_return_value, 2
gc_ink_free_return_value:
	.space	2
	.type	g_gc_cur_blk_valid_pages, %object
	.size	g_gc_cur_blk_valid_pages, 2
g_gc_cur_blk_valid_pages:
	.space	2
	.type	g_gc_cur_blk_max_valid_pages, %object
	.size	g_gc_cur_blk_max_valid_pages, 2
g_gc_cur_blk_max_valid_pages:
	.space	2
	.space	2
	.type	g_ftl_nand_free_count, %object
	.size	g_ftl_nand_free_count, 4
g_ftl_nand_free_count:
	.space	4
	.type	g_MaxLbn, %object
	.size	g_MaxLbn, 4
g_MaxLbn:
	.space	4
	.type	idb_need_write_back, %object
	.size	idb_need_write_back, 4
idb_need_write_back:
	.space	4
	.type	idb_buf, %object
	.size	idb_buf, 4
idb_buf:
	.space	4
	.type	gp_flash_check_buf, %object
	.size	gp_flash_check_buf, 4
gp_flash_check_buf:
	.space	4
	.type	_flash_read, %object
	.size	_flash_read, 4
_flash_read:
	.space	4
	.type	_flash_write, %object
	.size	_flash_write, 4
_flash_write:
	.space	4
	.type	g_vendor, %object
	.size	g_vendor, 4
g_vendor:
	.space	4
	.type	check_vpc_table, %object
	.size	check_vpc_table, 16384
check_vpc_table:
	.space	16384
	.type	gp_last_act_superblock, %object
	.size	gp_last_act_superblock, 4
gp_last_act_superblock:
	.space	4
	.ident	"GCC: (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 10.3.1 20210621"
	.section	.note.GNU-stack,"",%progbits